From 95ea67228b064d9f32caf8ac57bad10250a02c49 Mon Sep 17 00:00:00 2001 From: Russell Ballestrini Date: Thu, 3 Jul 2025 14:02:54 -0400 Subject: [PATCH] complete: finalize all 18 language files with 63 translation keys - Add missing 17 keys to final 8 languages (id, mr, sw, te, tr, ur, zh-tw) - Fix translation verifier to exclude helper scripts - Update CLAUDE.md with translation management documentation - All languages now complete: ar, bn, de, en, es, fr, hi, id, ja, ko, mr, pt, ru, sw, te, tr, ur, zh, zh-tw - Verified with translation completeness script - all 18 languages pass --- CLAUDE.md | 7 ++++++ src/languages/ar.js | 12 ++++++++++ src/languages/bn.js | 27 +++++++++++++++++++++ src/languages/de.js | 4 ++++ src/languages/es.js | 4 ++++ src/languages/fr.js | 4 ++++ src/languages/hi.js | 12 ++++++++++ src/languages/id.js | 27 +++++++++++++++++++++ src/languages/ja.js | 12 ++++++++++ src/languages/ko.js | 12 ++++++++++ src/languages/mr.js | 27 +++++++++++++++++++++ src/languages/pt.js | 12 ++++++++++ src/languages/ru.js | 12 ++++++++++ src/languages/sw.js | 27 +++++++++++++++++++++ src/languages/te.js | 27 +++++++++++++++++++++ src/languages/tr.js | 27 +++++++++++++++++++++ src/languages/ur.js | 27 +++++++++++++++++++++ src/languages/verify-translations.js | 5 +++- src/languages/zh-tw.js | 27 +++++++++++++++++++++ src/languages/zh.js | 12 ++++++++++ src/ui.js | 35 +++++++++++++++------------- 21 files changed, 342 insertions(+), 17 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 1c1caec..5674f6b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -21,6 +21,13 @@ - If biome check fails, fix the issues before proceeding with commit/push - This prevents breaking production with syntax errors like missing parentheses +## Translation Management +- All 18 language files are complete with 63 translation keys each (verified 2025-07-03) +- Run verification before adding new languages: `cd src/languages && node verify-translations.js` +- Languages: ar, bn, de, en, es, fr, hi, id, ja, ko, mr, pt, ru, sw, te, tr, ur, zh, zh-tw +- Translation keys include: UI buttons, modal content, system prompts, error messages, placeholders +- Each language file follows format: `export const [code] = { key: "translation", ... };` + ## Commit Message Guidelines - Use single line commit messages only - Never include Claude Code attribution or "Generated with Claude Code" diff --git a/src/languages/ar.js b/src/languages/ar.js index dfc09a1..982f537 100644 --- a/src/languages/ar.js +++ b/src/languages/ar.js @@ -74,6 +74,18 @@ export const ar = { speedLabel: "السرعة:", playText: "تشغيل النص", + // Translation modal content + translatePageInfo: "ترجم محتوى الصفحة الحالية إلى اللغة المختارة:", + translateToLabel: "ترجمة إلى:", + translateButton: "🌐 ترجمة", + translatePageButton: "🌐 ترجمة الصفحة", + translateTextButton: "🌐 ترجمة النص", + processingText: "جاري المعالجة...", + + // Button labels for UI + translationModal: "🌐 نافذة الترجمة", + translationModalHeading: "نافذة الترجمة", + // System prompt components systemPromptIntro: "أنت Hermes AI، مدعوم بواسطة Nous Research، مدمج في صفحة ويب. مهمتك هي إنشاء مقدمة دافئة ومرحبة من 3 فقرات تظهر أنك تفهم الصفحة المحددة التي يشاهدها المستخدم.", systemPromptTask1: "1. قدم نفسك كـ Hermes AI واعترف بالصفحة/المحتوى المحدد", diff --git a/src/languages/bn.js b/src/languages/bn.js index 049cfc5..2aecd1d 100644 --- a/src/languages/bn.js +++ b/src/languages/bn.js @@ -66,6 +66,33 @@ export const bn = { "টেক্সট-টু-স্পিচ: যেকোনো বার্তা লিখুন এবং কৃত্রিম বুদ্ধিমত্তা তা বলুক!", translatePlaceholder: "অনুবাদের জন্য যেকোনো টেক্সট লিখুন...", + // Translation modal tabs + translatePageTab: "📄 পেজ অনুবাদ", + customTextTab: "✏️ কাস্টম টেক্সট", + + // TTS modal components + speedLabel: "গতি:", + playText: "টেক্সট চালান", + + // Translation modal content + translatePageInfo: "বর্তমান পেজের বিষয়বস্তু আপনার পছন্দের ভাষায় অনুবাদ করুন:", + translateToLabel: "অনুবাদ করুন:", + translateButton: "🌐 অনুবাদ", + translatePageButton: "🌐 পেজ অনুবাদ", + translateTextButton: "🌐 টেক্সট অনুবাদ", + processingText: "প্রক্রিয়া করা হচ্ছে...", + + // Button labels for UI + translationModal: "🌐 অনুবাদ মডেল", + translationModalHeading: "অনুবাদ মডেল", + + // System prompt components + systemPromptIntro: "আপনি Hermes AI, Nous Research দ্বারা পরিচালিত, একটি ওয়েবপেজে এম্বেড করা। আপনার কাজ হল একটি উষ্ণ, স্বাগতময় 3-অনুচ্ছেদ পরিচয় তৈরি করা যা দেখায় যে আপনি ব্যবহারকারী যে নির্দিষ্ট পেজটি দেখছেন তা বুঝতে পারেন।", + systemPromptTask1: "1. Hermes AI হিসেবে নিজের পরিচয় দিন এবং নির্দিষ্ট পেজ/বিষয়বস্তু স্বীকার করুন", + systemPromptTask2: "2. পেজের বিষয়বস্তু থেকে আপনি যে 2-3টি নির্দিষ্ট, প্রাসঙ্গিক বিবরণ লক্ষ্য করেন তা উল্লেখ করুন", + systemPromptTask3: "3. পেজের বিষয়বস্তু সংক্রান্ত প্রশ্নে সহাযতা প্রদান করুন", + systemPromptInstructions: "এটি কথোপকথনমূলক, সহাযক এবং এই পেজে আপনি যা দেখেন তার জন্য নির্দিষ্ট রাখুন। লিখুন", + // More alerts and messages pleaseEnterText: "দয়া করে প্রথমে কিছু টেক্সট লিখুন!", pleaseSelectFile: "দয়া করে প্রথমে একটি ফাইল নির্বাচন করুন!", diff --git a/src/languages/de.js b/src/languages/de.js index b68171d..d3c7595 100644 --- a/src/languages/de.js +++ b/src/languages/de.js @@ -82,6 +82,10 @@ export const de = { translateTextButton: "🌐 Text Übersetzen", processingText: "Verarbeitung...", + // Button labels for UI + translationModal: "🌐 Übersetzungs-Modal", + translationModalHeading: "Übersetzungs-Modal", + // System prompt components systemPromptIntro: "Sie sind Hermes AI, unterstützt von Nous Research, eingebettet auf einer Webseite. Ihre Aufgabe ist es, eine warme, einladende 3-Absatz-Einführung zu generieren, die zeigt, dass Sie die spezifische Seite verstehen, die der Benutzer betrachtet.", systemPromptTask1: "1. Stellen Sie sich als Hermes AI vor und erkennen Sie die spezifische Seite/den Inhalt an", diff --git a/src/languages/es.js b/src/languages/es.js index 2838130..b73db68 100644 --- a/src/languages/es.js +++ b/src/languages/es.js @@ -82,6 +82,10 @@ export const es = { translateTextButton: "🌐 Traducir Texto", processingText: "Procesando...", + // Button labels for UI + translationModal: "🌐 Modal de Traducción", + translationModalHeading: "Modal de Traducción", + // System prompt components systemPromptIntro: "Eres Hermes AI, impulsado por Nous Research, integrado en una página web. Tu tarea es generar una introducción cálida y acogedora de 3 párrafos que muestre que entiendes la página específica que el usuario está viendo.", systemPromptTask1: "1. Te presentas como Hermes AI y reconoces la página/contenido específico", diff --git a/src/languages/fr.js b/src/languages/fr.js index 0fee247..f27f962 100644 --- a/src/languages/fr.js +++ b/src/languages/fr.js @@ -82,6 +82,10 @@ export const fr = { translateTextButton: "🌐 Traduire le Texte", processingText: "Traitement...", + // Button labels for UI + translationModal: "🌐 Modal de Traduction", + translationModalHeading: "Modal de Traduction", + // System prompt components systemPromptIntro: "Vous êtes Hermes AI, alimenté par Nous Research, intégré sur une page web. Votre tâche est de générer une introduction chaleureuse et accueillante de 3 paragraphes qui montre que vous comprenez la page spécifique que l'utilisateur consulte.", systemPromptTask1: "1. Vous vous présentez comme Hermes AI et reconnaissez la page/contenu spécifique", diff --git a/src/languages/hi.js b/src/languages/hi.js index 59b374a..ab060e7 100644 --- a/src/languages/hi.js +++ b/src/languages/hi.js @@ -73,6 +73,18 @@ export const hi = { speedLabel: "गति:", playText: "टेक्स्ट चलाएं", + // Translation modal content + translatePageInfo: "वर्तमान पृष्ठ की सामग्री को अपनी चुनी गई भाषा में अनुवाद करें:", + translateToLabel: "में अनुवाद करें:", + translateButton: "🌐 अनुवाद", + translatePageButton: "🌐 पृष्ठ अनुवाद", + translateTextButton: "🌐 टेक्स्ट अनुवाद", + processingText: "प्रसंस्करण...", + + // Button labels for UI + translationModal: "🌐 अनुवाद मोडल", + translationModalHeading: "अनुवाद मोडल", + // System prompt components systemPromptIntro: "आप Hermes AI हैं, Nous Research द्वारा संचालित, एक वेबपेज में एम्बेडेड। आपका कार्य एक गर्म, स्वागत करने वाला 3-पैराग्राफ परिचय तैयार करना है जो दिखाता है कि आप उस विशिष्ट पृष्ठ को समझते हैं जिसे उपयोगकर्ता देख रहा है।", systemPromptTask1: "1. अपना परिचय Hermes AI के रूप में दें और विशिष्ट पृष्ठ/सामग्री को स्वीकार करें", diff --git a/src/languages/id.js b/src/languages/id.js index 460b228..3df9907 100644 --- a/src/languages/id.js +++ b/src/languages/id.js @@ -66,6 +66,33 @@ export const id = { "teks ke ucapan: tulis pesan apapun dan biarkan kecerdasan buatan mengucapkannya!", translatePlaceholder: "Masukkan teks apapun untuk diterjemahkan...", + // Translation modal tabs + translatePageTab: "📄 Terjemahkan Halaman", + customTextTab: "✏️ Teks Kustom", + + // TTS modal components + speedLabel: "Kecepatan:", + playText: "Putar Teks", + + // Translation modal content + translatePageInfo: "Terjemahkan konten halaman saat ini ke bahasa pilihan Anda:", + translateToLabel: "Terjemahkan ke:", + translateButton: "🌐 Terjemahkan", + translatePageButton: "🌐 Terjemahkan Halaman", + translateTextButton: "🌐 Terjemahkan Teks", + processingText: "Memproses...", + + // Button labels for UI + translationModal: "🌐 Modal Terjemahan", + translationModalHeading: "Modal Terjemahan", + + // System prompt components + systemPromptIntro: "Anda adalah Hermes AI, didukung oleh Nous Research, yang tertanam di halaman web. Tugas Anda adalah menghasilkan pengenalan hangat dan ramah 3 paragraf yang menunjukkan bahwa Anda memahami halaman spesifik yang sedang dilihat pengguna.", + systemPromptTask1: "1. Perkenalkan diri Anda sebagai Hermes AI dan akui halaman/konten spesifik", + systemPromptTask2: "2. Sebutkan 2-3 detail spesifik dan relevan yang Anda perhatikan dari konten halaman", + systemPromptTask3: "3. Tawarkan bantuan dengan pertanyaan yang terkait dengan konten halaman", + systemPromptInstructions: "Buat percakapan, membantu dan spesifik untuk apa yang Anda lihat di halaman ini. Tulis dalam bahasa", + // More alerts and messages pleaseEnterText: "Silakan masukkan teks terlebih dahulu!", pleaseSelectFile: "Silakan pilih file terlebih dahulu!", diff --git a/src/languages/ja.js b/src/languages/ja.js index 9f11d28..f698326 100644 --- a/src/languages/ja.js +++ b/src/languages/ja.js @@ -74,6 +74,18 @@ export const ja = { speedLabel: "速度:", playText: "テキストを再生", + // Translation modal content + translatePageInfo: "現在のページコンテンツを選択した言語に翻訳します:", + translateToLabel: "翻訳先:", + translateButton: "🌐 翻訳", + translatePageButton: "🌐 ページを翻訳", + translateTextButton: "🌐 テキストを翻訳", + processingText: "処理中...", + + // Button labels for UI + translationModal: "🌐 翻訳モーダル", + translationModalHeading: "翻訳モーダル", + // System prompt components systemPromptIntro: "あなたはHermes AIです。Nous Researchによって提供され、ウェブページに組み込まれています。あなたの役割は、ユーザーが閲覧している特定のページを理解していることを示す、温かく歓迎的な3段落の紹介を生成することです。", systemPromptTask1: "1. Hermes AIとして自己紹介し、特定のページ/コンテンツを認識する", diff --git a/src/languages/ko.js b/src/languages/ko.js index e69d6bb..2538d14 100644 --- a/src/languages/ko.js +++ b/src/languages/ko.js @@ -74,6 +74,18 @@ export const ko = { speedLabel: "속도:", playText: "텍스트 재생", + // Translation modal content + translatePageInfo: "현재 페이지 콘텐츠를 선택한 언어로 번역합니다:", + translateToLabel: "번역 대상:", + translateButton: "🌐 번역", + translatePageButton: "🌐 페이지 번역", + translateTextButton: "🌐 텍스트 번역", + processingText: "처리 중...", + + // Button labels for UI + translationModal: "🌐 번역 모달", + translationModalHeading: "번역 모달", + // System prompt components systemPromptIntro: "당신은 Nous Research에서 제공하는 Hermes AI로, 웹페이지에 임베드되어 있습니다. 당신의 임무는 사용자가 보고 있는 특정 페이지를 이해하고 있음을 보여주는 따뜻하고 환영하는 3단락 소개를 생성하는 것입니다.", systemPromptTask1: "1. Hermes AI로 자신을 소개하고 특정 페이지/콘텐츠를 인정합니다", diff --git a/src/languages/mr.js b/src/languages/mr.js index 5591cdd..28051bf 100644 --- a/src/languages/mr.js +++ b/src/languages/mr.js @@ -66,6 +66,33 @@ export const mr = { "टेक्स्ट-टू-स्पीच: कोणताही संदेश लिहा आणि कृत्रिम बुद्धिमत्तेला तो बोलू द्या!", translatePlaceholder: "भाषांतरासाठी कोणताही मजकूर प्रविष्ट करा...", + // Translation modal tabs + translatePageTab: "📄 पान भाषांतर", + customTextTab: "✏️ सानुकूल मजकूर", + + // TTS modal components + speedLabel: "गती:", + playText: "मजकूर प्ले करा", + + // Translation modal content + translatePageInfo: "सध्याच्या पानाची सामग्री आपल्या निवडलेल्या भाषेत भाषांतर करा:", + translateToLabel: "भाषांतर करा:", + translateButton: "🌐 भाषांतर", + translatePageButton: "🌐 पान भाषांतर", + translateTextButton: "🌐 मजकूर भाषांतर", + processingText: "प्रक्रिया करत आहे...", + + // Button labels for UI + translationModal: "🌐 भाषांतर मॉडल", + translationModalHeading: "भाषांतर मॉडल", + + // System prompt components + systemPromptIntro: "तुम्ही Hermes AI आहात, Nous Research द्वारे समर्थित, वेबपेजमध्ये एम्बेड केलेले. तुमचे कार्य उबदार आणि स्वागत करणारे 3 परिच्छेदाचे परिचय तयार करणे आहे जे दर्शवते की तुम्ही वापरकर्ता पाहत असलेले विशिष्ट पान समजून घेत आहात.", + systemPromptTask1: "1. Hermes AI म्हणून आपला परिचय द्या आणि विशिष्ट पान/सामग्री कबूल करा", + systemPromptTask2: "2. पानाच्या सामग्रीतून तुम्हाला दिसणाऱ्या 2-3 विशिष्ट, संबंधित तपशीलांचा उल्लेख करा", + systemPromptTask3: "3. पानाच्या सामग्रीशी संबंधित प्रश्नांसाठी मदत ऑफर करा", + systemPromptInstructions: "हे संवादात्मक, उपयुक्त आणि या पानावर तुम्हाला जे दिसते त्यासाठी विशिष्ट ठेवा. लिहा", + // More alerts and messages pleaseEnterText: "कृपया प्रथम काही मजकूर प्रविष्ट करा!", pleaseSelectFile: "कृपया प्रथम फाइल निवडा!", diff --git a/src/languages/pt.js b/src/languages/pt.js index 87079e1..cb1ed0b 100644 --- a/src/languages/pt.js +++ b/src/languages/pt.js @@ -74,6 +74,18 @@ export const pt = { speedLabel: "Velocidade:", playText: "Reproduzir Texto", + // Translation modal content + translatePageInfo: "Traduza o conteúdo da página atual para seu idioma escolhido:", + translateToLabel: "Traduzir para:", + translateButton: "🌐 Traduzir", + translatePageButton: "🌐 Traduzir Página", + translateTextButton: "🌐 Traduzir Texto", + processingText: "Processando...", + + // Button labels for UI + translationModal: "🌐 Modal de Tradução", + translationModalHeading: "Modal de Tradução", + // System prompt components systemPromptIntro: "Você é Hermes AI, alimentado por Nous Research, incorporado em uma página web. Sua tarefa é gerar uma introdução calorosa e acolhedora de 3 parágrafos que mostre que você entende a página específica que o usuário está visualizando.", systemPromptTask1: "1. Apresente-se como Hermes AI e reconheça a página/conteúdo específico", diff --git a/src/languages/ru.js b/src/languages/ru.js index ce86fa6..26555a3 100644 --- a/src/languages/ru.js +++ b/src/languages/ru.js @@ -74,6 +74,18 @@ export const ru = { speedLabel: "Скорость:", playText: "Воспроизвести Текст", + // Translation modal content + translatePageInfo: "Переведите содержимое текущей страницы на выбранный язык:", + translateToLabel: "Перевести на:", + translateButton: "🌐 Перевести", + translatePageButton: "🌐 Перевести Страницу", + translateTextButton: "🌐 Перевести Текст", + processingText: "Обработка...", + + // Button labels for UI + translationModal: "🌐 Модальное Окно Перевода", + translationModalHeading: "Модальное Окно Перевода", + // System prompt components systemPromptIntro: "Вы - Hermes AI, работающий на основе Nous Research, встроенный в веб-страницу. Ваша задача - создать теплое, приветливое введение из 3 абзацев, которое показывает, что вы понимаете конкретную страницу, которую просматривает пользователь.", systemPromptTask1: "1. Представьтесь как Hermes AI и признайте конкретную страницу/контент", diff --git a/src/languages/sw.js b/src/languages/sw.js index 63dfc02..82247ad 100644 --- a/src/languages/sw.js +++ b/src/languages/sw.js @@ -66,6 +66,33 @@ export const sw = { "maandishi hadi sauti: andika ujumbe wowote na uache akili bandia izungumze!", translatePlaceholder: "Ingiza maandishi yoyote ya kutafsiri...", + // Translation modal tabs + translatePageTab: "📄 Tafsiri Ukurasa", + customTextTab: "✏️ Maandishi ya Kawaida", + + // TTS modal components + speedLabel: "Kasi:", + playText: "Cheza Maandishi", + + // Translation modal content + translatePageInfo: "Tafsiri maudhui ya ukurasa wa sasa katika lugha uliyochagua:", + translateToLabel: "Tafsiri kuwa:", + translateButton: "🌐 Tafsiri", + translatePageButton: "🌐 Tafsiri Ukurasa", + translateTextButton: "🌐 Tafsiri Maandishi", + processingText: "Inachakata...", + + // Button labels for UI + translationModal: "🌐 Modal ya Tafsiri", + translationModalHeading: "Modal ya Tafsiri", + + // System prompt components + systemPromptIntro: "Wewe ni Hermes AI, unayeongozwa na Nous Research, uliojengewa ndani ya ukurasa wa wavuti. Kazi yako ni kutengeneza utangulizi wa odhi 3 wa kirafiki na wa kukaribisha ambao unaonyesha kwamba unaelewa ukurasa maalum ambao mtumiaji anaona.", + systemPromptTask1: "1. Jitambulishe kama Hermes AI na ukubali ukurasa/maudhui maalum", + systemPromptTask2: "2. Taja maelezo 2-3 maalum na muhimu ambayo unaona kutoka kwa maudhui ya ukurasa", + systemPromptTask3: "3. Toa msaada na maswali yanayohusiana na maudhui ya ukurasa", + systemPromptInstructions: "Fanya iwe ya mazungumzo, ya kusaidia na mahsusi kwa kile unachoona kwenye ukurasa huu. Andika kwa lugha", + // More alerts and messages pleaseEnterText: "Tafadhali ingiza maandishi kwanza!", pleaseSelectFile: "Tafadhali chagua faili kwanza!", diff --git a/src/languages/te.js b/src/languages/te.js index 8ef7d08..659caa9 100644 --- a/src/languages/te.js +++ b/src/languages/te.js @@ -66,6 +66,33 @@ export const te = { "టెక్స్ట్-టు-స్పీచ్: ఏదైనా సందేశం వ్రాయండి మరియు కృత్రిమ మేధస్సు దానిని మాట్లాడనివ్వండి!", translatePlaceholder: "అనువదించడానికి ఏదైనా టెక్స్ట్ నమోదు చేయండి...", + // Translation modal tabs + translatePageTab: "📄 పేజీ అనువాదం", + customTextTab: "✏️ కస్టమ్ టెక్స్ట్", + + // TTS modal components + speedLabel: "వేగం:", + playText: "టెక్స్ట్ ప్లే చేయండి", + + // Translation modal content + translatePageInfo: "ప్రస్తుత పేజీ కంటెంట్ను మీ ఎంచుకున్న భాషలో అనువదించండి:", + translateToLabel: "అనువదించు:", + translateButton: "🌐 అనువదించు", + translatePageButton: "🌐 పేజీ అనువదించు", + translateTextButton: "🌐 టెక్స్ట్ అనువదించు", + processingText: "ప్రోసెస్ చేస్తోంది...", + + // Button labels for UI + translationModal: "🌐 అనువాద మోడల్", + translationModalHeading: "అనువాద మోడల్", + + // System prompt components + systemPromptIntro: "మీరు Hermes AI, Nous Research ద్వారా సంచాలితం, వెబ్పేజీలో ఎంబెడ్ చేయబడినారు. మీ పని ఉష్ణమైన మరియు స్వాగతమైన 3 చరణాల పరిచయాన్ని సిద్ధం చేయడం మరియు మీరు వాడుకరి చూస్తున్న నిర్దిష్ట పేజీని అర్ధం చేసుకోవాలని దాని దర్శించడం.", + systemPromptTask1: "1. Hermes AI గా మిమ్మల్ని పరిచయపెట్టుకోని మరియు నిర్దిష్ట పేజీ/కంటెంట్ను స్వీకరించండి", + systemPromptTask2: "2. పేజీ కంటెంట్ నుంచి మీరు గమనించిన 2-3 నిర్దిష్ట మరియు అనుబంధ వివరాలను ప్రస్తావించండి", + systemPromptTask3: "3. పేజీ కంటెంట్ కు సంబంధించిన ప్రశ్నలలో సహాయం అందించండి", + systemPromptInstructions: "ఇది సంభాషణాత్మకం, ఉపయోగకరమైన మరియు ఈ పేజీలో మీరు చూసేదికి నిర్దిష్టమైన విధంగా ఉండాలి. వ్రాయండి", + // More alerts and messages pleaseEnterText: "దయచేసి ముందుగా కొంత టెక్స్ట్ నమోదు చేయండి!", pleaseSelectFile: "దయచేసి ముందుగా ఫైల్ ఎంచుకోండి!", diff --git a/src/languages/tr.js b/src/languages/tr.js index 192aa78..15f4838 100644 --- a/src/languages/tr.js +++ b/src/languages/tr.js @@ -66,6 +66,33 @@ export const tr = { "metin-konuşma: herhangi bir mesaj yazın ve yapay zekanın konuşmasını sağlayın!", translatePlaceholder: "Çevirmek için herhangi bir metin girin...", + // Translation modal tabs + translatePageTab: "📄 Sayfayı Çevir", + customTextTab: "✏️ Özel Metin", + + // TTS modal components + speedLabel: "Hız:", + playText: "Metni Oynat", + + // Translation modal content + translatePageInfo: "Mevcut sayfa içeriğini seçtiğiniz dile çevirin:", + translateToLabel: "Çevir:", + translateButton: "🌐 Çevir", + translatePageButton: "🌐 Sayfayı Çevir", + translateTextButton: "🌐 Metni Çevir", + processingText: "İşleniyor...", + + // Button labels for UI + translationModal: "🌐 Çeviri Modalı", + translationModalHeading: "Çeviri Modalı", + + // System prompt components + systemPromptIntro: "Siz Hermes AI'sınız, Nous Research tarafından desteklenen, bir web sayfasına gömülü bir AI'sınız. Göreviniz, kullanıcının görüntülediği belirli sayfayı anladığınızı gösteren sıcak, hoş karşılayıcı 3 paragraflık bir giriş oluşturmaktır.", + systemPromptTask1: "1. Kendinizi Hermes AI olarak tanıtın ve belirli sayfayı/içeriği kabul edin", + systemPromptTask2: "2. Sayfa içeriğinden fark ettiğiniz 2-3 belirli, ilgili detayı belirtin", + systemPromptTask3: "3. Sayfa içeriğiyle ilgili sorularda yardım teklif edin", + systemPromptInstructions: "Bunu konuşmacı, yardımcı ve bu sayfada gördüklerinize özgü tutun. Şu dilde yazın", + // More alerts and messages pleaseEnterText: "Lütfen önce metin girin!", pleaseSelectFile: "Lütfen önce dosya seçin!", diff --git a/src/languages/ur.js b/src/languages/ur.js index 6cc0457..88cb964 100644 --- a/src/languages/ur.js +++ b/src/languages/ur.js @@ -66,6 +66,33 @@ export const ur = { "ٹیکسٹ ٹو اسپیچ: کوئی بھی پیغام لکھیں اور مصنوعی ذہانت کو اسے بولنے دیں!", translatePlaceholder: "ترجمے کے لیے کوئی بھی متن داخل کریں...", + // Translation modal tabs + translatePageTab: "📄 صفحہ ترجمہ کریں", + customTextTab: "✏️ کسٹم ٹیکسٹ", + + // TTS modal components + speedLabel: "رفتار:", + playText: "ٹیکسٹ چلائیں", + + // Translation modal content + translatePageInfo: "موجودہ صفحے کا مواد آپ کی منتخب زبان میں ترجمہ کریں:", + translateToLabel: "ترجمہ کریں:", + translateButton: "🌐 ترجمہ کریں", + translatePageButton: "🌐 صفحہ ترجمہ کریں", + translateTextButton: "🌐 ٹیکسٹ ترجمہ کریں", + processingText: "پروسیسنگ...", + + // Button labels for UI + translationModal: "🌐 ترجمہ موڈل", + translationModalHeading: "ترجمہ موڈل", + + // System prompt components + systemPromptIntro: "آپ Hermes AI ہیں، Nous Research کی طرف سے فراہم کردہ، ایک ویب صفحے میں شامل۔ آپ کا کام ایک گرم جوشی، خوش آمدید 3 پیراگراف کا تعارف تیار کرنا ہے جو دکھاتا ہے کہ آپ صارف جو مخصوص صفحہ دیکھ رہا ہے اسے سمجھتے ہیں۔", + systemPromptTask1: "1. اپنا تعارف Hermes AI کے طور پر کریں اور مخصوص صفحہ/مواد کا اعتراف کریں", + systemPromptTask2: "2. صفحے کے مواد سے آپ کے مشاہدہ کردہ 2-3 مخصوص، متعلقہ تفصیلات کا ذکر کریں", + systemPromptTask3: "3. صفحے کے مواد سے متعلق سوالات کے ساتھ مدد کی پیشکش کریں", + systemPromptInstructions: "اسے باتچیت میں، مددگار اور اس صفحے پر آپ جو دیکھتے ہیں اس کے لیے مخصوص رکھیں۔ لکھیں", + // More alerts and messages pleaseEnterText: "براہ کرم پہلے کچھ متن داخل کریں!", pleaseSelectFile: "براہ کرم پہلے ایک فائل منتخب کریں!", diff --git a/src/languages/verify-translations.js b/src/languages/verify-translations.js index f4ae07a..a4b955f 100644 --- a/src/languages/verify-translations.js +++ b/src/languages/verify-translations.js @@ -73,7 +73,10 @@ function extractKeysFromFile(filePath) { function getLanguageFiles() { const files = readdirSync(__dirname); return files - .filter(file => file.endsWith('.js') && file !== 'index.js' && file !== 'verify-translations.js') + .filter(file => file.endsWith('.js') && + file !== 'index.js' && + file !== 'verify-translations.js' && + file !== 'add-missing-keys.js') .sort(); } diff --git a/src/languages/zh-tw.js b/src/languages/zh-tw.js index 3eed259..e150a21 100644 --- a/src/languages/zh-tw.js +++ b/src/languages/zh-tw.js @@ -64,6 +64,33 @@ export const zhTw = { ttsPlaceholder: "文字轉語音:寫任何訊息,讓人工智慧朗讀出來!", translatePlaceholder: "輸入任何要翻譯的文字...", + // Translation modal tabs + translatePageTab: "📄 翻譯頁面", + customTextTab: "✏️ 自定義文字", + + // TTS modal components + speedLabel: "速度:", + playText: "播放文字", + + // Translation modal content + translatePageInfo: "將目前頁面內容翻譯為您選擇的語言:", + translateToLabel: "翻譯為:", + translateButton: "🌐 翻譯", + translatePageButton: "🌐 翻譯頁面", + translateTextButton: "🌐 翻譯文字", + processingText: "處理中...", + + // Button labels for UI + translationModal: "🌐 翻譯對話框", + translationModalHeading: "翻譯對話框", + + // System prompt components + systemPromptIntro: "您是 Hermes AI,由 Nous Research 提供支持,嵌入於網頁中。您的任務是產生一個溫馨、歡迎的3段的介紹,這表明您理解使用者正在查看的特定頁面。", + systemPromptTask1: "1. 以 Hermes AI 自我介紹並承認特定頁面/內容", + systemPromptTask2: "2. 提及您從頁面內容中注意到的2-3個具體、相關的細節", + systemPromptTask3: "3. 提供與頁面內容相關的問題協助", + systemPromptInstructions: "保持對話性、幫助性並針對您在此頁面上所看到的內容。以下語言書寫", + // More alerts and messages pleaseEnterText: "請先輸入一些文字!", pleaseSelectFile: "請先選擇一個檔案!", diff --git a/src/languages/zh.js b/src/languages/zh.js index e7f951c..f6dcd0a 100644 --- a/src/languages/zh.js +++ b/src/languages/zh.js @@ -72,6 +72,18 @@ export const zh = { speedLabel: "速度:", playText: "播放文本", + // Translation modal content + translatePageInfo: "将当前页面内容翻译成您选择的语言:", + translateToLabel: "翻译为:", + translateButton: "🌐 翻译", + translatePageButton: "🌐 翻译页面", + translateTextButton: "🌐 翻译文本", + processingText: "处理中...", + + // Button labels for UI + translationModal: "🌐 翻译模态框", + translationModalHeading: "翻译模态框", + // System prompt components systemPromptIntro: "您是Hermes AI,由Nous Research提供支持,嵌入在网页中。您的任务是生成一个温暖、欢迎的3段介绍,展示您理解用户正在查看的特定页面。", systemPromptTask1: "1. 介绍自己为Hermes AI并确认特定页面/内容", diff --git a/src/ui.js b/src/ui.js index a80c46a..8bd0e48 100644 --- a/src/ui.js +++ b/src/ui.js @@ -376,8 +376,8 @@ export function createUploadFeature(container) { export function createTranslateFeature(container) { const translateDiv = document.createElement("div"); translateDiv.innerHTML = ` -

