@@ -17,13 +20,10 @@
- ×
+ ×
@@ -40,11 +40,13 @@ const props = withDefaults(
size?: 'sm' | 'md' | 'lg';
zIndex?: 30 | 50;
noPadding?: boolean;
+ labelId?: string;
}>(),
{
size: 'md',
zIndex: 50,
noPadding: false,
+ labelId: undefined,
}
);
defineEmits<{ close: [] }>();
diff --git a/components/shared/ToggleSwitch.vue b/components/shared/ToggleSwitch.vue
index 5fd6f942..93563410 100644
--- a/components/shared/ToggleSwitch.vue
+++ b/components/shared/ToggleSwitch.vue
@@ -2,17 +2,22 @@
diff --git a/composables/useAnalytics.ts b/composables/useAnalytics.ts
index 73340b07..370147a7 100644
--- a/composables/useAnalytics.ts
+++ b/composables/useAnalytics.ts
@@ -17,7 +17,7 @@
* 9. FUNNEL: Where do users drop off?
*/
-import posthog from 'posthog-js';
+import { isStandalone, getOrCreateId } from '~/utils/storage';
// Events excluded from PostHog to stay within free tier (1M events/month).
// These high-volume events (fired per-guess) are still tracked in GA4 where there is no cap.
@@ -80,7 +80,7 @@ interface ShareParams {
interface InvalidWordParams {
language: string;
attempt_number: number;
- // Note: We intentionally don't track the actual word for privacy
+ word?: string;
}
interface SettingsChangeParams {
@@ -101,12 +101,6 @@ interface PWAParams {
source?: 'banner' | 'settings' | 'auto';
}
-interface ErrorParams {
- error_type: string;
- language?: string;
- details?: string;
-}
-
export interface FrustrationState {
totalInvalidAttempts: number;
maxConsecutiveInvalid: number;
@@ -126,6 +120,8 @@ interface UserProperties {
// ============================================================================
export function useAnalytics() {
+ const posthog = usePostHog();
+
// ========================================================================
// FRUSTRATION STATE (per-session, kept in composable closure)
// ========================================================================
@@ -156,7 +152,7 @@ export function useAnalytics() {
// PostHog (skip high-volume events to stay within free tier)
try {
if (!POSTHOG_SKIP_EVENTS.has(eventName)) {
- posthog.capture(eventName, params);
+ posthog?.capture(eventName, params);
}
} catch {
// Silently fail
@@ -187,17 +183,6 @@ export function useAnalytics() {
return 'unknown';
};
- /**
- * Check if running as installed PWA
- */
- const isStandalone = (): boolean => {
- if (!import.meta.client) return false;
- return (
- window.matchMedia('(display-mode: standalone)').matches ||
- (navigator as Navigator & { standalone?: boolean }).standalone === true
- );
- };
-
/**
* Calculate days since a date string (YYYY-MM-DD or ISO)
*/
@@ -243,24 +228,6 @@ export function useAnalytics() {
return { languagesPlayed, totalGames, totalWins, preferredLanguage };
};
- /**
- * Get or create a persistent anonymous client ID.
- * Reuses the same localStorage key as the game store.
- */
- const getOrCreateClientId = (): string => {
- if (!import.meta.client) return 'unknown';
- try {
- let id = localStorage.getItem('client_id');
- if (!id) {
- id = crypto.randomUUID();
- localStorage.setItem('client_id', id);
- }
- return id;
- } catch {
- return 'unknown';
- }
- };
-
/**
* Identify user with persistent anonymous ID and set person properties.
* Call once on page load after game_results are available.
@@ -272,7 +239,7 @@ export function useAnalytics() {
if (!import.meta.client) return props;
try {
- const clientId = getOrCreateClientId();
+ const clientId = getOrCreateId('client_id');
let firstSeenDate: string | undefined;
try {
@@ -288,7 +255,7 @@ export function useAnalytics() {
// localStorage unavailable
}
- posthog.identify(clientId, {
+ posthog?.identify(clientId, {
first_seen_date: firstSeenDate,
total_games_played: props.totalGames,
total_wins: props.totalWins,
@@ -310,7 +277,7 @@ export function useAnalytics() {
if (!import.meta.client) return;
try {
const props = computeUserProperties(gameResults);
- posthog.setPersonProperties({
+ posthog?.setPersonProperties({
total_games_played: props.totalGames,
total_wins: props.totalWins,
total_languages_played: props.languagesPlayed.length,
@@ -628,6 +595,7 @@ export function useAnalytics() {
track('invalid_word', {
language: params.language,
attempt_number: params.attempt_number,
+ word: params.word && params.word.length <= 10 ? params.word.toLowerCase() : undefined,
});
};
@@ -641,17 +609,8 @@ export function useAnalytics() {
});
};
- /**
- * Track page errors
- * Answers: Is the app crashing? Which languages have issues?
- */
- const trackError = (params: ErrorParams): void => {
- track('page_error', {
- error_type: params.error_type,
- language: params.language,
- details: params.details,
- });
- };
+ // Error tracking is handled automatically by @posthog/nuxt module
+ // (captures $exception events with proper stack traces and source maps)
// ========================================================================
// FRUSTRATION SIGNALS (session-aggregated, included in game_complete)
@@ -843,6 +802,9 @@ export function useAnalytics() {
* Call once on page load to capture session context
*/
const trackPageView = (language: string): void => {
+ // Register language as a super property on all future PostHog events
+ posthog?.register({ language });
+
track('page_view_enhanced', {
language,
is_pwa: isStandalone(),
@@ -856,33 +818,8 @@ export function useAnalytics() {
// ========================================================================
// Guards to prevent duplicate listener registration
- let _errorTrackingInit = false;
let _abandonTrackingInit = false;
- /**
- * Set up global error tracking (idempotent — safe to call multiple times)
- */
- const initErrorTracking = (language: string): void => {
- if (!import.meta.client || _errorTrackingInit) return;
- _errorTrackingInit = true;
-
- window.addEventListener('error', (event) => {
- trackError({
- error_type: 'javascript_error',
- language,
- details: event.message?.substring(0, 100),
- });
- });
-
- window.addEventListener('unhandledrejection', (event) => {
- trackError({
- error_type: 'unhandled_promise',
- language,
- details: String(event.reason)?.substring(0, 100),
- });
- });
- };
-
/**
* Track game abandonment on page unload (idempotent)
*/
@@ -940,7 +877,6 @@ export function useAnalytics() {
// Friction
trackInvalidWord,
trackKeyboardMissingChar,
- trackError,
// Frustration (session-aggregated)
trackInvalidWordAndUpdateState,
onValidWord,
@@ -963,7 +899,6 @@ export function useAnalytics() {
// Session
trackPageView,
// Init
- initErrorTracking,
initAbandonTracking,
// PostHog user identification
identifyUser,
diff --git a/data/default_language_config.json b/data/default_language_config.json
index fa0ea942..147008f2 100644
--- a/data/default_language_config.json
+++ b/data/default_language_config.json
@@ -19,11 +19,13 @@
"share": "Share",
"shared": "Shared!",
"copied": "Copied!",
- "notification-copied": "Copied to clipboard",
- "notification-word-not-valid": "Word is not valid",
- "notification-partial-word": "Please enter a full word",
"share_challenge_win": "I got today's Wordle in {n}. Can you beat me?",
- "share_challenge_lose": "I didn't get today's Wordle. Can you?"
+ "share_challenge_lose": "I didn't get today's Wordle. Can you?",
+ "notification_copied": "Copied to clipboard",
+ "notification_word_not_valid": "Word is not valid",
+ "notification_partial_word": "Please enter a full word",
+ "hard_mode_position": "Hard mode: {letter} must be in position {position}",
+ "hard_mode_contains": "Hard mode: guess must contain {letter}"
},
"help": {
"title": "How to Play",
@@ -42,14 +44,16 @@
"settings": "Settings",
"dark_mode": "Dark Mode",
"dark_mode_desc": "Toggle dark theme",
- "haptic_feedback": "Haptic Feedback",
- "haptic_feedback_desc": "Vibration on touch",
- "sound_effects": "Sound Effects",
- "sound_effects_desc": "Win/lose sounds",
+ "sound_and_haptics": "Sound & Haptics",
+ "difficulty": "Difficulty",
+ "word_info": "Word Info",
+ "word_info_desc": "Definition & AI art after game",
+ "language": "Language",
+ "change_language": "Change Language",
+ "better_than": "Better than",
+ "of_players": "of players",
"right_to_left": "Right to left",
"keyboard_layout": "Keyboard layout",
- "easy_mode": "Allow any word",
- "easy_mode_label": "easy mode",
"install_app": "Install App",
"install_app_desc": "Play offline & get app icon",
"report_issue": "Report an Issue",
@@ -86,11 +90,34 @@
"coming_soon": "is coming soon!",
"game": "game",
"games_lowercase": "games",
- "show_definitions": "Show Definitions",
- "show_definitions_desc": "Show word meaning after game",
"definition": "Definition",
"look_up_on_wiktionary": "Look up on Wiktionary",
- "word_art": "Word Art",
- "word_art_desc": "AI illustration of the daily word"
+ "easy": "Easy",
+ "normal": "Normal",
+ "hard": "Hard",
+ "easy_desc": "Any word accepted, even if not in the dictionary",
+ "normal_desc": "Guesses must be valid words from the dictionary",
+ "hard_desc": "Revealed hints must be used in subsequent guesses",
+ "high_contrast": "High Contrast",
+ "high_contrast_desc": "Colorblind-friendly colors",
+ "today": "Today",
+ "statistics": "Statistics",
+ "todays_word_reveal": "Today's word — Play to reveal!",
+ "play_now": "Play now",
+ "future_word": "This word hasn't been played yet. Come back later!",
+ "community_stats": "Community Stats",
+ "players": "Players",
+ "plays": "plays",
+ "win": "win",
+ "first_to_play": "First to play today!",
+ "top_score": "Top score today!",
+ "all_words": "All Words",
+ "daily_words_counting": "daily words and counting",
+ "newer": "Newer",
+ "older": "Older",
+ "page_of": "Page {page} of {total}",
+ "report_bad_word": "Report bad word",
+ "view_all_words": "View all {lang} words",
+ "difficulty_locked": "Can't change difficulty after guessing"
}
}
diff --git a/data/languages/ar/language_config.json b/data/languages/ar/language_config.json
index 00891899..f74849c9 100644
--- a/data/languages/ar/language_config.json
+++ b/data/languages/ar/language_config.json
@@ -16,48 +16,55 @@
"meta": {
"locale": "ar",
"wordle_native": "وردل",
- "title": "لعبة الكلمات اليومية ",
- "description": "تخمين الكلمة المخفية في 6 محاولات (أو أقل). لغز جديد متاح كل يوم! ",
+ "title": "لعبة الكلمات اليومية",
+ "description": "تخمين الكلمة المخفية في 6 محاولات (أو أقل). لغز جديد متاح كل يوم!",
"keywords": "العربية، لغز، كلمة، اللعب، لعبة، على الإنترنت، تخمين، يوميا"
},
"text": {
"subheader": "العربية",
- "next_word": "الكلمة التالية ",
- "no_attempts": " لم يتم إجراء أي محاولات ",
- "share": "شارك ",
- "notification-copied": "نسخ إلى الحافظة ",
- "notification-partial-word": "الرجاء إدخال كلمة كاملة ",
+ "next_word": "الكلمة التالية",
+ "no_attempts": " لم يتم إجراء أي محاولات",
+ "share": "شارك",
+ "shared": "تمت المشاركة!",
+ "copied": "تم النسخ!",
"share_challenge_win": "حللت وردل اليوم من {n} محاولات. هل تستطيع التغلب عليّ؟",
- "share_challenge_lose": "لم أستطع حل وردل اليوم. هل تستطيع أنت؟"
+ "share_challenge_lose": "لم أستطع حل وردل اليوم. هل تستطيع أنت؟",
+ "notification_copied": "نسخ إلى الحافظة",
+ "notification_word_not_valid": "الكلمة غير صالحة",
+ "notification_partial_word": "الرجاء إدخال كلمة كاملة",
+ "hard_mode_position": "الوضع الصعب: {letter} يجب أن يكون في الموضع {position}",
+ "hard_mode_contains": "الوضع الصعب: يجب أن يحتوي التخمين على {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "true",
"help": {
- "title": "كيفية أللعب ",
- "title_2": "أمثلة ",
- "close": "أغلق هذه الرسالة ",
- "text_1_1_1": "خمن ",
- "text_1_1_2": "في ست محاولات أو أقل. ",
- "text_1_2": " يجب أن يكون لكل محاولة كلمة صالحة مكونة من خمسة أحرف. اضغط على ENTER لتقديم تخمينك. ",
- "text_1_3": " بعد التخمين، سيقوم البلاط بتغيير اللون للإشارة إلى الحروف من كلمتك صحيحة أو الصحيحة تقريبًا. ",
- "text_2_1": "في الكلمة و موقعها الصحيح! ",
- "text_2_2": "في الكلمة، و لكن ليست في الموقع الصحيح. ",
- "text_2_3": "غير موجود في الكلمة التي تحاول تخمينها. ",
- "text_3": " ستكون كلمة جديدة متاحة كل يوم "
+ "title": "كيفية أللعب",
+ "title_2": "أمثلة",
+ "close": "أغلق هذه الرسالة",
+ "text_1_1_1": "خمن",
+ "text_1_1_2": "في ست محاولات أو أقل.",
+ "text_1_2": " يجب أن يكون لكل محاولة كلمة صالحة مكونة من خمسة أحرف. اضغط على ENTER لتقديم تخمينك.",
+ "text_1_3": " بعد التخمين، سيقوم البلاط بتغيير اللون للإشارة إلى الحروف من كلمتك صحيحة أو الصحيحة تقريبًا.",
+ "text_2_1": "في الكلمة و موقعها الصحيح!",
+ "text_2_2": "في الكلمة، و لكن ليست في الموقع الصحيح.",
+ "text_2_3": "غير موجود في الكلمة التي تحاول تخمينها.",
+ "text_3": " ستكون كلمة جديدة متاحة كل يوم"
},
"ui": {
"settings": "الإعدادات",
"dark_mode": "الوضع الداكن",
"dark_mode_desc": "تبديل السمة الداكنة",
- "haptic_feedback": "الاستجابة اللمسية",
- "haptic_feedback_desc": "اهتزاز عند اللمس",
- "sound_effects": "المؤثرات الصوتية",
- "sound_effects_desc": "أصوات الفوز/الخسارة",
+ "sound_and_haptics": "الصوت والاهتزاز",
+ "difficulty": "الصعوبة",
+ "word_info": "معلومات الكلمة",
+ "word_info_desc": "التعريف وصورة الذكاء الاصطناعي بعد اللعبة",
+ "language": "اللغة",
+ "change_language": "تغيير اللغة",
+ "better_than": "أفضل من",
+ "of_players": "من اللاعبين",
"right_to_left": "من اليمين إلى اليسار",
"keyboard_layout": "تخطيط لوحة المفاتيح",
- "easy_mode": "السماح بأي كلمة",
- "easy_mode_label": "الوضع السهل",
"install_app": "تثبيت التطبيق",
"install_app_desc": "العب بدون اتصال واحصل على أيقونة التطبيق",
"report_issue": "الإبلاغ عن مشكلة",
@@ -73,6 +80,55 @@
"add_to_home": "أضف إلى الشاشة الرئيسية",
"play_daily_like_app": "العب Wordle يومياً كتطبيق",
"install": "تثبيت",
- "close": "إغلاق"
+ "close": "إغلاق",
+ "about": "حول",
+ "global_stats": "الإحصائيات العامة",
+ "games_played": "الألعاب التي لُعبت",
+ "win_rate": "نسبة الفوز",
+ "current_streak": "السلسلة الحالية",
+ "languages_won": "اللغات المكتسبة",
+ "best_overall_streak": "أفضل سلسلة إجمالية",
+ "best_active_streak": "أفضل سلسلة نشطة",
+ "your_languages": "لغاتك",
+ "no_games_yet": "لم تلعب أي لعبة بعد. اختر لغة للبدء!",
+ "wins": "انتصارات",
+ "losses": "خسائر",
+ "avg_attempts": "متوسط المحاولات",
+ "best_streak": "أفضل سلسلة",
+ "play": "العب",
+ "search_language": "ابحث عن لغة...",
+ "external_links": "روابط خارجية",
+ "coming_soon": "قريباً!",
+ "game": "لعبة",
+ "games_lowercase": "ألعاب",
+ "definition": "التعريف",
+ "look_up_on_wiktionary": "ابحث في ويكاموس",
+ "easy": "سهل",
+ "normal": "عادي",
+ "hard": "صعب",
+ "easy_desc": "أي كلمة مقبولة، حتى لو لم تكن في القاموس",
+ "normal_desc": "يجب أن تكون التخمينات كلمات صالحة من القاموس",
+ "hard_desc": "يجب استخدام التلميحات المكشوفة في التخمينات التالية",
+ "high_contrast": "تباين عالي",
+ "high_contrast_desc": "ألوان ملائمة لعمى الألوان",
+ "today": "اليوم",
+ "statistics": "الإحصائيات",
+ "todays_word_reveal": "كلمة اليوم — العب لتكشفها!",
+ "play_now": "العب الآن",
+ "future_word": "لم يتم لعب هذه الكلمة بعد. عد لاحقاً!",
+ "community_stats": "إحصائيات المجتمع",
+ "players": "اللاعبون",
+ "plays": "مرات اللعب",
+ "win": "فوز",
+ "first_to_play": "كن أول من يلعب اليوم!",
+ "top_score": "أفضل نتيجة اليوم!",
+ "all_words": "جميع الكلمات",
+ "daily_words_counting": "كلمة يومية وفي ازدياد",
+ "newer": "أحدث",
+ "older": "أقدم",
+ "page_of": "صفحة {page} من {total}",
+ "report_bad_word": "الإبلاغ عن كلمة غير لائقة",
+ "view_all_words": "عرض جميع كلمات {lang}",
+ "difficulty_locked": "لا يمكن تغيير الصعوبة بعد التخمين"
}
}
diff --git a/data/languages/az/language_config.json b/data/languages/az/language_config.json
index 37f84a8d..40a5d6e4 100644
--- a/data/languages/az/language_config.json
+++ b/data/languages/az/language_config.json
@@ -4,48 +4,55 @@
"name_native": "Azərbaycan",
"meta": {
"locale": "az",
- "title": "Gündəlik Söz Oyunu ",
- "description": "6 cəhddə gizli sözü tapın. Hər gün yeni bir söz! ",
+ "title": "Gündəlik Söz Oyunu",
+ "description": "6 cəhddə gizli sözü tapın. Hər gün yeni bir söz!",
"keywords": "Azərbaycan, tapmaca, söz, oyun, oyun, onlayn, təxmin, gündəlik"
},
"text": {
"subheader": "azərbaycan",
- "next_word": "Növbəti söz ",
- "no_attempts": "Hələ heç bir sözü sınamamısınız! ",
- "share": "Paylaşın ",
- "notification-copied": "Kopyalandı ",
- "notification-partial-word": "Zəhmət olmasa tam sözü daxil edin ",
+ "next_word": "Növbəti söz",
+ "no_attempts": "Hələ heç bir sözü sınamamısınız!",
+ "share": "Paylaşın",
+ "shared": "Paylaşıldı!",
+ "copied": "Kopyalandı!",
"share_challenge_win": "Bugünkü Wordle-ni {n} cəhddə tapdım. Məni keçə bilərsən?",
- "share_challenge_lose": "Bugünkü Wordle-ni tapa bilmədim. Sən bacararsanmı?"
+ "share_challenge_lose": "Bugünkü Wordle-ni tapa bilmədim. Sən bacararsanmı?",
+ "notification_copied": "Kopyalandı",
+ "notification_word_not_valid": "Söz etibarlı deyil",
+ "notification_partial_word": "Zəhmət olmasa tam sözü daxil edin",
+ "hard_mode_position": "Çətin rejim: {letter} mövqe {position}-da olmalıdır",
+ "hard_mode_contains": "Çətin rejim: təxmində {letter} olmalıdır"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Qaydalar ",
- "title_2": "Nümunə ",
- "close": "Bu mesajı bağlayın ",
- "text_1_1_1": "Tapmalısınız ",
- "text_1_1_2": "altı cəhdə və ya daha az. ",
- "text_1_2": "Hər bir cəhd etibarlı beş hərfli söz olmalıdır. Cəhdi təstiq etmək üçün ENTER düyməsini basın. ",
- "text_1_3": "Artıq təxmin etdikdən sonra, kvadrat rəngini dəyişəcək, göstərmək ücün, sözünüzün hansı hərfləri düzgün və ya demək olar ki, düzgündür. ",
- "text_2_1": "hərfi sözdə var doğru yerdədir. ",
- "text_2_2": "hərfi sözdə var amma başqa yerdədir. ",
- "text_2_3": "hərfi heç bir yerə yoxdur. ",
- "text_3": "Hər gün yeni söz! "
+ "title": "Qaydalar",
+ "title_2": "Nümunə",
+ "close": "Bu mesajı bağlayın",
+ "text_1_1_1": "Tapmalısınız",
+ "text_1_1_2": "altı cəhdə və ya daha az.",
+ "text_1_2": "Hər bir cəhd etibarlı beş hərfli söz olmalıdır. Cəhdi təstiq etmək üçün ENTER düyməsini basın.",
+ "text_1_3": "Artıq təxmin etdikdən sonra, kvadrat rəngini dəyişəcək, göstərmək ücün, sözünüzün hansı hərfləri düzgün və ya demək olar ki, düzgündür.",
+ "text_2_1": "hərfi sözdə var doğru yerdədir.",
+ "text_2_2": "hərfi sözdə var amma başqa yerdədir.",
+ "text_2_3": "hərfi heç bir yerə yoxdur.",
+ "text_3": "Hər gün yeni söz!"
},
"ui": {
"settings": "Parametrlər",
"dark_mode": "Qaranlıq rejim",
"dark_mode_desc": "Qaranlıq temanı dəyiş",
- "haptic_feedback": "Haptik əks-əlaqə",
- "haptic_feedback_desc": "Toxunuşda titrəmə",
- "sound_effects": "Səs effektləri",
- "sound_effects_desc": "Qazanma/uduşma səsləri",
+ "sound_and_haptics": "Səs və vibrasiya",
+ "difficulty": "Çətinlik",
+ "word_info": "Söz məlumatı",
+ "word_info_desc": "Oyundan sonra tərif və AI şəkli",
+ "language": "Dil",
+ "change_language": "Dili dəyiş",
+ "better_than": "Daha yaxşı",
+ "of_players": "oyunçuların",
"right_to_left": "Sağdan sola",
"keyboard_layout": "Klaviatura düzülüşü",
- "easy_mode": "İstənilən sözə icazə ver",
- "easy_mode_label": "asan rejim",
"install_app": "Tətbiqi quraşdır",
"install_app_desc": "Oflayn oyna və tətbiq nişanı al",
"report_issue": "Problem bildir",
@@ -61,6 +68,55 @@
"add_to_home": "Ana ekrana əlavə et",
"play_daily_like_app": "Wordle-ı hər gün tətbiq kimi oyna",
"install": "Quraşdır",
- "close": "bağla"
+ "close": "bağla",
+ "about": "Haqqında",
+ "global_stats": "Ümumi statistika",
+ "games_played": "Oynanılan oyunlar",
+ "win_rate": "Qazanma faizi",
+ "current_streak": "Cari ardıcıllıq",
+ "languages_won": "Qazanılan dillər",
+ "best_overall_streak": "Ən yaxşı ümumi ardıcıllıq",
+ "best_active_streak": "Ən yaxşı aktiv ardıcıllıq",
+ "your_languages": "Dillərin",
+ "no_games_yet": "Hələ heç bir oyun oynamamısınız. Başlamaq üçün dil seçin!",
+ "wins": "Qalibiyyətlər",
+ "losses": "Məğlubiyyətlər",
+ "avg_attempts": "Orta cəhd",
+ "best_streak": "Ən yaxşı ardıcıllıq",
+ "play": "Oyna",
+ "search_language": "Dil axtar...",
+ "external_links": "Xarici keçidlər",
+ "coming_soon": "tezliklə!",
+ "game": "oyun",
+ "games_lowercase": "oyunlar",
+ "definition": "Tərif",
+ "look_up_on_wiktionary": "Wiktionary-də axtar",
+ "easy": "Asan",
+ "normal": "Normal",
+ "hard": "Çətin",
+ "easy_desc": "Lüğətdə olmasa da istənilən söz qəbul edilir",
+ "normal_desc": "Təxminlər lüğətdən etibarlı sözlər olmalıdır",
+ "hard_desc": "Aşkar edilmiş ipucuları sonrakı təxminlərdə istifadə edilməlidir",
+ "high_contrast": "Yüksək kontrast",
+ "high_contrast_desc": "Rəng korluğuna uyğun rənglər",
+ "today": "Bu gün",
+ "statistics": "Statistika",
+ "todays_word_reveal": "Bugünkü söz — Görmək üçün oyna!",
+ "play_now": "İndi oyna",
+ "future_word": "Bu söz hələ oynanılmayıb. Sonra gəl!",
+ "community_stats": "İcma statistikası",
+ "players": "Oyunçular",
+ "plays": "oyunlar",
+ "win": "qalibiyyət",
+ "first_to_play": "Bu gün ilk oynayan ol!",
+ "top_score": "Bugünkü ən yaxşı nəticə!",
+ "all_words": "Bütün sözlər",
+ "daily_words_counting": "gündəlik söz və artır",
+ "newer": "Daha yeni",
+ "older": "Daha köhnə",
+ "page_of": "Səhifə {page} / {total}",
+ "report_bad_word": "Pis sözü bildir",
+ "view_all_words": "Bütün {lang} sözlərinə bax",
+ "difficulty_locked": "Təxmindən sonra çətinliyi dəyişmək olmaz"
}
}
diff --git a/data/languages/bg/language_config.json b/data/languages/bg/language_config.json
index 751980d1..bf6cfa16 100644
--- a/data/languages/bg/language_config.json
+++ b/data/languages/bg/language_config.json
@@ -6,48 +6,55 @@
"meta": {
"locale": "bg",
"wordle_native": "уордъл",
- "title": "Играта на ежедневната дума ",
- "description": "Познайте скритата дума в 6 опита (или по-малко). Всеки ден се предлага нов пъзел! ",
+ "title": "Играта на ежедневната дума",
+ "description": "Познайте скритата дума в 6 опита (или по-малко). Всеки ден се предлага нов пъзел!",
"keywords": "български език, пъзел, дума, игра, игра, онлайн, предполагам, ежедневно"
},
"text": {
"subheader": "български език",
- "next_word": "Следваща дума ",
- "no_attempts": "Още не сте опитвали думи! ",
+ "next_word": "Следваща дума",
+ "no_attempts": "Още не сте опитвали думи!",
"share": "Сподели",
- "notification-copied": "Копиран в клипборда ",
- "notification-partial-word": "Моля, въведете пълна дума ",
+ "shared": "Споделено!",
+ "copied": "Копирано!",
"share_challenge_win": "Реших днешния Wordle от {n} опита. Можеш ли по-добре?",
- "share_challenge_lose": "Не успях да реша днешния Wordle. Ти можеш ли?"
+ "share_challenge_lose": "Не успях да реша днешния Wordle. Ти можеш ли?",
+ "notification_copied": "Копиран в клипборда",
+ "notification_word_not_valid": "Думата не е валидна",
+ "notification_partial_word": "Моля, въведете пълна дума",
+ "hard_mode_position": "Труден режим: {letter} трябва да е на позиция {position}",
+ "hard_mode_contains": "Труден режим: опитът трябва да съдържа {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Как да играя ",
- "title_2": "Примери ",
- "close": "Затворете това съобщение ",
- "text_1_1_1": "Предполагам ",
- "text_1_1_2": "в шест опита или по-малко. ",
- "text_1_2": "Всяко предположение трябва да е валидна пет буквена дума. Натиснете бутона ENTER, за да изпратите предположението си. ",
- "text_1_3": "След като предположите, плочките ще променят цвета, за да покажат кои букви от вашата дума са правилни или почти правилно. ",
- "text_2_1": "е в думата и на правилното място! ",
- "text_2_2": "е в думата, но не и на правилното място. ",
- "text_2_3": "не присъства в думата, която се опитвате да отгатнете. ",
- "text_3": "Нова дума ще бъде достъпна всеки ден! "
+ "title": "Как да играя",
+ "title_2": "Примери",
+ "close": "Затворете това съобщение",
+ "text_1_1_1": "Предполагам",
+ "text_1_1_2": "в шест опита или по-малко.",
+ "text_1_2": "Всяко предположение трябва да е валидна пет буквена дума. Натиснете бутона ENTER, за да изпратите предположението си.",
+ "text_1_3": "След като предположите, плочките ще променят цвета, за да покажат кои букви от вашата дума са правилни или почти правилно.",
+ "text_2_1": "е в думата и на правилното място!",
+ "text_2_2": "е в думата, но не и на правилното място.",
+ "text_2_3": "не присъства в думата, която се опитвате да отгатнете.",
+ "text_3": "Нова дума ще бъде достъпна всеки ден!"
},
"ui": {
"settings": "Настройки",
"dark_mode": "Тъмен режим",
"dark_mode_desc": "Превключи тъмна тема",
- "haptic_feedback": "Хаптична обратна връзка",
- "haptic_feedback_desc": "Вибрация при докосване",
- "sound_effects": "Звукови ефекти",
- "sound_effects_desc": "Звуци при победа/загуба",
+ "sound_and_haptics": "Звук и вибрация",
+ "difficulty": "Трудност",
+ "word_info": "Информация за думата",
+ "word_info_desc": "Определение и AI изображение след играта",
+ "language": "Език",
+ "change_language": "Смени езика",
+ "better_than": "По-добре от",
+ "of_players": "от играчите",
"right_to_left": "Отдясно наляво",
"keyboard_layout": "Подредба на клавиатурата",
- "easy_mode": "Позволи всяка дума",
- "easy_mode_label": "лесен режим",
"install_app": "Инсталирай приложението",
"install_app_desc": "Играй офлайн и получи икона",
"report_issue": "Докладвай проблем",
@@ -63,6 +70,55 @@
"add_to_home": "Добави на началния екран",
"play_daily_like_app": "Играй Wordle всеки ден като приложение",
"install": "Инсталирай",
- "close": "затвори"
+ "close": "затвори",
+ "about": "Относно",
+ "global_stats": "Обща статистика",
+ "games_played": "Изиграни игри",
+ "win_rate": "Процент победи",
+ "current_streak": "Текуща поредица",
+ "languages_won": "Спечелени езици",
+ "best_overall_streak": "Най-добра обща поредица",
+ "best_active_streak": "Най-добра активна поредица",
+ "your_languages": "Твоите езици",
+ "no_games_yet": "Все още не сте играли. Изберете език, за да започнете!",
+ "wins": "Победи",
+ "losses": "Загуби",
+ "avg_attempts": "Средно опити",
+ "best_streak": "Най-добра поредица",
+ "play": "Играй",
+ "search_language": "Търси език...",
+ "external_links": "Външни връзки",
+ "coming_soon": "очаквайте скоро!",
+ "game": "игра",
+ "games_lowercase": "игри",
+ "definition": "Определение",
+ "look_up_on_wiktionary": "Потърси в Уикиречник",
+ "easy": "Лесно",
+ "normal": "Нормално",
+ "hard": "Трудно",
+ "easy_desc": "Приема се всяка дума, дори да не е в речника",
+ "normal_desc": "Опитите трябва да са валидни думи от речника",
+ "hard_desc": "Разкритите подсказки трябва да се използват в следващите опити",
+ "high_contrast": "Висок контраст",
+ "high_contrast_desc": "Цветове за далтонисти",
+ "today": "Днес",
+ "statistics": "Статистика",
+ "todays_word_reveal": "Днешната дума — Играй, за да я разкриеш!",
+ "play_now": "Играй сега",
+ "future_word": "Тази дума все още не е играна. Върни се по-късно!",
+ "community_stats": "Статистика на общността",
+ "players": "Играчи",
+ "plays": "игри",
+ "win": "победа",
+ "first_to_play": "Бъди първият, който ще играе днес!",
+ "top_score": "Най-добър резултат днес!",
+ "all_words": "Всички думи",
+ "daily_words_counting": "ежедневни думи и броенето продължава",
+ "newer": "По-нови",
+ "older": "По-стари",
+ "page_of": "Страница {page} от {total}",
+ "report_bad_word": "Докладвай лоша дума",
+ "view_all_words": "Виж всички думи на {lang}",
+ "difficulty_locked": "Не може да се смени трудността след опит"
}
}
diff --git a/data/languages/bn/language_config.json b/data/languages/bn/language_config.json
index 1501d060..d56a9045 100644
--- a/data/languages/bn/language_config.json
+++ b/data/languages/bn/language_config.json
@@ -19,9 +19,13 @@
"share": "শেয়ার করুন",
"shared": "শেয়ার করা হয়েছে!",
"copied": "কপি করা হয়েছে!",
- "notification-copied": "ক্লিপবোর্ডে কপি করা হয়েছে",
- "notification-word-not-valid": "শব্দটি বৈধ নয়",
- "notification-partial-word": "অনুগ্রহ করে পূর্ণ শব্দ লিখুন"
+ "share_challenge_win": "আমি আজকের Wordle {n} চেষ্টায় সমাধান করেছি। আপনি কি পারবেন?",
+ "share_challenge_lose": "আমি আজকের Wordle সমাধান করতে পারিনি। আপনি কি পারবেন?",
+ "notification_copied": "ক্লিপবোর্ডে কপি করা হয়েছে",
+ "notification_word_not_valid": "শব্দটি বৈধ নয়",
+ "notification_partial_word": "অনুগ্রহ করে পূর্ণ শব্দ লিখুন",
+ "hard_mode_position": "কঠিন মোড: {letter} অবশ্যই {position} অবস্থানে হতে হবে",
+ "hard_mode_contains": "কঠিন মোড: অনুমানে অবশ্যই {letter} থাকতে হবে"
},
"help": {
"title": "কীভাবে খেলবেন",
@@ -39,13 +43,81 @@
"ui": {
"settings": "সেটিংস",
"dark_mode": "ডার্ক মোড",
+ "dark_mode_desc": "ডার্ক থিম টগল করুন",
+ "sound_and_haptics": "শব্দ ও কম্পন",
+ "difficulty": "কঠিনতা",
+ "word_info": "শব্দের তথ্য",
+ "word_info_desc": "খেলার পর সংজ্ঞা ও AI ছবি",
+ "language": "ভাষা",
+ "change_language": "ভাষা পরিবর্তন করুন",
+ "better_than": "এর চেয়ে ভালো",
+ "of_players": "খেলোয়াড়দের",
+ "right_to_left": "ডান থেকে বামে",
"keyboard_layout": "কীবোর্ড লেআউট",
+ "install_app": "অ্যাপ ইনস্টল করুন",
+ "install_app_desc": "অফলাইনে খেলুন ও অ্যাপ আইকন পান",
+ "report_issue": "সমস্যা জানান",
+ "view_source": "সোর্স কোড দেখুন",
+ "guess_distribution": "অনুমানের বিতরণ",
"games": "খেলা",
+ "win_percent": "জয় %",
+ "streak": "ধারা",
+ "best": "সেরা",
"all_languages": "সব ভাষা",
"languages": "ভাষাসমূহ",
+ "play_more_languages": "সামগ্রিক পরিসংখ্যান দেখতে আরো ভাষায় খেলুন!",
+ "add_to_home": "হোম স্ক্রিনে যোগ করুন",
+ "play_daily_like_app": "প্রতিদিন অ্যাপের মতো Wordle খেলুন",
+ "install": "ইনস্টল",
+ "close": "বন্ধ",
+ "about": "সম্পর্কে",
+ "global_stats": "সামগ্রিক পরিসংখ্যান",
+ "games_played": "খেলা হয়েছে",
+ "win_rate": "জয়ের হার",
+ "current_streak": "বর্তমান ধারা",
+ "languages_won": "জয়ী ভাষা",
+ "best_overall_streak": "সেরা সামগ্রিক ধারা",
+ "best_active_streak": "সেরা সক্রিয় ধারা",
+ "your_languages": "আপনার ভাষা",
+ "no_games_yet": "আপনি এখনো কোনো খেলা খেলেননি। শুরু করতে একটি ভাষা বেছে নিন!",
+ "wins": "জয়",
+ "losses": "পরাজয়",
+ "avg_attempts": "গড় চেষ্টা",
+ "best_streak": "সেরা ধারা",
"play": "খেলুন",
"search_language": "ভাষা খুঁজুন...",
+ "external_links": "বহিঃসংযোগ",
+ "coming_soon": "শীঘ্রই আসছে!",
+ "game": "খেলা",
+ "games_lowercase": "খেলা",
"definition": "সংজ্ঞা",
- "look_up_on_wiktionary": "উইকশনারিতে দেখুন"
+ "look_up_on_wiktionary": "উইকশনারিতে দেখুন",
+ "easy": "সহজ",
+ "normal": "সাধারণ",
+ "hard": "কঠিন",
+ "easy_desc": "অভিধানে না থাকলেও যেকোনো শব্দ গৃহীত",
+ "normal_desc": "অনুমান অভিধানের বৈধ শব্দ হতে হবে",
+ "hard_desc": "প্রকাশিত ইঙ্গিত পরবর্তী অনুমানে ব্যবহার করতে হবে",
+ "high_contrast": "উচ্চ বৈসাদৃশ্য",
+ "high_contrast_desc": "বর্ণান্ধ-বান্ধব রং",
+ "today": "আজ",
+ "statistics": "পরিসংখ্যান",
+ "todays_word_reveal": "আজকের শব্দ — জানতে খেলুন!",
+ "play_now": "এখনই খেলুন",
+ "future_word": "এই শব্দটি এখনো খেলা হয়নি। পরে আসুন!",
+ "community_stats": "সম্প্রদায়ের পরিসংখ্যান",
+ "players": "খেলোয়াড়",
+ "plays": "খেলা",
+ "win": "জয়",
+ "first_to_play": "আজ প্রথম খেলুন!",
+ "top_score": "আজকের সেরা স্কোর!",
+ "all_words": "সব শব্দ",
+ "daily_words_counting": "দৈনিক শব্দ এবং বাড়ছে",
+ "newer": "নতুন",
+ "older": "পুরনো",
+ "page_of": "পৃষ্ঠা {page} / {total}",
+ "report_bad_word": "খারাপ শব্দ জানান",
+ "view_all_words": "সব {lang} শব্দ দেখুন",
+ "difficulty_locked": "অনুমানের পর কঠিনতা পরিবর্তন করা যাবে না"
}
}
diff --git a/data/languages/br/language_config.json b/data/languages/br/language_config.json
index 33c979e3..8e5f6117 100644
--- a/data/languages/br/language_config.json
+++ b/data/languages/br/language_config.json
@@ -11,29 +11,34 @@
},
"text": {
"subheader": "brezhoneg",
- "next_word": "Next word ",
- "no_attempts": "You haven't tried any words yet! ",
+ "next_word": "Ger da-heul",
+ "no_attempts": "N'ho peus ket esaeet ger ebet c'hoazh!",
"share": "Rannañ",
- "notification-copied": "Copied to clipboard ",
- "notification-partial-word": "Please enter a full word ",
+ "shared": "Rannet!",
+ "copied": "Eilet!",
"share_challenge_win": "Kavet em eus Wordle an deiz e {n} taol-esae. Ha gallout a rit gwellaat?",
- "share_challenge_lose": "N'em eus ket kavet Wordle an deiz. Ha gallout a rit?"
+ "share_challenge_lose": "N'em eus ket kavet Wordle an deiz. Ha gallout a rit?",
+ "notification_copied": "Eilet er golver",
+ "notification_word_not_valid": "N'eo ket reizh ar ger",
+ "notification_partial_word": "Lakait ur ger klok mar plij",
+ "hard_mode_position": "Mod diaes: {letter} a rank bezañ el lec'h {position}",
+ "hard_mode_contains": "Mod diaes: ar ger a rank endalc'hañ {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "How to Play",
- "title_2": "Examples",
- "close": "Close this message",
- "text_1_1_1": "Guess the",
- "text_1_1_2": "in six tries or less.",
- "text_1_2": "Each guess must be a valid five letter word. Press the enter button to submit your guess.",
- "text_1_3": "After you guess, the tiles will change color to indicate which letters of your word are correct or almost correct.",
- "text_2_1": "is in the word and in the correct location!",
- "text_2_2": "is in the word, but not in the correct location.",
- "text_2_3": "is not present in the word you are trying to guess.",
- "text_3": "A new word will be available each day!"
+ "title": "Penaos c'hoari",
+ "title_2": "Skouerioù",
+ "close": "Serriñ ar gemennadenn-mañ",
+ "text_1_1_1": "Kavit ar",
+ "text_1_1_2": "e c'hwec'h taol-esae pe nebeutoc'h.",
+ "text_1_2": "Pep taol-esae a rank bezañ ur ger reizh gant pemp lizherenn. Pouezit war ar bouton Enankañ evit kas ho taol-esae.",
+ "text_1_3": "Goude ho taol-esae, ar c'harreoù a cheñcho liv evit diskouez peseurt lizherennoù a zo reizh pe tost da vezañ reizh.",
+ "text_2_1": "a zo er ger hag el lec'h mat!",
+ "text_2_2": "a zo er ger, met n'eo ket el lec'h mat.",
+ "text_2_3": "n'eo ket er ger emaoc'h o klask kavout.",
+ "text_3": "Ur ger nevez a vo hegerz bemdez!"
},
"diacritic_map": {
"e": [
@@ -45,5 +50,85 @@
"u": [
"ù"
]
+ },
+ "ui": {
+ "settings": "Arventennoù",
+ "dark_mode": "Mod teñval",
+ "dark_mode_desc": "Cheñch an neuz teñval",
+ "sound_and_haptics": "Son ha kren",
+ "difficulty": "Diaester",
+ "word_info": "Titouroù ar ger",
+ "word_info_desc": "Termenadur ha skeudenn AI goude ar c'hoari",
+ "language": "Yezh",
+ "change_language": "Cheñch yezh",
+ "better_than": "Gwelloc'h eget",
+ "of_players": "eus ar c'hoarierien",
+ "right_to_left": "Dehou da gleiz",
+ "keyboard_layout": "Reizhadur ar c'hlavier",
+ "install_app": "Staliañ an arload",
+ "install_app_desc": "C'hoari hep kevreadenn ha kaout an arlun",
+ "report_issue": "Kemenn ur gudenn",
+ "view_source": "Gwelet ar c'hod mammenn",
+ "guess_distribution": "Dasparzh an taolioù-esae",
+ "games": "C'hoarioù",
+ "win_percent": "% trec'h",
+ "streak": "Renkad",
+ "best": "Gwellañ",
+ "all_languages": "An holl yezhoù",
+ "languages": "Yezhoù",
+ "play_more_languages": "C'hoarit e muioc'h a yezhoù evit gwelet hoc'h stadegoù hollek!",
+ "add_to_home": "Ouzhpennañ d'ar skramm degemer",
+ "play_daily_like_app": "C'hoarit Wordle bemdez evel un arload",
+ "install": "Staliañ",
+ "close": "serriñ",
+ "about": "Diwar-benn",
+ "global_stats": "Stadegoù hollek",
+ "games_played": "C'hoarioù c'hoariet",
+ "win_rate": "Feur trec'h",
+ "current_streak": "Renkad bremañ",
+ "languages_won": "Yezhoù gounezet",
+ "best_overall_streak": "Gwellañ renkad hollek",
+ "best_active_streak": "Gwellañ renkad bev",
+ "your_languages": "Ho yezhoù",
+ "no_games_yet": "N'ho peus ket c'hoariet c'hoazh. Dibabit ur yezh evit kregiñ!",
+ "wins": "Trec'hioù",
+ "losses": "Kolloù",
+ "avg_attempts": "Keidenn taolioù-esae",
+ "best_streak": "Gwellañ renkad",
+ "play": "C'hoari",
+ "search_language": "Klask ur yezh...",
+ "external_links": "Liammoù diavaez",
+ "coming_soon": "a zo o tont!",
+ "game": "c'hoari",
+ "games_lowercase": "c'hoarioù",
+ "definition": "Termenadur",
+ "look_up_on_wiktionary": "Klask war Wikeriadur",
+ "easy": "Aes",
+ "normal": "Reizh",
+ "hard": "Diaes",
+ "easy_desc": "Pep ger a zo degemeret, ha pa ne vefe ket er geriadur",
+ "normal_desc": "An taolioù-esae a rank bezañ gerioù reizh eus ar geriadur",
+ "hard_desc": "An tistroioù dizoloet a rank bezañ implijet en taolioù-esae da-heul",
+ "high_contrast": "Dargemm uhel",
+ "high_contrast_desc": "Livioù evit tud dall d'al livioù",
+ "today": "Hiziv",
+ "statistics": "Stadegoù",
+ "todays_word_reveal": "Ger an deiz — C'hoarit evit e zizoleiñ!",
+ "play_now": "C'hoari bremañ",
+ "future_word": "N'eo ket bet c'hoariet ar ger-mañ c'hoazh. Deuit en-dro diwezhatoc'h!",
+ "community_stats": "Stadegoù ar gumuniezh",
+ "players": "C'hoarierien",
+ "plays": "c'hoarioù",
+ "win": "trec'h",
+ "first_to_play": "Bezit ar c'hentañ da c'hoari hiziv!",
+ "top_score": "Skor gwellañ hiziv!",
+ "all_words": "An holl c'herioù",
+ "daily_words_counting": "ger pemdeziek ha muioc'h-mui",
+ "newer": "Nevesoc'h",
+ "older": "Koshoc'h",
+ "page_of": "Pajenn {page} eus {total}",
+ "report_bad_word": "Kemenn ur ger fall",
+ "view_all_words": "Gwelet holl c'herioù {lang}",
+ "difficulty_locked": "N'haller ket cheñch an diaester goude un taol-esae"
}
}
diff --git a/data/languages/ca/language_config.json b/data/languages/ca/language_config.json
index 72d9518e..5f611b3b 100644
--- a/data/languages/ca/language_config.json
+++ b/data/languages/ca/language_config.json
@@ -29,48 +29,55 @@
},
"meta": {
"locale": "ca",
- "title": "El joc de paraules diàries ",
- "description": "Endevina la paraula oculta en 6 intents (o menys). Cada dia hi ha un nou trencaclosques. ",
+ "title": "El joc de paraules diàries",
+ "description": "Endevina la paraula oculta en 6 intents (o menys). Cada dia hi ha un nou trencaclosques.",
"keywords": "català, trencaclosques, paraula, joc, joc, en línia, suposo, diari"
},
"text": {
"subheader": "català",
- "next_word": "Paraula següent ",
- "no_attempts": "Encara no has provat cap paraula! ",
- "share": "Compartir ",
- "notification-copied": "Copiat al porta-retalls ",
- "notification-partial-word": "Introduïu una paraula completa ",
+ "next_word": "Paraula següent",
+ "no_attempts": "Encara no has provat cap paraula!",
+ "share": "Compartir",
+ "shared": "Compartit!",
+ "copied": "Copiat!",
"share_challenge_win": "He resolt el Wordle d'avui en {n} intents. Em pots superar?",
- "share_challenge_lose": "No he pogut resoldre el Wordle d'avui. Tu pots?"
+ "share_challenge_lose": "No he pogut resoldre el Wordle d'avui. Tu pots?",
+ "notification_copied": "Copiat al porta-retalls",
+ "notification_word_not_valid": "La paraula no és vàlida",
+ "notification_partial_word": "Introduïu una paraula completa",
+ "hard_mode_position": "Mode difícil: {letter} ha d'estar a la posició {position}",
+ "hard_mode_contains": "Mode difícil: l'intent ha de contenir {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Com jugar ",
- "title_2": "Exemples ",
- "close": "Tanqueu aquest missatge ",
- "text_1_1_1": "Endevinar el ",
- "text_1_1_2": "en sis intents o menys. ",
- "text_1_2": "Cada conjectura ha de ser una paraula vàlida de cinc lletres. Premeu el botó Enter per enviar la vostra conjectura. ",
- "text_1_3": "Després de suposar, les rajoles canviaran de color per indicar quines lletres de la vostra paraula són correctes o gairebé correctes. ",
- "text_2_1": "està a la paraula i en la ubicació correcta! ",
- "text_2_2": "està a la paraula, però no a la ubicació correcta. ",
- "text_2_3": "no està present a la paraula que esteu intentant endevinar. ",
- "text_3": "Cada dia estarà disponible una nova paraula. "
+ "title": "Com jugar",
+ "title_2": "Exemples",
+ "close": "Tanqueu aquest missatge",
+ "text_1_1_1": "Endevinar el",
+ "text_1_1_2": "en sis intents o menys.",
+ "text_1_2": "Cada conjectura ha de ser una paraula vàlida de cinc lletres. Premeu el botó Enter per enviar la vostra conjectura.",
+ "text_1_3": "Després de suposar, les rajoles canviaran de color per indicar quines lletres de la vostra paraula són correctes o gairebé correctes.",
+ "text_2_1": "està a la paraula i en la ubicació correcta!",
+ "text_2_2": "està a la paraula, però no a la ubicació correcta.",
+ "text_2_3": "no està present a la paraula que esteu intentant endevinar.",
+ "text_3": "Cada dia estarà disponible una nova paraula."
},
"ui": {
"settings": "Configuració",
"dark_mode": "Mode fosc",
"dark_mode_desc": "Canvia el tema fosc",
- "haptic_feedback": "Resposta hàptica",
- "haptic_feedback_desc": "Vibració en tocar",
- "sound_effects": "Efectes de so",
- "sound_effects_desc": "Sons de victòria/derrota",
+ "sound_and_haptics": "So i vibració",
+ "difficulty": "Dificultat",
+ "word_info": "Info de la paraula",
+ "word_info_desc": "Definició i imatge IA després del joc",
+ "language": "Idioma",
+ "change_language": "Canviar idioma",
+ "better_than": "Millor que",
+ "of_players": "dels jugadors",
"right_to_left": "Dreta a esquerra",
"keyboard_layout": "Disposició del teclat",
- "easy_mode": "Permetre qualsevol paraula",
- "easy_mode_label": "mode fàcil",
"install_app": "Instal·lar aplicació",
"install_app_desc": "Juga sense connexió i obtén la icona",
"report_issue": "Informar d'un problema",
@@ -86,6 +93,55 @@
"add_to_home": "Afegir a la pantalla d'inici",
"play_daily_like_app": "Juga Wordle diàriament com una app",
"install": "Instal·lar",
- "close": "tancar"
+ "close": "tancar",
+ "about": "Sobre",
+ "global_stats": "Estadístiques globals",
+ "games_played": "Jocs jugats",
+ "win_rate": "Percentatge de victòries",
+ "current_streak": "Ratxa actual",
+ "languages_won": "Idiomes guanyats",
+ "best_overall_streak": "Millor ratxa general",
+ "best_active_streak": "Millor ratxa activa",
+ "your_languages": "Els teus idiomes",
+ "no_games_yet": "Encara no has jugat. Tria un idioma per començar!",
+ "wins": "Victòries",
+ "losses": "Derrotes",
+ "avg_attempts": "Intents mitjans",
+ "best_streak": "Millor ratxa",
+ "play": "Jugar",
+ "search_language": "Cercar idioma...",
+ "external_links": "Enllaços externs",
+ "coming_soon": "properament!",
+ "game": "joc",
+ "games_lowercase": "jocs",
+ "definition": "Definició",
+ "look_up_on_wiktionary": "Cercar al Viccionari",
+ "easy": "Fàcil",
+ "normal": "Normal",
+ "hard": "Difícil",
+ "easy_desc": "S'accepta qualsevol paraula, encara que no sigui al diccionari",
+ "normal_desc": "Els intents han de ser paraules vàlides del diccionari",
+ "hard_desc": "Les pistes revelades s'han d'utilitzar en els intents següents",
+ "high_contrast": "Alt contrast",
+ "high_contrast_desc": "Colors per a daltònics",
+ "today": "Avui",
+ "statistics": "Estadístiques",
+ "todays_word_reveal": "La paraula d'avui — Juga per descobrir-la!",
+ "play_now": "Jugar ara",
+ "future_word": "Aquesta paraula encara no s'ha jugat. Torna més tard!",
+ "community_stats": "Estadístiques de la comunitat",
+ "players": "Jugadors",
+ "plays": "partides",
+ "win": "victòria",
+ "first_to_play": "Sigues el primer a jugar avui!",
+ "top_score": "Millor puntuació d'avui!",
+ "all_words": "Totes les paraules",
+ "daily_words_counting": "paraules diàries i comptant",
+ "newer": "Més recent",
+ "older": "Més antic",
+ "page_of": "Pàgina {page} de {total}",
+ "report_bad_word": "Informar d'una paraula inadequada",
+ "view_all_words": "Veure totes les paraules en {lang}",
+ "difficulty_locked": "No es pot canviar la dificultat després d'endevinar"
}
}
diff --git a/data/languages/ckb/language_config.json b/data/languages/ckb/language_config.json
index e55d82ff..7b8cb267 100644
--- a/data/languages/ckb/language_config.json
+++ b/data/languages/ckb/language_config.json
@@ -12,13 +12,13 @@
},
"text": {
"subheader": "کوردی",
- "next_word": "وشەی دواتر ",
- "no_attempts": "هەوڵت لەگەڵ هیچ وشەیەک نەداوە! ",
- "share": "هاوبەشکردن ",
- "notification-copied": "لەبەر گیرایەوە ",
- "notification-partial-word": "تکایە وشەیەکی تەواو بنووسە ",
+ "next_word": "وشەی دواتر",
+ "no_attempts": "هەوڵت لەگەڵ هیچ وشەیەک نەداوە!",
+ "share": "هاوبەشکردن",
"share_challenge_win": "وۆردڵی ئەمڕۆم لە {n} هەوڵدا دۆزییەوە. دەتوانیت لەمن باشتر بیت؟",
- "share_challenge_lose": "نەمتوانی وۆردڵی ئەمڕۆ بدۆزمەوە. تۆ دەتوانیت؟"
+ "share_challenge_lose": "نەمتوانی وۆردڵی ئەمڕۆ بدۆزمەوە. تۆ دەتوانیت؟",
+ "notification_copied": "لەبەر گیرایەوە",
+ "notification_partial_word": "تکایە وشەیەکی تەواو بنووسە"
},
"language_code_3": "",
"language_code_iso_639_3": "",
diff --git a/data/languages/cs/language_config.json b/data/languages/cs/language_config.json
index 62fe53a3..000059ea 100644
--- a/data/languages/cs/language_config.json
+++ b/data/languages/cs/language_config.json
@@ -5,35 +5,35 @@
"name_native": "čeština",
"meta": {
"locale": "cs",
- "title": "Denní slovo ",
- "description": "Hádejte skryté slovo v 6 pokusech (nebo méně). Každý den je k dispozici nový puzzle! ",
+ "title": "Denní slovo",
+ "description": "Hádejte skryté slovo v 6 pokusech (nebo méně). Každý den je k dispozici nový puzzle!",
"keywords": "čeština, puzzle, slovo, hra, hra, online, hádat, denně"
},
"text": {
"subheader": "čeština",
- "next_word": "Další slovo ",
- "no_attempts": "Ještě jste nezkoušeli žádná slova! ",
+ "next_word": "Další slovo",
+ "no_attempts": "Ještě jste nezkoušeli žádná slova!",
"share": "Sdílet",
- "notification-copied": "Zkopírován do schránky ",
- "notification-partial-word": "Zadejte prosím úplné slovo ",
"share_challenge_win": "Dnešní Wordle jsem dal/a za {n} pokusů. Dokážeš to líp?",
- "share_challenge_lose": "Dnešní Wordle jsem neuhodl/a. Dokážeš to ty?"
+ "share_challenge_lose": "Dnešní Wordle jsem neuhodl/a. Dokážeš to ty?",
+ "notification_copied": "Zkopírován do schránky",
+ "notification_partial_word": "Zadejte prosím úplné slovo"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Jak hrát ",
- "title_2": "Příklady ",
- "close": "Zavřete tuto zprávu ",
- "text_1_1_1": "Odhadnout ",
- "text_1_1_2": "v šesti pokusech nebo méně. ",
- "text_1_2": "Každý odhad musí být platným pěti písmenem. Stisknutím tlačítka ENTER odeslejte odhad. ",
- "text_1_3": "Poté, co odhadnete, dlaždice změní barvu, která označuje, která písmena vašeho slova jsou správná nebo téměř správná. ",
- "text_2_1": "je ve slově a ve správném místě! ",
- "text_2_2": "je ve slově, ale ne ve správném místě. ",
- "text_2_3": "není přítomen ve slově, který se snaží myslet. ",
- "text_3": "Každý den bude k dispozici nové slovo! "
+ "title": "Jak hrát",
+ "title_2": "Příklady",
+ "close": "Zavřete tuto zprávu",
+ "text_1_1_1": "Odhadnout",
+ "text_1_1_2": "v šesti pokusech nebo méně.",
+ "text_1_2": "Každý odhad musí být platným pěti písmenem. Stisknutím tlačítka ENTER odeslejte odhad.",
+ "text_1_3": "Poté, co odhadnete, dlaždice změní barvu, která označuje, která písmena vašeho slova jsou správná nebo téměř správná.",
+ "text_2_1": "je ve slově a ve správném místě!",
+ "text_2_2": "je ve slově, ale ne ve správném místě.",
+ "text_2_3": "není přítomen ve slově, který se snaží myslet.",
+ "text_3": "Každý den bude k dispozici nové slovo!"
},
"diacritic_map": {
"a": [
diff --git a/data/languages/da/language_config.json b/data/languages/da/language_config.json
index 37439999..04b21437 100644
--- a/data/languages/da/language_config.json
+++ b/data/languages/da/language_config.json
@@ -5,48 +5,42 @@
"name_native": "dansk",
"meta": {
"locale": "da",
- "title": "Det daglige ordspil ",
- "description": "Gæt det skjulte ord i 6 forsøg (eller mindre). Et nyt puslespil er tilgængelig hver dag! ",
+ "title": "Det daglige ordspil",
+ "description": "Gæt det skjulte ord i 6 forsøg (eller mindre). Et nyt puslespil er tilgængelig hver dag!",
"keywords": "dansk, Puslespil, Word, Play, Game, Online, Gæt, Dagligt"
},
"text": {
"subheader": "dansk",
- "next_word": "Næste Word. ",
- "no_attempts": "Du har ikke prøvet nogen ord endnu! ",
- "share": "Del ",
- "notification-copied": "Kopieret til udklipsholder ",
- "notification-partial-word": "Indtast venligst et fuldt ord ",
+ "next_word": "Næste Word.",
+ "no_attempts": "Du har ikke prøvet nogen ord endnu!",
+ "share": "Del",
"share_challenge_win": "Jeg klarede dagens Wordle på {n} forsøg. Kan du slå mig?",
- "share_challenge_lose": "Jeg klarede ikke dagens Wordle. Kan du?"
+ "share_challenge_lose": "Jeg klarede ikke dagens Wordle. Kan du?",
+ "notification_copied": "Kopieret til udklipsholder",
+ "notification_partial_word": "Indtast venligst et fuldt ord"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Sådan spiller du ",
- "title_2": "Eksempler. ",
- "close": "Luk denne besked ",
- "text_1_1_1": "Gæt ",
- "text_1_1_2": "i seks forsøg eller mindre. ",
- "text_1_2": "Hvert gæt skal være et gyldigt fem bogstavord. Tryk på ENTER-knappen for at indsende dit gæt. ",
- "text_1_3": "Når du tror, vil fliserne ændre farve for at angive, hvilke bogstaver i dit ord er korrekte eller næsten korrekte. ",
- "text_2_1": "er i ordet og på den rigtige placering! ",
- "text_2_2": "er i ordet, men ikke på den rigtige placering. ",
- "text_2_3": "er ikke til stede i det ord, du forsøger at gætte. ",
- "text_3": "Et nyt ord vil være tilgængeligt hver dag! "
+ "title": "Sådan spiller du",
+ "title_2": "Eksempler.",
+ "close": "Luk denne besked",
+ "text_1_1_1": "Gæt",
+ "text_1_1_2": "i seks forsøg eller mindre.",
+ "text_1_2": "Hvert gæt skal være et gyldigt fem bogstavord. Tryk på ENTER-knappen for at indsende dit gæt.",
+ "text_1_3": "Når du tror, vil fliserne ændre farve for at angive, hvilke bogstaver i dit ord er korrekte eller næsten korrekte.",
+ "text_2_1": "er i ordet og på den rigtige placering!",
+ "text_2_2": "er i ordet, men ikke på den rigtige placering.",
+ "text_2_3": "er ikke til stede i det ord, du forsøger at gætte.",
+ "text_3": "Et nyt ord vil være tilgængeligt hver dag!"
},
"ui": {
"settings": "Indstillinger",
"dark_mode": "Mørk tilstand",
"dark_mode_desc": "Skift mørkt tema",
- "haptic_feedback": "Haptisk feedback",
- "haptic_feedback_desc": "Vibration ved berøring",
- "sound_effects": "Lydeffekter",
- "sound_effects_desc": "Vind/tab lyde",
"right_to_left": "Højre til venstre",
"keyboard_layout": "Tastaturlayout",
- "easy_mode": "Tillad alle ord",
- "easy_mode_label": "nem tilstand",
"install_app": "Installer app",
"install_app_desc": "Spil offline & få app-ikon",
"report_issue": "Rapporter et problem",
diff --git a/data/languages/de/language_config.json b/data/languages/de/language_config.json
index 342bb8ff..89f7f9a0 100644
--- a/data/languages/de/language_config.json
+++ b/data/languages/de/language_config.json
@@ -21,46 +21,40 @@
"locale": "de",
"title": "Das tägliche Wortspiel",
"description": "Erraten Sie das verborgene Wort in 6 Versuchen (oder weniger). Jeden Tag ist ein neues Rätsel verfügbar!",
- "keywords": "Deutsch, Englisch, Puzzle, Word, Spiel, Spiel, online, Vermutung, täglich, Ratespiel, wordle "
+ "keywords": "Deutsch, Englisch, Puzzle, Word, Spiel, Spiel, online, Vermutung, täglich, Ratespiel, wordle"
},
"text": {
"subheader": "Deutsch",
- "next_word": "Nächstes Wort ",
- "no_attempts": "Sie haben noch keine Wörter versucht! ",
- "share": "Teilen ",
- "notification-copied": "In die Zwischenablage kopiert. ",
- "notification-partial-word": "Bitte geben Sie ein vollständiges Wort ein! ",
+ "next_word": "Nächstes Wort",
+ "no_attempts": "Sie haben noch keine Wörter versucht!",
+ "share": "Teilen",
"share_challenge_win": "Ich habe das heutige Wordle in {n} Versuchen gelöst. Schaffst du es besser?",
- "share_challenge_lose": "Ich habe das heutige Wordle nicht geschafft. Schaffst du es?"
+ "share_challenge_lose": "Ich habe das heutige Wordle nicht geschafft. Schaffst du es?",
+ "notification_copied": "In die Zwischenablage kopiert.",
+ "notification_partial_word": "Bitte geben Sie ein vollständiges Wort ein!"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Spielanleitung ",
- "title_2": "Beispiele ",
- "close": "Schließen ",
- "text_1_1_1": "Erraten Sie das ",
- "text_1_1_2": "in sechs Versuchen oder weniger. ",
- "text_1_2": "Jeder Versuch muss ein gültiges Wort mit fünf Buchstaben sein. Drücken Sie die ENTER-Taste, um Ihren Versuch einzureichen. ",
- "text_1_3": "Nachdem Sie ein Wort eingegeben haben, ändern die Kacheln die Farbe, um anzuzeigen, welche Buchstaben Ihres Wortes korrekt oder fast korrekt sind. ",
- "text_2_1": "ist im Wort und am richtigen Ort! ",
- "text_2_2": "ist im Wort, aber nicht an der richtigen Stelle. ",
- "text_2_3": "ist nicht in dem gesuchten Wort vorhanden. ",
- "text_3": "Ein neues Wort wird täglich verfügbar sein! "
+ "title": "Spielanleitung",
+ "title_2": "Beispiele",
+ "close": "Schließen",
+ "text_1_1_1": "Erraten Sie das",
+ "text_1_1_2": "in sechs Versuchen oder weniger.",
+ "text_1_2": "Jeder Versuch muss ein gültiges Wort mit fünf Buchstaben sein. Drücken Sie die ENTER-Taste, um Ihren Versuch einzureichen.",
+ "text_1_3": "Nachdem Sie ein Wort eingegeben haben, ändern die Kacheln die Farbe, um anzuzeigen, welche Buchstaben Ihres Wortes korrekt oder fast korrekt sind.",
+ "text_2_1": "ist im Wort und am richtigen Ort!",
+ "text_2_2": "ist im Wort, aber nicht an der richtigen Stelle.",
+ "text_2_3": "ist nicht in dem gesuchten Wort vorhanden.",
+ "text_3": "Ein neues Wort wird täglich verfügbar sein!"
},
"ui": {
"settings": "Einstellungen",
"dark_mode": "Dunkelmodus",
"dark_mode_desc": "Dunkles Design umschalten",
- "haptic_feedback": "Haptisches Feedback",
- "haptic_feedback_desc": "Vibration bei Berührung",
- "sound_effects": "Soundeffekte",
- "sound_effects_desc": "Gewinn-/Verlust-Töne",
"right_to_left": "Rechts nach links",
"keyboard_layout": "Tastaturlayout",
- "easy_mode": "Beliebiges Wort erlauben",
- "easy_mode_label": "einfacher Modus",
"install_app": "App installieren",
"install_app_desc": "Offline spielen & App-Symbol erhalten",
"report_issue": "Problem melden",
diff --git a/data/languages/el/language_config.json b/data/languages/el/language_config.json
index 61a760db..4d48aa43 100644
--- a/data/languages/el/language_config.json
+++ b/data/languages/el/language_config.json
@@ -37,33 +37,33 @@
"locale": "el",
"wordle_native": "γουόρντλ",
"title": "Το καθημερινό παιχνίδι λέξεων",
- "description": "Μαντέψτε την κρυμμένη λέξη σε 6 προσπάθειες (ή λιγότερο). Ένα νέο παζλ είναι διαθέσιμο κάθε μέρα! ",
+ "description": "Μαντέψτε την κρυμμένη λέξη σε 6 προσπάθειες (ή λιγότερο). Ένα νέο παζλ είναι διαθέσιμο κάθε μέρα!",
"keywords": "Ελληνικά, παζλ, λέξη, παιχνίδι, παιχνίδι, online, μαντέψτε, καθημερινά"
},
"text": {
"subheader": "Ελληνικά",
- "next_word": "Επόμενη λέξη ",
- "no_attempts": "Δεν έχετε δοκιμάσει ακόμα λέξεις! ",
+ "next_word": "Επόμενη λέξη",
+ "no_attempts": "Δεν έχετε δοκιμάσει ακόμα λέξεις!",
"share": "Κοινοποίηση",
- "notification-copied": "Αντιγραφή στο πρόχειρο ",
- "notification-partial-word": "Παρακαλώ εισάγετε μια πλήρη λέξη ",
"share_challenge_win": "Έλυσα το σημερινό Wordle σε {n} προσπάθειες. Μπορείς καλύτερα;",
- "share_challenge_lose": "Δεν έλυσα το σημερινό Wordle. Εσύ μπορείς;"
+ "share_challenge_lose": "Δεν έλυσα το σημερινό Wordle. Εσύ μπορείς;",
+ "notification_copied": "Αντιγραφή στο πρόχειρο",
+ "notification_partial_word": "Παρακαλώ εισάγετε μια πλήρη λέξη"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Πώς να παίξεις ",
- "title_2": "Παραδείγματα ",
- "close": "Κλείστε αυτό το μήνυμα ",
- "text_1_1_1": "Μαντέψτε το ",
- "text_1_1_2": "σε έξι προσπάθειες ή λιγότερο. ",
- "text_1_2": "Κάθε εικασία πρέπει να είναι μια έγκυρη λέξη πέντε γραμμάτων. Πατήστε το κουμπί ENTER για να υποβάλετε την εικασία σας. ",
- "text_1_3": "Αφού υποθέσετε, τα κεραμίδια θα αλλάξουν το χρώμα για να δείξουν ποια γράμματα της λέξης σας είναι σωστά ή σχεδόν σωστά. ",
- "text_2_1": "είναι στη λέξη και στη σωστή θέση! ",
- "text_2_2": "είναι στη λέξη, αλλά όχι στη σωστή θέση. ",
- "text_2_3": "δεν υπάρχει στη λέξη που προσπαθείτε να μαντέψετε. ",
- "text_3": "Μια νέα λέξη θα είναι διαθέσιμη κάθε μέρα! "
+ "title": "Πώς να παίξεις",
+ "title_2": "Παραδείγματα",
+ "close": "Κλείστε αυτό το μήνυμα",
+ "text_1_1_1": "Μαντέψτε το",
+ "text_1_1_2": "σε έξι προσπάθειες ή λιγότερο.",
+ "text_1_2": "Κάθε εικασία πρέπει να είναι μια έγκυρη λέξη πέντε γραμμάτων. Πατήστε το κουμπί ENTER για να υποβάλετε την εικασία σας.",
+ "text_1_3": "Αφού υποθέσετε, τα κεραμίδια θα αλλάξουν το χρώμα για να δείξουν ποια γράμματα της λέξης σας είναι σωστά ή σχεδόν σωστά.",
+ "text_2_1": "είναι στη λέξη και στη σωστή θέση!",
+ "text_2_2": "είναι στη λέξη, αλλά όχι στη σωστή θέση.",
+ "text_2_3": "δεν υπάρχει στη λέξη που προσπαθείτε να μαντέψετε.",
+ "text_3": "Μια νέα λέξη θα είναι διαθέσιμη κάθε μέρα!"
}
}
diff --git a/data/languages/en/language_config.json b/data/languages/en/language_config.json
index 36196d29..65b38da2 100644
--- a/data/languages/en/language_config.json
+++ b/data/languages/en/language_config.json
@@ -10,11 +10,11 @@
},
"text": {
"subheader": "English",
- "next_word": "Next word ",
- "no_attempts": "You haven't tried any words yet! ",
- "share": "Share ",
- "notification-copied": "Copied to clipboard ",
- "notification-partial-word": "Please enter a full word "
+ "next_word": "Next word",
+ "no_attempts": "You haven't tried any words yet!",
+ "share": "Share",
+ "notification_copied": "Copied to clipboard",
+ "notification_partial_word": "Please enter a full word"
},
"language_code_3": "",
"language_code_iso_639_3": "",
@@ -36,14 +36,8 @@
"settings": "Settings",
"dark_mode": "Dark Mode",
"dark_mode_desc": "Toggle dark theme",
- "haptic_feedback": "Haptic Feedback",
- "haptic_feedback_desc": "Vibration on touch",
- "sound_effects": "Sound Effects",
- "sound_effects_desc": "Win/lose sounds",
"right_to_left": "Right to left",
"keyboard_layout": "Keyboard layout",
- "easy_mode": "Allow any word",
- "easy_mode_label": "easy mode",
"install_app": "Install App",
"install_app_desc": "Play offline & get app icon",
"report_issue": "Report an Issue",
@@ -61,4 +55,4 @@
"install": "Install",
"close": "close"
}
-}
\ No newline at end of file
+}
diff --git a/data/languages/eo/language_config.json b/data/languages/eo/language_config.json
index 781edd79..799e1a3f 100644
--- a/data/languages/eo/language_config.json
+++ b/data/languages/eo/language_config.json
@@ -13,10 +13,10 @@
"next_word": "Sekva vorto",
"no_attempts": "Vi ankoraŭ ne provis vortojn!",
"share": "Diskonigi",
- "notification-copied": "Kopiita al tondujo",
- "notification-partial-word": "Bonvolu enmeti plenan vorton",
"share_challenge_win": "Mi solvis la hodiaŭan Wordle en {n} provoj. Ĉu vi povas superi min?",
- "share_challenge_lose": "Mi ne solvis la hodiaŭan Wordle. Ĉu vi povas?"
+ "share_challenge_lose": "Mi ne solvis la hodiaŭan Wordle. Ĉu vi povas?",
+ "notification_copied": "Kopiita al tondujo",
+ "notification_partial_word": "Bonvolu enmeti plenan vorton"
},
"language_code_3": "epo",
"language_code_iso_639_3": "epo",
diff --git a/data/languages/es/language_config.json b/data/languages/es/language_config.json
index 63a59e34..005358c3 100644
--- a/data/languages/es/language_config.json
+++ b/data/languages/es/language_config.json
@@ -23,48 +23,55 @@
},
"meta": {
"locale": "es",
- "title": "El juego diario de palabras ",
- "description": "Adivina la palabra oculta en 6 intentos (o menos). ¡Un nuevo rompecabezas está disponible cada día! ",
+ "title": "El juego diario de palabras",
+ "description": "Adivina la palabra oculta en 6 intentos (o menos). ¡Un nuevo rompecabezas está disponible cada día!",
"keywords": "Español, rompecabezas, palabra, juego, juego, en línea, supongo, diariamente"
},
"text": {
"subheader": "Español",
- "next_word": "Palabra siguiente ",
- "no_attempts": "¡No has probado ninguna palabra todavía! ",
+ "next_word": "Palabra siguiente",
+ "no_attempts": "¡No has probado ninguna palabra todavía!",
"share": "Compartir",
- "notification-copied": "Copiado al portapapeles ",
- "notification-partial-word": "Por favor ingrese una palabra completa ",
+ "shared": "¡Compartido!",
+ "copied": "¡Copiado!",
"share_challenge_win": "Resolví el Wordle de hoy en {n} intentos. ¿Puedes superarme?",
- "share_challenge_lose": "No pude resolver el Wordle de hoy. ¿Tú puedes?"
+ "share_challenge_lose": "No pude resolver el Wordle de hoy. ¿Tú puedes?",
+ "notification_copied": "Copiado al portapapeles",
+ "notification_word_not_valid": "La palabra no es válida",
+ "notification_partial_word": "Por favor ingrese una palabra completa",
+ "hard_mode_position": "Modo difícil: {letter} debe estar en la posición {position}",
+ "hard_mode_contains": "Modo difícil: el intento debe contener {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Cómo jugar ",
- "title_2": "Ejemplos ",
- "close": "Cierra este mensaje ",
- "text_1_1_1": "Adivina la ",
- "text_1_1_2": "en seis intentos o menos. ",
- "text_1_2": "Cada conjetura debe ser una palabra válida de cinco letras. Presione el botón ENTER para enviar su conjetura. ",
- "text_1_3": "Después de adivinar, los azulejos cambiarán de color para indicar qué letras de su palabra son correctas o casi correctas. ",
- "text_2_1": "está en la palabra y en la ubicación correcta! ",
- "text_2_2": "está en la palabra, pero no en la ubicación correcta. ",
- "text_2_3": "no está presente en la palabra que está tratando de adivinar. ",
- "text_3": "¡Una nueva palabra estará disponible cada día! "
+ "title": "Cómo jugar",
+ "title_2": "Ejemplos",
+ "close": "Cierra este mensaje",
+ "text_1_1_1": "Adivina la",
+ "text_1_1_2": "en seis intentos o menos.",
+ "text_1_2": "Cada conjetura debe ser una palabra válida de cinco letras. Presione el botón ENTER para enviar su conjetura.",
+ "text_1_3": "Después de adivinar, los azulejos cambiarán de color para indicar qué letras de su palabra son correctas o casi correctas.",
+ "text_2_1": "está en la palabra y en la ubicación correcta!",
+ "text_2_2": "está en la palabra, pero no en la ubicación correcta.",
+ "text_2_3": "no está presente en la palabra que está tratando de adivinar.",
+ "text_3": "¡Una nueva palabra estará disponible cada día!"
},
"ui": {
"settings": "Ajustes",
"dark_mode": "Modo oscuro",
"dark_mode_desc": "Cambiar tema oscuro",
- "haptic_feedback": "Respuesta háptica",
- "haptic_feedback_desc": "Vibración al tocar",
- "sound_effects": "Efectos de sonido",
- "sound_effects_desc": "Sonidos de victoria/derrota",
+ "sound_and_haptics": "Sonido y vibración",
+ "difficulty": "Dificultad",
+ "word_info": "Info de la palabra",
+ "word_info_desc": "Definición e imagen IA tras el juego",
+ "language": "Idioma",
+ "change_language": "Cambiar idioma",
+ "better_than": "Mejor que",
+ "of_players": "de los jugadores",
"right_to_left": "Derecha a izquierda",
"keyboard_layout": "Diseño del teclado",
- "easy_mode": "Permitir cualquier palabra",
- "easy_mode_label": "modo fácil",
"install_app": "Instalar aplicación",
"install_app_desc": "Juega sin conexión y obtén el icono",
"report_issue": "Reportar un problema",
@@ -80,6 +87,55 @@
"add_to_home": "Añadir a la pantalla de inicio",
"play_daily_like_app": "Juega Wordle diariamente como una app",
"install": "Instalar",
- "close": "cerrar"
+ "close": "cerrar",
+ "about": "Acerca de",
+ "global_stats": "Estadísticas globales",
+ "games_played": "Juegos jugados",
+ "win_rate": "Porcentaje de victorias",
+ "current_streak": "Racha actual",
+ "languages_won": "Idiomas ganados",
+ "best_overall_streak": "Mejor racha general",
+ "best_active_streak": "Mejor racha activa",
+ "your_languages": "Tus idiomas",
+ "no_games_yet": "Aún no has jugado. ¡Elige un idioma para empezar!",
+ "wins": "Victorias",
+ "losses": "Derrotas",
+ "avg_attempts": "Intentos promedio",
+ "best_streak": "Mejor racha",
+ "play": "Jugar",
+ "search_language": "Buscar idioma...",
+ "external_links": "Enlaces externos",
+ "coming_soon": "¡próximamente!",
+ "game": "juego",
+ "games_lowercase": "juegos",
+ "definition": "Definición",
+ "look_up_on_wiktionary": "Buscar en Wiktionary",
+ "easy": "Fácil",
+ "normal": "Normal",
+ "hard": "Difícil",
+ "easy_desc": "Se acepta cualquier palabra, aunque no esté en el diccionario",
+ "normal_desc": "Los intentos deben ser palabras válidas del diccionario",
+ "hard_desc": "Las pistas reveladas deben usarse en los siguientes intentos",
+ "high_contrast": "Alto contraste",
+ "high_contrast_desc": "Colores para daltónicos",
+ "today": "Hoy",
+ "statistics": "Estadísticas",
+ "todays_word_reveal": "La palabra de hoy — ¡Juega para descubrirla!",
+ "play_now": "Jugar ahora",
+ "future_word": "Esta palabra aún no se ha jugado. ¡Vuelve más tarde!",
+ "community_stats": "Estadísticas de la comunidad",
+ "players": "Jugadores",
+ "plays": "partidas",
+ "win": "victoria",
+ "first_to_play": "¡Sé el primero en jugar hoy!",
+ "top_score": "¡Mejor puntuación de hoy!",
+ "all_words": "Todas las palabras",
+ "daily_words_counting": "palabras diarias y contando",
+ "newer": "Más reciente",
+ "older": "Más antiguo",
+ "page_of": "Página {page} de {total}",
+ "report_bad_word": "Reportar palabra inapropiada",
+ "view_all_words": "Ver todas las palabras en {lang}",
+ "difficulty_locked": "No se puede cambiar la dificultad después de adivinar"
}
}
diff --git a/data/languages/et/language_config.json b/data/languages/et/language_config.json
index cf842c05..57f98bfe 100644
--- a/data/languages/et/language_config.json
+++ b/data/languages/et/language_config.json
@@ -6,47 +6,41 @@
"meta": {
"locale": "et",
"title": "Igapäevane sõnamäng",
- "description": "Arva Varjatud sõna 6 püüab (või vähem). Iga päev on saadaval uus puzzle! ",
+ "description": "Arva Varjatud sõna 6 püüab (või vähem). Iga päev on saadaval uus puzzle!",
"keywords": "eesti, puzzle, sõna, mängimine, mäng, võrgus, arvan, iga päev"
},
"text": {
"subheader": "eesti",
- "next_word": "Järgmine sõna ",
- "no_attempts": "Sa pole veel ühtegi sõna proovinud! ",
- "share": "Jagama ",
- "notification-copied": "Kopeeritud lõikepuhvrisse ",
- "notification-partial-word": "Palun sisestage täielik sõna ",
+ "next_word": "Järgmine sõna",
+ "no_attempts": "Sa pole veel ühtegi sõna proovinud!",
+ "share": "Jagama",
"share_challenge_win": "Lahendasin tänase Wordle {n} katsega. Kas sa suudad paremini?",
- "share_challenge_lose": "Ma ei lahendanud tänast Wordle't. Kas sina suudad?"
+ "share_challenge_lose": "Ma ei lahendanud tänast Wordle't. Kas sina suudad?",
+ "notification_copied": "Kopeeritud lõikepuhvrisse",
+ "notification_partial_word": "Palun sisestage täielik sõna"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Kuidas mängida ",
- "title_2": "Näited ",
- "close": "Sulge see sõnum ",
- "text_1_1_1": "Arva ",
- "text_1_1_2": "kuus püüab või vähem. ",
- "text_1_2": "Iga vist peab olema kehtiv viis kirja sõna. Vajutage ENTER nuppu, et esitada oma vist. ",
- "text_1_3": "Pärast arvata, plaadid muudavad värvi, et näidata, millised teie sõna tähed on õiged või peaaegu õiged. ",
- "text_2_1": "on sõna ja õiges kohas! ",
- "text_2_2": "on sõna, kuid mitte õiges kohas. ",
- "text_2_3": "ei ole sõna sõna, mida sa üritad ära arvata. ",
- "text_3": "Uus sõna on iga päev kättesaadav! "
+ "title": "Kuidas mängida",
+ "title_2": "Näited",
+ "close": "Sulge see sõnum",
+ "text_1_1_1": "Arva",
+ "text_1_1_2": "kuus püüab või vähem.",
+ "text_1_2": "Iga vist peab olema kehtiv viis kirja sõna. Vajutage ENTER nuppu, et esitada oma vist.",
+ "text_1_3": "Pärast arvata, plaadid muudavad värvi, et näidata, millised teie sõna tähed on õiged või peaaegu õiged.",
+ "text_2_1": "on sõna ja õiges kohas!",
+ "text_2_2": "on sõna, kuid mitte õiges kohas.",
+ "text_2_3": "ei ole sõna sõna, mida sa üritad ära arvata.",
+ "text_3": "Uus sõna on iga päev kättesaadav!"
},
"ui": {
"settings": "Seaded",
"dark_mode": "Tume režiim",
"dark_mode_desc": "Lülita tume teema",
- "haptic_feedback": "Haptiline tagasiside",
- "haptic_feedback_desc": "Vibratsioon puudutamisel",
- "sound_effects": "Heliefektid",
- "sound_effects_desc": "Võidu/kaotuse helid",
"right_to_left": "Paremalt vasakule",
"keyboard_layout": "Klaviatuuripaigutus",
- "easy_mode": "Luba iga sõna",
- "easy_mode_label": "lihtne režiim",
"install_app": "Paigalda rakendus",
"install_app_desc": "Mängi võrguühenduseta ja saa rakenduse ikoon",
"report_issue": "Teata probleemist",
diff --git a/data/languages/eu/language_config.json b/data/languages/eu/language_config.json
index d9f5c90c..1eedef7b 100644
--- a/data/languages/eu/language_config.json
+++ b/data/languages/eu/language_config.json
@@ -5,35 +5,40 @@
"name_native": "euskara",
"meta": {
"locale": "eu",
- "title": "Eguneko hitz jokoa ",
- "description": "Asmatu ezkutuko hitza 6 saiakera (edo gutxiago). Puzzle berri bat egunero eskuragarri dago! ",
+ "title": "Eguneko hitz jokoa",
+ "description": "Asmatu ezkutuko hitza 6 saiakera (edo gutxiago). Puzzle berri bat egunero eskuragarri dago!",
"keywords": "euskara, puzzlea, hitza, jolasa, jokoa, linean, asmatu, egunero"
},
"text": {
"subheader": "euskara",
- "next_word": "Hurrengo hitza ",
- "no_attempts": "Oraindik ez duzu hitzik probatu! ",
- "share": "Partekatu ",
- "notification-copied": "Arbelean kopiatuta ",
- "notification-partial-word": "Mesedez, idatzi hitz osoa ",
+ "next_word": "Hurrengo hitza",
+ "no_attempts": "Oraindik ez duzu hitzik probatu!",
+ "share": "Partekatu",
"share_challenge_win": "Gaurko Wordle {n} saiakeran ebatzi dut. Hobeto egin dezakezu?",
- "share_challenge_lose": "Ezin izan dut gaurko Wordle ebatzi. Zuk lortu dezakezu?"
+ "share_challenge_lose": "Ezin izan dut gaurko Wordle ebatzi. Zuk lortu dezakezu?",
+ "notification_copied": "Arbelean kopiatuta",
+ "notification_partial_word": "Mesedez, idatzi hitz osoa",
+ "shared": "Partekatuta!",
+ "copied": "Kopiatuta!",
+ "notification_word_not_valid": "Hitza ez da baliozkoa",
+ "hard_mode_position": "Modu gogorra: {letter} {position} posizioan egon behar da",
+ "hard_mode_contains": "Modu gogorra: asmakuntzak {letter} eduki behar du"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Nola jokatu ",
- "title_2": "Adibide ",
- "close": "Itxi mezu hau ",
- "text_1_1_1": "Asmatu ",
- "text_1_1_2": "sei saiakera edo gutxiagotan. ",
- "text_1_2": "Asmakizun bakoitzak bost letra hitz baliozkoa izan behar du. Sakatu Sartu botoia zure asmakizuna bidaltzeko. ",
- "text_1_3": "Asmatu ondoren, fitxak kolorea aldatuko da zure hitzen gutunak zuzenak edo ia zuzenak diren adierazteko. ",
- "text_2_1": "hitza da eta kokapen egokian! ",
- "text_2_2": "hitza da, baina ez kokapen egokian. ",
- "text_2_3": "ez dago asmatzen saiatzen ari zaren hitzean. ",
- "text_3": "Hitz berri bat erabilgarri egongo da egunero! "
+ "title": "Nola jokatu",
+ "title_2": "Adibide",
+ "close": "Itxi mezu hau",
+ "text_1_1_1": "Asmatu",
+ "text_1_1_2": "sei saiakera edo gutxiagotan.",
+ "text_1_2": "Asmakizun bakoitzak bost letra hitz baliozkoa izan behar du. Sakatu Sartu botoia zure asmakizuna bidaltzeko.",
+ "text_1_3": "Asmatu ondoren, fitxak kolorea aldatuko da zure hitzen gutunak zuzenak edo ia zuzenak diren adierazteko.",
+ "text_2_1": "hitza da eta kokapen egokian!",
+ "text_2_2": "hitza da, baina ez kokapen egokian.",
+ "text_2_3": "ez dago asmatzen saiatzen ari zaren hitzean.",
+ "text_3": "Hitz berri bat erabilgarri egongo da egunero!"
},
"diacritic_map": {
"c": [
@@ -42,5 +47,85 @@
"n": [
"ñ"
]
+ },
+ "ui": {
+ "settings": "Ezarpenak",
+ "dark_mode": "Modu iluna",
+ "dark_mode_desc": "Gai iluna aldatu",
+ "sound_and_haptics": "Soinua eta bibrazioak",
+ "difficulty": "Zailtasuna",
+ "word_info": "Hitz informazioa",
+ "word_info_desc": "Definizioa eta AI artea jokoaren ondoren",
+ "language": "Hizkuntza",
+ "change_language": "Aldatu hizkuntza",
+ "better_than": "Hobea",
+ "of_players": "jokalarietatik",
+ "right_to_left": "Eskuinetik ezkerrera",
+ "keyboard_layout": "Teklatu diseinua",
+ "install_app": "Instalatu aplikazioa",
+ "install_app_desc": "Jokatu lineaz kanpo eta lortu ikonoa",
+ "report_issue": "Arazo baten berri eman",
+ "view_source": "Ikusi iturburu kodea",
+ "guess_distribution": "Asmakuntza banaketa",
+ "games": "Jokoak",
+ "win_percent": "Irabazi %",
+ "streak": "Segidan",
+ "best": "Onena",
+ "all_languages": "Hizkuntza guztiak",
+ "languages": "Hizkuntzak",
+ "play_more_languages": "Jokatu hizkuntza gehiagotan estatistika orokorrak ikusteko!",
+ "add_to_home": "Gehitu hasierako pantailara",
+ "play_daily_like_app": "Jokatu Wordle egunero aplikazio gisa",
+ "install": "Instalatu",
+ "close": "itxi",
+ "about": "Honi buruz",
+ "global_stats": "Estatistika orokorrak",
+ "games_played": "Jokatutako jokoak",
+ "win_rate": "Irabazi-tasa",
+ "current_streak": "Uneko segida",
+ "languages_won": "Irabazitako hizkuntzak",
+ "best_overall_streak": "Segida orokor onena",
+ "best_active_streak": "Segida aktibo onena",
+ "your_languages": "Zure hizkuntzak",
+ "no_games_yet": "Oraindik ez duzu jokorik jokatu. Aukeratu hizkuntza bat hasteko!",
+ "wins": "Irabaziak",
+ "losses": "Galtzeak",
+ "avg_attempts": "Batez besteko saiakerak",
+ "best_streak": "Segida onena",
+ "play": "Jokatu",
+ "search_language": "Bilatu hizkuntza...",
+ "external_links": "Kanpo estekak",
+ "coming_soon": "laster dator!",
+ "game": "jokoa",
+ "games_lowercase": "jokoak",
+ "definition": "Definizioa",
+ "look_up_on_wiktionary": "Bilatu Wiktionary-n",
+ "easy": "Erraza",
+ "normal": "Normala",
+ "hard": "Zaila",
+ "easy_desc": "Edozein hitz onartuta, hiztegian ez badago ere",
+ "normal_desc": "Asmakuntzek hiztegiko hitz baliozko bat izan behar dute",
+ "hard_desc": "Agertutako pistak hurrengo asmakuntzetan erabili behar dira",
+ "high_contrast": "Kontraste altua",
+ "high_contrast_desc": "Kolore itsuenganako koloreak",
+ "today": "Gaur",
+ "statistics": "Estatistikak",
+ "todays_word_reveal": "Gaurko hitza — Jokatu agerian jartzeko!",
+ "play_now": "Jokatu orain",
+ "future_word": "Hitz hau oraindik ez da jokatu. Itzuli beranduago!",
+ "community_stats": "Komunitatearen estatistikak",
+ "players": "Jokalariak",
+ "plays": "jokaldiak",
+ "win": "irabazi",
+ "first_to_play": "Lehena gaur jokatzen!",
+ "top_score": "Gaur puntuaziorik onena!",
+ "all_words": "Hitz guztiak",
+ "daily_words_counting": "eguneko hitz eta gehiago",
+ "newer": "Berriagoa",
+ "older": "Zaharragoa",
+ "page_of": "{page}. orrialdea {total}(e)tik",
+ "report_bad_word": "Hitz txarra salatu",
+ "view_all_words": "Ikusi {lang} hitz guztiak",
+ "difficulty_locked": "Ezin da zailtasuna aldatu asmatzen hasi ondoren"
}
}
diff --git a/data/languages/fa/language_config.json b/data/languages/fa/language_config.json
index 6c2af0aa..f1c67ac5 100644
--- a/data/languages/fa/language_config.json
+++ b/data/languages/fa/language_config.json
@@ -6,35 +6,40 @@
"meta": {
"locale": "fa",
"wordle_native": "وردل",
- "title": "بازی روزانه کلمه ",
- "description": "حدس زدن کلمه پنهان در 6 تلاش (یا کمتر). پازل جدید هر روز در دسترس است! ",
+ "title": "بازی روزانه کلمه",
+ "description": "حدس زدن کلمه پنهان در 6 تلاش (یا کمتر). پازل جدید هر روز در دسترس است!",
"keywords": "فارسی، پازل، کلمه، بازی، بازی، آنلاین، حدس بزنید، روزانه"
},
"text": {
"subheader": "فارسی",
- "next_word": "کلمه بعدی ",
- "no_attempts": "شما هنوز هیچ کلمه ای را امتحان نکرده اید! ",
- "share": "اشتراک گذاری ",
- "notification-copied": "کپی شده به کلیپ بورد ",
- "notification-partial-word": "لطفا یک کلمه کامل وارد کنید ",
+ "next_word": "کلمه بعدی",
+ "no_attempts": "شما هنوز هیچ کلمه ای را امتحان نکرده اید!",
+ "share": "اشتراک گذاری",
"share_challenge_win": "وردل امروز رو تو {n} تلاش حل کردم. میتونی بهتر باشی؟",
- "share_challenge_lose": "وردل امروز رو نتونستم حل کنم. تو میتونی؟"
+ "share_challenge_lose": "وردل امروز رو نتونستم حل کنم. تو میتونی؟",
+ "notification_copied": "کپی شده به کلیپ بورد",
+ "notification_partial_word": "لطفا یک کلمه کامل وارد کنید",
+ "shared": "به اشتراک گذاشته شد!",
+ "copied": "کپی شد!",
+ "notification_word_not_valid": "کلمه معتبر نیست",
+ "hard_mode_position": "حالت سخت: {letter} باید در موقعیت {position} باشد",
+ "hard_mode_contains": "حالت سخت: حدس باید شامل {letter} باشد"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "true",
"help": {
- "title": "چگونه به بازی ",
- "title_2": "مثال ها ",
- "close": "این پیام را ببندید ",
- "text_1_1_1": "حدس بزن ",
- "text_1_1_2": "در شش تلاش یا کمتر. ",
- "text_1_2": "هر حدس باید یک کلمه معتبر پنج حرف باشد. دکمه ENTER را فشار دهید تا حدس بزنید. ",
- "text_1_3": "پس از حدس زدن، کاشی ها رنگ را تغییر می دهند تا نشان دهند که کدام حروف از کلمه شما درست یا تقریبا درست هستند. ",
- "text_2_1": "در کلمه و در محل درست است! ",
- "text_2_2": "در کلام، اما نه در محل درست نیست. ",
- "text_2_3": "در کلمه ای که میخواهید حدس بزنید وجود ندارد. ",
- "text_3": "یک کلمه جدید هر روز در دسترس خواهد بود! "
+ "title": "چگونه به بازی",
+ "title_2": "مثال ها",
+ "close": "این پیام را ببندید",
+ "text_1_1_1": "حدس بزن",
+ "text_1_1_2": "در شش تلاش یا کمتر.",
+ "text_1_2": "هر حدس باید یک کلمه معتبر پنج حرف باشد. دکمه ENTER را فشار دهید تا حدس بزنید.",
+ "text_1_3": "پس از حدس زدن، کاشی ها رنگ را تغییر می دهند تا نشان دهند که کدام حروف از کلمه شما درست یا تقریبا درست هستند.",
+ "text_2_1": "در کلمه و در محل درست است!",
+ "text_2_2": "در کلام، اما نه در محل درست نیست.",
+ "text_2_3": "در کلمه ای که میخواهید حدس بزنید وجود ندارد.",
+ "text_3": "یک کلمه جدید هر روز در دسترس خواهد بود!"
},
"diacritic_map": {
"ا": [
@@ -47,5 +52,85 @@
"ي": [
"ئ"
]
+ },
+ "ui": {
+ "settings": "تنظیمات",
+ "dark_mode": "حالت تاریک",
+ "dark_mode_desc": "تغییر پوسته تاریک",
+ "sound_and_haptics": "صدا و لرزش",
+ "difficulty": "سختی",
+ "word_info": "اطلاعات کلمه",
+ "word_info_desc": "تعریف و هنر هوش مصنوعی پس از بازی",
+ "language": "زبان",
+ "change_language": "تغییر زبان",
+ "better_than": "بهتر از",
+ "of_players": "از بازیکنان",
+ "right_to_left": "راست به چپ",
+ "keyboard_layout": "چیدمان صفحهکلید",
+ "install_app": "نصب برنامه",
+ "install_app_desc": "بازی آفلاین و دریافت آیکون",
+ "report_issue": "گزارش مشکل",
+ "view_source": "مشاهده کد منبع",
+ "guess_distribution": "توزیع حدسها",
+ "games": "بازیها",
+ "win_percent": "% برد",
+ "streak": "پیاپی",
+ "best": "بهترین",
+ "all_languages": "همه زبانها",
+ "languages": "زبانها",
+ "play_more_languages": "بیشتر بازی کنید تا آمار جهانی خود را ببینید!",
+ "add_to_home": "افزودن به صفحه اصلی",
+ "play_daily_like_app": "هر روز وردل بازی کنید مثل یک برنامه",
+ "install": "نصب",
+ "close": "بستن",
+ "about": "درباره",
+ "global_stats": "آمار جهانی",
+ "games_played": "بازیهای انجام شده",
+ "win_rate": "نرخ برد",
+ "current_streak": "پیاپی فعلی",
+ "languages_won": "زبانهای برده شده",
+ "best_overall_streak": "بهترین پیاپی کلی",
+ "best_active_streak": "بهترین پیاپی فعال",
+ "your_languages": "زبانهای شما",
+ "no_games_yet": "هنوز بازی نکردهاید. یک زبان انتخاب کنید!",
+ "wins": "بردها",
+ "losses": "باختها",
+ "avg_attempts": "میانگین تلاشها",
+ "best_streak": "بهترین پیاپی",
+ "play": "بازی",
+ "search_language": "جستجوی زبان...",
+ "external_links": "لینکهای خارجی",
+ "coming_soon": "به زودی!",
+ "game": "بازی",
+ "games_lowercase": "بازیها",
+ "definition": "تعریف",
+ "look_up_on_wiktionary": "جستجو در ویکیواژه",
+ "easy": "آسان",
+ "normal": "معمولی",
+ "hard": "سخت",
+ "easy_desc": "هر کلمهای قبول است، حتی اگر در فرهنگ لغت نباشد",
+ "normal_desc": "حدسها باید کلمات معتبر فرهنگ لغت باشند",
+ "hard_desc": "سرنخهای آشکار شده باید در حدسهای بعدی استفاده شوند",
+ "high_contrast": "کنتراست بالا",
+ "high_contrast_desc": "رنگهای مناسب برای کوررنگی",
+ "today": "امروز",
+ "statistics": "آمار",
+ "todays_word_reveal": "کلمه امروز — بازی کنید تا آشکار شود!",
+ "play_now": "همین الان بازی کنید",
+ "future_word": "این کلمه هنوز بازی نشده. بعداً برگردید!",
+ "community_stats": "آمار جامعه",
+ "players": "بازیکنان",
+ "plays": "بازیها",
+ "win": "برد",
+ "first_to_play": "اولین نفر امروز!",
+ "top_score": "بالاترین امتیاز امروز!",
+ "all_words": "همه کلمات",
+ "daily_words_counting": "کلمه روزانه و در حال افزایش",
+ "newer": "جدیدتر",
+ "older": "قدیمیتر",
+ "page_of": "صفحه {page} از {total}",
+ "report_bad_word": "گزارش کلمه نامناسب",
+ "view_all_words": "مشاهده همه کلمات {lang}",
+ "difficulty_locked": "پس از حدس زدن نمیتوان سختی را تغییر داد"
}
}
diff --git a/data/languages/fi/language_config.json b/data/languages/fi/language_config.json
index 92593659..793eea17 100644
--- a/data/languages/fi/language_config.json
+++ b/data/languages/fi/language_config.json
@@ -11,15 +11,18 @@
},
"text": {
"subheader": "Suomeksi",
- "next_word": "Seuraava sana ",
- "no_attempts": "Et ole vielä yrittänyt sanaa! ",
- "share": "Jaa ",
+ "next_word": "Seuraava sana",
+ "no_attempts": "Et ole vielä yrittänyt sanaa!",
+ "share": "Jaa",
"shared": "Jaettu!",
"copied": "Kopioitu!",
- "notification-copied": "Kopioitu ",
- "notification-partial-word": "Täytä täysi sana ",
"share_challenge_win": "Ratkaisin tämän päivän Wordlen {n} yrityksellä. Pääsetkö parempaan?",
- "share_challenge_lose": "En ratkaissut tämän päivän Wordlea. Pääsetkö sinä?"
+ "share_challenge_lose": "En ratkaissut tämän päivän Wordlea. Pääsetkö sinä?",
+ "notification_copied": "Kopioitu",
+ "notification_partial_word": "Täytä täysi sana",
+ "notification_word_not_valid": "Sana ei kelpaa",
+ "hard_mode_position": "Vaikea tila: {letter} pitää olla paikassa {position}",
+ "hard_mode_contains": "Vaikea tila: arvauksessa pitää olla {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
@@ -41,14 +44,8 @@
"settings": "Asetukset",
"dark_mode": "Tumma tila",
"dark_mode_desc": "Vaihda tumma teema",
- "haptic_feedback": "Värinäpalaute",
- "haptic_feedback_desc": "Värinä kosketuksella",
- "sound_effects": "Äänitehosteet",
- "sound_effects_desc": "Voitto/häviö äänet",
"right_to_left": "Oikealta vasemmalle",
"keyboard_layout": "Näppäimistöasettelu",
- "easy_mode": "Salli mikä tahansa sana",
- "easy_mode_label": "helppo tila",
"install_app": "Asenna sovellus",
"install_app_desc": "Pelaa offline ja saa sovelluskuvake",
"report_issue": "Ilmoita ongelmasta",
@@ -64,7 +61,64 @@
"add_to_home": "Lisää kotinäytölle",
"play_daily_like_app": "Pelaa Wordlea päivittäin kuin sovellusta",
"install": "Asenna",
- "close": "sulje"
+ "close": "sulje",
+ "sound_and_haptics": "Ääni ja värinä",
+ "difficulty": "Vaikeustaso",
+ "word_info": "Sanatiedot",
+ "word_info_desc": "Määritelmä ja AI-taide pelin jälkeen",
+ "language": "Kieli",
+ "change_language": "Vaihda kieli",
+ "better_than": "Parempi kuin",
+ "of_players": "pelaajista",
+ "about": "Tietoja",
+ "global_stats": "Kokonaistilastot",
+ "games_played": "Pelatut pelit",
+ "win_rate": "Voittoprosentti",
+ "current_streak": "Nykyinen putki",
+ "languages_won": "Voitetut kielet",
+ "best_overall_streak": "Paras kokonaisputki",
+ "best_active_streak": "Paras aktiivinen putki",
+ "your_languages": "Sinun kielesi",
+ "no_games_yet": "Et ole vielä pelannut. Valitse kieli aloittaaksesi!",
+ "wins": "Voitot",
+ "losses": "Häviöt",
+ "avg_attempts": "Keskim. arvaukset",
+ "best_streak": "Paras putki",
+ "play": "Pelaa",
+ "search_language": "Hae kieli...",
+ "external_links": "Ulkoiset linkit",
+ "coming_soon": "tulossa pian!",
+ "game": "peli",
+ "games_lowercase": "peliä",
+ "definition": "Määritelmä",
+ "look_up_on_wiktionary": "Hae Wiktionarystä",
+ "easy": "Helppo",
+ "normal": "Normaali",
+ "hard": "Vaikea",
+ "easy_desc": "Mikä tahansa sana hyväksytään, vaikkei se olisi sanakirjassa",
+ "normal_desc": "Arvausten pitää olla sanakirjan sanoja",
+ "hard_desc": "Paljastetut vihjeet pitää käyttää seuraavissa arvauksissa",
+ "high_contrast": "Korkea kontrasti",
+ "high_contrast_desc": "Värisokeiden ystävälliset värit",
+ "today": "Tänään",
+ "statistics": "Tilastot",
+ "todays_word_reveal": "Tämän päivän sana — Pelaa paljastaaksesi!",
+ "play_now": "Pelaa nyt",
+ "future_word": "Tätä sanaa ei ole vielä pelattu. Tule takaisin myöhemmin!",
+ "community_stats": "Yhteisön tilastot",
+ "players": "Pelaajat",
+ "plays": "pelikertaa",
+ "win": "voitto",
+ "first_to_play": "Ensimmäinen pelaaja tänään!",
+ "top_score": "Paras tulos tänään!",
+ "all_words": "Kaikki sanat",
+ "daily_words_counting": "päivittäistä sanaa ja lisää tulossa",
+ "newer": "Uudempi",
+ "older": "Vanhempi",
+ "page_of": "Sivu {page}/{total}",
+ "report_bad_word": "Ilmoita huono sana",
+ "view_all_words": "Näytä kaikki {lang} sanat",
+ "difficulty_locked": "Vaikeustasoa ei voi muuttaa arvaamisen jälkeen"
},
"diacritic_map": {
"a": [
diff --git a/data/languages/fo/language_config.json b/data/languages/fo/language_config.json
index 71d3bc76..ddc898ce 100644
--- a/data/languages/fo/language_config.json
+++ b/data/languages/fo/language_config.json
@@ -11,13 +11,18 @@
},
"text": {
"subheader": "føroyskt",
- "next_word": "Next word ",
- "no_attempts": "You haven't tried any words yet! ",
+ "next_word": "Next word",
+ "no_attempts": "You haven't tried any words yet!",
"share": "Deil",
- "notification-copied": "Copied to clipboard ",
- "notification-partial-word": "Please enter a full word ",
"share_challenge_win": "Eg loysdi Wordle dagsins á {n} royndum. Kanst tú betur?",
- "share_challenge_lose": "Eg loysdi ikki Wordle dagsins. Kanst tú?"
+ "share_challenge_lose": "Eg loysdi ikki Wordle dagsins. Kanst tú?",
+ "notification_copied": "Copied to clipboard",
+ "notification_partial_word": "Please enter a full word",
+ "shared": "Deilt!",
+ "copied": "Kopierað!",
+ "notification_word_not_valid": "Orðið er ikki gildigt",
+ "hard_mode_position": "Strangur móti: {letter} má vera í støðu {position}",
+ "hard_mode_contains": "Strangur móti: royndin má innihalda {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
@@ -51,5 +56,85 @@
"y": [
"ý"
]
+ },
+ "ui": {
+ "settings": "Stillingar",
+ "dark_mode": "Myrkt snið",
+ "dark_mode_desc": "Broyt til myrkt snið",
+ "sound_and_haptics": "Ljóð og vibrering",
+ "difficulty": "Trupulleikagraað",
+ "word_info": "Orðaupplýsingar",
+ "word_info_desc": "Týðing og AI-myndlist eftir spæl",
+ "language": "Mál",
+ "change_language": "Broyt mál",
+ "better_than": "Betri enn",
+ "of_players": "av spælarum",
+ "right_to_left": "Høgru til vinstru",
+ "keyboard_layout": "Knappaborðsuppressetning",
+ "install_app": "Innset app",
+ "install_app_desc": "Spæl offline og fá app-ikon",
+ "report_issue": "Melda trupulleika",
+ "view_source": "Vís keldukota",
+ "guess_distribution": "Giskingarúrslít",
+ "games": "Spæl",
+ "win_percent": "Vinnings %",
+ "streak": "Í ferð",
+ "best": "Besta",
+ "all_languages": "Øll mál",
+ "languages": "Mál",
+ "play_more_languages": "Spæl fleiri mál fyri at síggja heildar hagtøl!",
+ "add_to_home": "Legg afturat heimaskíggjanum",
+ "play_daily_like_app": "Spæl Wordle hvønn dag sum eitt app",
+ "install": "Innset",
+ "close": "lat aftur",
+ "about": "Um",
+ "global_stats": "Heildarhagtøl",
+ "games_played": "Spæl spæld",
+ "win_rate": "Vinningsrøta",
+ "current_streak": "Ferð nú",
+ "languages_won": "Mál vunnin",
+ "best_overall_streak": "Besta heildarferð",
+ "best_active_streak": "Besta virkin ferð",
+ "your_languages": "Títt mál",
+ "no_games_yet": "Tú hevur ikki spælt enn. Vel eitt mál fyri at byrja!",
+ "wins": "Vinningar",
+ "losses": "Tøp",
+ "avg_attempts": "Miðal royndir",
+ "best_streak": "Besta ferð",
+ "play": "Spæl",
+ "search_language": "Leita eftir máli...",
+ "external_links": "Ytri leinkjur",
+ "coming_soon": "kemur skjótt!",
+ "game": "spæl",
+ "games_lowercase": "spæl",
+ "definition": "Týðing",
+ "look_up_on_wiktionary": "Slá upp á Wiktionary",
+ "easy": "Lætt",
+ "normal": "Vanligt",
+ "hard": "Strangur",
+ "easy_desc": "Hvørt orð er góðtikið, sjálvt um ikki í orðabókini",
+ "normal_desc": "Royndir skulu vera gildig orð úr orðabókini",
+ "hard_desc": "Avdúkaðar vísbendingar skulu brúkast í komandi royndum",
+ "high_contrast": "Høgur kontrast",
+ "high_contrast_desc": "Litir hóskandi litblindari",
+ "today": "Í dag",
+ "statistics": "Hagtøl",
+ "todays_word_reveal": "Orðið í dag — Spæl fyri at avdúka!",
+ "play_now": "Spæl nú",
+ "future_word": "Hetta orðið er ikki spælt enn. Kom aftur seinni!",
+ "community_stats": "Felagsskaparhagtøl",
+ "players": "Spælarar",
+ "plays": "spæl",
+ "win": "vinningur",
+ "first_to_play": "Fyrsti at spæla í dag!",
+ "top_score": "Hægsta úrslít í dag!",
+ "all_words": "Øll orð",
+ "daily_words_counting": "daglig orð og talandi",
+ "newer": "Nýggjari",
+ "older": "Eldri",
+ "page_of": "Síða {page} av {total}",
+ "report_bad_word": "Melda skaðligt orð",
+ "view_all_words": "Vís øll {lang} orð",
+ "difficulty_locked": "Kann ikki broyta trupulleikagrað eftir gisking"
}
}
diff --git a/data/languages/fr/language_config.json b/data/languages/fr/language_config.json
index 4b9112be..ca76537c 100644
--- a/data/languages/fr/language_config.json
+++ b/data/languages/fr/language_config.json
@@ -37,48 +37,47 @@
},
"meta": {
"locale": "fr",
- "title": "Le jeu de mots quotidien ",
- "description": "Devinez le mot caché dans 6 essais (ou moins). Un nouveau puzzle est disponible chaque jour! ",
+ "title": "Le jeu de mots quotidien",
+ "description": "Devinez le mot caché dans 6 essais (ou moins). Un nouveau puzzle est disponible chaque jour!",
"keywords": "français, puzzle, mot, jouer, jeu, en ligne, devinez, quotidiennement"
},
"text": {
"subheader": "français",
- "next_word": "Mot suivant ",
- "no_attempts": "Vous n'avez pas encore essayé de mots! ",
- "share": "Partager ",
- "notification-copied": "Copié dans le presse-papier ",
- "notification-partial-word": "S'il vous plaît entrer un mot complet ",
+ "next_word": "Mot suivant",
+ "no_attempts": "Vous n'avez pas encore essayé de mots!",
+ "share": "Partager",
"share_challenge_win": "J'ai trouvé le Wordle du jour en {n} essais. Tu peux faire mieux ?",
- "share_challenge_lose": "Je n'ai pas trouvé le Wordle du jour. Et toi ?"
+ "share_challenge_lose": "Je n'ai pas trouvé le Wordle du jour. Et toi ?",
+ "notification_copied": "Copié dans le presse-papier",
+ "notification_partial_word": "S'il vous plaît entrer un mot complet",
+ "shared": "Partagé !",
+ "copied": "Copié !",
+ "notification_word_not_valid": "Le mot n'est pas valide",
+ "hard_mode_position": "Mode difficile : {letter} doit être en position {position}",
+ "hard_mode_contains": "Mode difficile : le mot doit contenir {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Comment jouer ",
- "title_2": "Exemples ",
- "close": "Fermez ce message ",
- "text_1_1_1": "Deviner la ",
- "text_1_1_2": "dans six essais ou moins. ",
- "text_1_2": "Chaque devinette doit être un mot de cinq lettres valide. Appuyez sur le bouton ENTER pour soumettre votre devin. ",
- "text_1_3": "Une fois que vous devinez, les tuiles changeront de couleur pour indiquer quelles lettres de votre mot sont correctes ou presque correctes. ",
- "text_2_1": "est dans le mot et dans le bon endroit! ",
- "text_2_2": "est dans le mot, mais pas dans le bon endroit. ",
- "text_2_3": "n'est pas présent dans le mot que vous essayez de deviner. ",
- "text_3": "Un nouveau mot sera disponible chaque jour! "
+ "title": "Comment jouer",
+ "title_2": "Exemples",
+ "close": "Fermez ce message",
+ "text_1_1_1": "Deviner la",
+ "text_1_1_2": "dans six essais ou moins.",
+ "text_1_2": "Chaque devinette doit être un mot de cinq lettres valide. Appuyez sur le bouton ENTER pour soumettre votre devin.",
+ "text_1_3": "Une fois que vous devinez, les tuiles changeront de couleur pour indiquer quelles lettres de votre mot sont correctes ou presque correctes.",
+ "text_2_1": "est dans le mot et dans le bon endroit!",
+ "text_2_2": "est dans le mot, mais pas dans le bon endroit.",
+ "text_2_3": "n'est pas présent dans le mot que vous essayez de deviner.",
+ "text_3": "Un nouveau mot sera disponible chaque jour!"
},
"ui": {
"settings": "Paramètres",
"dark_mode": "Mode sombre",
"dark_mode_desc": "Basculer le thème sombre",
- "haptic_feedback": "Retour haptique",
- "haptic_feedback_desc": "Vibration au toucher",
- "sound_effects": "Effets sonores",
- "sound_effects_desc": "Sons de victoire/défaite",
"right_to_left": "Droite à gauche",
"keyboard_layout": "Disposition du clavier",
- "easy_mode": "Autoriser tous les mots",
- "easy_mode_label": "mode facile",
"install_app": "Installer l'application",
"install_app_desc": "Jouer hors ligne et obtenir l'icône",
"report_issue": "Signaler un problème",
@@ -94,6 +93,63 @@
"add_to_home": "Ajouter à l'écran d'accueil",
"play_daily_like_app": "Jouer à Wordle quotidiennement comme une app",
"install": "Installer",
- "close": "fermer"
+ "close": "fermer",
+ "sound_and_haptics": "Son et vibrations",
+ "difficulty": "Difficulté",
+ "word_info": "Info mot",
+ "word_info_desc": "Définition et art IA après la partie",
+ "language": "Langue",
+ "change_language": "Changer de langue",
+ "better_than": "Mieux que",
+ "of_players": "des joueurs",
+ "about": "À propos",
+ "global_stats": "Statistiques globales",
+ "games_played": "Parties jouées",
+ "win_rate": "Taux de victoire",
+ "current_streak": "Série en cours",
+ "languages_won": "Langues gagnées",
+ "best_overall_streak": "Meilleure série globale",
+ "best_active_streak": "Meilleure série active",
+ "your_languages": "Vos langues",
+ "no_games_yet": "Vous n'avez pas encore joué. Choisissez une langue pour commencer !",
+ "wins": "Victoires",
+ "losses": "Défaites",
+ "avg_attempts": "Essais moyens",
+ "best_streak": "Meilleure série",
+ "play": "Jouer",
+ "search_language": "Rechercher une langue...",
+ "external_links": "Liens externes",
+ "coming_soon": "bientôt disponible !",
+ "game": "partie",
+ "games_lowercase": "parties",
+ "definition": "Définition",
+ "look_up_on_wiktionary": "Chercher sur Wiktionnaire",
+ "easy": "Facile",
+ "normal": "Normal",
+ "hard": "Difficile",
+ "easy_desc": "Tout mot accepté, même s'il n'est pas dans le dictionnaire",
+ "normal_desc": "Les essais doivent être des mots valides du dictionnaire",
+ "hard_desc": "Les indices révélés doivent être utilisés dans les essais suivants",
+ "high_contrast": "Contraste élevé",
+ "high_contrast_desc": "Couleurs adaptées aux daltoniens",
+ "today": "Aujourd'hui",
+ "statistics": "Statistiques",
+ "todays_word_reveal": "Le mot du jour — Jouez pour le découvrir !",
+ "play_now": "Jouer maintenant",
+ "future_word": "Ce mot n'a pas encore été joué. Revenez plus tard !",
+ "community_stats": "Statistiques de la communauté",
+ "players": "Joueurs",
+ "plays": "parties",
+ "win": "victoire",
+ "first_to_play": "Premier à jouer aujourd'hui !",
+ "top_score": "Meilleur score aujourd'hui !",
+ "all_words": "Tous les mots",
+ "daily_words_counting": "mots quotidiens et ça continue",
+ "newer": "Plus récent",
+ "older": "Plus ancien",
+ "page_of": "Page {page} sur {total}",
+ "report_bad_word": "Signaler un mot inapproprié",
+ "view_all_words": "Voir tous les mots {lang}",
+ "difficulty_locked": "Impossible de changer la difficulté après avoir deviné"
}
}
diff --git a/data/languages/fur/language_config.json b/data/languages/fur/language_config.json
index 9cfdc067..240682a6 100644
--- a/data/languages/fur/language_config.json
+++ b/data/languages/fur/language_config.json
@@ -11,13 +11,18 @@
},
"text": {
"subheader": "bèle fòòr",
- "next_word": "Next word ",
- "no_attempts": "You haven't tried any words yet! ",
+ "next_word": "Next word",
+ "no_attempts": "You haven't tried any words yet!",
"share": "Condivît",
- "notification-copied": "Copied to clipboard ",
- "notification-partial-word": "Please enter a full word ",
"share_challenge_win": "Oi risolt il Wordle di vuê in {n} tentatîfs. Rivistu a fâ miôr?",
- "share_challenge_lose": "No oi rivât a risolvi il Wordle di vuê. Tu rivistu?"
+ "share_challenge_lose": "No oi rivât a risolvi il Wordle di vuê. Tu rivistu?",
+ "notification_copied": "Copied to clipboard",
+ "notification_partial_word": "Please enter a full word",
+ "shared": "Condividût!",
+ "copied": "Copiât!",
+ "notification_word_not_valid": "La peraule no je valide",
+ "hard_mode_position": "Modalitât dificile: {letter} al à di jessi in posizion {position}",
+ "hard_mode_contains": "Modalitât dificile: la tentative e à di contignî {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
@@ -59,5 +64,85 @@
"ù",
"û"
]
+ },
+ "ui": {
+ "settings": "Impostazions",
+ "dark_mode": "Modalitât scure",
+ "dark_mode_desc": "Cambie il teme scûr",
+ "sound_and_haptics": "Sun e vibrazions",
+ "difficulty": "Dificoltât",
+ "word_info": "Informazions peraule",
+ "word_info_desc": "Definizion e art IA dopo il zûc",
+ "language": "Lenghe",
+ "change_language": "Cambie lenghe",
+ "better_than": "Miôr di",
+ "of_players": "dai zuiadôrs",
+ "right_to_left": "Di diestre a çampe",
+ "keyboard_layout": "Disposizion de tastiere",
+ "install_app": "Instale la app",
+ "install_app_desc": "Zughe offline e oten la icone",
+ "report_issue": "Segnale un probleme",
+ "view_source": "Viôt il codiç sorzint",
+ "guess_distribution": "Distribuzion des tentativis",
+ "games": "Zûcs",
+ "win_percent": "% Vitoriis",
+ "streak": "Serie",
+ "best": "Miôr",
+ "all_languages": "Dutis lis lenghis",
+ "languages": "Lenghis",
+ "play_more_languages": "Zughe plui lenghis par viodi lis statistichis globâls!",
+ "add_to_home": "Zonte ae schermade iniziâl",
+ "play_daily_like_app": "Zughe a Wordle ogni dì come une app",
+ "install": "Instale",
+ "close": "siere",
+ "about": "Informazions",
+ "global_stats": "Statistichis globâls",
+ "games_played": "Zûcs zuiâts",
+ "win_rate": "Percentuâl di vitorie",
+ "current_streak": "Serie atuâl",
+ "languages_won": "Lenghis vinçudis",
+ "best_overall_streak": "Miôr serie globâl",
+ "best_active_streak": "Miôr serie ative",
+ "your_languages": "Lis tôs lenghis",
+ "no_games_yet": "No tu âs ancjemò zuiât. Sielç une lenghe par scomençâ!",
+ "wins": "Vitoriis",
+ "losses": "Sconfitis",
+ "avg_attempts": "Tentativis in medie",
+ "best_streak": "Miôr serie",
+ "play": "Zughe",
+ "search_language": "Cîr une lenghe...",
+ "external_links": "Leams esternis",
+ "coming_soon": "al rive presint!",
+ "game": "zûc",
+ "games_lowercase": "zûcs",
+ "definition": "Definizion",
+ "look_up_on_wiktionary": "Cîr su Wiktionary",
+ "easy": "Facil",
+ "normal": "Normâl",
+ "hard": "Dificil",
+ "easy_desc": "Cualsisei peraule acetade, ancje se no je tal dizionari",
+ "normal_desc": "Lis tentativis a àn di jessi peraulis validis dal dizionari",
+ "hard_desc": "I indizis revelâts a àn di jessi doprâts tes tentativis sucesivis",
+ "high_contrast": "Contrast alt",
+ "high_contrast_desc": "Colôrs par daltonics",
+ "today": "Vuê",
+ "statistics": "Statistichis",
+ "todays_word_reveal": "La peraule di vuê — Zughe par scuvierzi!",
+ "play_now": "Zughe cumò",
+ "future_word": "Cheste peraule no je stade ancjemò zuiade. Torne plui tart!",
+ "community_stats": "Statistichis de comunitât",
+ "players": "Zuiadôrs",
+ "plays": "zuiadis",
+ "win": "vitorie",
+ "first_to_play": "Il prin a zuiâ vuê!",
+ "top_score": "Miôr risultât vuê!",
+ "all_words": "Dutis lis peraulis",
+ "daily_words_counting": "peraulis ogni dì e in aument",
+ "newer": "Plui gnûf",
+ "older": "Plui vieli",
+ "page_of": "Pagjine {page} di {total}",
+ "report_bad_word": "Segnale une peraule sbaliade",
+ "view_all_words": "Viôt dutis lis peraulis {lang}",
+ "difficulty_locked": "No si pues cambiâ la dificoltât dopo vê tentât"
}
}
diff --git a/data/languages/fy/language_config.json b/data/languages/fy/language_config.json
index eac7fe08..0f35c371 100644
--- a/data/languages/fy/language_config.json
+++ b/data/languages/fy/language_config.json
@@ -5,35 +5,40 @@
"name_native": "Frysk",
"meta": {
"locale": "fy",
- "title": "It deistich wurd spultsje ",
- "description": "Guo it ferburgen wurd yn 6 tried (of minder). In nije puzzel is elke dei te krijen! ",
+ "title": "It deistich wurd spultsje",
+ "description": "Guo it ferburgen wurd yn 6 tried (of minder). In nije puzzel is elke dei te krijen!",
"keywords": "Frysk, puzzle, wurd, spielje, spultsje, online, riede, deistich"
},
"text": {
"subheader": "Frysk",
- "next_word": "Folgjende wurd ",
- "no_attempts": "Jo hawwe noch gjin wurden besocht! ",
- "share": "Diele ",
- "notification-copied": "Kopieare nei klamboerd ",
- "notification-partial-word": "Fier in folslein wurd yn ",
+ "next_word": "Folgjende wurd",
+ "no_attempts": "Jo hawwe noch gjin wurden besocht!",
+ "share": "Diele",
"share_challenge_win": "Ik haw de Wordle fan hjoed yn {n} beurten fûn. Kinsto it better?",
- "share_challenge_lose": "Ik haw de Wordle fan hjoed net fûn. Kinsto it?"
+ "share_challenge_lose": "Ik haw de Wordle fan hjoed net fûn. Kinsto it?",
+ "notification_copied": "Kopieare nei klamboerd",
+ "notification_partial_word": "Fier in folslein wurd yn",
+ "shared": "Dield!",
+ "copied": "Kopieare!",
+ "notification_word_not_valid": "It wurd is net jildich",
+ "hard_mode_position": "Dreech modus: {letter} moat op posysje {position} stean",
+ "hard_mode_contains": "Dreech modus: oardiel moat {letter} befetsje"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Hoe te spyljen ",
- "title_2": "Foarbylden ",
- "close": "Slút dit berjocht ",
- "text_1_1_1": "Tink de ",
- "text_1_1_2": "yn seis tried of minder. ",
- "text_1_2": "Elke oardiel moat in jildich wurd wêze fan fiif letter wurd. Druk op de ENTER knop om jo oardiel yn te tsjinjen. ",
- "text_1_3": "Neidat jo riede, sille de tegels kleur feroarje om oan te jaan oan hokker letters fan jo wurd korrekt binne of hast korrekt binne. ",
- "text_2_1": "is yn it wurd en op 'e juste lokaasje! ",
- "text_2_2": "is yn it wurd, mar net op 'e juste lokaasje. ",
- "text_2_3": "is net oanwêzich yn it wurd dat jo besykje te rieden. ",
- "text_3": "In nij wurd sil elke dei beskikber wêze! "
+ "title": "Hoe te spyljen",
+ "title_2": "Foarbylden",
+ "close": "Slút dit berjocht",
+ "text_1_1_1": "Tink de",
+ "text_1_1_2": "yn seis tried of minder.",
+ "text_1_2": "Elke oardiel moat in jildich wurd wêze fan fiif letter wurd. Druk op de ENTER knop om jo oardiel yn te tsjinjen.",
+ "text_1_3": "Neidat jo riede, sille de tegels kleur feroarje om oan te jaan oan hokker letters fan jo wurd korrekt binne of hast korrekt binne.",
+ "text_2_1": "is yn it wurd en op 'e juste lokaasje!",
+ "text_2_2": "is yn it wurd, mar net op 'e juste lokaasje.",
+ "text_2_3": "is net oanwêzich yn it wurd dat jo besykje te rieden.",
+ "text_3": "In nij wurd sil elke dei beskikber wêze!"
},
"diacritic_map": {
"a": [
@@ -65,5 +70,85 @@
"y": [
"ý"
]
+ },
+ "ui": {
+ "settings": "Ynstellingen",
+ "dark_mode": "Donker modus",
+ "dark_mode_desc": "Wikselje donker tema",
+ "sound_and_haptics": "Lûd en trillingen",
+ "difficulty": "Muoilikheidsgraad",
+ "word_info": "Wurdynfo",
+ "word_info_desc": "Definysje en AI-keunst nei it spultsje",
+ "language": "Taal",
+ "change_language": "Feroarje taal",
+ "better_than": "Better as",
+ "of_players": "fan spilers",
+ "right_to_left": "Rjochts nei links",
+ "keyboard_layout": "Toetseboerdyndieling",
+ "install_app": "Ynstallearje app",
+ "install_app_desc": "Spielje offline en krij in app-ikoan",
+ "report_issue": "Meld in probleem",
+ "view_source": "Sjoch boarnekoade",
+ "guess_distribution": "Riedferdeling",
+ "games": "Spultsjes",
+ "win_percent": "Win %",
+ "streak": "Rige",
+ "best": "Bêste",
+ "all_languages": "Alle talen",
+ "languages": "Talen",
+ "play_more_languages": "Spielje mear talen om jo totale statistiken te sjen!",
+ "add_to_home": "Tafoegje oan thússkerm",
+ "play_daily_like_app": "Spielje Wordle deistich as in app",
+ "install": "Ynstallearje",
+ "close": "slute",
+ "about": "Oer",
+ "global_stats": "Totale statistiken",
+ "games_played": "Spultsjes spile",
+ "win_rate": "Winpersentaazje",
+ "current_streak": "Hjoeddeistige rige",
+ "languages_won": "Talen wûn",
+ "best_overall_streak": "Bêste totale rige",
+ "best_active_streak": "Bêste aktive rige",
+ "your_languages": "Jo talen",
+ "no_games_yet": "Jo hawwe noch net spile. Kies in taal om te begjinnen!",
+ "wins": "Winsten",
+ "losses": "Ferlies",
+ "avg_attempts": "Gem. besykjen",
+ "best_streak": "Bêste rige",
+ "play": "Spielje",
+ "search_language": "Sykje taal...",
+ "external_links": "Eksterne keppelingen",
+ "coming_soon": "komt gau!",
+ "game": "spultsje",
+ "games_lowercase": "spultsjes",
+ "definition": "Definysje",
+ "look_up_on_wiktionary": "Opsykje op Wiktionary",
+ "easy": "Maklik",
+ "normal": "Normaal",
+ "hard": "Dreech",
+ "easy_desc": "Elk wurd wurdt akseptearre, sels as it net yn it wurdboek stiet",
+ "normal_desc": "Oardielen moatte jildige wurden út it wurdboek wêze",
+ "hard_desc": "Fûne oanwizingen moatte yn folgjende oardielen brûkt wurde",
+ "high_contrast": "Heech kontrast",
+ "high_contrast_desc": "Kleurblindfreonlike kleuren",
+ "today": "Hjoed",
+ "statistics": "Statistiken",
+ "todays_word_reveal": "It wurd fan hjoed — Spielje om te ûntdekken!",
+ "play_now": "Spielje no",
+ "future_word": "Dit wurd is noch net spile. Kom letter werom!",
+ "community_stats": "Mienskipstatistiken",
+ "players": "Spilers",
+ "plays": "spultsjes",
+ "win": "winst",
+ "first_to_play": "Earste om hjoed te spieljen!",
+ "top_score": "Heechste skoare hjoed!",
+ "all_words": "Alle wurden",
+ "daily_words_counting": "deistige wurden en groeiend",
+ "newer": "Nij",
+ "older": "Alder",
+ "page_of": "Side {page} fan {total}",
+ "report_bad_word": "Meld in min wurd",
+ "view_all_words": "Sjoch alle {lang} wurden",
+ "difficulty_locked": "Kin muoilikheidsgraad net feroarje nei it rieden"
}
}
diff --git a/data/languages/ga/language_config.json b/data/languages/ga/language_config.json
index 49c6da4b..358550f7 100644
--- a/data/languages/ga/language_config.json
+++ b/data/languages/ga/language_config.json
@@ -4,35 +4,40 @@
"name_native": "Gaeilge",
"meta": {
"locale": "ga",
- "title": "An cluiche laethúil focal ",
- "description": "Buille faoi thuairim an focal i bhfolach i 6 iarracht (nó níos lú). Tá bhfreagra nua ar fáil gach lá! ",
+ "title": "An cluiche laethúil focal",
+ "description": "Buille faoi thuairim an focal i bhfolach i 6 iarracht (nó níos lú). Tá bhfreagra nua ar fáil gach lá!",
"keywords": "Gaeilge, bhfreagra, focal, súgradh, cluiche, ar líne, buille faoi thuairim, gach lá"
},
"text": {
"subheader": "Gaeilge",
- "next_word": "An chéad fhocal eile ",
- "no_attempts": "Níor thriail tú aon fhocail go fóill! ",
+ "next_word": "An chéad fhocal eile",
+ "no_attempts": "Níor thriail tú aon fhocail go fóill!",
"share": "Roinn",
- "notification-copied": "Cóipeáilte go dtí an ghearrthaisce ",
- "notification-partial-word": "Cuir isteach focal iomlán le do thoil ",
"share_challenge_win": "D'éirigh liom Wordle an lae inniu i {n} iarracht. An féidir leat é a shárú?",
- "share_challenge_lose": "Níor éirigh liom Wordle an lae inniu. An féidir leatsa?"
+ "share_challenge_lose": "Níor éirigh liom Wordle an lae inniu. An féidir leatsa?",
+ "notification_copied": "Cóipeáilte go dtí an ghearrthaisce",
+ "notification_partial_word": "Cuir isteach focal iomlán le do thoil",
+ "shared": "Roinnte!",
+ "copied": "Cóipeáilte!",
+ "notification_word_not_valid": "Níl an focal bailí",
+ "hard_mode_position": "Mód deacair: caithfidh {letter} a bheith i suíomh {position}",
+ "hard_mode_contains": "Mód deacair: caithfidh {letter} a bheith sa bhuille faoi thuairim"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Conas a imirt ",
- "title_2": "Samplaí ",
- "close": "Dún an teachtaireacht seo ",
- "text_1_1_1": "Buille faoi thuairim an ",
- "text_1_1_2": "i sé iarracht nó níos lú. ",
- "text_1_2": "Ní mór do gach buille faoi thuairim a bheith ina fhocal bailí cúig litir. Brúigh an cnaipe Iontrála chun do thuairim a chur isteach. ",
- "text_1_3": "Tar éis duit buille faoi thuairim a dhéanamh, athróidh na tíleanna dath chun a léiriú cé na litreacha de do fhocal atá ceart nó beagnach ceart. ",
- "text_2_1": "tá sé sa bhfocal agus sa suíomh ceart! ",
- "text_2_2": "tá sé sa bhfocal, ach ní sa suíomh ceart. ",
- "text_2_3": "nach bhfuil i láthair san fhocal atá tú ag iarraidh a buille faoi thuairim a dhéanamh. ",
- "text_3": "Beidh focal nua ar fáil gach lá! "
+ "title": "Conas a imirt",
+ "title_2": "Samplaí",
+ "close": "Dún an teachtaireacht seo",
+ "text_1_1_1": "Buille faoi thuairim an",
+ "text_1_1_2": "i sé iarracht nó níos lú.",
+ "text_1_2": "Ní mór do gach buille faoi thuairim a bheith ina fhocal bailí cúig litir. Brúigh an cnaipe Iontrála chun do thuairim a chur isteach.",
+ "text_1_3": "Tar éis duit buille faoi thuairim a dhéanamh, athróidh na tíleanna dath chun a léiriú cé na litreacha de do fhocal atá ceart nó beagnach ceart.",
+ "text_2_1": "tá sé sa bhfocal agus sa suíomh ceart!",
+ "text_2_2": "tá sé sa bhfocal, ach ní sa suíomh ceart.",
+ "text_2_3": "nach bhfuil i láthair san fhocal atá tú ag iarraidh a buille faoi thuairim a dhéanamh.",
+ "text_3": "Beidh focal nua ar fáil gach lá!"
},
"diacritic_map": {
"a": [
@@ -50,5 +55,85 @@
"u": [
"ú"
]
+ },
+ "ui": {
+ "settings": "Socruithe",
+ "dark_mode": "Mód dorcha",
+ "dark_mode_desc": "Athraigh téama dorcha",
+ "sound_and_haptics": "Fuaim agus creathán",
+ "difficulty": "Deacracht",
+ "word_info": "Eolas focal",
+ "word_info_desc": "Sainmhíniú agus ealaín AI tar éis an chluiche",
+ "language": "Teanga",
+ "change_language": "Athraigh teanga",
+ "better_than": "Níos fearr ná",
+ "of_players": "d'imreoirí",
+ "right_to_left": "Deas go clé",
+ "keyboard_layout": "Leagan amach méarchláir",
+ "install_app": "Suiteáil aip",
+ "install_app_desc": "Imir as líne agus faigh deilbhín",
+ "report_issue": "Tuairiscigh fadhb",
+ "view_source": "Féach ar an gcód foinse",
+ "guess_distribution": "Dáileadh buillí faoi thuairim",
+ "games": "Cluichí",
+ "win_percent": "% Bua",
+ "streak": "Sraith",
+ "best": "Is fearr",
+ "all_languages": "Gach teanga",
+ "languages": "Teangacha",
+ "play_more_languages": "Imir tuilleadh teangacha le do staitisticí iomlána a fheiceáil!",
+ "add_to_home": "Cuir leis an scáileán baile",
+ "play_daily_like_app": "Imir Wordle go laethúil mar aip",
+ "install": "Suiteáil",
+ "close": "dún",
+ "about": "Faoi",
+ "global_stats": "Staitisticí domhanda",
+ "games_played": "Cluichí imeartha",
+ "win_rate": "Ráta bua",
+ "current_streak": "Sraith reatha",
+ "languages_won": "Teangacha buaite",
+ "best_overall_streak": "Sraith iomlán is fearr",
+ "best_active_streak": "Sraith ghníomhach is fearr",
+ "your_languages": "Do theangacha",
+ "no_games_yet": "Níl aon chluiche imeartha agat fós. Roghnaigh teanga le tosú!",
+ "wins": "Buanna",
+ "losses": "Caillteanais",
+ "avg_attempts": "Meán iarrachtaí",
+ "best_streak": "Sraith is fearr",
+ "play": "Imir",
+ "search_language": "Cuardaigh teanga...",
+ "external_links": "Naisc sheachtracha",
+ "coming_soon": "ag teacht go luath!",
+ "game": "cluiche",
+ "games_lowercase": "cluichí",
+ "definition": "Sainmhíniú",
+ "look_up_on_wiktionary": "Cuardaigh ar Vicífhoclóir",
+ "easy": "Éasca",
+ "normal": "Gnách",
+ "hard": "Deacair",
+ "easy_desc": "Glactar le haon fhocal, fiú mura bhfuil sé san fhoclóir",
+ "normal_desc": "Caithfidh buillí faoi thuairim a bheith ina bhfocail bhailí ón bhfoclóir",
+ "hard_desc": "Caithfear leideanna nochta a úsáid sna buillí faoi thuairim ina dhiaidh",
+ "high_contrast": "Ardchodarsnacht",
+ "high_contrast_desc": "Dathanna cairdiúil do dhaoine dalltónacha",
+ "today": "Inniu",
+ "statistics": "Staitisticí",
+ "todays_word_reveal": "Focal an lae — Imir lena nochtadh!",
+ "play_now": "Imir anois",
+ "future_word": "Níor imríodh an focal seo fós. Tar ar ais níos déanaí!",
+ "community_stats": "Staitisticí an phobail",
+ "players": "Imreoirí",
+ "plays": "imrí",
+ "win": "bua",
+ "first_to_play": "An chéad duine inniu!",
+ "top_score": "An scór is fearr inniu!",
+ "all_words": "Gach focal",
+ "daily_words_counting": "focal laethúil agus ag méadú",
+ "newer": "Níos nuaí",
+ "older": "Níos sine",
+ "page_of": "Leathanach {page} as {total}",
+ "report_bad_word": "Tuairiscigh drochfhocal",
+ "view_all_words": "Féach ar gach focal {lang}",
+ "difficulty_locked": "Ní féidir an deacracht a athrú tar éis buille faoi thuairim"
}
}
diff --git a/data/languages/gd/language_config.json b/data/languages/gd/language_config.json
index 51527d26..4972b7ff 100644
--- a/data/languages/gd/language_config.json
+++ b/data/languages/gd/language_config.json
@@ -12,11 +12,16 @@
"subheader": "Gàidhlig",
"next_word": "An ath fhacal",
"no_attempts": "Chan eil thu air facal sam bith fheuchainn fhathast!",
- "share": "Co-roinn ",
- "notification-copied": "Chaidh a chur air an stòr-bhòrd",
- "notification-partial-word": "Cuir a-steach facal slàn",
+ "share": "Co-roinn",
"share_challenge_win": "Fhuair mi Wordle an-diugh ann an {n} oidhirpean. An urrainn dhut mo bhualadh?",
- "share_challenge_lose": "Cha d'fhuair mi Wordle an-diugh. An urrainn dhutsa?"
+ "share_challenge_lose": "Cha d'fhuair mi Wordle an-diugh. An urrainn dhutsa?",
+ "notification_copied": "Chaidh a chur air an stòr-bhòrd",
+ "notification_partial_word": "Cuir a-steach facal slàn",
+ "shared": "Chaidh a cho-roinn!",
+ "copied": "Chaidh a chopaigeadh!",
+ "notification_word_not_valid": "Chan eil am facal dligheach",
+ "hard_mode_position": "Modh duilich: feumaidh {letter} a bhith ann an dreuchd {position}",
+ "hard_mode_contains": "Modh duilich: feumaidh {letter} a bhith san fhacal"
},
"language_code_3": "",
"language_code_iso_639_3": "",
@@ -50,5 +55,85 @@
"u": [
"ù"
]
+ },
+ "ui": {
+ "settings": "Roghainnean",
+ "dark_mode": "Modh dorcha",
+ "dark_mode_desc": "Atharraich cuspair dorcha",
+ "sound_and_haptics": "Fuaim is crith",
+ "difficulty": "Duilgheadas",
+ "word_info": "Fiosrachadh facail",
+ "word_info_desc": "Mìneachadh is ealain AI às dèidh a' gheama",
+ "language": "Cànan",
+ "change_language": "Atharraich cànan",
+ "better_than": "Nas fheàrr na",
+ "of_players": "de chluicheadairean",
+ "right_to_left": "Deas gu clì",
+ "keyboard_layout": "Cruth a' mheur-chlàir",
+ "install_app": "Stàlaich an aplacaid",
+ "install_app_desc": "Cluich far-loidhne is faigh ìomhaigheag",
+ "report_issue": "Dèan aithris air duilgheadas",
+ "view_source": "Seall an còd tùsail",
+ "guess_distribution": "Sgaoileadh nan oidhirpean",
+ "games": "Geamaichean",
+ "win_percent": "% Buannachd",
+ "streak": "Sreath",
+ "best": "As fheàrr",
+ "all_languages": "Gach cànan",
+ "languages": "Cànanan",
+ "play_more_languages": "Cluich barrachd chànanan gus na staitistigean iomlan fhaicinn!",
+ "add_to_home": "Cuir ris an sgrìn-dhachaigh",
+ "play_daily_like_app": "Cluich Wordle gach latha mar aplacaid",
+ "install": "Stàlaich",
+ "close": "dùin",
+ "about": "Mu dheidhinn",
+ "global_stats": "Staitistigean iomlan",
+ "games_played": "Geamaichean air an cluich",
+ "win_rate": "Ìre buannachd",
+ "current_streak": "Sreath an-dràsta",
+ "languages_won": "Cànanan buannaichte",
+ "best_overall_streak": "Sreath iomlan as fheàrr",
+ "best_active_streak": "Sreath beò as fheàrr",
+ "your_languages": "Na cànanan agad",
+ "no_games_yet": "Cha do chluich thu fhathast. Tagh cànan gus tòiseachadh!",
+ "wins": "Buannachdan",
+ "losses": "Cailleadh",
+ "avg_attempts": "Oidhirpean cuibheasach",
+ "best_streak": "Sreath as fheàrr",
+ "play": "Cluich",
+ "search_language": "Lorg cànan...",
+ "external_links": "Ceanglaichean a-muigh",
+ "coming_soon": "a' tighinn a dh'aithghearr!",
+ "game": "geama",
+ "games_lowercase": "geamaichean",
+ "definition": "Mìneachadh",
+ "look_up_on_wiktionary": "Lorg air Wiktionary",
+ "easy": "Furasta",
+ "normal": "Àbhaisteach",
+ "hard": "Duilich",
+ "easy_desc": "Thèid facal sam bith a ghabhail, fiù 's mura h-eil e san fhaclair",
+ "normal_desc": "Feumaidh oidhirpean a bhith nam faclan dligheach on fhaclair",
+ "hard_desc": "Feumaidh sanasan a chaidh a nochdadh a bhith air an cleachdadh ann an oidhirpean às dèidh sin",
+ "high_contrast": "Àrd-iomsgaradh",
+ "high_contrast_desc": "Dathan freagarrach dhaibhsan le daille-dhathan",
+ "today": "An-diugh",
+ "statistics": "Staitistigean",
+ "todays_word_reveal": "Facal an latha — Cluich gus a nochdadh!",
+ "play_now": "Cluich an-dràsta",
+ "future_word": "Cha deach am facal seo a chluich fhathast. Thig air ais nas fhaide air adhart!",
+ "community_stats": "Staitistigean na coimhearsnachd",
+ "players": "Cluicheadairean",
+ "plays": "geamaichean",
+ "win": "buannachd",
+ "first_to_play": "A' chiad fhear an-diugh!",
+ "top_score": "An sgòr as àirde an-diugh!",
+ "all_words": "A h-uile facal",
+ "daily_words_counting": "faclan làitheil agus a' sìor-fhàs",
+ "newer": "Nas ùire",
+ "older": "Nas sine",
+ "page_of": "Duilleag {page} de {total}",
+ "report_bad_word": "Dèan aithris air droch fhacal",
+ "view_all_words": "Seall a h-uile facal {lang}",
+ "difficulty_locked": "Chan urrainnear an duilgheadas atharrachadh às dèidh tomhas"
}
}
diff --git a/data/languages/gl/language_config.json b/data/languages/gl/language_config.json
index b7ec3155..bc7f9162 100644
--- a/data/languages/gl/language_config.json
+++ b/data/languages/gl/language_config.json
@@ -24,47 +24,46 @@
"meta": {
"locale": "gl",
"title": "O xogo de palabras diario",
- "description": "Adiviña a palabra escondida en 6 intentos (ou menos). Un novo rompecabezas está dispoñible cada día! ",
+ "description": "Adiviña a palabra escondida en 6 intentos (ou menos). Un novo rompecabezas está dispoñible cada día!",
"keywords": "Galego, Puzzle, Word, Play, Game, Online, Guess, Daily"
},
"text": {
"subheader": "Galego",
- "next_word": "Seguinte palabra. ",
- "no_attempts": "Aínda non probaches ningunha palabra! ",
- "share": "Compartir ",
- "notification-copied": "Copiado ao portapapeis ",
- "notification-partial-word": "Introduza unha palabra completa ",
+ "next_word": "Seguinte palabra.",
+ "no_attempts": "Aínda non probaches ningunha palabra!",
+ "share": "Compartir",
"share_challenge_win": "Resolvín o Wordle de hoxe en {n} intentos. Podes superarme?",
- "share_challenge_lose": "Non puiden resolver o Wordle de hoxe. Ti podes?"
+ "share_challenge_lose": "Non puiden resolver o Wordle de hoxe. Ti podes?",
+ "notification_copied": "Copiado ao portapapeis",
+ "notification_partial_word": "Introduza unha palabra completa",
+ "shared": "Compartido!",
+ "copied": "Copiado!",
+ "notification_word_not_valid": "A palabra non é válida",
+ "hard_mode_position": "Modo difícil: {letter} debe estar na posición {position}",
+ "hard_mode_contains": "Modo difícil: a suposición debe conter {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Como xogar ",
- "title_2": "Exemplos ",
- "close": "Pecha esta mensaxe ",
- "text_1_1_1": "Adiviña o ",
- "text_1_1_2": "en seis intentos ou menos. ",
- "text_1_2": "Cada suposición debe ser unha palabra de cinco letras válida. Prema o botón Intro para enviar a súa suposición. ",
- "text_1_3": "Despois de adiviñar, as pezas cambiarán a cor para indicar que letras da súa palabra son correctas ou case correctas. ",
- "text_2_1": "está na palabra e na localización correcta! ",
- "text_2_2": "está na palabra, pero non na localización correcta. ",
- "text_2_3": "non está presente na palabra que estás a adiviñar. ",
- "text_3": "Unha nova palabra estará dispoñible cada día! "
+ "title": "Como xogar",
+ "title_2": "Exemplos",
+ "close": "Pecha esta mensaxe",
+ "text_1_1_1": "Adiviña o",
+ "text_1_1_2": "en seis intentos ou menos.",
+ "text_1_2": "Cada suposición debe ser unha palabra de cinco letras válida. Prema o botón Intro para enviar a súa suposición.",
+ "text_1_3": "Despois de adiviñar, as pezas cambiarán a cor para indicar que letras da súa palabra son correctas ou case correctas.",
+ "text_2_1": "está na palabra e na localización correcta!",
+ "text_2_2": "está na palabra, pero non na localización correcta.",
+ "text_2_3": "non está presente na palabra que estás a adiviñar.",
+ "text_3": "Unha nova palabra estará dispoñible cada día!"
},
"ui": {
"settings": "Axustes",
"dark_mode": "Modo escuro",
"dark_mode_desc": "Cambiar tema escuro",
- "haptic_feedback": "Resposta háptica",
- "haptic_feedback_desc": "Vibración ao tocar",
- "sound_effects": "Efectos de son",
- "sound_effects_desc": "Sons de vitoria/derrota",
"right_to_left": "Dereita a esquerda",
"keyboard_layout": "Deseño do teclado",
- "easy_mode": "Permitir calquera palabra",
- "easy_mode_label": "modo fácil",
"install_app": "Instalar aplicación",
"install_app_desc": "Xoga sen conexión e obtén a icona",
"report_issue": "Informar dun problema",
@@ -80,6 +79,63 @@
"add_to_home": "Engadir á pantalla de inicio",
"play_daily_like_app": "Xoga Wordle diariamente como unha app",
"install": "Instalar",
- "close": "pechar"
+ "close": "pechar",
+ "sound_and_haptics": "Son e vibracións",
+ "difficulty": "Dificultade",
+ "word_info": "Info da palabra",
+ "word_info_desc": "Definición e arte IA despois do xogo",
+ "language": "Idioma",
+ "change_language": "Cambiar idioma",
+ "better_than": "Mellor que",
+ "of_players": "dos xogadores",
+ "about": "Acerca de",
+ "global_stats": "Estatísticas globais",
+ "games_played": "Xogos xogados",
+ "win_rate": "Taxa de vitoria",
+ "current_streak": "Racha actual",
+ "languages_won": "Idiomas gañados",
+ "best_overall_streak": "Mellor racha global",
+ "best_active_streak": "Mellor racha activa",
+ "your_languages": "Os teus idiomas",
+ "no_games_yet": "Aínda non xogaches. Escolle un idioma para comezar!",
+ "wins": "Vitorias",
+ "losses": "Derrotas",
+ "avg_attempts": "Intentos medios",
+ "best_streak": "Mellor racha",
+ "play": "Xogar",
+ "search_language": "Buscar idioma...",
+ "external_links": "Ligazóns externas",
+ "coming_soon": "en breve!",
+ "game": "xogo",
+ "games_lowercase": "xogos",
+ "definition": "Definición",
+ "look_up_on_wiktionary": "Buscar no Wiktionary",
+ "easy": "Fácil",
+ "normal": "Normal",
+ "hard": "Difícil",
+ "easy_desc": "Calquera palabra aceptada, aínda que non estea no dicionario",
+ "normal_desc": "As suposicións deben ser palabras válidas do dicionario",
+ "hard_desc": "As pistas reveladas deben usarse nas seguintes suposicións",
+ "high_contrast": "Alto contraste",
+ "high_contrast_desc": "Cores adaptadas para daltónicos",
+ "today": "Hoxe",
+ "statistics": "Estatísticas",
+ "todays_word_reveal": "A palabra de hoxe — Xoga para descubrir!",
+ "play_now": "Xogar agora",
+ "future_word": "Esta palabra aínda non foi xogada. Volve máis tarde!",
+ "community_stats": "Estatísticas da comunidade",
+ "players": "Xogadores",
+ "plays": "partidas",
+ "win": "vitoria",
+ "first_to_play": "O primeiro en xogar hoxe!",
+ "top_score": "Mellor puntuación hoxe!",
+ "all_words": "Todas as palabras",
+ "daily_words_counting": "palabras diarias e aumentando",
+ "newer": "Máis recente",
+ "older": "Máis antigo",
+ "page_of": "Páxina {page} de {total}",
+ "report_bad_word": "Denunciar palabra inadecuada",
+ "view_all_words": "Ver todas as palabras {lang}",
+ "difficulty_locked": "Non se pode cambiar a dificultade despois de adiviñar"
}
}
diff --git a/data/languages/ha/language_config.json b/data/languages/ha/language_config.json
index 74fcdda6..7e3d9d85 100644
--- a/data/languages/ha/language_config.json
+++ b/data/languages/ha/language_config.json
@@ -15,9 +15,15 @@
"next_word": "Kalma ta gaba",
"no_attempts": "Ba ka gwada wata kalma ba tukuna!",
"share": "Raba",
- "notification-copied": "An kwafa zuwa clipboard",
- "notification-word-not-valid": "Kalmar ba ta dace ba",
- "notification-partial-word": "Ka shigar da cikakkiyar kalma"
+ "notification_copied": "An kwafa zuwa clipboard",
+ "notification_word_not_valid": "Kalmar ba ta dace ba",
+ "notification_partial_word": "Ka shigar da cikakkiyar kalma",
+ "shared": "An raba!",
+ "copied": "An kwafa!",
+ "share_challenge_win": "Na warware Wordle na yau cikin {n}. Za ka iya fin fi ni?",
+ "share_challenge_lose": "Ban iya warware Wordle na yau ba. Za ka iya?",
+ "hard_mode_position": "Yanayin wuya: {letter} dole ne ya kasance a matsayi {position}",
+ "hard_mode_contains": "Yanayin wuya: dole kalmar ta kunshi {letter}"
},
"help": {
"title": "Yadda Ake Wasa",
@@ -42,6 +48,74 @@
"play": "Buga",
"search_language": "Nemo harshe...",
"definition": "Ma'ana",
- "look_up_on_wiktionary": "Duba a Wiktionary"
+ "look_up_on_wiktionary": "Duba a Wiktionary",
+ "dark_mode_desc": "Canza yanayin duhu",
+ "sound_and_haptics": "Sauti da girgiza",
+ "difficulty": "Matsayi",
+ "word_info": "Bayanan kalma",
+ "word_info_desc": "Ma'ana da fasahar AI bayan wasa",
+ "language": "Harshe",
+ "change_language": "Canza harshe",
+ "better_than": "Fiye da",
+ "of_players": "daga cikin 'yan wasa",
+ "right_to_left": "Dama zuwa hagu",
+ "install_app": "Shigar da app",
+ "install_app_desc": "Yi wasa ba tare da yanar gizo ba kuma sami gunkin app",
+ "report_issue": "Rahoto matsala",
+ "view_source": "Duba lambar tushe",
+ "guess_distribution": "Rarraba hasashe",
+ "win_percent": "Nasara %",
+ "streak": "Jerin nasara",
+ "best": "Mafi kyau",
+ "close": "rufe",
+ "about": "Game da",
+ "global_stats": "Kididdiga na duniya",
+ "games_played": "Wasannin da aka buga",
+ "win_rate": "Adadin nasara",
+ "current_streak": "Jerin yanzu",
+ "languages_won": "Harsunan da aka ci nasara",
+ "best_overall_streak": "Mafi kyaun jerin baki daya",
+ "best_active_streak": "Mafi kyaun jeri mai aiki",
+ "your_languages": "Harsunanka",
+ "no_games_yet": "Ba ka buga wasa ba tukuna. Zabi harshe don farawa!",
+ "wins": "Nasarori",
+ "losses": "Rashin nasara",
+ "avg_attempts": "Matsakaicin kokari",
+ "best_streak": "Mafi kyaun jeri",
+ "play_daily_like_app": "Buga Wordle kullum kamar app",
+ "play_more_languages": "Buga harsuna da yawa don ganin kididdiga na duniya!",
+ "add_to_home": "Kara zuwa allon gida",
+ "install": "Shigar",
+ "external_links": "Hanyoyin hadi na waje",
+ "coming_soon": "yana zuwa nan ba da jimawa ba!",
+ "game": "wasa",
+ "games_lowercase": "wasanni",
+ "play_now": "Buga yanzu",
+ "future_word": "Ba a buga wannan kalmar ba tukuna. Dawo daga baya!",
+ "community_stats": "Kididdiga na al'umma",
+ "players": "'Yan wasa",
+ "plays": "wasanni",
+ "win": "nasara",
+ "first_to_play": "Na farko ya buga yau!",
+ "top_score": "Mafi girman maki yau!",
+ "all_words": "Duk kalmomi",
+ "daily_words_counting": "kalmomi na kullum kuma suna karuwa",
+ "newer": "Sababbi",
+ "older": "Tsofaffi",
+ "page_of": "Shafi {page} daga {total}",
+ "report_bad_word": "Rahoto mummunar kalma",
+ "view_all_words": "Duba duk kalmomin {lang}",
+ "difficulty_locked": "Ba za a iya canza matsayi ba bayan hasashe",
+ "easy": "Sauki",
+ "normal": "Na al'ada",
+ "hard": "Wuya",
+ "easy_desc": "An yarda da kowace kalma, ko da ba ta cikin kamus ba",
+ "normal_desc": "Hasashe dole ne ya kasance kalma mai inganci daga kamus",
+ "hard_desc": "Dole ne a yi amfani da alamomin da aka gano a hasashen da ke zuwa",
+ "high_contrast": "Bambancin launi mai yawa",
+ "high_contrast_desc": "Launuka masu dacewa da makafi launi",
+ "today": "Yau",
+ "statistics": "Kididdiga",
+ "todays_word_reveal": "Kalmar yau — Buga don ganowa!"
}
}
diff --git a/data/languages/he/language_config.json b/data/languages/he/language_config.json
index da0bf708..2709aa4f 100644
--- a/data/languages/he/language_config.json
+++ b/data/languages/he/language_config.json
@@ -13,48 +13,47 @@
"meta": {
"locale": "he",
"wordle_native": "וורדל",
- "title": "משחק המילה היומי ",
- "description": "נחשו את המילה הנסתרת ב 6 מנסה (או פחות). פאזל חדש זמין בכל יום! ",
+ "title": "משחק המילה היומי",
+ "description": "נחשו את המילה הנסתרת ב 6 מנסה (או פחות). פאזל חדש זמין בכל יום!",
"keywords": "עברית, פאזל, מילה, לשחק, משחק, מקוון, לנחש, יומי"
},
"text": {
"subheader": "עברית",
- "next_word": "המילה הבאה ",
- "no_attempts": "עדיין לא ניסית מילים כלשהן! ",
+ "next_word": "המילה הבאה",
+ "no_attempts": "עדיין לא ניסית מילים כלשהן!",
"share": "שתף",
- "notification-copied": "הועתק ללוח ",
- "notification-partial-word": "הזן מילה מלאה ",
"share_challenge_win": "פתרתי את הוורדל היומי ב-{n} ניסיונות. תצליחו לעשות יותר טוב?",
- "share_challenge_lose": "לא הצלחתי לפתור את הוורדל היומי. אתם יכולים?"
+ "share_challenge_lose": "לא הצלחתי לפתור את הוורדל היומי. אתם יכולים?",
+ "notification_copied": "הועתק ללוח",
+ "notification_partial_word": "הזן מילה מלאה",
+ "shared": "שותף!",
+ "copied": "הועתק!",
+ "notification_word_not_valid": "המילה אינה תקינה",
+ "hard_mode_position": "מצב קשה: {letter} חייבת להיות במיקום {position}",
+ "hard_mode_contains": "מצב קשה: הניחוש חייב להכיל את {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "true",
"help": {
- "title": "איך לשחק ",
- "title_2": "דוגמאות ",
- "close": "סגור את ההודעה ",
- "text_1_1_1": "נחש את ה ",
- "text_1_1_2": "בשישה ניסיונות או פחות. ",
- "text_1_2": "כל מניח חייב להיות מילה חמש אותיות תקפות. לחץ על הלחצן Enter כדי לשלוח את הניחוש שלך. ",
- "text_1_3": "אחרי שאתה מניח, האריחים ישנו צבע כדי לציין אילו אותיות של המילה שלך נכונים או כמעט נכונים. ",
- "text_2_1": "הוא במילה ובמיקום הנכון! ",
- "text_2_2": "הוא במילה, אבל לא במיקום הנכון. ",
- "text_2_3": "אינו נוכח במילה שאתה מנסה לנחש. ",
- "text_3": "מילה חדשה תהיה זמינה בכל יום! "
+ "title": "איך לשחק",
+ "title_2": "דוגמאות",
+ "close": "סגור את ההודעה",
+ "text_1_1_1": "נחש את ה",
+ "text_1_1_2": "בשישה ניסיונות או פחות.",
+ "text_1_2": "כל מניח חייב להיות מילה חמש אותיות תקפות. לחץ על הלחצן Enter כדי לשלוח את הניחוש שלך.",
+ "text_1_3": "אחרי שאתה מניח, האריחים ישנו צבע כדי לציין אילו אותיות של המילה שלך נכונים או כמעט נכונים.",
+ "text_2_1": "הוא במילה ובמיקום הנכון!",
+ "text_2_2": "הוא במילה, אבל לא במיקום הנכון.",
+ "text_2_3": "אינו נוכח במילה שאתה מנסה לנחש.",
+ "text_3": "מילה חדשה תהיה זמינה בכל יום!"
},
"ui": {
"settings": "הגדרות",
"dark_mode": "מצב כהה",
"dark_mode_desc": "החלף ערכת נושא כהה",
- "haptic_feedback": "משוב הפטי",
- "haptic_feedback_desc": "רטט בנגיעה",
- "sound_effects": "אפקטים קוליים",
- "sound_effects_desc": "צלילי ניצחון/הפסד",
"right_to_left": "מימין לשמאל",
"keyboard_layout": "פריסת מקלדת",
- "easy_mode": "אפשר כל מילה",
- "easy_mode_label": "מצב קל",
"install_app": "התקן אפליקציה",
"install_app_desc": "שחק אופליין וקבל אייקון",
"report_issue": "דווח על בעיה",
@@ -70,6 +69,63 @@
"add_to_home": "הוסף למסך הבית",
"play_daily_like_app": "שחק Wordle יומי כאפליקציה",
"install": "התקן",
- "close": "סגור"
+ "close": "סגור",
+ "sound_and_haptics": "צליל ורטט",
+ "difficulty": "רמת קושי",
+ "word_info": "מידע על המילה",
+ "word_info_desc": "הגדרה ואומנות AI לאחר המשחק",
+ "language": "שפה",
+ "change_language": "שנה שפה",
+ "better_than": "טוב יותר מ-",
+ "of_players": "מהשחקנים",
+ "about": "אודות",
+ "global_stats": "סטטיסטיקה כללית",
+ "games_played": "משחקים ששוחקו",
+ "win_rate": "אחוז ניצחון",
+ "current_streak": "רצף נוכחי",
+ "languages_won": "שפות שנוצחו",
+ "best_overall_streak": "רצף כולל הטוב ביותר",
+ "best_active_streak": "רצף פעיל הטוב ביותר",
+ "your_languages": "השפות שלך",
+ "no_games_yet": "עדיין לא שיחקת. בחר שפה כדי להתחיל!",
+ "wins": "ניצחונות",
+ "losses": "הפסדים",
+ "avg_attempts": "ממוצע ניסיונות",
+ "best_streak": "רצף הטוב ביותר",
+ "play": "שחק",
+ "search_language": "חפש שפה...",
+ "external_links": "קישורים חיצוניים",
+ "coming_soon": "בקרוב!",
+ "game": "משחק",
+ "games_lowercase": "משחקים",
+ "definition": "הגדרה",
+ "look_up_on_wiktionary": "חפש בוויקימילון",
+ "easy": "קל",
+ "normal": "רגיל",
+ "hard": "קשה",
+ "easy_desc": "כל מילה מתקבלת, גם אם אינה במילון",
+ "normal_desc": "ניחושים חייבים להיות מילים תקינות מהמילון",
+ "hard_desc": "יש להשתמש ברמזים שנחשפו בניחושים הבאים",
+ "high_contrast": "ניגודיות גבוהה",
+ "high_contrast_desc": "צבעים ידידותיים לעיוורי צבעים",
+ "today": "היום",
+ "statistics": "סטטיסטיקה",
+ "todays_word_reveal": "המילה של היום — שחק כדי לגלות!",
+ "play_now": "שחק עכשיו",
+ "future_word": "המילה הזו עדיין לא שוחקה. חזור מאוחר יותר!",
+ "community_stats": "סטטיסטיקת קהילה",
+ "players": "שחקנים",
+ "plays": "משחקים",
+ "win": "ניצחון",
+ "first_to_play": "ראשון לשחק היום!",
+ "top_score": "הציון הגבוה ביותר היום!",
+ "all_words": "כל המילים",
+ "daily_words_counting": "מילים יומיות ועוד",
+ "newer": "חדש יותר",
+ "older": "ישן יותר",
+ "page_of": "עמוד {page} מתוך {total}",
+ "report_bad_word": "דווח על מילה לא ראויה",
+ "view_all_words": "הצג את כל המילים ב{lang}",
+ "difficulty_locked": "לא ניתן לשנות קושי לאחר ניחוש"
}
}
diff --git a/data/languages/hi/language_config.json b/data/languages/hi/language_config.json
index db4b1b3d..ddbdade3 100644
--- a/data/languages/hi/language_config.json
+++ b/data/languages/hi/language_config.json
@@ -19,9 +19,13 @@
"share": "साझा करें",
"shared": "साझा किया!",
"copied": "कॉपी किया!",
- "notification-copied": "क्लिपबोर्ड पर कॉपी किया",
- "notification-word-not-valid": "शब्द मान्य नहीं है",
- "notification-partial-word": "कृपया पूरा शब्द दर्ज करें"
+ "notification_copied": "क्लिपबोर्ड पर कॉपी किया",
+ "notification_word_not_valid": "शब्द मान्य नहीं है",
+ "notification_partial_word": "कृपया पूरा शब्द दर्ज करें",
+ "share_challenge_win": "मैंने आज का वर्डल {n} प्रयासों में हल किया। क्या आप बेहतर कर सकते हैं?",
+ "share_challenge_lose": "मैं आज का वर्डल हल नहीं कर पाया। क्या आप कर सकते हैं?",
+ "hard_mode_position": "कठिन मोड: {letter} स्थान {position} पर होना चाहिए",
+ "hard_mode_contains": "कठिन मोड: अनुमान में {letter} होना चाहिए"
},
"help": {
"title": "कैसे खेलें",
@@ -41,8 +45,6 @@
"dark_mode": "डार्क मोड",
"dark_mode_desc": "डार्क थीम टॉगल करें",
"keyboard_layout": "कीबोर्ड लेआउट",
- "easy_mode": "सभी शब्द अनुमति दें",
- "easy_mode_label": "आसान मोड",
"install_app": "ऐप इंस्टॉल करें",
"games": "खेल",
"win_percent": "% जीत",
@@ -53,7 +55,70 @@
"play": "खेलें",
"search_language": "भाषा खोजें...",
"definition": "परिभाषा",
- "look_up_on_wiktionary": "विक्शनरी पर देखें"
+ "look_up_on_wiktionary": "विक्शनरी पर देखें",
+ "sound_and_haptics": "ध्वनि और कंपन",
+ "difficulty": "कठिनाई",
+ "word_info": "शब्द जानकारी",
+ "word_info_desc": "खेल के बाद परिभाषा और AI कला",
+ "language": "भाषा",
+ "change_language": "भाषा बदलें",
+ "better_than": "से बेहतर",
+ "of_players": "खिलाड़ियों में से",
+ "right_to_left": "दाएं से बाएं",
+ "install_app_desc": "ऑफ़लाइन खेलें और ऐप आइकन पाएं",
+ "report_issue": "समस्या की रिपोर्ट करें",
+ "view_source": "सोर्स कोड देखें",
+ "guess_distribution": "अनुमान वितरण",
+ "close": "बंद करें",
+ "about": "परिचय",
+ "global_stats": "वैश्विक आंकड़े",
+ "games_played": "खेले गए खेल",
+ "win_rate": "जीत दर",
+ "current_streak": "वर्तमान लगातार",
+ "languages_won": "जीती गई भाषाएँ",
+ "best_overall_streak": "सर्वश्रेष्ठ कुल लगातार",
+ "best_active_streak": "सर्वश्रेष्ठ सक्रिय लगातार",
+ "your_languages": "आपकी भाषाएँ",
+ "no_games_yet": "आपने अभी तक कोई खेल नहीं खेला। शुरू करने के लिए भाषा चुनें!",
+ "wins": "जीतें",
+ "losses": "हारें",
+ "avg_attempts": "औसत प्रयास",
+ "best_streak": "सर्वश्रेष्ठ लगातार",
+ "play_daily_like_app": "Wordle रोज़ ऐप की तरह खेलें",
+ "play_more_languages": "वैश्विक आंकड़े देखने के लिए और भाषाओं में खेलें!",
+ "add_to_home": "होम स्क्रीन पर जोड़ें",
+ "install": "इंस्टॉल करें",
+ "external_links": "बाहरी लिंक",
+ "coming_soon": "जल्द आ रहा है!",
+ "game": "खेल",
+ "games_lowercase": "खेल",
+ "easy": "आसान",
+ "normal": "सामान्य",
+ "hard": "कठिन",
+ "easy_desc": "कोई भी शब्द स्वीकार है, भले ही शब्दकोश में न हो",
+ "normal_desc": "अनुमान शब्दकोश के मान्य शब्द होने चाहिए",
+ "hard_desc": "प्रकट संकेतों का अगले अनुमानों में उपयोग करना अनिवार्य है",
+ "high_contrast": "उच्च कंट्रास्ट",
+ "high_contrast_desc": "रंग-अंधापन के अनुकूल रंग",
+ "today": "आज",
+ "statistics": "आंकड़े",
+ "todays_word_reveal": "आज का शब्द — जानने के लिए खेलें!",
+ "play_now": "अभी खेलें",
+ "future_word": "यह शब्द अभी तक नहीं खेला गया। बाद में वापस आएं!",
+ "community_stats": "समुदाय के आंकड़े",
+ "players": "खिलाड़ी",
+ "plays": "खेल",
+ "win": "जीत",
+ "first_to_play": "आज पहला खिलाड़ी!",
+ "top_score": "आज का सर्वश्रेष्ठ स्कोर!",
+ "all_words": "सभी शब्द",
+ "daily_words_counting": "दैनिक शब्द और बढ़ रहे हैं",
+ "newer": "नया",
+ "older": "पुराना",
+ "page_of": "पृष्ठ {page} / {total}",
+ "report_bad_word": "खराब शब्द की रिपोर्ट करें",
+ "view_all_words": "सभी {lang} शब्द देखें",
+ "difficulty_locked": "अनुमान लगाने के बाद कठिनाई नहीं बदल सकते"
},
"diacritic_map": {
"न": [
diff --git a/data/languages/hr/language_config.json b/data/languages/hr/language_config.json
index cd4b5cd8..5e27653b 100644
--- a/data/languages/hr/language_config.json
+++ b/data/languages/hr/language_config.json
@@ -5,48 +5,47 @@
"name_native": "hrvatski jezik",
"meta": {
"locale": "hr",
- "title": "Dnevna riječ ",
- "description": "Pogodite skrivenu riječ u 6 pokušaja (ili manje). Nova zagonetka dostupna je svaki dan! ",
+ "title": "Dnevna riječ",
+ "description": "Pogodite skrivenu riječ u 6 pokušaja (ili manje). Nova zagonetka dostupna je svaki dan!",
"keywords": "hrvatski jezik, zagonetka, riječ, igra, igra, online, pogodite, svakodnevno"
},
"text": {
"subheader": "hrvatski jezik",
- "next_word": "Slijedeća riječ ",
- "no_attempts": "Još niste isprobali riječi! ",
+ "next_word": "Slijedeća riječ",
+ "no_attempts": "Još niste isprobali riječi!",
"share": "Podijeli",
- "notification-copied": "Kopirati u međuspremnik ",
- "notification-partial-word": "Unesite cijelu riječ ",
"share_challenge_win": "Riješio/la sam današnji Wordle u {n} pokušaja. Možeš li bolje?",
- "share_challenge_lose": "Nisam riješio/la današnji Wordle. Možeš li ti?"
+ "share_challenge_lose": "Nisam riješio/la današnji Wordle. Možeš li ti?",
+ "notification_copied": "Kopirati u međuspremnik",
+ "notification_partial_word": "Unesite cijelu riječ",
+ "shared": "Podijeljeno!",
+ "copied": "Kopirano!",
+ "notification_word_not_valid": "Riječ nije valjana",
+ "hard_mode_position": "Teški način: {letter} mora biti na poziciji {position}",
+ "hard_mode_contains": "Teški način: pokušaj mora sadržavati {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Kako igrati ",
- "title_2": "Primjeri ",
- "close": "Zatvorite ovu poruku ",
- "text_1_1_1": "Pogodite ",
- "text_1_1_2": "u šest pokušaja ili manje. ",
- "text_1_2": "Svaka pretpostavka mora biti valjana riječ od pet slova. Pritisnite gumb ENTER za slanje valjka. ",
- "text_1_3": "Nakon što pogađate, pločice će promijeniti boju za označavanje koje su slova vaše riječi ispravna ili gotovo ispravna. ",
- "text_2_1": "je u riječi i na ispravnom mjestu! ",
- "text_2_2": "je u riječi, ali ne na ispravnom mjestu. ",
- "text_2_3": "nije prisutan u riječi koju pokušavate pogoditi. ",
- "text_3": "Nova riječ će biti dostupna svaki dan! "
+ "title": "Kako igrati",
+ "title_2": "Primjeri",
+ "close": "Zatvorite ovu poruku",
+ "text_1_1_1": "Pogodite",
+ "text_1_1_2": "u šest pokušaja ili manje.",
+ "text_1_2": "Svaka pretpostavka mora biti valjana riječ od pet slova. Pritisnite gumb ENTER za slanje valjka.",
+ "text_1_3": "Nakon što pogađate, pločice će promijeniti boju za označavanje koje su slova vaše riječi ispravna ili gotovo ispravna.",
+ "text_2_1": "je u riječi i na ispravnom mjestu!",
+ "text_2_2": "je u riječi, ali ne na ispravnom mjestu.",
+ "text_2_3": "nije prisutan u riječi koju pokušavate pogoditi.",
+ "text_3": "Nova riječ će biti dostupna svaki dan!"
},
"ui": {
"settings": "Postavke",
"dark_mode": "Tamni način",
"dark_mode_desc": "Uključi tamnu temu",
- "haptic_feedback": "Haptička povratna informacija",
- "haptic_feedback_desc": "Vibracija pri dodiru",
- "sound_effects": "Zvučni efekti",
- "sound_effects_desc": "Zvukovi pobjede/poraza",
"right_to_left": "S desna na lijevo",
"keyboard_layout": "Raspored tipkovnice",
- "easy_mode": "Dopusti bilo koju riječ",
- "easy_mode_label": "lagani način",
"install_app": "Instaliraj aplikaciju",
"install_app_desc": "Igraj offline i dobij ikonu aplikacije",
"report_issue": "Prijavi problem",
@@ -62,6 +61,63 @@
"add_to_home": "Dodaj na početni zaslon",
"play_daily_like_app": "Igraj Wordle svakodnevno kao aplikaciju",
"install": "Instaliraj",
- "close": "zatvori"
+ "close": "zatvori",
+ "sound_and_haptics": "Zvuk i vibracija",
+ "difficulty": "Težina",
+ "word_info": "Info o riječi",
+ "word_info_desc": "Definicija i AI umjetnost nakon igre",
+ "language": "Jezik",
+ "change_language": "Promijeni jezik",
+ "better_than": "Bolji od",
+ "of_players": "igrača",
+ "about": "O igri",
+ "global_stats": "Ukupna statistika",
+ "games_played": "Odigrane igre",
+ "win_rate": "Postotak pobjeda",
+ "current_streak": "Trenutni niz",
+ "languages_won": "Osvojeni jezici",
+ "best_overall_streak": "Najbolji ukupni niz",
+ "best_active_streak": "Najbolji aktivni niz",
+ "your_languages": "Tvoji jezici",
+ "no_games_yet": "Još niste igrali. Odaberite jezik za početak!",
+ "wins": "Pobjede",
+ "losses": "Porazi",
+ "avg_attempts": "Prosj. pokušaji",
+ "best_streak": "Najbolji niz",
+ "play": "Igraj",
+ "search_language": "Traži jezik...",
+ "external_links": "Vanjske poveznice",
+ "coming_soon": "uskoro!",
+ "game": "igra",
+ "games_lowercase": "igre",
+ "definition": "Definicija",
+ "look_up_on_wiktionary": "Potraži na Wiktionaryju",
+ "easy": "Lako",
+ "normal": "Normalno",
+ "hard": "Teško",
+ "easy_desc": "Prihvaća se bilo koja riječ, čak i ako nije u rječniku",
+ "normal_desc": "Pokušaji moraju biti valjane riječi iz rječnika",
+ "hard_desc": "Otkriveni tragovi moraju se koristiti u sljedećim pokušajima",
+ "high_contrast": "Visoki kontrast",
+ "high_contrast_desc": "Boje prilagođene za daltonizam",
+ "today": "Danas",
+ "statistics": "Statistika",
+ "todays_word_reveal": "Današnja riječ — Igraj da otkriješ!",
+ "play_now": "Igraj sada",
+ "future_word": "Ova riječ još nije odigrana. Vrati se kasnije!",
+ "community_stats": "Statistika zajednice",
+ "players": "Igrači",
+ "plays": "igara",
+ "win": "pobjeda",
+ "first_to_play": "Prvi igrač danas!",
+ "top_score": "Najbolji rezultat danas!",
+ "all_words": "Sve riječi",
+ "daily_words_counting": "dnevnih riječi i raste",
+ "newer": "Novije",
+ "older": "Starije",
+ "page_of": "Stranica {page} od {total}",
+ "report_bad_word": "Prijavi neprikladnu riječ",
+ "view_all_words": "Pogledaj sve {lang} riječi",
+ "difficulty_locked": "Težina se ne može promijeniti nakon pogađanja"
}
}
diff --git a/data/languages/hu/language_config.json b/data/languages/hu/language_config.json
index fe879ed4..8dd271f6 100644
--- a/data/languages/hu/language_config.json
+++ b/data/languages/hu/language_config.json
@@ -11,42 +11,41 @@
},
"text": {
"subheader": "magyar",
- "next_word": "Következő szó ",
- "no_attempts": "Még nem próbáltad meg a szót! ",
+ "next_word": "Következő szó",
+ "no_attempts": "Még nem próbáltad meg a szót!",
"share": "Megosztás",
- "notification-copied": "A vágólapra másolt ",
- "notification-partial-word": "Kérjük, adjon meg egy teljes szót ",
"share_challenge_win": "A mai Wordle-t {n} próbálkozásból oldottam meg. Te meg tudod verni?",
- "share_challenge_lose": "A mai Wordle-t nem sikerült megoldanom. Neked sikerül?"
+ "share_challenge_lose": "A mai Wordle-t nem sikerült megoldanom. Neked sikerül?",
+ "notification_copied": "A vágólapra másolt",
+ "notification_partial_word": "Kérjük, adjon meg egy teljes szót",
+ "shared": "Megosztva!",
+ "copied": "Másolva!",
+ "notification_word_not_valid": "A szó nem érvényes",
+ "hard_mode_position": "Nehéz mód: {letter} betűnek a {position}. pozícióban kell lennie",
+ "hard_mode_contains": "Nehéz mód: a tippnek tartalmaznia kell a {letter} betűt"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Hogyan kell játszani ",
- "title_2": "Példák ",
- "close": "Zárja be ezt az üzenetet ",
- "text_1_1_1": "Kitalál ",
- "text_1_1_2": "hat vagy annál kevesebb próbálkozás. ",
- "text_1_2": "Minden találgatásnak érvényes öt betűs szónak kell lennie. Nyomja meg az ENTER gombot a találgatás elküldéséhez. ",
- "text_1_3": "Miután kitalálta, a csempe megváltoztatja a színt, hogy jelezze, hogy a szó helyes betűjei helyesek vagy szinte helyesek. ",
- "text_2_1": "van a szóban és a helyes helyen! ",
- "text_2_2": "a szóban van, de nem a megfelelő helyen. ",
- "text_2_3": "nincs jelen a szóban, amit megpróbálsz kitalálni. ",
- "text_3": "Minden nap új szó lesz elérhető! "
+ "title": "Hogyan kell játszani",
+ "title_2": "Példák",
+ "close": "Zárja be ezt az üzenetet",
+ "text_1_1_1": "Kitalál",
+ "text_1_1_2": "hat vagy annál kevesebb próbálkozás.",
+ "text_1_2": "Minden találgatásnak érvényes öt betűs szónak kell lennie. Nyomja meg az ENTER gombot a találgatás elküldéséhez.",
+ "text_1_3": "Miután kitalálta, a csempe megváltoztatja a színt, hogy jelezze, hogy a szó helyes betűjei helyesek vagy szinte helyesek.",
+ "text_2_1": "van a szóban és a helyes helyen!",
+ "text_2_2": "a szóban van, de nem a megfelelő helyen.",
+ "text_2_3": "nincs jelen a szóban, amit megpróbálsz kitalálni.",
+ "text_3": "Minden nap új szó lesz elérhető!"
},
"ui": {
"settings": "Beállítások",
"dark_mode": "Sötét mód",
"dark_mode_desc": "Sötét téma váltása",
- "haptic_feedback": "Haptikus visszajelzés",
- "haptic_feedback_desc": "Rezgés érintéskor",
- "sound_effects": "Hangeffektusok",
- "sound_effects_desc": "Nyerés/vesztés hangok",
"right_to_left": "Jobbról balra",
"keyboard_layout": "Billentyűzetkiosztás",
- "easy_mode": "Bármilyen szó engedélyezése",
- "easy_mode_label": "könnyű mód",
"install_app": "Alkalmazás telepítése",
"install_app_desc": "Játssz offline és kapj app ikont",
"report_issue": "Hiba jelentése",
@@ -62,7 +61,64 @@
"add_to_home": "Hozzáadás a kezdőképernyőhöz",
"play_daily_like_app": "Játssz Wordle-t naponta mint alkalmazást",
"install": "Telepítés",
- "close": "bezárás"
+ "close": "bezárás",
+ "sound_and_haptics": "Hang és rezgés",
+ "difficulty": "Nehézség",
+ "word_info": "Szóinformáció",
+ "word_info_desc": "Definíció és AI műalkotás a játék után",
+ "language": "Nyelv",
+ "change_language": "Nyelv váltása",
+ "better_than": "Jobb mint",
+ "of_players": "a játékosok közül",
+ "about": "Névjegy",
+ "global_stats": "Összesített statisztika",
+ "games_played": "Játszott játékok",
+ "win_rate": "Győzelmi arány",
+ "current_streak": "Jelenlegi sorozat",
+ "languages_won": "Megnyert nyelvek",
+ "best_overall_streak": "Legjobb összesített sorozat",
+ "best_active_streak": "Legjobb aktív sorozat",
+ "your_languages": "Nyelveid",
+ "no_games_yet": "Még nem játszottál. Válassz nyelvet a kezdéshez!",
+ "wins": "Győzelmek",
+ "losses": "Vereségek",
+ "avg_attempts": "Átl. próbálkozás",
+ "best_streak": "Legjobb sorozat",
+ "play": "Játék",
+ "search_language": "Nyelv keresése...",
+ "external_links": "Külső linkek",
+ "coming_soon": "hamarosan!",
+ "game": "játék",
+ "games_lowercase": "játékok",
+ "definition": "Meghatározás",
+ "look_up_on_wiktionary": "Keresés a Wikiszótárban",
+ "easy": "Könnyű",
+ "normal": "Normál",
+ "hard": "Nehéz",
+ "easy_desc": "Bármilyen szó elfogadott, akkor is, ha nincs a szótárban",
+ "normal_desc": "A tippeknek érvényes szótári szavaknak kell lenniük",
+ "hard_desc": "A felfedett tippeket a következő próbálkozásokban használni kell",
+ "high_contrast": "Magas kontraszt",
+ "high_contrast_desc": "Színvakbarát színek",
+ "today": "Ma",
+ "statistics": "Statisztikák",
+ "todays_word_reveal": "A mai szó — Játssz a felfedéséhez!",
+ "play_now": "Játssz most",
+ "future_word": "Ezt a szót még nem játszották. Gyere vissza később!",
+ "community_stats": "Közösségi statisztikák",
+ "players": "Játékosok",
+ "plays": "játékok",
+ "win": "győzelem",
+ "first_to_play": "Elsőként játszott ma!",
+ "top_score": "Legjobb eredmény ma!",
+ "all_words": "Minden szó",
+ "daily_words_counting": "napi szó és egyre több",
+ "newer": "Újabb",
+ "older": "Régebbi",
+ "page_of": "{page}. oldal / {total}",
+ "report_bad_word": "Rossz szó jelentése",
+ "view_all_words": "Összes {lang} szó megtekintése",
+ "difficulty_locked": "A nehézség nem változtatható tipp után"
},
"diacritic_map": {
"a": [
diff --git a/data/languages/hy/language_config.json b/data/languages/hy/language_config.json
index 28467471..9eece0a7 100644
--- a/data/languages/hy/language_config.json
+++ b/data/languages/hy/language_config.json
@@ -6,32 +6,119 @@
"meta": {
"locale": "hy",
"wordle_native": "վորդլե",
- "title": "Ամենօրյա բառի խաղ ",
- "description": "Գուշակեք, որ թաքնված բառը 6-ում (կամ պակաս): Ամեն օր հասանելի է նոր հանելուկ: ",
+ "title": "Ամենօրյա բառի խաղ",
+ "description": "Գուշակեք, որ թաքնված բառը 6-ում (կամ պակաս): Ամեն օր հասանելի է նոր հանելուկ:",
"keywords": "Հայերեն, Puzzle, Word, Play, Game, Առցանց, Գուշակություն, ամեն օր"
},
"text": {
"subheader": "Հայերեն",
- "next_word": "Հաջորդ բառը ",
- "no_attempts": "Դուք դեռ որեւէ բառ չեք փորձել: ",
+ "next_word": "Հաջորդ բառը",
+ "no_attempts": "Դուք դեռ որեւէ բառ չեք փորձել:",
"share": "Կիսվել",
- "notification-copied": "Պատճենահանվել է clipboard- ին ",
- "notification-partial-word": "Խնդրում ենք մուտքագրել ամբողջական բառ "
+ "notification_copied": "Պատճենահանվել է clipboard- ին",
+ "notification_partial_word": "Խնդրում ենք մուտքագրել ամբողջական բառ",
+ "shared": "Կիսվել է!",
+ "copied": "Պատճենվել է!",
+ "notification_word_not_valid": "Բառը վավեր չէ",
+ "share_challenge_win": "Այսօրվա Wordle-ը լուծեցի {n} փորձով: Կարողանառ ես ավելի լավ անե՞լ՞",
+ "share_challenge_lose": "Այսօրվա Wordle-ը չկարողացա լուծել: Դու կարողանավ ես՞",
+ "hard_mode_position": "Բարդ ռեժիմ: {letter} պետք է լինի {position} դիրքում",
+ "hard_mode_contains": "Բարդ ռեժիմ: գուշակությունը պետք է պարունակի {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Ինչպես խաղալ ",
- "title_2": "Օրինակներ ",
- "close": "Փակիր այս հաղորդագրությունը ",
- "text_1_1_1": "Գուշակիր ",
- "text_1_1_2": "վեց անգամ կամ պակաս: ",
- "text_1_2": "Յուրաքանչյուր գուշակություն պետք է լինի վավեր հինգ տառ բառ: Ձեր գուշակությունը ներկայացնելու համար սեղմեք ENTER կոճակը: ",
- "text_1_3": "Գուշակելուց հետո սալիկները կփոխեն գույնը `նշելու, թե ձեր Խոսքի տառերը ճիշտ կամ գրեթե ճիշտ են: ",
- "text_2_1": "բառի մեջ է եւ ճիշտ վայրում: ",
- "text_2_2": "բառի մեջ է, բայց ոչ ճիշտ տեղում: ",
- "text_2_3": "չի առկա այն բառում, որը դուք փորձում եք կռահել: ",
- "text_3": "Ամեն օր հասանելի կլինի նոր բառ: "
+ "title": "Ինչպես խաղալ",
+ "title_2": "Օրինակներ",
+ "close": "Փակիր այս հաղորդագրությունը",
+ "text_1_1_1": "Գուշակիր",
+ "text_1_1_2": "վեց անգամ կամ պակաս:",
+ "text_1_2": "Յուրաքանչյուր գուշակություն պետք է լինի վավեր հինգ տառ բառ: Ձեր գուշակությունը ներկայացնելու համար սեղմեք ENTER կոճակը:",
+ "text_1_3": "Գուշակելուց հետո սալիկները կփոխեն գույնը `նշելու, թե ձեր Խոսքի տառերը ճիշտ կամ գրեթե ճիշտ են:",
+ "text_2_1": "բառի մեջ է եւ ճիշտ վայրում:",
+ "text_2_2": "բառի մեջ է, բայց ոչ ճիշտ տեղում:",
+ "text_2_3": "չի առկա այն բառում, որը դուք փորձում եք կռահել:",
+ "text_3": "Ամեն օր հասանելի կլինի նոր բառ:"
+ },
+ "ui": {
+ "settings": "Կարգավորումներ",
+ "dark_mode": "Մութ ռեժիմ",
+ "dark_mode_desc": "Միացնել մութ թեման",
+ "sound_and_haptics": "Ձայն և թրթիռ",
+ "difficulty": "Բարդություն",
+ "word_info": "Բառի տեղեկություն",
+ "word_info_desc": "Սահմանում և AI արվեստ խաղից հետո",
+ "language": "Լեզու",
+ "change_language": "Փոխել լեզուն",
+ "better_than": "Ավելի լավ, քան",
+ "of_players": "խաղացողներից",
+ "right_to_left": "Աից աջ",
+ "keyboard_layout": "Ստեղնաշարի դասավորություն",
+ "install_app": "Տեղադրել հավելվածը",
+ "install_app_desc": "Խաղալ անցանց և ստանալ պատկերակը",
+ "report_issue": "Հաղորդել խնդրի մասին",
+ "view_source": "Տեսնել սկզբնաղբյուրը",
+ "guess_distribution": "Գուշակությունների բաշխում",
+ "games": "Խաղեր",
+ "win_percent": "% հաղթանակ",
+ "streak": "Հաջորդական",
+ "best": "Լավագույն",
+ "all_languages": "Բոլոր լեզուները",
+ "languages": "Լեզուներ",
+ "play_more_languages": "Խաղացեք ավելի շատ լեզուներով։",
+ "add_to_home": "Ավելացնել հիմնական էկրանին",
+ "play_daily_like_app": "Խաղացեք Wordle ամեն օր հավելվածի պես",
+ "install": "Տեղադրել",
+ "close": "փակել",
+ "about": "Մեր մասին",
+ "global_stats": "Ընդհանուր վիճակագրություն",
+ "games_played": "Խաղած խաղեր",
+ "win_rate": "Հաղթանակի տոկոս",
+ "current_streak": "Ընթացիկ հաջորդական",
+ "languages_won": "Հաղթած լեզուներ",
+ "best_overall_streak": "Լավագույն ընդհանուր հաջորդական",
+ "best_active_streak": "Լավագույն ակտիվ հաջորդական",
+ "your_languages": "Ձեր լեզուները",
+ "no_games_yet": "Դուք դեռ չեք խաղացել։ Ընտրեք լեզու։",
+ "wins": "Հաղթանակներ",
+ "losses": "Պարտություններ",
+ "avg_attempts": "Միջին փորձեր",
+ "best_streak": "Լավագույն հաջորդական",
+ "play": "Խաղալ",
+ "search_language": "Փնտրել լեզու...",
+ "external_links": "Արտաքին հղումներ",
+ "coming_soon": "շուտով!",
+ "game": "խաղ",
+ "games_lowercase": "խաղեր",
+ "definition": "Սահմանում",
+ "look_up_on_wiktionary": "Փնտրել Wiktionary-ում",
+ "easy": "Հեշտ",
+ "normal": "Սովորական",
+ "hard": "Բարդ",
+ "easy_desc": "Ցանկացած բառ ընդունվելի է",
+ "normal_desc": "Գուշակությունները պետք է լինեն վավեր բառեր",
+ "hard_desc": "Բացահայտված հուշումները պետք է օգտագործվեն",
+ "high_contrast": "Բարձր հակադրություն",
+ "high_contrast_desc": "Գույներ գունային կուրության համար",
+ "today": "Այսօր",
+ "statistics": "Վիճակագրություն",
+ "todays_word_reveal": "Այսօրվա բառը — Խաղացեք!",
+ "play_now": "Խաղալ հիմա",
+ "future_word": "Այս բառը դեռ չի խաղացվել։ Վերադարձեք!",
+ "community_stats": "Համայնքի վիճակագրություն",
+ "players": "Խաղացողներ",
+ "plays": "խաղեր",
+ "win": "հաղթանակ",
+ "first_to_play": "Ասօր առաջինը!",
+ "top_score": "Լավագույն միավորը!",
+ "all_words": "Բոլոր բառերը",
+ "daily_words_counting": "ամենօրյա բառեր",
+ "newer": "Ավելի նոր",
+ "older": "Ավելի հին",
+ "page_of": "Էջ {page} / {total}",
+ "report_bad_word": "Հաղորդել վատ բառ",
+ "view_all_words": "Տեսնել {lang} բառերը",
+ "difficulty_locked": "Բարդությունը չի կարելի փոխել"
}
}
diff --git a/data/languages/hyw/language_config.json b/data/languages/hyw/language_config.json
index 871b70e0..5822c601 100644
--- a/data/languages/hyw/language_config.json
+++ b/data/languages/hyw/language_config.json
@@ -12,11 +12,18 @@
},
"text": {
"subheader": "արեւմտահայերէն",
- "next_word": "Next word ",
- "no_attempts": "You haven't tried any words yet! ",
+ "next_word": "Next word",
+ "no_attempts": "You haven't tried any words yet!",
"share": "Կիսուիլ",
- "notification-copied": "Copied to clipboard ",
- "notification-partial-word": "Please enter a full word "
+ "notification_copied": "Copied to clipboard",
+ "notification_partial_word": "Please enter a full word",
+ "shared": "Կիսուած!",
+ "copied": "Պատճենուած!",
+ "notification_word_not_valid": "Բառը վաւերական չէ",
+ "share_challenge_win": "Այսօրուան Wordle-ը լուծեցի {n} փորձով: Կրնաս աւելի աղէկ ընե՞լ՞",
+ "share_challenge_lose": "Այսօրուան Wordle-ը չկրցայ լուծել: Դուն կրնաս՞",
+ "hard_mode_position": "Դժուար եղանակ: {letter} պէտք է ըլլայ {position} դիրքին",
+ "hard_mode_contains": "Դժուար եղանակ: գուշակը պէտք է պարունակէ {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
@@ -33,5 +40,85 @@
"text_2_2": "is in the word, but not in the correct location.",
"text_2_3": "is not present in the word you are trying to guess.",
"text_3": "A new word will be available each day!"
+ },
+ "ui": {
+ "settings": "Կարգաւորումներ",
+ "dark_mode": "Մութ եղանակ",
+ "dark_mode_desc": "Փոխել մութ թեման",
+ "sound_and_haptics": "Ձայն և թրթիռ",
+ "difficulty": "Դժուարութիւն",
+ "word_info": "Բառի տեղեկութիւն",
+ "word_info_desc": "Սահմանում և AI արուեստ խաղէն վերջ",
+ "language": "Լեզու",
+ "change_language": "Փոխել լեզուն",
+ "better_than": "Աւելի աղէկ քան",
+ "of_players": "խաղացողներէն",
+ "right_to_left": "Աջէն ձախ",
+ "keyboard_layout": "Ստեղնաշարի դասաւորութիւն",
+ "install_app": "Տեղադրել հաւելուածը",
+ "install_app_desc": "Խաղալ անցանց և ստանալ պատկերակը",
+ "report_issue": "Տեղեկացնել խնդիր",
+ "view_source": "Տեսնել աղբիւրի ծածկագիրը",
+ "guess_distribution": "Գուշակներու բաշխում",
+ "games": "Խաղեր",
+ "win_percent": "% յաղթանակ",
+ "streak": "Հաջորդական",
+ "best": "Լաւագոյն",
+ "all_languages": "Բոլոր լեզուները",
+ "languages": "Լեզուներ",
+ "play_more_languages": "Խաղացէք աւելի շատ լեզուներով!",
+ "add_to_home": "Աւելցնել հիմնական էջին",
+ "play_daily_like_app": "Խաղացէք Wordle ամէն օր",
+ "install": "Տեղադրել",
+ "close": "գոցել",
+ "about": "Մեր մասին",
+ "global_stats": "Ընդհանուր վիճակագրութիւն",
+ "games_played": "Խաղած խաղեր",
+ "win_rate": "Եաղթանակի տոկոս",
+ "current_streak": "Զառկայ հաջորդական",
+ "languages_won": "Եաղթած լեզուներ",
+ "best_overall_streak": "Լաւագոյն ընդհանուր",
+ "best_active_streak": "Լաւագոյն ակտիւ հաջորդական",
+ "your_languages": "Ձեր լեզուները",
+ "no_games_yet": "Դեռ չէք խաղացած։ Ընտրէք լեզու!",
+ "wins": "Եաղթանակներ",
+ "losses": "Պարտութիւններ",
+ "avg_attempts": "Միջին փորձեր",
+ "best_streak": "Լաւագոյն հաջորդական",
+ "play": "Խաղալ",
+ "search_language": "Փնտրել լեզու...",
+ "external_links": "Արտաքին հղումներ",
+ "coming_soon": "շուտով!",
+ "game": "խաղ",
+ "games_lowercase": "խաղեր",
+ "definition": "Սահմանում",
+ "look_up_on_wiktionary": "Փնտրել Wiktionary-ի մէջ",
+ "easy": "Դիւրին",
+ "normal": "Սովորական",
+ "hard": "Դժուար",
+ "easy_desc": "Որևէ բառ ընդունելի է",
+ "normal_desc": "Գուշակները պէտք է ըլլան վաւերական բառեր",
+ "hard_desc": "Բացայայտուած հուշերը պէտք է օգտագործուին",
+ "high_contrast": "Բարձր հակադրութիւն",
+ "high_contrast_desc": "Գոյներ գունային կուրութեան համար",
+ "today": "Այսօր",
+ "statistics": "Վիճակագրութիւն",
+ "todays_word_reveal": "Այսօրուան բառը — Խաղացէք!",
+ "play_now": "Խաղալ հիմա",
+ "future_word": "Այս բառը դեռ չէ խաղացուած։ Վերադարձէք!",
+ "community_stats": "Համայնքի վիճակագրութիւն",
+ "players": "Խաղացողներ",
+ "plays": "խաղեր",
+ "win": "յաղթանակ",
+ "first_to_play": "Այսօր առաջինը!",
+ "top_score": "Լաւագոյն միաւորը!",
+ "all_words": "Բոլոր բառերը",
+ "daily_words_counting": "ամէնօրյա բառեր",
+ "newer": "Աւելի նոր",
+ "older": "Աւելի հին",
+ "page_of": "Էջ {page} / {total}",
+ "report_bad_word": "Տեղեկացնել վատ բառ",
+ "view_all_words": "Տեսնել {lang} բառերը",
+ "difficulty_locked": "Դժուարութիւնը չի կարելի փոխել"
}
}
diff --git a/data/languages/ia/language_config.json b/data/languages/ia/language_config.json
index c7702789..8b593fd6 100644
--- a/data/languages/ia/language_config.json
+++ b/data/languages/ia/language_config.json
@@ -10,13 +10,18 @@
},
"text": {
"subheader": "Interlingua",
- "next_word": "Next word ",
- "no_attempts": "You haven't tried any words yet! ",
+ "next_word": "Next word",
+ "no_attempts": "You haven't tried any words yet!",
"share": "Compartir",
- "notification-copied": "Copied to clipboard ",
- "notification-partial-word": "Please enter a full word ",
"share_challenge_win": "Io ha solvite le Wordle de hodie in {n} tentativos. Pote tu facer melio?",
- "share_challenge_lose": "Io non ha solvite le Wordle de hodie. E tu?"
+ "share_challenge_lose": "Io non ha solvite le Wordle de hodie. E tu?",
+ "notification_copied": "Copied to clipboard",
+ "notification_partial_word": "Please enter a full word",
+ "shared": "Compartite!",
+ "copied": "Copiate!",
+ "notification_word_not_valid": "Le parola non es valide",
+ "hard_mode_position": "Modo difficile: {letter} debe esser in position {position}",
+ "hard_mode_contains": "Modo difficile: le tentativa debe continer {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
@@ -33,5 +38,85 @@
"text_2_2": "is in the word, but not in the correct location.",
"text_2_3": "is not present in the word you are trying to guess.",
"text_3": "A new word will be available each day!"
+ },
+ "ui": {
+ "settings": "Configurationes",
+ "dark_mode": "Modo obscur",
+ "dark_mode_desc": "Commutar le thema obscur",
+ "sound_and_haptics": "Sono e vibrationes",
+ "difficulty": "Difficultate",
+ "word_info": "Info del parola",
+ "word_info_desc": "Definition e arte AI post le joco",
+ "language": "Lingua",
+ "change_language": "Cambiar lingua",
+ "better_than": "Melior que",
+ "of_players": "del jocatores",
+ "right_to_left": "Dextra a sinistra",
+ "keyboard_layout": "Disposition del claviero",
+ "install_app": "Installar le app",
+ "install_app_desc": "Jocar sin connexion e obtener le icone",
+ "report_issue": "Reportar un problema",
+ "view_source": "Vider le codice fonte",
+ "guess_distribution": "Distribution del tentativos",
+ "games": "Jocos",
+ "win_percent": "% Victorias",
+ "streak": "Serie",
+ "best": "Melior",
+ "all_languages": "Tote le linguas",
+ "languages": "Linguas",
+ "play_more_languages": "Joca plus linguas pro vider tu statisticas global!",
+ "add_to_home": "Adder al schermo principal",
+ "play_daily_like_app": "Joca Wordle cata die como un app",
+ "install": "Installar",
+ "close": "clauder",
+ "about": "A proposito",
+ "global_stats": "Statisticas global",
+ "games_played": "Jocos jocate",
+ "win_rate": "Percentage de victoria",
+ "current_streak": "Serie actual",
+ "languages_won": "Linguas vincite",
+ "best_overall_streak": "Melior serie global",
+ "best_active_streak": "Melior serie active",
+ "your_languages": "Tu linguas",
+ "no_games_yet": "Tu non ha ancora jocate. Elige un lingua pro comenciar!",
+ "wins": "Victorias",
+ "losses": "Defaitas",
+ "avg_attempts": "Tentativos medie",
+ "best_streak": "Melior serie",
+ "play": "Jocar",
+ "search_language": "Cercar lingua...",
+ "external_links": "Ligamines externe",
+ "coming_soon": "veniente tosto!",
+ "game": "joco",
+ "games_lowercase": "jocos",
+ "definition": "Definition",
+ "look_up_on_wiktionary": "Cercar in Wiktionario",
+ "easy": "Facile",
+ "normal": "Normal",
+ "hard": "Difficile",
+ "easy_desc": "Qualcunque parola es acceptate, mesmo si non es in le dictionario",
+ "normal_desc": "Le tentativos debe esser parolas valide del dictionario",
+ "hard_desc": "Le indicios revelate debe esser usate in le tentativos sequente",
+ "high_contrast": "Alte contrasto",
+ "high_contrast_desc": "Colores amicabile pro daltonicos",
+ "today": "Hodie",
+ "statistics": "Statisticas",
+ "todays_word_reveal": "Le parola de hodie — Joca pro revelar!",
+ "play_now": "Jocar ora",
+ "future_word": "Iste parola non ha ancora essite jocate. Reveni plus tarde!",
+ "community_stats": "Statisticas del communitate",
+ "players": "Jocatores",
+ "plays": "jocos",
+ "win": "victoria",
+ "first_to_play": "Le prime a jocar hodie!",
+ "top_score": "Le melior score hodie!",
+ "all_words": "Tote le parolas",
+ "daily_words_counting": "parolas quotidian e crescente",
+ "newer": "Plus recente",
+ "older": "Plus vetere",
+ "page_of": "Pagina {page} de {total}",
+ "report_bad_word": "Reportar un mal parola",
+ "view_all_words": "Vider tote le parolas {lang}",
+ "difficulty_locked": "Non pote cambiar le difficultate post haber devinato"
}
}
diff --git a/data/languages/id/language_config.json b/data/languages/id/language_config.json
index 55a18199..bc2b08ad 100644
--- a/data/languages/id/language_config.json
+++ b/data/languages/id/language_config.json
@@ -20,9 +20,13 @@
"share": "Bagikan",
"shared": "Dibagikan!",
"copied": "Disalin!",
- "notification-copied": "Disalin ke papan klip",
- "notification-word-not-valid": "Kata tidak valid",
- "notification-partial-word": "Masukkan kata lengkap"
+ "notification_copied": "Disalin ke papan klip",
+ "notification_word_not_valid": "Kata tidak valid",
+ "notification_partial_word": "Masukkan kata lengkap",
+ "share_challenge_win": "Saya menyelesaikan Wordle hari ini dalam {n} percobaan. Bisakah kamu lebih baik?",
+ "share_challenge_lose": "Saya tidak bisa menyelesaikan Wordle hari ini. Bisakah kamu?",
+ "hard_mode_position": "Mode sulit: {letter} harus di posisi {position}",
+ "hard_mode_contains": "Mode sulit: tebakan harus mengandung {letter}"
},
"help": {
"title": "Cara Bermain",
@@ -41,14 +45,8 @@
"settings": "Pengaturan",
"dark_mode": "Mode Gelap",
"dark_mode_desc": "Ubah tema gelap",
- "haptic_feedback": "Umpan Balik Haptic",
- "haptic_feedback_desc": "Getar saat sentuh",
- "sound_effects": "Efek Suara",
- "sound_effects_desc": "Suara menang/kalah",
"right_to_left": "Kanan ke kiri",
"keyboard_layout": "Tata letak keyboard",
- "easy_mode": "Izinkan semua kata",
- "easy_mode_label": "mode mudah",
"install_app": "Instal Aplikasi",
"install_app_desc": "Main offline & dapatkan ikon",
"report_issue": "Laporkan Masalah",
@@ -85,11 +83,42 @@
"coming_soon": "segera hadir!",
"game": "permainan",
"games_lowercase": "permainan",
- "show_definitions": "Tampilkan Definisi",
- "show_definitions_desc": "Tampilkan arti kata setelah permainan",
"definition": "Definisi",
"look_up_on_wiktionary": "Cari di Wiktionary",
- "word_art": "Seni Kata",
- "word_art_desc": "Ilustrasi AI kata harian"
+ "sound_and_haptics": "Suara & Getaran",
+ "difficulty": "Kesulitan",
+ "word_info": "Info Kata",
+ "word_info_desc": "Definisi & seni AI setelah permainan",
+ "language": "Bahasa",
+ "change_language": "Ganti Bahasa",
+ "better_than": "Lebih baik dari",
+ "of_players": "pemain",
+ "today": "Hari ini",
+ "statistics": "Statistik",
+ "todays_word_reveal": "Kata hari ini — Main untuk membuka!",
+ "play_now": "Main sekarang",
+ "future_word": "Kata ini belum dimainkan. Kembali nanti!",
+ "community_stats": "Statistik Komunitas",
+ "players": "Pemain",
+ "plays": "permainan",
+ "win": "menang",
+ "first_to_play": "Yang pertama bermain hari ini!",
+ "top_score": "Skor tertinggi hari ini!",
+ "all_words": "Semua Kata",
+ "daily_words_counting": "kata harian dan terus bertambah",
+ "newer": "Lebih baru",
+ "older": "Lebih lama",
+ "page_of": "Halaman {page} dari {total}",
+ "report_bad_word": "Laporkan kata tidak pantas",
+ "view_all_words": "Lihat semua kata {lang}",
+ "easy": "Mudah",
+ "normal": "Normal",
+ "hard": "Sulit",
+ "easy_desc": "Kata apa saja diterima, meskipun tidak ada di kamus",
+ "normal_desc": "Tebakan harus kata valid dari kamus",
+ "hard_desc": "Petunjuk yang terungkap harus digunakan dalam tebakan berikutnya",
+ "high_contrast": "Kontras Tinggi",
+ "high_contrast_desc": "Warna ramah buta warna",
+ "difficulty_locked": "Tidak bisa mengubah kesulitan setelah menebak"
}
}
diff --git a/data/languages/ie/language_config.json b/data/languages/ie/language_config.json
index 37d415a1..ef87d56e 100644
--- a/data/languages/ie/language_config.json
+++ b/data/languages/ie/language_config.json
@@ -10,13 +10,18 @@
},
"text": {
"subheader": "Occidental",
- "next_word": "Next word ",
- "no_attempts": "You haven't tried any words yet! ",
+ "next_word": "Next word",
+ "no_attempts": "You haven't tried any words yet!",
"share": "Partir",
- "notification-copied": "Copied to clipboard ",
- "notification-partial-word": "Please enter a full word ",
"share_challenge_win": "Yo solvit li hodiernal Wordle in {n} provas. Posse tu far plu bon?",
- "share_challenge_lose": "Yo ne solvit li hodiernal Wordle. E tu?"
+ "share_challenge_lose": "Yo ne solvit li hodiernal Wordle. E tu?",
+ "notification_copied": "Copied to clipboard",
+ "notification_partial_word": "Please enter a full word",
+ "shared": "Partit!",
+ "copied": "Copiat!",
+ "notification_word_not_valid": "Li parol ne es valid",
+ "hard_mode_position": "Mod desfacil: {letter} deve esser in position {position}",
+ "hard_mode_contains": "Mod desfacil: li proba deve contener {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
@@ -50,5 +55,85 @@
"u": [
"ú"
]
+ },
+ "ui": {
+ "settings": "Parametres",
+ "dark_mode": "Mod obscur",
+ "dark_mode_desc": "Commutar li tema obscur",
+ "sound_and_haptics": "Son e vibrationes",
+ "difficulty": "Desfacilitá",
+ "word_info": "Information del parol",
+ "word_info_desc": "Definition e arte AI pos li jocu",
+ "language": "Lingue",
+ "change_language": "Cambiar lingue",
+ "better_than": "Plu bon quam",
+ "of_players": "del jocatores",
+ "right_to_left": "Dextri a levul",
+ "keyboard_layout": "Disposition del claviero",
+ "install_app": "Installar li app",
+ "install_app_desc": "Jocar sin-linea e obtener li icone",
+ "report_issue": "Reportar un problema",
+ "view_source": "Vider li fonte-code",
+ "guess_distribution": "Distribution del probas",
+ "games": "Jocos",
+ "win_percent": "% Victorias",
+ "streak": "Serie",
+ "best": "Maxim bon",
+ "all_languages": "Omni lingues",
+ "languages": "Lingues",
+ "play_more_languages": "Joca plu lingues por vider tui statistica global!",
+ "add_to_home": "Adjunter al ecran principal",
+ "play_daily_like_app": "Joca Wordle chascun die quam un app",
+ "install": "Installar",
+ "close": "cluder",
+ "about": "Pri",
+ "global_stats": "Statistica global",
+ "games_played": "Jocos jocat",
+ "win_rate": "Rata de victoria",
+ "current_streak": "Serie actual",
+ "languages_won": "Lingues vincit",
+ "best_overall_streak": "Maxim bon serie global",
+ "best_active_streak": "Maxim bon serie activ",
+ "your_languages": "Tui lingues",
+ "no_games_yet": "Tu ancor ne ha jocat. Selecte un lingue por comensar!",
+ "wins": "Victorias",
+ "losses": "Defaites",
+ "avg_attempts": "Medial probas",
+ "best_streak": "Maxim bon serie",
+ "play": "Jocar",
+ "search_language": "Serchar lingue...",
+ "external_links": "Ligamentes extern",
+ "coming_soon": "veni bentost!",
+ "game": "jocu",
+ "games_lowercase": "jocos",
+ "definition": "Definition",
+ "look_up_on_wiktionary": "Serchar in Wiktionario",
+ "easy": "Facil",
+ "normal": "Normal",
+ "hard": "Desfacil",
+ "easy_desc": "Qualcunc parol es acceptat, mem si ne es in li dictionarium",
+ "normal_desc": "Li probas deve esser valid paroles del dictionarium",
+ "hard_desc": "Li revelat indicies deve esser usat in li sequent probas",
+ "high_contrast": "Alt contraste",
+ "high_contrast_desc": "Colores amical por daltonianes",
+ "today": "Hodie",
+ "statistics": "Statistica",
+ "todays_word_reveal": "Li parol de hodie — Joca por revelar!",
+ "play_now": "Jocar nu",
+ "future_word": "Ti parol ancor ne ha esset jocat. Reveni plu tard!",
+ "community_stats": "Statistica del comunitate",
+ "players": "Jocatores",
+ "plays": "jocos",
+ "win": "victoria",
+ "first_to_play": "Li unesim jocar hodie!",
+ "top_score": "Maxim bon score hodie!",
+ "all_words": "Omni paroles",
+ "daily_words_counting": "diari paroles e crescente",
+ "newer": "Plu recent",
+ "older": "Plu ancian",
+ "page_of": "Págine {page} de {total}",
+ "report_bad_word": "Reportar un mal parol",
+ "view_all_words": "Vider omni {lang} paroles",
+ "difficulty_locked": "Ne posse cambiar li desfacilitá pos divination"
}
}
diff --git a/data/languages/is/language_config.json b/data/languages/is/language_config.json
index c65dcab4..16f3a97c 100644
--- a/data/languages/is/language_config.json
+++ b/data/languages/is/language_config.json
@@ -4,35 +4,40 @@
"name_native": "Íslenska",
"meta": {
"locale": "is",
- "title": "Daglegt orðaleikur ",
- "description": "Giska á falinn orð í 6 tries (eða minna). Nýtt þraut er í boði á hverjum degi! ",
+ "title": "Daglegt orðaleikur",
+ "description": "Giska á falinn orð í 6 tries (eða minna). Nýtt þraut er í boði á hverjum degi!",
"keywords": "Íslenska, þraut, orð, leika, leikur, á netinu, giska á, daglega"
},
"text": {
"subheader": "Íslenska",
- "next_word": "Næsta orð ",
- "no_attempts": "Þú hefur ekki reynt nein orð ennþá! ",
+ "next_word": "Næsta orð",
+ "no_attempts": "Þú hefur ekki reynt nein orð ennþá!",
"share": "Deila",
- "notification-copied": "Afritað á klemmuspjald ",
- "notification-partial-word": "Vinsamlegast sláðu inn fullt orð ",
"share_challenge_win": "Ég leysti Wordle dagsins á {n} tilraunum. Geturðu betur?",
- "share_challenge_lose": "Ég leysti ekki Wordle dagsins. Geturðu?"
+ "share_challenge_lose": "Ég leysti ekki Wordle dagsins. Geturðu?",
+ "notification_copied": "Afritað á klemmuspjald",
+ "notification_partial_word": "Vinsamlegast sláðu inn fullt orð",
+ "shared": "Deilt!",
+ "copied": "Afritað!",
+ "notification_word_not_valid": "Orðið er ekki gilt",
+ "hard_mode_position": "Erfitt: {letter} verður að vera í stöðu {position}",
+ "hard_mode_contains": "Erfitt: giskunin verður að innihalda {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Hvernig á að spila ",
- "title_2": "Dæmi um ",
- "close": "Lokaðu þessum skilaboðum ",
- "text_1_1_1": "Giska á það ",
- "text_1_1_2": "í sex tilraunir eða minna. ",
- "text_1_2": "Hver giska verður að vera gilt fimm bréf orð. Ýttu á Enter hnappinn til að leggja fram giska þína. ",
- "text_1_3": "Eftir að þú hefur giska á mun flísarnir breyta lit til að gefa til kynna hvaða bréf sem orðið eru réttar eða næstum réttar. ",
- "text_2_1": "er í orði og á réttum stað! ",
- "text_2_2": "er í orði, en ekki á réttum stað. ",
- "text_2_3": "er ekki til staðar í orði sem þú ert að reyna að giska á. ",
- "text_3": "Nýtt orð verður í boði á hverjum degi! "
+ "title": "Hvernig á að spila",
+ "title_2": "Dæmi um",
+ "close": "Lokaðu þessum skilaboðum",
+ "text_1_1_1": "Giska á það",
+ "text_1_1_2": "í sex tilraunir eða minna.",
+ "text_1_2": "Hver giska verður að vera gilt fimm bréf orð. Ýttu á Enter hnappinn til að leggja fram giska þína.",
+ "text_1_3": "Eftir að þú hefur giska á mun flísarnir breyta lit til að gefa til kynna hvaða bréf sem orðið eru réttar eða næstum réttar.",
+ "text_2_1": "er í orði og á réttum stað!",
+ "text_2_2": "er í orði, en ekki á réttum stað.",
+ "text_2_3": "er ekki til staðar í orði sem þú ert að reyna að giska á.",
+ "text_3": "Nýtt orð verður í boði á hverjum degi!"
},
"diacritic_map": {
"a": [
@@ -53,5 +58,85 @@
"y": [
"ý"
]
+ },
+ "ui": {
+ "settings": "Stillingar",
+ "dark_mode": "Dimmur ham",
+ "dark_mode_desc": "Skipta yfir í dimmt þema",
+ "sound_and_haptics": "Hljóð og titringur",
+ "difficulty": "Erfiðleikastig",
+ "word_info": "Orðaupplýsingar",
+ "word_info_desc": "Skilgreining og AI list eftir leik",
+ "language": "Tungumál",
+ "change_language": "Breyta tungumáli",
+ "better_than": "Betra en",
+ "of_players": "leikmanna",
+ "right_to_left": "Hægri til vinstri",
+ "keyboard_layout": "Lyklaborðsuppsetning",
+ "install_app": "Setja upp forrit",
+ "install_app_desc": "Spila án nets og fá tákn",
+ "report_issue": "Tilkynna vanda",
+ "view_source": "Skoða frumkóða",
+ "guess_distribution": "Dreifing giskana",
+ "games": "Leikir",
+ "win_percent": "Sigur %",
+ "streak": "Í röð",
+ "best": "Best",
+ "all_languages": "Öll tungumál",
+ "languages": "Tungumál",
+ "play_more_languages": "Spilaðu fleiri tungumál til að sjá heildartölfræði!",
+ "add_to_home": "Bæta við heimaskjá",
+ "play_daily_like_app": "Spilaðu Wordle á hverjum degi eins og forrit",
+ "install": "Setja upp",
+ "close": "loka",
+ "about": "Um",
+ "global_stats": "Heildartölfræði",
+ "games_played": "Leikir spilaðir",
+ "win_rate": "Sigurhlutfall",
+ "current_streak": "Núverandi röð",
+ "languages_won": "Tungumál sigruð",
+ "best_overall_streak": "Besta heildarröð",
+ "best_active_streak": "Besta virka röð",
+ "your_languages": "Þín tungumál",
+ "no_games_yet": "Þú hefur ekki spilað enn. Veldu tungumál til að byrja!",
+ "wins": "Sigrar",
+ "losses": "Töp",
+ "avg_attempts": "Meðal tilraunir",
+ "best_streak": "Besta röð",
+ "play": "Spila",
+ "search_language": "Leita að tungumáli...",
+ "external_links": "Ytri tenglar",
+ "coming_soon": "kemur bráðlega!",
+ "game": "leikur",
+ "games_lowercase": "leikir",
+ "definition": "Skilgreining",
+ "look_up_on_wiktionary": "Fletta upp á Wiktionary",
+ "easy": "Auðvelt",
+ "normal": "Venjulegt",
+ "hard": "Erfitt",
+ "easy_desc": "Hvaða orð sem er er samþykkt, jafnvel þó að það sé ekki í orðabókinni",
+ "normal_desc": "Giskanir verða að vera gild orð úr orðabókinni",
+ "hard_desc": "Uppgötvuð vísbendingar verða að nota í næstu giskunum",
+ "high_contrast": "Mikill skýða",
+ "high_contrast_desc": "Litblinduvænir litir",
+ "today": "Í dag",
+ "statistics": "Tölfræði",
+ "todays_word_reveal": "Orð dagsins — Spilaðu til að opinbera!",
+ "play_now": "Spila núna",
+ "future_word": "Þetta orð hefur ekki verið spilað enn. Komið aftur seinna!",
+ "community_stats": "Samfélagstölfræði",
+ "players": "Leikmenn",
+ "plays": "leikir",
+ "win": "sigur",
+ "first_to_play": "Fyrstur til að spila í dag!",
+ "top_score": "Hæsta skor í dag!",
+ "all_words": "Öll orð",
+ "daily_words_counting": "dagleg orð og fjölgandi",
+ "newer": "Nýrra",
+ "older": "Eldra",
+ "page_of": "Síða {page} af {total}",
+ "report_bad_word": "Tilkynna slæmt orð",
+ "view_all_words": "Skoða öll {lang} orð",
+ "difficulty_locked": "Ekki hægt að breyta erfiðleikastigi eftir giskun"
}
}
diff --git a/data/languages/it/language_config.json b/data/languages/it/language_config.json
index 3340d9fb..ac83f527 100644
--- a/data/languages/it/language_config.json
+++ b/data/languages/it/language_config.json
@@ -23,48 +23,47 @@
},
"meta": {
"locale": "it",
- "title": "Il gioco di parole quotidiane ",
- "description": "Indovina la parola nascosta in 6 tentativi (o meno). Un nuovo puzzle è disponibile ogni giorno! ",
+ "title": "Il gioco di parole quotidiane",
+ "description": "Indovina la parola nascosta in 6 tentativi (o meno). Un nuovo puzzle è disponibile ogni giorno!",
"keywords": "Italiano, Puzzle, Word, Play, Game, Online, Guess, Daily"
},
"text": {
"subheader": "Italiano",
- "next_word": "Prossima parola ",
- "no_attempts": "Non hai ancora provato tutte le parole! ",
- "share": "Condividere ",
- "notification-copied": "Copiato negli Appunti ",
- "notification-partial-word": "Per favore inserisci una parola completa ",
+ "next_word": "Prossima parola",
+ "no_attempts": "Non hai ancora provato tutte le parole!",
+ "share": "Condividere",
"share_challenge_win": "Ho risolto il Wordle di oggi in {n} tentativi. Riesci a fare meglio?",
- "share_challenge_lose": "Non ho risolto il Wordle di oggi. Riesci tu?"
+ "share_challenge_lose": "Non ho risolto il Wordle di oggi. Riesci tu?",
+ "notification_copied": "Copiato negli Appunti",
+ "notification_partial_word": "Per favore inserisci una parola completa",
+ "shared": "Condiviso!",
+ "copied": "Copiato!",
+ "notification_word_not_valid": "La parola non è valida",
+ "hard_mode_position": "Modalità difficile: {letter} deve essere in posizione {position}",
+ "hard_mode_contains": "Modalità difficile: il tentativo deve contenere {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Come giocare ",
- "title_2": "Esempi ",
- "close": "Chiudi questo messaggio ",
- "text_1_1_1": "Indovina il ",
- "text_1_1_2": "in sei tentativi o meno. ",
- "text_1_2": "Ogni ipotesi deve essere una parola di cinque lettere valida. Premi il pulsante ENTER per inviare la tua ipotesi. ",
- "text_1_3": "Dopo aver indovinato, le tessere cambieranno colore per indicare quali lettere della tua parola sono corrette o quasi corrette. ",
- "text_2_1": "è nella parola e nella posizione corretta! ",
- "text_2_2": "è nella parola, ma non nella posizione corretta. ",
- "text_2_3": "non è presente nella parola che stai cercando di indovinare. ",
- "text_3": "Una nuova parola sarà disponibile ogni giorno! "
+ "title": "Come giocare",
+ "title_2": "Esempi",
+ "close": "Chiudi questo messaggio",
+ "text_1_1_1": "Indovina il",
+ "text_1_1_2": "in sei tentativi o meno.",
+ "text_1_2": "Ogni ipotesi deve essere una parola di cinque lettere valida. Premi il pulsante ENTER per inviare la tua ipotesi.",
+ "text_1_3": "Dopo aver indovinato, le tessere cambieranno colore per indicare quali lettere della tua parola sono corrette o quasi corrette.",
+ "text_2_1": "è nella parola e nella posizione corretta!",
+ "text_2_2": "è nella parola, ma non nella posizione corretta.",
+ "text_2_3": "non è presente nella parola che stai cercando di indovinare.",
+ "text_3": "Una nuova parola sarà disponibile ogni giorno!"
},
"ui": {
"settings": "Impostazioni",
"dark_mode": "Modalità scura",
"dark_mode_desc": "Attiva tema scuro",
- "haptic_feedback": "Feedback aptico",
- "haptic_feedback_desc": "Vibrazione al tocco",
- "sound_effects": "Effetti sonori",
- "sound_effects_desc": "Suoni vittoria/sconfitta",
"right_to_left": "Da destra a sinistra",
"keyboard_layout": "Layout tastiera",
- "easy_mode": "Permetti qualsiasi parola",
- "easy_mode_label": "modalità facile",
"install_app": "Installa app",
"install_app_desc": "Gioca offline e ottieni l'icona",
"report_issue": "Segnala un problema",
@@ -80,6 +79,63 @@
"add_to_home": "Aggiungi alla schermata home",
"play_daily_like_app": "Gioca Wordle ogni giorno come un'app",
"install": "Installa",
- "close": "chiudi"
+ "close": "chiudi",
+ "sound_and_haptics": "Suono e vibrazione",
+ "difficulty": "Difficoltà",
+ "word_info": "Info parola",
+ "word_info_desc": "Definizione e arte AI dopo la partita",
+ "language": "Lingua",
+ "change_language": "Cambia lingua",
+ "better_than": "Meglio di",
+ "of_players": "dei giocatori",
+ "about": "Info",
+ "global_stats": "Statistiche globali",
+ "games_played": "Partite giocate",
+ "win_rate": "Percentuale vittorie",
+ "current_streak": "Serie attuale",
+ "languages_won": "Lingue vinte",
+ "best_overall_streak": "Migliore serie globale",
+ "best_active_streak": "Migliore serie attiva",
+ "your_languages": "Le tue lingue",
+ "no_games_yet": "Non hai ancora giocato. Scegli una lingua per iniziare!",
+ "wins": "Vittorie",
+ "losses": "Sconfitte",
+ "avg_attempts": "Tentativi medi",
+ "best_streak": "Migliore serie",
+ "play": "Gioca",
+ "search_language": "Cerca lingua...",
+ "external_links": "Link esterni",
+ "coming_soon": "in arrivo!",
+ "game": "partita",
+ "games_lowercase": "partite",
+ "definition": "Definizione",
+ "look_up_on_wiktionary": "Cerca su Wikizionario",
+ "easy": "Facile",
+ "normal": "Normale",
+ "hard": "Difficile",
+ "easy_desc": "Qualsiasi parola accettata, anche se non nel dizionario",
+ "normal_desc": "I tentativi devono essere parole valide del dizionario",
+ "hard_desc": "Gli indizi rivelati devono essere usati nei tentativi successivi",
+ "high_contrast": "Contrasto elevato",
+ "high_contrast_desc": "Colori adatti ai daltonici",
+ "today": "Oggi",
+ "statistics": "Statistiche",
+ "todays_word_reveal": "La parola di oggi — Gioca per scoprirla!",
+ "play_now": "Gioca ora",
+ "future_word": "Questa parola non è stata ancora giocata. Torna più tardi!",
+ "community_stats": "Statistiche della comunità",
+ "players": "Giocatori",
+ "plays": "partite",
+ "win": "vittoria",
+ "first_to_play": "Primo a giocare oggi!",
+ "top_score": "Miglior punteggio oggi!",
+ "all_words": "Tutte le parole",
+ "daily_words_counting": "parole quotidiane e in aumento",
+ "newer": "Più recente",
+ "older": "Più vecchio",
+ "page_of": "Pagina {page} di {total}",
+ "report_bad_word": "Segnala parola inappropriata",
+ "view_all_words": "Vedi tutte le parole {lang}",
+ "difficulty_locked": "Non puoi cambiare la difficoltà dopo aver indovinato"
}
}
diff --git a/data/languages/ja/language_config.json b/data/languages/ja/language_config.json
index 46e11ece..97f1724a 100644
--- a/data/languages/ja/language_config.json
+++ b/data/languages/ja/language_config.json
@@ -18,11 +18,13 @@
"share": "シェア",
"shared": "シェアしました!",
"copied": "コピーしました!",
- "notification-copied": "クリップボードにコピーしました",
- "notification-word-not-valid": "その言葉は無効です",
- "notification-partial-word": "5文字すべて入力してください",
"share_challenge_win": "今日のワードルを{n}回で正解しました。あなたは解けますか?",
- "share_challenge_lose": "今日のワードルは解けませんでした。あなたはどうですか?"
+ "share_challenge_lose": "今日のワードルは解けませんでした。あなたはどうですか?",
+ "notification_copied": "クリップボードにコピーしました",
+ "notification_word_not_valid": "その言葉は無効です",
+ "notification_partial_word": "5文字すべて入力してください",
+ "hard_mode_position": "ハードモード: {letter} は {position} 番目に必要です",
+ "hard_mode_contains": "ハードモード: {letter} を含めてください"
},
"help": {
"title": "遊び方",
@@ -41,14 +43,8 @@
"settings": "設定",
"dark_mode": "ダークモード",
"dark_mode_desc": "ダークテーマに切り替え",
- "haptic_feedback": "振動フィードバック",
- "haptic_feedback_desc": "タッチ時に振動",
- "sound_effects": "効果音",
- "sound_effects_desc": "勝敗時の効果音",
"right_to_left": "右から左",
"keyboard_layout": "キーボード配列",
- "easy_mode": "どの言葉でも許可",
- "easy_mode_label": "イージーモード",
"install_app": "アプリをインストール",
"install_app_desc": "オフラインでプレイ&アプリアイコンを取得",
"report_issue": "問題を報告",
@@ -85,11 +81,42 @@
"coming_soon": "近日公開!",
"game": "ゲーム",
"games_lowercase": "ゲーム",
- "show_definitions": "意味を表示",
- "show_definitions_desc": "ゲーム後に言葉の意味を表示",
"definition": "定義",
"look_up_on_wiktionary": "ウィクショナリーで調べる",
- "word_art": "ワードアート",
- "word_art_desc": "今日の言葉のAIイラスト"
+ "sound_and_haptics": "サウンドと振動",
+ "difficulty": "難易度",
+ "word_info": "言葉情報",
+ "word_info_desc": "ゲーム後に定義とAIアート",
+ "language": "言語",
+ "change_language": "言語を変更",
+ "better_than": "より良い",
+ "of_players": "のプレイヤー",
+ "today": "今日",
+ "statistics": "統計",
+ "todays_word_reveal": "今日の言葉 — プレイして確認!",
+ "play_now": "今すぐプレイ",
+ "future_word": "この言葉はまだプレイされていません。後でまた来てください!",
+ "community_stats": "コミュニティ統計",
+ "players": "プレイヤー",
+ "plays": "プレイ",
+ "win": "勝利",
+ "first_to_play": "今日の最初のプレイヤー!",
+ "top_score": "今日の最高スコア!",
+ "all_words": "すべての言葉",
+ "daily_words_counting": "日替わりの言葉が続々追加中",
+ "newer": "新しい",
+ "older": "古い",
+ "page_of": "ページ {page}/{total}",
+ "report_bad_word": "不適切な言葉を報告",
+ "view_all_words": "{lang}の全ての言葉を見る",
+ "easy": "かんたん",
+ "normal": "ふつう",
+ "hard": "むずかしい",
+ "easy_desc": "辞書にない言葉も受け付けます",
+ "normal_desc": "推測は辞書の有効な言葉である必要があります",
+ "hard_desc": "明らかになったヒントは次の推測で使う必要があります",
+ "high_contrast": "ハイコントラスト",
+ "high_contrast_desc": "色覚異常にやさしい色",
+ "difficulty_locked": "推測後は難易度を変更できません"
}
}
diff --git a/data/languages/ka/language_config.json b/data/languages/ka/language_config.json
index ccc8caad..a16ed25f 100644
--- a/data/languages/ka/language_config.json
+++ b/data/languages/ka/language_config.json
@@ -6,34 +6,119 @@
"meta": {
"locale": "ka",
"wordle_native": "ვორდლი",
- "title": "ყოველდღიური სიტყვა თამაში ",
- "description": "გამოიცანით დამალული სიტყვა 6 ან ნაკლებ ცდაში. ახალი თავსატეხი ხელმისაწვდომია ყოველ დღე! ",
+ "title": "ყოველდღიური სიტყვა თამაში",
+ "description": "გამოიცანით დამალული სიტყვა 6 ან ნაკლებ ცდაში. ახალი თავსატეხი ხელმისაწვდომია ყოველ დღე!",
"keywords": "ქართული, თავსატეხი, სიტყვა, თამაში, თამაში, ონლაინ, პასუხი, ყოველდღიურად"
},
"text": {
"subheader": "ქართული",
- "next_word": "შემდეგი სიტყვა ",
- "no_attempts": "თქვენ ჯერ არ შეგიყვანიათ სიტყვა! ",
- "share": "გაზიარება ",
- "notification-copied": "გადაწერა ბუფერში ",
- "notification-partial-word": "გთხოვთ შეიყვანოთ სრული სიტყვა ",
+ "next_word": "შემდეგი სიტყვა",
+ "no_attempts": "თქვენ ჯერ არ შეგიყვანიათ სიტყვა!",
+ "share": "გაზიარება",
"share_challenge_win": "დღევანდელი Wordle {n} ცდით ამოვხსენი. შეგიძლია უკეთესად?",
- "share_challenge_lose": "დღევანდელი Wordle ვერ ამოვხსენი. შენ შეგიძლია?"
+ "share_challenge_lose": "დღევანდელი Wordle ვერ ამოვხსენი. შენ შეგიძლია?",
+ "notification_copied": "გადაწერა ბუფერში",
+ "notification_partial_word": "გთხოვთ შეიყვანოთ სრული სიტყვა",
+ "shared": "გაზიარებულია!",
+ "copied": "დაკოპირებულია!",
+ "notification_word_not_valid": "სიტყვა არ არის მოქმედი",
+ "hard_mode_position": "რთული რეჟიმი: {letter} უნდა იყოს პოზიციაზე {position}",
+ "hard_mode_contains": "რთული რეჟიმი: პასუხი უნდა შეიცავდეს {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Როგორ ვითამაშოთ ",
- "title_2": "მაგალითები ",
- "close": "დახურვა ",
- "text_1_1_1": "პასუხი ",
- "text_1_1_2": "ექვსი ცდა ან ნაკლები. ",
- "text_1_2": "თითოეული პასუხი უნდა იყოს ხუთ ასოიანი ნამდვილი სიტყვა. დააჭირეთ ღილაკს Enter რომ შეიყვანოთ თქვენი პასუხი. ",
- "text_1_3": "მას შემდეგ რაც შეიყვანთ პასუხს, უჯრები გაფერადდება თუ თქვენი შეყვანილი ასოები შედის სწორ პასუხში. ",
- "text_2_1": "არის სწორ პასუხში და ზუსტად ამ ადგილას! ",
- "text_2_2": "არის სწორ პასუხში, მაგრამ სხვა ადგილას. ",
- "text_2_3": "არ არის სწორ პასუხში. ",
- "text_3": "ახალი სიტყვა ხელმისაწვდომი იქნება ყოველ დღე! "
+ "title": "Როგორ ვითამაშოთ",
+ "title_2": "მაგალითები",
+ "close": "დახურვა",
+ "text_1_1_1": "პასუხი",
+ "text_1_1_2": "ექვსი ცდა ან ნაკლები.",
+ "text_1_2": "თითოეული პასუხი უნდა იყოს ხუთ ასოიანი ნამდვილი სიტყვა. დააჭირეთ ღილაკს Enter რომ შეიყვანოთ თქვენი პასუხი.",
+ "text_1_3": "მას შემდეგ რაც შეიყვანთ პასუხს, უჯრები გაფერადდება თუ თქვენი შეყვანილი ასოები შედის სწორ პასუხში.",
+ "text_2_1": "არის სწორ პასუხში და ზუსტად ამ ადგილას!",
+ "text_2_2": "არის სწორ პასუხში, მაგრამ სხვა ადგილას.",
+ "text_2_3": "არ არის სწორ პასუხში.",
+ "text_3": "ახალი სიტყვა ხელმისაწვდომი იქნება ყოველ დღე!"
+ },
+ "ui": {
+ "settings": "პარამეტრები",
+ "dark_mode": "მუქი რეჟიმი",
+ "dark_mode_desc": "მუქი თემის გადართვა",
+ "sound_and_haptics": "ხმა და ვიბრაცია",
+ "difficulty": "სირთულე",
+ "word_info": "სიტყვის ინფორმაცია",
+ "word_info_desc": "განმარტება და AI ხელოვნება თამაშის შემდეგ",
+ "language": "ენა",
+ "change_language": "ენის შეცვლა",
+ "better_than": "უკეთესი ვიდრე",
+ "of_players": "მოთამაშეებიდან",
+ "right_to_left": "მარჯვნიდან მარცხნივ",
+ "keyboard_layout": "კლავიატურის განლაგება",
+ "install_app": "აპის დაყენება",
+ "install_app_desc": "ითამაშეთ ოფლაინ და მიიღეთ ხატულა",
+ "report_issue": "პრობლემის შეტყობინება",
+ "view_source": "საწყისი კოდის ნახვა",
+ "guess_distribution": "მიხვედრების განაწილება",
+ "games": "თამაშები",
+ "win_percent": "მოგების %",
+ "streak": "ზედიზედ",
+ "best": "საუკეთესო",
+ "all_languages": "ყველა ენა",
+ "languages": "ენები",
+ "play_more_languages": "ითამაშეთ მეტი ენებით საერთო სტატისტიკის სანახავად!",
+ "add_to_home": "მთავარ ეკრანზე დამატება",
+ "play_daily_like_app": "ითამაშეთ Wordle ყოველდღე აპის მსგავსად",
+ "install": "დაყენება",
+ "close": "დახურვა",
+ "about": "შესახებ",
+ "global_stats": "საერთო სტატისტიკა",
+ "games_played": "ნათამაშები თამაშები",
+ "win_rate": "მოგების მაჩვენებელი",
+ "current_streak": "მიმდინარე ზედიზედ",
+ "languages_won": "მოგებული ენები",
+ "best_overall_streak": "საუკეთესო საერთო ზედიზედ",
+ "best_active_streak": "საუკეთესო აქტიური ზედიზედ",
+ "your_languages": "თქვენი ენები",
+ "no_games_yet": "ჯერ არ გითამაშია. აირჩიეთ ენა დასაწყებად!",
+ "wins": "მოგებები",
+ "losses": "წაგებები",
+ "avg_attempts": "საშუალო ცდები",
+ "best_streak": "საუკეთესო ზედიზედ",
+ "play": "თამაში",
+ "search_language": "ენის ძიება...",
+ "external_links": "გარე ბმულები",
+ "coming_soon": "მალე ემატება!",
+ "game": "თამაში",
+ "games_lowercase": "თამაშები",
+ "definition": "განმარტება",
+ "look_up_on_wiktionary": "მოძებნეთ Wiktionary-ზე",
+ "easy": "ადვილი",
+ "normal": "ჩვეულებრივი",
+ "hard": "რთული",
+ "easy_desc": "ნებისმიერი სიტყვა მიღებულია, თუნდაც ლექსიკონში არ არის",
+ "normal_desc": "მიხვედრები უნდა იყოს ლექსიკონის მოქმედი სიტყვები",
+ "hard_desc": "გამოვლენილი მინიშნებები უნდა გამოიყენოთ შემდეგ მიხვედრებში",
+ "high_contrast": "მაღალი კონტრასტი",
+ "high_contrast_desc": "ფერად დანახულისთვის მოსახერხებელი",
+ "today": "დღეს",
+ "statistics": "სტატისტიკა",
+ "todays_word_reveal": "დღევანდელი სიტყვა — ითამაშეთ გასაგებად!",
+ "play_now": "ითამაშეთ ახლა",
+ "future_word": "ეს სიტყვა ჯერ არ გათამაშებულა. დაბრუნდით მოგვიანებით!",
+ "community_stats": "საზოგადოების სტატისტიკა",
+ "players": "მოთამაშეები",
+ "plays": "თამაშები",
+ "win": "მოგება",
+ "first_to_play": "პირველი მოთამაშე დღეს!",
+ "top_score": "საუკეთესო ქულა დღეს!",
+ "all_words": "ყველა სიტყვა",
+ "daily_words_counting": "ყოველდღიური სიტყვები და იმატებს",
+ "newer": "უფრო ახალი",
+ "older": "უფრო ძველი",
+ "page_of": "გვერდი {page} / {total}",
+ "report_bad_word": "უვარგისო სიტყვის შეტყობინება",
+ "view_all_words": "ყველა {lang} სიტყვის ნახვა",
+ "difficulty_locked": "სირთულე ვერ შეიცვლება მიხვედრის შემდეგ"
}
}
diff --git a/data/languages/ko/language_config.json b/data/languages/ko/language_config.json
index 992dea63..b9924ec3 100644
--- a/data/languages/ko/language_config.json
+++ b/data/languages/ko/language_config.json
@@ -6,97 +6,320 @@
"meta": {
"locale": "ko",
"wordle_native": "워들",
- "title": "일일 단어 게임 ",
- "description": "6 시도 (이하)에서 숨겨진 단어를 추측하십시오. 매일 새로운 퍼즐을 사용할 수 있습니다! ",
+ "title": "일일 단어 게임",
+ "description": "6 시도 (이하)에서 숨겨진 단어를 추측하십시오. 매일 새로운 퍼즐을 사용할 수 있습니다!",
"keywords": "한국어, 퍼즐, 단어, 놀이, 게임, 온라인, 추측, 매일"
},
"text": {
"subheader": "한국어",
- "next_word": "다음 단어 ",
- "no_attempts": "아직 어떤 단어를 시도하지 않았습니다! ",
+ "next_word": "다음 단어",
+ "no_attempts": "아직 어떤 단어를 시도하지 않았습니다!",
"share": "공유",
- "notification-copied": "클립 보드에 복사 ",
- "notification-partial-word": "전체 단어를 입력하십시오 ",
"share_challenge_win": "오늘의 Wordle을 {n}번 만에 맞췄어요. 저보다 잘할 수 있나요?",
- "share_challenge_lose": "오늘의 Wordle을 못 맞췄어요. 당신은 할 수 있나요?"
+ "share_challenge_lose": "오늘의 Wordle을 못 맞췄어요. 당신은 할 수 있나요?",
+ "notification_copied": "클립 보드에 복사",
+ "notification_partial_word": "전체 단어를 입력하십시오",
+ "shared": "공유됨!",
+ "copied": "복사됨!",
+ "notification_word_not_valid": "유효하지 않은 단어입니다",
+ "hard_mode_position": "하드 모드: {letter}은(는) {position}번째 위치에 있어야 합니다",
+ "hard_mode_contains": "하드 모드: {letter}이(가) 포함되어야 합니다"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"hide_diacritic_hints": true,
"diacritic_map": {
- "ㄱ": ["ᄀ", "ᆨ"],
- "ㄲ": ["ᄁ", "ᆩ"],
- "ㄴ": ["ᄂ", "ᆫ"],
- "ㄵ": ["ᆬ"],
- "ㄶ": ["ᆭ"],
- "ㄷ": ["ᄃ", "ᆮ"],
- "ㄸ": ["ᄄ"],
- "ㄹ": ["ᄅ", "ᆯ"],
- "ㄺ": ["ᆰ"],
- "ㄻ": ["ᆱ"],
- "ㄼ": ["ᆲ"],
- "ㄽ": ["ᆳ"],
- "ㄾ": ["ᆴ"],
- "ㄿ": ["ᆵ"],
- "ㅀ": ["ᆶ"],
- "ㅁ": ["ᄆ", "ᆷ"],
- "ㅂ": ["ᄇ", "ᆸ"],
- "ㅃ": ["ᄈ"],
- "ㅄ": ["ᆹ"],
- "ㅅ": ["ᄉ", "ᆺ"],
- "ㅆ": ["ᄊ", "ᆻ"],
- "ㅇ": ["ᄋ", "ᆼ"],
- "ㅈ": ["ᄌ", "ᆽ"],
- "ㅉ": ["ᄍ"],
- "ㅊ": ["ᄎ", "ᆾ"],
- "ㅋ": ["ᄏ", "ᆿ"],
- "ㅌ": ["ᄐ", "ᇀ"],
- "ㅍ": ["ᄑ", "ᇁ"],
- "ㅎ": ["ᄒ", "ᇂ"],
- "ㅏ": ["ᅡ"],
- "ㅐ": ["ᅢ"],
- "ㅑ": ["ᅣ"],
- "ㅓ": ["ᅥ"],
- "ㅔ": ["ᅦ"],
- "ㅕ": ["ᅧ"],
- "ㅖ": ["ᅨ"],
- "ㅗ": ["ᅩ"],
- "ㅘ": ["ᅪ"],
- "ㅙ": ["ᅫ"],
- "ㅚ": ["ᅬ"],
- "ㅛ": ["ᅭ"],
- "ㅜ": ["ᅮ"],
- "ㅝ": ["ᅯ"],
- "ㅞ": ["ᅰ"],
- "ㅟ": ["ᅱ"],
- "ㅠ": ["ᅲ"],
- "ㅡ": ["ᅳ"],
- "ㅢ": ["ᅴ"],
- "ㅣ": ["ᅵ"]
+ "ㄱ": [
+ "ᄀ",
+ "ᆨ"
+ ],
+ "ㄲ": [
+ "ᄁ",
+ "ᆩ"
+ ],
+ "ㄴ": [
+ "ᄂ",
+ "ᆫ"
+ ],
+ "ㄵ": [
+ "ᆬ"
+ ],
+ "ㄶ": [
+ "ᆭ"
+ ],
+ "ㄷ": [
+ "ᄃ",
+ "ᆮ"
+ ],
+ "ㄸ": [
+ "ᄄ"
+ ],
+ "ㄹ": [
+ "ᄅ",
+ "ᆯ"
+ ],
+ "ㄺ": [
+ "ᆰ"
+ ],
+ "ㄻ": [
+ "ᆱ"
+ ],
+ "ㄼ": [
+ "ᆲ"
+ ],
+ "ㄽ": [
+ "ᆳ"
+ ],
+ "ㄾ": [
+ "ᆴ"
+ ],
+ "ㄿ": [
+ "ᆵ"
+ ],
+ "ㅀ": [
+ "ᆶ"
+ ],
+ "ㅁ": [
+ "ᄆ",
+ "ᆷ"
+ ],
+ "ㅂ": [
+ "ᄇ",
+ "ᆸ"
+ ],
+ "ㅃ": [
+ "ᄈ"
+ ],
+ "ㅄ": [
+ "ᆹ"
+ ],
+ "ㅅ": [
+ "ᄉ",
+ "ᆺ"
+ ],
+ "ㅆ": [
+ "ᄊ",
+ "ᆻ"
+ ],
+ "ㅇ": [
+ "ᄋ",
+ "ᆼ"
+ ],
+ "ㅈ": [
+ "ᄌ",
+ "ᆽ"
+ ],
+ "ㅉ": [
+ "ᄍ"
+ ],
+ "ㅊ": [
+ "ᄎ",
+ "ᆾ"
+ ],
+ "ㅋ": [
+ "ᄏ",
+ "ᆿ"
+ ],
+ "ㅌ": [
+ "ᄐ",
+ "ᇀ"
+ ],
+ "ㅍ": [
+ "ᄑ",
+ "ᇁ"
+ ],
+ "ㅎ": [
+ "ᄒ",
+ "ᇂ"
+ ],
+ "ㅏ": [
+ "ᅡ"
+ ],
+ "ㅐ": [
+ "ᅢ"
+ ],
+ "ㅑ": [
+ "ᅣ"
+ ],
+ "ㅓ": [
+ "ᅥ"
+ ],
+ "ㅔ": [
+ "ᅦ"
+ ],
+ "ㅕ": [
+ "ᅧ"
+ ],
+ "ㅖ": [
+ "ᅨ"
+ ],
+ "ㅗ": [
+ "ᅩ"
+ ],
+ "ㅘ": [
+ "ᅪ"
+ ],
+ "ㅙ": [
+ "ᅫ"
+ ],
+ "ㅚ": [
+ "ᅬ"
+ ],
+ "ㅛ": [
+ "ᅭ"
+ ],
+ "ㅜ": [
+ "ᅮ"
+ ],
+ "ㅝ": [
+ "ᅯ"
+ ],
+ "ㅞ": [
+ "ᅰ"
+ ],
+ "ㅟ": [
+ "ᅱ"
+ ],
+ "ㅠ": [
+ "ᅲ"
+ ],
+ "ㅡ": [
+ "ᅳ"
+ ],
+ "ㅢ": [
+ "ᅴ"
+ ],
+ "ㅣ": [
+ "ᅵ"
+ ]
},
"physical_key_map": {
- "KeyQ": "ㅂ", "KeyW": "ㅈ", "KeyE": "ㄷ", "KeyR": "ㄱ", "KeyT": "ㅅ",
- "KeyY": "ㅛ", "KeyU": "ㅕ", "KeyI": "ㅑ", "KeyO": "ㅐ", "KeyP": "ㅔ",
- "KeyA": "ㅁ", "KeyS": "ㄴ", "KeyD": "ㅇ", "KeyF": "ㄹ", "KeyG": "ㅎ",
- "KeyH": "ㅗ", "KeyJ": "ㅓ", "KeyK": "ㅏ", "KeyL": "ㅣ",
- "KeyZ": "ㅋ", "KeyX": "ㅌ", "KeyC": "ㅊ", "KeyV": "ㅍ",
- "KeyB": "ㅠ", "KeyN": "ㅜ", "KeyM": "ㅡ",
- "ShiftKeyQ": "ㅃ", "ShiftKeyW": "ㅉ", "ShiftKeyE": "ㄸ",
- "ShiftKeyR": "ㄲ", "ShiftKeyT": "ㅆ",
- "ShiftKeyO": "ㅒ", "ShiftKeyP": "ㅖ"
+ "KeyQ": "ㅂ",
+ "KeyW": "ㅈ",
+ "KeyE": "ㄷ",
+ "KeyR": "ㄱ",
+ "KeyT": "ㅅ",
+ "KeyY": "ㅛ",
+ "KeyU": "ㅕ",
+ "KeyI": "ㅑ",
+ "KeyO": "ㅐ",
+ "KeyP": "ㅔ",
+ "KeyA": "ㅁ",
+ "KeyS": "ㄴ",
+ "KeyD": "ㅇ",
+ "KeyF": "ㄹ",
+ "KeyG": "ㅎ",
+ "KeyH": "ㅗ",
+ "KeyJ": "ㅓ",
+ "KeyK": "ㅏ",
+ "KeyL": "ㅣ",
+ "KeyZ": "ㅋ",
+ "KeyX": "ㅌ",
+ "KeyC": "ㅊ",
+ "KeyV": "ㅍ",
+ "KeyB": "ㅠ",
+ "KeyN": "ㅜ",
+ "KeyM": "ㅡ",
+ "ShiftKeyQ": "ㅃ",
+ "ShiftKeyW": "ㅉ",
+ "ShiftKeyE": "ㄸ",
+ "ShiftKeyR": "ㄲ",
+ "ShiftKeyT": "ㅆ",
+ "ShiftKeyO": "ㅒ",
+ "ShiftKeyP": "ㅖ"
},
"help": {
- "title": "게임 방법 ",
- "title_2": "예 ",
- "close": "이 메시지를 닫습니다 ",
- "text_1_1_1": "추측하다 ",
- "text_1_1_2": "6 시도 이내에 ",
- "text_1_2": "각 추측은 유효한 5 글자 단어 여야합니다. Enter 버튼을 눌러 추측을 제출하십시오. ",
- "text_1_3": "추측 한 후, 타일은 색상이 정확하거나 거의 정확한지를 나타내는 색상을 변경합니다. ",
- "text_2_1": "단어에 있고 올바른 위치에 있습니다! ",
- "text_2_2": "단어에 있지만 올바른 위치에 없습니다. ",
- "text_2_3": "당신이 추측하려는 단어에는 존재하지 않습니다. ",
- "text_3": "매일 새로운 단어를 사용할 수 있습니다! "
+ "title": "게임 방법",
+ "title_2": "예",
+ "close": "이 메시지를 닫습니다",
+ "text_1_1_1": "추측하다",
+ "text_1_1_2": "6 시도 이내에",
+ "text_1_2": "각 추측은 유효한 5 글자 단어 여야합니다. Enter 버튼을 눌러 추측을 제출하십시오.",
+ "text_1_3": "추측 한 후, 타일은 색상이 정확하거나 거의 정확한지를 나타내는 색상을 변경합니다.",
+ "text_2_1": "단어에 있고 올바른 위치에 있습니다!",
+ "text_2_2": "단어에 있지만 올바른 위치에 없습니다.",
+ "text_2_3": "당신이 추측하려는 단어에는 존재하지 않습니다.",
+ "text_3": "매일 새로운 단어를 사용할 수 있습니다!"
+ },
+ "ui": {
+ "settings": "설정",
+ "dark_mode": "다크 모드",
+ "dark_mode_desc": "다크 테마 전환",
+ "sound_and_haptics": "소리 및 진동",
+ "difficulty": "난이도",
+ "word_info": "단어 정보",
+ "word_info_desc": "게임 후 뜻 및 AI 그림",
+ "language": "언어",
+ "change_language": "언어 변경",
+ "better_than": "상위",
+ "of_players": "플레이어 중",
+ "right_to_left": "오른쪽에서 왼쪽",
+ "keyboard_layout": "키보드 레이아웃",
+ "install_app": "앱 설치",
+ "install_app_desc": "오프라인 플레이 및 앱 아이콘",
+ "report_issue": "문제 신고",
+ "view_source": "소스 코드 보기",
+ "guess_distribution": "추측 분포",
+ "games": "게임",
+ "win_percent": "승률 %",
+ "streak": "연속",
+ "best": "최고",
+ "all_languages": "모든 언어",
+ "languages": "언어",
+ "play_more_languages": "더 많은 언어를 플레이하여 글로벌 통계를 확인하세요!",
+ "add_to_home": "홈 화면에 추가",
+ "play_daily_like_app": "앱처럼 매일 Wordle 플레이",
+ "install": "설치",
+ "close": "닫기",
+ "about": "소개",
+ "global_stats": "글로벌 통계",
+ "games_played": "플레이한 게임",
+ "win_rate": "승률",
+ "current_streak": "현재 연속",
+ "languages_won": "우승 언어",
+ "best_overall_streak": "최고 전체 연속",
+ "best_active_streak": "최고 활성 연속",
+ "your_languages": "내 언어",
+ "no_games_yet": "아직 플레이한 게임이 없습니다. 언어를 선택하여 시작하세요!",
+ "wins": "승리",
+ "losses": "패배",
+ "avg_attempts": "평균 시도",
+ "best_streak": "최고 연속",
+ "play": "플레이",
+ "search_language": "언어 검색...",
+ "external_links": "외부 링크",
+ "coming_soon": "곧 출시됩니다!",
+ "game": "게임",
+ "games_lowercase": "게임",
+ "definition": "정의",
+ "look_up_on_wiktionary": "위키낱말사전에서 찾기",
+ "easy": "쉬움",
+ "normal": "보통",
+ "hard": "어려움",
+ "easy_desc": "사전에 없는 단어도 허용",
+ "normal_desc": "사전에 있는 유효한 단어만 허용",
+ "hard_desc": "밝혀진 힌트를 다음 추측에 반드시 사용",
+ "high_contrast": "고대비",
+ "high_contrast_desc": "색각 이상 친화적 색상",
+ "today": "오늘",
+ "statistics": "통계",
+ "todays_word_reveal": "오늘의 단어 — 플레이하면 공개!",
+ "play_now": "지금 플레이",
+ "future_word": "이 단어는 아직 사용되지 않았습니다. 나중에 다시 오세요!",
+ "community_stats": "커뮤니티 통계",
+ "players": "플레이어",
+ "plays": "플레이",
+ "win": "승리",
+ "first_to_play": "오늘 첫 번째 플레이어!",
+ "top_score": "오늘 최고 점수!",
+ "all_words": "모든 단어",
+ "daily_words_counting": "일일 단어 수",
+ "newer": "최신",
+ "older": "이전",
+ "page_of": "{page} / {total} 페이지",
+ "report_bad_word": "부적절한 단어 신고",
+ "view_all_words": "모든 {lang} 단어 보기",
+ "difficulty_locked": "추측 후에는 난이도를 변경할 수 없습니다"
}
}
diff --git a/data/languages/la/language_config.json b/data/languages/la/language_config.json
index 00b28600..fb2a7795 100644
--- a/data/languages/la/language_config.json
+++ b/data/languages/la/language_config.json
@@ -5,47 +5,46 @@
"meta": {
"locale": "la",
"title": "Ludus Verborum Cotidianus",
- "description": "Coniecto occultatum Verbum in VI conatur (vel minus). A Puzzle est available per dies? ",
+ "description": "Coniecto occultatum Verbum in VI conatur (vel minus). A Puzzle est available per dies?",
"keywords": "latine, puzzle, verbum, ludere, ludum, online, coniecto, cotidie"
},
"text": {
"subheader": "latine",
- "next_word": "Next verbum ",
- "no_attempts": "Vos autem non temptavit aliqua verba adhuc! ",
+ "next_word": "Next verbum",
+ "no_attempts": "Vos autem non temptavit aliqua verba adhuc!",
"share": "Communica",
- "notification-copied": "Copied ad clipboard ",
- "notification-partial-word": "Please enter plenus verbum ",
"share_challenge_win": "Wordle hodiernum {n} conatibus solvi. Potesne me superare?",
- "share_challenge_lose": "Wordle hodiernum solvere non potui. Potesne tu?"
+ "share_challenge_lose": "Wordle hodiernum solvere non potui. Potesne tu?",
+ "notification_copied": "Copied ad clipboard",
+ "notification_partial_word": "Please enter plenus verbum",
+ "shared": "Communicatum!",
+ "copied": "Exscriptum!",
+ "notification_word_not_valid": "Verbum non est validum",
+ "hard_mode_position": "Modus difficilis: {letter} debet esse in positione {position}",
+ "hard_mode_contains": "Modus difficilis: coniectio debet continere {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Quomodo ludere ",
- "title_2": "Exempla ",
- "close": "Claudere nuntium ",
- "text_1_1_1": "Coniecto ",
- "text_1_1_2": "sex tries minusve. ",
- "text_1_2": "Quisque coniectura debet esse validum quinque littera est. Torcular in Intra ipsum submittere vestri coniecto. ",
- "text_1_3": "Post vos coniecto, in tegulis erit mutare color ad indicant quod litteris tui Verbum sunt rectam vel fere bene. ",
- "text_2_1": "in Verbo et in rectam locum! ",
- "text_2_2": "in Verbo, sed non in rectam locum. ",
- "text_2_3": "non est praesens in verbo vos es trying ut coniecto. ",
- "text_3": "Novum verbum erit praesto per dies? "
+ "title": "Quomodo ludere",
+ "title_2": "Exempla",
+ "close": "Claudere nuntium",
+ "text_1_1_1": "Coniecto",
+ "text_1_1_2": "sex tries minusve.",
+ "text_1_2": "Quisque coniectura debet esse validum quinque littera est. Torcular in Intra ipsum submittere vestri coniecto.",
+ "text_1_3": "Post vos coniecto, in tegulis erit mutare color ad indicant quod litteris tui Verbum sunt rectam vel fere bene.",
+ "text_2_1": "in Verbo et in rectam locum!",
+ "text_2_2": "in Verbo, sed non in rectam locum.",
+ "text_2_3": "non est praesens in verbo vos es trying ut coniecto.",
+ "text_3": "Novum verbum erit praesto per dies?"
},
"ui": {
"settings": "Optiones",
"dark_mode": "Modus obscurus",
"dark_mode_desc": "Muta thema obscurum",
- "haptic_feedback": "Responsum hapticum",
- "haptic_feedback_desc": "Vibratio ad tactum",
- "sound_effects": "Effectus sonori",
- "sound_effects_desc": "Soni victoriae/cladis",
"right_to_left": "Dextra ad sinistram",
"keyboard_layout": "Dispositio clavium",
- "easy_mode": "Permitte quodlibet verbum",
- "easy_mode_label": "modus facilis",
"install_app": "Installa applicationem",
"install_app_desc": "Lude sine rete et accipe iconem",
"report_issue": "Refer problema",
@@ -61,6 +60,63 @@
"add_to_home": "Adde ad tabulam initialem",
"play_daily_like_app": "Lude Wordle cotidie sicut applicationem",
"install": "Installa",
- "close": "claude"
+ "close": "claude",
+ "sound_and_haptics": "Sonus et tactus",
+ "difficulty": "Difficultas",
+ "word_info": "Informationes verbi",
+ "word_info_desc": "Definitio et ars AI post ludum",
+ "language": "Lingua",
+ "change_language": "Muta linguam",
+ "better_than": "Melior quam",
+ "of_players": "lusorum",
+ "about": "De hoc ludo",
+ "global_stats": "Statisticae globales",
+ "games_played": "Ludi acti",
+ "win_rate": "Ratio victoriae",
+ "current_streak": "Series currens",
+ "languages_won": "Linguae victae",
+ "best_overall_streak": "Optima series totalis",
+ "best_active_streak": "Optima series activa",
+ "your_languages": "Linguae tuae",
+ "no_games_yet": "Nondum ludum egisti. Elige linguam ut incipias!",
+ "wins": "Victoriae",
+ "losses": "Clades",
+ "avg_attempts": "Mediocris conatuum",
+ "best_streak": "Optima series",
+ "play": "Lude",
+ "search_language": "Quaere linguam...",
+ "external_links": "Nexus externi",
+ "coming_soon": "mox veniet!",
+ "game": "ludus",
+ "games_lowercase": "ludi",
+ "definition": "Definitio",
+ "look_up_on_wiktionary": "Quaere in Vicitionario",
+ "easy": "Facilis",
+ "normal": "Normalis",
+ "hard": "Difficilis",
+ "easy_desc": "Quodlibet verbum acceptum, etiam si non in dictionario",
+ "normal_desc": "Coniecturae debent esse verba valida ex dictionario",
+ "hard_desc": "Indicationes revelatas in sequentibus coniecturis uti oportet",
+ "high_contrast": "Altus contrastus",
+ "high_contrast_desc": "Colores pro caecitate colorum",
+ "today": "Hodie",
+ "statistics": "Statisticae",
+ "todays_word_reveal": "Verbum hodiernum — Lude ut reveles!",
+ "play_now": "Lude nunc",
+ "future_word": "Hoc verbum nondum lusum est. Redi postea!",
+ "community_stats": "Statisticae communitatis",
+ "players": "Lusores",
+ "plays": "lusus",
+ "win": "victoria",
+ "first_to_play": "Primus hodie ludens!",
+ "top_score": "Optimum punctum hodie!",
+ "all_words": "Omnia verba",
+ "daily_words_counting": "verba cotidie et crescentia",
+ "newer": "Recentiora",
+ "older": "Vetustiora",
+ "page_of": "Pagina {page} ex {total}",
+ "report_bad_word": "Refer verbum malum",
+ "view_all_words": "Vide omnia verba {lang}",
+ "difficulty_locked": "Difficultas mutari non potest post coniecturam"
}
}
diff --git a/data/languages/lb/language_config.json b/data/languages/lb/language_config.json
index 65ea55ec..a3554147 100644
--- a/data/languages/lb/language_config.json
+++ b/data/languages/lb/language_config.json
@@ -5,39 +5,124 @@
"name_native": "Lëtzebuergesch",
"meta": {
"locale": "lb",
- "title": "Dat alldeeglecht Wuert Spill ",
- "description": "Guess de verstoppte Wuert an 6 Versich (oder manner). En neie Puzzel ass all Dag verfügbar! ",
+ "title": "Dat alldeeglecht Wuert Spill",
+ "description": "Guess de verstoppte Wuert an 6 Versich (oder manner). En neie Puzzel ass all Dag verfügbar!",
"keywords": "Lëtzebuergesch, Puzzel, Wuert, spillt, Spill, online, fir deesdag"
},
"text": {
"subheader": "Lëtzebuergesch",
- "next_word": "Neit Wuert ",
- "no_attempts": "Dir hutt nach keng Wierder probéiert! ",
- "share": "Deelen ",
- "notification-copied": "Op Clipboard kopéiert ",
- "notification-partial-word": "Gitt w.e.g. eng voll Wuert un ",
+ "next_word": "Neit Wuert",
+ "no_attempts": "Dir hutt nach keng Wierder probéiert!",
+ "share": "Deelen",
"share_challenge_win": "Ech hunn den haitege Wordle an {n} Versich geschafft. Kanns du et besser?",
- "share_challenge_lose": "Ech hunn den haitege Wordle net geschafft. Kanns du?"
+ "share_challenge_lose": "Ech hunn den haitege Wordle net geschafft. Kanns du?",
+ "notification_copied": "Op Clipboard kopéiert",
+ "notification_partial_word": "Gitt w.e.g. eng voll Wuert un",
+ "shared": "Gedeelt!",
+ "copied": "Kopéiert!",
+ "notification_word_not_valid": "D'Wuert ass net gëlteg",
+ "hard_mode_position": "Schwéiere Modus: {letter} muss op Positioun {position} sinn",
+ "hard_mode_contains": "Schwéiere Modus: d'Rot muss {letter} enthalen"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Wéi ze spillen ",
- "title_2": "Beispiller ",
- "close": "Zoumaachen dëse Message ",
- "text_1_1_1": "Gén, de ",
- "text_1_1_2": "a sechs Versich oder manner. ",
- "text_1_2": "All Rotschléi muss e gültege fënnef Bréifwuert sinn. Dréckt op den Enter Knäppchen fir Är Rot ofzeginn. ",
- "text_1_3": "Nodeems Dir mengt, d'Fliesen ännert d'Faarf fir unzeginn wéi eng Bréiwer vun Ärem Wuert richteg oder bal korrekt sinn. ",
- "text_2_1": "ass am Wuert an an der richteger Plaz! ",
- "text_2_2": "ass am Wuert, awer net op der richteger Plaz. ",
- "text_2_3": "ass net am Wuert präsent wat Dir probéiert ze roden. ",
- "text_3": "En neit Wuert gëtt all Dag disponibel! "
+ "title": "Wéi ze spillen",
+ "title_2": "Beispiller",
+ "close": "Zoumaachen dëse Message",
+ "text_1_1_1": "Gén, de",
+ "text_1_1_2": "a sechs Versich oder manner.",
+ "text_1_2": "All Rotschléi muss e gültege fënnef Bréifwuert sinn. Dréckt op den Enter Knäppchen fir Är Rot ofzeginn.",
+ "text_1_3": "Nodeems Dir mengt, d'Fliesen ännert d'Faarf fir unzeginn wéi eng Bréiwer vun Ärem Wuert richteg oder bal korrekt sinn.",
+ "text_2_1": "ass am Wuert an an der richteger Plaz!",
+ "text_2_2": "ass am Wuert, awer net op der richteger Plaz.",
+ "text_2_3": "ass net am Wuert präsent wat Dir probéiert ze roden.",
+ "text_3": "En neit Wuert gëtt all Dag disponibel!"
},
"diacritic_map": {
"e": [
"é"
]
+ },
+ "ui": {
+ "settings": "Astellungen",
+ "dark_mode": "Donkele Modus",
+ "dark_mode_desc": "Donkelt Thema wiesselen",
+ "sound_and_haptics": "Toun & Vibratioun",
+ "difficulty": "Schwieregkeet",
+ "word_info": "Wuert Info",
+ "word_info_desc": "Definitioun & AI Bild nom Spill",
+ "language": "Sprooch",
+ "change_language": "Sprooch wiesselen",
+ "better_than": "Besser wéi",
+ "of_players": "vun de Spiller",
+ "right_to_left": "Riets op lénks",
+ "keyboard_layout": "Tastatur Layout",
+ "install_app": "App installéieren",
+ "install_app_desc": "Offline spillen & App-Ikon kréien",
+ "report_issue": "Problem mellen",
+ "view_source": "Quellcode kucken",
+ "guess_distribution": "Verdeelung vun de Roten",
+ "games": "Spiller",
+ "win_percent": "Gewonne %",
+ "streak": "Serie",
+ "best": "Beschten",
+ "all_languages": "All Sproochen",
+ "languages": "Sproochen",
+ "play_more_languages": "Spill méi Sproochen fir global Statistiken ze gesinn!",
+ "add_to_home": "Op Haaptbildschierm derbäisetzen",
+ "play_daily_like_app": "Wordle all Dag spillen wéi eng App",
+ "install": "Installéieren",
+ "close": "zoumaachen",
+ "about": "Iwwer",
+ "global_stats": "Global Statistiken",
+ "games_played": "Gespillte Spiller",
+ "win_rate": "Gewonnquot",
+ "current_streak": "Aktuell Serie",
+ "languages_won": "Sproochen gewonnen",
+ "best_overall_streak": "Bescht Gesamt-Serie",
+ "best_active_streak": "Bescht aktiv Serie",
+ "your_languages": "Deng Sproochen",
+ "no_games_yet": "Dir hutt nach keng Spiller gespillt. Wielt eng Sprooch fir unzefänken!",
+ "wins": "Gewonnen",
+ "losses": "Verluer",
+ "avg_attempts": "Duerchschn. Versich",
+ "best_streak": "Bescht Serie",
+ "play": "Spillen",
+ "search_language": "Sprooch sichen...",
+ "external_links": "Extern Linken",
+ "coming_soon": "kënnt geschwënn!",
+ "game": "Spill",
+ "games_lowercase": "Spiller",
+ "definition": "Definitioun",
+ "look_up_on_wiktionary": "Op Wiktionary nokucken",
+ "easy": "Einfach",
+ "normal": "Normal",
+ "hard": "Schwéier",
+ "easy_desc": "All Wuert akzeptéiert, och wann net am Wierderbuch",
+ "normal_desc": "Roten musse valabel Wierder aus dem Wierderbuch sinn",
+ "hard_desc": "Entdeckt Hiweiser musse bei nächste Roten benotzt ginn",
+ "high_contrast": "Héije Kontrast",
+ "high_contrast_desc": "Faarweblandheetsfréndlech Faarwen",
+ "today": "Haut",
+ "statistics": "Statistiken",
+ "todays_word_reveal": "D'Wuert vun haut — Spillt fir et ze entdecken!",
+ "play_now": "Elo spillen",
+ "future_word": "Dëst Wuert ass nach net gespillt ginn. Kommt méi spéit zréck!",
+ "community_stats": "Communautéit Statistiken",
+ "players": "Spiller",
+ "plays": "Spiller",
+ "win": "Gewonnen",
+ "first_to_play": "Éischten haut ze spillen!",
+ "top_score": "Top Score haut!",
+ "all_words": "All Wierder",
+ "daily_words_counting": "deeglech Wierder an nach méi",
+ "newer": "Méi nei",
+ "older": "Méi al",
+ "page_of": "Säit {page} vun {total}",
+ "report_bad_word": "Schlecht Wuert mellen",
+ "view_all_words": "All {lang} Wierder kucken",
+ "difficulty_locked": "Schwieregkeet kann nom Roden net geännert ginn"
}
}
diff --git a/data/languages/lt/language_config.json b/data/languages/lt/language_config.json
index c494c260..d4d04531 100644
--- a/data/languages/lt/language_config.json
+++ b/data/languages/lt/language_config.json
@@ -6,33 +6,118 @@
"meta": {
"locale": "lt",
"title": "Kasdieninis žodžių žaidimas",
- "description": "Atspėti paslėptą žodį 6 bandymuose (ar mažiau). Kiekvieną dieną galima įsigyti naują galvosūkį! ",
+ "description": "Atspėti paslėptą žodį 6 bandymuose (ar mažiau). Kiekvieną dieną galima įsigyti naują galvosūkį!",
"keywords": "lietuvių kalba, dėlionės, žodis, žaidimas, žaidimas, internete, atspėti, kasdien"
},
"text": {
"subheader": "lietuvių kalba",
- "next_word": "Kitas žodis ",
- "no_attempts": "Jūs dar nebandėte jokių žodžių! ",
- "share": "Dalintis ",
- "notification-copied": "Nukopijuotas į iškarpinę ",
- "notification-partial-word": "Įveskite visą žodį ",
+ "next_word": "Kitas žodis",
+ "no_attempts": "Jūs dar nebandėte jokių žodžių!",
+ "share": "Dalintis",
"share_challenge_win": "Šiandienos Wordle išsprendžiau per {n} bandymus. Ar gali geriau?",
- "share_challenge_lose": "Neišsprendžiau šiandienos Wordle. Ar tu gali?"
+ "share_challenge_lose": "Neišsprendžiau šiandienos Wordle. Ar tu gali?",
+ "notification_copied": "Nukopijuotas į iškarpinę",
+ "notification_partial_word": "Įveskite visą žodį",
+ "shared": "Pasidalinta!",
+ "copied": "Nukopijuota!",
+ "notification_word_not_valid": "Žodis negalioja",
+ "hard_mode_position": "Sunkus režimas: {letter} turi būti {position} pozicijoje",
+ "hard_mode_contains": "Sunkus režimas: spėjime turi būti raidė {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Kaip žaisti ",
- "title_2": "Pavyzdžiai. \\ T ",
- "close": "Uždarykite šį pranešimą ",
- "text_1_1_1": "Atspėkite ",
- "text_1_1_2": "šešiose bandose ar mažiau. ",
- "text_1_2": "Kiekvienas atspėjimas turi būti galiojantis penkių raidžių žodis. Paspauskite ENTER mygtuką, jei norite pateikti savo spėjimą. ",
- "text_1_3": "Po to, kai atspėjote, plytelės pakeis spalvą, kad nurodytų, kurios jūsų žodžio laiškai yra teisingi arba beveik teisingi. ",
- "text_2_1": "yra žodyje ir teisingoje vietoje! ",
- "text_2_2": "yra žodyje, bet ne teisingoje vietoje. ",
- "text_2_3": "nėra žodžio, kurį bandote atspėti. ",
- "text_3": "Kiekvieną dieną bus prieinamas naujas žodis! "
+ "title": "Kaip žaisti",
+ "title_2": "Pavyzdžiai. \\ T",
+ "close": "Uždarykite šį pranešimą",
+ "text_1_1_1": "Atspėkite",
+ "text_1_1_2": "šešiose bandose ar mažiau.",
+ "text_1_2": "Kiekvienas atspėjimas turi būti galiojantis penkių raidžių žodis. Paspauskite ENTER mygtuką, jei norite pateikti savo spėjimą.",
+ "text_1_3": "Po to, kai atspėjote, plytelės pakeis spalvą, kad nurodytų, kurios jūsų žodžio laiškai yra teisingi arba beveik teisingi.",
+ "text_2_1": "yra žodyje ir teisingoje vietoje!",
+ "text_2_2": "yra žodyje, bet ne teisingoje vietoje.",
+ "text_2_3": "nėra žodžio, kurį bandote atspėti.",
+ "text_3": "Kiekvieną dieną bus prieinamas naujas žodis!"
+ },
+ "ui": {
+ "settings": "Nustatymai",
+ "dark_mode": "Tamsusis režimas",
+ "dark_mode_desc": "Perjungti tamsią temą",
+ "sound_and_haptics": "Garsas ir vibracija",
+ "difficulty": "Sudėtingumas",
+ "word_info": "Žodžio informacija",
+ "word_info_desc": "Apibrėžimas ir AI menas po žaidimo",
+ "language": "Kalba",
+ "change_language": "Keisti kalbą",
+ "better_than": "Geriau nei",
+ "of_players": "žaidėjų",
+ "right_to_left": "Iš dešinės į kairę",
+ "keyboard_layout": "Klaviatūros išdėstymas",
+ "install_app": "Įdiegti programėlę",
+ "install_app_desc": "Žaiskite neprisijungę ir gaukite piktogramą",
+ "report_issue": "Pranešti apie problemą",
+ "view_source": "Peržiūrėti šaltinio kodą",
+ "guess_distribution": "Spėjimų pasiskirstymas",
+ "games": "Žaidimai",
+ "win_percent": "Laimėjimų %",
+ "streak": "Serija",
+ "best": "Geriausias",
+ "all_languages": "Visos kalbos",
+ "languages": "Kalbos",
+ "play_more_languages": "Žaiskite daugiau kalbų, kad pamatytumėte bendrą statistiką!",
+ "add_to_home": "Pridėti prie pradžios ekrano",
+ "play_daily_like_app": "Žaiskite Wordle kasdien kaip programėlę",
+ "install": "Įdiegti",
+ "close": "uždaryti",
+ "about": "Apie",
+ "global_stats": "Bendra statistika",
+ "games_played": "Sužaista žaidimų",
+ "win_rate": "Laimėjimų rodiklis",
+ "current_streak": "Dabartinė serija",
+ "languages_won": "Laimėtos kalbos",
+ "best_overall_streak": "Geriausia bendra serija",
+ "best_active_streak": "Geriausia aktyvi serija",
+ "your_languages": "Jūsų kalbos",
+ "no_games_yet": "Dar nežaidėte. Pasirinkite kalbą ir pradėkite!",
+ "wins": "Pergalės",
+ "losses": "Pralaimėjimai",
+ "avg_attempts": "Vid. bandymų",
+ "best_streak": "Geriausia serija",
+ "play": "Žaisti",
+ "search_language": "Ieškoti kalbos...",
+ "external_links": "Išorinės nuorodos",
+ "coming_soon": "netrukus!",
+ "game": "žaidimas",
+ "games_lowercase": "žaidimai",
+ "definition": "Apibrėžimas",
+ "look_up_on_wiktionary": "Ieškoti Vikižodyne",
+ "easy": "Lengva",
+ "normal": "Normalu",
+ "hard": "Sunku",
+ "easy_desc": "Priimamas bet koks žodis, net jei nėra žodyne",
+ "normal_desc": "Spėjimai turi būti teisingi žodžiai iš žodyno",
+ "hard_desc": "Atskleistos užuominos turi būti naudojamos tolesniuose spėjimuose",
+ "high_contrast": "Didelis kontrastas",
+ "high_contrast_desc": "Spalvų aklumui draugiškos spalvos",
+ "today": "Šiandien",
+ "statistics": "Statistika",
+ "todays_word_reveal": "Šiandienos žodis — Žaiskite, kad sužinotumėte!",
+ "play_now": "Žaisti dabar",
+ "future_word": "Šis žodis dar nebuvo žaistas. Grįžkite vėliau!",
+ "community_stats": "Bendruomenės statistika",
+ "players": "Žaidėjai",
+ "plays": "žaidimai",
+ "win": "pergalė",
+ "first_to_play": "Pirmasis šiandien!",
+ "top_score": "Geriausias rezultatas šiandien!",
+ "all_words": "Visi žodžiai",
+ "daily_words_counting": "kasdienių žodžių ir daugėja",
+ "newer": "Naujesni",
+ "older": "Senesni",
+ "page_of": "Puslapis {page} iš {total}",
+ "report_bad_word": "Pranešti apie blogą žodį",
+ "view_all_words": "Peržiūrėti visus {lang} žodžius",
+ "difficulty_locked": "Sudėtingumo negalima keisti po spėjimo"
}
}
diff --git a/data/languages/ltg/language_config.json b/data/languages/ltg/language_config.json
index 5ef93c5d..25b5f228 100644
--- a/data/languages/ltg/language_config.json
+++ b/data/languages/ltg/language_config.json
@@ -11,13 +11,18 @@
},
"text": {
"subheader": "latgaliski",
- "next_word": "Next word ",
- "no_attempts": "You haven't tried any words yet! ",
+ "next_word": "Next word",
+ "no_attempts": "You haven't tried any words yet!",
"share": "Daleit",
- "notification-copied": "Copied to clipboard ",
- "notification-partial-word": "Please enter a full word ",
"share_challenge_win": "Šudienis Wordle atminēju ar {n} mēginojumim. Voi tu lobōk?",
- "share_challenge_lose": "Šudienis Wordle naatminēju. Voi tu?"
+ "share_challenge_lose": "Šudienis Wordle naatminēju. Voi tu?",
+ "notification_copied": "Copied to clipboard",
+ "notification_partial_word": "Please enter a full word",
+ "shared": "Daleits!",
+ "copied": "Nūkopēts!",
+ "notification_word_not_valid": "Vuords nav derīgs",
+ "hard_mode_position": "Grūtais režyms: {letter} juobyut {position} pozicijā",
+ "hard_mode_contains": "Grūtais režyms: minējumā juobyut {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
@@ -34,5 +39,85 @@
"text_2_2": "is in the word, but not in the correct location.",
"text_2_3": "is not present in the word you are trying to guess.",
"text_3": "A new word will be available each day!"
+ },
+ "ui": {
+ "settings": "Īstatiejumi",
+ "dark_mode": "Tumšais režyms",
+ "dark_mode_desc": "Puorslygt tumšū temu",
+ "sound_and_haptics": "Skons i vibracija",
+ "difficulty": "Grūteiba",
+ "word_info": "Vuorda info",
+ "word_info_desc": "Nūzeime i AI attāls piec spēles",
+ "language": "Volūda",
+ "change_language": "Maineit volūdu",
+ "better_than": "Lobōk par",
+ "of_players": "nu spēlātuojim",
+ "right_to_left": "Nu loba iz kreisu",
+ "keyboard_layout": "Klaviaturas izkuortūjums",
+ "install_app": "Instalēt programu",
+ "install_app_desc": "Spēlej bez tīkla i dabuoj ikonu",
+ "report_issue": "Ziņuot par problemu",
+ "view_source": "Apsavērt pyrmkodu",
+ "guess_distribution": "Minējumu sadalejums",
+ "games": "Spēles",
+ "win_percent": "Uzvaras %",
+ "streak": "Sērija",
+ "best": "Lobōkais",
+ "all_languages": "Vysas volūdas",
+ "languages": "Volūdas",
+ "play_more_languages": "Spēlej vaira volūdōs, kab radzētu kūpeigū statistiku!",
+ "add_to_home": "Pīvīnuot suoku ekranam",
+ "play_daily_like_app": "Spēlej Wordle katru dīnu kai programu",
+ "install": "Instalēt",
+ "close": "aiztaiseit",
+ "about": "Par",
+ "global_stats": "Kūpeiguo statistika",
+ "games_played": "Izspēlātas spēles",
+ "win_rate": "Uzvaru īpatsvors",
+ "current_streak": "Pošreizejuo sērija",
+ "languages_won": "Uzvaratōs volūdōs",
+ "best_overall_streak": "Lobōkuo kūpeiguo sērija",
+ "best_active_streak": "Lobōkuo aktivuo sērija",
+ "your_languages": "Tovys volūdas",
+ "no_games_yet": "Vēļ naviena spēle naizspēlāta. Izmalej volūdu, kab suoktu!",
+ "wins": "Uzvaras",
+ "losses": "Zuodējumi",
+ "avg_attempts": "Vid. mēginōjumu",
+ "best_streak": "Lobōkuo sērija",
+ "play": "Spēlēt",
+ "search_language": "Meklēt volūdu...",
+ "external_links": "Uorejōs nūruodis",
+ "coming_soon": "dreiži byus!",
+ "game": "spēle",
+ "games_lowercase": "spēles",
+ "definition": "Nūzeime",
+ "look_up_on_wiktionary": "Meklēt Vikivuordineicā",
+ "easy": "Vīgli",
+ "normal": "Normali",
+ "hard": "Grūti",
+ "easy_desc": "Apsatverams jebkurs vuords, pat na vuordineicys",
+ "normal_desc": "Minējumim juobyut derigim vuordim nu vuordineicys",
+ "hard_desc": "Atsagtōs pīzeimis juoizmontoj tuoļōkōs minējumūs",
+ "high_contrast": "Augsts kontrasts",
+ "high_contrast_desc": "Kruosu aklumam draudzeigas kruosas",
+ "today": "Šudiņ",
+ "statistics": "Statistika",
+ "todays_word_reveal": "Šudienis vuords — Spēlej, kab atsagtu!",
+ "play_now": "Spēlēt tagad",
+ "future_word": "Itys vuords vēļ nav izspēlāts. Atsagrīzīs vēļōk!",
+ "community_stats": "Kūpīnis statistika",
+ "players": "Spēlātuoji",
+ "plays": "spēles",
+ "win": "uzvara",
+ "first_to_play": "Pyrmais šudiņ spēlēt!",
+ "top_score": "Lobōkais rezuļtats šudiņ!",
+ "all_words": "Vysi vuordi",
+ "daily_words_counting": "ikdīnys vuordi i vaira",
+ "newer": "Jaunōki",
+ "older": "Vacōki",
+ "page_of": "Lopa {page} nu {total}",
+ "report_bad_word": "Ziņuot par slyktu vuordu",
+ "view_all_words": "Apsavērt vysus {lang} vuordus",
+ "difficulty_locked": "Grūteibu navar maineit piec minējuma"
}
}
diff --git a/data/languages/lv/language_config.json b/data/languages/lv/language_config.json
index 4ff416ba..b5ce8d8f 100644
--- a/data/languages/lv/language_config.json
+++ b/data/languages/lv/language_config.json
@@ -5,48 +5,47 @@
"name_native": "latviešu valoda",
"meta": {
"locale": "lv",
- "title": "Ikdienas vārdu spēle ",
- "description": "Uzminiet slēpto vārdu 6 mēģinājumos (vai mazāk). Katru dienu ir pieejama jauna puzzle! ",
+ "title": "Ikdienas vārdu spēle",
+ "description": "Uzminiet slēpto vārdu 6 mēģinājumos (vai mazāk). Katru dienu ir pieejama jauna puzzle!",
"keywords": "latviešu valoda, puzzle, vārds, spēlēt, spēle, online, minējums, katru dienu"
},
"text": {
"subheader": "latviešu valoda",
- "next_word": "Nākamais vārds ",
- "no_attempts": "Jūs vēl neesat mēģinājis nevienu vārdu! ",
- "share": "Dalīties ",
- "notification-copied": "Kopēts starpliktuvē ",
- "notification-partial-word": "Lūdzu, ievadiet pilnu vārdu ",
+ "next_word": "Nākamais vārds",
+ "no_attempts": "Jūs vēl neesat mēģinājis nevienu vārdu!",
+ "share": "Dalīties",
"share_challenge_win": "Šodienas Wordle atrisināju {n} mēģinājumos. Vai tu vari labāk?",
- "share_challenge_lose": "Šodienas Wordle neatrisināju. Vai tu vari?"
+ "share_challenge_lose": "Šodienas Wordle neatrisināju. Vai tu vari?",
+ "notification_copied": "Kopēts starpliktuvē",
+ "notification_partial_word": "Lūdzu, ievadiet pilnu vārdu",
+ "shared": "Kopīgots!",
+ "copied": "Nokopēts!",
+ "notification_word_not_valid": "Vārds nav derīgs",
+ "hard_mode_position": "Grūtais režīms: {letter} jābūt pozīcijā {position}",
+ "hard_mode_contains": "Grūtais režīms: minējumā jābūt {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Kā spēlēt ",
- "title_2": "Piemēri ",
- "close": "Aizveriet šo ziņojumu ",
- "text_1_1_1": "Uzminēt ",
- "text_1_1_2": "sešās mēģinājumos vai mazāk. ",
- "text_1_2": "Katram minējumam jābūt derīgam piecu burtu vārdam. Nospiediet taustiņu ENTER, lai iesniegtu savu minējumu. ",
- "text_1_3": "Pēc tam, kad jūs uzminējāt, flīzes mainīs krāsu, lai norādītu, kuras burti ir pareizi vai gandrīz pareizi. ",
- "text_2_1": "ir vārdā un pareizajā vietā! ",
- "text_2_2": "ir vārdā, bet ne pareizajā vietā. ",
- "text_2_3": "nav klāt vārdu jūs mēģināt uzminēt. ",
- "text_3": "Katru dienu būs pieejams jauns vārds! "
+ "title": "Kā spēlēt",
+ "title_2": "Piemēri",
+ "close": "Aizveriet šo ziņojumu",
+ "text_1_1_1": "Uzminēt",
+ "text_1_1_2": "sešās mēģinājumos vai mazāk.",
+ "text_1_2": "Katram minējumam jābūt derīgam piecu burtu vārdam. Nospiediet taustiņu ENTER, lai iesniegtu savu minējumu.",
+ "text_1_3": "Pēc tam, kad jūs uzminējāt, flīzes mainīs krāsu, lai norādītu, kuras burti ir pareizi vai gandrīz pareizi.",
+ "text_2_1": "ir vārdā un pareizajā vietā!",
+ "text_2_2": "ir vārdā, bet ne pareizajā vietā.",
+ "text_2_3": "nav klāt vārdu jūs mēģināt uzminēt.",
+ "text_3": "Katru dienu būs pieejams jauns vārds!"
},
"ui": {
"settings": "Iestatījumi",
"dark_mode": "Tumšais režīms",
"dark_mode_desc": "Pārslēgt tumšo motīvu",
- "haptic_feedback": "Haptiskā atgriezeniskā saite",
- "haptic_feedback_desc": "Vibrācija pieskāriena laikā",
- "sound_effects": "Skaņas efekti",
- "sound_effects_desc": "Uzvaras/zaudējuma skaņas",
"right_to_left": "No labās uz kreiso",
"keyboard_layout": "Tastatūras izkārtojums",
- "easy_mode": "Atļaut jebkuru vārdu",
- "easy_mode_label": "vieglais režīms",
"install_app": "Instalēt lietotni",
"install_app_desc": "Spēlē bezsaistē un saņem ikonu",
"report_issue": "Ziņot par problēmu",
@@ -62,6 +61,63 @@
"add_to_home": "Pievienot sākuma ekrānam",
"play_daily_like_app": "Spēlē Wordle katru dienu kā lietotni",
"install": "Instalēt",
- "close": "aizvērt"
+ "close": "aizvērt",
+ "sound_and_haptics": "Skaņa un vibrācija",
+ "difficulty": "Grūtības pakāpe",
+ "word_info": "Vārda informācija",
+ "word_info_desc": "Definīcija un AI attēls pēc spēles",
+ "language": "Valoda",
+ "change_language": "Mainīt valodu",
+ "better_than": "Labāk nekā",
+ "of_players": "no spēlētājiem",
+ "about": "Par",
+ "global_stats": "Kopējā statistika",
+ "games_played": "Izspēlētas spēles",
+ "win_rate": "Uzvaru rādītājs",
+ "current_streak": "Pašreizējā sērija",
+ "languages_won": "Uzvarētas valodas",
+ "best_overall_streak": "Labākā kopējā sērija",
+ "best_active_streak": "Labākā aktīvā sērija",
+ "your_languages": "Tavas valodas",
+ "no_games_yet": "Tu vēl neesi spēlējis. Izvēlies valodu, lai sāktu!",
+ "wins": "Uzvaras",
+ "losses": "Zaudējumi",
+ "avg_attempts": "Vid. mēģinājumi",
+ "best_streak": "Labākā sērija",
+ "play": "Spēlēt",
+ "search_language": "Meklēt valodu...",
+ "external_links": "Ārējās saites",
+ "coming_soon": "drīzumā!",
+ "game": "spēle",
+ "games_lowercase": "spēles",
+ "definition": "Definīcija",
+ "look_up_on_wiktionary": "Meklēt Vikivārdnīcā",
+ "easy": "Viegli",
+ "normal": "Normāli",
+ "hard": "Grūti",
+ "easy_desc": "Jebkurš vārds tiek pieņemts, pat ja nav vārdnīcā",
+ "normal_desc": "Minējumiem jābūt derīgiem vārdiem no vārdnīcas",
+ "hard_desc": "Atklātie mājieni jāizmanto turpmākajos minējumos",
+ "high_contrast": "Augsts kontrasts",
+ "high_contrast_desc": "Krāsu aklumam draudzīgas krāsas",
+ "today": "Šodien",
+ "statistics": "Statistika",
+ "todays_word_reveal": "Šodienas vārds — Spēlē, lai atklātu!",
+ "play_now": "Spēlēt tagad",
+ "future_word": "Šis vārds vēl nav spēlēts. Atgriezies vēlāk!",
+ "community_stats": "Kopienas statistika",
+ "players": "Spēlētāji",
+ "plays": "spēles",
+ "win": "uzvara",
+ "first_to_play": "Pirmais šodien!",
+ "top_score": "Labākais rezultāts šodien!",
+ "all_words": "Visi vārdi",
+ "daily_words_counting": "ikdienas vārdi un vēl",
+ "newer": "Jaunāki",
+ "older": "Vecāki",
+ "page_of": "Lapa {page} no {total}",
+ "report_bad_word": "Ziņot par sliktu vārdu",
+ "view_all_words": "Skatīt visus {lang} vārdus",
+ "difficulty_locked": "Grūtību nevar mainīt pēc minējuma"
}
}
diff --git a/data/languages/mi/language_config.json b/data/languages/mi/language_config.json
index 3a17b585..cda8fb7c 100644
--- a/data/languages/mi/language_config.json
+++ b/data/languages/mi/language_config.json
@@ -17,11 +17,15 @@
"next_word": "Next word",
"no_attempts": "You haven't tried any words yet!",
"share": "Tohatoha",
- "notification-copied": "Copied to clipboard",
- "notification-word-not-valid": "Word is not valid",
- "notification-partial-word": "Please enter a full word",
"share_challenge_win": "I oti au te Wordle o tēnei rā i ngā ngana {n}. Ka taea e koe te hinga i ahau?",
- "share_challenge_lose": "Kāore au i te Wordle o tēnei rā. Ka taea e koe?"
+ "share_challenge_lose": "Kāore au i te Wordle o tēnei rā. Ka taea e koe?",
+ "notification_copied": "Copied to clipboard",
+ "notification_word_not_valid": "Word is not valid",
+ "notification_partial_word": "Please enter a full word",
+ "shared": "Kua tohatoha!",
+ "copied": "Kua tārua!",
+ "hard_mode_position": "Aratau uaua: me noho {letter} ki te tūranga {position}",
+ "hard_mode_contains": "Aratau uaua: me whai te matapaki i te {letter}"
},
"help": {
"title": "How to Play",
@@ -52,5 +56,85 @@
"u": [
"ū"
]
+ },
+ "ui": {
+ "settings": "Tautuhinga",
+ "dark_mode": "Aratau Pōuri",
+ "dark_mode_desc": "Hurihia te kaupapa pōuri",
+ "sound_and_haptics": "Oro me te ohotata",
+ "difficulty": "Taumaha",
+ "word_info": "Mōhiohio kupu",
+ "word_info_desc": "Whakamārama me te toi AI i muri i te kēmu",
+ "language": "Reo",
+ "change_language": "Hurihia te reo",
+ "better_than": "Pai ake i te",
+ "of_players": "o ngā kaitākaro",
+ "right_to_left": "Matau ki mauī",
+ "keyboard_layout": "Hanga papapātuhi",
+ "install_app": "Tāuta taupānga",
+ "install_app_desc": "Tākaro tuimotu me te tohu taupānga",
+ "report_issue": "Pūrongo take",
+ "view_source": "Tirohia te waehere pūtake",
+ "guess_distribution": "Tohatoha matapaki",
+ "games": "Kēmu",
+ "win_percent": "Toa %",
+ "streak": "Raupapa",
+ "best": "Pai rawa",
+ "all_languages": "Ngā reo katoa",
+ "languages": "Ngā reo",
+ "play_more_languages": "Tākaro atu anō ngā reo kia kite i ō tatauranga whānui!",
+ "add_to_home": "Tāpirihia ki te Mata Kāinga",
+ "play_daily_like_app": "Tākaro Wordle ia rā pēnei i te taupānga",
+ "install": "Tāuta",
+ "close": "katia",
+ "about": "Mō",
+ "global_stats": "Tatauranga Whānui",
+ "games_played": "Kēmu kua tākaro",
+ "win_rate": "Pāpātanga toa",
+ "current_streak": "Raupapa o nāianei",
+ "languages_won": "Reo kua toa",
+ "best_overall_streak": "Raupapa pai rawa whānui",
+ "best_active_streak": "Raupapa pai rawa hohe",
+ "your_languages": "Ō reo",
+ "no_games_yet": "Kāore anō koe kia tākaro. Kōwhiria he reo ki te tīmata!",
+ "wins": "Toa",
+ "losses": "Hinganga",
+ "avg_attempts": "Ngana toharite",
+ "best_streak": "Raupapa pai rawa",
+ "play": "Tākaro",
+ "search_language": "Rapua te reo...",
+ "external_links": "Hononga ā-waho",
+ "coming_soon": "kei te haere mai!",
+ "game": "kēmu",
+ "games_lowercase": "kēmu",
+ "definition": "Whakamārama",
+ "look_up_on_wiktionary": "Rapua i Wiktionary",
+ "easy": "Māmā",
+ "normal": "Noa",
+ "hard": "Uaua",
+ "easy_desc": "Ka whakaaetia ngā kupu katoa, ahakoa kāore i te papakupu",
+ "normal_desc": "Me kupu tika ngā matapaki mai i te papakupu",
+ "hard_desc": "Me whakamahi ngā tohutohu kua kitea i ngā matapaki e whai ake ana",
+ "high_contrast": "Taurereke nui",
+ "high_contrast_desc": "Tae hoa mō te kūare tae",
+ "today": "I tēnei rā",
+ "statistics": "Tatauranga",
+ "todays_word_reveal": "Te kupu o tēnei rā — Tākaro kia kite!",
+ "play_now": "Tākaro ināianei",
+ "future_word": "Kāore anō tēnei kupu kia tākaro. Hoki mai ā muri!",
+ "community_stats": "Tatauranga hapori",
+ "players": "Kaitākaro",
+ "plays": "tākaro",
+ "win": "toa",
+ "first_to_play": "Tuatahi ki te tākaro i tēnei rā!",
+ "top_score": "Kaute teitei i tēnei rā!",
+ "all_words": "Ngā kupu katoa",
+ "daily_words_counting": "kupu ia rā, ā, kei te piki tonu",
+ "newer": "Hou ake",
+ "older": "Tawhito ake",
+ "page_of": "Whārangi {page} o {total}",
+ "report_bad_word": "Pūrongo kupu kino",
+ "view_all_words": "Tirohia ngā kupu {lang} katoa",
+ "difficulty_locked": "Kāore e taea te huri i te taumaha i muri i te matapaki"
}
}
diff --git a/data/languages/mk/language_config.json b/data/languages/mk/language_config.json
index 441529fb..e7706878 100644
--- a/data/languages/mk/language_config.json
+++ b/data/languages/mk/language_config.json
@@ -6,48 +6,47 @@
"meta": {
"locale": "mk",
"wordle_native": "вордл",
- "title": "Дневниот збор игра ",
- "description": "Погоди го скриениот збор во 6 обиди (или помалку). Нова загатка е достапна секој ден! ",
+ "title": "Дневниот збор игра",
+ "description": "Погоди го скриениот збор во 6 обиди (или помалку). Нова загатка е достапна секој ден!",
"keywords": "македонски јазик, загатка, збор, игра, игра, онлајн, погоди, секојдневно"
},
"text": {
"subheader": "македонски јазик",
- "next_word": "Следен збор ",
- "no_attempts": "Сè уште не сте пробале никакви зборови! ",
- "share": "Сподели ",
- "notification-copied": "Копирани во таблата со исечоци ",
- "notification-partial-word": "Ве молиме внесете целосен збор ",
+ "next_word": "Следен збор",
+ "no_attempts": "Сè уште не сте пробале никакви зборови!",
+ "share": "Сподели",
"share_challenge_win": "Го решив денешниот Wordle за {n} обиди. Можеш ли подобро?",
- "share_challenge_lose": "Не го решив денешниот Wordle. Можеш ли ти?"
+ "share_challenge_lose": "Не го решив денешниот Wordle. Можеш ли ти?",
+ "notification_copied": "Копирани во таблата со исечоци",
+ "notification_partial_word": "Ве молиме внесете целосен збор",
+ "shared": "Споделено!",
+ "copied": "Копирано!",
+ "notification_word_not_valid": "Зборот не е валиден",
+ "hard_mode_position": "Тежок режим: {letter} мора да е на позиција {position}",
+ "hard_mode_contains": "Тежок режим: обидот мора да содржи {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Како да играш ",
- "title_2": "Примери ",
- "close": "Затворете ја оваа порака ",
- "text_1_1_1": "Погоди го ",
- "text_1_1_2": "во шест обиди или помалку. ",
- "text_1_2": "Секоја претпоставка мора да биде валиден збор со пет букви. Притиснете го копчето Enter за да ја поднесете вашата претпоставка. ",
- "text_1_3": "Откако ќе се погоди, плочките ќе ја променат бојата за да покажат кои букви од вашиот збор се точни или речиси точни. ",
- "text_2_1": "е во зборот и во точната локација! ",
- "text_2_2": "е во зборот, но не и на точната локација. ",
- "text_2_3": "не е присутен во зборот што се обидувате да го погодите. ",
- "text_3": "Нов збор ќе биде достапен секој ден! "
+ "title": "Како да играш",
+ "title_2": "Примери",
+ "close": "Затворете ја оваа порака",
+ "text_1_1_1": "Погоди го",
+ "text_1_1_2": "во шест обиди или помалку.",
+ "text_1_2": "Секоја претпоставка мора да биде валиден збор со пет букви. Притиснете го копчето Enter за да ја поднесете вашата претпоставка.",
+ "text_1_3": "Откако ќе се погоди, плочките ќе ја променат бојата за да покажат кои букви од вашиот збор се точни или речиси точни.",
+ "text_2_1": "е во зборот и во точната локација!",
+ "text_2_2": "е во зборот, но не и на точната локација.",
+ "text_2_3": "не е присутен во зборот што се обидувате да го погодите.",
+ "text_3": "Нов збор ќе биде достапен секој ден!"
},
"ui": {
"settings": "Поставки",
"dark_mode": "Темен режим",
"dark_mode_desc": "Вклучи темна тема",
- "haptic_feedback": "Хаптичка повратна информација",
- "haptic_feedback_desc": "Вибрација при допир",
- "sound_effects": "Звучни ефекти",
- "sound_effects_desc": "Звуци за победа/пораз",
"right_to_left": "Од десно кон лево",
"keyboard_layout": "Распоред на тастатура",
- "easy_mode": "Дозволи било кој збор",
- "easy_mode_label": "лесен режим",
"install_app": "Инсталирај апликација",
"install_app_desc": "Играј офлајн и добиј икона",
"report_issue": "Пријави проблем",
@@ -63,6 +62,63 @@
"add_to_home": "Додај на почетен екран",
"play_daily_like_app": "Играј Wordle секојдневно како апликација",
"install": "Инсталирај",
- "close": "затвори"
+ "close": "затвори",
+ "sound_and_haptics": "Звук и вибрации",
+ "difficulty": "Тежина",
+ "word_info": "Информации за зборот",
+ "word_info_desc": "Дефиниција и AI уметност по играта",
+ "language": "Јазик",
+ "change_language": "Промени јазик",
+ "better_than": "Подобро од",
+ "of_players": "од играчите",
+ "about": "За",
+ "global_stats": "Глобална статистика",
+ "games_played": "Одиграни игри",
+ "win_rate": "Процент на победи",
+ "current_streak": "Тековна низа",
+ "languages_won": "Освоени јазици",
+ "best_overall_streak": "Најдобра вкупна низа",
+ "best_active_streak": "Најдобра активна низа",
+ "your_languages": "Твои јазици",
+ "no_games_yet": "Сè уште немате одиграно. Изберете јазик за почеток!",
+ "wins": "Победи",
+ "losses": "Порази",
+ "avg_attempts": "Просечни обиди",
+ "best_streak": "Најдобра низа",
+ "play": "Играј",
+ "search_language": "Пребарај јазик...",
+ "external_links": "Надворешни линкови",
+ "coming_soon": "наскоро!",
+ "game": "игра",
+ "games_lowercase": "игри",
+ "definition": "Дефиниција",
+ "look_up_on_wiktionary": "Пребарај на Викиречник",
+ "easy": "Лесно",
+ "normal": "Нормално",
+ "hard": "Тешко",
+ "easy_desc": "Се прифаќа секој збор, дури и ако не е во речникот",
+ "normal_desc": "Обидите мора да бидат валидни зборови од речникот",
+ "hard_desc": "Откриените совети мора да се користат во наредните обиди",
+ "high_contrast": "Висок контраст",
+ "high_contrast_desc": "Бои пријателски за далтонизам",
+ "today": "Денес",
+ "statistics": "Статистика",
+ "todays_word_reveal": "Денешниот збор — Играјте за да го откриете!",
+ "play_now": "Играј сега",
+ "future_word": "Овој збор сè уште не е одигран. Вратете се подоцна!",
+ "community_stats": "Статистика на заедницата",
+ "players": "Играчи",
+ "plays": "игри",
+ "win": "победа",
+ "first_to_play": "Прв денес!",
+ "top_score": "Најдобар резултат денес!",
+ "all_words": "Сите зборови",
+ "daily_words_counting": "дневни зборови и расте",
+ "newer": "Понови",
+ "older": "Постари",
+ "page_of": "Страница {page} од {total}",
+ "report_bad_word": "Пријави лош збор",
+ "view_all_words": "Погледни ги сите {lang} зборови",
+ "difficulty_locked": "Тежината не може да се промени по обидот"
}
}
diff --git a/data/languages/mn/language_config.json b/data/languages/mn/language_config.json
index 627e2b9a..f3084045 100644
--- a/data/languages/mn/language_config.json
+++ b/data/languages/mn/language_config.json
@@ -6,34 +6,119 @@
"meta": {
"locale": "mn",
"wordle_native": "вордл",
- "title": "Өдөр тутмын үгийн тоглоом ",
- "description": "6 оролдлого (ба түүнээс бага) -д нуугдсан үгийг таах (ба түүнээс бага). Шинэ таавар өдөр бүр боломжтой! ",
+ "title": "Өдөр тутмын үгийн тоглоом",
+ "description": "6 оролдлого (ба түүнээс бага) -д нуугдсан үгийг таах (ба түүнээс бага). Шинэ таавар өдөр бүр боломжтой!",
"keywords": "Монгол хэл, эндүүрэл, таавар, үг, тоглоом, тоглоом, онлайн, таавар, таамаглал"
},
"text": {
"subheader": "Монгол хэл",
- "next_word": "Дараагийн үг ",
- "no_attempts": "Та ямар ч үг хэлээгүй байна! ",
- "share": "Хуваах ",
- "notification-copied": "Санах самбар руу хуулсан ",
- "notification-partial-word": "Бүрэн үг оруулна уу ",
+ "next_word": "Дараагийн үг",
+ "no_attempts": "Та ямар ч үг хэлээгүй байна!",
+ "share": "Хуваах",
"share_challenge_win": "Өнөөдрийн Wordle-ийг {n} оролдлогоор тааварлаа. Чи надаж чадах уу?",
- "share_challenge_lose": "Өнөөдрийн Wordle-ийг тааж чадсангүй. Чи чадах уу?"
+ "share_challenge_lose": "Өнөөдрийн Wordle-ийг тааж чадсангүй. Чи чадах уу?",
+ "notification_copied": "Санах самбар руу хуулсан",
+ "notification_partial_word": "Бүрэн үг оруулна уу",
+ "shared": "Хуваалцсан!",
+ "copied": "Хуулсан!",
+ "notification_word_not_valid": "Үг хүчингүй байна",
+ "hard_mode_position": "Хүнд горим: {letter} нь {position} байрлалд байх ёстой",
+ "hard_mode_contains": "Хүнд горим: таамаглалд {letter} орсон байх ёстой"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Яаж тоглох вэ ",
- "title_2": "Дараахыг тайлбарлах ",
- "close": "Энэ мессежийг хаах ",
- "text_1_1_1": "Тааварлаж байна ",
- "text_1_1_2": "Зургаан оролдсон эсвэл түүнээс бага. ",
- "text_1_2": "Таамаглал бүр таван үсэгтэй үг байх ёстой. Таамаглалаа ирүүлэхийн тулд ENTER товчийг дарна уу. ",
- "text_1_3": "Та таалж байгаа бол плита өнгө нь өнгө нь зөв эсвэл бараг зөв гэдгээ илэрхийлэхийн тулд өнгө өөрчлөгдөнө. ",
- "text_2_1": "гэдэг үгэнд болон зөв байршилд байна! ",
- "text_2_2": "гэдэг үгэнд байгаа боловч зөв байршилд байдаггүй. ",
- "text_2_3": "таах гэж байгаа үгэндээ байхгүй байна. ",
- "text_3": "Өдөр бүр шинэ үг бэлэн болно! "
+ "title": "Яаж тоглох вэ",
+ "title_2": "Дараахыг тайлбарлах",
+ "close": "Энэ мессежийг хаах",
+ "text_1_1_1": "Тааварлаж байна",
+ "text_1_1_2": "Зургаан оролдсон эсвэл түүнээс бага.",
+ "text_1_2": "Таамаглал бүр таван үсэгтэй үг байх ёстой. Таамаглалаа ирүүлэхийн тулд ENTER товчийг дарна уу.",
+ "text_1_3": "Та таалж байгаа бол плита өнгө нь өнгө нь зөв эсвэл бараг зөв гэдгээ илэрхийлэхийн тулд өнгө өөрчлөгдөнө.",
+ "text_2_1": "гэдэг үгэнд болон зөв байршилд байна!",
+ "text_2_2": "гэдэг үгэнд байгаа боловч зөв байршилд байдаггүй.",
+ "text_2_3": "таах гэж байгаа үгэндээ байхгүй байна.",
+ "text_3": "Өдөр бүр шинэ үг бэлэн болно!"
+ },
+ "ui": {
+ "settings": "Тохиргоо",
+ "dark_mode": "Бараан горим",
+ "dark_mode_desc": "Бараан загвар сэлгэх",
+ "sound_and_haptics": "Дуу чимээ & Чичиргээ",
+ "difficulty": "Түвшин",
+ "word_info": "Үгийн мэдээлэл",
+ "word_info_desc": "Тоглоомын дараах тодорхойлолт & AI зураг",
+ "language": "Хэл",
+ "change_language": "Хэл солих",
+ "better_than": "Илүү сайн",
+ "of_players": "тоглогчдоос",
+ "right_to_left": "Баруунаас зүүн",
+ "keyboard_layout": "Гарын зохион байгуулалт",
+ "install_app": "Апп суулгах",
+ "install_app_desc": "Офлайн тоглоод апп дүрс авах",
+ "report_issue": "Алдаа мэдэгдэх",
+ "view_source": "Эх кодыг харах",
+ "guess_distribution": "Таамаглалын тархалт",
+ "games": "Тоглоом",
+ "win_percent": "Ялалт %",
+ "streak": "Дараалал",
+ "best": "Шилдэг",
+ "all_languages": "Бүх хэл",
+ "languages": "Хэлүүд",
+ "play_more_languages": "Олон хэлээр тоглож нийт статистик харна уу!",
+ "add_to_home": "Нүүр дэлгэцэнд нэмэх",
+ "play_daily_like_app": "Wordle-ийг апп шиг өдөр бүр тогло",
+ "install": "Суулгах",
+ "close": "хаах",
+ "about": "Тухай",
+ "global_stats": "Нийт статистик",
+ "games_played": "Тоглосон тоглоом",
+ "win_rate": "Ялалтын хувь",
+ "current_streak": "Одоогийн дараалал",
+ "languages_won": "Ялсан хэлүүд",
+ "best_overall_streak": "Шилдэг нийт дараалал",
+ "best_active_streak": "Шилдэг идэвхтэй дараалал",
+ "your_languages": "Таны хэлүүд",
+ "no_games_yet": "Та одоогоор тоглоогүй байна. Хэл сонгоод эхлээрэй!",
+ "wins": "Ялалт",
+ "losses": "Ялагдал",
+ "avg_attempts": "Дундаж оролдлого",
+ "best_streak": "Шилдэг дараалал",
+ "play": "Тоглох",
+ "search_language": "Хэл хайх...",
+ "external_links": "Гадаад холбоосууд",
+ "coming_soon": "удахгүй ирнэ!",
+ "game": "тоглоом",
+ "games_lowercase": "тоглоомууд",
+ "definition": "Тодорхойлолт",
+ "look_up_on_wiktionary": "Викитоль бичигт хайх",
+ "easy": "Хялбар",
+ "normal": "Хэвийн",
+ "hard": "Хүнд",
+ "easy_desc": "Толь бичигт байхгүй ч аливаа үг хүлээн зөвшөөрнө",
+ "normal_desc": "Таамаглал нь толь бичгийн зөв үг байх ёстой",
+ "hard_desc": "Илэрсэн зөвлөмжийг дараагийн таамаглалд ашиглах ёстой",
+ "high_contrast": "Өндөр тод байдал",
+ "high_contrast_desc": "Өнгө сохор хүмүүст ээлтэй өнгө",
+ "today": "Өнөөдөр",
+ "statistics": "Статистик",
+ "todays_word_reveal": "Өнөөдрийн үг — Тоглоод мэдээрэй!",
+ "play_now": "Одоо тоглох",
+ "future_word": "Энэ үг одоогоор тоглогдоогүй. Дараа ирнэ үү!",
+ "community_stats": "Нийгэмлэгийн статистик",
+ "players": "Тоглогчид",
+ "plays": "тоглолтууд",
+ "win": "ялалт",
+ "first_to_play": "Өнөөдөр анхны тоглогч!",
+ "top_score": "Өнөөдрийн шилдэг оноо!",
+ "all_words": "Бүх үгс",
+ "daily_words_counting": "өдөр тутмын үгс, нэмэгдсээр",
+ "newer": "Шинэ",
+ "older": "Хуучин",
+ "page_of": "Хуудас {page} / {total}",
+ "report_bad_word": "Буруу үг мэдэгдэх",
+ "view_all_words": "Бүх {lang} үгсийг харах",
+ "difficulty_locked": "Таамаглалын дараа түвшин өөрчлөх боломжгүй"
}
}
diff --git a/data/languages/mr/language_config.json b/data/languages/mr/language_config.json
index ba67e6b1..6da34297 100644
--- a/data/languages/mr/language_config.json
+++ b/data/languages/mr/language_config.json
@@ -17,9 +17,15 @@
"next_word": "पुढील शब्द",
"no_attempts": "तुम्ही अजून कोणताही शब्द प्रयत्न केला नाही!",
"share": "शेअर करा",
- "notification-copied": "क्लिपबोर्डवर कॉपी केले",
- "notification-word-not-valid": "शब्द वैध नाही",
- "notification-partial-word": "कृपया संपूर्ण शब्द टाका"
+ "notification_copied": "क्लिपबोर्डवर कॉपी केले",
+ "notification_word_not_valid": "शब्द वैध नाही",
+ "notification_partial_word": "कृपया संपूर्ण शब्द टाका",
+ "shared": "शेअर केले!",
+ "copied": "कॉपी केले!",
+ "share_challenge_win": "आजचे Wordle {n} प्रयत्नांत सोडवले. तुम्ही अधिक चांगले करू शकता?",
+ "share_challenge_lose": "आजचे Wordle सोडवता आले नाही. तुम्ही करू शकता?",
+ "hard_mode_position": "कठीण मोड: {letter} स्थान {position} वर असणे आवश्यक आहे",
+ "hard_mode_contains": "कठीण मोड: अंदाजात {letter} असणे आवश्यक आहे"
},
"help": {
"title": "कसे खेळावे",
@@ -44,6 +50,74 @@
"play": "खेळा",
"search_language": "भाषा शोधा...",
"definition": "व्याख्या",
- "look_up_on_wiktionary": "विक्शनरीवर पहा"
+ "look_up_on_wiktionary": "विक्शनरीवर पहा",
+ "dark_mode_desc": "डार्क थीम टॉगल करा",
+ "sound_and_haptics": "ध्वनी आणि स्पर्श",
+ "difficulty": "अवघडपणा",
+ "word_info": "शब्द माहिती",
+ "word_info_desc": "खेळानंतर व्याख्या आणि AI चित्र",
+ "language": "भाषा",
+ "change_language": "भाषा बदला",
+ "better_than": "यापेक्षा चांगले",
+ "of_players": "खेळाडूंपैकी",
+ "right_to_left": "उजवीकडून डावीकडे",
+ "install_app": "अॅप इन्स्टॉल करा",
+ "install_app_desc": "ऑफलाइन खेळा आणि अॅप आयकॉन मिळवा",
+ "report_issue": "समस्या कळवा",
+ "view_source": "सोर्स कोड पहा",
+ "guess_distribution": "अंदाज वितरण",
+ "win_percent": "विजय %",
+ "streak": "मालिका",
+ "best": "सर्वोत्तम",
+ "play_more_languages": "एकूण आकडेवारी पाहण्यासाठी अधिक भाषांमध्ये खेळा!",
+ "add_to_home": "होम स्क्रीनवर जोडा",
+ "play_daily_like_app": "अॅपसारखे Wordle दररोज खेळा",
+ "install": "इन्स्टॉल करा",
+ "close": "बंद करा",
+ "about": "विषयी",
+ "global_stats": "एकूण आकडेवारी",
+ "games_played": "खेळलेले खेळ",
+ "win_rate": "विजय दर",
+ "current_streak": "सध्याची मालिका",
+ "languages_won": "जिंकलेल्या भाषा",
+ "best_overall_streak": "सर्वोत्तम एकूण मालिका",
+ "best_active_streak": "सर्वोत्तम सक्रिय मालिका",
+ "your_languages": "तुमच्या भाषा",
+ "no_games_yet": "तुम्ही अजून कोणताही खेळ खेळला नाही. सुरू करण्यासाठी भाषा निवडा!",
+ "wins": "विजय",
+ "losses": "पराभव",
+ "avg_attempts": "सरासरी प्रयत्न",
+ "best_streak": "सर्वोत्तम मालिका",
+ "external_links": "बाह्य दुवे",
+ "coming_soon": "लवकरच येत आहे!",
+ "game": "खेळ",
+ "games_lowercase": "खेळ",
+ "easy": "सोपे",
+ "normal": "सामान्य",
+ "hard": "कठीण",
+ "easy_desc": "शब्दकोशात नसलेला शब्दही स्वीकार्य",
+ "normal_desc": "अंदाज शब्दकोशातील वैध शब्द असणे आवश्यक",
+ "hard_desc": "उघड झालेल्या संकेतांचा पुढील अंदाजांमध्ये वापर करणे आवश्यक",
+ "high_contrast": "उच्च कॉन्ट्रास्ट",
+ "high_contrast_desc": "रंग अंधत्वासाठी अनुकूल रंग",
+ "today": "आज",
+ "statistics": "आकडेवारी",
+ "todays_word_reveal": "आजचा शब्द — खेळून शोधा!",
+ "play_now": "आता खेळा",
+ "future_word": "हा शब्द अजून खेळला गेला नाही. नंतर या!",
+ "community_stats": "समुदाय आकडेवारी",
+ "players": "खेळाडू",
+ "plays": "खेळ",
+ "win": "विजय",
+ "first_to_play": "आज पहिले खेळाडू!",
+ "top_score": "आजचा सर्वोच्च गुण!",
+ "all_words": "सर्व शब्द",
+ "daily_words_counting": "दैनंदिन शब्द आणि वाढत आहेत",
+ "newer": "नवीन",
+ "older": "जुने",
+ "page_of": "पान {page} पैकी {total}",
+ "report_bad_word": "वाईट शब्द कळवा",
+ "view_all_words": "सर्व {lang} शब्द पहा",
+ "difficulty_locked": "अंदाजानंतर अवघडपणा बदलता येत नाही"
}
}
diff --git a/data/languages/ms/language_config.json b/data/languages/ms/language_config.json
index 725ab9bf..4bcac4ad 100644
--- a/data/languages/ms/language_config.json
+++ b/data/languages/ms/language_config.json
@@ -20,9 +20,13 @@
"share": "Kongsi",
"shared": "Dikongsi!",
"copied": "Disalin!",
- "notification-copied": "Disalin ke papan klip",
- "notification-word-not-valid": "Perkataan tidak sah",
- "notification-partial-word": "Sila masukkan perkataan penuh"
+ "notification_copied": "Disalin ke papan klip",
+ "notification_word_not_valid": "Perkataan tidak sah",
+ "notification_partial_word": "Sila masukkan perkataan penuh",
+ "share_challenge_win": "Saya selesaikan Wordle hari ini dalam {n} percubaan. Boleh anda buat lebih baik?",
+ "share_challenge_lose": "Saya tidak dapat menyelesaikan Wordle hari ini. Boleh anda?",
+ "hard_mode_position": "Mod sukar: {letter} mesti di kedudukan {position}",
+ "hard_mode_contains": "Mod sukar: tekaan mesti mengandungi {letter}"
},
"help": {
"title": "Cara Bermain",
@@ -41,13 +45,7 @@
"settings": "Tetapan",
"dark_mode": "Mod Gelap",
"dark_mode_desc": "Tukar tema gelap",
- "haptic_feedback": "Maklum Balas Haptic",
- "haptic_feedback_desc": "Getaran semasa sentuh",
- "sound_effects": "Kesan Bunyi",
- "sound_effects_desc": "Bunyi menang/kalah",
"keyboard_layout": "Susun atur papan kekunci",
- "easy_mode": "Benarkan semua perkataan",
- "easy_mode_label": "mod mudah",
"install_app": "Pasang Aplikasi",
"install_app_desc": "Main luar talian & dapatkan ikon",
"report_issue": "Laporkan Masalah",
@@ -62,6 +60,65 @@
"play": "Main",
"search_language": "Cari bahasa...",
"definition": "Definisi",
- "look_up_on_wiktionary": "Cari di Wiktionary"
+ "look_up_on_wiktionary": "Cari di Wiktionary",
+ "sound_and_haptics": "Bunyi & Getaran",
+ "difficulty": "Kesukaran",
+ "word_info": "Maklumat Perkataan",
+ "word_info_desc": "Definisi & seni AI selepas permainan",
+ "language": "Bahasa",
+ "change_language": "Tukar Bahasa",
+ "better_than": "Lebih baik daripada",
+ "of_players": "pemain",
+ "right_to_left": "Kanan ke kiri",
+ "play_more_languages": "Main lebih banyak bahasa untuk lihat statistik global!",
+ "add_to_home": "Tambah ke Skrin Utama",
+ "play_daily_like_app": "Main Wordle setiap hari seperti aplikasi",
+ "install": "Pasang",
+ "close": "tutup",
+ "about": "Tentang",
+ "global_stats": "Statistik Global",
+ "games_played": "Permainan Dimain",
+ "win_rate": "Kadar Menang",
+ "current_streak": "Siri Semasa",
+ "languages_won": "Bahasa Dimenangi",
+ "best_overall_streak": "Siri Keseluruhan Terbaik",
+ "best_active_streak": "Siri Aktif Terbaik",
+ "your_languages": "Bahasa Anda",
+ "no_games_yet": "Anda belum bermain lagi. Pilih bahasa untuk mula!",
+ "wins": "Menang",
+ "losses": "Kalah",
+ "avg_attempts": "Purata Percubaan",
+ "best_streak": "Siri Terbaik",
+ "external_links": "Pautan Luaran",
+ "coming_soon": "akan datang!",
+ "game": "permainan",
+ "games_lowercase": "permainan",
+ "easy": "Mudah",
+ "normal": "Biasa",
+ "hard": "Sukar",
+ "easy_desc": "Sebarang perkataan diterima, walaupun tiada dalam kamus",
+ "normal_desc": "Tekaan mestilah perkataan sah dari kamus",
+ "hard_desc": "Petunjuk yang ditemui mesti digunakan dalam tekaan seterusnya",
+ "high_contrast": "Kontras Tinggi",
+ "high_contrast_desc": "Warna mesra buta warna",
+ "today": "Hari Ini",
+ "statistics": "Statistik",
+ "todays_word_reveal": "Perkataan hari ini — Main untuk mendedahkan!",
+ "play_now": "Main sekarang",
+ "future_word": "Perkataan ini belum dimainkan lagi. Kembali kemudian!",
+ "community_stats": "Statistik Komuniti",
+ "players": "Pemain",
+ "plays": "permainan",
+ "win": "menang",
+ "first_to_play": "Yang pertama bermain hari ini!",
+ "top_score": "Skor tertinggi hari ini!",
+ "all_words": "Semua Perkataan",
+ "daily_words_counting": "perkataan harian dan bertambah",
+ "newer": "Lebih baharu",
+ "older": "Lebih lama",
+ "page_of": "Halaman {page} daripada {total}",
+ "report_bad_word": "Laporkan perkataan buruk",
+ "view_all_words": "Lihat semua perkataan {lang}",
+ "difficulty_locked": "Tidak boleh menukar kesukaran selepas meneka"
}
}
diff --git a/data/languages/nb/language_config.json b/data/languages/nb/language_config.json
index 52cf2670..15995f88 100644
--- a/data/languages/nb/language_config.json
+++ b/data/languages/nb/language_config.json
@@ -16,34 +16,119 @@
},
"meta": {
"locale": "nb",
- "title": "Det daglige ordspillet ",
- "description": "Gjett det skjulte ordet i 6 prøver (eller mindre). Et nytt puslespill er tilgjengelig hver dag! ",
+ "title": "Det daglige ordspillet",
+ "description": "Gjett det skjulte ordet i 6 prøver (eller mindre). Et nytt puslespill er tilgjengelig hver dag!",
"keywords": "Norsk Bokmål, Puslespill, Ord, Spill, Spill, Online, Gjett, Daglig"
},
"text": {
"subheader": "Norsk Bokmål",
- "next_word": "Neste ord ",
- "no_attempts": "Du har ikke prøvd noen ord ennå! ",
- "share": "Dele ",
- "notification-copied": "Kopiert til utklippstavlen ",
- "notification-partial-word": "Vennligst skriv inn et fullt ord ",
+ "next_word": "Neste ord",
+ "no_attempts": "Du har ikke prøvd noen ord ennå!",
+ "share": "Dele",
"share_challenge_win": "Jeg løste dagens Wordle på {n} forsøk. Klarer du det bedre?",
- "share_challenge_lose": "Jeg klarte ikke dagens Wordle. Klarer du det?"
+ "share_challenge_lose": "Jeg klarte ikke dagens Wordle. Klarer du det?",
+ "notification_copied": "Kopiert til utklippstavlen",
+ "notification_partial_word": "Vennligst skriv inn et fullt ord",
+ "shared": "Delt!",
+ "copied": "Kopiert!",
+ "notification_word_not_valid": "Ordet er ikke gyldig",
+ "hard_mode_position": "Vanskelig modus: {letter} må være i posisjon {position}",
+ "hard_mode_contains": "Vanskelig modus: gjetningen må inneholde {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Hvordan spille ",
- "title_2": "Eksempler ",
- "close": "Lukk denne meldingen ",
- "text_1_1_1": "Gjett den ",
- "text_1_1_2": "i seks forsøk eller mindre. ",
- "text_1_2": "Hver gjetning må være et gyldig fem brevord. Trykk på ENTER-knappen for å sende inn gjetningen din. ",
- "text_1_3": "Etter at du har gjettet, vil flisene endre farge for å indikere hvilke bokstaver i ditt ord som er korrekte eller nesten riktige. ",
- "text_2_1": "er i ordet og på riktig sted! ",
- "text_2_2": "er i ordet, men ikke på riktig sted. ",
- "text_2_3": "er ikke tilstede i ordet du prøver å gjette. ",
- "text_3": "Et nytt ord vil være tilgjengelig hver dag! "
+ "title": "Hvordan spille",
+ "title_2": "Eksempler",
+ "close": "Lukk denne meldingen",
+ "text_1_1_1": "Gjett den",
+ "text_1_1_2": "i seks forsøk eller mindre.",
+ "text_1_2": "Hver gjetning må være et gyldig fem brevord. Trykk på ENTER-knappen for å sende inn gjetningen din.",
+ "text_1_3": "Etter at du har gjettet, vil flisene endre farge for å indikere hvilke bokstaver i ditt ord som er korrekte eller nesten riktige.",
+ "text_2_1": "er i ordet og på riktig sted!",
+ "text_2_2": "er i ordet, men ikke på riktig sted.",
+ "text_2_3": "er ikke tilstede i ordet du prøver å gjette.",
+ "text_3": "Et nytt ord vil være tilgjengelig hver dag!"
+ },
+ "ui": {
+ "settings": "Innstillinger",
+ "dark_mode": "Mørk modus",
+ "dark_mode_desc": "Bytt mørkt tema",
+ "sound_and_haptics": "Lyd og vibrasjon",
+ "difficulty": "Vanskelighetsgrad",
+ "word_info": "Ordinformasjon",
+ "word_info_desc": "Definisjon og AI-kunst etter spillet",
+ "language": "Språk",
+ "change_language": "Bytt språk",
+ "better_than": "Bedre enn",
+ "of_players": "av spillere",
+ "right_to_left": "Høyre til venstre",
+ "keyboard_layout": "Tastaturoppsett",
+ "install_app": "Installer app",
+ "install_app_desc": "Spill offline og få app-ikon",
+ "report_issue": "Rapporter et problem",
+ "view_source": "Se kildekode",
+ "guess_distribution": "Gjetningsfordeling",
+ "games": "Spill",
+ "win_percent": "Seier %",
+ "streak": "Rekke",
+ "best": "Beste",
+ "all_languages": "Alle språk",
+ "languages": "Språk",
+ "play_more_languages": "Spill flere språk for å se global statistikk!",
+ "add_to_home": "Legg til på hjemmeskjerm",
+ "play_daily_like_app": "Spill Wordle daglig som en app",
+ "install": "Installer",
+ "close": "lukk",
+ "about": "Om",
+ "global_stats": "Global statistikk",
+ "games_played": "Spill spilt",
+ "win_rate": "Seiersprosent",
+ "current_streak": "Nåværende rekke",
+ "languages_won": "Språk vunnet",
+ "best_overall_streak": "Beste totale rekke",
+ "best_active_streak": "Beste aktive rekke",
+ "your_languages": "Dine språk",
+ "no_games_yet": "Du har ikke spilt noen spill ennå. Velg et språk for å starte!",
+ "wins": "Seire",
+ "losses": "Tap",
+ "avg_attempts": "Snitt forsøk",
+ "best_streak": "Beste rekke",
+ "play": "Spill",
+ "search_language": "Søk etter språk...",
+ "external_links": "Eksterne lenker",
+ "coming_soon": "kommer snart!",
+ "game": "spill",
+ "games_lowercase": "spill",
+ "definition": "Definisjon",
+ "look_up_on_wiktionary": "Slå opp på Wiktionary",
+ "easy": "Lett",
+ "normal": "Normal",
+ "hard": "Vanskelig",
+ "easy_desc": "Alle ord aksepteres, selv om de ikke er i ordboken",
+ "normal_desc": "Gjetninger må være gyldige ord fra ordboken",
+ "hard_desc": "Avdekkede hint må brukes i påfølgende gjetninger",
+ "high_contrast": "Høy kontrast",
+ "high_contrast_desc": "Fargeblindevennlige farger",
+ "today": "I dag",
+ "statistics": "Statistikk",
+ "todays_word_reveal": "Dagens ord — Spill for å avsløre!",
+ "play_now": "Spill nå",
+ "future_word": "Dette ordet har ikke blitt spilt ennå. Kom tilbake senere!",
+ "community_stats": "Fellesskapsstatistikk",
+ "players": "Spillere",
+ "plays": "spill",
+ "win": "seier",
+ "first_to_play": "Først ute i dag!",
+ "top_score": "Toppresultat i dag!",
+ "all_words": "Alle ord",
+ "daily_words_counting": "daglige ord og stadig flere",
+ "newer": "Nyere",
+ "older": "Eldre",
+ "page_of": "Side {page} av {total}",
+ "report_bad_word": "Rapporter dårlig ord",
+ "view_all_words": "Se alle {lang} ord",
+ "difficulty_locked": "Kan ikke endre vanskelighetsgrad etter gjetning"
}
}
diff --git a/data/languages/nds/language_config.json b/data/languages/nds/language_config.json
index 5c9e5167..3ac8f238 100644
--- a/data/languages/nds/language_config.json
+++ b/data/languages/nds/language_config.json
@@ -11,13 +11,18 @@
},
"text": {
"subheader": "Plattdüütsch",
- "next_word": "Next word ",
- "no_attempts": "You haven't tried any words yet! ",
+ "next_word": "Next word",
+ "no_attempts": "You haven't tried any words yet!",
"share": "Delen",
- "notification-copied": "Copied to clipboard ",
- "notification-partial-word": "Please enter a full word ",
"share_challenge_win": "Ik hebb dat Wordle vun hüüt in {n} Versöök schafft. Kannst du dat beter?",
- "share_challenge_lose": "Ik hebb dat Wordle vun hüüt nich schafft. Kannst du dat?"
+ "share_challenge_lose": "Ik hebb dat Wordle vun hüüt nich schafft. Kannst du dat?",
+ "notification_copied": "Copied to clipboard",
+ "notification_partial_word": "Please enter a full word",
+ "shared": "Deelt!",
+ "copied": "Kopiert!",
+ "notification_word_not_valid": "Dat Woort is nich gültig",
+ "hard_mode_position": "Swoor Modus: {letter} mutt op Positschoon {position} stahn",
+ "hard_mode_contains": "Swoor Modus: de Raad mutt {letter} hebben"
},
"language_code_3": "",
"language_code_iso_639_3": "",
@@ -45,5 +50,85 @@
"u": [
"ü"
]
+ },
+ "ui": {
+ "settings": "Instellungen",
+ "dark_mode": "Düüster Modus",
+ "dark_mode_desc": "Düüster Thema wesseln",
+ "sound_and_haptics": "Klang & Vibratioon",
+ "difficulty": "Swoorheed",
+ "word_info": "Woort-Info",
+ "word_info_desc": "Definitschoon & KI-Bild na't Speel",
+ "language": "Spraak",
+ "change_language": "Spraak wesseln",
+ "better_than": "Beter as",
+ "of_players": "vun de Spelers",
+ "right_to_left": "Rechts na links",
+ "keyboard_layout": "Tastatuur-Layout",
+ "install_app": "App installeern",
+ "install_app_desc": "Offline spelen & App-Ikon kriegen",
+ "report_issue": "Problem mellen",
+ "view_source": "Quellkood ankieken",
+ "guess_distribution": "Raad-Verdeelung",
+ "games": "Spelen",
+ "win_percent": "Wunnen %",
+ "streak": "Reeg",
+ "best": "Best",
+ "all_languages": "All Spraken",
+ "languages": "Spraken",
+ "play_more_languages": "Speel mehr Spraken för globale Statistiken!",
+ "add_to_home": "Op Startschirm doon",
+ "play_daily_like_app": "Wordle jeedeen Dag spelen as App",
+ "install": "Installeern",
+ "close": "tomaken",
+ "about": "Över",
+ "global_stats": "Globale Statistiken",
+ "games_played": "Speelt Spelen",
+ "win_rate": "Wunnquote",
+ "current_streak": "Aktuell Reeg",
+ "languages_won": "Spraken wunnen",
+ "best_overall_streak": "Best Gesamt-Reeg",
+ "best_active_streak": "Best aktive Reeg",
+ "your_languages": "Dien Spraken",
+ "no_games_yet": "Du hest noch keen Speel speelt. Söök en Spraak ut!",
+ "wins": "Wunnen",
+ "losses": "Verloren",
+ "avg_attempts": "Dörchschn. Versöök",
+ "best_streak": "Best Reeg",
+ "play": "Spelen",
+ "search_language": "Spraak söken...",
+ "external_links": "Externe Links",
+ "coming_soon": "kummt bald!",
+ "game": "Speel",
+ "games_lowercase": "Spelen",
+ "definition": "Definitschoon",
+ "look_up_on_wiktionary": "Op Wiktionary nakieken",
+ "easy": "Licht",
+ "normal": "Normal",
+ "hard": "Swoor",
+ "easy_desc": "Jedeen Woort warrt annahmen, ok wenn't nich in't Wöörbook steiht",
+ "normal_desc": "Raadversöök mööt gültige Wöör ut't Wöörbook sien",
+ "hard_desc": "Opdeckte Tipps mööt in de nächsten Raadversöök bruukt warrn",
+ "high_contrast": "Hoog Kontrast",
+ "high_contrast_desc": "Klöörblinnfreundliche Klören",
+ "today": "Vundaag",
+ "statistics": "Statistiken",
+ "todays_word_reveal": "Dat Woort vun vundaag — Speel, üm dat to sehn!",
+ "play_now": "Nu spelen",
+ "future_word": "Dit Woort is noch nich speelt worrn. Kumm later wedder!",
+ "community_stats": "Gemeenschap-Statistiken",
+ "players": "Spelers",
+ "plays": "Spelen",
+ "win": "Wunnen",
+ "first_to_play": "De Eerst vundaag!",
+ "top_score": "Topp-Ergebnis vundaag!",
+ "all_words": "All Wöör",
+ "daily_words_counting": "dääglich Wöör un mehr",
+ "newer": "Newer",
+ "older": "Öller",
+ "page_of": "Siet {page} vun {total}",
+ "report_bad_word": "Slecht Woort mellen",
+ "view_all_words": "All {lang} Wöör ankieken",
+ "difficulty_locked": "Swoorheed kann na't Raden nich ännert warrn"
}
}
diff --git a/data/languages/ne/language_config.json b/data/languages/ne/language_config.json
index 0d79996b..6675e915 100644
--- a/data/languages/ne/language_config.json
+++ b/data/languages/ne/language_config.json
@@ -6,34 +6,119 @@
"meta": {
"locale": "ne",
"wordle_native": "वर्डल",
- "title": "दैनिक शब्द खेल ",
- "description": "Kids को प्रयास (वा कम) मा लुकेको शब्द अनुमान लगाउनुहोस्। नयाँ पजल प्रत्येक दिन उपलब्ध छ! ",
+ "title": "दैनिक शब्द खेल",
+ "description": "Kids को प्रयास (वा कम) मा लुकेको शब्द अनुमान लगाउनुहोस्। नयाँ पजल प्रत्येक दिन उपलब्ध छ!",
"keywords": "नेपाली, पज्जल, शब्द, खेल, खेल, अनलाइन, अनलाइन, दैनिक"
},
"text": {
"subheader": "नेपाली",
- "next_word": "अर्को शब्द ",
- "no_attempts": "तपाईंले अहिलेसम्म कुनै शब्दहरू प्रयास गर्नुभएन! ",
+ "next_word": "अर्को शब्द",
+ "no_attempts": "तपाईंले अहिलेसम्म कुनै शब्दहरू प्रयास गर्नुभएन!",
"share": "साझा गर्नुहोस्",
- "notification-copied": "क्लिपबोर्डमा प्रतिलिपि गरियो ",
- "notification-partial-word": "कृपया पूर्ण शब्द प्रविष्ट गर्नुहोस् ",
"share_challenge_win": "आजको Wordle {n} प्रयासमा हल गरें। तपाईं भन्दा राम्रो गर्न सक्नुहुन्छ?",
- "share_challenge_lose": "आजको Wordle हल गर्न सकिनँ। तपाईं सक्नुहुन्छ?"
+ "share_challenge_lose": "आजको Wordle हल गर्न सकिनँ। तपाईं सक्नुहुन्छ?",
+ "notification_copied": "क्लिपबोर्डमा प्रतिलिपि गरियो",
+ "notification_partial_word": "कृपया पूर्ण शब्द प्रविष्ट गर्नुहोस्",
+ "shared": "साझा भयो!",
+ "copied": "प्रतिलिपि भयो!",
+ "notification_word_not_valid": "शब्द मान्य छैन",
+ "hard_mode_position": "कठिन मोड: {letter} स्थान {position} मा हुनुपर्छ",
+ "hard_mode_contains": "कठिन मोड: अनुमानमा {letter} हुनुपर्छ"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "कसरी खेल्ने ",
- "title_2": "देखाउनु ",
- "close": "यो सन्देश बन्द गर्नुहोस् ",
- "text_1_1_1": "अनुमान ",
- "text_1_1_2": "छ वटा वा कममा। ",
- "text_1_2": "प्रत्येक अनुमान एक वैध पाँच अक्षर शब्द हुनुपर्दछ। तपाईंको अनुमान पेश गर्न प्रविष्ट गर्नुहोस् बटन थिच्नुहोस्। ",
- "text_1_3": "तपाईंले अनुमान गरेपछि, टाइलहरूले र color ्ग परिवर्तन गर्दछ जुन तपाईंको वचनको कुन अक्षरहरू सही वा लगभग सही छन्। ",
- "text_2_1": "शब्द र सहि स्थानमा छ! ",
- "text_2_2": "शब्दमा छ, तर सहि स्थानमा छैन। ",
- "text_2_3": "तपाईले अनुमान गर्न कोशिस गर्दै हुनुहुन्छ भन्ने शब्दमा उपस्थित छैन। ",
- "text_3": "नयाँ शब्द प्रत्येक दिन उपलब्ध हुनेछ! "
+ "title": "कसरी खेल्ने",
+ "title_2": "देखाउनु",
+ "close": "यो सन्देश बन्द गर्नुहोस्",
+ "text_1_1_1": "अनुमान",
+ "text_1_1_2": "छ वटा वा कममा।",
+ "text_1_2": "प्रत्येक अनुमान एक वैध पाँच अक्षर शब्द हुनुपर्दछ। तपाईंको अनुमान पेश गर्न प्रविष्ट गर्नुहोस् बटन थिच्नुहोस्।",
+ "text_1_3": "तपाईंले अनुमान गरेपछि, टाइलहरूले र color ्ग परिवर्तन गर्दछ जुन तपाईंको वचनको कुन अक्षरहरू सही वा लगभग सही छन्।",
+ "text_2_1": "शब्द र सहि स्थानमा छ!",
+ "text_2_2": "शब्दमा छ, तर सहि स्थानमा छैन।",
+ "text_2_3": "तपाईले अनुमान गर्न कोशिस गर्दै हुनुहुन्छ भन्ने शब्दमा उपस्थित छैन।",
+ "text_3": "नयाँ शब्द प्रत्येक दिन उपलब्ध हुनेछ!"
+ },
+ "ui": {
+ "settings": "सेटिङ",
+ "dark_mode": "डार्क मोड",
+ "dark_mode_desc": "अँध्यारो थिम टगल गर्नुहोस्",
+ "sound_and_haptics": "ध्वनि र कम्पन",
+ "difficulty": "कठिनाई",
+ "word_info": "शब्द जानकारी",
+ "word_info_desc": "खेल पछि परिभाषा र AI कला",
+ "language": "भाषा",
+ "change_language": "भाषा परिवर्तन",
+ "better_than": "भन्दा राम्रो",
+ "of_players": "खेलाडीहरू मध्ये",
+ "right_to_left": "दायाँबाट बायाँ",
+ "keyboard_layout": "किबोर्ड लेआउट",
+ "install_app": "एप इन्स्टल गर्नुहोस्",
+ "install_app_desc": "अफलाइन खेल्नुहोस् र एप आइकन पाउनुहोस्",
+ "report_issue": "समस्या रिपोर्ट गर्नुहोस्",
+ "view_source": "स्रोत कोड हेर्नुहोस्",
+ "guess_distribution": "अनुमान वितरण",
+ "games": "खेलहरू",
+ "win_percent": "जित %",
+ "streak": "शृङ्खला",
+ "best": "सर्वोत्तम",
+ "all_languages": "सबै भाषाहरू",
+ "languages": "भाषाहरू",
+ "play_more_languages": "विश्वव्यापी तथ्याङ्क हेर्न थप भाषामा खेल्नुहोस्!",
+ "add_to_home": "होम स्क्रिनमा थप्नुहोस्",
+ "play_daily_like_app": "एपजस्तै हरेक दिन Wordle खेल्नुहोस्",
+ "install": "इन्स्टल",
+ "close": "बन्द",
+ "about": "बारेमा",
+ "global_stats": "विश्वव्यापी तथ्याङ्क",
+ "games_played": "खेलिएका खेलहरू",
+ "win_rate": "जित दर",
+ "current_streak": "हालको शृङ्खला",
+ "languages_won": "जितेका भाषाहरू",
+ "best_overall_streak": "सर्वोत्तम समग्र शृङ्खला",
+ "best_active_streak": "सर्वोत्तम सक्रिय शृङ्खला",
+ "your_languages": "तपाईंका भाषाहरू",
+ "no_games_yet": "तपाईंले अझै खेल्नुभएको छैन। सुरु गर्न भाषा छान्नुहोस्!",
+ "wins": "जित",
+ "losses": "हार",
+ "avg_attempts": "औसत प्रयास",
+ "best_streak": "सर्वोत्तम शृङ्खला",
+ "play": "खेल्नुहोस्",
+ "search_language": "भाषा खोज्नुहोस्...",
+ "external_links": "बाह्य लिङ्कहरू",
+ "coming_soon": "चाँडै आउँदैछ!",
+ "game": "खेल",
+ "games_lowercase": "खेलहरू",
+ "definition": "परिभाषा",
+ "look_up_on_wiktionary": "विक्सनरीमा हेर्नुहोस्",
+ "easy": "सजिलो",
+ "normal": "सामान्य",
+ "hard": "कठिन",
+ "easy_desc": "शब्दकोशमा नभएको शब्द पनि स्वीकार्य",
+ "normal_desc": "अनुमान शब्दकोशको मान्य शब्द हुनुपर्छ",
+ "hard_desc": "खुलेका संकेतहरू अर्को अनुमानमा प्रयोग गर्नुपर्छ",
+ "high_contrast": "उच्च कन्ट्रास्ट",
+ "high_contrast_desc": "रंग अन्धताका लागि मैत्रीपूर्ण रंगहरू",
+ "today": "आज",
+ "statistics": "तथ्याङ्क",
+ "todays_word_reveal": "आजको शब्द — खेलेर पत्ता लगाउनुहोस्!",
+ "play_now": "अहिले खेल्नुहोस्",
+ "future_word": "यो शब्द अझै खेलिएको छैन। पछि आउनुहोस्!",
+ "community_stats": "समुदाय तथ्याङ्क",
+ "players": "खेलाडीहरू",
+ "plays": "खेलहरू",
+ "win": "जित",
+ "first_to_play": "आज पहिलो खेलाडी!",
+ "top_score": "आजको उच्च स्कोर!",
+ "all_words": "सबै शब्दहरू",
+ "daily_words_counting": "दैनिक शब्दहरू र बढ्दै",
+ "newer": "नयाँ",
+ "older": "पुरानो",
+ "page_of": "पृष्ठ {page} / {total}",
+ "report_bad_word": "खराब शब्द रिपोर्ट गर्नुहोस्",
+ "view_all_words": "सबै {lang} शब्दहरू हेर्नुहोस्",
+ "difficulty_locked": "अनुमान पछि कठिनाई बदल्न सकिँदैन"
}
}
diff --git a/data/languages/nl/language_config.json b/data/languages/nl/language_config.json
index 0ac0750a..e8adebfa 100644
--- a/data/languages/nl/language_config.json
+++ b/data/languages/nl/language_config.json
@@ -37,34 +37,119 @@
},
"meta": {
"locale": "nl",
- "title": "Het dagelijkse woordspel ",
- "description": "Raden het verborgen woord in 6 (of minder). Er is elke dag een nieuwe puzzel beschikbaar! ",
+ "title": "Het dagelijkse woordspel",
+ "description": "Raden het verborgen woord in 6 (of minder). Er is elke dag een nieuwe puzzel beschikbaar!",
"keywords": "Nederlands, puzzel, woord, spelen, spel, online, raden, dagelijks"
},
"text": {
"subheader": "Nederlands",
- "next_word": "Volgend woord ",
- "no_attempts": "Je hebt nog geen woorden geprobeerd! ",
- "share": "Delen ",
- "notification-copied": "Gekopieerd naar het klembord ",
- "notification-partial-word": "Voer alstublieft een volledig woord in ",
+ "next_word": "Volgend woord",
+ "no_attempts": "Je hebt nog geen woorden geprobeerd!",
+ "share": "Delen",
"share_challenge_win": "Ik heb de Wordle van vandaag in {n} pogingen opgelost. Kun jij het beter?",
- "share_challenge_lose": "Ik heb de Wordle van vandaag niet opgelost. Kun jij het wel?"
+ "share_challenge_lose": "Ik heb de Wordle van vandaag niet opgelost. Kun jij het wel?",
+ "notification_copied": "Gekopieerd naar het klembord",
+ "notification_partial_word": "Voer alstublieft een volledig woord in",
+ "shared": "Gedeeld!",
+ "copied": "Gekopieerd!",
+ "notification_word_not_valid": "Woord is niet geldig",
+ "hard_mode_position": "Moeilijke modus: {letter} moet op positie {position} staan",
+ "hard_mode_contains": "Moeilijke modus: gok moet {letter} bevatten"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Hoe te spelen ",
- "title_2": "Voorbeelden ",
- "close": "Sluit dit bericht ",
- "text_1_1_1": "Raad de ",
- "text_1_1_2": "in zes pogingen of minder. ",
- "text_1_2": "Elke gok moet een geldig vijf letterwoord zijn. Druk op de knop ENTER om uw gok in te dienen. ",
- "text_1_3": "Nadat u raden, zullen de tegels van kleur veranderen om aan te geven welke letters van uw woord correct zijn of bijna correct zijn. ",
- "text_2_1": "is in het woord en op de juiste locatie! ",
- "text_2_2": "is in het woord, maar niet op de juiste locatie. ",
- "text_2_3": "is niet aanwezig in het woord dat u probeert te raden. ",
- "text_3": "Er is elke dag een nieuw woord beschikbaar! "
+ "title": "Hoe te spelen",
+ "title_2": "Voorbeelden",
+ "close": "Sluit dit bericht",
+ "text_1_1_1": "Raad de",
+ "text_1_1_2": "in zes pogingen of minder.",
+ "text_1_2": "Elke gok moet een geldig vijf letterwoord zijn. Druk op de knop ENTER om uw gok in te dienen.",
+ "text_1_3": "Nadat u raden, zullen de tegels van kleur veranderen om aan te geven welke letters van uw woord correct zijn of bijna correct zijn.",
+ "text_2_1": "is in het woord en op de juiste locatie!",
+ "text_2_2": "is in het woord, maar niet op de juiste locatie.",
+ "text_2_3": "is niet aanwezig in het woord dat u probeert te raden.",
+ "text_3": "Er is elke dag een nieuw woord beschikbaar!"
+ },
+ "ui": {
+ "settings": "Instellingen",
+ "dark_mode": "Donkere modus",
+ "dark_mode_desc": "Donker thema wisselen",
+ "sound_and_haptics": "Geluid en trillingen",
+ "difficulty": "Moeilijkheid",
+ "word_info": "Woordinformatie",
+ "word_info_desc": "Definitie en AI-kunst na het spel",
+ "language": "Taal",
+ "change_language": "Taal wijzigen",
+ "better_than": "Beter dan",
+ "of_players": "van de spelers",
+ "right_to_left": "Rechts naar links",
+ "keyboard_layout": "Toetsenbordindeling",
+ "install_app": "App installeren",
+ "install_app_desc": "Speel offline en krijg een app-icoon",
+ "report_issue": "Probleem melden",
+ "view_source": "Broncode bekijken",
+ "guess_distribution": "Gokverdeling",
+ "games": "Spellen",
+ "win_percent": "Winst %",
+ "streak": "Reeks",
+ "best": "Beste",
+ "all_languages": "Alle talen",
+ "languages": "Talen",
+ "play_more_languages": "Speel meer talen om je globale statistieken te zien!",
+ "add_to_home": "Voeg toe aan startscherm",
+ "play_daily_like_app": "Speel Wordle dagelijks als een app",
+ "install": "Installeren",
+ "close": "sluiten",
+ "about": "Over",
+ "global_stats": "Globale statistieken",
+ "games_played": "Gespeelde spellen",
+ "win_rate": "Winstpercentage",
+ "current_streak": "Huidige reeks",
+ "languages_won": "Talen gewonnen",
+ "best_overall_streak": "Beste totale reeks",
+ "best_active_streak": "Beste actieve reeks",
+ "your_languages": "Jouw talen",
+ "no_games_yet": "Je hebt nog geen spellen gespeeld. Kies een taal om te beginnen!",
+ "wins": "Overwinningen",
+ "losses": "Verloren",
+ "avg_attempts": "Gem. pogingen",
+ "best_streak": "Beste reeks",
+ "play": "Spelen",
+ "search_language": "Taal zoeken...",
+ "external_links": "Externe links",
+ "coming_soon": "komt binnenkort!",
+ "game": "spel",
+ "games_lowercase": "spellen",
+ "definition": "Definitie",
+ "look_up_on_wiktionary": "Opzoeken op Wiktionary",
+ "easy": "Makkelijk",
+ "normal": "Normaal",
+ "hard": "Moeilijk",
+ "easy_desc": "Elk woord geaccepteerd, ook als het niet in het woordenboek staat",
+ "normal_desc": "Gokken moeten geldige woorden uit het woordenboek zijn",
+ "hard_desc": "Onthulde hints moeten in volgende gokken worden gebruikt",
+ "high_contrast": "Hoog contrast",
+ "high_contrast_desc": "Kleurenblindvriendelijke kleuren",
+ "today": "Vandaag",
+ "statistics": "Statistieken",
+ "todays_word_reveal": "Het woord van vandaag — Speel om te onthullen!",
+ "play_now": "Nu spelen",
+ "future_word": "Dit woord is nog niet gespeeld. Kom later terug!",
+ "community_stats": "Gemeenschapsstatistieken",
+ "players": "Spelers",
+ "plays": "spellen",
+ "win": "winst",
+ "first_to_play": "De eerste vandaag!",
+ "top_score": "Topscore vandaag!",
+ "all_words": "Alle woorden",
+ "daily_words_counting": "dagelijkse woorden en groeiend",
+ "newer": "Nieuwer",
+ "older": "Ouder",
+ "page_of": "Pagina {page} van {total}",
+ "report_bad_word": "Slecht woord melden",
+ "view_all_words": "Alle {lang} woorden bekijken",
+ "difficulty_locked": "Moeilijkheid kan niet worden gewijzigd na het gokken"
}
}
diff --git a/data/languages/nn/language_config.json b/data/languages/nn/language_config.json
index d82dd0d2..4de95962 100644
--- a/data/languages/nn/language_config.json
+++ b/data/languages/nn/language_config.json
@@ -22,13 +22,18 @@
},
"text": {
"subheader": "Norsk Nynorsk",
- "next_word": "Next word ",
- "no_attempts": "You haven't tried any words yet! ",
+ "next_word": "Next word",
+ "no_attempts": "You haven't tried any words yet!",
"share": "Del",
- "notification-copied": "Copied to clipboard ",
- "notification-partial-word": "Please enter a full word ",
"share_challenge_win": "Eg løyste dagens Wordle på {n} forsøk. Klarar du det betre?",
- "share_challenge_lose": "Eg klarte ikkje dagens Wordle. Klarar du det?"
+ "share_challenge_lose": "Eg klarte ikkje dagens Wordle. Klarar du det?",
+ "notification_copied": "Copied to clipboard",
+ "notification_partial_word": "Please enter a full word",
+ "shared": "Delt!",
+ "copied": "Kopiert!",
+ "notification_word_not_valid": "Ordet er ikkje gyldig",
+ "hard_mode_position": "Vanskeleg modus: {letter} må vere i posisjon {position}",
+ "hard_mode_contains": "Vanskeleg modus: gjettinga må innehalde {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
@@ -45,5 +50,85 @@
"text_2_2": "is in the word, but not in the correct location.",
"text_2_3": "is not present in the word you are trying to guess.",
"text_3": "A new word will be available each day!"
+ },
+ "ui": {
+ "settings": "Innstillingar",
+ "dark_mode": "Mørk modus",
+ "dark_mode_desc": "Byt mørkt tema",
+ "sound_and_haptics": "Lyd og vibrasjon",
+ "difficulty": "Vanskegrad",
+ "word_info": "Ordinformasjon",
+ "word_info_desc": "Definisjon og AI-kunst etter spelet",
+ "language": "Språk",
+ "change_language": "Byt språk",
+ "better_than": "Betre enn",
+ "of_players": "av spelarar",
+ "right_to_left": "Høgre til venstre",
+ "keyboard_layout": "Tastaturutforming",
+ "install_app": "Installer app",
+ "install_app_desc": "Spel fråkopla og få app-ikon",
+ "report_issue": "Rapporter eit problem",
+ "view_source": "Sjå kjeldekode",
+ "guess_distribution": "Gjettingsfordeling",
+ "games": "Spel",
+ "win_percent": "Siger %",
+ "streak": "Rekkje",
+ "best": "Beste",
+ "all_languages": "Alle språk",
+ "languages": "Språk",
+ "play_more_languages": "Spel fleire språk for å sjå global statistikk!",
+ "add_to_home": "Legg til på heimeskjerm",
+ "play_daily_like_app": "Spel Wordle dagleg som ein app",
+ "install": "Installer",
+ "close": "lukk",
+ "about": "Om",
+ "global_stats": "Global statistikk",
+ "games_played": "Spel spelt",
+ "win_rate": "Sigerprosent",
+ "current_streak": "Noverande rekkje",
+ "languages_won": "Språk vunne",
+ "best_overall_streak": "Beste samla rekkje",
+ "best_active_streak": "Beste aktive rekkje",
+ "your_languages": "Dine språk",
+ "no_games_yet": "Du har ikkje spelt noko spel endå. Vel eit språk for å starte!",
+ "wins": "Sigrar",
+ "losses": "Tap",
+ "avg_attempts": "Snitt forsøk",
+ "best_streak": "Beste rekkje",
+ "play": "Spel",
+ "search_language": "Søk etter språk...",
+ "external_links": "Eksterne lenkjer",
+ "coming_soon": "kjem snart!",
+ "game": "spel",
+ "games_lowercase": "spel",
+ "definition": "Definisjon",
+ "look_up_on_wiktionary": "Slå opp på Wiktionary",
+ "easy": "Lett",
+ "normal": "Normal",
+ "hard": "Vanskeleg",
+ "easy_desc": "Alle ord godtekne, sjølv om dei ikkje er i ordboka",
+ "normal_desc": "Gjettingar må vere gyldige ord frå ordboka",
+ "hard_desc": "Avdekte hint må brukast i seinare gjettingar",
+ "high_contrast": "Høg kontrast",
+ "high_contrast_desc": "Fargeblindevenlege fargar",
+ "today": "I dag",
+ "statistics": "Statistikk",
+ "todays_word_reveal": "Dagens ord — Spel for å avsløre!",
+ "play_now": "Spel no",
+ "future_word": "Dette ordet har ikkje vorte spelt endå. Kom att seinare!",
+ "community_stats": "Fellesskapsstatistikk",
+ "players": "Spelarar",
+ "plays": "spel",
+ "win": "siger",
+ "first_to_play": "Fyrst ute i dag!",
+ "top_score": "Toppresultat i dag!",
+ "all_words": "Alle ord",
+ "daily_words_counting": "daglege ord og stadig fleire",
+ "newer": "Nyare",
+ "older": "Eldre",
+ "page_of": "Side {page} av {total}",
+ "report_bad_word": "Rapporter dårleg ord",
+ "view_all_words": "Sjå alle {lang} ord",
+ "difficulty_locked": "Kan ikkje endre vanskegrad etter gjetting"
}
}
diff --git a/data/languages/oc/language_config.json b/data/languages/oc/language_config.json
index e57f22b6..cf8d7dcc 100644
--- a/data/languages/oc/language_config.json
+++ b/data/languages/oc/language_config.json
@@ -11,13 +11,18 @@
},
"text": {
"subheader": "occitan",
- "next_word": "Next word ",
- "no_attempts": "You haven't tried any words yet! ",
+ "next_word": "Next word",
+ "no_attempts": "You haven't tried any words yet!",
"share": "Partejar",
- "notification-copied": "Copied to clipboard ",
- "notification-partial-word": "Please enter a full word ",
"share_challenge_win": "Ai resòlfo lo Wordle del jorn en {n} ensages. Pòdes far mièlhs?",
- "share_challenge_lose": "Ai pas pogut resòlvre lo Wordle del jorn. E tu?"
+ "share_challenge_lose": "Ai pas pogut resòlvre lo Wordle del jorn. E tu?",
+ "notification_copied": "Copied to clipboard",
+ "notification_partial_word": "Please enter a full word",
+ "shared": "Partejat!",
+ "copied": "Copiat!",
+ "notification_word_not_valid": "Lo mot es pas valid",
+ "hard_mode_position": "Mòde dificil: {letter} deu èsser en posicion {position}",
+ "hard_mode_contains": "Mòde dificil: l'ensag deu conténer {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
@@ -59,5 +64,85 @@
"ú",
"ü"
]
+ },
+ "ui": {
+ "settings": "Paramètres",
+ "dark_mode": "Mòde escur",
+ "dark_mode_desc": "Cambiar lo tèma escur",
+ "sound_and_haptics": "Son e vibracion",
+ "difficulty": "Dificultat",
+ "word_info": "Info del mot",
+ "word_info_desc": "Definicion e art IA aprèp lo jòc",
+ "language": "Lenga",
+ "change_language": "Cambiar de lenga",
+ "better_than": "Mièlhs que",
+ "of_players": "dels jogaires",
+ "right_to_left": "Drecha a esquèrra",
+ "keyboard_layout": "Disposicion del clavièr",
+ "install_app": "Installar l'aplicacion",
+ "install_app_desc": "Jogar fòra linha e obténer l'icòna",
+ "report_issue": "Senhalar un problèma",
+ "view_source": "Veire lo còdi font",
+ "guess_distribution": "Distribucion dels ensages",
+ "games": "Jòcs",
+ "win_percent": "Victoria %",
+ "streak": "Seguida",
+ "best": "Mièlhs",
+ "all_languages": "Totas las lengas",
+ "languages": "Lengas",
+ "play_more_languages": "Jogatz mai de lengas per veire vòstras estadisticas globalas!",
+ "add_to_home": "Apondre a l'ecran d'acuèlh",
+ "play_daily_like_app": "Jogar Wordle cada jorn coma una aplicacion",
+ "install": "Installar",
+ "close": "tampar",
+ "about": "A prepaus",
+ "global_stats": "Estadisticas globalas",
+ "games_played": "Jòcs jogats",
+ "win_rate": "Tòca de victòria",
+ "current_streak": "Seguida actuala",
+ "languages_won": "Lengas ganhadas",
+ "best_overall_streak": "Melhora seguida totala",
+ "best_active_streak": "Melhora seguida activa",
+ "your_languages": "Vòstras lengas",
+ "no_games_yet": "Avètz pas encara jogat. Causissètz una lenga per començar!",
+ "wins": "Victòrias",
+ "losses": "Pèrdas",
+ "avg_attempts": "Ensages mièj.",
+ "best_streak": "Melhora seguida",
+ "play": "Jogar",
+ "search_language": "Cercar una lenga...",
+ "external_links": "Ligams extèrns",
+ "coming_soon": "arribarà lèu!",
+ "game": "jòc",
+ "games_lowercase": "jòcs",
+ "definition": "Definicion",
+ "look_up_on_wiktionary": "Cercar sul Wikicòdi",
+ "easy": "Facil",
+ "normal": "Normal",
+ "hard": "Dificil",
+ "easy_desc": "Tot mot acceptat, quitament s'es pas dins lo diccionari",
+ "normal_desc": "Los ensages devon èsser de mots valids del diccionari",
+ "hard_desc": "Las indicacions reveladas devon èsser utilizadas als ensages seguents",
+ "high_contrast": "Contraste naut",
+ "high_contrast_desc": "Colors adaptadas al daltonisme",
+ "today": "Uèi",
+ "statistics": "Estadisticas",
+ "todays_word_reveal": "Lo mot d'uèi — Jogatz per lo revelar!",
+ "play_now": "Jogar ara",
+ "future_word": "Aqueste mot es pas encara estat jogat. Tornatz mai tard!",
+ "community_stats": "Estadisticas de la comunautat",
+ "players": "Jogaires",
+ "plays": "jòcs",
+ "win": "victòria",
+ "first_to_play": "Lo primièr a jogar uèi!",
+ "top_score": "Melhor resultat uèi!",
+ "all_words": "Totes los mots",
+ "daily_words_counting": "mots quotidians e de mai en mai",
+ "newer": "Mai recents",
+ "older": "Mai ancians",
+ "page_of": "Pagina {page} de {total}",
+ "report_bad_word": "Senhalar un mot marfo",
+ "view_all_words": "Veire totes los mots {lang}",
+ "difficulty_locked": "La dificultat se pòt pas cambiar aprèp aver ensajat"
}
}
diff --git a/data/languages/pa/language_config.json b/data/languages/pa/language_config.json
index d78ca18f..4274ecee 100644
--- a/data/languages/pa/language_config.json
+++ b/data/languages/pa/language_config.json
@@ -16,9 +16,15 @@
"next_word": "ਅਗਲਾ ਸ਼ਬਦ",
"no_attempts": "ਤੁਸੀਂ ਅਜੇ ਕੋਈ ਸ਼ਬਦ ਨਹੀਂ ਅਜ਼ਮਾਇਆ!",
"share": "ਸਾਂਝਾ ਕਰੋ",
- "notification-copied": "ਕਲਿੱਪਬੋਰਡ ਤੇ ਕਾਪੀ ਕੀਤਾ",
- "notification-word-not-valid": "ਸ਼ਬਦ ਵੈਧ ਨਹੀਂ ਹੈ",
- "notification-partial-word": "ਕਿਰਪਾ ਕਰਕੇ ਪੂਰਾ ਸ਼ਬਦ ਦਰਜ ਕਰੋ"
+ "notification_copied": "ਕਲਿੱਪਬੋਰਡ ਤੇ ਕਾਪੀ ਕੀਤਾ",
+ "notification_word_not_valid": "ਸ਼ਬਦ ਵੈਧ ਨਹੀਂ ਹੈ",
+ "notification_partial_word": "ਕਿਰਪਾ ਕਰਕੇ ਪੂਰਾ ਸ਼ਬਦ ਦਰਜ ਕਰੋ",
+ "shared": "ਸਾਂਝਾ ਕੀਤਾ!",
+ "copied": "ਕਾਪੀ ਕੀਤਾ!",
+ "share_challenge_win": "ਮੈਂ ਅੱਜ ਦਾ Wordle {n} ਕੋਸ਼ਿਸ਼ਾਂ ਵਿੱਚ ਹੱਲ ਕੀਤਾ। ਕੀ ਤੁਸੀਂ ਬਿਹਤਰ ਕਰ ਸਕਦੇ ਹੋ?",
+ "share_challenge_lose": "ਮੈਂ ਅੱਜ ਦਾ Wordle ਹੱਲ ਨਹੀਂ ਕਰ ਸਕਿਆ। ਕੀ ਤੁਸੀਂ ਕਰ ਸਕਦੇ ਹੋ?",
+ "hard_mode_position": "ਔਖਾ ਮੋਡ: {letter} ਸਥਿਤੀ {position} ਵਿੱਚ ਹੋਣਾ ਚਾਹੀਦਾ",
+ "hard_mode_contains": "ਔਖਾ ਮੋਡ: ਅੰਦਾਜ਼ੇ ਵਿੱਚ {letter} ਹੋਣਾ ਚਾਹੀਦਾ"
},
"help": {
"title": "ਕਿਵੇਂ ਖੇਡਣਾ ਹੈ",
@@ -43,6 +49,74 @@
"play": "ਖੇਡੋ",
"search_language": "ਭਾਸ਼ਾ ਲੱਭੋ...",
"definition": "ਪਰਿਭਾਸ਼ਾ",
- "look_up_on_wiktionary": "ਵਿਕਸ਼ਨਰੀ ਤੇ ਦੇਖੋ"
+ "look_up_on_wiktionary": "ਵਿਕਸ਼ਨਰੀ ਤੇ ਦੇਖੋ",
+ "dark_mode_desc": "ਡਾਰਕ ਥੀਮ ਟੌਗਲ ਕਰੋ",
+ "sound_and_haptics": "ਆਵਾਜ਼ ਅਤੇ ਕੰਬਣੀ",
+ "difficulty": "ਔਖਾਪਣ",
+ "word_info": "ਸ਼ਬਦ ਜਾਣਕਾਰੀ",
+ "word_info_desc": "ਖੇਡ ਤੋਂ ਬਾਅਦ ਪਰਿਭਾਸ਼ਾ ਅਤੇ AI ਕਲਾ",
+ "language": "ਭਾਸ਼ਾ",
+ "change_language": "ਭਾਸ਼ਾ ਬਦਲੋ",
+ "better_than": "ਇਸ ਤੋਂ ਬਿਹਤਰ",
+ "of_players": "ਖਿਡਾਰੀਆਂ ਵਿੱਚੋਂ",
+ "right_to_left": "ਸੱਜੇ ਤੋਂ ਖੱਬੇ",
+ "install_app": "ਐਪ ਇੰਸਟਾਲ ਕਰੋ",
+ "install_app_desc": "ਆਫਲਾਈਨ ਖੇਡੋ ਅਤੇ ਐਪ ਆਈਕਨ ਪਾਓ",
+ "report_issue": "ਸਮੱਸਿਆ ਦੀ ਰਿਪੋਰਟ ਕਰੋ",
+ "view_source": "ਸਰੋਤ ਕੋਡ ਦੇਖੋ",
+ "guess_distribution": "ਅੰਦਾਜ਼ਾ ਵੰਡ",
+ "win_percent": "ਜਿੱਤ %",
+ "streak": "ਲੜੀ",
+ "best": "ਸਭ ਤੋਂ ਵਧੀਆ",
+ "play_more_languages": "ਕੁੱਲ ਅੰਕੜੇ ਵੇਖਣ ਲਈ ਹੋਰ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ ਖੇਡੋ!",
+ "add_to_home": "ਹੋਮ ਸਕ੍ਰੀਨ ਤੇ ਜੋੜੋ",
+ "play_daily_like_app": "ਐਪ ਵਾਂਗ ਹਰ ਰੋਜ਼ Wordle ਖੇਡੋ",
+ "install": "ਇੰਸਟਾਲ ਕਰੋ",
+ "close": "ਬੰਦ",
+ "about": "ਬਾਰੇ",
+ "global_stats": "ਕੁੱਲ ਅੰਕੜੇ",
+ "games_played": "ਖੇਡੀਆਂ ਖੇਡਾਂ",
+ "win_rate": "ਜਿੱਤ ਦਰ",
+ "current_streak": "ਮੌਜੂਦਾ ਲੜੀ",
+ "languages_won": "ਜਿੱਤੀਆਂ ਭਾਸ਼ਾਵਾਂ",
+ "best_overall_streak": "ਸਭ ਤੋਂ ਵਧੀਆ ਕੁੱਲ ਲੜੀ",
+ "best_active_streak": "ਸਭ ਤੋਂ ਵਧੀਆ ਸਰਗਰਮ ਲੜੀ",
+ "your_languages": "ਤੁਹਾਡੀਆਂ ਭਾਸ਼ਾਵਾਂ",
+ "no_games_yet": "ਤੁਸੀਂ ਅਜੇ ਕੋਈ ਖੇਡ ਨਹੀਂ ਖੇਡੀ। ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਭਾਸ਼ਾ ਚੁਣੋ!",
+ "wins": "ਜਿੱਤਾਂ",
+ "losses": "ਹਾਰਾਂ",
+ "avg_attempts": "ਔਸਤ ਕੋਸ਼ਿਸ਼ਾਂ",
+ "best_streak": "ਸਭ ਤੋਂ ਵਧੀਆ ਲੜੀ",
+ "external_links": "ਬਾਹਰੀ ਲਿੰਕ",
+ "coming_soon": "ਜਲਦੀ ਆ ਰਿਹਾ ਹੈ!",
+ "game": "ਖੇਡ",
+ "games_lowercase": "ਖੇਡਾਂ",
+ "easy": "ਸੌਖਾ",
+ "normal": "ਸਧਾਰਨ",
+ "hard": "ਔਖਾ",
+ "easy_desc": "ਕੋਈ ਵੀ ਸ਼ਬਦ ਮਨਜ਼ੂਰ, ਭਾਵੇਂ ਸ਼ਬਦਕੋਸ਼ ਵਿੱਚ ਨਾ ਹੋਵੇ",
+ "normal_desc": "ਅੰਦਾਜ਼ੇ ਸ਼ਬਦਕੋਸ਼ ਦੇ ਵੈਧ ਸ਼ਬਦ ਹੋਣੇ ਚਾਹੀਦੇ",
+ "hard_desc": "ਖੁੱਲ੍ਹੇ ਸੰਕੇਤ ਅਗਲੇ ਅੰਦਾਜ਼ਿਆਂ ਵਿੱਚ ਵਰਤੇ ਜਾਣੇ ਚਾਹੀਦੇ",
+ "high_contrast": "ਉੱਚ ਕੰਟ੍ਰਾਸਟ",
+ "high_contrast_desc": "ਰੰਗ ਅੰਧੇਪਣ ਲਈ ਅਨੁਕੂਲ ਰੰਗ",
+ "today": "ਅੱਜ",
+ "statistics": "ਅੰਕੜੇ",
+ "todays_word_reveal": "ਅੱਜ ਦਾ ਸ਼ਬਦ — ਖੇਡ ਕੇ ਪਤਾ ਲਗਾਓ!",
+ "play_now": "ਹੁਣੇ ਖੇਡੋ",
+ "future_word": "ਇਹ ਸ਼ਬਦ ਅਜੇ ਖੇਡਿਆ ਨਹੀਂ ਗਿਆ। ਬਾਅਦ ਵਿੱਚ ਆਓ!",
+ "community_stats": "ਭਾਈਚਾਰਕ ਅੰਕੜੇ",
+ "players": "ਖਿਡਾਰੀ",
+ "plays": "ਖੇਡਾਂ",
+ "win": "ਜਿੱਤ",
+ "first_to_play": "ਅੱਜ ਪਹਿਲੇ ਖਿਡਾਰੀ!",
+ "top_score": "ਅੱਜ ਦਾ ਸਿਖਰ ਸਕੋਰ!",
+ "all_words": "ਸਾਰੇ ਸ਼ਬਦ",
+ "daily_words_counting": "ਰੋਜ਼ਾਨਾ ਸ਼ਬਦ ਅਤੇ ਵਧ ਰਹੇ ਹਨ",
+ "newer": "ਨਵੇਂ",
+ "older": "ਪੁਰਾਣੇ",
+ "page_of": "ਪੰਨਾ {page} / {total}",
+ "report_bad_word": "ਮਾੜਾ ਸ਼ਬਦ ਰਿਪੋਰਟ ਕਰੋ",
+ "view_all_words": "ਸਾਰੇ {lang} ਸ਼ਬਦ ਦੇਖੋ",
+ "difficulty_locked": "ਅੰਦਾਜ਼ੇ ਤੋਂ ਬਾਅਦ ਔਖਾਪਣ ਬਦਲ ਨਹੀਂ ਸਕਦੇ"
}
}
diff --git a/data/languages/pau/language_config.json b/data/languages/pau/language_config.json
index 0cf78093..c417e8fa 100644
--- a/data/languages/pau/language_config.json
+++ b/data/languages/pau/language_config.json
@@ -11,13 +11,18 @@
},
"text": {
"subheader": "Palauan",
- "next_word": "Next word ",
- "no_attempts": "You haven't tried any words yet! ",
- "share": "Share ",
- "notification-copied": "Copied to clipboard ",
- "notification-partial-word": "Please enter a full word ",
+ "next_word": "Next word",
+ "no_attempts": "You haven't tried any words yet!",
+ "share": "Share",
"share_challenge_win": "Ak mla Wordle er a klebesei er a {n} el blals. Ke kau mo meklou?",
- "share_challenge_lose": "Ak diak mla Wordle er a klebesei. Ke kau?"
+ "share_challenge_lose": "Ak diak mla Wordle er a klebesei. Ke kau?",
+ "notification_copied": "Copied to clipboard",
+ "notification_partial_word": "Please enter a full word",
+ "shared": "Shared!",
+ "copied": "Copied!",
+ "notification_word_not_valid": "A tekoi a diak le ungil",
+ "hard_mode_position": "Hard mode: {letter} a kirel el mo er a {position}",
+ "hard_mode_contains": "Hard mode: a guess a kirel el oubail a {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
@@ -34,5 +39,85 @@
"text_2_2": "is in the word, but not in the correct location.",
"text_2_3": "is not present in the word you are trying to guess.",
"text_3": "A new word will be available each day!"
+ },
+ "ui": {
+ "settings": "Settings",
+ "dark_mode": "Dark Mode",
+ "dark_mode_desc": "Toggle dark theme",
+ "sound_and_haptics": "Sound & Haptics",
+ "difficulty": "Difficulty",
+ "word_info": "Word Info",
+ "word_info_desc": "Definition & AI art a uriul a game",
+ "language": "Tekoi",
+ "change_language": "Meskau a tekoi",
+ "better_than": "A ungil er a",
+ "of_players": "el chad",
+ "right_to_left": "Right to left",
+ "keyboard_layout": "Keyboard layout",
+ "install_app": "Install App",
+ "install_app_desc": "Play offline & get app icon",
+ "report_issue": "Report a Issue",
+ "view_source": "Omes a source code",
+ "guess_distribution": "Guess Distribution",
+ "games": "Games",
+ "win_percent": "Win %",
+ "streak": "Streak",
+ "best": "Best",
+ "all_languages": "Rokui el tekoi",
+ "languages": "Tekoi",
+ "play_more_languages": "Melekoi a bebil el tekoi el mo mesaik a stats er kau!",
+ "add_to_home": "Add to Home Screen",
+ "play_daily_like_app": "Melekoi a Wordle er a klebesei el ua app",
+ "install": "Install",
+ "close": "close",
+ "about": "About",
+ "global_stats": "Global Stats",
+ "games_played": "Games Played",
+ "win_rate": "Win Rate",
+ "current_streak": "Current Streak",
+ "languages_won": "Languages Won",
+ "best_overall_streak": "Best Overall Streak",
+ "best_active_streak": "Best Active Streak",
+ "your_languages": "A tekoi er kau",
+ "no_games_yet": "Ke mla meluches. Meskau a tekoi el mo mochu!",
+ "wins": "Wins",
+ "losses": "Losses",
+ "avg_attempts": "Avg Attempts",
+ "best_streak": "Best Streak",
+ "play": "Melekoi",
+ "search_language": "Osiik a tekoi...",
+ "external_links": "External Links",
+ "coming_soon": "a merael el mei!",
+ "game": "game",
+ "games_lowercase": "games",
+ "definition": "Definition",
+ "look_up_on_wiktionary": "Omes er a Wiktionary",
+ "easy": "Melemalt",
+ "normal": "Normal",
+ "hard": "Mesisiich",
+ "easy_desc": "Rokui el tekoi a ungil, e ngii diak er a dictionary",
+ "normal_desc": "A guess a kirel el ungil el tekoi er a dictionary",
+ "hard_desc": "A hints el mlar metikd a kirel el ousbech er a eungel el guess",
+ "high_contrast": "High Contrast",
+ "high_contrast_desc": "Colors el ungil a omes er a colorblind",
+ "today": "Klebesei",
+ "statistics": "Statistics",
+ "todays_word_reveal": "A tekoi er a klebesei — Melekoi el mo medul!",
+ "play_now": "Melekoi ngar er tiang",
+ "future_word": "Tia el tekoi a dimlak el meluches. Mei er elechang!",
+ "community_stats": "Community Stats",
+ "players": "Players",
+ "plays": "plays",
+ "win": "win",
+ "first_to_play": "Kot el meluches er a klebesei!",
+ "top_score": "Top score er a klebesei!",
+ "all_words": "Rokui el tekoi",
+ "daily_words_counting": "klebesei el tekoi me olterkokl",
+ "newer": "Newer",
+ "older": "Older",
+ "page_of": "Page {page} er a {total}",
+ "report_bad_word": "Report a mekngit el tekoi",
+ "view_all_words": "Omes a rokui el {lang} tekoi",
+ "difficulty_locked": "Diak el sebechel meskau a difficulty a uriul a guess"
}
}
diff --git a/data/languages/pl/language_config.json b/data/languages/pl/language_config.json
index 00d155f0..b1219065 100644
--- a/data/languages/pl/language_config.json
+++ b/data/languages/pl/language_config.json
@@ -11,13 +11,18 @@
},
"text": {
"subheader": "język polski",
- "next_word": "Następne słowo ",
- "no_attempts": "Nie wprowadzono jeszcze żadnego słowa! ",
- "share": "Udostępnij ",
- "notification-copied": "Skopiowano do schowka ",
- "notification-partial-word": "Wprowadź pełne słowo ",
+ "next_word": "Następne słowo",
+ "no_attempts": "Nie wprowadzono jeszcze żadnego słowa!",
+ "share": "Udostępnij",
"share_challenge_win": "Rozwiązałem/am dzisiejsze Wordle w {n} próbach. Dasz radę lepiej?",
- "share_challenge_lose": "Nie rozwiązałem/am dzisiejszego Wordle. A ty?"
+ "share_challenge_lose": "Nie rozwiązałem/am dzisiejszego Wordle. A ty?",
+ "notification_copied": "Skopiowano do schowka",
+ "notification_partial_word": "Wprowadź pełne słowo",
+ "shared": "Udostępniono!",
+ "copied": "Skopiowano!",
+ "notification_word_not_valid": "Słowo jest nieprawidłowe",
+ "hard_mode_position": "Tryb trudny: {letter} musi być na pozycji {position}",
+ "hard_mode_contains": "Tryb trudny: odpowiedź musi zawierać {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
@@ -26,8 +31,8 @@
"title": "Jak grać",
"title_2": "Przykłady",
"close": "Zamknij tę wiadomość",
- "text_1_1_1": "Zgadnij ",
- "text_1_1_2": "w sześciu próbach lub mniej. ",
+ "text_1_1_1": "Zgadnij",
+ "text_1_1_2": "w sześciu próbach lub mniej.",
"text_1_2": "Każda próba musi być poprawnym pięciolitrowym słowem. Naciśnij klawisz Enter, aby wysłać swoją odpowiedź.",
"text_1_3": "Po każdej próbie kafelki zmienią kolor, aby wskazać, które litery Twojego słowa są poprawne lub prawie poprawne.",
"text_2_1": "jest w słowie i na właściwym miejscu!",
@@ -39,14 +44,8 @@
"settings": "Ustawienia",
"dark_mode": "Tryb ciemny",
"dark_mode_desc": "Przełącz ciemny motyw",
- "haptic_feedback": "Wibracje dotykowe",
- "haptic_feedback_desc": "Wibracja przy dotyku",
- "sound_effects": "Efekty dźwiękowe",
- "sound_effects_desc": "Dźwięki wygranej/przegranej",
"right_to_left": "Od prawej do lewej",
"keyboard_layout": "Układ klawiatury",
- "easy_mode": "Akceptuj dowolne słowo",
- "easy_mode_label": "tryb łatwy",
"install_app": "Zainstaluj aplikację",
"install_app_desc": "Graj offline i otrzymaj ikonę aplikacji",
"report_issue": "Zgłoś problem",
@@ -62,7 +61,64 @@
"add_to_home": "Dodaj do ekranu głównego",
"play_daily_like_app": "Graj w Wordle codziennie jak w aplikacji",
"install": "Zainstaluj",
- "close": "zamknij"
+ "close": "zamknij",
+ "sound_and_haptics": "Dźwięk i wibracje",
+ "difficulty": "Poziom trudności",
+ "word_info": "Informacje o słowie",
+ "word_info_desc": "Definicja i sztuka AI po grze",
+ "language": "Język",
+ "change_language": "Zmień język",
+ "better_than": "Lepiej niż",
+ "of_players": "graczy",
+ "about": "O grze",
+ "global_stats": "Statystyki globalne",
+ "games_played": "Rozegrane gry",
+ "win_rate": "Procent wygranych",
+ "current_streak": "Obecna seria",
+ "languages_won": "Wygrane języki",
+ "best_overall_streak": "Najlepsza seria ogółem",
+ "best_active_streak": "Najlepsza aktywna seria",
+ "your_languages": "Twoje języki",
+ "no_games_yet": "Nie rozegrałeś jeszcze żadnej gry. Wybierz język, aby zacząć!",
+ "wins": "Wygrane",
+ "losses": "Przegrane",
+ "avg_attempts": "Śr. prób",
+ "best_streak": "Najlepsza seria",
+ "play": "Graj",
+ "search_language": "Szukaj języka...",
+ "external_links": "Linki zewnętrzne",
+ "coming_soon": "wkrótce!",
+ "game": "gra",
+ "games_lowercase": "gry",
+ "definition": "Definicja",
+ "look_up_on_wiktionary": "Wyszukaj w Wikisłowniku",
+ "easy": "Łatwy",
+ "normal": "Normalny",
+ "hard": "Trudny",
+ "easy_desc": "Każde słowo akceptowane, nawet jeśli nie ma go w słowniku",
+ "normal_desc": "Odpowiedzi muszą być poprawnymi słowami ze słownika",
+ "hard_desc": "Odkryte wskazówki muszą być użyte w kolejnych próbach",
+ "high_contrast": "Wysoki kontrast",
+ "high_contrast_desc": "Kolory przyjazne dla daltonistów",
+ "today": "Dzisiaj",
+ "statistics": "Statystyki",
+ "todays_word_reveal": "Dzisiejsze słowo — Zagraj, aby odkryć!",
+ "play_now": "Graj teraz",
+ "future_word": "To słowo nie zostało jeszcze zagrane. Wróć później!",
+ "community_stats": "Statystyki społeczności",
+ "players": "Gracze",
+ "plays": "gry",
+ "win": "wygrana",
+ "first_to_play": "Pierwszy gracz dzisiaj!",
+ "top_score": "Najlepszy wynik dzisiaj!",
+ "all_words": "Wszystkie słowa",
+ "daily_words_counting": "codziennych słów i wciąż rośnie",
+ "newer": "Nowsze",
+ "older": "Starsze",
+ "page_of": "Strona {page} z {total}",
+ "report_bad_word": "Zgłoś złe słowo",
+ "view_all_words": "Zobacz wszystkie słowa {lang}",
+ "difficulty_locked": "Nie można zmienić trudności po zgadywaniu"
},
"diacritic_map": {
"c": [
diff --git a/data/languages/pt/language_config.json b/data/languages/pt/language_config.json
index 5eeb2ed1..b66b974b 100644
--- a/data/languages/pt/language_config.json
+++ b/data/languages/pt/language_config.json
@@ -36,48 +36,47 @@
},
"meta": {
"locale": "pt",
- "title": "O jogo diário da palavra ",
- "description": "Acho que a palavra oculta em 6 tentativas (ou menos). Um novo quebra-cabeça está disponível todos os dias! ",
+ "title": "O jogo diário da palavra",
+ "description": "Acho que a palavra oculta em 6 tentativas (ou menos). Um novo quebra-cabeça está disponível todos os dias!",
"keywords": "Português, Quebra-cabeça, Palavra, Jogue, Jogo, Online, Adivinha, Diário"
},
"text": {
"subheader": "Português",
- "next_word": "Próxima palavra ",
- "no_attempts": "Você ainda não experimentou nenhuma palavra! ",
+ "next_word": "Próxima palavra",
+ "no_attempts": "Você ainda não experimentou nenhuma palavra!",
"share": "Partilhar",
- "notification-copied": "Copiado para a área de transferência ",
- "notification-partial-word": "Por favor, insira uma palavra completa ",
"share_challenge_win": "Resolvi o Wordle de hoje em {n} tentativas. Consegues fazer melhor?",
- "share_challenge_lose": "Não consegui resolver o Wordle de hoje. E tu?"
+ "share_challenge_lose": "Não consegui resolver o Wordle de hoje. E tu?",
+ "notification_copied": "Copiado para a área de transferência",
+ "notification_partial_word": "Por favor, insira uma palavra completa",
+ "shared": "Partilhado!",
+ "copied": "Copiado!",
+ "notification_word_not_valid": "Palavra inválida",
+ "hard_mode_position": "Modo difícil: {letter} deve estar na posição {position}",
+ "hard_mode_contains": "Modo difícil: a tentativa deve conter {letter}"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Como jogar ",
- "title_2": "Exemplos ",
- "close": "Feche esta mensagem ",
- "text_1_1_1": "Adivinhe o ",
- "text_1_1_2": "em seis tentativas ou menos. ",
- "text_1_2": "Cada palpite deve ser uma palavra válida de cinco letras. Pressione o botão ENTER para enviar seu palpite. ",
- "text_1_3": "Depois de adivinhar, as telhas vão mudar de cor para indicar quais letras da sua palavra estão corretas ou quase corretas. ",
- "text_2_1": "está na palavra e no local correto! ",
- "text_2_2": "está na palavra, mas não no local correto. ",
- "text_2_3": "não está presente na palavra que você está tentando adivinhar. ",
- "text_3": "Uma nova palavra estará disponível a cada dia! "
+ "title": "Como jogar",
+ "title_2": "Exemplos",
+ "close": "Feche esta mensagem",
+ "text_1_1_1": "Adivinhe o",
+ "text_1_1_2": "em seis tentativas ou menos.",
+ "text_1_2": "Cada palpite deve ser uma palavra válida de cinco letras. Pressione o botão ENTER para enviar seu palpite.",
+ "text_1_3": "Depois de adivinhar, as telhas vão mudar de cor para indicar quais letras da sua palavra estão corretas ou quase corretas.",
+ "text_2_1": "está na palavra e no local correto!",
+ "text_2_2": "está na palavra, mas não no local correto.",
+ "text_2_3": "não está presente na palavra que você está tentando adivinhar.",
+ "text_3": "Uma nova palavra estará disponível a cada dia!"
},
"ui": {
"settings": "Definições",
"dark_mode": "Modo escuro",
"dark_mode_desc": "Alternar tema escuro",
- "haptic_feedback": "Resposta háptica",
- "haptic_feedback_desc": "Vibração ao tocar",
- "sound_effects": "Efeitos sonoros",
- "sound_effects_desc": "Sons de vitória/derrota",
"right_to_left": "Direita para esquerda",
"keyboard_layout": "Layout do teclado",
- "easy_mode": "Permitir qualquer palavra",
- "easy_mode_label": "modo fácil",
"install_app": "Instalar aplicação",
"install_app_desc": "Jogue offline e obtenha o ícone",
"report_issue": "Reportar um problema",
@@ -93,6 +92,63 @@
"add_to_home": "Adicionar ao ecrã inicial",
"play_daily_like_app": "Jogue Wordle diariamente como uma app",
"install": "Instalar",
- "close": "fechar"
+ "close": "fechar",
+ "sound_and_haptics": "Som e vibração",
+ "difficulty": "Dificuldade",
+ "word_info": "Informação da palavra",
+ "word_info_desc": "Definição e arte IA após o jogo",
+ "language": "Idioma",
+ "change_language": "Mudar idioma",
+ "better_than": "Melhor que",
+ "of_players": "dos jogadores",
+ "about": "Sobre",
+ "global_stats": "Estatísticas globais",
+ "games_played": "Jogos jogados",
+ "win_rate": "Taxa de vitória",
+ "current_streak": "Sequência atual",
+ "languages_won": "Idiomas conquistados",
+ "best_overall_streak": "Melhor sequência geral",
+ "best_active_streak": "Melhor sequência ativa",
+ "your_languages": "Os seus idiomas",
+ "no_games_yet": "Ainda não jogou nenhum jogo. Escolha um idioma para começar!",
+ "wins": "Vitórias",
+ "losses": "Derrotas",
+ "avg_attempts": "Méd. tentativas",
+ "best_streak": "Melhor sequência",
+ "play": "Jogar",
+ "search_language": "Pesquisar idioma...",
+ "external_links": "Ligações externas",
+ "coming_soon": "em breve!",
+ "game": "jogo",
+ "games_lowercase": "jogos",
+ "definition": "Definição",
+ "look_up_on_wiktionary": "Pesquisar no Wikcionário",
+ "easy": "Fácil",
+ "normal": "Normal",
+ "hard": "Difícil",
+ "easy_desc": "Qualquer palavra aceite, mesmo que não esteja no dicionário",
+ "normal_desc": "As tentativas devem ser palavras válidas do dicionário",
+ "hard_desc": "As dicas reveladas devem ser usadas nas tentativas seguintes",
+ "high_contrast": "Alto contraste",
+ "high_contrast_desc": "Cores amigas de daltonismo",
+ "today": "Hoje",
+ "statistics": "Estatísticas",
+ "todays_word_reveal": "Palavra de hoje — Jogue para revelar!",
+ "play_now": "Jogar agora",
+ "future_word": "Esta palavra ainda não foi jogada. Volte mais tarde!",
+ "community_stats": "Estatísticas da comunidade",
+ "players": "Jogadores",
+ "plays": "jogos",
+ "win": "vitória",
+ "first_to_play": "Primeiro a jogar hoje!",
+ "top_score": "Melhor resultado hoje!",
+ "all_words": "Todas as palavras",
+ "daily_words_counting": "palavras diárias e a crescer",
+ "newer": "Mais recentes",
+ "older": "Mais antigas",
+ "page_of": "Página {page} de {total}",
+ "report_bad_word": "Reportar palavra indevida",
+ "view_all_words": "Ver todas as palavras {lang}",
+ "difficulty_locked": "Não é possível alterar a dificuldade após adivinhar"
}
}
diff --git a/data/languages/qya/language_config.json b/data/languages/qya/language_config.json
index 14b94fcb..ac5bb267 100644
--- a/data/languages/qya/language_config.json
+++ b/data/languages/qya/language_config.json
@@ -16,11 +16,11 @@
"next_word": "Next word",
"no_attempts": "You haven't tried any words yet!",
"share": "Share",
- "notification-copied": "Copied to clipboard",
- "notification-word-not-valid": "Word is not valid",
- "notification-partial-word": "Please enter a full word",
"share_challenge_win": "Wordle sírë {n} yaltiénen hirnen. Polil nahtye?",
- "share_challenge_lose": "Wordle sírë ú hirnen. Polil nahtye?"
+ "share_challenge_lose": "Wordle sírë ú hirnen. Polil nahtye?",
+ "notification_copied": "Copied to clipboard",
+ "notification_word_not_valid": "Word is not valid",
+ "notification_partial_word": "Please enter a full word"
},
"help": {
"title": "How to Play",
diff --git a/data/languages/ro/language_config.json b/data/languages/ro/language_config.json
index 81e59f19..e0ae7ba4 100644
--- a/data/languages/ro/language_config.json
+++ b/data/languages/ro/language_config.json
@@ -14,10 +14,10 @@
"next_word": "Cuvântul următor",
"no_attempts": "Nu ați încercat încă niciun cuvânt!",
"share": "Partajează",
- "notification-copied": "Copiat în clipboard.",
- "notification-partial-word": "Introduceți un cuvânt complet ",
"share_challenge_win": "Am rezolvat Wordle de azi din {n} încercări. Poți mai bine?",
- "share_challenge_lose": "Nu am rezolvat Wordle de azi. Tu poți?"
+ "share_challenge_lose": "Nu am rezolvat Wordle de azi. Tu poți?",
+ "notification_copied": "Copiat în clipboard.",
+ "notification_partial_word": "Introduceți un cuvânt complet"
},
"language_code_3": "",
"language_code_iso_639_3": "",
@@ -26,27 +26,21 @@
"title": "Cum se joacă",
"title_2": "Exemple",
"close": "Închideți acest mesaj",
- "text_1_1_1": "Ghiciți ",
- "text_1_1_2": "în cel mult șase încercări. ",
- "text_1_2": "Fiecare încercare trebuie să fie un cuvânt valid format din cinci litere. Apăsați butonul ENTER pentru a trimite încercarea dvs. ",
- "text_1_3": "După fiecare încercare, plăcile își vor schimba culoarea pentru a indica ce litere ale cuvântului dvs. sunt corecte sau aproape corecte. ",
- "text_2_1": "este în cuvânt și în poziția corectă! ",
- "text_2_2": "este în cuvânt, dar nu în poziția corectă. ",
- "text_2_3": "nu este prezent în cuvântul pe care încercați să îl ghiciți. ",
- "text_3": "Un nou cuvânt va fi disponibil în fiecare zi! "
+ "text_1_1_1": "Ghiciți",
+ "text_1_1_2": "în cel mult șase încercări.",
+ "text_1_2": "Fiecare încercare trebuie să fie un cuvânt valid format din cinci litere. Apăsați butonul ENTER pentru a trimite încercarea dvs.",
+ "text_1_3": "După fiecare încercare, plăcile își vor schimba culoarea pentru a indica ce litere ale cuvântului dvs. sunt corecte sau aproape corecte.",
+ "text_2_1": "este în cuvânt și în poziția corectă!",
+ "text_2_2": "este în cuvânt, dar nu în poziția corectă.",
+ "text_2_3": "nu este prezent în cuvântul pe care încercați să îl ghiciți.",
+ "text_3": "Un nou cuvânt va fi disponibil în fiecare zi!"
},
"ui": {
"settings": "Setări",
"dark_mode": "Mod întunecat",
"dark_mode_desc": "Comută tema întunecată",
- "haptic_feedback": "Feedback haptic",
- "haptic_feedback_desc": "Vibrație la atingere",
- "sound_effects": "Efecte sonore",
- "sound_effects_desc": "Sunete de câștig/pierdere",
"right_to_left": "De la dreapta la stânga",
"keyboard_layout": "Aspect tastatură",
- "easy_mode": "Permite orice cuvânt",
- "easy_mode_label": "mod ușor",
"install_app": "Instalează aplicația",
"install_app_desc": "Joacă offline și obține pictograma",
"report_issue": "Raportează o problemă",
diff --git a/data/languages/ru/language_config.json b/data/languages/ru/language_config.json
index d5c2ab4d..628fe6e0 100644
--- a/data/languages/ru/language_config.json
+++ b/data/languages/ru/language_config.json
@@ -6,48 +6,42 @@
"meta": {
"locale": "ru",
"wordle_native": "вордл",
- "title": "Ежедневная игра слова ",
- "description": "Угадайте скрытое слово в 6 попыток (или меньше). Новая головоломка доступна каждый день! ",
+ "title": "Ежедневная игра слова",
+ "description": "Угадайте скрытое слово в 6 попыток (или меньше). Новая головоломка доступна каждый день!",
"keywords": "русский, головоломки, слово, игра, игра, онлайн, угадайте, ежедневно"
},
"text": {
"subheader": "русский",
- "next_word": "Следующее слово ",
- "no_attempts": "Вы еще не пробовали ни слова! ",
+ "next_word": "Следующее слово",
+ "no_attempts": "Вы еще не пробовали ни слова!",
"share": "Поделиться",
- "notification-copied": "Скопирован в буфер обмена ",
- "notification-partial-word": "Пожалуйста, введите полное слово ",
"share_challenge_win": "Я решил(а) сегодняшний Wordle за {n} попыток. Сможешь лучше?",
- "share_challenge_lose": "Я не решил(а) сегодняшний Wordle. А ты сможешь?"
+ "share_challenge_lose": "Я не решил(а) сегодняшний Wordle. А ты сможешь?",
+ "notification_copied": "Скопирован в буфер обмена",
+ "notification_partial_word": "Пожалуйста, введите полное слово"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Как играть ",
- "title_2": "Примеры ",
- "close": "Закройте это сообщение ",
- "text_1_1_1": "Угадать ",
- "text_1_1_2": "в шесть попыток или меньше. ",
- "text_1_2": "Каждое предположение должно быть действительным словом пять букв. Нажмите кнопку ENTER, чтобы отправить предположение. ",
- "text_1_3": "После того, как вы уже догадаетесь, плитка изменит цвет, чтобы указать, какие буквы вашего слова являются правильными или почти правильными. ",
- "text_2_1": "находится в слове и в правильном месте! ",
- "text_2_2": "в слове, но не в правильном месте. ",
- "text_2_3": "нет в том, что вы пытаетесь догадаться. ",
- "text_3": "Новое слово будет доступно каждый день! "
+ "title": "Как играть",
+ "title_2": "Примеры",
+ "close": "Закройте это сообщение",
+ "text_1_1_1": "Угадать",
+ "text_1_1_2": "в шесть попыток или меньше.",
+ "text_1_2": "Каждое предположение должно быть действительным словом пять букв. Нажмите кнопку ENTER, чтобы отправить предположение.",
+ "text_1_3": "После того, как вы уже догадаетесь, плитка изменит цвет, чтобы указать, какие буквы вашего слова являются правильными или почти правильными.",
+ "text_2_1": "находится в слове и в правильном месте!",
+ "text_2_2": "в слове, но не в правильном месте.",
+ "text_2_3": "нет в том, что вы пытаетесь догадаться.",
+ "text_3": "Новое слово будет доступно каждый день!"
},
"ui": {
"settings": "Настройки",
"dark_mode": "Тёмный режим",
"dark_mode_desc": "Переключить тёмную тему",
- "haptic_feedback": "Тактильная отдача",
- "haptic_feedback_desc": "Вибрация при касании",
- "sound_effects": "Звуковые эффекты",
- "sound_effects_desc": "Звуки победы/поражения",
"right_to_left": "Справа налево",
"keyboard_layout": "Раскладка клавиатуры",
- "easy_mode": "Разрешить любое слово",
- "easy_mode_label": "лёгкий режим",
"install_app": "Установить приложение",
"install_app_desc": "Играйте офлайн и получите иконку",
"report_issue": "Сообщить о проблеме",
diff --git a/data/languages/rw/language_config.json b/data/languages/rw/language_config.json
index e32abb83..c75988ce 100644
--- a/data/languages/rw/language_config.json
+++ b/data/languages/rw/language_config.json
@@ -4,34 +4,34 @@
"name_native": "Ikinyarwanda",
"meta": {
"locale": "rw",
- "title": "Umukino wa buri munsi ",
- "description": "Tekereza ijambo ryihishe muri 6 rigerageza (cyangwa rike). Igikurushwa gishya kiraboneka buri munsi! ",
+ "title": "Umukino wa buri munsi",
+ "description": "Tekereza ijambo ryihishe muri 6 rigerageza (cyangwa rike). Igikurushwa gishya kiraboneka buri munsi!",
"keywords": "Ikinyarwanda, puzzle, ijambo, gukina, umukino, kumurongo, tekereza, buri munsi"
},
"text": {
"subheader": "Ikinyarwanda",
- "next_word": "Ijambo rikurikira ",
- "no_attempts": "Ntabwo wigeze ugerageza amagambo! ",
- "share": "Sangira ",
- "notification-copied": "Yandukuwe kuri clipboard ",
- "notification-partial-word": "Nyamuneka andika ijambo ryuzuye ",
+ "next_word": "Ijambo rikurikira",
+ "no_attempts": "Ntabwo wigeze ugerageza amagambo!",
+ "share": "Sangira",
"share_challenge_win": "Nasobanukiye Wordle y'uyu munsi mu bigerageza {n}. Urashobora kundusha?",
- "share_challenge_lose": "Sinashobotse gusobanukirwa Wordle y'uyu munsi. Urashobora?"
+ "share_challenge_lose": "Sinashobotse gusobanukirwa Wordle y'uyu munsi. Urashobora?",
+ "notification_copied": "Yandukuwe kuri clipboard",
+ "notification_partial_word": "Nyamuneka andika ijambo ryuzuye"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Uko bakina ",
- "title_2": "Ingero ",
- "close": "Funga ubu butumwa ",
- "text_1_1_1": "Tekereza ",
- "text_1_1_2": "mu bigeragezo bitandatu cyangwa bike. ",
- "text_1_2": "Buri wese akeka agomba kuba ijambo ryamagambo atanu yemewe. Kanda buto yinjira kugirango utange igitekerezo cyawe. ",
- "text_1_3": "Nyuma yo gukeka, amabati azahindura ibara kugirango yerekane inyuguti zijambo ryawe ariko cyangwa hafi yayo. ",
- "text_2_1": "iri mu Ijambo kandi ahantu heza! ",
- "text_2_2": "iri mu Ijambo, ariko ntabwo iri ahantu heza. ",
- "text_2_3": "ntabwo ahari mu Ijambo ugerageza gukeka. ",
- "text_3": "Ijambo rishya rizaboneka buri munsi! "
+ "title": "Uko bakina",
+ "title_2": "Ingero",
+ "close": "Funga ubu butumwa",
+ "text_1_1_1": "Tekereza",
+ "text_1_1_2": "mu bigeragezo bitandatu cyangwa bike.",
+ "text_1_2": "Buri wese akeka agomba kuba ijambo ryamagambo atanu yemewe. Kanda buto yinjira kugirango utange igitekerezo cyawe.",
+ "text_1_3": "Nyuma yo gukeka, amabati azahindura ibara kugirango yerekane inyuguti zijambo ryawe ariko cyangwa hafi yayo.",
+ "text_2_1": "iri mu Ijambo kandi ahantu heza!",
+ "text_2_2": "iri mu Ijambo, ariko ntabwo iri ahantu heza.",
+ "text_2_3": "ntabwo ahari mu Ijambo ugerageza gukeka.",
+ "text_3": "Ijambo rishya rizaboneka buri munsi!"
}
}
diff --git a/data/languages/sk/language_config.json b/data/languages/sk/language_config.json
index ded984b4..af42d6a7 100644
--- a/data/languages/sk/language_config.json
+++ b/data/languages/sk/language_config.json
@@ -5,48 +5,42 @@
"name_native": "slovenčina",
"meta": {
"locale": "sk",
- "title": "Denná slovná hra ",
- "description": "Hádajte skryté slovo v 6 pokusoch (alebo menej). Nové puzzle je k dispozícii každý deň! ",
+ "title": "Denná slovná hra",
+ "description": "Hádajte skryté slovo v 6 pokusoch (alebo menej). Nové puzzle je k dispozícii každý deň!",
"keywords": "slovenčina, puzzle, slovo, hra, hra, online, hádajte, denne"
},
"text": {
"subheader": "slovenčina",
- "next_word": "Ďalšie slovo ",
- "no_attempts": "Ešte ste neskúšali žiadne slová! ",
+ "next_word": "Ďalšie slovo",
+ "no_attempts": "Ešte ste neskúšali žiadne slová!",
"share": "Zdieľať",
- "notification-copied": "Skopírované do schránky ",
- "notification-partial-word": "Zadajte úplné slovo ",
"share_challenge_win": "Dnešný Wordle som vyriešil/a za {n} pokusov. Zvládneš to lepšie?",
- "share_challenge_lose": "Dnešný Wordle som nevyriešil/a. Zvládneš to ty?"
+ "share_challenge_lose": "Dnešný Wordle som nevyriešil/a. Zvládneš to ty?",
+ "notification_copied": "Skopírované do schránky",
+ "notification_partial_word": "Zadajte úplné slovo"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Ako hrať ",
- "title_2": "Príklady ",
- "close": "Zatvorte túto správu ",
- "text_1_1_1": "Hádajte ",
- "text_1_1_2": "v šiestich pokusoch alebo menej. ",
- "text_1_2": "Každý odhad musí byť platný päť písmenového slova. Ak chcete odoslať svoj odhad, stlačte tlačidlo ENTER. ",
- "text_1_3": "Potom, čo hádate, dlaždice zmenia farbu, aby indikuje, ktoré písmená vášho slova sú správne alebo takmer správne. ",
- "text_2_1": "je v slove av správnom mieste! ",
- "text_2_2": "je v slove, ale nie na správnom mieste. ",
- "text_2_3": "nie je prítomný v slove, o ktoré sa snažíte uhádnuť. ",
- "text_3": "Nové slovo bude k dispozícii každý deň! "
+ "title": "Ako hrať",
+ "title_2": "Príklady",
+ "close": "Zatvorte túto správu",
+ "text_1_1_1": "Hádajte",
+ "text_1_1_2": "v šiestich pokusoch alebo menej.",
+ "text_1_2": "Každý odhad musí byť platný päť písmenového slova. Ak chcete odoslať svoj odhad, stlačte tlačidlo ENTER.",
+ "text_1_3": "Potom, čo hádate, dlaždice zmenia farbu, aby indikuje, ktoré písmená vášho slova sú správne alebo takmer správne.",
+ "text_2_1": "je v slove av správnom mieste!",
+ "text_2_2": "je v slove, ale nie na správnom mieste.",
+ "text_2_3": "nie je prítomný v slove, o ktoré sa snažíte uhádnuť.",
+ "text_3": "Nové slovo bude k dispozícii každý deň!"
},
"ui": {
"settings": "Nastavenia",
"dark_mode": "Tmavý režim",
"dark_mode_desc": "Prepnúť tmavú tému",
- "haptic_feedback": "Haptická odozva",
- "haptic_feedback_desc": "Vibrácie pri dotyku",
- "sound_effects": "Zvukové efekty",
- "sound_effects_desc": "Zvuky výhry/prehry",
"right_to_left": "Sprava doľava",
"keyboard_layout": "Rozloženie klávesnice",
- "easy_mode": "Povoliť akékoľvek slovo",
- "easy_mode_label": "jednoduchý režim",
"install_app": "Inštalovať aplikáciu",
"install_app_desc": "Hraj offline a získaj ikonu",
"report_issue": "Nahlásiť problém",
diff --git a/data/languages/sl/language_config.json b/data/languages/sl/language_config.json
index ba03ab3f..3d194901 100644
--- a/data/languages/sl/language_config.json
+++ b/data/languages/sl/language_config.json
@@ -5,34 +5,34 @@
"name_native": "Slovenski jezik",
"meta": {
"locale": "sl",
- "title": "Dnevna beseda ",
- "description": "Ugani skrito besedo v 6 poskusih (ali manj). Vsak dan je na voljo nova uganka! ",
+ "title": "Dnevna beseda",
+ "description": "Ugani skrito besedo v 6 poskusih (ali manj). Vsak dan je na voljo nova uganka!",
"keywords": "Slovenski jezik, Puzzle, Word, Play, Igra, Online, Ugani, dnevno"
},
"text": {
"subheader": "Slovenski jezik",
- "next_word": "Naslednja beseda ",
- "no_attempts": "Še niste poskusili nobenih besed! ",
+ "next_word": "Naslednja beseda",
+ "no_attempts": "Še niste poskusili nobenih besed!",
"share": "Deli",
- "notification-copied": "Kopirano v odložišče ",
- "notification-partial-word": "Vnesite polno besedo ",
"share_challenge_win": "Današnji Wordle sem rešil/a v {n} poskusih. Ali zmoreš bolje?",
- "share_challenge_lose": "Današnjega Wordle nisem rešil/a. Ali ti zmoreš?"
+ "share_challenge_lose": "Današnjega Wordle nisem rešil/a. Ali ti zmoreš?",
+ "notification_copied": "Kopirano v odložišče",
+ "notification_partial_word": "Vnesite polno besedo"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Kako igrati ",
- "title_2": "Primeri ",
- "close": "Zapri to sporočilo ",
- "text_1_1_1": "Ugani ",
- "text_1_1_2": "v šestih poskusih ali manj. ",
- "text_1_2": "Vsaka uganka mora biti veljavna beseda pet črk. Pritisnite gumb ENTER, da pošljete ugibanje. ",
- "text_1_3": "Ko boste uganili, bodo ploščice spremenile barvo, ki označujejo, katere črke vaše besede so pravilne ali skoraj pravilne. ",
- "text_2_1": "je v besedi in na pravi lokaciji! ",
- "text_2_2": "je v besedi, vendar ne na pravi lokaciji. ",
- "text_2_3": "ni prisotna v besedi, ki jo poskušate uganiti. ",
- "text_3": "Vsak dan bo na voljo nova beseda! "
+ "title": "Kako igrati",
+ "title_2": "Primeri",
+ "close": "Zapri to sporočilo",
+ "text_1_1_1": "Ugani",
+ "text_1_1_2": "v šestih poskusih ali manj.",
+ "text_1_2": "Vsaka uganka mora biti veljavna beseda pet črk. Pritisnite gumb ENTER, da pošljete ugibanje.",
+ "text_1_3": "Ko boste uganili, bodo ploščice spremenile barvo, ki označujejo, katere črke vaše besede so pravilne ali skoraj pravilne.",
+ "text_2_1": "je v besedi in na pravi lokaciji!",
+ "text_2_2": "je v besedi, vendar ne na pravi lokaciji.",
+ "text_2_3": "ni prisotna v besedi, ki jo poskušate uganiti.",
+ "text_3": "Vsak dan bo na voljo nova beseda!"
}
}
diff --git a/data/languages/sq/language_config.json b/data/languages/sq/language_config.json
index bd281a5e..c28f141b 100644
--- a/data/languages/sq/language_config.json
+++ b/data/languages/sq/language_config.json
@@ -20,9 +20,9 @@
"share": "Ndaj",
"shared": "U nda!",
"copied": "U kopjua!",
- "notification-copied": "U kopjua në clipboard",
- "notification-word-not-valid": "Fjala nuk është e vlefshme",
- "notification-partial-word": "Shkruani një fjalë të plotë"
+ "notification_copied": "U kopjua në clipboard",
+ "notification_word_not_valid": "Fjala nuk është e vlefshme",
+ "notification_partial_word": "Shkruani një fjalë të plotë"
},
"help": {
"title": "Si të Luani",
diff --git a/data/languages/sr/language_config.json b/data/languages/sr/language_config.json
index 58c5e3a6..1cb24cdb 100644
--- a/data/languages/sr/language_config.json
+++ b/data/languages/sr/language_config.json
@@ -6,48 +6,42 @@
"meta": {
"locale": "sr",
"wordle_native": "вордл",
- "title": "Дневна игра речи ",
- "description": "Погоди скривену реч у 6 покушаја (или мање). Нова загонетка је доступна сваки дан! ",
+ "title": "Дневна игра речи",
+ "description": "Погоди скривену реч у 6 покушаја (или мање). Нова загонетка је доступна сваки дан!",
"keywords": "српски језик, загонетка, Ворд, Плаи, Гаме, Онлине, Гуесс, Даили"
},
"text": {
"subheader": "српски језик",
- "next_word": "Следећа реч ",
- "no_attempts": "Још нисте пробали никакве речи! ",
- "share": "Објави ",
- "notification-copied": "Копирано у међуспремник ",
- "notification-partial-word": "Унесите целу реч ",
+ "next_word": "Следећа реч",
+ "no_attempts": "Још нисте пробали никакве речи!",
+ "share": "Објави",
"share_challenge_win": "Решио/ла сам данашњи Wordle за {n} покушаја. Можеш ли боље?",
- "share_challenge_lose": "Нисам решио/ла данашњи Wordle. Можеш ли ти?"
+ "share_challenge_lose": "Нисам решио/ла данашњи Wordle. Можеш ли ти?",
+ "notification_copied": "Копирано у међуспремник",
+ "notification_partial_word": "Унесите целу реч"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Како играти ",
- "title_2": "Примери ",
- "close": "Затворите ову поруку ",
- "text_1_1_1": "Погодити ",
- "text_1_1_2": "у шест покушаја или мање. ",
- "text_1_2": "Свака претпоставка мора бити валидна реч са пет слова. Притисните тастер Ентер да бисте поднели погодак. ",
- "text_1_3": "Након што погодите, плочице ће променити боју да указују на која су слова ваше речи тачна или готово тачна. ",
- "text_2_1": "је у Речи и на тачној локацији! ",
- "text_2_2": "је у Речи, али не на тачној локацији. ",
- "text_2_3": "није присутан у речи коју покушавате погодити. ",
- "text_3": "Нова реч ће бити доступна сваки дан! "
+ "title": "Како играти",
+ "title_2": "Примери",
+ "close": "Затворите ову поруку",
+ "text_1_1_1": "Погодити",
+ "text_1_1_2": "у шест покушаја или мање.",
+ "text_1_2": "Свака претпоставка мора бити валидна реч са пет слова. Притисните тастер Ентер да бисте поднели погодак.",
+ "text_1_3": "Након што погодите, плочице ће променити боју да указују на која су слова ваше речи тачна или готово тачна.",
+ "text_2_1": "је у Речи и на тачној локацији!",
+ "text_2_2": "је у Речи, али не на тачној локацији.",
+ "text_2_3": "није присутан у речи коју покушавате погодити.",
+ "text_3": "Нова реч ће бити доступна сваки дан!"
},
"ui": {
"settings": "Подешавања",
"dark_mode": "Тамни режим",
"dark_mode_desc": "Укључи тамну тему",
- "haptic_feedback": "Хаптичка повратна информација",
- "haptic_feedback_desc": "Вибрација при додиру",
- "sound_effects": "Звучни ефекти",
- "sound_effects_desc": "Звуци победе/пораза",
"right_to_left": "С десна на лево",
"keyboard_layout": "Распоред тастатуре",
- "easy_mode": "Дозволи било коју реч",
- "easy_mode_label": "лак режим",
"install_app": "Инсталирај апликацију",
"install_app_desc": "Играј офлајн и добиј иконицу",
"report_issue": "Пријави проблем",
diff --git a/data/languages/sv/language_config.json b/data/languages/sv/language_config.json
index 7326ce6c..cecff71c 100644
--- a/data/languages/sv/language_config.json
+++ b/data/languages/sv/language_config.json
@@ -11,42 +11,36 @@
},
"text": {
"subheader": "Svenska",
- "next_word": "Nästa ord ",
- "no_attempts": "Du har inte försökt några ord än! ",
+ "next_word": "Nästa ord",
+ "no_attempts": "Du har inte försökt några ord än!",
"share": "Dela",
- "notification-copied": "Kopierat till urklipp ",
- "notification-partial-word": "Vänligen ange ett helt ord ",
"share_challenge_win": "Jag löste dagens Wordle på {n} försök. Kan du slå mig?",
- "share_challenge_lose": "Jag klarade inte dagens Wordle. Kan du?"
+ "share_challenge_lose": "Jag klarade inte dagens Wordle. Kan du?",
+ "notification_copied": "Kopierat till urklipp",
+ "notification_partial_word": "Vänligen ange ett helt ord"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Hur man spelar ",
- "title_2": "Exempel ",
- "close": "Stäng det här meddelandet ",
- "text_1_1_1": "Gissa ",
- "text_1_1_2": "på sex försök eller mindre. ",
- "text_1_2": "Varje gissning måste vara ett giltigt ord på fem bokstäver. Tryck på ENTER-knappen för att skicka in din gissning. ",
- "text_1_3": "När du har gissat, kommer plattorna att ändra färg för att ange vilka bokstäver i ditt ord som är korrekta eller nästan korrekta. ",
- "text_2_1": "är i ordet och på rätt plats! ",
- "text_2_2": "är i ordet, men inte på rätt plats. ",
- "text_2_3": "finns inte i det ord du försöker gissa. ",
- "text_3": "Ett nytt ord kommer att finnas tillgängligt varje dag! "
+ "title": "Hur man spelar",
+ "title_2": "Exempel",
+ "close": "Stäng det här meddelandet",
+ "text_1_1_1": "Gissa",
+ "text_1_1_2": "på sex försök eller mindre.",
+ "text_1_2": "Varje gissning måste vara ett giltigt ord på fem bokstäver. Tryck på ENTER-knappen för att skicka in din gissning.",
+ "text_1_3": "När du har gissat, kommer plattorna att ändra färg för att ange vilka bokstäver i ditt ord som är korrekta eller nästan korrekta.",
+ "text_2_1": "är i ordet och på rätt plats!",
+ "text_2_2": "är i ordet, men inte på rätt plats.",
+ "text_2_3": "finns inte i det ord du försöker gissa.",
+ "text_3": "Ett nytt ord kommer att finnas tillgängligt varje dag!"
},
"ui": {
"settings": "Inställningar",
"dark_mode": "Mörkt läge",
"dark_mode_desc": "Växla mörkt tema",
- "haptic_feedback": "Haptisk feedback",
- "haptic_feedback_desc": "Vibration vid beröring",
- "sound_effects": "Ljudeffekter",
- "sound_effects_desc": "Vinst-/förlustljud",
"right_to_left": "Höger till vänster",
"keyboard_layout": "Tangentbordslayout",
- "easy_mode": "Tillåt alla ord",
- "easy_mode_label": "enkelt läge",
"install_app": "Installera app",
"install_app_desc": "Spela offline & få appikon",
"report_issue": "Rapportera ett problem",
diff --git a/data/languages/sw/language_config.json b/data/languages/sw/language_config.json
index 788388f1..5a7111e7 100644
--- a/data/languages/sw/language_config.json
+++ b/data/languages/sw/language_config.json
@@ -15,10 +15,10 @@
"next_word": "Neno linalofuata",
"no_attempts": "Bado hujajaribu neno lolote!",
"share": "Shiriki",
- "notification-copied": "Imenakiliwa kwenye ubao wa kunakili",
- "notification-partial-word": "Tafadhali ingiza neno kamili",
"share_challenge_win": "Nimetatua Wordle leo katika majaribio {n}. Je, wewe ni bora zaidi?",
- "share_challenge_lose": "Sikuweza kutatua Wordle leo. Je, unaweza?"
+ "share_challenge_lose": "Sikuweza kutatua Wordle leo. Je, unaweza?",
+ "notification_copied": "Imenakiliwa kwenye ubao wa kunakili",
+ "notification_partial_word": "Tafadhali ingiza neno kamili"
},
"language_code_3": "",
"language_code_iso_639_3": "swh",
@@ -40,14 +40,8 @@
"settings": "Mipangilio",
"dark_mode": "Hali ya giza",
"dark_mode_desc": "Badilisha mandhari ya giza",
- "haptic_feedback": "Mrejesho wa kugusa",
- "haptic_feedback_desc": "Tetema unapogusa",
- "sound_effects": "Athari za sauti",
- "sound_effects_desc": "Sauti za kushinda/kushindwa",
"right_to_left": "Kulia kwenda kushoto",
"keyboard_layout": "Mpangilio wa kibodi",
- "easy_mode": "Ruhusu maneno yote",
- "easy_mode_label": "hali rahisi",
"install_app": "Sakinisha programu",
"install_app_desc": "Cheza nje ya mtandao na pata aikoni",
"report_issue": "Ripoti tatizo",
diff --git a/data/languages/tk/language_config.json b/data/languages/tk/language_config.json
index 9961b2ee..84e5205a 100644
--- a/data/languages/tk/language_config.json
+++ b/data/languages/tk/language_config.json
@@ -5,34 +5,34 @@
"name_native": "Türkmençe",
"meta": {
"locale": "tk",
- "title": "Gündelik söz oýny ",
- "description": "6 synanyşykda gizlin sözi çaklaň (ýa-da az). Her gün täze tapma bar! ",
+ "title": "Gündelik söz oýny",
+ "description": "6 synanyşykda gizlin sözi çaklaň (ýa-da az). Her gün täze tapma bar!",
"keywords": "Türkmençe, Puzza, söz, oýun, oýna, onlaýn, onlaýn-günlerde"
},
"text": {
"subheader": "Türkmençe",
- "next_word": "Indiki söz ",
- "no_attempts": "Entek hiç hili söz synap görmediň! ",
- "share": "Paýlaş ",
- "notification-copied": "Paneline göçürildi ",
- "notification-partial-word": "Doly söz ýazmagyňyzy haýyş edýäris ",
+ "next_word": "Indiki söz",
+ "no_attempts": "Entek hiç hili söz synap görmediň!",
+ "share": "Paýlaş",
"share_challenge_win": "Şu günki Wordle-ni {n} synanyşykda tapdym. Sen menden gowy edip bilermiň?",
- "share_challenge_lose": "Şu günki Wordle-ni tapyp bilmedim. Sen tapyp bilermiň?"
+ "share_challenge_lose": "Şu günki Wordle-ni tapyp bilmedim. Sen tapyp bilermiň?",
+ "notification_copied": "Paneline göçürildi",
+ "notification_partial_word": "Doly söz ýazmagyňyzy haýyş edýäris"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Nädip oýnamaly ",
- "title_2": "Mysallar ",
- "close": "Bu habary ýapyň ",
- "text_1_1_1": "Çaklaň ",
- "text_1_1_2": "alty synanyşykda ýa-da ondanam az. ",
- "text_1_2": "Her çaklama, dogry bäş harply söz bolmaly. Pikiriňizi ibermek üçin ENTER düwmesini basyň. ",
- "text_1_3": "Siziň çakyňyzdan soň, plitkalar siziň sözüňiziň haýsy harplarynyň dogrudygyny ýa-da diýen ýalydygyny görkezmek üçin reňk çalşylar. ",
- "text_2_1": "sözünde we dogry ýerde! ",
- "text_2_2": "sözünde, ýöne dogry ýerde däl. ",
- "text_2_3": "çaklamaga synanyşýan sözüňizde ýok. ",
- "text_3": "Her gün täze söz bolar! "
+ "title": "Nädip oýnamaly",
+ "title_2": "Mysallar",
+ "close": "Bu habary ýapyň",
+ "text_1_1_1": "Çaklaň",
+ "text_1_1_2": "alty synanyşykda ýa-da ondanam az.",
+ "text_1_2": "Her çaklama, dogry bäş harply söz bolmaly. Pikiriňizi ibermek üçin ENTER düwmesini basyň.",
+ "text_1_3": "Siziň çakyňyzdan soň, plitkalar siziň sözüňiziň haýsy harplarynyň dogrudygyny ýa-da diýen ýalydygyny görkezmek üçin reňk çalşylar.",
+ "text_2_1": "sözünde we dogry ýerde!",
+ "text_2_2": "sözünde, ýöne dogry ýerde däl.",
+ "text_2_3": "çaklamaga synanyşýan sözüňizde ýok.",
+ "text_3": "Her gün täze söz bolar!"
}
}
diff --git a/data/languages/tl/language_config.json b/data/languages/tl/language_config.json
index a0dc8523..db9311dc 100644
--- a/data/languages/tl/language_config.json
+++ b/data/languages/tl/language_config.json
@@ -20,9 +20,9 @@
"share": "Ibahagi",
"shared": "Naibahagi!",
"copied": "Nakopya!",
- "notification-copied": "Nakopya sa clipboard",
- "notification-word-not-valid": "Hindi valid ang salita",
- "notification-partial-word": "Maglagay ng buong salita"
+ "notification_copied": "Nakopya sa clipboard",
+ "notification_word_not_valid": "Hindi valid ang salita",
+ "notification_partial_word": "Maglagay ng buong salita"
},
"help": {
"title": "Paano Maglaro",
@@ -42,8 +42,6 @@
"dark_mode": "Dark Mode",
"dark_mode_desc": "I-toggle ang dark theme",
"keyboard_layout": "Layout ng keyboard",
- "easy_mode": "Payagan lahat ng salita",
- "easy_mode_label": "madaling mode",
"install_app": "I-install ang App",
"games": "Mga Laro",
"win_percent": "% Panalo",
diff --git a/data/languages/tlh/language_config.json b/data/languages/tlh/language_config.json
index df07b0d6..16f99c6c 100644
--- a/data/languages/tlh/language_config.json
+++ b/data/languages/tlh/language_config.json
@@ -10,13 +10,13 @@
},
"text": {
"subheader": "tlhIngan",
- "next_word": "Next word ",
- "no_attempts": "You haven't tried any words yet! ",
- "share": "Share ",
- "notification-copied": "Copied to clipboard ",
- "notification-partial-word": "Please enter a full word ",
+ "next_word": "Next word",
+ "no_attempts": "You haven't tried any words yet!",
+ "share": "Share",
"share_challenge_win": "DaHjaj Wordle {n} nIDmeH vImughta'. chobejlaH'a'?",
- "share_challenge_lose": "DaHjaj Wordle vImughbe'. bImughlaH'a'?"
+ "share_challenge_lose": "DaHjaj Wordle vImughbe'. bImughlaH'a'?",
+ "notification_copied": "Copied to clipboard",
+ "notification_partial_word": "Please enter a full word"
},
"language_code_3": "",
"language_code_iso_639_3": "",
diff --git a/data/languages/tr/language_config.json b/data/languages/tr/language_config.json
index 2ae088ab..1f4f21fb 100644
--- a/data/languages/tr/language_config.json
+++ b/data/languages/tr/language_config.json
@@ -5,48 +5,42 @@
"name_native": "Türkçe",
"meta": {
"locale": "tr",
- "title": "Günlük kelime oyunu ",
- "description": "6'daki gizli kelimeyi sanırım (veya daha az). Her gün yeni bir bulmaca mevcuttur! ",
+ "title": "Günlük kelime oyunu",
+ "description": "6'daki gizli kelimeyi sanırım (veya daha az). Her gün yeni bir bulmaca mevcuttur!",
"keywords": "Türkçe, bulmaca, kelime, oyun, oyun, çevrimiçi, her gün tahmin"
},
"text": {
"subheader": "Türkçe",
- "next_word": "Sonraki kelime ",
- "no_attempts": "Henüz hiçbir söz denemedin! ",
- "share": "Paylaş ",
- "notification-copied": "Panoya kopyalandı ",
- "notification-partial-word": "Lütfen tam bir kelime girin ",
+ "next_word": "Sonraki kelime",
+ "no_attempts": "Henüz hiçbir söz denemedin!",
+ "share": "Paylaş",
"share_challenge_win": "Bugünkü Wordle'ı {n} denemede çözdüm. Beni yenebilir misin?",
- "share_challenge_lose": "Bugünkü Wordle'ı çözemedim. Sen çözebilir misin?"
+ "share_challenge_lose": "Bugünkü Wordle'ı çözemedim. Sen çözebilir misin?",
+ "notification_copied": "Panoya kopyalandı",
+ "notification_partial_word": "Lütfen tam bir kelime girin"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Nasıl oynanır ",
- "title_2": "Örnekler ",
- "close": "Bu mesajı kapat ",
- "text_1_1_1": "Tahmin et ",
- "text_1_1_2": "altıda deneme veya daha az. ",
- "text_1_2": "Her tahmin geçerli bir beş harfli kelime olmalıdır. Tahmini göndermek için ENTER düğmesine basın. ",
- "text_1_3": "Tahmin ettikten sonra, karolar kelimenizin hangi harflerin doğru veya neredeyse doğru olduğunu belirtmek için rengini değiştirecektir. ",
- "text_2_1": "kelimede ve doğru konumda! ",
- "text_2_2": "kelimede, ancak doğru yerde değil. ",
- "text_2_3": "tahmin etmeye çalıştığınız kelimede bulunmuyor. ",
- "text_3": "Her gün yeni bir kelime hazır olacak! "
+ "title": "Nasıl oynanır",
+ "title_2": "Örnekler",
+ "close": "Bu mesajı kapat",
+ "text_1_1_1": "Tahmin et",
+ "text_1_1_2": "altıda deneme veya daha az.",
+ "text_1_2": "Her tahmin geçerli bir beş harfli kelime olmalıdır. Tahmini göndermek için ENTER düğmesine basın.",
+ "text_1_3": "Tahmin ettikten sonra, karolar kelimenizin hangi harflerin doğru veya neredeyse doğru olduğunu belirtmek için rengini değiştirecektir.",
+ "text_2_1": "kelimede ve doğru konumda!",
+ "text_2_2": "kelimede, ancak doğru yerde değil.",
+ "text_2_3": "tahmin etmeye çalıştığınız kelimede bulunmuyor.",
+ "text_3": "Her gün yeni bir kelime hazır olacak!"
},
"ui": {
"settings": "Ayarlar",
"dark_mode": "Karanlık Mod",
"dark_mode_desc": "Karanlık temayı aç/kapat",
- "haptic_feedback": "Dokunsal Geri Bildirim",
- "haptic_feedback_desc": "Dokunuşta titreşim",
- "sound_effects": "Ses Efektleri",
- "sound_effects_desc": "Kazanma/kaybetme sesleri",
"right_to_left": "Sağdan sola",
"keyboard_layout": "Klavye düzeni",
- "easy_mode": "Herhangi bir kelimeye izin ver",
- "easy_mode_label": "kolay mod",
"install_app": "Uygulamayı Yükle",
"install_app_desc": "Çevrimdışı oyna ve uygulama simgesi al",
"report_issue": "Sorun Bildir",
diff --git a/data/languages/uk/language_config.json b/data/languages/uk/language_config.json
index 827485e4..5d703e52 100644
--- a/data/languages/uk/language_config.json
+++ b/data/languages/uk/language_config.json
@@ -5,48 +5,42 @@
"meta": {
"locale": "uk",
"wordle_native": "вордл",
- "title": "Щоденне слово ",
- "description": "Вгадайте приховане слово в 6 спроб (або менше). Нова головоломка доступна щодня! ",
+ "title": "Щоденне слово",
+ "description": "Вгадайте приховане слово в 6 спроб (або менше). Нова головоломка доступна щодня!",
"keywords": "Українська, Головоломка, слово, гра, гра, онлайн, здогадка, щодня"
},
"text": {
"subheader": "Українська",
- "next_word": "Наступне слово ",
- "no_attempts": "Ви ще не пробували жодних слів! ",
+ "next_word": "Наступне слово",
+ "no_attempts": "Ви ще не пробували жодних слів!",
"share": "Поділитися",
- "notification-copied": "Скопійовано в буфер обміну ",
- "notification-partial-word": "Введіть повне слово ",
"share_challenge_win": "Я розв'язав/ла сьогоднішній Wordle за {n} спроб. Зможеш краще?",
- "share_challenge_lose": "Я не розв'язав/ла сьогоднішній Wordle. А ти зможеш?"
+ "share_challenge_lose": "Я не розв'язав/ла сьогоднішній Wordle. А ти зможеш?",
+ "notification_copied": "Скопійовано в буфер обміну",
+ "notification_partial_word": "Введіть повне слово"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Як грати ",
- "title_2": "Приклади ",
- "close": "Закрити це повідомлення ",
- "text_1_1_1": "Здогадатися ",
- "text_1_1_2": "в шести спробував або менше. ",
- "text_1_2": "Кожна здогадка повинна бути дійсним п'ятьм словом. Натисніть кнопку ENTER, щоб надіслати вашу думку. ",
- "text_1_3": "Після того, як ви здогадуєтеся, плитки змінить колір, щоб вказати, які літери вашого слова правильні або майже правильні. ",
- "text_2_1": "це слово і в правильному місці! ",
- "text_2_2": "це слово, але не в правильному місці. ",
- "text_2_3": "не присутній у слові, який ви намагаєтеся здогадатися. ",
- "text_3": "Нове слово буде доступним щодня! "
+ "title": "Як грати",
+ "title_2": "Приклади",
+ "close": "Закрити це повідомлення",
+ "text_1_1_1": "Здогадатися",
+ "text_1_1_2": "в шести спробував або менше.",
+ "text_1_2": "Кожна здогадка повинна бути дійсним п'ятьм словом. Натисніть кнопку ENTER, щоб надіслати вашу думку.",
+ "text_1_3": "Після того, як ви здогадуєтеся, плитки змінить колір, щоб вказати, які літери вашого слова правильні або майже правильні.",
+ "text_2_1": "це слово і в правильному місці!",
+ "text_2_2": "це слово, але не в правильному місці.",
+ "text_2_3": "не присутній у слові, який ви намагаєтеся здогадатися.",
+ "text_3": "Нове слово буде доступним щодня!"
},
"ui": {
"settings": "Налаштування",
"dark_mode": "Темний режим",
"dark_mode_desc": "Перемкнути темну тему",
- "haptic_feedback": "Тактильний відгук",
- "haptic_feedback_desc": "Вібрація при дотику",
- "sound_effects": "Звукові ефекти",
- "sound_effects_desc": "Звуки перемоги/поразки",
"right_to_left": "Справа наліво",
"keyboard_layout": "Розкладка клавіатури",
- "easy_mode": "Дозволити будь-яке слово",
- "easy_mode_label": "легкий режим",
"install_app": "Встановити додаток",
"install_app_desc": "Грайте офлайн та отримайте іконку",
"report_issue": "Повідомити про проблему",
diff --git a/data/languages/ur/language_config.json b/data/languages/ur/language_config.json
index b98c269c..20598f0d 100644
--- a/data/languages/ur/language_config.json
+++ b/data/languages/ur/language_config.json
@@ -20,9 +20,9 @@
"share": "شیئر کریں",
"shared": "شیئر ہو گیا!",
"copied": "کاپی ہو گیا!",
- "notification-copied": "کلپ بورڈ پر کاپی ہو گیا",
- "notification-word-not-valid": "لفظ درست نہیں ہے",
- "notification-partial-word": "براہ کرم مکمل لفظ درج کریں"
+ "notification_copied": "کلپ بورڈ پر کاپی ہو گیا",
+ "notification_word_not_valid": "لفظ درست نہیں ہے",
+ "notification_partial_word": "براہ کرم مکمل لفظ درج کریں"
},
"help": {
"title": "کیسے کھیلیں",
@@ -43,8 +43,6 @@
"dark_mode_desc": "ڈارک تھیم تبدیل کریں",
"right_to_left": "دائیں سے بائیں",
"keyboard_layout": "کی بورڈ ترتیب",
- "easy_mode": "تمام الفاظ کی اجازت دیں",
- "easy_mode_label": "آسان موڈ",
"install_app": "ایپ انسٹال کریں",
"games": "کھیل",
"win_percent": "% جیت",
diff --git a/data/languages/uz/language_config.json b/data/languages/uz/language_config.json
index ccd8adf1..9377c5ff 100644
--- a/data/languages/uz/language_config.json
+++ b/data/languages/uz/language_config.json
@@ -16,9 +16,9 @@
"next_word": "Keyingi soʻz",
"no_attempts": "Siz hali birorta soʻz sinab koʻrmadingiz!",
"share": "Ulashish",
- "notification-copied": "Buferga nusxalandi",
- "notification-word-not-valid": "Soʻz yaroqsiz",
- "notification-partial-word": "Toʻliq soʻz kiriting"
+ "notification_copied": "Buferga nusxalandi",
+ "notification_word_not_valid": "Soʻz yaroqsiz",
+ "notification_partial_word": "Toʻliq soʻz kiriting"
},
"help": {
"title": "Qanday oʻynash kerak",
diff --git a/data/languages/vi/language_config.json b/data/languages/vi/language_config.json
index f0fd35ca..c286cf65 100644
--- a/data/languages/vi/language_config.json
+++ b/data/languages/vi/language_config.json
@@ -4,59 +4,127 @@
"timezone": "Asia/Ho_Chi_Minh",
"name_native": "Tiếng Việt",
"diacritic_map": {
- "a": ["à", "á", "ả", "ã", "ạ", "ă", "ắ", "ằ", "ẳ", "ẵ", "ặ", "â", "ấ", "ầ", "ẩ", "ẫ", "ậ"],
- "e": ["è", "é", "ẻ", "ẽ", "ẹ", "ê", "ế", "ề", "ể", "ễ", "ệ"],
- "i": ["ì", "í", "ỉ", "ĩ", "ị"],
- "o": ["ò", "ó", "ỏ", "õ", "ọ", "ô", "ố", "ồ", "ổ", "ỗ", "ộ", "ơ", "ớ", "ờ", "ở", "ỡ", "ợ"],
- "u": ["ù", "ú", "ủ", "ũ", "ụ", "ư", "ứ", "ừ", "ử", "ữ", "ự"],
- "y": ["ỳ", "ý", "ỷ", "ỹ", "ỵ"],
- "d": ["đ"]
+ "a": [
+ "à",
+ "á",
+ "ả",
+ "ã",
+ "ạ",
+ "ă",
+ "ắ",
+ "ằ",
+ "ẳ",
+ "ẵ",
+ "ặ",
+ "â",
+ "ấ",
+ "ầ",
+ "ẩ",
+ "ẫ",
+ "ậ"
+ ],
+ "e": [
+ "è",
+ "é",
+ "ẻ",
+ "ẽ",
+ "ẹ",
+ "ê",
+ "ế",
+ "ề",
+ "ể",
+ "ễ",
+ "ệ"
+ ],
+ "i": [
+ "ì",
+ "í",
+ "ỉ",
+ "ĩ",
+ "ị"
+ ],
+ "o": [
+ "ò",
+ "ó",
+ "ỏ",
+ "õ",
+ "ọ",
+ "ô",
+ "ố",
+ "ồ",
+ "ổ",
+ "ỗ",
+ "ộ",
+ "ơ",
+ "ớ",
+ "ờ",
+ "ở",
+ "ỡ",
+ "ợ"
+ ],
+ "u": [
+ "ù",
+ "ú",
+ "ủ",
+ "ũ",
+ "ụ",
+ "ư",
+ "ứ",
+ "ừ",
+ "ử",
+ "ữ",
+ "ự"
+ ],
+ "y": [
+ "ỳ",
+ "ý",
+ "ỷ",
+ "ỹ",
+ "ỵ"
+ ],
+ "d": [
+ "đ"
+ ]
},
"hide_diacritic_hints": true,
"meta": {
"locale": "vi",
- "title": "Trò chơi Word hàng ngày ",
- "description": "Đoán từ ẩn trong 6 lần thử (hoặc ít hơn). Một câu đố mới có sẵn mỗi ngày! ",
+ "title": "Trò chơi Word hàng ngày",
+ "description": "Đoán từ ẩn trong 6 lần thử (hoặc ít hơn). Một câu đố mới có sẵn mỗi ngày!",
"keywords": "Tiếng Việt, câu đố, từ, chơi, trò chơi, trực tuyến, đoán, hàng ngày"
},
"text": {
"subheader": "Tiếng Việt",
- "next_word": "Từ tiếp theo ",
- "no_attempts": "Bạn chưa thử bất kỳ từ nào! ",
+ "next_word": "Từ tiếp theo",
+ "no_attempts": "Bạn chưa thử bất kỳ từ nào!",
"share": "Chia sẻ",
- "notification-copied": "Sao chép vào clipboard ",
- "notification-partial-word": "Vui lòng nhập một từ đầy đủ ",
"share_challenge_win": "Tôi đã giải Wordle hôm nay trong {n} lần thử. Bạn có giỏi hơn không?",
- "share_challenge_lose": "Tôi không giải được Wordle hôm nay. Bạn có thể không?"
+ "share_challenge_lose": "Tôi không giải được Wordle hôm nay. Bạn có thể không?",
+ "notification_copied": "Sao chép vào clipboard",
+ "notification_partial_word": "Vui lòng nhập một từ đầy đủ"
},
"language_code_3": "",
"language_code_iso_639_3": "",
"right_to_left": "false",
"help": {
- "title": "Cách chơi ",
- "title_2": "Ví dụ ",
- "close": "Đóng tin nhắn này ",
- "text_1_1_1": "Đoán xem ",
- "text_1_1_2": "trong sáu lần thử hoặc ít hơn. ",
- "text_1_2": "Mỗi đoán phải là một từ năm chữ cái hợp lệ. Nhấn nút ENTER để gửi dự đoán của bạn. ",
- "text_1_3": "Sau khi bạn đoán, các ô sẽ thay đổi màu sắc để cho biết chữ cái nào của từ của bạn là chính xác hoặc gần như đúng. ",
- "text_2_1": "là trong từ và ở vị trí chính xác! ",
- "text_2_2": "là trong từ, nhưng không phải ở vị trí chính xác. ",
- "text_2_3": "không có mặt trong từ bạn đang cố đoán. ",
- "text_3": "Một từ mới sẽ có sẵn mỗi ngày! "
+ "title": "Cách chơi",
+ "title_2": "Ví dụ",
+ "close": "Đóng tin nhắn này",
+ "text_1_1_1": "Đoán xem",
+ "text_1_1_2": "trong sáu lần thử hoặc ít hơn.",
+ "text_1_2": "Mỗi đoán phải là một từ năm chữ cái hợp lệ. Nhấn nút ENTER để gửi dự đoán của bạn.",
+ "text_1_3": "Sau khi bạn đoán, các ô sẽ thay đổi màu sắc để cho biết chữ cái nào của từ của bạn là chính xác hoặc gần như đúng.",
+ "text_2_1": "là trong từ và ở vị trí chính xác!",
+ "text_2_2": "là trong từ, nhưng không phải ở vị trí chính xác.",
+ "text_2_3": "không có mặt trong từ bạn đang cố đoán.",
+ "text_3": "Một từ mới sẽ có sẵn mỗi ngày!"
},
"ui": {
"settings": "Cài đặt",
"dark_mode": "Chế độ tối",
"dark_mode_desc": "Chuyển đổi giao diện tối",
- "haptic_feedback": "Phản hồi xúc giác",
- "haptic_feedback_desc": "Rung khi chạm",
- "sound_effects": "Hiệu ứng âm thanh",
- "sound_effects_desc": "Âm thanh thắng/thua",
"right_to_left": "Phải sang trái",
"keyboard_layout": "Bố cục bàn phím",
- "easy_mode": "Cho phép mọi từ",
- "easy_mode_label": "chế độ dễ",
"install_app": "Cài đặt ứng dụng",
"install_app_desc": "Chơi ngoại tuyến và nhận biểu tượng",
"report_issue": "Báo cáo sự cố",
diff --git a/data/languages/yo/language_config.json b/data/languages/yo/language_config.json
index d9d4ce2c..8eb271e3 100644
--- a/data/languages/yo/language_config.json
+++ b/data/languages/yo/language_config.json
@@ -46,9 +46,9 @@
"next_word": "Ọ̀rọ̀ tó kàn",
"no_attempts": "O kò tíì gbìyànjú ọ̀rọ̀ kankan!",
"share": "Pín",
- "notification-copied": "Ti dà sí clipboard",
- "notification-word-not-valid": "Ọ̀rọ̀ kò tọ́",
- "notification-partial-word": "Jọ̀wọ́ kọ ọ̀rọ̀ kíkún"
+ "notification_copied": "Ti dà sí clipboard",
+ "notification_word_not_valid": "Ọ̀rọ̀ kò tọ́",
+ "notification_partial_word": "Jọ̀wọ́ kọ ọ̀rọ̀ kíkún"
},
"help": {
"title": "Bí a ṣe ń ṣeré",
diff --git a/docs/WORD_DATA_ARCHITECTURE.md b/docs/WORD_DATA_ARCHITECTURE.md
deleted file mode 100644
index 61eab6a1..00000000
--- a/docs/WORD_DATA_ARCHITECTURE.md
+++ /dev/null
@@ -1,379 +0,0 @@
-# Word Data Architecture
-
-> Status: IMPLEMENTED (words.json per language, pipeline reads/writes JSON directly)
-> Date: 2026-03-15
-> Context: PR #149 (language expansion), Issue #157 (sub-component tiles), Nuxt migration
-
-## Problem
-
-The current per-language data is spread across up to 9 files with implicit relationships:
-
-```
-{lang}_5words.txt ← main word list (community-contributed source of truth)
-{lang}_5words_supplement.txt ← auto-generated additional valid guesses
-{lang}_daily_words.txt ← auto-generated subset for daily selection
-{lang}_blocklist.txt ← words excluded from daily selection
-{lang}_curated_schedule.txt ← hand-picked daily words for specific dates
-{lang}_characters.txt ← derivable from word list
-{lang}_keyboard.json ← keyboard layout(s)
-language_config.json ← UI translations + script normalization + display settings
-{lang}_word_history.txt ← frozen past daily words
-```
-
-Problems:
-- A word's status is scattered across 4+ files (5words, supplement, daily, blocklist)
-- `_characters.txt` is fully derivable — redundant
-- `language_config.json` mixes UI text, script config, and game settings
-- Naming is hardcoded to 5 letters — can't scale to 4/6/7/8/9/10-letter modes
-- No per-word metadata (frequency, difficulty, LLM classification, source)
-- Adding a new game mode (phrase-of-the-day, multi-board) requires new file types
-
-## Decision: Single JSON per language
-
-### File structure
-
-```
-{lang}/
-├── words.json ← ALL words, all lengths, fully scored + classified (pipeline output)
-├── contribute/
-│ ├── words.txt ← community word submissions (plain text, one per line)
-│ └── overrides.json ← community corrections (tier overrides, flags)
-├── keyboard.json ← keyboard layout(s) (manually maintained)
-└── language_config.json ← UI translations + script normalization (manually maintained)
-```
-
-### Why JSON
-
-- **~50x faster** to parse than YAML (critical for 78 languages, 104MB total)
-- **No compile step** needed — `words.json` is both source of truth and runtime format
-- **Standard**: no extra dependency (pyyaml removed)
-- **Readable**: `indent=2, ensure_ascii=False` for clean diffs
-- Pipeline reads and writes `words.json` directly
-
-## words.json schema
-
-```json
-{
- "metadata": {
- "language_code": "ko",
- "language_name": "Korean",
- "last_pipeline_run": "2026-03-14T12:00:00Z",
- "sources": [
- {"name": "jmdict", "type": "dictionary", "version": "3.6.2"},
- {"name": "wordfreq", "type": "frequency", "version": "3.1"}
- ]
- },
- "words": [
- {
- "word": "정보",
- "length": 2,
- "tier": "daily",
- "frequency": 4.2,
- "sources": ["jmdict", "wordfreq"],
- "llm": {
- "tier": "daily",
- "confidence": 5,
- "reason": "common noun: information"
- },
- "reviewed": true
- },
- {
- "word": "나쁜말",
- "length": 3,
- "tier": "blocked",
- "frequency": 3.1,
- "sources": ["jmdict"],
- "flags": {"phrase": true},
- "llm": {
- "tier": "reject",
- "confidence": 5,
- "reason": "phrase: for many days"
- }
- }
- ]
-}
-```
-
-Sparse format: fields with default values (empty lists, false bools, null) are omitted.
-
-### Field definitions
-
-| Field | Type | Required | Description |
-|---|---|---|---|
-| `word` | string | yes | The word itself |
-| `length` | int | yes | Character count (grapheme-aware for Indic scripts) |
-| `tier` | enum | yes | `daily` (puzzle answer), `valid` (guess only), `blocked` (excluded from daily) |
-| `frequency` | float | yes | Zipf frequency score (0-7). Primary ranking signal. |
-| `difficulty` | float | no | 0.0-1.0. Computed from frequency + letter rarity + LLM adjustment. |
-| `sources` | list | yes | Which data sources this word came from |
-| `flags` | object | no | Boolean properties explaining why a word might not be daily-quality |
-| `llm` | object | no | LLM curation results (tier, confidence, reason, definitions) |
-| `reviewed` | bool | no | Human review flag. If true, pipeline preserves this word's tier. |
-
-### Tier definitions
-
-| Tier | Can be daily? | Valid guess? | When |
-|---|---|---|---|
-| `daily` | Yes | Yes | Common, standalone word. Good puzzle answer. |
-| `valid` | No | Yes | Real word but not daily-quality (too technical, obscure, compound). |
-| `blocked` | No | Yes | Excluded for specific reason (profanity, keyboard limitation, proper noun). |
-| `phrase` | Mode-dependent | Mode-dependent | Multi-word entry for phrase-of-the-day mode. |
-
-### How game modes consume this data
-
-| Mode | Filter | Daily pool | Guesses |
-|---|---|---|---|
-| Classic 5-letter | `length == 5` | `tier == daily` | `tier in (daily, valid, blocked)` |
-| Classic 4-letter | `length == 4` | `tier == daily` | same |
-| Classic N-letter | `length == N` | `tier == daily` | same |
-| Phrase of the day | `flags.phrase == true` | `tier == phrase` | all phrases |
-| Unlimited | any length | random from `tier == daily` | all valid |
-| Challenge (URL) | any | word from URL | all valid |
-| Multi-board (Quordle) | `length == 5` | N words from `tier == daily` | same as classic |
-
-### Pool depth validation
-
-Not every language can support every mode. Before offering a mode, check:
-```
-pool = words where length == N and tier == daily
-if len(pool) < 365: # less than a year of daily words
- don't offer this mode for this language
-```
-
-Example: Hausa has 435 daily 5-letter words → can support classic-5. Can't support classic-5 + quordle simultaneously (needs 4x words/day).
-
-## config.yaml schema
-
-Replaces `language_config.json`. YAML for readability and comments.
-
-```yaml
-# Language identity
-language_code: ko
-name: Korean
-name_native: 한국어
-timezone: Asia/Seoul
-
-# Script behavior
-right_to_left: false
-grapheme_mode: false # true for Devanagari, Bengali, Gurmukhi
-hide_diacritic_hints: true # true when diacritic_map is for encoding, not accents
-
-# Character normalization
-diacritic_map:
- ㄱ: [ᄀ, ᆨ] # Compatibility Jamo → Hangul Jamo
- ㄴ: [ᄂ, ᆫ]
- # ...
-
-# Positional forms (Hebrew sofit, Greek final sigma)
-final_form_map:
- כ: ך
- מ: ם
-
-# Physical keyboard bypass (IME languages)
-physical_key_map:
- KeyQ: ㅂ
- KeyW: ㅈ
- ShiftKeyQ: ㅃ
- # ...
-
-# UI translations
-meta:
- locale: ko
- wordle_native: 워들
- title: 일일 단어 게임
- description: ...
- keywords: ...
-
-text:
- share: 공유
- next_word: 다음 단어
- # ...
-
-help:
- title: 게임 방법
- # ...
-
-ui:
- settings: 설정
- dark_mode: 다크 모드
- # ...
-```
-
-## contribute/ directory
-
-### contribute/words.txt
-
-Lowest-friction contribution format. One word per line, no metadata.
-
-```
-사랑
-행복
-우정
-```
-
-Pipeline picks these up, scores them, and merges into `words.json` with `sources: [community]`. If a word is already in `words.json`, it's skipped. If it's new, pipeline assigns tier, frequency, etc.
-
-### contribute/overrides.json
-
-For corrections that override pipeline decisions:
-
-```yaml
-# This word was wrongly classified as a phrase — it's a real compound noun
-- word: 밝다
- tier: blocked
- reason: "compound jongseong, not typeable on default keyboard"
- reviewed: true
-
-# This word should be daily — pipeline ranked it too low
-- word: 우정
- tier: daily
- reviewed: true
-```
-
-The `reviewed: true` flag tells the pipeline not to override this classification.
-
-## Difficulty scoring
-
-Computed from multiple signals:
-
-```python
-difficulty = weighted_average(
- (1 - frequency_percentile) * 0.4, # rare words harder
- unique_letter_ratio * 0.2, # repeated letters harder
- character_rarity_score * 0.2, # unusual characters harder
- consonant_cluster_score * 0.1, # complex combos harder
- llm_adjustment * 0.1, # LLM can nudge (false friends, archaic, etc.)
-)
-```
-
-Use cases:
-- Post-game WordleBot-style analysis: "This was a hard word (difficulty: 0.82)"
-- Mode difficulty settings: easy mode only picks words with difficulty < 0.4
-- Balancing daily words: avoid too many hard words in a row
-
-## LLM curation
-
-### Process
-
-For each language with daily words, spawn an LLM agent (Claude Opus 4.6) that:
-1. Self-assesses confidence for that language (1-5)
-2. Processes words in batches of 50
-3. Classifies each as daily/valid/reject with reasoning
-4. Optionally generates native + English definitions in same pass
-
-### Output
-
-Stored in `llm` field per word in `words.json`. The `llm.tier` is a recommendation — the pipeline makes the final `tier` decision based on `llm.tier` + `llm.confidence` + `flags`.
-
-Decision logic:
-```python
-if word.reviewed:
- tier = word.tier # human override, don't touch
-elif word.llm.confidence >= 3 and word.llm.tier == 'reject':
- tier = 'blocked'
-elif word.llm.confidence >= 3 and word.llm.tier == 'valid':
- tier = 'valid'
-else:
- tier = pipeline_computed_tier # fall back to frequency + dictionary gate
-```
-
-### Cost
-
-~38 languages × 2,000 words × ~20 tokens/word ≈ 1.5M tokens. ~$20-30 one-time with Opus.
-
-## Pipeline stages
-
-```
-┌─────────────────────────────────────────────────────────┐
-│ Stage 1: SOURCE │
-│ Inputs: JMdict, kaikki, Leipzig, FrequencyWords, │
-│ wordfreq, Hunspell, community words.txt │
-│ Output: raw word pool per language (all lengths) │
-└──────────────────────┬──────────────────────────────────┘
- ▼
-┌─────────────────────────────────────────────────────────┐
-│ Stage 2: NORMALIZE │
-│ Character normalization, grapheme-aware length calc, │
-│ dedup, lowercase, encoding fixes │
-│ Output: clean word pool with length field │
-└──────────────────────┬──────────────────────────────────┘
- ▼
-┌─────────────────────────────────────────────────────────┐
-│ Stage 3: SCORE │
-│ wordfreq (primary) + FrequencyWords (secondary) │
-│ Dictionary verification gate (kaikki/Leipzig/Hunspell) │
-│ Output: words with frequency + sources │
-└──────────────────────┬──────────────────────────────────┘
- ▼
-┌─────────────────────────────────────────────────────────┐
-│ Stage 4: CURATE │
-│ LLM classification (tier + confidence + definitions) │
-│ Profanity/name/foreign detection │
-│ Apply community overrides │
-│ Output: words with tier + flags + llm fields │
-└──────────────────────┬──────────────────────────────────┘
- ▼
-┌─────────────────────────────────────────────────────────┐
-│ Stage 5: FREEZE │
-│ Update word_history.jsonl with past daily words │
-│ Lock selections — past words never change │
-└─────────────────────────────────────────────────────────┘
-```
-
-## Migration strategy
-
-### Phase 1: Ship PR #149 as-is (NOW)
-- Current file structure works
-- LLM curation as `_word_scores.jsonl` sidecar (forward-compatible)
-- Use scores to filter existing `daily_words.txt`
-
-### Phase 2: YAML migration (with Nuxt refactor)
-- Write migration script: existing files + word_scores → words.json
-- New pipeline reads/writes YAML
-- Nuxt build step compiles YAML → JSON
-- One PR per language batch (or big-bang with verification)
-- Backward compatibility: if words.json doesn't exist, fall back to old files
-
-### Phase 3: Multi-mode support (after Nuxt)
-- Pipeline generates all-length word pools
-- Frontend parameterizes word length
-- Daily algorithm supports mode + length dimensions
-- Only offer modes where pool depth is sufficient
-
-## Languages with special considerations
-
-| Language | Issue | How words.json handles it |
-|---|---|---|
-| Korean (ko) | Jamo encoding mismatch, compound jongseong keyboard gap | `diacritic_map` in config.yaml, `flags.keyboard_gap: true` on blocked words |
-| Hindi (hi) | Grapheme mode, only 15 daily words from pipeline | LLM curation bypasses broken dictionary gate, scores full word list directly |
-| Bengali (bn) | Grapheme mode, particle noise (~6%) | LLM classifies particle expressions as `tier: blocked` |
-| Japanese (ja) | Hiragana-only, phrase fragments (~7%), needs JMdict source | LLM filters expressions, `sources: [jmdict]` tracks provenance |
-| German (de) | ß diacritic, broken multi-char mapping fixed | `diacritic_map: {s: [ß]}` in config.yaml |
-| French (fr) | œ/æ diacritic, same multi-char fix | `diacritic_map: {o: [ô, œ], a: [à, â, æ]}` |
-| Hausa (ha) | Small dictionary (435 daily words) | Pool depth check prevents offering modes it can't support |
-| Yoruba (yo) | Small dictionary (896 daily words), tone marks | Same pool depth check |
-| Hebrew (he) | RTL, sofit final forms, large word list (64K) | `final_form_map` in config.yaml |
-| Arabic (ar) | RTL, character difficulty filtering | Rare char filter encoded as `flags` |
-| Finnish (fi) | Pre-curated, excluded from pipeline | `reviewed: true` on all words, pipeline skips |
-| English (en) | Pre-curated, high quality baseline | Same as Finnish |
-
-## Sub-component tile coloring (Issue #157)
-
-The words.json schema is forward-compatible with the future sub-component tile system:
-
-```yaml
-- word: 한
- length: 1 # 1 syllable block
- components: [ㅎ, ㅏ, ㄴ] # sub-components for per-jamo coloring
-```
-
-The `components` field would only be populated for composition-based scripts (Korean syllable blocks, Tamil aksharas, Hindi aksharas). Latin/Cyrillic/Arabic words would have `components: null` (each character is its own component).
-
-This is a future addition — not needed for the initial YAML migration.
-
-## Open questions
-
-1. **Word history format**: Keep as flat text files (simple) or migrate to JSONL (supports mode + length dimensions)?
-2. **Curated schedule**: Keep as a separate concept or fold into words.json with a `scheduled_day` field?
-3. **Definition caching**: Currently a separate disk cache system. Should definitions live in words.json or stay separate? (words.json would get very large with definitions for 50K+ words)
-4. **Keyboard config**: Keep as JSON or migrate to YAML? JSON is what the frontend expects directly.
diff --git a/docs/nuxt-migration.md b/docs/nuxt-migration.md
deleted file mode 100644
index 63aa4a7c..00000000
--- a/docs/nuxt-migration.md
+++ /dev/null
@@ -1,488 +0,0 @@
-# Nuxt 3 Migration Plan — Wordle Global
-
-## Context
-
-Wordle Global is migrating from Flask+Jinja+Vue (Options API) to Nuxt 3 with SSR. The goal: one language (TypeScript), one server (Node/Nitro), best-in-class SEO (full SSR), and a modular component architecture ready for multiple game modes, auth, and challenge features. Python scripts remain as offline tooling for word pipeline, share image generation, and data analysis.
-
-**Replaces:** `docs/architecture-migration.md` (Jan 2026, now outdated)
-
----
-
-## Architecture Overview
-
-```
-BEFORE AFTER
-────── ─────
-Flask (Python) Nuxt 3 (Node/Nitro)
-├── Jinja2 templates (SSR) ├── Vue SFCs + SSR
-├── Vue 3 Options API (client) ├── Vue 3 Composition API
-├── Vite (build only) ├── Nuxt build system (Vite internal)
-├── Gunicorn (8 workers) ├── Nitro server
-└── 1,527-line app.py monolith └── Modular server/api/ routes
-
-Python scripts (offline) Python scripts (unchanged)
-├── improve_word_lists.py ├── improve_word_lists.py
-├── generate_share_images.py ├── generate_share_images.py
-├── pregenerate_definitions.py ├── pregenerate_definitions.py
-└── pytest data validation └── pytest data validation
-```
-
----
-
-## Target Directory Structure
-
-```
-wordle/
-├── nuxt/ # Nuxt 3 app (replaces webapp/ + frontend/)
-│ ├── nuxt.config.ts
-│ ├── app.vue # Root (dark mode init, NuxtLayout, NuxtPage)
-│ ├── error.vue # 404 page
-│ ├── assets/css/main.css # Tailwind + custom animations
-│ ├── components/
-│ │ ├── game/
-│ │ │ ├── GameBoard.vue # 6x5 tile grid
-│ │ │ ├── TileRow.vue # Single row with shake binding
-│ │ │ ├── Tile.vue # Individual tile with flip
-│ │ │ ├── GameKeyboard.vue # On-screen keyboard
-│ │ │ ├── KeyboardKey.vue # Individual key with hints
-│ │ │ ├── GameHeader.vue # Title bar + buttons
-│ │ │ ├── StatsModal.vue # 3-tab statistics
-│ │ │ ├── HelpModal.vue # Tutorial
-│ │ │ ├── SettingsModal.vue # Settings toggles
-│ │ │ └── NotificationToast.vue
-│ │ └── shared/
-│ │ ├── ToggleSwitch.vue
-│ │ └── ModalBackdrop.vue
-│ ├── composables/
-│ │ ├── useHaptics.ts # Vibration feedback
-│ │ ├── useSounds.ts # Web Audio tones
-│ │ ├── useDefinitions.ts # Fetch definitions + images
-│ │ ├── useEmbed.ts # Iframe detection
-│ │ └── useHreflang.ts # SEO hreflang tags
-│ ├── layouts/
-│ │ ├── default.vue # Standard page layout
-│ │ └── game.vue # Full-height game layout (100dvh)
-│ ├── pages/
-│ │ ├── index.vue # / — homepage
-│ │ ├── stats.vue # /stats
-│ │ └── [lang]/
-│ │ ├── index.vue # /
— game page
-│ │ ├── words.vue # //words — archive
-│ │ └── word/[id].vue # //word/ — word detail
-│ ├── plugins/
-│ │ ├── analytics.client.ts # GA4 + PostHog
-│ │ ├── pwa.client.ts # PWA install prompts
-│ │ └── debug.client.ts # Console debug tools
-│ ├── public/ # Static files (favicons, sw.js, share images)
-│ ├── server/
-│ │ ├── api/
-│ │ │ ├── languages.get.ts # All language metadata
-│ │ │ ├── stats.get.ts # Site-wide statistics
-│ │ │ └── [lang]/
-│ │ │ ├── data.get.ts # Language data (word list, config, keyboard)
-│ │ │ ├── definition/[word].get.ts
-│ │ │ ├── word-image/[word].get.ts
-│ │ │ └── word-stats.post.ts
-│ │ ├── routes/
-│ │ │ ├── robots.txt.ts
-│ │ │ ├── llms.txt.ts
-│ │ │ ├── sitemap.xml.ts
-│ │ │ ├── sitemap-main.xml.ts
-│ │ │ └── sitemap-words-[lang].xml.ts
-│ │ └── utils/
-│ │ ├── data-loader.ts # Load word lists, configs at startup
-│ │ ├── word-selection.ts # Daily word algorithm (ported from Python)
-│ │ ├── definitions.ts # LLM + kaikki fallback
-│ │ ├── word-stats.ts # Atomic stats read/write
-│ │ └── language-builder.ts # Build Language object
-│ ├── stores/ # Pinia
-│ │ ├── game.ts # Tiles, colors, game state, animations
-│ │ ├── settings.ts # Dark mode, haptics, hard mode, colorblind
-│ │ ├── stats.ts # Game results, streaks, distributions
-│ │ └── language.ts # Current language config + word lists
-│ └── utils/ # Shared (server + client)
-│ ├── types.ts # All TypeScript interfaces
-│ ├── diacritics.ts # Accent normalization (direct port)
-│ ├── positional.ts # Final form mapping (direct port)
-│ ├── stats.ts # Percentile calculation (direct port)
-│ └── graphemes.ts # Intl.Segmenter wrapper (direct port)
-├── webapp/data/ # Language data files (unchanged, read by Nuxt server)
-├── scripts/ # Python offline tooling (unchanged)
-├── tests/ # pytest data validation (unchanged)
-└── docs/ # Updated documentation
-```
-
----
-
-## Migration Phases
-
-### Phase 0: Foundation (Week 1)
-
-**Goal:** Scaffolded Nuxt project that builds and serves a "hello world" page.
-
-- [ ] Initialize Nuxt 3 project in `nuxt/` directory
-- [ ] Install deps: `@pinia/nuxt`, `@vite-pwa/nuxt`, `openai`, `proper-lockfile`, `sharp`
-- [ ] Configure Tailwind v4 via `@tailwindcss/vite` plugin in nuxt.config.ts
-- [ ] Copy `frontend/src/style.css` → `nuxt/assets/css/main.css`
-- [ ] Copy pure utility modules verbatim: `diacritics.ts`, `positional.ts`, `stats.ts`, `graphemes.ts`, `types.ts`
-- [ ] Symlink `webapp/data/` → accessible from Nuxt server
-- [ ] Copy `webapp/static/` assets → `nuxt/public/` (favicons, offline pages, share images)
-- [ ] Pre-compute shuffled word lists: Run a one-time Python script that writes `{lang}_5words_shuffled.json` for each language (avoids replicating Python's PRNG in Node)
-- [ ] Deprecate `docs/architecture-migration.md`, replace with this document
-
-### Phase 1: Server Logic Port (Week 2-3)
-
-**Goal:** All Flask backend logic running in Nitro with verified algorithm parity.
-
-**Data Loading** (`server/utils/data-loader.ts`):
-- [ ] Port `load_words()` — read pre-shuffled JSON lists
-- [ ] Port `load_supplemental_words()`
-- [ ] Port `load_blocklist()`
-- [ ] Port `load_daily_words()`
-- [ ] Port `load_curated_schedule()`
-- [ ] Port `load_language_config()` — deep merge with defaults
-- [ ] Port `load_keyboard()` — normalize layouts, generate alphabetical fallback
-- [ ] Port `load_characters()` — auto-generate from word list if missing
-- [ ] Implement startup cache (all data loaded once, same as Flask)
-
-**Word Selection** (`server/utils/word-selection.ts`):
-- [ ] Port `get_todays_idx(timezone)` — use `Intl.DateTimeFormat` for timezone
-- [ ] Port `_word_hash()` / `_day_hash()` — use `crypto.createHash('sha256')`
-- [ ] Port `get_daily_word_consistent_hash()` — binary search for closest hash
-- [ ] Port `get_daily_word_legacy()` — read pre-shuffled list, `words[idx % len]`
-- [ ] Port `get_word_for_day()` — 3-tier selection + disk caching
-- [ ] Port `_compute_word_for_day()` — curated schedule → daily words → filtered main
-- [ ] Port `idx_to_date()` — reverse mapping
-- [ ] `MIGRATION_DAY_IDX = 1681` constant
-- [ ] **PARITY TEST**: Script that verifies identical word selection for all 77 langs × days 1-1800
-
-**Definitions** (`server/utils/definitions.ts`):
-- [ ] Port `fetch_definition()` — 3-tier: cache → LLM → kaikki
-- [ ] Port `_call_llm_definition()` — use OpenAI TypeScript SDK
-- [ ] Port `lookup_kaikki_native()` / `lookup_kaikki_english()` — read JSON files
-- [ ] Port `_wiktionary_url()` — URL construction
-- [ ] Port cache read/write — same JSON format, same paths
-- [ ] Port negative cache with 24h TTL
-
-**Stats** (`server/utils/word-stats.ts`):
-- [ ] Port `_load_word_stats()` — read JSON file
-- [ ] Port `_update_word_stats()` — use `proper-lockfile` instead of `fcntl.flock()`
-- [ ] Port IP/client deduplication (in-memory Map, 50K cap, daily reset)
-- [ ] Port `_build_stats_data()` — aggregate all languages, 5-min cache
-
-**Language Builder** (`server/utils/language-builder.ts`):
-- [ ] Port `Language` class — daily word, keyboard layouts, diacritic hints, timezone offset
-
-### Phase 2: API Routes (Week 3-4)
-
-**Goal:** All Flask routes working as Nitro endpoints.
-
-**API routes** (`server/api/`):
-- [ ] `GET /api/languages` — all language metadata (replaces homepage data injection)
-- [ ] `GET /api/[lang]/data` — word list, supplement, characters, config, todaysIdx, todaysWord, timezoneOffset, keyboard
-- [ ] `GET /api/[lang]/definition/[word]` — definition JSON
-- [ ] `GET /api/[lang]/word-image/[word]` — DALL-E image (use `sharp` for WebP)
-- [ ] `POST /api/[lang]/word-stats` — anonymous stats submission
-- [ ] `GET /api/stats` — site-wide statistics aggregation
-
-**Non-API routes** (`server/routes/`):
-- [ ] `robots.txt` — same content
-- [ ] `llms.txt` — same content
-- [ ] `sitemap.xml` — sitemap index
-- [ ] `sitemap-main.xml` — homepage, language pages, word hubs
-- [ ] `sitemap-words-[lang].xml` — per-language word pages
-
-**Middleware**:
-- [ ] HTTP → HTTPS redirect (non-localhost)
-
-### Phase 3: Frontend — Pinia Stores (Week 4-5)
-
-**Goal:** All game state and logic decomposed into Pinia stores.
-
-**`stores/game.ts`** — extracted from game.ts (1,816 lines):
-- [ ] Tile state: tiles, tileClasses, tilesVisual, tileClassesVisual
-- [ ] Game state: activeRow, activeCell, gameOver, gameWon, gameLost, attempts
-- [ ] Keyboard: keyClasses, pendingKeyUpdates
-- [ ] Animation: animating, shakingRow
-- [ ] Notifications: show, fading, message
-- [ ] Modals: showHelpModal, showStatsModal, showOptionsModal
-- [ ] Actions: addChar(), deleteChar(), submitGuess(), updateColors()
-- [ ] Animations: revealRow(), shakeRow(), bounceRow(), _nudgeKey()
-- [ ] Share: getEmojiBoard(), share()
-- [ ] localStorage save/load
-- [ ] Hard mode validation
-- [ ] Colorblind/high-contrast mode
-
-**`stores/settings.ts`**:
-- [ ] darkMode, feedbackEnabled, wordInfoEnabled, hardMode, highContrast
-- [ ] All toggles with localStorage persistence
-- [ ] SSR-safe: read localStorage only in `onMounted` / `import.meta.client`
-
-**`stores/stats.ts`**:
-- [ ] gameResults (from localStorage)
-- [ ] calculateStats(langCode), calculateTotalStats()
-- [ ] saveResult(), loadGameResults()
-- [ ] submitWordStats() — POST to API
-
-**`stores/language.ts`**:
-- [ ] config, wordList, wordListSupplement, characters
-- [ ] todaysIdx, todaysWord, timezoneOffset
-- [ ] keyboard, keyboardLayouts, keyDiacriticHints
-- [ ] Normalization maps (built from config)
-
-### Phase 4: Frontend — Vue Components (Week 5-7)
-
-**Goal:** All Jinja templates replaced with Vue SFCs.
-
-**Game components** (from game.html 715 lines):
-- [ ] `GameBoard.vue` — 6x5 grid with perspective
-- [ ] `TileRow.vue` — single row, shake binding
-- [ ] `Tile.vue` — individual tile, v-bind:class from store
-- [ ] `GameKeyboard.vue` — keyboard rows from language store
-- [ ] `KeyboardKey.vue` — key with diacritic hints, color state
-- [ ] `GameHeader.vue` — title, help/stats/settings buttons
-- [ ] `StatsModal.vue` — 3 tabs (Today/Stats/Global), guess distribution, streaks
-- [ ] `HelpModal.vue` — tutorial with localized text
-- [ ] `SettingsModal.vue` — toggles (dark mode, feedback, hard mode, colorblind, word info)
-- [ ] `NotificationToast.vue` — slide-down + fade-out
-
-**Shared components** (from Jinja partials):
-- [ ] `ToggleSwitch.vue` — replaces `_toggle_switch.html` macro
-- [ ] `ModalBackdrop.vue` — replaces `_modal_backdrop.html`
-
-**Pages**:
-- [ ] `pages/index.vue` — homepage (replaces index.html + index-app.ts)
-- [ ] `pages/[lang]/index.vue` — game page (replaces game.html + game.ts)
-- [ ] `pages/[lang]/words.vue` — word archive (replaces words_hub.html)
-- [ ] `pages/[lang]/word/[id].vue` — word detail (replaces word.html)
-- [ ] `pages/stats.vue` — site stats (replaces stats.html)
-- [ ] `error.vue` — 404 page (replaces 404.html)
-
-**Composables** (from frontend modules):
-- [ ] `useHaptics.ts` — wrap haptics.ts with SSR guard
-- [ ] `useSounds.ts` — wrap sounds.ts with SSR guard
-- [ ] `useDefinitions.ts` — definition + image fetching (use `$fetch`)
-- [ ] `useEmbed.ts` — iframe detection
-- [ ] `useHreflang.ts` — SEO hreflang via `useHead()`
-
-**Plugins** (client-only):
-- [ ] `analytics.client.ts` — GA4 gtag + PostHog init
-- [ ] `pwa.client.ts` — PWA install prompts (@khmyznikov/pwa-install)
-- [ ] `debug.client.ts` — console debug tools (ASCII banner)
-
-**Layouts**:
-- [ ] `default.vue` — standard pages (homepage, stats, word pages)
-- [ ] `game.vue` — full-height game layout (100dvh, overflow-hidden, safe-area)
-
-**SEO per page** (via `useHead` / `useSeoMeta`):
-- [ ] Title, description, og:title, og:description, og:image, og:url
-- [ ] hreflang for all 77 languages
-- [ ] JSON-LD structured data (WebApplication, BreadcrumbList)
-- [ ] canonical URLs
-- [ ] Share result meta tags (when `?r=` query param present)
-
-### Phase 5: PWA, Analytics, Service Worker (Week 7-8)
-
-- [ ] Configure `@vite-pwa/nuxt` — manifest, workbox, offline fallback
-- [ ] Port service worker caching strategy (network-first HTML, cache-first assets)
-- [ ] GA4 gtag initialization (deferred script load)
-- [ ] PostHog initialization (3% session recording)
-- [ ] Dark mode flash prevention (inline script via `useHead`)
-- [ ] PWA install banner (after game win, 7-day dismiss cooldown)
-- [ ] Embed banner (iframe detection)
-
-### Phase 6: Testing & Verification (Week 8-9)
-
-**Algorithm parity** (most critical):
-- [ ] Script that tests `getWordForDay(lang, dayIdx)` for all 77 langs × days 1-1800
-- [ ] Compare Flask output vs Nuxt output — must be 100% identical
-
-**SEO parity**:
-- [ ] Crawl both servers with Screaming Frog
-- [ ] Compare: title tags, meta descriptions, canonical URLs, hreflang, structured data
-- [ ] Compare sitemap XML byte-for-byte
-- [ ] Verify robots.txt and llms.txt match
-
-**Vitest** (port from frontend/src/__tests__/):
-- [ ] game-logic.test.ts — color calculation, stats
-- [ ] diacritics.test.ts — accent normalization
-- [ ] positional.test.ts — final form mapping
-- [ ] definitions.test.ts — API mocking
-- [ ] percentile.test.ts — community percentile
-
-**Playwright E2E** (port from e2e/):
-- [ ] Homepage loads, language picker works
-- [ ] Game page loads for 5 languages (en, fi, ar, he, ko)
-- [ ] Typing, submitting, win/loss flows
-- [ ] Dark mode toggle
-- [ ] Mobile viewport
-
-**Visual regression**:
-- [ ] Screenshot comparison (Flask vs Nuxt) for 10 key pages
-- [ ] Light + dark mode
-
-### Phase 7: Deployment & Switchover (Week 9-10)
-
-**Render configuration**:
-- [ ] Build command: `cd nuxt && pnpm install && pnpm build`
-- [ ] Start command: `node nuxt/.output/server/index.mjs`
-- [ ] Runtime: Node.js (not Python)
-- [ ] Persistent disk: same `/data` mount (word-images, word-defs, word-stats, word-history)
-- [ ] Environment: `DATA_DIR=/data`, `OPENAI_API_KEY=...`, `NODE_ENV=production`
-
-**Switchover plan**:
-1. Deploy Nuxt to staging URL on Render (separate service, shared disk)
-2. Run full parity + SEO tests against staging
-3. Switch main service: update build/start commands, change runtime to Node
-4. Monitor for 24h: error rates, word selection, stats submissions
-5. Rollback plan: revert to Flask commands (both stacks read same data files)
-
-**Post-migration cleanup** (after 2 weeks stable):
-- [ ] Remove `webapp/` (Flask app, Jinja templates)
-- [ ] Remove `frontend/` (old Vite setup)
-- [ ] Remove `vite.config.js`, `gunicorn.dev.py`, `Procfile`, `Dockerfile`
-- [ ] Update `pyproject.toml` — remove Flask, gunicorn deps (keep pytest, ruff, scripts deps)
-- [ ] Update `CLAUDE.md` — new architecture, new dev commands
-- [ ] Update CI workflow — no Python in build/lint jobs
-- [ ] Keep `tests/` for pytest data validation (still Python)
-
----
-
-## Key Technical Decisions
-
-### Word list shuffle parity
-Python's `random.seed(42)` + `random.shuffle()` uses Mersenne Twister. Replicating this in Node is fragile. **Solution:** keep backwards compatibility to not change historic words, but we're fine with future word changes using new deterministic shuffle.
-
-### Atomic file writes (replaces fcntl.flock)
-Use `proper-lockfile` npm package. Lock file, read-modify-write, unlock. Non-blocking retry with skip (same behavior as Flask's non-blocking flock).
-
-### Daily word in client bundle
-Keep current approach: `todaysWord` included in SSR payload (visible in page source). This is the existing security posture. Server-side guess validation would add latency and break offline play.
-
-### Tailwind v4 in Nuxt
-Use `@tailwindcss/vite` directly in `nuxt.config.ts` under `vite.plugins`. Avoids `@nuxtjs/tailwindcss` module which is v3-centric.
-
-### Dark mode flash
-Inline script in `` via `useHead({ script: [{ innerHTML: '...', tagPosition: 'head' }] })`. Same approach as current `_dark_mode_init.html`.
-
-### SSR + localStorage
-All localStorage reads happen behind `import.meta.client` guards or in `onMounted()`. Never during SSR. Pinia stores initialize with defaults, then hydrate from localStorage on mount.
-
-### Share images
-`scripts/generate_share_images.py` stays as Python offline tool. Generates static PNGs at build time. DALL-E runtime image generation uses OpenAI TS SDK + `sharp` for WebP conversion.
-
----
-
-## File Migration Map
-
-### Python → TypeScript (Server)
-
-| Python Source | TypeScript Destination | ~Lines |
-|---|---|---|
-| `webapp/app.py` data loading (lines 117-457) | `server/utils/data-loader.ts` | 250 |
-| `webapp/app.py` word selection (lines 337-510) | `server/utils/word-selection.ts` | 120 |
-| `webapp/app.py` Language class (lines 636-792) | `server/utils/language-builder.ts` | 120 |
-| `webapp/app.py` stats (lines 810-872) | `server/utils/word-stats.ts` | 80 |
-| `webapp/app.py` routes (lines 874-1527) | `server/api/**/*.ts` + `server/routes/**/*.ts` | 400 |
-| `webapp/definitions.py` (321 lines) | `server/utils/definitions.ts` | 250 |
-
-### Frontend → Nuxt (Client)
-
-| Source | Destination | Approach |
-|---|---|---|
-| `frontend/src/game.ts` (1,816 lines) | `stores/game.ts` + 10 components | Decompose |
-| `frontend/src/index-app.ts` (350 lines) | `pages/index.vue` | Rewrite |
-| `frontend/src/main.ts` (48 lines) | Eliminated (Nuxt handles entry) | — |
-| `frontend/src/analytics.ts` (839 lines) | `plugins/analytics.client.ts` | Minimal wrapper |
-| `frontend/src/posthog.ts` (131 lines) | `plugins/analytics.client.ts` | Merge |
-| `frontend/src/definitions.ts` (193 lines) | `composables/useDefinitions.ts` | Use `$fetch` |
-| `frontend/src/haptics.ts` (123 lines) | `composables/useHaptics.ts` | SSR guard |
-| `frontend/src/sounds.ts` (107 lines) | `composables/useSounds.ts` | SSR guard |
-| `frontend/src/pwa.ts` (167 lines) | `plugins/pwa.client.ts` | Use @vite-pwa/nuxt |
-| `frontend/src/embed.ts` (63 lines) | `composables/useEmbed.ts` | Composable |
-| `frontend/src/debug.ts` (124 lines) | `plugins/debug.client.ts` | Client-only |
-| `frontend/src/diacritics.ts` (86 lines) | `utils/diacritics.ts` | Copy verbatim |
-| `frontend/src/positional.ts` (110 lines) | `utils/positional.ts` | Copy verbatim |
-| `frontend/src/stats.ts` (45 lines) | `utils/stats.ts` | Copy verbatim |
-| `frontend/src/graphemes.ts` (19 lines) | `utils/graphemes.ts` | Copy verbatim |
-| `frontend/src/types/index.ts` (206 lines) | `utils/types.ts` | Remove Window augmentation |
-| `frontend/src/style.css` (255 lines) | `assets/css/main.css` | Copy |
-
-### Jinja Templates → Vue SFCs
-
-| Jinja Template | Vue Destination |
-|---|---|
-| `game.html` (715 lines) | `pages/[lang]/index.vue` + 10 game components |
-| `index.html` (327 lines) | `pages/index.vue` |
-| `stats.html` (420 lines) | `pages/stats.vue` |
-| `word.html` (281 lines) | `pages/[lang]/word/[id].vue` |
-| `words_hub.html` (164 lines) | `pages/[lang]/words.vue` |
-| `404.html` (30 lines) | `error.vue` |
-| `_base_head.html` | `nuxt.config.ts` + `app.vue` |
-| `_dark_mode_init.html` | `app.vue` (inline script) |
-| `_hreflang.html` | `composables/useHreflang.ts` |
-| `_breadcrumb_schema.html` | `composables/useBreadcrumb.ts` |
-| `_toggle_switch.html` | `components/shared/ToggleSwitch.vue` |
-| `_modal_backdrop.html` | `components/shared/ModalBackdrop.vue` |
-| `_loading_skeleton.html` | Eliminated (SSR replaces skeleton) |
-| `_pwa_install.html` | `@vite-pwa/nuxt` module |
-| `sitemap_*.xml` | `server/routes/sitemap*.ts` |
-
----
-
-## Risks & Mitigations
-
-| Risk | Severity | Mitigation |
-|---|---|---|
-| Word selection mismatch | Critical | Pre-shuffled lists + exhaustive parity test (77 langs × 1800 days) |
-| SEO ranking drop | High | Exact URL parity, crawl comparison, staged rollout |
-| localStorage SSR hydration | Medium | All reads behind `import.meta.client` / `onMounted()` |
-| Performance regression | Medium | Nitro is typically faster than Gunicorn for page serving. Monitor TTFB. |
-| PWA cache conflicts | Medium | Increment SW cache version. New asset URL pattern (`/_nuxt/`). |
-| Persistent disk access | Low | Same paths, same env var. No data migration needed. |
-
----
-
-## Estimated Effort
-
-| Phase | Duration | Key Deliverable |
-|---|---|---|
-| 0: Foundation | 3 days | Nuxt project scaffolded, utils copied |
-| 1: Server logic | 8 days | All Python→TS ports, word selection parity verified |
-| 2: API routes | 4 days | All 13 Flask routes working in Nitro |
-| 3: Pinia stores | 5 days | game.ts monolith decomposed into 4 stores |
-| 4: Vue components | 8 days | All templates → SFCs, all pages SSR |
-| 5: PWA/Analytics | 3 days | Service worker, GA4, PostHog, dark mode |
-| 6: Testing | 5 days | Parity, SEO, visual regression, E2E |
-| 7: Deployment | 3 days | Staging → production switchover |
-| **Total** | **~5-6 weeks** | |
-
----
-
-## First Steps (actionable now)
-
-1. Create `nuxt/` directory and initialize project
-2. Write Python script to pre-compute shuffled word lists
-3. Port `word-selection.ts` and run parity test — this is the highest-risk piece
-4. Copy pure utility modules (diacritics, positional, stats, types)
-5. Build first API route (`/api/[lang]/data`) and first page (`pages/[lang]/index.vue`)
-
----
-
-## Verification
-
-After each phase:
-- `pnpm dev` in nuxt/ — verify pages render
-- Run parity tests against Flask (word selection, definitions)
-- `pnpm test` — vitest passes
-- `pnpm build` — production build succeeds
-- Screaming Frog crawl comparison (Phase 6+)
-
-Final verification before switchover:
-- All 77 languages load and render correctly
-- Word selection matches Flask for today + past 1800 days
-- Sitemaps identical
-- Share images served correctly
-- Stats submission works
-- Definition caching works
-- PWA installs and works offline
diff --git a/e2e/gameplay.spec.ts b/e2e/gameplay.spec.ts
index 87b4b5f0..27d3d602 100644
--- a/e2e/gameplay.spec.ts
+++ b/e2e/gameplay.spec.ts
@@ -216,6 +216,124 @@ test.describe('Tutorial', () => {
});
});
+test.describe('Diacritic Popup', () => {
+ test('long-press on Esperanto key shows diacritic popup', async ({ page }) => {
+ await page.goto('/eo');
+ await waitForGame(page);
+
+ // Find the "c" key (has ĉ diacritic)
+ const cKey = page.locator('button[data-char="c"]');
+ await expect(cKey).toBeVisible({ timeout: 15000 });
+
+ // Long-press: mousedown, wait 400ms, then check popup
+ const box = await cKey.boundingBox();
+ expect(box).toBeTruthy();
+
+ await page.mouse.move(box!.x + box!.width / 2, box!.y + box!.height / 2);
+ await page.mouse.down();
+ await page.waitForTimeout(400);
+
+ // Popup should appear with base char + variant
+ const popup = page.locator('.diacritic-popup');
+ await expect(popup).toBeVisible({ timeout: 2000 });
+
+ const options = popup.locator('.diacritic-option');
+ expect(await options.count()).toBe(2); // c + ĉ
+
+ // Release on first option (base char)
+ await page.mouse.up();
+
+ // Popup should disappear
+ await expect(popup).not.toBeVisible({ timeout: 1000 });
+ });
+
+ test('long-press and slide selects diacritic variant', async ({ page }) => {
+ await page.goto('/eo');
+ await waitForGame(page);
+
+ const cKey = page.locator('button[data-char="c"]');
+ const box = await cKey.boundingBox();
+ expect(box).toBeTruthy();
+
+ // Long-press
+ await page.mouse.move(box!.x + box!.width / 2, box!.y + box!.height / 2);
+ await page.mouse.down();
+ await page.waitForTimeout(400);
+
+ // Popup should be visible
+ const popup = page.locator('.diacritic-popup');
+ await expect(popup).toBeVisible({ timeout: 2000 });
+
+ // Slide right to select ĉ (second option, ~40px right)
+ await page.mouse.move(box!.x + box!.width / 2 + 40, box!.y - 30);
+ await page.waitForTimeout(100);
+ await page.mouse.up();
+
+ // ĉ should be typed in the first tile
+ const firstTile = page.locator('.game-board .grid-cols-5').first().locator('div').first();
+ await expect(firstTile).toContainText('ĉ', { timeout: 2000, ignoreCase: true });
+ });
+
+ test('quick tap on diacritic key types base char', async ({ page }) => {
+ await page.goto('/eo');
+ await waitForGame(page);
+
+ const cKey = page.locator('button[data-char="c"]');
+ await cKey.click();
+ await page.waitForTimeout(300);
+
+ // Should type "c" (base char), not "ĉ"
+ const firstTile = page.locator('.game-board .grid-cols-5').first().locator('div').first();
+ await expect(firstTile).toContainText('c', { timeout: 2000, ignoreCase: true });
+ });
+
+ test('key without diacritics has no popup on long-press', async ({ page }) => {
+ await page.goto('/eo');
+ await waitForGame(page);
+
+ // "b" has no diacritics in Esperanto
+ const bKey = page.locator('button[data-char="b"]');
+ const box = await bKey.boundingBox();
+ expect(box).toBeTruthy();
+
+ await page.mouse.move(box!.x + box!.width / 2, box!.y + box!.height / 2);
+ await page.mouse.down();
+ await page.waitForTimeout(400);
+
+ const popup = page.locator('.diacritic-popup');
+ await expect(popup).not.toBeVisible();
+ await page.mouse.up();
+ });
+});
+
+test.describe('Cross-Language State', () => {
+ test('navigating between languages does not bleed game state', async ({ page }) => {
+ // Play a word in English
+ await page.goto('/en');
+ await waitForGame(page);
+ await page.keyboard.type('crane', { delay: 50 });
+ await page.keyboard.press('Enter');
+ await page.waitForTimeout(3000);
+
+ // Verify English has colored tiles
+ const enColored = page.locator(
+ '.game-board .grid-cols-5:first-of-type [class*="correct"], ' +
+ '.game-board .grid-cols-5:first-of-type [class*="incorrect"]'
+ );
+ await expect(enColored).toHaveCount(5, { timeout: 5000 });
+
+ // Navigate to Finnish
+ await page.goto('/fi');
+ await waitForGame(page, { keepState: true });
+
+ // Finnish board should be empty (no English guesses bleeding)
+ const fiFirstRow = page.locator('.game-board .grid-cols-5').first();
+ const fiTileTexts = await fiFirstRow.locator('div').allTextContents();
+ const hasContent = fiTileTexts.some((t) => t.trim().length > 0);
+ expect(hasContent).toBe(false);
+ });
+});
+
test.describe('Multi-language Loading', () => {
const languages = ['es', 'fr', 'de', 'ar', 'ru', 'it', 'tr'];
diff --git a/layouts/game.vue b/layouts/game.vue
index 04169294..f46fdcab 100644
--- a/layouts/game.vue
+++ b/layouts/game.vue
@@ -2,6 +2,7 @@
diff --git a/nuxt.config.ts b/nuxt.config.ts
index d41972d0..86aaaacb 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -4,7 +4,22 @@ export default defineNuxtConfig({
compatibilityDate: '2025-06-14',
devtools: { enabled: true },
- modules: ['@pinia/nuxt', '@vite-pwa/nuxt'],
+ modules: ['@pinia/nuxt', '@vite-pwa/nuxt', '@posthog/nuxt'],
+
+ posthogConfig: {
+ publicKey: 'phc_DMY07B83ghetzxgIbBhobbdSjlueym6vNVVZwM79SPp',
+ clientConfig: {
+ api_host: '/t', // Proxied through Nitro server route
+ ui_host: 'https://eu.posthog.com',
+ autocapture: false,
+ capture_pageview: 'history_change', // Auto-track SPA navigations
+ capture_pageleave: true,
+ session_recording: {
+ sampleRate: 0.03,
+ },
+ persistence: 'localStorage+cookie',
+ },
+ },
css: ['~/assets/css/main.css'],
diff --git a/package.json b/package.json
index 86f08888..46703cba 100644
--- a/package.json
+++ b/package.json
@@ -20,10 +20,10 @@
"dependencies": {
"@khmyznikov/pwa-install": "^0.6.2",
"@pinia/nuxt": "^0.10.1",
+ "@posthog/nuxt": "^1.5.87",
"nuxt": "^3.17.5",
"openai": "^5.8.2",
"pinia": "^3.0.3",
- "posthog-js": "^1.360.2",
"proper-lockfile": "^4.1.2",
"sharp": "^0.34.3",
"vue": "^3.5.27"
@@ -38,8 +38,8 @@
"@tailwindcss/vite": "^4.1.18",
"@types/proper-lockfile": "^4.1.4",
"@vite-pwa/nuxt": "^0.10.8",
- "playwright": "^1.58.2",
"jsdom": "^27.4.0",
+ "playwright": "^1.58.2",
"prettier": "^3.8.1",
"tailwindcss": "^4.1.18",
"typescript": "^5.9.3",
diff --git a/pages/[lang]/index.vue b/pages/[lang]/index.vue
index 1823af4f..b6a08a61 100644
--- a/pages/[lang]/index.vue
+++ b/pages/[lang]/index.vue
@@ -6,7 +6,12 @@
* initializes stores, and renders the game board + keyboard.
*/
-definePageMeta({ layout: 'game' });
+definePageMeta({
+ layout: 'game',
+ // Force full remount when language changes — prevents game state bleed
+ // between languages (Pinia stores are singletons, stale tiles/colors persist)
+ key: (route) => route.params.lang as string,
+});
const route = useRoute();
const lang = route.params.lang as string;
@@ -17,9 +22,7 @@ const showImprovementBanner = ref(false);
function onBannerClick() {
try {
- import('posthog-js').then((mod) =>
- mod.default.capture('language_interest', { language: lang })
- );
+ usePostHog()?.capture('language_interest', { language: lang });
} catch {
// Silently fail
}
@@ -93,9 +96,10 @@ const shareResult = route.query.r as string | undefined;
const validResults = ['1', '2', '3', '4', '5', '6', 'x'];
const isShareLink = shareResult !== undefined && validResults.includes(shareResult);
-// Dynamic share image: use result-specific image for share links, default to _1 otherwise
-const shareImageSuffix = isShareLink ? shareResult : '1';
-const shareImageUrl = `https://wordle.global/images/share/${lang}_${shareImageSuffix}.png`;
+// Dynamic share image: result-specific for share links, generic OG image otherwise
+const shareImageUrl = isShareLink
+ ? `https://wordle.global/images/share/${lang}_${shareResult}.png`
+ : 'https://wordle.global/images/og-image.png';
// Override title/description for share links (matches Flask behavior)
const configText = gameData.value.config.text || {};
@@ -241,8 +245,7 @@ onMounted(() => {
gameOver: game.gameOver,
lastGuessValid: true,
}));
- analytics.initErrorTracking(langStore.languageCode);
- analytics.identifyUser(langStore.languageCode);
+ analytics.identifyUser(stats.gameResults);
} catch (err) {
console.warn('[wordle] Failed to restore game state:', err);
}
diff --git a/pages/[lang]/word/[id].vue b/pages/[lang]/word/[id].vue
index 22e26908..1b4b30b4 100644
--- a/pages/[lang]/word/[id].vue
+++ b/pages/[lang]/word/[id].vue
@@ -8,6 +8,7 @@
const route = useRoute();
const lang = route.params.lang as string;
+const langStore = useLanguageStore();
const dayIdx = parseInt(route.params.id as string, 10);
const { data: wordData, error } = await useFetch(`/api/${lang}/word/${dayIdx}`);
@@ -324,7 +325,7 @@ onMounted(() => {
- Today's word!
+ {{ langStore.config?.ui?.todays_word_reveal }}
Play today's game to reveal this word.
@@ -333,7 +334,7 @@ onMounted(() => {
:to="`/${lang}`"
class="inline-block py-2.5 px-6 text-white font-semibold rounded-lg shadow-md bg-green-500 hover:bg-green-600 transition-colors"
>
- Play now
+ {{ langStore.config?.ui?.play_now }}
@@ -363,7 +364,7 @@ onMounted(() => {
- Definition
+ {{ langStore.config?.ui?.definition }}
{
- Definition
+ {{ langStore.config?.ui?.definition }}
{
- Definition
+ {{ langStore.config?.ui?.definition }}
{
- Community Stats
+ {{ langStore.config?.ui?.community_stats }}
{{ wordStats.total }}
- Players
+ {{ langStore.config?.ui?.players }}
@@ -624,7 +625,7 @@ onMounted(() => {
rel="noopener noreferrer"
class="text-xs text-neutral-400 hover:text-neutral-500 dark:hover:text-neutral-300"
>
- Report bad word
+ {{ langStore.config?.ui?.report_bad_word }}
diff --git a/pages/[lang]/words.vue b/pages/[lang]/words.vue
index 665f849e..78dd1cc4 100644
--- a/pages/[lang]/words.vue
+++ b/pages/[lang]/words.vue
@@ -9,6 +9,7 @@
const route = useRoute();
const lang = route.params.lang as string;
+const langStore = useLanguageStore();
const page = computed(() => parseInt((route.query.page as string) || '1', 10));
const { data: wordsData, error } = await useFetch(`/api/${lang}/words`, {
@@ -200,10 +201,11 @@ onMounted(() => {
← Play Wordle {{ langNameNative }}
- Wordle {{ langNameNative }} — All Words
+ Wordle {{ langNameNative }} — {{ langStore.config?.ui?.all_words }}
- {{ todaysIdx.toLocaleString() }} daily words and counting
+ {{ todaysIdx.toLocaleString() }}
+ {{ langStore.config?.ui?.daily_words_counting }}
@@ -231,7 +233,7 @@ onMounted(() => {
- Today's word — Play to reveal!
+ {{ langStore.config?.ui?.todays_word_reveal }}
@@ -256,7 +258,7 @@ onMounted(() => {
- Today
+ {{ langStore.config?.ui?.today }}
@@ -306,8 +308,8 @@ onMounted(() => {
v-if="w.stats && w.stats.total > 0"
class="flex justify-center gap-3 mt-2 text-[10px] text-neutral-400"
>
-
{{ w.stats.total }} plays
-
{{ winRate(w.stats) }}% win
+
{{ w.stats.total }} {{ langStore.config?.ui?.plays }}
+
{{ winRate(w.stats) }}% {{ langStore.config?.ui?.win }}
diff --git a/pages/accessibility.vue b/pages/accessibility.vue
new file mode 100644
index 00000000..62658cd6
--- /dev/null
+++ b/pages/accessibility.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+ ← Back to Wordle Global
+
+ Accessibility Statement
+
+
+ Wordle Global is committed to being accessible to all players, including those who
+ use screen readers, keyboard-only navigation, or other assistive technologies. We
+ target
+ WCAG 2.1 Level AA conformance.
+
+
+ What we support
+
+
+
+ Screen readers: Game tiles announce their letter and state
+ (correct, present, absent). Guess results are announced via a live region after
+ each submission. Notifications (invalid word, win, lose) use
+ role="alert".
+
+
+ Keyboard navigation: The entire game is playable with a
+ physical keyboard. A "Skip to game" link is available for keyboard users. Modal
+ dialogs are properly labeled with role="dialog".
+
+
+ Reduced motion: All animations (tile flip, bounce, shake, key
+ pop) are disabled when the operating system's "reduce motion" preference is
+ enabled.
+
+
+ High contrast / colorblind mode: Available in Settings.
+ Replaces green/yellow with blue/orange for deuteranopia and protanopia.
+
+ Dark mode: Full dark mode support, togglable in Settings.
+
+ RTL languages: Hebrew, Arabic, Persian, Kurdish, and Urdu
+ render right-to-left with correct typing direction.
+
+
+ 79 languages: Each language has a localized keyboard, diacritic
+ support (long-press for accented characters), and normalized input so accents
+ are optional.
+
+
+
+ Known limitations
+
+
+
+ Color contrast on green and yellow tiles with white text does not meet the 4.5:1
+ WCAG AA ratio for normal text. We are investigating darker background colors or
+ dark text alternatives.
+
+
+ The diacritic long-press popup (for accented characters) is not yet accessible
+ via keyboard alone. Keyboard users can type diacritics using their operating
+ system's input method (compose keys, dead keys, etc.).
+
+
+ Modal focus trapping is not yet implemented. Tab can escape the modal to
+ background content.
+
+
+
+ Feedback
+
+
+ If you encounter an accessibility barrier, please
+ open a GitHub issue
+ with the "accessibility" label. We take accessibility reports seriously and will
+ respond promptly.
+
+
+
+ Last updated: March 2026. This statement is reviewed with each major release.
+
+
+
+
diff --git a/plugins/analytics.client.ts b/plugins/analytics.client.ts
index 5e36194b..204b19a6 100644
--- a/plugins/analytics.client.ts
+++ b/plugins/analytics.client.ts
@@ -1,12 +1,10 @@
/**
* Analytics Plugin (client-only)
*
- * Initializes Google Analytics (GA4) and PostHog.
- * Defers script loading to after page load for performance.
+ * Initializes Google Analytics (GA4).
+ * PostHog is handled by @posthog/nuxt module (see nuxt.config.ts).
*/
-import posthog from 'posthog-js';
-
declare global {
interface Window {
dataLayer: unknown[];
@@ -15,8 +13,6 @@ declare global {
}
const GA_MEASUREMENT_ID = 'G-273H1MLL3T';
-const POSTHOG_KEY = 'phc_DMY07B83ghetzxgIbBhobbdSjlueym6vNVVZwM79SPp';
-const POSTHOG_HOST = 'https://eu.i.posthog.com';
function loadGtagScript() {
const script = document.createElement('script');
@@ -42,40 +38,6 @@ function initGA4() {
}
}
-function initPostHog() {
- try {
- posthog.init(POSTHOG_KEY, {
- api_host: POSTHOG_HOST,
- defaults: '2026-01-30',
- autocapture: false,
- capture_pageview: false, // We track pageviews via trackPageView/trackHomepageView
- capture_pageleave: true,
- disable_session_recording: false,
- session_recording: {
- sampleRate: 0.03,
- },
- persistence: 'localStorage+cookie',
- loaded: (ph) => {
- // Register language as a super property if available via route
- const route = useRoute();
- const lang = route.params.lang as string | undefined;
- if (lang) {
- ph.register({ language: lang });
- }
- },
- });
- } catch {
- // Silently fail - analytics should never break the app
- }
-}
-
export default defineNuxtPlugin(() => {
initGA4();
- initPostHog();
-
- return {
- provide: {
- posthog: posthog,
- },
- };
});
diff --git a/plugins/pwa.client.ts b/plugins/pwa.client.ts
index e9ccf1fd..ea107a67 100644
--- a/plugins/pwa.client.ts
+++ b/plugins/pwa.client.ts
@@ -13,6 +13,7 @@
import '@khmyznikov/pwa-install';
import type { BeforeInstallPromptEvent, PWAStatus } from '~/utils/types';
+import { isStandalone } from '~/utils/storage';
const DISMISS_DURATION_MS = 7 * 24 * 60 * 60 * 1000; // 1 week
@@ -35,13 +36,6 @@ function isIOS(): boolean {
);
}
-function isStandalone(): boolean {
- return (
- window.matchMedia('(display-mode: standalone)').matches ||
- (navigator as Navigator & { standalone?: boolean }).standalone === true
- );
-}
-
export default defineNuxtPlugin(() => {
let deferredPrompt: BeforeInstallPromptEvent | null = null;
let dismissed = isDismissed();
@@ -75,6 +69,9 @@ export default defineNuxtPlugin(() => {
const banner = getBanner();
if (banner && (deferredPrompt || isIOS())) {
banner.style.display = 'flex';
+ try {
+ usePostHog()?.capture('pwa_prompt_shown');
+ } catch {}
}
}
@@ -97,9 +94,14 @@ export default defineNuxtPlugin(() => {
if (deferredPrompt) {
deferredPrompt.prompt();
deferredPrompt.userChoice.then((choice) => {
- if (choice.outcome === 'accepted') {
- // Analytics tracking could go here
- }
+ try {
+ const ph = usePostHog();
+ if (choice.outcome === 'accepted') {
+ ph?.capture('pwa_install');
+ } else {
+ ph?.capture('pwa_dismiss');
+ }
+ } catch {}
deferredPrompt = null;
hideBanner();
});
@@ -113,6 +115,9 @@ export default defineNuxtPlugin(() => {
} catch {
// localStorage may throw in private browsing mode
}
+ try {
+ usePostHog()?.capture('pwa_dismiss');
+ } catch {}
hideBanner();
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7002a69c..d8a81583 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -14,6 +14,9 @@ importers:
'@pinia/nuxt':
specifier: ^0.10.1
version: 0.10.1(magicast@0.5.2)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3)))
+ '@posthog/nuxt':
+ specifier: ^1.5.87
+ version: 1.5.87(magicast@0.5.2)
nuxt:
specifier: ^3.17.5
version: 3.21.2(@parcel/watcher@2.5.6)(@types/node@25.5.0)(@vue/compiler-sfc@3.5.30)(cac@6.7.14)(db0@0.3.4)(ioredis@5.10.0)(lightningcss@1.31.1)(magicast@0.5.2)(rollup-plugin-visualizer@6.0.11(rollup@4.59.0))(rollup@4.59.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3))(yaml@2.8.2)
@@ -23,9 +26,6 @@ importers:
pinia:
specifier: ^3.0.3
version: 3.0.4(typescript@5.9.3)(vue@3.5.30(typescript@5.9.3))
- posthog-js:
- specifier: ^1.360.2
- version: 1.360.2
proper-lockfile:
specifier: ^4.1.2
version: 4.1.2
@@ -1682,11 +1682,20 @@ packages:
'@poppinss/exception@1.2.3':
resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==}
- '@posthog/core@1.23.4':
- resolution: {integrity: sha512-gSM1gnIuw5UOBUOTz0IhCTH8jOHoFr5rzSDb5m7fn9ofLHvz3boZT1L1f+bcuk+mvzNJfrJ3ByVQGKmUQnKQ8g==}
+ '@posthog/cli@0.7.2':
+ resolution: {integrity: sha512-xHZ+S+BL8JUz0T18jS4gWanXVhyBLZcTtS4LaQHm4mc5tPcii7oA2rkZGdxtlw7vlC5vXNBmKJgz2yD4TFZwOg==}
+ engines: {node: '>=14', npm: '>=6'}
+ hasBin: true
+
+ '@posthog/core@1.24.0':
+ resolution: {integrity: sha512-Wkp9mgNfgdf6+G4C1VMKakm2RXKQFf4bb5/CPQRAjpqv9l6BY36zZrD1+X5Y2XIAzZqbMKRxsDu3V1r6uKu7/A==}
+
+ '@posthog/nuxt@1.5.87':
+ resolution: {integrity: sha512-AKNFY1NQWDozG2UL9olCstZVTiSr/mmfWcSRDbx7BiWdPx5SGmWdxKwEoyN7KR0/Ijjm9dHsERqtNKy5NbMrDQ==}
+ engines: {node: ^20.20.0 || >=22.22.0}
- '@posthog/types@1.360.2':
- resolution: {integrity: sha512-U48CbtmX5kETZvWjaJVlublSA1aLV99m71TQtgxWksBMXINS/3C7j+KqlMO6wH7SuaEZQnjaxh1KYGH4nRCaaA==}
+ '@posthog/types@1.362.0':
+ resolution: {integrity: sha512-15wOI5uulkfzpkSQKVN4atZecAla2Hxr8IBIB8islqDvqY+42vbR+tMeDKMman9+FUoAqMzE0OnB8VIbM1QY0w==}
'@protobufjs/aspromise@1.1.2':
resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
@@ -2338,6 +2347,9 @@ packages:
async@3.2.6:
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
at-least-node@1.0.0:
resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
engines: {node: '>= 4.0.0'}
@@ -2353,6 +2365,12 @@ packages:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
+ axios-proxy-builder@0.1.2:
+ resolution: {integrity: sha512-6uBVsBZzkB3tCC8iyx59mCjQckhB8+GQrI9Cop8eC7ybIsvs/KtnNgEBfRMSEa7GqK2VBGUzgjNYMdPIfotyPA==}
+
+ axios@1.13.6:
+ resolution: {integrity: sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==}
+
b4a@1.8.0:
resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==}
peerDependencies:
@@ -2534,6 +2552,10 @@ packages:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
+ clone@1.0.4:
+ resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
+ engines: {node: '>=0.8'}
+
cluster-key-slot@1.1.2:
resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
engines: {node: '>=0.10.0'}
@@ -2548,6 +2570,10 @@ packages:
colord@2.9.3:
resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
commander@11.1.0:
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
engines: {node: '>=16'}
@@ -2579,6 +2605,10 @@ packages:
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
engines: {node: ^14.18.0 || >=16.10.0}
+ console.table@0.10.0:
+ resolution: {integrity: sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==}
+ engines: {node: '> 0.10'}
+
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
@@ -2743,6 +2773,9 @@ packages:
resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==}
engines: {node: '>=18'}
+ defaults@1.0.4:
+ resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+
define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
@@ -2762,6 +2795,10 @@ packages:
defu@6.1.4:
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
denque@2.1.0:
resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
engines: {node: '>=0.10'}
@@ -2818,6 +2855,9 @@ packages:
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ easy-table@1.1.0:
+ resolution: {integrity: sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==}
+
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
@@ -2991,6 +3031,15 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
+ follow-redirects@1.15.11:
+ resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
for-each@0.3.5:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
engines: {node: '>= 0.4'}
@@ -2999,6 +3048,10 @@ packages:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
+ form-data@4.0.5:
+ resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
+ engines: {node: '>= 6'}
+
fraction.js@5.3.4:
resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
@@ -3633,10 +3686,18 @@ packages:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
mime-db@1.54.0:
resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
engines: {node: '>= 0.6'}
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
mime-types@3.0.2:
resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==}
engines: {node: '>=18'}
@@ -4108,8 +4169,17 @@ packages:
resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==}
engines: {node: ^10 || ^12 || >=14}
- posthog-js@1.360.2:
- resolution: {integrity: sha512-/Wed0mOuRUfyEGT/BRQaokCqBlxrEceE7MDT9A00lU5tXo443/2Pg9ZiqN5sucUluZF47hwGORpYPoVUt32UFw==}
+ posthog-js@1.362.0:
+ resolution: {integrity: sha512-qPHkAk9G19xVDAQLoQ1FOLNE9BBq+FDePhkOevbdUQcFJVNHVc+j7E/ndQ+olGnDuiSMdgAb5c6yGk7PD9Z0ug==}
+
+ posthog-node@5.28.4:
+ resolution: {integrity: sha512-j8JBDNuSwUWR0TBZNuCwNRHQ+OReVz1UwDYMDol+iqFTbYrIKZnyC05oyGtSBRGntrYBiaIWFbH9N3kZuxfVdg==}
+ engines: {node: ^20.20.0 || >=22.22.0}
+ peerDependencies:
+ rxjs: ^7.0.0
+ peerDependenciesMeta:
+ rxjs:
+ optional: true
preact@10.29.0:
resolution: {integrity: sha512-wSAGyk2bYR1c7t3SZ3jHcM6xy0lcBcDel6lODcs9ME6Th++Dx2KU+6D3HD8wMMKGA8Wpw7OMd3/4RGzYRpzwRg==}
@@ -4145,6 +4215,9 @@ packages:
resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==}
engines: {node: '>=12.0.0'}
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
@@ -4258,6 +4331,11 @@ packages:
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+ rimraf@6.1.3:
+ resolution: {integrity: sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==}
+ engines: {node: 20 || >=22}
+ hasBin: true
+
rollup-plugin-visualizer@6.0.11:
resolution: {integrity: sha512-TBwVHVY7buHjIKVLqr9scTVFwqZqMXINcCphPwIWKPDCOBIa+jCQfafvbjRJDZgXdq/A996Dy6yGJ/+/NtAXDQ==}
engines: {node: '>=18'}
@@ -4659,6 +4737,10 @@ packages:
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+ tunnel@0.0.6:
+ resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==}
+ engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
+
type-fest@0.16.0:
resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==}
engines: {node: '>=10'}
@@ -5054,6 +5136,9 @@ packages:
resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
engines: {node: '>=18'}
+ wcwidth@1.0.1:
+ resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+
web-vitals@5.1.0:
resolution: {integrity: sha512-ArI3kx5jI0atlTtmV0fWU3fjpLmq/nD3Zr1iFFlJLaqa5wLBkUSzINwBPySCX/8jRyjlmy1Volw1kz1g9XE4Jg==}
@@ -6933,11 +7018,33 @@ snapshots:
'@poppinss/exception@1.2.3': {}
- '@posthog/core@1.23.4':
+ '@posthog/cli@0.7.2':
+ dependencies:
+ axios: 1.13.6
+ axios-proxy-builder: 0.1.2
+ console.table: 0.10.0
+ detect-libc: 2.1.2
+ rimraf: 6.1.3
+ transitivePeerDependencies:
+ - debug
+
+ '@posthog/core@1.24.0':
dependencies:
cross-spawn: 7.0.6
- '@posthog/types@1.360.2': {}
+ '@posthog/nuxt@1.5.87(magicast@0.5.2)':
+ dependencies:
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@posthog/cli': 0.7.2
+ '@posthog/core': 1.24.0
+ posthog-js: 1.362.0
+ posthog-node: 5.28.4
+ transitivePeerDependencies:
+ - debug
+ - magicast
+ - rxjs
+
+ '@posthog/types@1.362.0': {}
'@protobufjs/aspromise@1.1.2': {}
@@ -7617,6 +7724,8 @@ snapshots:
async@3.2.6: {}
+ asynckit@0.4.0: {}
+
at-least-node@1.0.0: {}
autoprefixer@10.4.27(postcss@8.5.8):
@@ -7632,6 +7741,18 @@ snapshots:
dependencies:
possible-typed-array-names: 1.1.0
+ axios-proxy-builder@0.1.2:
+ dependencies:
+ tunnel: 0.0.6
+
+ axios@1.13.6:
+ dependencies:
+ follow-redirects: 1.15.11
+ form-data: 4.0.5
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
b4a@1.8.0: {}
babel-plugin-polyfill-corejs2@0.4.16(@babel/core@7.29.0):
@@ -7821,6 +7942,9 @@ snapshots:
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
+ clone@1.0.4:
+ optional: true
+
cluster-key-slot@1.1.2: {}
color-convert@2.0.1:
@@ -7831,6 +7955,10 @@ snapshots:
colord@2.9.3: {}
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
commander@11.1.0: {}
commander@2.20.3: {}
@@ -7855,6 +7983,10 @@ snapshots:
consola@3.4.2: {}
+ console.table@0.10.0:
+ dependencies:
+ easy-table: 1.1.0
+
convert-source-map@2.0.0: {}
cookie-es@1.2.2: {}
@@ -8017,6 +8149,11 @@ snapshots:
bundle-name: 4.1.0
default-browser-id: 5.0.1
+ defaults@1.0.4:
+ dependencies:
+ clone: 1.0.4
+ optional: true
+
define-data-property@1.1.4:
dependencies:
es-define-property: 1.0.1
@@ -8035,6 +8172,8 @@ snapshots:
defu@6.1.4: {}
+ delayed-stream@1.0.0: {}
+
denque@2.1.0: {}
depd@2.0.0: {}
@@ -8085,6 +8224,10 @@ snapshots:
eastasianwidth@0.2.0: {}
+ easy-table@1.1.0:
+ optionalDependencies:
+ wcwidth: 1.0.1
+
ee-first@1.1.1: {}
ejs@3.1.10:
@@ -8312,6 +8455,8 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
+ follow-redirects@1.15.11: {}
+
for-each@0.3.5:
dependencies:
is-callable: 1.2.7
@@ -8321,6 +8466,14 @@ snapshots:
cross-spawn: 7.0.6
signal-exit: 4.1.0
+ form-data@4.0.5:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ es-set-tostringtag: 2.1.0
+ hasown: 2.0.2
+ mime-types: 2.1.35
+
fraction.js@5.3.4: {}
fresh@2.0.0: {}
@@ -8975,8 +9128,14 @@ snapshots:
braces: 3.0.3
picomatch: 2.3.1
+ mime-db@1.52.0: {}
+
mime-db@1.54.0: {}
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
mime-types@3.0.2:
dependencies:
mime-db: 1.54.0
@@ -9658,15 +9817,15 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
- posthog-js@1.360.2:
+ posthog-js@1.362.0:
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/api-logs': 0.208.0
'@opentelemetry/exporter-logs-otlp-http': 0.208.0(@opentelemetry/api@1.9.0)
'@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0)
- '@posthog/core': 1.23.4
- '@posthog/types': 1.360.2
+ '@posthog/core': 1.24.0
+ '@posthog/types': 1.362.0
core-js: 3.48.0
dompurify: 3.3.3
fflate: 0.4.8
@@ -9674,6 +9833,10 @@ snapshots:
query-selector-shadow-dom: 1.0.1
web-vitals: 5.1.0
+ posthog-node@5.28.4:
+ dependencies:
+ '@posthog/core': 1.24.0
+
preact@10.29.0: {}
prettier@3.8.1: {}
@@ -9709,6 +9872,8 @@ snapshots:
'@types/node': 25.5.0
long: 5.3.2
+ proxy-from-env@1.1.0: {}
+
punycode@2.3.1: {}
quansync@0.2.11: {}
@@ -9828,6 +9993,11 @@ snapshots:
rfdc@1.4.1: {}
+ rimraf@6.1.3:
+ dependencies:
+ glob: 13.0.6
+ package-json-from-dist: 1.0.1
+
rollup-plugin-visualizer@6.0.11(rollup@4.59.0):
dependencies:
open: 8.4.2
@@ -10323,6 +10493,8 @@ snapshots:
tslib@2.8.1:
optional: true
+ tunnel@0.0.6: {}
+
type-fest@0.16.0: {}
type-fest@5.4.4:
@@ -10704,6 +10876,11 @@ snapshots:
dependencies:
xml-name-validator: 5.0.0
+ wcwidth@1.0.1:
+ dependencies:
+ defaults: 1.0.4
+ optional: true
+
web-vitals@5.1.0: {}
webidl-conversions@3.0.1: {}
diff --git a/qa-screenshots.ts b/qa-screenshots.ts
deleted file mode 100644
index a21fcd1b..00000000
--- a/qa-screenshots.ts
+++ /dev/null
@@ -1,130 +0,0 @@
-/**
- * QA Screenshot Script
- * Takes screenshots of every page and reports console errors.
- * Run: npx tsx qa-screenshots.ts
- */
-import { chromium } from 'playwright';
-import { mkdirSync } from 'fs';
-
-const BASE = 'http://localhost:3000';
-const OUT = './qa-screenshots';
-
-const PAGES = [
- { name: '01-homepage', url: '/', wait: 2000 },
- { name: '02-game-en', url: '/en', wait: 3000 },
- { name: '03-game-fi', url: '/fi', wait: 2000 },
- { name: '04-game-he-rtl', url: '/he', wait: 2000 },
- { name: '05-game-ar-rtl', url: '/ar', wait: 2000 },
- { name: '06-words-en', url: '/en/words', wait: 2000 },
- { name: '07-word-detail', url: '/en/word/1720', wait: 2000 },
- { name: '08-word-today', url: '/en/word/1729', wait: 2000 },
- { name: '09-stats', url: '/stats', wait: 2000 },
- { name: '10-homepage-dark', url: '/', wait: 2000, dark: true },
- { name: '11-game-en-dark', url: '/en', wait: 2000, dark: true },
-];
-
-async function run() {
- mkdirSync(OUT, { recursive: true });
- const browser = await chromium.launch();
-
- const errors: string[] = [];
- const warnings: string[] = [];
-
- for (const page of PAGES) {
- console.log(`\n=== ${page.name} (${page.url}) ===`);
-
- const context = await browser.newContext({
- viewport: { width: 390, height: 844 }, // iPhone 14 size
- colorScheme: page.dark ? 'dark' : 'light',
- });
-
- if (page.dark) {
- await context.addInitScript(() => {
- localStorage.setItem('darkMode', 'true');
- });
- }
-
- const p = await context.newPage();
- const pageErrors: string[] = [];
- const pageWarnings: string[] = [];
-
- p.on('console', (msg) => {
- if (msg.type() === 'error') {
- const text = msg.text();
- if (!text.includes('favicon') && !text.includes('DevTools')) {
- pageErrors.push(text);
- }
- }
- if (msg.type() === 'warning') {
- const text = msg.text();
- if (text.includes('Failed to resolve') || text.includes('missing template')) {
- pageWarnings.push(text);
- }
- }
- });
-
- p.on('pageerror', (err) => {
- pageErrors.push(`PAGE ERROR: ${err.message}`);
- });
-
- try {
- const response = await p.goto(`${BASE}${page.url}`, {
- waitUntil: 'networkidle',
- timeout: 15000,
- });
- console.log(` Status: ${response?.status()}`);
-
- await p.waitForTimeout(page.wait);
-
- await p.screenshot({
- path: `${OUT}/${page.name}.png`,
- fullPage: true,
- });
- console.log(` Screenshot: ${OUT}/${page.name}.png`);
-
- if (pageErrors.length > 0) {
- console.log(` ERRORS (${pageErrors.length}):`);
- for (const e of pageErrors.slice(0, 5)) {
- console.log(` - ${e.substring(0, 200)}`);
- errors.push(`[${page.name}] ${e.substring(0, 200)}`);
- }
- }
- if (pageWarnings.length > 0) {
- console.log(` WARNINGS (${pageWarnings.length}):`);
- for (const w of pageWarnings.slice(0, 3)) {
- console.log(` - ${w.substring(0, 200)}`);
- warnings.push(`[${page.name}] ${w.substring(0, 200)}`);
- }
- }
- if (pageErrors.length === 0 && pageWarnings.length === 0) {
- console.log(` ✓ Clean`);
- }
- } catch (err: any) {
- console.log(` FAILED: ${err.message}`);
- errors.push(`[${page.name}] Navigation failed: ${err.message}`);
- }
-
- await context.close();
- }
-
- await browser.close();
-
- console.log('\n\n========== QA SUMMARY ==========');
- console.log(`Pages tested: ${PAGES.length}`);
- console.log(`Errors: ${errors.length}`);
- console.log(`Warnings: ${warnings.length}`);
-
- if (errors.length > 0) {
- console.log('\nAll Errors:');
- for (const e of errors) console.log(` ✗ ${e}`);
- }
- if (warnings.length > 0) {
- console.log('\nAll Warnings:');
- for (const w of warnings) console.log(` ⚠ ${w}`);
- }
- if (errors.length === 0 && warnings.length === 0) {
- console.log('\n✓ All pages clean — no errors or component warnings');
- }
-}
-
-run().catch(console.error);
diff --git a/scripts/cleanup_language_configs.py b/scripts/cleanup_language_configs.py
new file mode 100644
index 00000000..c65a7e75
--- /dev/null
+++ b/scripts/cleanup_language_configs.py
@@ -0,0 +1,100 @@
+#!/usr/bin/env python3
+"""Clean up language_config.json files across all languages.
+
+1. Remove dead keys (replaced by newer keys during Nuxt migration)
+2. Rename kebab-case keys to snake_case for consistency
+"""
+
+import json
+from pathlib import Path
+
+LANGUAGES_DIR = Path(__file__).parent.parent / "data" / "languages"
+
+# Keys that are no longer referenced in any Vue template or TypeScript code
+DEAD_KEYS = {
+ "ui": {
+ "easy_mode",
+ "easy_mode_label",
+ "haptic_feedback",
+ "haptic_feedback_desc",
+ "show_definitions",
+ "show_definitions_desc",
+ "sound_effects",
+ "sound_effects_desc",
+ "word_art",
+ "word_art_desc",
+ },
+}
+
+# Kebab-case → snake_case renames
+RENAMES = {
+ "text": {
+ "notification-copied": "notification_copied",
+ "notification-word-not-valid": "notification_word_not_valid",
+ "notification-partial-word": "notification_partial_word",
+ },
+}
+
+
+def cleanup_config(config: dict) -> tuple[dict, int, int]:
+ """Clean a single config dict. Returns (cleaned_config, keys_removed, keys_renamed)."""
+ removed = 0
+ renamed = 0
+
+ for section, dead_keys in DEAD_KEYS.items():
+ if section in config:
+ for key in dead_keys:
+ if key in config[section]:
+ del config[section][key]
+ removed += 1
+
+ for section, rename_map in RENAMES.items():
+ if section in config:
+ for old_key, new_key in rename_map.items():
+ if old_key in config[section]:
+ config[section][new_key] = config[section].pop(old_key)
+ renamed += 1
+
+ return config, removed, renamed
+
+
+def main():
+ # Clean default config
+ default_path = LANGUAGES_DIR.parent / "default_language_config.json"
+ with open(default_path, encoding="utf-8") as f:
+ default_config = json.load(f)
+
+ default_config, d_removed, d_renamed = cleanup_config(default_config)
+ with open(default_path, "w", encoding="utf-8") as f:
+ json.dump(default_config, f, ensure_ascii=False, indent=4)
+ f.write("\n")
+ print(f"default: removed {d_removed}, renamed {d_renamed}")
+
+ # Clean all language configs
+ total_removed = d_removed
+ total_renamed = d_renamed
+
+ for lang_dir in sorted(LANGUAGES_DIR.iterdir()):
+ config_path = lang_dir / "language_config.json"
+ if not config_path.exists():
+ continue
+
+ with open(config_path, encoding="utf-8") as f:
+ config = json.load(f)
+
+ config, removed, renamed = cleanup_config(config)
+
+ with open(config_path, "w", encoding="utf-8") as f:
+ json.dump(config, f, ensure_ascii=False, indent=4)
+ f.write("\n")
+
+ if removed or renamed:
+ print(f" {lang_dir.name}: removed {removed}, renamed {renamed}")
+ total_removed += removed
+ total_renamed += renamed
+
+ print(f"\nTotal: {total_removed} keys removed, {total_renamed} keys renamed")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/server/api/[lang]/word-image/[word].get.ts b/server/api/[lang]/word-image/[word].get.ts
index 7cecdccc..a0323eb4 100644
--- a/server/api/[lang]/word-image/[word].get.ts
+++ b/server/api/[lang]/word-image/[word].get.ts
@@ -10,37 +10,38 @@ import { getTodaysIdx, getWordForDay } from '../../../utils/word-selection';
import { fetchDefinition } from '../../../utils/definitions';
// Top 30 languages get DALL-E images (cost control)
+// Top 30 languages by sessions (updated Mar 18, 2026 from GA4)
const LANGUAGE_POPULARITY = [
- 'fi',
'en',
+ 'fi',
+ 'de',
'ar',
- 'tr',
+ 'es',
'hr',
+ 'tr',
+ 'sv',
'bg',
- 'de',
'he',
- 'sv',
+ 'it',
+ 'da',
'ru',
'hu',
- 'es',
- 'et',
- 'da',
+ 'pt',
+ 'fr',
'sr',
+ 'et',
+ 'nb',
+ 'sk',
'ro',
'ca',
- 'sk',
- 'it',
- 'az',
- 'fr',
- 'lv',
- 'la',
- 'gl',
'mk',
- 'uk',
- 'pt',
- 'vi',
+ 'nl',
'pl',
- 'hy',
+ 'la',
+ 'ja',
+ 'az',
+ 'uk',
+ 'gl',
];
const IMAGE_LANGUAGES = new Set(LANGUAGE_POPULARITY);
const IMAGE_MIN_DAY_IDX = 1708;
diff --git a/server/routes/t/[...path].ts b/server/routes/t/[...path].ts
new file mode 100644
index 00000000..3156fa06
--- /dev/null
+++ b/server/routes/t/[...path].ts
@@ -0,0 +1,24 @@
+/**
+ * PostHog reverse proxy — forwards /t/* to eu.i.posthog.com
+ *
+ * Defeats ad blockers by routing PostHog traffic through our own domain.
+ * Preserves client IP for geolocation via x-forwarded-for.
+ */
+export default defineEventHandler(async (event) => {
+ const path = event.context.params?.path || '';
+ const url = getRequestURL(event);
+ const search = url.search || '';
+
+ const hostname = path.startsWith('static/') ? 'eu-assets.i.posthog.com' : 'eu.i.posthog.com';
+ const targetUrl = `https://${hostname}/${path}${search}`;
+
+ // Use server-observed IP only (ignore client x-forwarded-for to prevent spoofing)
+ const clientIp = getRequestIP(event, { xForwardedFor: true });
+
+ return proxyRequest(event, targetUrl, {
+ headers: {
+ host: hostname,
+ ...(clientIp ? { 'x-forwarded-for': clientIp } : {}),
+ },
+ });
+});
diff --git a/server/utils/definitions.ts b/server/utils/definitions.ts
index a3e08abe..71fcff29 100644
--- a/server/utils/definitions.ts
+++ b/server/utils/definitions.ts
@@ -59,6 +59,7 @@ function lookupKaikki(
part_of_speech: null,
source,
url: wiktionaryUrl(word, langCode),
+ ts: Math.floor(Date.now() / 1000),
};
}
return null;
@@ -138,10 +139,35 @@ const LLM_LANG_NAMES: Record = {
hyw: 'Western Armenian',
ckb: 'Central Kurdish',
pau: 'Palauan',
+ ia: 'Interlingua',
ie: 'Interlingue',
rw: 'Kinyarwanda',
tlh: 'Klingon',
qya: 'Quenya',
+ // Added: languages that were missing LLM definition support
+ bn: 'Bengali',
+ eo: 'Esperanto',
+ fo: 'Faroese',
+ fur: 'Friulian',
+ fy: 'West Frisian',
+ gd: 'Scottish Gaelic',
+ ha: 'Hausa',
+ hi: 'Hindi',
+ ja: 'Japanese',
+ lb: 'Luxembourgish',
+ ltg: 'Latgalian',
+ mi: 'Māori',
+ mn: 'Mongolian',
+ mr: 'Marathi',
+ nds: 'Low German',
+ ne: 'Nepali',
+ pa: 'Punjabi',
+ sw: 'Swahili',
+ tk: 'Turkmen',
+ tl: 'Tagalog',
+ ur: 'Urdu',
+ uz: 'Uzbek',
+ yo: 'Yoruba',
};
const LLM_MODEL = 'gpt-5.2';
@@ -259,7 +285,17 @@ export async function fetchDefinition(
}
// Expired — fall through to LLM
} else if (loaded && Object.keys(loaded).length > 0) {
- return loaded;
+ // If cached result is English-only (kaikki-en fallback), try LLM for native
+ // But only retry once per 24h to avoid hammering LLM
+ if (loaded.source === 'kaikki-en' && !loaded.definition_native) {
+ const cachedTs = loaded.ts || 0;
+ if (Date.now() / 1000 - cachedTs < NEGATIVE_CACHE_TTL) {
+ return loaded; // Too soon to retry, serve cached English
+ }
+ // Expired — fall through to LLM
+ } else {
+ return loaded;
+ }
}
} catch {
// Fall through
diff --git a/stores/game.ts b/stores/game.ts
index 13bc08ef..762f1686 100644
--- a/stores/game.ts
+++ b/stores/game.ts
@@ -29,6 +29,7 @@ import { calculateCommunityPercentile } from '~/utils/stats';
import { WORD_LENGTH, MAX_GUESSES } from '~/utils/types';
import type { KeyState, TileColor, Notification } from '~/utils/types';
import { animateRevealRow, animateKeyNudge } from '~/utils/game/useGameAnimations';
+import { getOrCreateId } from '~/utils/storage';
// ---------------------------------------------------------------------------
// Constants
@@ -133,6 +134,9 @@ export const useGameStore = defineStore('game', () => {
const shareButtonState = ref<'idle' | 'success'>('idle');
+ /** Screen reader announcement — updated after each guess reveal. */
+ const srAnnouncement = ref('');
+
// Definition & word image for stats modal display
const todayDefinition = ref<{
word: string;
@@ -274,10 +278,11 @@ export const useGameStore = defineStore('game', () => {
const lang = useLanguageStore();
- // Try exact match first
+ // Exact match — respect what the user typed (e.g., "lapiz" stays "lapiz")
if (lang.wordListSet.has(word)) return word;
- // Try normalized match (e.g., "borde" matches "börde")
+ // Normalized match — auto-correct to canonical form (e.g., "borde" → "börde")
+ // Only triggers when the typed form isn't in the word list itself
const normalized = normalizeWord(word, lang.normalizeMap);
const canonical = getNormalizedWordMap().get(normalized);
if (canonical) return canonical;
@@ -448,7 +453,9 @@ export const useGameStore = defineStore('game', () => {
if (['Enter', '⇨', '⟹', 'ENTER'].includes(key)) {
if (!fullWordInputted.value) {
shakeRow(activeRow.value);
- showNotification('Please enter a full word');
+ showNotification(
+ lang.config?.text?.notification_partial_word || 'Please enter a full word'
+ );
return;
}
@@ -525,6 +532,23 @@ export const useGameStore = defineStore('game', () => {
animating.value = false;
showTiles();
+ // Announce guess result for screen readers
+ const rowTiles = tiles.value[revealingRow];
+ const rowColors = tileColors.value[revealingRow];
+ if (rowTiles && rowColors) {
+ const parts = rowTiles.map((letter, i) => {
+ const color = rowColors[i];
+ const state =
+ color === 'correct'
+ ? 'correct'
+ : color === 'semicorrect'
+ ? 'present'
+ : 'absent';
+ return `${letter} ${state}`;
+ });
+ srAnnouncement.value = `Row ${revealingRow + 1}: ${parts.join(', ')}`;
+ }
+
// Compare normalized forms for win detection
const normalizedGuess = normalizeWord(canonicalWord, lang.normalizeMap);
const normalizedTarget = normalizeWord(lang.todaysWord, lang.normalizeMap);
@@ -542,12 +566,15 @@ export const useGameStore = defineStore('game', () => {
haptic.error();
}
shakeRow(activeRow.value);
- showNotification('Word is not valid');
+ showNotification(
+ lang.config?.text?.notification_word_not_valid || 'Word is not valid'
+ );
// Track invalid word and update session frustration state
analytics.trackInvalidWordAndUpdateState({
language: lang.languageCode,
attempt_number: activeRow.value + 1,
+ word: typedWord,
});
analytics.trackGuessSubmit(lang.languageCode, activeRow.value + 1, false);
}
@@ -573,21 +600,15 @@ export const useGameStore = defineStore('game', () => {
// ---- Visual sync ----
- /** Sync data layer to visual layer, handling RTL reversal. */
+ /** Sync data layer to visual layer. RTL is handled by CSS direction on the grid. */
function showTiles(): void {
- const lang = useLanguageStore();
for (let i = 0; i < tiles.value.length; i++) {
const tilesRow = tiles.value[i];
const classesRow = tileClasses.value[i];
if (!tilesRow || !classesRow) continue;
- if (lang.rightToLeft) {
- tilesVisual.value.splice(i, 1, [...tilesRow].reverse());
- tileClassesVisual.value.splice(i, 1, [...classesRow].reverse());
- } else {
- tilesVisual.value.splice(i, 1, [...tilesRow]);
- tileClassesVisual.value.splice(i, 1, [...classesRow]);
- }
+ tilesVisual.value.splice(i, 1, [...tilesRow]);
+ tileClassesVisual.value.splice(i, 1, [...classesRow]);
}
}
@@ -605,14 +626,14 @@ export const useGameStore = defineStore('game', () => {
const boardEl = _getBoardEl?.() ?? null;
return new Promise((resolve) => {
- animateRevealRow(boardEl, rowIndex, lang.rightToLeft, {
- onMidpoint(visualIdx, dataIdx) {
- const finalClass = tileClasses.value[rowIndex]?.[dataIdx] || '';
+ animateRevealRow(boardEl, rowIndex, {
+ onMidpoint(visualIdx) {
+ const finalClass = tileClasses.value[rowIndex]?.[visualIdx] || '';
tileClassesVisual.value[rowIndex]?.splice(visualIdx, 1, finalClass);
- const tileChar = tiles.value[rowIndex]?.[dataIdx] || '';
+ const tileChar = tiles.value[rowIndex]?.[visualIdx] || '';
tilesVisual.value[rowIndex]?.splice(visualIdx, 1, tileChar);
- const keyUpdate = pendingKeyUpdates.value[dataIdx];
+ const keyUpdate = pendingKeyUpdates.value[visualIdx];
if (keyUpdate) {
updateKeyColor(keyUpdate.char, keyUpdate.state, keys);
}
@@ -644,10 +665,9 @@ export const useGameStore = defineStore('game', () => {
const STAGGER = 150;
const DURATION = 1000;
const tileCount = WORD_LENGTH;
- const lang = useLanguageStore();
for (let t = 0; t < tileCount; t++) {
- const visualIdx = lang.rightToLeft ? tileCount - 1 - t : t;
+ const visualIdx = t;
setTimeout(() => {
const currentClass = tileClassesVisual.value[rowIndex]?.[visualIdx] || '';
tileClassesVisual.value[rowIndex]?.splice(
@@ -718,6 +738,7 @@ export const useGameStore = defineStore('game', () => {
time_to_complete_seconds: timeToComplete,
});
analytics.trackStreakMilestone(lang.languageCode, statsStore.stats.current_streak);
+ analytics.updateUserProperties(statsStore.gameResults);
// Show embed banner after game completion
if (import.meta.client) {
@@ -775,6 +796,7 @@ export const useGameStore = defineStore('game', () => {
had_frustration: lossFrustrationState.hadFrustration,
time_to_complete_seconds: lossTimeToComplete,
});
+ analytics.updateUserProperties(statsStore.gameResults);
// Show embed banner after game completion
if (import.meta.client) {
@@ -885,9 +907,40 @@ export const useGameStore = defineStore('game', () => {
}
}
+ /** Reset all game state to defaults. Called before loading a new language's game. */
+ function resetGameState(): void {
+ tiles.value = makeEmptyGrid(MAX_GUESSES, WORD_LENGTH, '');
+ tileColors.value = makeEmptyGrid(MAX_GUESSES, WORD_LENGTH, 'empty');
+ tileClasses.value = makeEmptyGrid(MAX_GUESSES, WORD_LENGTH, DEFAULT_TILE_CLASS);
+ tilesVisual.value = makeEmptyGrid(MAX_GUESSES, WORD_LENGTH, '');
+ tileClassesVisual.value = makeEmptyGrid(MAX_GUESSES, WORD_LENGTH, DEFAULT_TILE_CLASS);
+ activeRow.value = 0;
+ activeCell.value = 0;
+ fullWordInputted.value = false;
+ gameOver.value = false;
+ gameWon.value = false;
+ attempts.value = '0';
+ keyClasses.value = {};
+ pendingKeyUpdates.value = [];
+ emojiBoard.value = '';
+ communityPercentile.value = null;
+ communityIsTopScore.value = false;
+ communityTotal.value = 0;
+ communityStatsLink.value = null;
+ shareButtonState.value = 'idle';
+ srAnnouncement.value = '';
+ todayDefinition.value = null;
+ todayImageUrl.value = null;
+ todayImageLoading.value = false;
+ todayDefinitionLoading.value = false;
+ maxDifficultyUsed.value = 0;
+ notification.value = makeEmptyNotification();
+ }
+
/** Restore game state from localStorage. */
function loadFromLocalStorage(): void {
if (!import.meta.client) return;
+ resetGameState();
try {
const lang = useLanguageStore();
const pageName = window.location.pathname.split('/').pop() || 'home';
@@ -987,7 +1040,12 @@ export const useGameStore = defineStore('game', () => {
if (color === 'correct') {
if (!charsMatch(guess[c] || '', letter, nMap)) {
- return `Hard mode: ${letter.toUpperCase()} must be in position ${c + 1}`;
+ const tmpl =
+ lang.config?.text?.hard_mode_position ||
+ 'Hard mode: {letter} must be in position {position}';
+ return tmpl
+ .replace('{letter}', letter.toUpperCase())
+ .replace('{position}', String(c + 1));
}
} else if (color === 'semicorrect') {
const normalizedLetter = normalizeChar(letter, nMap).toLowerCase();
@@ -995,7 +1053,10 @@ export const useGameStore = defineStore('game', () => {
(g) => normalizeChar(g, nMap).toLowerCase() === normalizedLetter
);
if (!guessHasLetter) {
- return `Hard mode: guess must contain ${letter.toUpperCase()}`;
+ const tmpl2 =
+ lang.config?.text?.hard_mode_contains ||
+ 'Hard mode: guess must contain {letter}';
+ return tmpl2.replace('{letter}', letter.toUpperCase());
}
}
}
@@ -1035,14 +1096,7 @@ export const useGameStore = defineStore('game', () => {
const dayIdx = lang.todaysIdx;
if (!langCode || isNaN(dayIdx)) return;
- // Get or create client ID (same logic as useAnalytics.getOrCreateClientId)
- let clientId = 'unknown';
- try {
- clientId = localStorage.getItem('client_id') || crypto.randomUUID();
- localStorage.setItem('client_id', clientId);
- } catch {
- // localStorage unavailable
- }
+ const clientId = getOrCreateId('client_id');
try {
$fetch(`/api/${langCode}/word-stats`, {
@@ -1081,10 +1135,10 @@ export const useGameStore = defineStore('game', () => {
const { fetchDefinition } = useDefinitions();
fetchDefinition(word, langCode)
.then((def) => {
- if (def.definition) {
+ if (def.definition || def.definitionNative) {
todayDefinition.value = {
word: def.word,
- definition: def.definition,
+ definition: def.definitionNative || def.definition,
partOfSpeech: def.partOfSpeech,
url: `/${langCode}/word/${dayIdx}`,
};
@@ -1263,6 +1317,7 @@ export const useGameStore = defineStore('game', () => {
communityTotal,
communityStatsLink,
shareButtonState,
+ srAnnouncement,
todayDefinition,
todayImageUrl,
todayImageLoading,
@@ -1292,6 +1347,7 @@ export const useGameStore = defineStore('game', () => {
showNotification,
getEmojiBoard,
getShareText,
+ resetGameState,
saveToLocalStorage,
loadFromLocalStorage,
getTimeUntilNextDay,
diff --git a/utils/game/useGameAnimations.ts b/utils/game/useGameAnimations.ts
index dafd0caf..8b0c1569 100644
--- a/utils/game/useGameAnimations.ts
+++ b/utils/game/useGameAnimations.ts
@@ -26,7 +26,7 @@ const BOUNCE_DURATION = 1000;
export interface RevealCallbacks {
/** Called at midpoint for each tile — swap visual color and character. */
- onMidpoint: (visualIdx: number, dataIdx: number) => void;
+ onMidpoint: (tileIdx: number) => void;
/** Called when all tiles have finished animating. */
onComplete: () => void;
}
@@ -34,41 +34,50 @@ export interface RevealCallbacks {
/**
* Staggered flip animation for a completed row.
*
+ * RTL is handled by CSS `direction: rtl` on the tile grid, so the animation
+ * always iterates in DOM order (0→4). CSS flips the visual direction.
+ *
* @param boardEl - The `.game-board` DOM element (from a template ref)
* @param rowIndex - Which row to animate (0-based)
- * @param rightToLeft - Whether the language reads RTL
* @param callbacks - Midpoint and completion callbacks
*/
export function animateRevealRow(
boardEl: HTMLElement | null,
rowIndex: number,
- rightToLeft: boolean,
callbacks: RevealCallbacks
): void {
const rowEl = boardEl?.children[rowIndex] as HTMLElement | undefined;
const tileCount = WORD_LENGTH;
+ const reduceMotion =
+ typeof window !== 'undefined' &&
+ window.matchMedia('(prefers-reduced-motion: reduce)').matches;
for (let t = 0; t < tileCount; t++) {
- const visualIdx = rightToLeft ? tileCount - 1 - t : t;
- const dataIdx = rightToLeft ? tileCount - 1 - visualIdx : visualIdx;
+ const delay = reduceMotion ? 0 : t * FLIP_STAGGER;
setTimeout(() => {
- const tileEl = rowEl?.children[visualIdx] as HTMLElement | undefined;
- if (tileEl) {
+ const tileEl = rowEl?.children[t] as HTMLElement | undefined;
+ if (tileEl && !reduceMotion) {
tileEl.style.animation = `flipReveal ${FLIP_DURATION}ms ease-in-out`;
}
- // At midpoint: callback to swap visual state
- setTimeout(() => {
- callbacks.onMidpoint(visualIdx, dataIdx);
- }, FLIP_MIDPOINT);
+ // At midpoint (or immediately if reduced motion): swap visual state
+ setTimeout(
+ () => {
+ callbacks.onMidpoint(t);
+ },
+ reduceMotion ? 0 : FLIP_MIDPOINT
+ );
// Clean up after animation
- setTimeout(() => {
- if (tileEl) tileEl.style.animation = '';
- if (t === tileCount - 1) callbacks.onComplete();
- }, FLIP_DURATION);
- }, t * FLIP_STAGGER);
+ setTimeout(
+ () => {
+ if (tileEl) tileEl.style.animation = '';
+ if (t === tileCount - 1) callbacks.onComplete();
+ },
+ reduceMotion ? 0 : FLIP_DURATION
+ );
+ }, delay);
}
}
diff --git a/utils/storage.ts b/utils/storage.ts
index 424a6102..036325c7 100644
--- a/utils/storage.ts
+++ b/utils/storage.ts
@@ -82,16 +82,11 @@ export function writeJson(key: string, value: unknown): void {
*/
export function getOrCreateId(key: string): string {
if (!import.meta.client) return 'unknown';
- try {
- let id = localStorage.getItem(key);
- if (!id) {
- id = crypto.randomUUID();
- localStorage.setItem(key, id);
- }
- return id;
- } catch {
- return 'unknown';
- }
+ const existing = readLocal(key);
+ if (existing) return existing;
+ const id = crypto.randomUUID();
+ writeLocal(key, id);
+ return id;
}
/**
@@ -109,3 +104,16 @@ export function isDismissedWithCooldown(key: string, durationMs: number): boolea
export function dismissWithCooldown(key: string): void {
writeLocal(key, Date.now().toString());
}
+
+// ---------------------------------------------------------------------------
+// Platform detection
+// ---------------------------------------------------------------------------
+
+/** Check if running as installed PWA (standalone mode). SSR-safe. */
+export function isStandalone(): boolean {
+ if (!import.meta.client) return false;
+ return (
+ window.matchMedia('(display-mode: standalone)').matches ||
+ (navigator as Navigator & { standalone?: boolean }).standalone === true
+ );
+}