// Translations for bot-originated replies. These are strictly server-side —
// the frontend has its own i18n system in src/i18n. When the user changes the
// app language, we persist it on the telegram_links row and the bot consults
// this map via `t(lang, key, vars)`.
//
// Keep keys flat; nested lookups are overkill for the small number of strings
// the bot actually emits. English is the source of truth; missing keys in
// other locales silently fall back to English.
const EN = {
    'welcome.needsCode': '👋 Hi! Please send me your 6-digit pairing code to link this chat with your Pixcode account.',
    'welcome.alreadyPaired': '👋 You are already paired. I will forward your messages to your most recent session.',
    'pairing.invalidFormat': 'Please send only the 6-digit code (digits only).',
    'pairing.notFound': 'That code is invalid or has already been used. Please generate a new one in Pixcode and try again.',
    'pairing.expired': 'That code has expired. Please generate a new one in Pixcode.',
    'pairing.success': '✅ Linked successfully! You will now receive completed-task notifications here. I am opening the Telegram control menu now.',
    'pairing.stillNeeded': 'Please send your 6-digit pairing code first. Open Pixcode → Settings → Telegram to get one.',
    'bridge.queued': '📨 Message forwarded to your latest session. I will reply when the agent responds.',
    'bridge.disabled': 'Message bridge is disabled. Enable it in Pixcode → Settings → Telegram.',
    'control.menu': 'Pixcode Telegram control center',
    'control.help': 'Commands: /menu, /projects, /provider, /model, /workflows, /runs, /approvals, /control-room, /webhooks, /sessions, /newchat, /chat <prompt>, /workflow <prompt>, /install, /auth, /settings, /progress final|steps|errors|all, /control on|off.',
    'control.examples': 'Examples:\n/chat summarize this project\n/chat fix the last error\n/workflow review the current changes\n/settings to change language and progress mode',
    'control.unknownCommand': 'I do not know that command yet. Here are the available Pixcode commands:',
    'control.onboarding': 'How to start:\n/projects to pick a project\n/provider to pick the CLI\n/model to choose the model\n/chat <prompt> to run the current agent\n/workflow <prompt> to run orchestration\n/help to see all commands',
    'control.summary.project': 'Project',
    'control.summary.provider': 'Provider',
    'control.summary.workflow': 'Workflow',
    'control.summary.progress': 'Progress',
    'control.notSelected': 'not selected',
    'control.button.projects': 'Projects',
    'control.button.provider': 'Provider',
    'control.button.models': 'Models',
    'control.button.workflows': 'Workflows',
    'control.button.runs': 'Runs',
    'control.button.approvals': 'Approvals',
    'control.button.controlRoom': 'Control room',
    'control.button.webhooks': 'Webhooks',
    'control.button.sessions': 'Sessions',
    'control.button.newChat': 'New chat',
    'control.button.install': 'CLI install',
    'control.button.auth': 'Auth help',
    'control.button.settings': 'Settings',
    'control.button.refreshModels': 'Refresh models',
    'control.button.clearModel': 'Clear model',
    'control.button.runWorkflow': 'Run selected workflow',
    'control.button.remoteOn': 'Remote control: on',
    'control.button.remoteOff': 'Remote control: off',
    'control.button.progressFinal': 'Progress: final',
    'control.button.progressSteps': 'Progress: steps',
    'control.button.progressErrors': 'Progress: errors',
    'control.button.progressAll': 'Progress: all',
    'control.button.language': 'Language',
    'control.button.mainMenu': 'Main menu',
    'control.button.cancelRun': 'Cancel run',
    'control.button.refresh': 'Refresh',
    'control.button.approve': 'Approve',
    'control.button.deny': 'Deny',
    'control.noProjects': 'No Pixcode projects were found yet. Add/open a project in Pixcode first.',
    'control.pickProject': 'Pick the project Telegram should control:',
    'control.pickProvider': 'Pick the CLI provider Telegram should use:',
    'control.modelsFor': 'Models for {{provider}}:',
    'control.pickWorkflow': 'Pick an orchestration workflow:',
    'control.noRuns': 'No orchestration runs yet.',
    'control.recentRuns': 'Recent orchestration runs:',
    'control.approvalQueue': 'Pending approval queue:',
    'control.noApprovals': 'No pending approvals.',
    'control.approvalDecided': 'Approval {{approvalId}} {{status}}.\nRun: {{runId}}',
    'control.controlRoomTitle': 'Multi-project control room',
    'control.webhookTitle': 'Outbound webhooks',
    'control.noWebhooks': 'No webhooks are configured yet.',
    'control.noSessions': 'No sessions were found for the selected project.',
    'control.recentSessions': 'Recent sessions:',
    'control.newChatReady': 'New chat is ready. Send the prompt you want to run.',
    'control.disabled': 'Telegram remote control is disabled. Enable it in Pixcode → Settings → Telegram or send /control on.',
    'control.selectProjectFirst': 'Select a project first with /projects.',
    'control.selectWorkflowFirst': 'Select a workflow first.',
    'control.agentStarted': 'Started {{provider}} on {{project}}. I will send the result here.',
    'control.agentDone': 'Done with {{provider}}{{session}}',
    'control.agentFailed': 'Failed: {{error}}',
    'control.noAssistantText': 'No assistant text returned.',
    'control.workflowStarted': 'Orchestration started: {{runId}}\nWorkflow: {{workflowId}}',
    'control.installMenu': 'Install or repair a provider CLI:',
    'control.authMenu': 'Pick a provider for OAuth/login instructions:',
    'control.manualInstall': 'Manual install for {{provider}}:\n{{manual}}',
    'control.installStarted': 'Install started for {{provider}}.\nJob: {{jobId}}\nCommand: {{command}}',
    'control.settingsTitle': 'Telegram settings',
    'control.pickLanguage': 'Pick Telegram language:',
    'control.menuExpired': 'This menu expired. Send /menu.',
    'control.menuExpiredLong': 'This menu expired. Send /menu to open a fresh one.',
    'control.languageSet': 'Language set: {{language}}',
    'control.projectSelected': 'Project selected: {{project}}\n{{path}}',
    'control.providerSelected': 'Provider selected: {{provider}}',
    'control.modelSelected': 'Model selected: {{model}}',
    'control.modelCleared': 'Model cleared.',
    'control.workflowSelected': 'Workflow selected: {{workflow}}',
    'control.sendAgentPrompt': 'Send the agent prompt.',
    'control.sendWorkflowPrompt': 'Send the orchestration prompt.',
    'control.remoteEnabled': 'Remote control enabled.',
    'control.remoteDisabled': 'Remote control disabled.',
    'control.progressUsage': 'Use /progress final, /progress steps, /progress errors, or /progress all.',
    'control.progressSet': 'Progress mode set to {{mode}}.',
    'control.cancelUsage': 'Use /cancel <runId>.',
    'control.runStatus': 'Run {{runId}} status: {{status}}',
    'control.providerAuthFallback': 'Open Pixcode Settings → Agents and connect this provider.',
    'notification.taskDone': '✅ {{title}} — task completed.',
    'notification.taskFailed': '⚠️ {{title}} — task failed: {{error}}',
    'notification.actionRequired': '❗ {{title}} — action required.',
    'unpaired.notice': 'This chat has been unlinked from Pixcode. Send your 6-digit code to link again.',
    'error.generic': 'Something went wrong. Please try again.',
};
const TR = {
    'welcome.needsCode': '👋 Merhaba! Bu sohbeti Pixcode hesabınla eşlemek için 6 haneli kodunu gönder.',
    'welcome.alreadyPaired': '👋 Zaten eşleşmişsin. Mesajlarını en son oturumuna ileteceğim.',
    'pairing.invalidFormat': 'Lütfen sadece 6 haneli kodu gönder (yalnız rakam).',
    'pairing.notFound': 'Bu kod geçersiz veya daha önce kullanılmış. Pixcode\'dan yeni bir tane oluştur.',
    'pairing.expired': 'Bu kodun süresi doldu. Pixcode\'dan yeni bir tane oluştur.',
    'pairing.success': '✅ Eşleşme başarılı! Bundan sonra tamamlanan görev bildirimlerini buradan alırsın. Şimdi Telegram kontrol menüsünü açıyorum.',
    'pairing.stillNeeded': 'Önce 6 haneli eşleşme kodunu gönder. Pixcode → Ayarlar → Telegram\'dan alabilirsin.',
    'bridge.queued': '📨 Mesaj son oturumuna iletildi. Ajan cevap verince sana yazacağım.',
    'bridge.disabled': 'Mesaj köprüsü kapalı. Pixcode → Ayarlar → Telegram\'dan açabilirsin.',
    'control.menu': 'Pixcode Telegram kontrol merkezi',
    'control.help': 'Komutlar: /menu, /projects, /provider, /model, /workflows, /runs, /approvals, /control-room, /webhooks, /sessions, /newchat, /chat <prompt>, /workflow <prompt>, /install, /auth, /settings, /progress final|steps|errors|all, /control on|off.',
    'control.examples': 'Örnekler:\n/chat bu projeyi özetle\n/chat son hatayı düzelt\n/workflow mevcut değişiklikleri incele\n/settings ile dil ve ilerleme modunu değiştir',
    'control.unknownCommand': 'Bu komutu henüz tanımıyorum. Kullanabileceğin Pixcode komutları:',
    'control.onboarding': 'Nasıl başlarsın:\n/projects ile proje seç\n/provider ile CLI seç\n/model ile modeli seç\n/chat <prompt> ile ajanı çalıştır\n/workflow <prompt> ile orkestrasyon başlat\n/help ile tüm komutları gör',
    'control.summary.project': 'Proje',
    'control.summary.provider': 'Sağlayıcı',
    'control.summary.workflow': 'İş akışı',
    'control.summary.progress': 'İlerleme',
    'control.notSelected': 'seçilmedi',
    'control.button.projects': 'Projeler',
    'control.button.provider': 'Sağlayıcı',
    'control.button.models': 'Modeller',
    'control.button.workflows': 'İş akışları',
    'control.button.runs': 'Çalışmalar',
    'control.button.approvals': 'Onaylar',
    'control.button.controlRoom': 'Kontrol odası',
    'control.button.webhooks': 'Webhooklar',
    'control.button.sessions': 'Oturumlar',
    'control.button.newChat': 'Yeni sohbet',
    'control.button.install': 'CLI kur',
    'control.button.auth': 'Giriş yardımı',
    'control.button.settings': 'Ayarlar',
    'control.button.refreshModels': 'Modelleri yenile',
    'control.button.clearModel': 'Modeli temizle',
    'control.button.runWorkflow': 'Seçili iş akışını çalıştır',
    'control.button.remoteOn': 'Uzaktan kontrol: açık',
    'control.button.remoteOff': 'Uzaktan kontrol: kapalı',
    'control.button.progressFinal': 'İlerleme: final',
    'control.button.progressSteps': 'İlerleme: adımlar',
    'control.button.progressErrors': 'İlerleme: hatalar',
    'control.button.progressAll': 'İlerleme: tümü',
    'control.button.language': 'Dil',
    'control.button.mainMenu': 'Ana menü',
    'control.button.cancelRun': 'Çalışmayı iptal et',
    'control.button.refresh': 'Yenile',
    'control.button.approve': 'Onayla',
    'control.button.deny': 'Reddet',
    'control.noProjects': 'Henüz Pixcode projesi bulunamadı. Önce Pixcode içinde proje ekle/aç.',
    'control.pickProject': 'Telegramın kontrol edeceği projeyi seç:',
    'control.pickProvider': 'Telegramın kullanacağı CLI sağlayıcısını seç:',
    'control.modelsFor': '{{provider}} modelleri:',
    'control.pickWorkflow': 'Bir orkestrasyon iş akışı seç:',
    'control.noRuns': 'Henüz orkestrasyon çalışması yok.',
    'control.recentRuns': 'Son orkestrasyon çalışmaları:',
    'control.approvalQueue': 'Bekleyen onay kuyruğu:',
    'control.noApprovals': 'Bekleyen onay yok.',
    'control.approvalDecided': '{{approvalId}} onayı {{status}}.\nÇalışma: {{runId}}',
    'control.controlRoomTitle': 'Çok projeli kontrol odası',
    'control.webhookTitle': 'Dış webhooklar',
    'control.noWebhooks': 'Henüz webhook yapılandırılmadı.',
    'control.noSessions': 'Seçili proje için oturum bulunamadı.',
    'control.recentSessions': 'Son oturumlar:',
    'control.newChatReady': 'Yeni sohbet hazır. Çalıştırmak istediğin promptu gönder.',
    'control.disabled': 'Telegram uzaktan kontrol kapalı. Pixcode → Ayarlar → Telegram içinden aç veya /control on gönder.',
    'control.selectProjectFirst': 'Önce /projects ile proje seç.',
    'control.selectWorkflowFirst': 'Önce bir iş akışı seç.',
    'control.agentStarted': '{{provider}}, {{project}} üzerinde başlatıldı. Sonucu buradan göndereceğim.',
    'control.agentDone': '{{provider}} tamamlandı{{session}}',
    'control.agentFailed': 'Başarısız: {{error}}',
    'control.noAssistantText': 'Asistan metni dönmedi.',
    'control.workflowStarted': 'Orkestrasyon başlatıldı: {{runId}}\nİş akışı: {{workflowId}}',
    'control.installMenu': 'CLI kur veya onar:',
    'control.authMenu': 'OAuth/giriş yönergeleri için sağlayıcı seç:',
    'control.manualInstall': '{{provider}} manuel kurulum:\n{{manual}}',
    'control.installStarted': '{{provider}} kurulumu başladı.\nİş: {{jobId}}\nKomut: {{command}}',
    'control.settingsTitle': 'Telegram ayarları',
    'control.pickLanguage': 'Telegram dilini seç:',
    'control.menuExpired': 'Bu menünün süresi doldu. /menu gönder.',
    'control.menuExpiredLong': 'Bu menünün süresi doldu. Yeni menü açmak için /menu gönder.',
    'control.languageSet': 'Dil ayarlandı: {{language}}',
    'control.projectSelected': 'Proje seçildi: {{project}}\n{{path}}',
    'control.providerSelected': 'Sağlayıcı seçildi: {{provider}}',
    'control.modelSelected': 'Model seçildi: {{model}}',
    'control.modelCleared': 'Model temizlendi.',
    'control.workflowSelected': 'İş akışı seçildi: {{workflow}}',
    'control.sendAgentPrompt': 'Ajan promptunu gönder.',
    'control.sendWorkflowPrompt': 'Orkestrasyon promptunu gönder.',
    'control.remoteEnabled': 'Uzaktan kontrol açıldı.',
    'control.remoteDisabled': 'Uzaktan kontrol kapatıldı.',
    'control.progressUsage': '/progress final, /progress steps, /progress errors veya /progress all kullan.',
    'control.progressSet': 'İlerleme modu {{mode}} olarak ayarlandı.',
    'control.cancelUsage': '/cancel <runId> kullan.',
    'control.runStatus': '{{runId}} durumu: {{status}}',
    'control.providerAuthFallback': 'Pixcode Ayarlar → Ajanlar içinden bu sağlayıcıyı bağla.',
    'notification.taskDone': '✅ {{title}} — görev tamamlandı.',
    'notification.taskFailed': '⚠️ {{title}} — görev başarısız: {{error}}',
    'notification.actionRequired': '❗ {{title}} — işlem gerekli.',
    'unpaired.notice': 'Bu sohbetin Pixcode ile bağlantısı kesildi. Tekrar eşleşmek için 6 haneli kodunu gönder.',
    'error.generic': 'Bir şeyler ters gitti. Lütfen tekrar dene.',
};
const DE = {
    'welcome.needsCode': '👋 Hallo! Bitte sende mir deinen 6-stelligen Pairing-Code, um diesen Chat mit deinem Pixcode-Konto zu verknüpfen.',
    'welcome.alreadyPaired': '👋 Du bist bereits verknüpft. Ich leite deine Nachrichten an deine letzte Sitzung weiter.',
    'pairing.invalidFormat': 'Bitte sende nur den 6-stelligen Code (nur Ziffern).',
    'pairing.notFound': 'Dieser Code ist ungültig oder wurde bereits verwendet. Erzeuge in Pixcode einen neuen.',
    'pairing.expired': 'Der Code ist abgelaufen. Erzeuge in Pixcode einen neuen.',
    'pairing.success': '✅ Erfolgreich verknüpft! Du bekommst jetzt Benachrichtigungen zu abgeschlossenen Aufgaben und kannst jederzeit Nachrichten an deine letzte Sitzung senden.',
    'pairing.stillNeeded': 'Bitte sende zuerst deinen 6-stelligen Pairing-Code aus Pixcode → Einstellungen → Telegram.',
    'bridge.queued': '📨 Nachricht an deine letzte Sitzung weitergeleitet. Ich antworte, sobald der Agent antwortet.',
    'bridge.disabled': 'Die Nachrichtenbrücke ist deaktiviert. Aktiviere sie in Pixcode → Einstellungen → Telegram.',
    'notification.taskDone': '✅ {{title}} — Aufgabe abgeschlossen.',
    'notification.taskFailed': '⚠️ {{title}} — Aufgabe fehlgeschlagen: {{error}}',
    'notification.actionRequired': '❗ {{title}} — Aktion erforderlich.',
    'unpaired.notice': 'Dieser Chat wurde von Pixcode getrennt. Sende deinen 6-stelligen Code, um ihn erneut zu verknüpfen.',
    'error.generic': 'Etwas ist schiefgelaufen. Bitte versuche es erneut.',
};
const IT = {
    'welcome.needsCode': '👋 Ciao! Inviami il tuo codice di abbinamento di 6 cifre per collegare questa chat al tuo account Pixcode.',
    'welcome.alreadyPaired': '👋 Sei già collegato. Inoltrerò i tuoi messaggi alla tua ultima sessione.',
    'pairing.invalidFormat': 'Invia solo il codice di 6 cifre (solo numeri).',
    'pairing.notFound': 'Codice non valido o già utilizzato. Generane uno nuovo in Pixcode.',
    'pairing.expired': 'Codice scaduto. Generane uno nuovo in Pixcode.',
    'pairing.success': '✅ Collegato con successo! Riceverai le notifiche delle attività completate e potrai inviare messaggi alla tua ultima sessione.',
    'pairing.stillNeeded': 'Invia prima il tuo codice di 6 cifre da Pixcode → Impostazioni → Telegram.',
    'bridge.queued': '📨 Messaggio inoltrato alla tua ultima sessione. Risponderò quando l\'agente risponde.',
    'bridge.disabled': 'Il bridge dei messaggi è disabilitato. Attivalo in Pixcode → Impostazioni → Telegram.',
    'notification.taskDone': '✅ {{title}} — attività completata.',
    'notification.taskFailed': '⚠️ {{title}} — attività fallita: {{error}}',
    'notification.actionRequired': '❗ {{title}} — azione richiesta.',
    'unpaired.notice': 'Questa chat è stata scollegata da Pixcode. Invia il tuo codice per ricollegarla.',
    'error.generic': 'Qualcosa è andato storto. Riprova.',
};
const JA = {
    'welcome.needsCode': '👋 こんにちは！このチャットをPixcodeアカウントにリンクするため、6桁のペアリングコードを送信してください。',
    'welcome.alreadyPaired': '👋 既にリンク済みです。メッセージは最新のセッションに転送されます。',
    'pairing.invalidFormat': '6桁の数字のみを送信してください。',
    'pairing.notFound': 'コードが無効か既に使用されています。Pixcodeで新しいコードを生成してください。',
    'pairing.expired': 'コードの有効期限が切れました。Pixcodeで新しいコードを生成してください。',
    'pairing.success': '✅ リンクに成功しました！完了通知を受け取り、最新セッションへメッセージを送信できます。',
    'pairing.stillNeeded': 'まず6桁のペアリングコードを送信してください。Pixcode → 設定 → Telegramで取得できます。',
    'bridge.queued': '📨 メッセージを最新セッションに転送しました。エージェントの応答時にお知らせします。',
    'bridge.disabled': 'メッセージブリッジは無効です。Pixcode → 設定 → Telegramで有効化してください。',
    'notification.taskDone': '✅ {{title}} — タスク完了。',
    'notification.taskFailed': '⚠️ {{title}} — タスク失敗: {{error}}',
    'notification.actionRequired': '❗ {{title}} — 操作が必要。',
    'unpaired.notice': 'このチャットはPixcodeから解除されました。6桁のコードで再リンクしてください。',
    'error.generic': 'エラーが発生しました。もう一度お試しください。',
};
const KO = {
    'welcome.needsCode': '👋 안녕하세요! Pixcode 계정과 이 채팅을 연결하려면 6자리 페어링 코드를 보내주세요.',
    'welcome.alreadyPaired': '👋 이미 연결되어 있습니다. 메시지를 최근 세션으로 전달합니다.',
    'pairing.invalidFormat': '숫자 6자리만 보내주세요.',
    'pairing.notFound': '코드가 유효하지 않거나 이미 사용되었습니다. Pixcode에서 새 코드를 생성하세요.',
    'pairing.expired': '코드가 만료되었습니다. Pixcode에서 새 코드를 생성하세요.',
    'pairing.success': '✅ 연결 성공! 완료 알림을 받고, 최근 세션에 메시지를 보낼 수 있습니다.',
    'pairing.stillNeeded': '먼저 6자리 페어링 코드를 보내주세요. Pixcode → 설정 → Telegram에서 얻을 수 있습니다.',
    'bridge.queued': '📨 메시지를 최근 세션에 전달했습니다. 에이전트가 응답하면 알려드릴게요.',
    'bridge.disabled': '메시지 브리지가 비활성화되어 있습니다. Pixcode → 설정 → Telegram에서 활성화하세요.',
    'notification.taskDone': '✅ {{title}} — 작업 완료.',
    'notification.taskFailed': '⚠️ {{title}} — 작업 실패: {{error}}',
    'notification.actionRequired': '❗ {{title}} — 조치 필요.',
    'unpaired.notice': '이 채팅은 Pixcode에서 연결 해제되었습니다. 6자리 코드로 다시 연결하세요.',
    'error.generic': '문제가 발생했습니다. 다시 시도해주세요.',
};
const RU = {
    'welcome.needsCode': '👋 Привет! Отправь мне 6-значный код сопряжения, чтобы связать этот чат с твоим аккаунтом Pixcode.',
    'welcome.alreadyPaired': '👋 Ты уже связан. Я буду пересылать твои сообщения в последнюю сессию.',
    'pairing.invalidFormat': 'Отправь только 6-значный код (только цифры).',
    'pairing.notFound': 'Код недействителен или уже использован. Создай новый в Pixcode.',
    'pairing.expired': 'Код истёк. Создай новый в Pixcode.',
    'pairing.success': '✅ Связано! Теперь ты будешь получать уведомления о завершённых задачах и сможешь отправлять сообщения в последнюю сессию.',
    'pairing.stillNeeded': 'Сначала отправь 6-значный код из Pixcode → Настройки → Telegram.',
    'bridge.queued': '📨 Сообщение переслано в последнюю сессию. Отвечу, когда агент ответит.',
    'bridge.disabled': 'Мост сообщений отключён. Включи его в Pixcode → Настройки → Telegram.',
    'notification.taskDone': '✅ {{title}} — задача выполнена.',
    'notification.taskFailed': '⚠️ {{title}} — задача провалена: {{error}}',
    'notification.actionRequired': '❗ {{title}} — требуется действие.',
    'unpaired.notice': 'Этот чат отвязан от Pixcode. Отправь 6-значный код, чтобы связать снова.',
    'error.generic': 'Что-то пошло не так. Попробуй ещё раз.',
};
const ZH = {
    'welcome.needsCode': '👋 你好！请发送 6 位配对码，将此聊天链接到你的 Pixcode 账户。',
    'welcome.alreadyPaired': '👋 你已经链接。我会把消息转发到你最近的会话。',
    'pairing.invalidFormat': '请只发送 6 位数字代码。',
    'pairing.notFound': '代码无效或已使用。请在 Pixcode 中生成新代码。',
    'pairing.expired': '代码已过期。请在 Pixcode 中生成新代码。',
    'pairing.success': '✅ 链接成功！你将收到任务完成通知，并可以向最近的会话发送消息。',
    'pairing.stillNeeded': '请先发送 6 位配对码。在 Pixcode → 设置 → Telegram 中获取。',
    'bridge.queued': '📨 消息已转发到最近的会话。智能体回复时我会通知你。',
    'bridge.disabled': '消息桥已禁用。在 Pixcode → 设置 → Telegram 中启用。',
    'notification.taskDone': '✅ {{title}} — 任务完成。',
    'notification.taskFailed': '⚠️ {{title}} — 任务失败：{{error}}',
    'notification.actionRequired': '❗ {{title}} — 需要操作。',
    'unpaired.notice': '此聊天已从 Pixcode 取消链接。发送 6 位代码即可重新链接。',
    'error.generic': '出了点问题，请重试。',
};
const LOCALES = {
    en: EN,
    tr: TR,
    de: DE,
    it: IT,
    ja: JA,
    ko: KO,
    ru: RU,
    'zh-CN': ZH,
};
const interpolate = (template, vars) => {
    if (!vars)
        return template;
    return template.replace(/\{\{(\w+)\}\}/g, (match, name) => {
        return Object.prototype.hasOwnProperty.call(vars, name) ? String(vars[name]) : match;
    });
};
export const t = (language, key, vars) => {
    const locale = LOCALES[language] || LOCALES.en;
    const raw = locale[key] || LOCALES.en[key] || key;
    return interpolate(raw, vars);
};
export const SUPPORTED_LANGUAGES = Object.keys(LOCALES);
//# sourceMappingURL=translations.js.map