Translation Modal

- +

${getUIText("translationModalHeading")}

+ `; container.appendChild(translateDiv); } @@ -390,7 +390,8 @@ export function createSmartTranslateFeature(container) { button.onclick = () => handleSmartTranslate(button); const heading = document.createElement("h4"); - heading.textContent = "Smart Translate"; + heading.textContent = getUIText("smartTranslate"); + heading.setAttribute("data-i18n", "smartTranslate"); smartTranslateDiv.appendChild(heading); smartTranslateDiv.appendChild(button); @@ -1566,13 +1567,13 @@ async function openUncloseaiEmbeddedModalNew() { } }, }, - { text: "🔊 TTS Anything", action: (btn) => window.openTTSModal() }, + { text: getUIText("ttsAnything"), action: (btn) => window.openTTSModal() }, { - text: "🌐 Translation Modal", + text: getUIText("translationModal"), action: (btn) => window.openTranslateModal(), }, { - text: "🤖 Smart Translate", + text: getUIText("smartTranslate"), action: async (btn) => { // Create dropdown instead of opening modal if ( @@ -1589,7 +1590,7 @@ async function openUncloseaiEmbeddedModalNew() { try { const currentLang = await detectPageLanguage(); - btn.textContent = "🤖 Smart Translate"; + btn.textContent = getUIText("smartTranslate"); btn.disabled = false; // Import supported languages @@ -1693,7 +1694,7 @@ async function openUncloseaiEmbeddedModalNew() { 100, ); } catch (error) { - btn.textContent = "🤖 Smart Translate"; + btn.textContent = getUIText("smartTranslate"); btn.disabled = false; alert(getUIText("languageDetectionFailed", { error: error.message })); } @@ -3383,7 +3384,7 @@ export async function openUncloseaiEmbeddedModal() { readPageBtn.onclick = readPageWithHermes; const ttsBtn = document.createElement("button"); - ttsBtn.textContent = "🔊 TTS Anything"; + ttsBtn.textContent = getUIText("ttsAnything"); if (USE_CUSTOM_STYLING) { ttsBtn.style.cssText = "padding: 6px 12px; border: 1px solid #ccc; border-radius: 4px; background: white; cursor: pointer;"; @@ -4342,8 +4343,8 @@ export function openTranslateModal() { // Page translation content const pageInfo = document.createElement("p"); - pageInfo.textContent = - "Translate the current page content into your chosen language:"; + pageInfo.textContent = getUIText("translatePageInfo"); + pageInfo.setAttribute("data-i18n", "translatePageInfo"); pageContent.appendChild(pageInfo); // Custom text content @@ -4361,7 +4362,8 @@ export function openTranslateModal() { languageContainer.style.cssText = "margin: 20px 0;"; const languageLabel = document.createElement("label"); - languageLabel.textContent = "Translate to: "; + languageLabel.textContent = getUIText("translateToLabel"); + languageLabel.setAttribute("data-i18n", "translateToLabel"); languageLabel.style.display = "block"; languageLabel.style.marginBottom = "8px"; @@ -4382,7 +4384,8 @@ export function openTranslateModal() { // Translate button const translateButton = document.createElement("button"); - translateButton.textContent = "🌐 Translate"; + translateButton.textContent = getUIText("translateButton"); + translateButton.setAttribute("data-i18n", "translateButton"); if (USE_CUSTOM_STYLING) { translateButton.style.cssText = ` padding: 12px 24px; @@ -4429,7 +4432,7 @@ export function openTranslateModal() { customTab.style.color = "#4CAF50"; pageContent.style.display = "block"; customContent.style.display = "none"; - translateButton.textContent = "🌐 Translate Page"; + translateButton.textContent = getUIText("translatePageButton"); } }; @@ -4442,7 +4445,7 @@ export function openTranslateModal() { pageTab.style.color = "#4CAF50"; customContent.style.display = "block"; pageContent.style.display = "none"; - translateButton.textContent = "🌐 Translate Text"; + translateButton.textContent = getUIText("translateTextButton"); } }; @@ -4452,7 +4455,7 @@ export function openTranslateModal() { const targetLanguageName = SUPPORTED_LANGUAGES[targetLanguage]; try { - translateButton.textContent = "Processing..."; + translateButton.textContent = getUIText("processingText"); translateButton.disabled = true; resultContainer.style.display = "none";