diff --git a/lib/core/translations/app_translations.dart b/lib/core/translations/app_translations.dart index e555232b4..354292fa3 100644 --- a/lib/core/translations/app_translations.dart +++ b/lib/core/translations/app_translations.dart @@ -6,7 +6,8 @@ import 'package:get_storage/get_storage.dart'; import 'language/en_us.dart'; // 英语 import 'language/zh_cn.dart'; // 简体中文 import 'language/es_es.dart'; // 西班牙语 -import 'language/zh_hk.dart'; // 繁体中文 +import 'language/zh_hk.dart'; // 繁体中文(香港) +import 'language/zh_tw.dart'; // 繁体中文 import 'language/pt_pt.dart'; // 添加葡萄牙语导入 import 'language/ja_jp.dart'; // 添加日语导入 import 'language/ko_kr.dart'; // 添加韩语导入 @@ -62,24 +63,28 @@ class AppTranslations extends Translations { String? countryCode = systemLocale.countryCode?.toUpperCase(); String? scriptCode = systemLocale.scriptCode; - // 根据脚本代码判断 - if (scriptCode == 'Hant') { - return const Locale('zh', 'HK'); // 繁体中文fallback - } else if (scriptCode == 'Hans') { - return const Locale('zh', 'CN'); // 简体中文fallback - } - // 根据地区代码判断 if (countryCode != null) { switch (countryCode) { case 'HK': case 'MO': - case 'TW': return const Locale('zh', 'HK'); // 繁体中文fallback + case 'TW': + return const Locale('zh', 'TW'); // 繁体中文fallback + case 'CN': + case 'SG': + return const Locale('zh', 'CN'); // 简体中文fallback default: return const Locale('zh', 'CN'); // 简体中文fallback } } + + // 根据脚本代码判断 + if (scriptCode == 'Hant') { + return const Locale('zh', 'TW'); // 繁体中文fallback + } else if (scriptCode == 'Hans') { + return const Locale('zh', 'CN'); // 简体中文fallback + } } // 对于其他语言,如果支持则使用英语,否则使用默认的中文 @@ -94,7 +99,7 @@ class AppTranslations extends Translations { static final supportedLocales = [ const Locale('zh', 'CN'), // 简体中文 const Locale('zh', 'HK'), // 香港繁体中文 - const Locale('zh', 'TW'), // 台湾繁体中文(映射到香港繁体) + const Locale('zh', 'TW'), // 繁体中文 const Locale('en', 'US'), // 英语 const Locale('es', 'ES'), // 添加西班牙语 const Locale('pt', 'PT'), // 添加葡萄牙语支持 @@ -148,16 +153,16 @@ class AppTranslations extends Translations { // 中文繁体的各种表示方式 'zh-HK': const Locale('zh', 'HK'), - 'zh-TW': const Locale('zh', 'HK'), // 台湾繁体映射到香港繁体 - 'zh-Hant': const Locale('zh', 'HK'), + 'zh-TW': const Locale('zh', 'TW'), + 'zh-Hant': const Locale('zh', 'TW'), 'zh-Hant-HK': const Locale('zh', 'HK'), - 'zh-Hant-TW': const Locale('zh', 'HK'), + 'zh-Hant-TW': const Locale('zh', 'TW'), 'zh-Hant-MO': const Locale('zh', 'HK'), 'zh_HK': const Locale('zh', 'HK'), - 'zh_TW': const Locale('zh', 'HK'), - 'zh_Hant': const Locale('zh', 'HK'), + 'zh_TW': const Locale('zh', 'TW'), + 'zh_Hant': const Locale('zh', 'TW'), 'zh_Hant_HK': const Locale('zh', 'HK'), - 'zh_Hant_TW': const Locale('zh', 'HK'), + 'zh_Hant_TW': const Locale('zh', 'TW'), // 英语的各种表示方式 'en-US': const Locale('en', 'US'), @@ -251,15 +256,6 @@ class AppTranslations extends Translations { // 处理中文的特殊情况 if (languageCode == 'zh') { - // 优先根据脚本代码判断简繁体 - if (scriptCode != null) { - if (scriptCode == 'Hans') { - return const Locale('zh', 'CN'); // 简体中文 - } else if (scriptCode == 'Hant') { - return const Locale('zh', 'HK'); // 繁体中文 - } - } - // 根据国家/地区代码判断 if (countryCode != null) { switch (countryCode) { @@ -268,14 +264,24 @@ class AppTranslations extends Translations { return const Locale('zh', 'CN'); // 简体中文 case 'HK': case 'MO': - case 'TW': return const Locale('zh', 'HK'); // 繁体中文 + case 'TW': + return const Locale('zh', 'TW'); // 繁体中文 default: // 默认使用简体中文(大陆用户更多) return const Locale('zh', 'CN'); } } + // 再根据脚本代码判断简繁体 + if (scriptCode != null) { + if (scriptCode == 'Hans') { + return const Locale('zh', 'CN'); // 简体中文 + } else if (scriptCode == 'Hant') { + return const Locale('zh', 'TW'); // 繁体中文 + } + } + // 如果没有国家代码,默认使用简体中文 return const Locale('zh', 'CN'); } @@ -301,6 +307,7 @@ class AppTranslations extends Translations { 'en_US': enUS, 'zh_CN': zhCN, 'zh_HK': zhHK, // 添加繁体中文映射 + 'zh_TW': zhTW, // 添加繁体中文映射 'es_ES': esES, // 添加西班牙语翻译映射 'pt_PT': ptPT, // 添加葡萄牙语映射 'ja_JP': jaJP, // 添加日语映射 diff --git a/lib/core/translations/language/ar_sa.dart b/lib/core/translations/language/ar_sa.dart index 5208c374b..e0042d85f 100644 --- a/lib/core/translations/language/ar_sa.dart +++ b/lib/core/translations/language/ar_sa.dart @@ -11,7 +11,7 @@ const Map arSA = { 'connectionFailure': 'فشل الاتصال', 'unconnected': 'غير متصل', 'search': 'بحث', - "requestCancellation": "تم إلغاء الطلب", + "requestCancellation": "طلب إلغاء", "connectionTimeout": "انتهت مهلة الاتصال", "requestTimeout": "انتهت مهلة الطلب", "responseTimeout": "انتهت مهلة الاستجابة", @@ -33,6 +33,7 @@ const Map arSA = { "spanish": "الإسبانية", "portuguese": "البرتغالية", "traditionalChinese": "الصينية التقليدية", + "traditionalChineseHK": "الصينية التقليدية (هونغ كونغ)", "japanese": "اليابانية", "korean": "الكورية", "french": "الفرنسية", @@ -67,7 +68,7 @@ const Map arSA = { "serbian": "الصربية", "icelandic": "الآيسلندية", "arabic": "العربية", - "persian": "الفارسی", + "persian": "الفارسية", // 登录页 "welcome": "أهلاً بك", @@ -76,13 +77,13 @@ const Map arSA = { "accountNumber": "رقم الهاتف أو البريد الإلكتروني", "verificationCode": "رمز التحقق", "getCode": "الحصول على الرمز", - "reacquireAfter": "إعادة الإرسال بعد s ثانية", + "reacquireAfter": "ثانية لإعادة الطلب", "otherWays": "أو سجل الدخول باستخدام الطرق التالية", "expressConsent": "تسجيل الدخول/التسجيل يعني موافقتك على", "and": " و ", "userAgreement": "《اتفاقية المستخدم》", "privacyPolicy": "《سياسة الخصوصية》", - 'selectCountry': 'اختر الدولة/المنطقة', + "selectCountry": "اختر الدولة/المنطقة", "email": "البريد الإلكتروني", "phoneNumber": "رقم الهاتف", "pleaseEnterContactInfo": "يرجى إدخال رقم الهاتف أو البريد الإلكتروني", @@ -91,8 +92,8 @@ const Map arSA = { "tip": "نصيحة", "pleaseEnterCompleteCode": "يرجى إدخال رمز التحقق بالكامل", "loginFailed": "فشل تسجيل الدخول، يرجى المحاولة مرة أخرى", - 'pleaseAcceptPrivacyPolicy': - 'يرجى قراءة والموافقة على سياسة الخصوصية واتفاقية المستخدم أولاً', + "pleaseAcceptPrivacyPolicy": + "يرجى قراءة والموافقة على سياسة الخصوصية واتفاقية المستخدم أولاً", "enterVerificationCode": "أدخل رمز التحقق", "verificationCodeSentTo": "تم إرسال رمز التحقق إلى", "resendVerificationCode": "إعادة إرسال رمز التحقق", @@ -100,12 +101,15 @@ const Map arSA = { "usePasswordLogin": "استخدام كلمة المرور لتسجيل الدخول", // 隐私政策弹窗 - "loginDeclaration": "إعلان Voitrans", - "welcomeToThisApp": "مرحبًا بك في Voitrans، يرجى القراءة بعناية", + "loginDeclaration": "إعلان Voitrans", // Voitrans 声明 + "welcomeToThisApp": + "مرحبًا بك في Voitrans، يرجى القراءة بعناية", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - "، بالنقر على 'أوافق وأدخل'، فإنك تقر بأنك قد قرأت ووافقت على الاتفاقيات المذكورة أعلاه. النقر على 'لا أوافق' سيؤدي إلى الخروج من التطبيق.", - "disagree": "لا أوافق", - "agreeAndEnter": "أوافق وأدخل", + "، بالنقر على 'أوافق وأدخل'، فإنك تقر بأنك قد قرأت ووافقت على الاتفاقيات المذكورة أعلاه. النقر على 'لا أوافق' سيؤدي إلى الخروج من التطبيق.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "لا أوافق", // 不同意 + "agreeAndEnter": "أوافق وأدخل", // 同意并进入 // 首页 "deviceStatus": "حالة الجهاز", @@ -121,7 +125,7 @@ const Map arSA = { "aiAssistant": "مساعد الذكاء الاصطناعي الشامل", "aiAssistantInfo": "مستشار حصري على مدار 24 ساعة للإجابة على الأسئلة وتقديم الاقتراحات", - "interpretation": "الترجمة الفورية", + "interpretation": "الترجمة", "simultaneousInterpretationInfo": "ترجمة فورية لأكثر من 80 لغة، سفر خالٍ من القلق", "aiCompanion": "رفيق العائلة", @@ -135,7 +139,7 @@ const Map arSA = { "bluetoothInitializationFailure": "فشل تهيئة خدمة البلوتوث", "checkingPermissions": "جاري التحقق من الأذونات...", "lackPermissions": - "يرجى включить أذونات البلوتوث y الإمكانية الوصول إلى الموقع للبحث عن الأجهزة المحاورة", + "يرجى تفعيل أذونات البلوتوث والموقع لاكتشاف الأجهزة القريبة وتوصيلها", "searchingDevice": "جاري البحث عن الجهاز...", "findConnectedDevice": "تم العثور على جهاز متصل", "notFound": "لم يتم العثور على أجهزة بلوتوث متصلة", @@ -165,12 +169,12 @@ const Map arSA = { "exploreSlogan1": "رفقة ذكية، إمكانيات لا حصر لها", "exploreSlogan2": "نظارات ذكية، إمكانيات لا حصر لها", "exploreAi": "استكشف وظائف الذكاء الاصطناعي التي يقدمها Voitrans", - "aiFunction": "وظائف الذكاء الاصطناعي", + "aiFunction": "مساعد الذكاء الاصطناعي", "allRoundAssistant": "مساعد شامل", "allRoundAssistantInfo": "يساعدك على حل جميع أنواع المشاكل", "simultaneousTranslation": "الترجمة الفورية", "faceToFaceTranslation": "الترجمة وجهًا لوجه", - 'audioVideoTranslation': 'ترجمة الصوت والفيديو', + 'audioVideoTranslation': 'ترجمة الوسائط المتعددة', 'callTranslation': 'ترجمة المكالمات', "simultaneousTranslationInfo": "ترجمة فورية لأكثر من 80 لغة", "aiGirlfriend": "رفيق العائلة", @@ -180,9 +184,210 @@ const Map arSA = { "conferenceAssistant": "مساعد اجتماعات الأعمال", "conferenceAssistantInfo": "تسجيل محاضر الاجتماعات في الوقت الفعلي، ترجمة متعددة اللغات", - "usageStats": "إحصائيات الاستخدام", // 用量统计 - "usageStatsInfo": "عرض إحصائيات استخدامك", // 查看您的使用统计数据 + "usageStats": "إحصائيات الاستخدام", + "usageStatsInfo": "عرض إحصائيات استخدامك", "scene": "مشهد", + // 用量统计模块 + "aiChat": "دردشة الذكاء الاصطناعي", + "translationStats": "إحصائيات الترجمة", + "meetingStats": "إحصائيات الاجتماع", + "today": "اليوم", + "thisWeek": "هذا الأسبوع", + "thisMonth": "هذا الشهر", + "history": "التاريخ", + "currentSessionStats": "إحصائيات الجلسة الحالية", + "translationCount": "عدد الترجمات", + "sessionDuration": "مدة الجلسة", + "characters": "عدد الأحرف", + "recordingDuration": "مدة التسجيل", + "totalApiCalls": "إجمالي استدعاءات API", + "sessionCount": "عدد الجلسات", + "totalCharacters": "إجمالي الأحرف", + "apiCallStats": "إحصائيات استدعاء API", + "translationApi": "API الترجمة", + "asr": "التعرف على الكلام", + "tts": "تحويل النص إلى كلام", + //"aiSummary": "AI摘要", + "dataVolumeStats": "إحصائيات حجم البيانات", + "sourceTextCharacters": "أحرف النص المصدر", + "ttsTextCharacters": "أحرف نص TTS", + "effectiveAudioDuration": "مدة الصوت الفعالة", + "totalSessionDuration": "إجمالي مدة الجلسة", + "costStats": "إحصائيات التكلفة", + "estimatedCost": "التكلفة المقدرة", + "dailyCostThreshold": "عتبة التكلفة اليومية", + "monthlyCostThreshold": "عتبة التكلفة الشهرية", + "usageBehaviorStats": "إحصائيات سلوك الاستخدام", + "mostUsedLanguagePair": "زوج اللغات الأكثر استخدامًا", + "mostUsedMode": "الوضع الأكثر استخدامًا", + "asrApiCalls": "استدعاءات ASR", + "totalAudioDuration": "إجمالي مدة الصوت", + "audioFileSize": "حجم ملف الصوت", + "transcriptBytes": "بايت النسخ", + // 通知文案 + "loadFailed": "فشل التحميل", + "statsLoadFailedTryLater": "فشل تحميل الإحصائيات، يرجى المحاولة لاحقًا", + "cleanupComplete": "اكتمل التنظيف", + "cleanedOldData": "تم تنظيف البيانات القديمة التي تزيد عن 90 يومًا", + "exportFeature": "ميزة التصدير", + "exportInDevelopment": "ميزة تصدير البيانات قيد التطوير", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'الباقات المتاحة', + 'remainingQuota': 'الحصة المتبقية', + 'totalQuota': 'إجمالي الحصة', + 'remaining': 'المتبقي', + 'featureDescription': 'وصف الميزة', + // AI 功能卡片 + 'musicAndRecommendation': 'الموسيقى والتوصيات', + 'navigationAndRoutes': 'الملاحة والمسارات', + 'nearbySearch': 'البحث القريب', + 'newsInformation': 'الأخبار والمعلومات', + 'communicationAssistant': 'مساعد الاتصال', + // 翻译功能卡片 + 'realtimeTranscription': 'النسخ في الوقت الفعلي', + // 'textTranslation' 已存在 + 'sceneLexicon': 'معجم المشهد', + 'subtitleDisplay': 'عرض الترجمة', + // 会议功能卡片 + 'meetingRecording': 'تسجيل الاجتماع', + 'transcriptionAndSummary': 'النسخ والملخص', + 'keywordSearch': 'بحث الكلمات الرئيسية', + 'collaborationSharing': 'التعاون والمشاركة', + // 商品名称(按ID) + 'ai_001_name': 'أساسيات الذكاء الاصطناعي 100 مرة', + 'ai_002_name': 'أساسيات الذكاء الاصطناعي 500 مرة', + 'ai_003_name': 'أساسيات الذكاء الاصطناعي 1000 مرة', + 'meet_001_name': 'أساسيات الاجتماع 100 مرة', + 'meet_002_name': 'أساسيات الاجتماع 500 مرة', + 'meet_003_name': 'أساسيات الاجتماع 1000 مرة', + 'trans_001_name': 'أساسيات الترجمة 100 مرة', + 'trans_002_name': 'أساسيات الترجمة 500 مرة', + 'trans_003_name': 'أساسيات الترجمة 1000 مرة', + + // 商品描述(按ID) + 'ai_001_desc': 'يحتوي على 100 استخدام، يغطي ميزات الذكاء الاصطناعي الأساسية', + 'ai_002_desc': 'يحتوي على 500 استخدام، يغطي ميزات الذكاء الاصطناعي الأساسية', + 'ai_003_desc': 'يحتوي على 1000 استخدام، يغطي ميزات الذكاء الاصطناعي الأساسية', + 'meet_001_desc': 'يحتوي على 100 تسجيل/نسخ للاجتماعات', + 'meet_002_desc': 'يحتوي على 500 تسجيل/نسخ للاجتماعات', + 'meet_003_desc': 'يحتوي على 1000 تسجيل/نسخ للاجتماعات', + 'trans_001_desc': 'يحتوي على 100 ترجمة (صوت/نص)', + 'trans_002_desc': 'يحتوي على 500 ترجمة (صوت/نص)', + 'trans_003_desc': 'يحتوي على 1000 ترجمة (صوت/نص)', + +// 商品页通用页脚 + 'appNameProvider': 'اسم التطبيق: Voitrans · مزود الخدمة: Voitrans', + 'iapCustomerServiceQQLabel': 'خدمة عملاء المشتريات داخل التطبيق QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'تسجيل ونسخ، بحث الكلمات الرئيسية والملخص التلقائي، تحسين كفاءة الاجتماعات.', + 'meetingHeaderDesc2': + 'مناسب لاجتماعات الأعمال، ملاحظات الفصول الدراسية، ومحاضر المقابلات.', + 'meetingAutoRecording': 'التسجيل التلقائي والتقسيم', + 'meetingSpeakerTagging': 'تحديد المتحدث', + 'meetingLongAudioTranscription': 'نسخ الصوت الطويل', + 'meetingKeyPointSummary': 'استخراج النقاط الرئيسية', + 'meetingTopicNameSearch': 'البحث حسب الموضوع/الاسم', + 'meetingTimelineJump': 'القفز في الجدول الزمني', + 'meetingExportSummary': 'تصدير المحضر', + 'meetingMultiPlatformShare': 'المشاركة عبر منصات متعددة', + 'meetingDisclaimer': + 'يُقترح الاستخدام في بيئة هادئة، يتأثر الأداء بالميكروفون والشبكة، يرجى الرجوع إلى الأداء الفعلي.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'ترجمة فورية متعددة اللغات وترجمة نصوص، بث صوتي بزمن انتقال منخفض.', + 'transHeaderDesc2': 'مناسب للسفر، الأعمال، الخطب والتدريس.', + 'translateZhEn': 'ترجمة صينية-إنجليزية', + 'lowLatencyVoiceBroadcast': 'بث صوتي بزمن انتقال منخفض', + 'multiLangTextTranslation': 'ترجمة نصوص متعددة اللغات', + 'termOptimizationContextPreserve': 'تحسين المصطلحات والحفاظ على السياق', + 'lexiconTourBusinessLife': 'معاجم السياحة/الأعمال/الحياة', + 'personalVocabularyMemory': 'ذاكرة المفردات الشخصية', + 'conversationSubtitleLargeText': 'ترجمة المحادثة/وضع النص الكبير', + 'colorHighContrast': 'تباين ألوان عالي', + 'transDisclaimer': + 'يتأثر أداء الترجمة بالميكروفون، تأخير الشبكة وضوضاء البيئة، يرجى الرجوع إلى الأداء الفعلي.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'حصة محادثة أطول، المزيد من استدعاءات الأدوات، دعم سياق أطول.', + 'aiHeaderDesc2': + 'مناسب للأسئلة والأجوبة الذكية، التلخيص والتحليل، وتنفيذ المهام.', + 'musicSearchPlaybackControl': 'البحث في مكتبة الموسيقى والتحكم في التشغيل', + 'smartPlaylistAndSimilarRecommendations': + 'قائمة تشغيل ذكية وتوصيات لأغاني مماثلة', + 'routePlanningAndCongestionAvoidance': 'تخطيط المسار وتجنب الازدحام', + 'voiceBroadcastAndWaypoints': 'البث الصوتي وإعدادات نقاط الطريق', + 'realTimeWeatherForecast': 'الطقس في الوقت الفعلي والتوقعات', + 'clothingAdviceAndTravelReminders': 'نصائح الملابس وتذكيرات السفر', + 'poiSearchFoodGasParking': 'البحث عن نقاط الاهتمام: طعام/وقود/مواقف', + 'ratingsHoursAndDirectRoutes': 'التقييمات، ساعات العمل والمسارات المباشرة', + 'hotNewsAndTopicOverview': 'أخبار عاجلة ونظرة عامة على الموضوع', + 'longArticleSummariesAndKeyPoints': 'ملخصات المقالات الطويلة واستخراج النقاط', + 'helpCallAndSMS': 'المساعدة في إجراء المكالمات وإرسال الرسائل القصيرة', + 'templatedMessagesAndScheduleReminders': 'رسائل القوالب وتذكيرات الجدول', + 'aiDisclaimer': + 'تتأثر الميزات المذكورة أعلاه بأذونات الجهاز، توفر الخدمة وحالة الشبكة، يرجى الرجوع إلى الأداء الفعلي.', + + // 会员商品页 + 'benefitsOverview': 'نظرة عامة على المزايا', + 'higherQuota': 'حصة استخدام أعلى', + 'lowerUnitPrice': 'سعر وحدة أقل', + 'priorityService': 'خدمة الأولوية', + 'exclusiveSupportChannel': 'قناة دعم حصرية', + 'fastResponse': 'استجابة سريعة للمشاكل', + 'eventsAndDiscounts': 'الأنشطة والخصومات', + 'memberExclusiveEvents': 'أنشطة حصرية للأعضاء', + 'longTermDiscountPlan': 'خطة خصم طويلة الأجل', + 'generalPrivileges': 'امتيازات عامة', + 'earlyAccessNewFeatures': 'تجربة الميزات الجديدة أولاً', + 'crossDeviceSync': 'مزامنة عبر الأجهزة', + 'vipDisclaimer': + 'تخضع المزايا الفعلية لتوضيح الباقة، وقد يتم تعديلها مع تحديثات الإصدار.', + + // 新手引导 / Onboarding + 'skip': 'تخطي', + 'next': 'التالي', + 'sayLilyHint': 'قل للميكروفون: "Lily Lily"', + 'imHere': 'أنا هنا~', + 'guideWelcomeWakeAI': + 'مرحبًا بك في Voitrans! أولاً، دعنا نوقظ الذكاء الاصطناعي الخاص بك - Lily', + 'aiReplyCompleted': 'أكملت Lily الإجابة!', + 'aiThinking': 'Lily تفكر الآن~', + 'guideAwakenSuccess': + 'رائع! لقد نجحت في إيقاظ Lily، جرب الآن أن تطلب منها القيام بشيء ما', + 'confirmInput': 'تأكيد الإدخال', + 'guideClickSendPrefix': 'انقر للإرسال،', + // AI 引导步骤 + 'guideWeatherStart': 'قل لـ Lily: "كيف هو الطقس اليوم"', + 'guideWeatherInput': 'كيف هو الطقس اليوم', + 'guideWeatherSend': 'ستقوم Lily ببث الطقس لك في الوقت الفعلي', + 'guideWeatherEnd': 'يمكن لـ Lily بث الطقس لك في الوقت الفعلي، جرب أوامر أخرى', + 'guideMusicStart': 'قل لـ Lily: "يرجى تشغيل مجموعة من موسيقى الروك"', + 'guideMusicInput': 'يرجى تشغيل مجموعة من موسيقى الروك', + 'guideMusicSend': 'ستبحث Lily عن مجموعة موسيقى لك', + 'guideMusicEnd': 'نجحت Lily في العثور على مجموعة موسيقى لك، جرب أوامر أخرى', + 'guideNavStart': 'قل لـ Lily: "ملاحة إلى مطار شينزين"', + 'guideNavInput': 'ملاحة إلى مطار شينزين', + 'guideNavSend': 'ستقوم Lily بتخطيط المسار لك', + 'guideNavEnd': 'نجحت Lily في الملاحة إلى مطار شينزين، جرب أوامر أخرى', + 'guideMeetingStart': + 'قل لـ Lily: "إنشاء تذكير بالاجتماع غدًا الساعة 3 مساءً"', + 'guideMeetingInput': 'إنشاء تذكير بالاجتماع غدًا الساعة 3 مساءً', + 'guideMeetingSend': 'ستقوم Lily بإنشاء تذكير بالاجتماع لك', + 'guideMeetingEnd': 'نجحت Lily في إنشاء تذكير بالاجتماع لك، جرب أوامر أخرى', + 'guidePhoneStart': 'قل لـ Lily: "اتصل بأمي"', + 'guidePhoneInput': 'اتصل بأمي', + 'guidePhoneSend': 'ستقوم Lily بإجراء المكالمة لك', + 'guidePhoneEnd': 'نجحت Lily في إجراء المكالمة لك، جرب أوامر أخرى', + 'guideSmsStart': 'قل لـ Lily: "أرسل رسالة لأبي تقول سأعود للمنزل للعشاء"', + 'guideSmsInput': 'أرسل رسالة لأبي تقول سأعود للمنزل للعشاء', + 'guideSmsSend': 'ستقوم Lily بإرسال الرسالة لك', + 'guideSmsEnd': 'تم إرسال الرسالة، التحكم الصوتي أكثر ملاءمة', // 商务会议助手页 "startMeeting": "بدء الاجتماع", @@ -191,7 +396,7 @@ const Map arSA = { 'noContent': 'لا يوجد محتوى', 'editMeetingTitle': 'تعديل عنوان الاجتماع (اختياري)', 'meetingTitle': 'عنوان الاجتماع (اختياري)', - 'maxCharacters': '50 حرفًا كحد أقصى', + 'maxCharacters': 'الحد الأقصى 50 حرفًا', 'meeting': 'اجتماع', 'recordingDetails': 'تفاصيل التسجيل', 'aiSummary': 'ملخص الذكاء الاصطناعي', @@ -199,72 +404,72 @@ const Map arSA = { // Meeting模块 - 导航和基础功能 'files': 'ملفات', - 'mine': 'ملفاتي', + 'mine': 'أنا', 'connect': 'اتصال', 'allFiles': 'كل الملفات', - 'searchInAllFiles': 'بحث في كل الملفات', + 'searchInAllFiles': 'البحث في جميع الملفات', 'from': 'من', - 'sortBy': 'فرز حسب', + 'sortBy': 'ترتيب حسب', 'creationTime': 'وقت الإنشاء', 'bluetoothConnection': 'اتصال بلوتوث', 'meetingReconnect': 'إعادة الاتصال', 'searching': 'جاري البحث...', - 'searchFailed': 'فشل البحث، يرجى التحقق مما إذا كان البلوتوث مفتوحًا', + 'searchFailed': 'فشل البحث، يرجى التحقق مما إذا كان البلوتوث قيد التشغيل', 'aiPenNotFound': 'لم يتم العثور على جهاز AI PEN', 'connectedToAiPen': 'متصل بجهاز AI PEN', - 'checkingNewFiles': 'التحقق من وجود ملفات جديدة للاستيراد', + 'checkingNewFiles': 'جاري التحقق من وجود ملفات جديدة للاستيراد', 'startingWifi': 'جاري تشغيل Wi-Fi...', 'newFilesDetected': 'تم اكتشاف ملفات جديدة، جاري التحضير للاستيراد', 'noNewFiles': 'لا توجد ملفات جديدة للاستيراد', 'connectingWifi': 'جاري الاتصال بـ Wi-Fi...', 'wifiConnected': 'تم الاتصال بـ Wi-Fi بنجاح', 'downloadingFiles': 'جاري تنزيل الملفات...', - 'downloadingFileProgress': - 'إجمالي {total} ملفات، جاري تنزيل الملف رقم {current}', + 'downloadingFileProgress': 'إجمالي {total} ملفًا، جاري تنزيل الملف {current}', 'downloadComplete': 'اكتمل التنزيل', 'downloadCompleteInfo': - 'اكتمل التنزيل، إجمالي {count} ملفات، سيعود تلقائيًا بعد ثانيتين', + 'اكتمل التنزيل، إجمالي {count} ملفًا، سيعود تلقائيًا بعد ثانيتين', // Meeting模块 - 录音功能 'startRecording': 'بدء التسجيل', 'liveRecording': 'تسجيل مباشر', - 'audioVideoRecording': 'تسجيل صوت وفيديو', + 'audioVideoRecording': 'تسجيل صوت/فيديو', 'callRecording': 'تسجيل المكالمات', 'importAudio': 'استيراد صوت', 'transcribing': 'جاري النسخ...', 'summarizing': 'جاري التلخيص...', 'analyzing': 'جاري التحليل...', - 'summaryComplete': 'اكتمل التلخيص', + 'summaryComplete': 'اكتمل الملخص', + //'generating': '正在生成...', 'generate': 'إنشاء', 'overview': 'نظرة عامة', - 'transcription': 'نسخ', - 'summary': 'ملخص', - 'mindMap': 'خريطة ذهنية', + 'transcription': 'النسخ', + 'summary': 'الملخص', + 'mindMap': 'الخريطة الذهنية', 'editSpeaker': 'تعديل', 'nameSpeaker': 'تسمية المتحدث', // Meeting模块 - 我的页面 'transcriptionRecords': 'سجلات النسخ', 'templateCommunity': 'مجتمع القوالب', - 'comingSoon': 'قريبًا', + 'comingSoon': 'قريبا', 'integration': 'تكامل', 'voitransPrivateCloud': 'سحابة VOITRANS الخاصة', 'enabled': 'مفعل', 'disabled': 'معطل', - 'myVoitransDevice': 'جهازي VOITRANS', + 'myVoitransDevice': 'جهاز VOITRANS الخاص بي', 'helpAndFeedback': 'المساعدة والملاحظات', 'aboutVoitrans': 'حول VOITRANS', 'meetingDays': 'أيام', 'meetingHours': 'ساعات', 'voitransAiMember': 'عضو Voitrans AI', 'unlockStarterMember': 'فتح عضوية Starter', - 'bindDeviceToActivate': 'اربط جهاز Voitrans لتفعيل عضوية Starter', - 'unlockNow': 'افتح الآن', + 'bindDeviceToActivate': 'ربط جهاز Voitrans لتفعيل عضوية Starter', + 'unlockNow': 'فتح الآن', // Meeting模块 - 会员功能 'comparison': 'مقارنة', 'detailedInfo': 'معلومات مفصلة', - 'monthlyTranscriptionTime': 'مدة النسخ الشهرية', + 'monthlyTranscriptionTime': 'وقت النسخ الشهري', 'unlimited': 'غير محدود', 'professionalTemplates': 'قوالب احترافية', 'limited': 'محدود', @@ -272,34 +477,34 @@ const Map arSA = { 'professionalTerms': 'مصطلحات احترافية', 'customTemplates': 'قوالب مخصصة', 'visualMindMap': 'خريطة ذهنية مرئية', - 'speakerIdentification': 'تمييز المتحدثين', + 'speakerIdentification': 'تحديد المتحدث', 'aiVoiceEnhancement': 'تحسين الصوت بالذكاء الاصطناعي', 'audioImport': 'استيراد الصوت', - 'multipleExportFormats': 'يدعم تنسيقات تصدير متعددة', - 'professionalSummaryTemplates': 'قوالب ملخصات احترافية', + 'multipleExportFormats': 'دعم تنسيقات تصدير متعددة', + 'professionalSummaryTemplates': 'قوالب ملخص احترافية', 'professionalTemplateDesc': - 'تصميم قوالب احترافية لزيادة كفاءة عملك. مصممة خصيصًا لتلبية احتياجات الصناعة.', + 'تصميم قوالب احترافية لتحسين كفاءة عملك. مخصصة حسب احتياجات الصناعة.', 'customTemplateDesc': - 'يمكنك تخصيص مطالبات الملخص وفقًا لاحتياجاتك واستخدامها لإنشاء الملخصات المطلوبة.', + 'يمكنك تخصيص مطالبات التلخيص حسب احتياجاتك واستخدامها لإنشاء الملخصات المطلوبة.', 'askAiDesc': - 'استخرج معلومات أعمق بذكاء من التسجيلات، وأنشئ جداول بيانات، واستنتاجات مناقشات رئيسية، وقوائم مهام، ورسائل بريد إلكتروني للتقارير بنقرة واحدة.', + 'استخراج معلومات أعمق بذكاء من التسجيلات، إنشاء جداول بيانات، استنتاجات المناقشة الرئيسية، قوائم المهام، رسائل البريد الإلكتروني للتقارير وغيرها من المحتويات المنسقة بنقرة واحدة.', 'visualMindMapDesc': - 'تجاوز الملخص - استخدم الخرائط الذهنية لتنظيم وتصور النقاط الرئيسية، وفهم النص الكامل بشكل أكثر فعالية.', + 'تجاوز الملخص - تنظيم وتصور النقاط الرئيسية باستخدام الخرائط الذهنية لفهم النص الكامل بشكل أكثر فعالية.', 'templateCommunityDesc': - 'اكتشف وشارك واحصل على الإلهام من مكتبة القوالب التي أنشأها المستخدمون.', + 'اكتشف، شارك، واستلهم من مكتبة القوالب التي أنشأها المستخدمون.', 'speakerIdentificationDesc': - 'سيدعم نسخ الصوت تمييز المتحدثين، مما يعيد محتوى الاجتماعات أو المكالمات الهاتفية بشكل أكثر سهولة. وفي الوقت نفسه، سيكون الملخص أكثر دقة.', + 'سيدعم النسخ الصوتي تمييز المتحدثين، واستعادة محتوى الاجتماع أو المكالمة الهاتفية بشكل أكثر بديهية. في الوقت نفسه، سيكون الملخص أكثر دقة.', 'privateCloudSyncDesc': - 'سيتم تخزين بياناتك مثل التسجيلات والنسخ بأمان في خادم سحابي مخصص، مع تشفير كامل أثناء التحميل والتنزيل لضمان أمان الخصوصية.', + 'سيتم تخزين تسجيلاتك ونسخك بشكل آمن على خوادم سحابية مخصصة، سواء كان ذلك تحميلًا أو تنزيلًا، مشفرة بالكامل لضمان الخصوصية والأمان.', 'aiVoiceEnhancementDesc': - 'يدعم تحسين الصوت بالذكاء الاصطناعي إعدادات تقليل الضوضاء متعددة المستويات، ويزيل ضوضاء الخلفية بذكاء، ويعزز وضوح الكلام، ويحسن تأثير تشغيل الصوت.', + 'يدعم تحسين الصوت بالذكاء الاصطناعي إعدادات تقليل الضوضاء المتعددة، ويزيل ضوضاء الخلفية بذكاء، ويعزز وضوح الصوت، ويحسن تأثير تشغيل الصوت.', 'audioImportDesc': - 'يمكنك بسهولة استيراد ملفات الصوت من التطبيقات المحلية أو تطبيقات الطرف الثالث، مثل المذكرات الصوتية و Google Drive.', + 'يمكنك استيراد ملفات الصوت بسهولة من التطبيقات المحلية أو التابعة لجهات خارجية، مثل المذكرات الصوتية، Google Drive، إلخ.', 'multipleExportFormatsDesc': - 'صدّر تسجيلاتك الصوتية ونصوص النسخ والملخصات بتنسيقات مختلفة (TXT، PDF، JPEG) لتلبية احتياجاتك.', + 'تصدير تسجيلاتك الصوتية، نصوص النسخ والملخصات بتنسيقات مختلفة (TXT، PDF، JPEG) لتلبية احتياجاتك.', // Meeting模块 - 升级会员 - 'upgradeMembership': 'قم بترقية عضويتك', + 'upgradeMembership': 'ترقية عضويتك', 'yearlySubscription': 'اشتراك سنوي', 'monthlySubscription': 'اشتراك شهري', 'proMonthly': 'Pro ¥60/شهر', @@ -310,21 +515,21 @@ const Map arSA = { 'unlimitedMonthlyDesc': 'تجربة مجانية لمدة 7 أيام، ثم ¥1600/سنة. يمكنك الإلغاء في أي وقت قبل انتهاء الفترة التجريبية.', 'trialNote': - '*تجربة مجانية لمدة 7 أيام، ثم تتم المحاسبة سنويًا، يمكنك الإلغاء في أي وقت.', + '*تجربة مجانية لمدة 7 أيام، ثم يتم تحصيل الرسوم سنويًا، يمكنك الإلغاء في أي وقت.', 'proPrice': 'Pro ¥120', 'proMonthlyPrice': '¥120/شهر', 'subscribe': 'اشتراك', 'unlimitedPrice': 'Unlimited ¥198', 'unlimitedMonthlyPrice': '¥198/شهر', 'upgradeNote': - '*بعد ترقية اشتراكك، سيتم حساب فرق سعر الأيام المتبقية من اشتراكك الأصلي تلقائيًا وإعادته إلى حساب الدفع الخاص بك', + '*بعد ترقية الاشتراك، سيتم حساب الأيام المتبقية من الاشتراك الأصلي تلقائيًا ورد الفرق إلى حساب الدفع الخاص بك', 'buyMoreTranscriptionTime': 'شراء المزيد من وقت النسخ', 'sixThousandMinutes': '6,000 دقيقة', 'threeThousandMinutes': '3,000 دقيقة', 'sixHundredMinutes': '600 دقيقة', 'oneHundredTwentyMinutes': '120 دقيقة', - 'validityPeriod': '*فترة الصلاحية:', - 'validityNote': 'يتم التفعيل فور الشراء، وصالح لمدة عامين بعد التفعيل.', + 'validityPeriod': '*فترة الصلاحية: ', + 'validityNote': 'يتم التفعيل فور الشراء، صالح لمدة عامين بعد التفعيل.', 'purchase': 'شراء', // Meeting模块 - 模版和生成 @@ -334,19 +539,19 @@ const Map arSA = { 'viewAll': 'عرض الكل', 'recordingLanguage': 'لغة التسجيل', 'chineseSimplified': 'الصينية الماندرين (المبسطة)', - 'meetingGenerateNow': 'أنشئ الآن', - 'keyEventsAnalyzed': 'تم تحليل {count} حدثًا رئيسيًا.', + 'meetingGenerateNow': 'إنشاء الآن', + 'keyEventsAnalyzed': 'تم تحليل {count} حدث رئيسي.', 'aiAnalysisDesc': - 'يحدد تحليل الذكاء الاصطناعي الأحداث الرئيسية في التسجيل، مما يتيح لك تحديد الأحداث المهمة لإنشاء الذكاء الاصطناعي.', + 'يحدد تحليل الذكاء الاصطناعي الأحداث الرئيسية في التسجيلات، مما يتيح لك اختيار الأحداث المهمة لإنشاء الذكاء الاصطناعي.', // Meeting模块 - 文件操作和状态 'importing': 'جاري الاستيراد...', - 'batchImporting': 'جاري الاستيراد دفعة واحدة...', + 'batchImporting': 'جاري الاستيراد المجمع...', 'importingLocalRecordings': 'جاري استيراد التسجيلات المحلية...', - 'importFailed': 'فشل استيراد الملف: {filePath}, خطأ: {error}', - 'importSuccess': 'تم استيراد {count} تسجيلات محلية بنجاح', + 'importFailed': 'فشل استيراد الملف: {filePath}, error: {error}', + 'importSuccess': 'تم استيراد {count} تسجيل محلي بنجاح', 'importError': 'فشل الاستيراد: {error}', - 'pleaseSelectAudioFile': 'يرجى تحديد ملف صوتي', + 'pleaseSelectAudioFile': 'يرجى اختيار ملف صوتي', 'shareAudio': 'مشاركة صوت الاجتماع', 'shareComplete': 'اكتملت المشاركة!', 'shareFailed': 'فشلت المشاركة: {error}', @@ -358,17 +563,17 @@ const Map arSA = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'تخزين', 'meetingStoragePermissionExplanation': - 'نحتاج إلى إذن الوصول إلى التخزين حتى تتمكن من تحديد وتحميل الملفات الصوتية.', + 'نحتاج إلى الوصول إلى إذن التخزين حتى تتمكن من اختيار وتحميل ملفات الصوت.', 'meetingStoragePermissionPermanentDenial': - 'تم اكتشاف أنك رفضت إذن التخزين بشكل دائم. للمتابعة في استخدام هذه الميزة، يرجى الانتقال إلى إعدادات التطبيق وتمكين إذن التخزين يدويًا.', + 'تم اكتشاف أنك رفضت إذن التخزين بشكل دائم. للمتابعة في استخدام هذه الميزة، يرجى الانتقال إلى إعدادات التطبيق لتمكين إذن التخزين يدويًا.', // Meeting模块 - 思维导图相关 'shareMindMap': 'مشاركة الخريطة الذهنية', 'shareSuccess': 'تمت المشاركة بنجاح', // Meeting模块 - AI相关 - 'askAI': 'اسأل الذكاء الاصطناعي...', - 'askAIPrompt': 'بماذا يمكنني مساعدتك اليوم؟', + 'askAI': 'اسأل AI ...', + 'askAIPrompt': 'ما الذي يمكنني مساعدتك به اليوم؟', 'continueAsk': 'متابعة السؤال', 'todoList': 'قائمة المهام', 'extractConclusion': 'استخلاص النتائج', @@ -379,9 +584,17 @@ const Map arSA = { // Meeting模块 - 录音语言相关 'recordLanguage': 'لغة التسجيل', + // 'chinese': '中文普通话(简体)', 'cantonese': 'الكانتونية', - 'sichuan': 'السيتشوانية', - 'shanghai': 'الشنغهاينية', + 'sichuan': 'لهجة سيتشوان', + 'shanghai': 'لهجة شنغهاي', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', // Meeting模块 - 分享相关 'shareLink': 'مشاركة الرابط', @@ -400,63 +613,67 @@ const Map arSA = { 'applyToCurrentParagraph': 'تطبيق على الفقرة الحالية', 'totalTime': 'الإجمالي', 'summarySpeakerWillBeUpdatedAutomatically': - 'سيتم تحديث المتحدث في الملخص تلقائيًا', + 'سيتم تحديث متحدثي الملخص تلقائيًا', // Meeting模块 - 云端同步相关 'syncToCloud': 'مزامنة إلى السحابة', 'syncToCloudTip': - 'قم بمزامنة تسجيلاتك تلقائيًا إلى السحابة، ويمكنك تشغيلها وإدارتها ومشاركتها عبر أي تطبيق VOITRANS أو VOITRANS Web (web.voitrans.com).', + 'مزامنة تسجيلاتك تلقائيًا إلى السحابة، يمكنك تشغيل وإدارة ومشاركة التسجيلات عبر أي تطبيق VOITRANS أو VOITRANS Web (web.voitrans.com).', 'syncToVoitransApp': 'مزامنة تطبيق VOITRANS', 'transcriptionRecord': 'سجل النسخ', // Meeting模块 - 总结页面相关 'dateAndTime': 'التاريخ والوقت', 'location': 'الموقع', - 'attendees': 'الحضور', - 'inputLocation': 'أدخل الموقع', - 'inputAttendees': 'أدخل الحضور', + 'attendees': 'الحاضرين', + 'inputLocation': 'إدخال الموقع', + 'inputAttendees': 'إدخال الحاضرين', // 设置页 - "systemSettings": "إعدادات النظام", //系统设置 - "vipRecharge": "إعادة صيغ العضوية", //会员充值 - "aiRecharge": "عضو مميز", //AI充值 - "translationRecharge": "إعادة صيغ الترجمة", //翻译充值 - "meetingAssistantRecharge": "إعادة صيغ الاجتماع", //会议助手充值 - "cloudSync": "إعادة صيغ مزامنة السحابة", //云端同步 + "systemSettings": "إعدادات النظام", + "vipRecharge": "شحن العضوية", + "aiRecharge": "شحن AI", + "translationRecharge": "شحن الترجمة", + "meetingAssistantRecharge": "شحن الاجتماع", + "cloudSync": "مزامنة سحابية", + "memberService": "خدمة الأعضاء", + "bindRewardTitle": "مكافأة", + "bindRewardSimpleDesc": + "تم إصدار مكافأة ربط الجهاز لأول مرة، انقر فوق موافق للإغلاق", "joinDevice": "الجهاز المتصل:", "accountId": "معرف الحساب:", "systemSetting": "إعدادات النظام", "languageSetting": "إعدادات اللغة", "darkMode": "الوضع الداكن", - "darkModeInfo": "تبديل المظهر الفاتح والداكن للتطبيق", + "darkModeInfo": "تبديل سمة التطبيق الفاتحة/الداكنة", "backups": "النسخ الاحتياطي والاستعادة", - "backupsInfo": "نسخ احتياطي للإعدادات وسجل تفاعلات الذكاء الاصطناعي", + "backupsInfo": "إعدادات النسخ الاحتياطي وسجل تفاعل AI", "lastBackup": "آخر نسخ احتياطي:", "privacySettings": "إعدادات الخصوصية", "privacySettingsInfo": "إدارة جمع البيانات والأذونات", - "permissionManagement": "إدارة الأذونات", - "permissionManagementInfo": "إدارة إعدادات أذونات التطبيق", + "permissionManagement": "إدارة الأذونات", // 权限管理 + "permissionManagementInfo": "إدارة إعدادات أذونات التطبيق", // 管理应用权限设置 "aboutApplication": "حول التطبيق", "versions": "الإصدار", "checkUpdates": "التحقق من التحديثات", "selectLanguage": "اختر اللغة", - "voiceService": "خدمة الصوت", - "voiceServiceInfo": "اختر خدمات التعرف على الكلام وتوليفه", - "selectVoiceService": "اختر خدمة الصوت", - "azureVoiceService": "خدمة Azure الصوتية", + "voiceService": "الخدمة الصوتية", + "voiceServiceInfo": "اختر خدمة التعرف على الصوت وتوليفه", + "selectVoiceService": "اختر الخدمة الصوتية", + "azureVoiceService": "خدمة صوت Azure", "azureVoiceServiceInfo": - "خدمة صوتية سحابية من Microsoft، تدعم توليف الكلام والتعرف عليه بجودة عالية", - "flutterVoiceService": "خدمة Flutter الصوتية المحلية", + "خدمة مايكروسوفت السحابية الصوتية، تدعم توليف والتعرف على الصوت بجودة عالية", + "flutterVoiceService": "خدمة صوت Flutter المحلية", "flutterVoiceServiceInfo": - "خدمة صوتية محلية على الجهاز، يمكن استخدامها بدون اتصال بالإنترنت", - 'timbreService': 'خدمة النبرة', - 'timbreServiceInfo': 'اختر خدمة توليف الكلام بالنبرة', - 'defaultTimbre': 'النبرة الافتراضية', - 'microsoftCloudTimbreService': 'خدمة النبرة السحابية من Microsoft', + "خدمة صوت محلية للجهاز، لا تحتاج إلى اتصال بالإنترنت للاستخدام", + 'timbreService': 'خدمة النغمة', + 'timbreServiceInfo': 'اختر خدمة توليف النغمة الصوتية', + 'defaultTimbre': 'النغمة الافتراضية', + 'microsoftCloudTimbreService': 'خدمة نغمة مايكروسوفت السحابية', 'voiceClone': 'استنساخ الصوت', - 'AIsettings': 'إعدادات الذكاء الاصطناعي', - 'selecttimbre': 'اختر النبرة', - 'pleaseRead': 'يرجى القراءة بصوت عالٍ', + 'AIsettings': 'إعدادات AI', + 'selecttimbre': 'اختر النغمة', + 'pleaseRead': 'يرجى القراءة', 'completeRecording': 'إكمال التسجيل', "firmwareUpgrade": "ترقية البرنامج الثابت", "bleHeadsetFirmwareUpgrade": "ترقية إصدار البرنامج الثابت لسماعة BLE", @@ -465,19 +682,19 @@ const Map arSA = { //设置setting_controller // 版本更新相关 - 'currentLatestVersion': 'هذا هو أحدث إصدار حاليًا {version}', - 'checkUpdateFailed': 'فشل التحقق من التحديثات', - 'networkErrorRetry': 'خطأ في الشبكة، يرجى المحاولة مرة أخرى لاحقًا', + 'currentLatestVersion': 'الإصدار الحالي هو الأحدث {version}', + 'checkUpdateFailed': 'فشل التحقق من التحديث', + 'networkErrorRetry': 'خطأ في الشبكة، يرجى المحاولة لاحقًا', - // 设备管理相关 - // 'clearPairedDevices': 'مسح الأجهزة المقترنة', - // 'clearPairedDevicesConfirm': 'هل أنت متأكد من أنك تريد مسح جميع الأجهزة المقترنة؟', - // 'clearPairedDevicesSuccess': 'تم مسح الأجهزة المقترنة بنجاح', - // 'clearPairedDevicesFailed': 'فشل مسح الأجهزة المقترنة', +// 设备管理相关 + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "محادثة صوتية في الوقت الفعلي", - "realtimeVoiceChatInfo": "تجربة وظيفة التفاعل الصوتي الذكي (معاينة الميزة)", + "realtimeVoiceChatInfo": "تجرية وظيفة التفاعل الصوتي الذكي (معاينة)", "loading": "جاري التحميل...", //设备管理页面 @@ -486,79 +703,81 @@ const Map arSA = { "deviceTypeBleBluetoothHeadset": "سماعة بلوتوث BLE", "deviceTypeSmartVoiceRecorder": "مسجل صوت ذكي", "deviceTypeSmartEye": "نظارات ذكية", - "unbind": "إلغاء الربط", - "noDevicesBound": "لا توجد أجهزة مرتبطة بعد", - "pleaseBindDeviceFirst": "يرجى ربط جهاز أولاً قبل الإدارة", + "unbind": "فك الارتباط", + "noDevicesBound": "لم يتم ربط أي أجهزة بعد", + "pleaseBindDeviceFirst": "يرجى ربط جهاز أولاً للإدارة", "noMacAddress": "لا يوجد عنوان MAC", "licenseCode": "رمز الترخيص", - "confirmUnbind": "تأكيد إلغاء الربط", + "confirmUnbind": "تأكيد فك الارتباط", "confirmUnbindMessage": - "هل أنت متأكد من أنك تريد إلغاء ربط الجهاز \"{deviceName}\"؟", - "confirmUnbindAction": "تأكيد إلغاء الربط", + "هل أنت متأكد من أنك تريد فك ارتباط الجهاز \"{deviceName}\"؟", + "confirmUnbindAction": "تأكيد فك الارتباط", - //Agent 模块 +//Agent 模块 // agent View "Lily": "Lily", "clearChatHistory": "مسح سجل الدردشة", "online": "متصل", "inputMessage": "أدخل رسالة...", "imListening": "أنا أستمع...", - "canStartTalking": "يمكنك البدء في التحدث", - "addQuestionAboutImage": "أضف سؤالاً أو وصفًا للصورة...", + "canStartTalking": "يمكنك بدء التحدث", + "addQuestionAboutImage": "إضافة سؤال أو وصف للصورة...", "summarizeImageContent": "تلخيص محتوى الصورة", - "extractImageText": "استخراج النص من الصورة", - "translateImageText": "ترجمة النص من الصورة", + "extractImageText": "استخراج نص الصورة", + "translateImageText": "ترجمة نص الصورة", "recording": "جاري التسجيل...", - "holdToSpeak": "اضغط مطولاً للتحدث", + "holdToSpeak": "اضغط للتحدث", "takePhoto": "التقاط صورة", "photoAlbum": "ألبوم الصور", "makeCall": "إجراء مكالمة", - "aiVoiceCall": "مكالمة صوتية بالذكاء الاصطناعي", - "inCall": "جاري الاتصال...", - "aiReplying": "الذكاء الاصطناعي يجيب...", + "aiVoiceCall": "مكالمة صوتية AI", + "inCall": "في مكالمة...", + "aiReplying": "AI يرد...", "waitingToStart": "في انتظار البدء...", "clickToStartCall": "انقر لبدء المكالمة", "listeningToYou": "أستمع إليك...", "processing": "جاري المعالجة...", "loadMoreMessages": "تحميل المزيد من الرسائل...", - "loadFailedClickRetry": "فشل التحميل، انقر لإعادة المحاولة", - "swipeUpForMore": "اسحب لأعلى للمزيد", + "loadFailedClickRetry": "فشل التحميل، انقر للمحاولة مرة أخرى", + "swipeUpForMore": "اسحب للأعلى لرؤية المزيد", + "callingTool": "أنا أساعدك، يرجى الانتظار!", // 正在帮您,请稍等! + "voice_interrupt": "مقاطعة صوتية", // 语音打断 // 预设提示词 - "presetMusic": "شغل بعض الموسيقى", - "presetNavigation": "اذهب إلى", - "presetWeather": "طقس اليوم", - "presetNews": "أخبار اليوم", - "presetFood": "طعام قريب", - "playSomeMusic": "شغل بعض موسيقى البوب", - "navigationTo": "يرجى مساعدتي في التنقل إلى", - "todayWeather": "كيف هو طقس اليوم؟", - "todayNews": "ما هي أخبار اليوم؟", - "nearbyFood": "ما هي الأطعمة الجيدة القريبة؟", + "presetMusic": "شغل بعض الموسيقى", // 来点音乐 + "presetNavigation": "ملاحة إلى", // 导航 + "presetWeather": "طقس اليوم", // 今日天气 + "presetNews": "أخبار اليوم", // 今日新闻 + "presetFood": "طعام قريب", // 美食 + "playSomeMusic": "شغل بعض الموسيقى الشعبية", // 播放一些流行音乐 + "navigationTo": "ساعدني في الملاحة إلى", // 导航到 + "todayWeather": "كيف هو الطقس اليوم؟", // 今日天气 + "todayNews": "ما هي الأخبار اليوم؟", // 今日新闻 + "nearbyFood": "ما هي الأطعمة اللذيذة القريبة؟", // 美食 // Agent controller - 'welcomeMessage': 'مرحباً! أنا **شياو يان**، يمكنني مساعدتك في:\n\n' - '• الإجابة على الأسئلة وتقديم المعلومات\n\n' - '• الترجمة الصوتية الفورية\n\n' - '• التوصية بالموسيقى والبودكاست\n\n' - '• المذكرات الصوتية والتذكيرات\n\n' + 'welcomeMessage': 'مرحبًا! أنا **Lily**، يمكنني مساعدتك في:\n\n' + '• الإجابة على الأسئلة وتوفير المعلومات\n\n' + '• ترجمة صوتية في الوقت الفعلي\n\n' + '• توصية الموسيقى والبودكاست\n\n' + '• مذكرات صوتية وتذكيرات\n\n' '• التحكم في وظائف سماعة الرأس\n\n' 'هل هناك أي شيء يمكنني مساعدتك به؟', 'microphonePermission': 'ميكروفون', 'voiceRecognitionPermissionText': - 'تتطلب وظيفة التعرف على الصوت الوصول إلى الميكروفون.', + 'تحتاج وظيفة التعرف على الصوت إلى الوصول إلى الميكروفون.', 'voiceTranslationPermissionText': - 'تتطلب وظيفة التعرف على الصوت والترجمة الوصول إلى الميكروفون.', + 'تحتاج وظائف التعرف على الصوت والترجمة إلى الوصول إلى الميكروفون.', 'phoneCallPermissionText': - 'تتطلب وظيفة إجراء المكالمات الوصول إلى الميكروفون للمكالمات الصوتية.', + 'تحتاج وظيفة الاتصال إلى الوصول إلى الميكروفون لإجراء المكالمات الصوتية.', 'permissionDeniedText': - 'لقد رفضت إذن الميكروفون بشكل دائم، يرجى الانتقال إلى إعدادات النظام لتمكينه.', + 'لقد رفضت إذن الميكروفون بشكل دائم، يرجى الانتقال إلى إعدادات النظام لتمكين الإذن.', 'startVoiceInput': 'بدء الإدخال الصوتي', - 'startPhoneCallMode': 'بدء وضع إجراء المكالمات، بدء الإدخال الصوتي', + 'startPhoneCallMode': 'بدء وضع الاتصال، بدء الإدخال الصوتي', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'اكتب رسالتك هنا...', - 'characterCount': '{count} حرفًا', + 'fullScreenEditorHint': 'أدخل رسالتك هنا...', // 全屏编辑器输入提示 + 'characterCount': '{count} حرف', // 字符计数显示 // 消息长按操作 'copy': 'نسخ', @@ -566,20 +785,21 @@ const Map arSA = { 'report': 'إبلاغ', 'submitSuccess': 'تم الإرسال بنجاح', 'submitFailed': 'فشل الإرسال', - 'reportSubmitted': 'تم إرسال البلاغ، وسنتعامل معه في أقرب وقت ممكن', + 'reportSubmitted': 'تم إرسال البلاغ، سنقوم بمعالجته في أقرب وقت ممكن', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'ضار/غير آمن', 'pornographicVulgar': 'إباحي/مبتذل', - 'misleadingAttack': 'مضلل/هجومي', + 'misleadingAttack': 'مضلل/هجوم', 'illegalCriminal': 'غير قانوني/إجرامي', 'privacyRelated': 'متعلق بالخصوصية', - 'copyrightViolation': - 'ينتهك حقوق الطبع والنشر الخاصة بي، أو حقوق السمعة، وما إلى ذلك.', + 'copyrightViolation': 'انتهاك حقوق النشر الخاصة بي، حقوق السمعة، إلخ', 'other': 'أخرى', 'reportDescriptionHint': - 'نريد أن نعرف سبب إبلاغك، يمكنك وصف المشكلة التي واجهتها.', + 'نود معرفة سبب إبلاغك، يمكنك وصف المشكلة التي واجهتها.', + //'submit': '提交', //Message_bubble - 'generatedByAi': 'تم إنشاؤه بواسطة الذكاء الاصطناعي', + 'generatedByAi': 'تم إنشاؤه بواسطة AI', //音乐卡片 music_card 'recommendedMusic': 'إليك بعض الموسيقى الموصى بها:', @@ -587,42 +807,42 @@ const Map arSA = { 'moreMusic': 'المزيد من الموسيقى', //导航卡片 navigation_card - 'kilometers': 'كيلومتر', - 'meters': 'متر', - 'hours': 'ساعات', - 'minutes': 'دقائق', - 'seconds': 'ثواني', - 'navigating': 'جاري التنقل', - 'currentLocation': 'الموقع الحالي', - 'approximate': 'تقريبًا', - 'enterRoad': 'دخول', + 'kilometers': 'كم', // 公里单位 + 'meters': 'م', // 米单位 + 'hours': 'ساعة', // 小时单位 + 'minutes': 'دقيقة', // 分钟单位 + 'seconds': 'ثانية', // 秒单位 + 'navigating': 'ملاحة', // 导航状态 + 'currentLocation': 'الموقع الحالي', // 当前位置 + 'approximate': 'تقريبًا', // 大约 + 'enterRoad': 'دخول', // 进入道路 "driving": "قيادة", "walking": "مشي", "bicycling": "ركوب الدراجات", "tsransit": "نقل عام", //天气卡片 weather_card - 'weatherQuery': 'الاستعلام عن أحوال الطقس:', + 'weatherQuery': 'استعلام عن الطقس:', 'highest': 'الأعلى', 'lowest': 'الأدنى', - 'futureForecast': 'توقعات مستقبلية', + 'futureForecast': 'التوقعات المستقبلية', 'hotWeatherTip': - 'اليوم حار، يرجى اتخاذ الاحتياطات اللازمة ضد ضربة الشمس وشرب الكثير من الماء', + 'الطقس حار اليوم، يرجى الانتباه للحماية من الحرارة والتبريد، وشرب المزيد من الماء لتجنب ضربة الشمس', 'coldWeatherTip': - 'درجة الحرارة منخفضة اليوم، يرجى الحفاظ على الدفء عند الخروج لتجنب نزلات البرد', + 'درجة الحرارة منخفضة اليوم، يرجى ارتداء ملابس دافئة عند الخروج، واحذر من نزلات البرد', 'rainyWeatherTip': - 'هناك أمطار اليوم، يرجى أخذ مظلة عند الخروج والانتباه لسلامة السفر', + 'يوجد مطر اليوم، يرجى حمل معدات المطر عند الخروج، والانتباه لسلامة السفر', 'snowyWeatherTip': - 'هناك ثلوج اليوم، الطريق زلق، يرجى الانتباه للسلامة واتخاذ تدابير الدفء', + 'يوجد ثلج اليوم، الطريق زلق يرجى الانتباه للسلامة، واتخاذ تدابير التدفئة', 'foggyWeatherTip': - 'هناك ضباب اليوم، الرؤية منخفضة، يرجى ارتداء قناع عند الخروج', + 'يوجد ضباب وضباب دخاني اليوم، الرؤية منخفضة، يرجى ارتداء قناع عند الخروج', 'windyWeatherTip': - 'الرياح قوية اليوم، يرجى الانتباه للسلامة وتأمين متعلقاتك عند الخروج', + 'الرياح قوية اليوم، يرجى الانتباه للسلامة عند الخروج، وتثبيت الأشياء', 'sunnyWeatherTip': - 'الشمس مشرقة اليوم والأشعة فوق البنفسجية قوية، يرجى استخدام واقي الشمس عند الخروج', + 'الشمس مشرقة اليوم والأشعة فوق البنفسجية قوية، يرجى اتخاذ تدابير الوقاية من الشمس عند الخروج', 'temperatureDifferenceTip': - 'فرق درجة الحرارة بين النهار والليل كبير اليوم، يرجى إضافة أو إزالة الملابس حسب الحاجة', - 'comfortableWeatherTip': 'الطقس لطيف اليوم، وهو وقت جيد للأنشطة الخارجية', + 'فرق درجة الحرارة بين النهار والليل كبير اليوم، يرجى تعديل الملابس في الوقت المناسب', + 'comfortableWeatherTip': 'الطقس مناسب اليوم، وهو وقت جيد للأنشطة الخارجية', "monday": "الاثنين", "tuesday": "الثلاثاء", "wednesday": "الأربعاء", @@ -630,64 +850,76 @@ const Map arSA = { "friday": "الجمعة", "saturday": "السبت", "sunday": "الأحد", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "تاريخ الانتهاء:", + "notActivated": "غير مفعل", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "مشمس", - "partlyCloudy": "غائم جزئيًا", - "partlySunny": "مشمس جزئيًا", + "partlyCloudy": "غائم جزئيا", + "partlySunny": "مشمس جزئيا", "cloudy": "غائم", "overcast": "ملبد بالغيوم", - "shower": "زخات مطر", - "thundershower": "عواصف رعدية", + "shower": "وابل", + "thundershower": "عاصفة رعدية", "lightRain": "مطر خفيف", "moderateRain": "مطر متوسط", "heavyRain": "مطر غزير", "rainstorm": "عاصفة مطرية", - "snowShower": "زخات ثلج", + "snowShower": "وابل ثلجي", "lightSnow": "ثلج خفيف", "moderateSnow": "ثلج متوسط", "heavySnow": "ثلج كثيف", "blizzard": "عاصفة ثلجية", "fog": "ضباب", - "haze": "ضباب دخاني", + "haze": "سديم", "strongWind": "رياح قوية", //编辑个人信息页 - "editProfile": "تعديل الملف الشخصي", - "avatar": "الصورة الرمزية", - "nickname": "اللقب", + "editProfile": "تعديل المعلومات الشخصية", + "avatar": "صورة رمزية", + "nickname": "لقب", "save": "حفظ", "about": "حول", "enterNickname": "يرجى إدخال لقب", - "notSet": "لم يتم التعيين", + "notSet": "غير محدد", "accountSetting": "إعدادات الحساب", "logout": "تسجيل الخروج", "logoutTips": "هل أنت متأكد من أنك تريد تسجيل الخروج من الحساب الحالي؟", 'deleteAccount': 'حذف الحساب', 'deleteAccountTips': - 'هل أنت متأكد من أنك تريد حذف حسابك بشكل دائم؟ هذا الإجراء لا يمكن التراجع عنه', - 'clean': 'مسح ذاكرة التخزين المؤقت', - 'cleanTips': 'هل أنت متأكد من أنك تريد مسح ذاكرة التخزين المؤقت الشخصية؟', + 'هل أنت متأكد من أنك تريد حذف حسابك نهائيًا؟ هذا الإجراء لا يمكن التراجع عنه', + 'clean': 'مسح الذاكرة المؤقتة', + 'cleanTips': 'هل أنت متأكد من أنك تريد مسح الذاكرة المؤقتة الشخصية؟', // Profile 错误信息 'networkConnectionFailed': 'فشل الاتصال بالشبكة، يرجى التحقق من إعدادات الشبكة والمحاولة مرة أخرى', 'serverTemporarilyUnavailable': - 'الخادم غير متاح مؤقتًا، يرجى المحاولة مرة أخرى لاحقًا', + 'الخادم غير متاح مؤقتًا، يرجى المحاولة لاحقًا', 'loginExpiredPleaseRelogin': 'انتهت صلاحية تسجيل الدخول، يرجى تسجيل الدخول مرة أخرى', - 'noPermissionForThisOperation': 'لا يوجد إذن لتنفيذ هذه العملية', + 'noPermissionForThisOperation': 'لا يوجد إذن لتنفيذ هذا الإجراء', 'requestedResourceNotFound': 'المورد المطلوب غير موجود', 'imageProcessingFailedPleaseReselect': - 'فشلت معالجة الصورة، يرجى إعادة تحديد الصورة', + 'فشلت معالجة الصورة، يرجى إعادة اختيار الصورة', 'operationFailedPleaseRetry': 'فشلت العملية، يرجى المحاولة مرة أخرى', - 'serverReturnedError': 'أرجع الخادم خطأ', + 'serverReturnedError': 'أعاد الخادم خطأ', 'serverError': 'خطأ في الخادم', 'networkConnectionFailedCheckSettings': 'فشل الاتصال بالشبكة، يرجى التحقق من إعدادات الشبكة', - 'serverInternalErrorRetryLater': - 'خطأ داخلي في الخادم، يرجى المحاولة مرة أخرى لاحقًا', + 'serverInternalErrorRetryLater': 'خطأ داخلي في الخادم، يرجى المحاولة لاحقًا', - // Profile 用户交互 +// Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'فشل ضغط الصورة', 'avatarUpdateFailed': 'فشل تحديث الصورة الرمزية', 'usernameCannotBeEmpty': 'لا يمكن أن يكون اسم المستخدم فارغًا', @@ -696,19 +928,21 @@ const Map arSA = { 'saveFailed': 'فشل الحفظ', 'loggedOut': 'تم تسجيل الخروج', 'logoutFailedRetry': 'فشل تسجيل الخروج، يرجى المحاولة مرة أخرى', - 'accountPermanentlyDeleted': 'تم حذف الحساب بشكل دائم', + 'accountPermanentlyDeleted': 'تم حذف الحساب نهائيًا', 'deleteAccountFailedRetry': 'فشل حذف الحساب، يرجى المحاولة مرة أخرى', // 账号服务相关 - 'clearUserDataFailed': 'فشل مسح بيانات المستخدم', - 'deleteUserDataFailed': 'فشل حذف بيانات المستخدم', - 'thirdPartyLogoutSuccess': 'تم تسجيل الخروج من الطرف الثالث بنجاح', - 'thirdPartyLogoutFailed': 'فشل تسجيل الخروج من الطرف الثالث', - 'signOutProcessError': 'حدث خطأ أثناء عملية تسجيل الخروج', - 'deleteAccountProcessError': 'حدث خطأ أثناء عملية حذف الحساب', - 'userDataClearSuccess': 'تم مسح بيانات المستخدم بنجاح', - 'allUserDataClearSuccess': 'تم مسح جميع بيانات المستخدم بنجاح', - 'accountServiceInitialized': 'تم تهيئة خدمة الحساب', + 'clearUserDataFailed': 'فشل تنظيف بيانات المستخدم', // 清理用户数据失败 + 'deleteUserDataFailed': 'فشل حذف بيانات المستخدم', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': + 'تم تسجيل الخروج من الطرف الثالث بنجاح', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'فشل تسجيل الخروج من الطرف الثالث', // 第三方登录退出失败 + 'signOutProcessError': 'حدث خطأ أثناء عملية تسجيل الخروج', // 登出过程发生错误 + 'deleteAccountProcessError': 'حدث خطأ أثناء عملية حذف الحساب', // 删除账号过程发生错误 + 'userDataClearSuccess': 'تم تنظيف بيانات المستخدم بنجاح', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'تم تنظيف جميع بيانات المستخدم بنجاح', // 所有用户数据清理成功 + 'accountServiceInitialized': 'تمت تهيئة خدمة الحساب', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'فشل الحصول على حالة الإذن', @@ -723,110 +957,112 @@ const Map arSA = { 'phone': 'هاتف', 'sms': 'رسائل قصيرة', 'contacts': 'جهات الاتصال', + //'bluetooth': '蓝牙', 'notification': 'إشعار', 'alarm': 'منبه', 'calendarWrite': 'كتابة التقويم', 'calendarFullAccess': 'الوصول الكامل للتقويم', 'locationInfo': 'معلومات الموقع', - 'phonePermissionDesc': 'يستخدم لوظيفة إجراء المكالمات', - 'smsPermissionDesc': 'يستخدم لوظيفة إرسال الرسائل القصيرة', + 'phonePermissionDesc': 'يستخدم لوظيفة الاتصال', + 'smsPermissionDesc': 'يستخدم لوظيفة الرسائل القصيرة', 'alarmPermissionDesc': - 'يستخدم لضبط المنبهات الدقيقة لضمان إطلاق التذكيرات في الوقت المحدد', + 'يستخدم لتعيين منبهات دقيقة لضمان انطلاق التذكيرات في الوقت المحدد', 'calendarWritePermissionDesc': 'يستخدم لإنشاء أحداث التقويم والتذكيرات', 'calendarFullAccessPermissionDesc': 'يستخدم لقراءة وإدارة أحداث التقويم والتذكيرات', - 'locationPermissionDesc': 'يستخدم للحصول على معلومات الموقع الحالية', - 'appFunctionNeeds': 'تحتاج وظيفة التطبيق', - 'authorized': 'مرخص', - 'unauthorized': 'غير مرخص', - 'needOpenInSystemSettings': 'يجب تمكينه في إعدادات النظام', - 'partialAuthorization': 'ترخيص جزئي', + 'locationPermissionDesc': 'يستخدم للحصول على معلومات الموقع الحالي', + 'appFunctionNeeds': 'وظيفة التطبيق تحتاج', + 'authorized': 'مفوض', + 'unauthorized': 'غير مفوض', + 'needOpenInSystemSettings': 'يجب فتحه في إعدادات النظام', + 'partialAuthorization': 'تفويض جزئي', 'unknownStatus': 'حالة غير معروفة', 'permissionGranted': 'تم منح الإذن', - 'permissionRequestError': 'خطأ أثناء طلب الإذن', - 'phonePermissionDetailDesc': 'تتطلب وظيفة إجراء المكالمات إذن الهاتف', + 'permissionRequestError': 'خطأ عند طلب الإذن', + 'phonePermissionDetailDesc': 'تحتاج وظيفة الاتصال إلى إذن الهاتف', 'smsPermissionDetailDesc': - 'تتطلب وظيفة إرسال الرسائل القصيرة إذن الرسائل القصيرة', + 'تحتاج وظيفة الرسائل القصيرة إلى إذن الرسائل القصيرة', 'alarmPermissionDetailDesc': - 'يتطلب ضبط المنبهات الدقيقة هذا الإذن لضمان إطلاق التذكيرات في الوقت المحدد', + 'مطلوب هذا الإذن لتعيين منبهات دقيقة وضمان انطلاق التذكيرات في الوقت المحدد', 'calendarWritePermissionDetailDesc': - 'يتطلب إنشاء أحداث التقويم إذن كتابة التقويم', + 'إنشاء أحداث التقويم يتطلب إذن كتابة التقويم', 'calendarFullAccessPermissionDetailDesc': - 'تتطلب إدارة أحداث التقويم إذن التقويم الكامل', - 'locationPermissionDetailDesc': 'يتطلب الحصول على معلومات الموقع إذن الموقع', + 'إدارة أحداث التقويم تتطلب إذن التقويم الكامل', + 'locationPermissionDetailDesc': 'الحصول على معلومات الموقع يتطلب إذن الموقع', 'contactsPermissionDesc': 'يستخدم للوصول إلى معلومات جهات الاتصال', 'contactsPermissionDetailDesc': - 'تتطلب وظائف إجراء المكالمات وإرسال الرسائل القصيرة إذن جهات الاتصال لتحديد جهات الاتصال', + 'وظائف المكالمات الهاتفية والرسائل القصيرة تتطلب إذن جهات الاتصال لاختيار جهات الاتصال', 'bluetoothPermissionDesc': 'يستخدم لتوصيل وإدارة أجهزة البلوتوث', 'bluetoothPermissionDetailDesc': - 'يتطلب توصيل أجهزة مثل سماعات البلوتوث إذن البلوتوث', + 'توصيل سماعات البلوتوث والأجهزة الأخرى يتطلب إذن البلوتوث', 'bluetoothScanPermissionDesc': 'يستخدم لمسح أجهزة البلوتوث القريبة', 'bluetoothScanPermissionDetailDesc': - 'يتطلب مسح أجهزة البلوتوث القريبة إذن مسح البلوتوث', - 'bluetoothConnectPermissionDesc': 'يستخدم لتوصيل أجهزة البلوتوث', + 'مسح أجهزة البلوتوث القريبة يتطلب إذن مسح البلوتوث', + 'bluetoothConnectPermissionDesc': 'يستخدم للاتصال بأجهزة البلوتوث', 'bluetoothConnectPermissionDetailDesc': - 'يتطلب توصيل أجهزة البلوتوث إذن اتصال البلوتوث', + 'الاتصال بأجهزة البلوتوث يتطلب إذن اتصال البلوتوث', 'notificationPermissionDesc': 'يستخدم لإرسال رسائل الإشعارات', 'notificationPermissionDetailDesc': - 'يحتاج التطبيق إلى إذن الإشعارات لإرسال تذكيرات ورسائل مهمة إليك', + 'يحتاج التطبيق إلى إذن الإشعارات لإرسال تنبيهات ورسائل مهمة لك', 'appNeedsPermissionForFullFunction': 'يحتاج التطبيق إلى هذا الإذن لتوفير وظائف كاملة', 'permanentDenialText': - 'لقد رفضت إذن {permission} بشكل دائم، يرجى الانتقال إلى إعدادات التطبيق لتمكينه', - 'goToSettings': 'اذهب إلى الإعدادات', + 'لقد رفضت إذن {permission} بشكل دائم، يرجى الانتقال إلى إعدادات التطبيق لفتحه', + 'goToSettings': 'الذهاب للإعدادات', // 权限申请 'bluetoothScan': 'مسح البلوتوث', 'bluetoothConnect': 'اتصال البلوتوث', 'bluetoothScanExplanation': - 'لمسح أجهزة البلوتوث القريبة، يحتاج التطبيق إلى الحصول على إذن مسح البلوتوث.', + 'يحتاج التطبيق إلى إذن مسح البلوتوث لمسح أجهزة البلوتوث القريبة.', 'bluetoothConnectExplanation': - 'لتوصيل أجهزة البلوتوث، يحتاج التطبيق إلى الحصول على إذن اتصال البلوتوث.', + 'يحتاج التطبيق إلى إذن اتصال البلوتوث للاتصال بأجهزة البلوتوث.', 'locationForBluetoothExplanation': - 'لمسح أجهزة البلوتوث، يحتاج التطبيق إلى الحصول على إذن معلومات الموقع.', + 'يحتاج التطبيق إلى إذن الموقع لمسح أجهزة البلوتوث.', 'bluetoothScanPermanentDenial': 'تم رفض إذن مسح البلوتوث بشكل دائم، يرجى الانتقال إلى الإعدادات لتمكينه يدويًا.', 'bluetoothConnectPermanentDenial': 'تم رفض إذن اتصال البلوتوث بشكل دائم، يرجى الانتقال إلى الإعدادات لتمكينه يدويًا.', 'locationPermanentDenial': - 'تم رفض إذن معلومات الموقع بشكل دائم، يرجى الانتقال إلى الإعدادات لتمكينه يدويًا.', + 'تم رفض إذن الموقع بشكل دائم، يرجى الانتقال إلى الإعدادات لتمكينه يدويًا.', 'notificationPermission': 'إشعار', - 'locationPermission': 'الموقع', + 'locationPermission': 'موقع', 'notificationPermissionExplanation': - 'مطلوب إذن الإشعار لعرض حالة تشغيل الموسيقى.', + 'مطلوب إذن الإشعارات لعرض حالة تشغيل الموسيقى.', 'locationPermissionExplanation': 'مطلوب إذن الموقع للحصول على الموقع الحالي.', 'notificationPermissionPermanentDenial': - 'لقد رفضت إذن الإشعار بشكل دائم، يرجى الانتقال إلى الإعدادات لتمكين الإذن.', + 'لقد رفضت إذن الإشعارات بشكل دائم، يرجى الانتقال إلى الإعدادات لتمكينه.', 'locationPermissionPermanentDenial': - 'لقد رفضت إذن الموقع بشكل دائم، يرجى الانتقال إلى الإعدادات لتمكين الإذن.', + 'لقد رفضت إذن الموقع بشكل دائم، يرجى الانتقال إلى الإعدادات لتمكينه.', +//'microphonePermission': '录音', 'storagePermission': 'تخزين', 'microphonePermissionExplanation': - 'نحتاج إلى الوصول إلى إذن الميكروفون حتى تتمكن من تسجيل محتوى صوتي.', + 'نحن بحاجة إلى إذن الميكروفون لتسجيل المحتوى الصوتي.', 'storagePermissionExplanation': - 'نحتاج إلى الوصول إلى إذن التخزين حتى تتمكن من تحديد وتحميل الملفات الصوتية.', + 'نحن بحاجة إلى إذن التخزين حتى تتمكن من اختيار وتحميل ملفات الصوت.', 'microphonePermissionPermanentDenial': - 'تم اكتشاف أنك رفضت إذن التسجيل بشكل دائم. للمتابعة في استخدام هذه الميزة، يرجى الانتقال إلى إعدادات التطبيق وتمكين إذن الميكروفون يدويًا.', + 'تم اكتشاف أنك رفضت إذن التسجيل بشكل دائم. للمتابعة في استخدام هذه الميزة، يرجى الانتقال إلى إعدادات التطبيق لتمكين إذن الميكروفون يدويًا.', 'storagePermissionPermanentDenial': - 'تم اكتشاف أنك رفضت إذن التخزين بشكل دائم. للمتابعة في استخدام هذه الميزة، يرجى الانتقال إلى إعدادات التطبيق وتمكين إذن التخزين يدويًا.', + 'تم اكتشاف أنك رفضت إذن التخزين بشكل دائم. للمتابعة في استخدام هذه الميزة، يرجى الانتقال إلى إعدادات التطبيق لتمكين إذن التخزين يدويًا.', //permission_util.dart - 'permissionUtilNeed': 'بحاجة إلى', - 'permissionUtilPermission': 'إذن', - 'permissionUtilRestricted': 'الإذن مقيد', + 'permissionUtilNeed': 'يحتاج ', + 'permissionUtilPermission': ' إذن', + 'permissionUtilRestricted': ' الإذن مقيد', 'permissionUtilRestrictedMessage': 'هذه الميزة غير متوفرة أو مقيدة على الجهاز الحالي، يرجى التحقق من إعدادات الجهاز أو قيود النظام', 'permissionUtilConfirm': 'تأكيد', // 版本更新对话框 - 'newVersionFound': 'تم العثور على إصدار جديد', - 'remindLater': 'تذكير لاحقًا', - 'updateNow': 'تحديث الآن', - 'checkUpdate': 'التحقق من التحديثات', - 'updateFailed': 'فشل التحديث', + 'newVersionFound': 'تم العثور على إصدار جديد', // 版本更新对话框标题 + 'remindLater': 'تذكير لاحقًا', // 稍后提醒按钮 + 'updateNow': 'تحديث الآن', // 立即更新按钮 + 'checkUpdate': 'التحقق من التحديث', // 检查更新按钮 + 'updateFailed': 'فشل التحديث', // 更新失败提示 'cannotOpenAppStore': - 'لا يمكن فتح متجر التطبيقات، يرجى الانتقال يدويًا إلى متجر التطبيقات للتحديث', + 'لا يمكن فتح متجر التطبيقات، يرجى الانتقال يدويًا إلى متجر التطبيقات للتحديث', // 无法打开应用商店提示 'updateErrorRetry': - 'حدث خطأ أثناء عملية التحديث، يرجى المحاولة مرة أخرى لاحقًا', + 'حدث خطأ أثناء عملية التحديث، يرجى المحاولة لاحقًا', // 更新错误重试提示 //国家列表 "邮箱": "البريد الإلكتروني", @@ -858,9 +1094,9 @@ const Map arSA = { "阿根廷": "الأرجنتين", "澳大利亚": "أستراليا", "新西兰": "نيوزيلندا", - "中国香港": "هونغ كونغ الصينية", - "中国澳门": "ماكاو الصينية", - "中国台湾": "تايوان الصينية", + "中国香港": "هونغ كونغ، الصين", + "中国澳门": "ماكاو، الصين", + "中国台湾": "تايوان، الصين", "埃及": "مصر", "希腊": "اليونان", "荷兰": "هولندا", @@ -869,7 +1105,7 @@ const Map arSA = { "罗马尼亚": "رومانيا", "瑞士": "سويسرا", "奥地利": "النمسا", - "丹麦": "الدنمارك", + "丹麦": "الدانمرك", "瑞典": "السويد", "挪威": "النرويج", "波兰": "بولندا", @@ -893,7 +1129,7 @@ const Map arSA = { "塞尔维亚": "صربيا", "克罗地亚": "كرواتيا", "斯洛文尼亚": "سلوفينيا", - "捷克": "التشيك", + "捷克": "جمهورية التشيك", "斯洛伐克": "سلوفاكيا", "危地马拉": "غواتيمالا", "萨尔瓦多": "السلفادور", @@ -935,19 +1171,49 @@ const Map arSA = { "东帝汶": "تيمور الشرقية", "斐济": "فيجي", "所罗门群岛": "جزر سليمان", + "刚果民主共和国": "جمهورية الكونغو الديمقراطية", + "安哥拉": "أنغولا", + "苏丹": "السودان", + "马尔代夫": "المالديف", + "不丹": "بوتان", + "摩纳哥": "موناكو", + "圣马力诺": "سان مارينو", + "牙买加": "جامايكا", + "巴哈马": "جزر البهاما", + "巴布亚新几内亚": "بابوا غينيا الجديدة", + "萨摩亚": "ساموا", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "ترجمة الصور", + "textTranslation": "ترجمة النصوص", + // 翻译主页 (translation_view.dart) "translationHistory": "سجل الترجمة", - "enableRecording": "هل تريد تمكين التسجيل؟", + "enableRecording": "هل تريد تمكين التسجيل", "viewAudioFiles": "عرض ملفات التسجيل", "headsetUser": "مستخدم سماعة الرأس", "phoneUser": "مستخدم الهاتف", "selectSourceLanguage": "اختر اللغة المصدر", "selectTargetLanguage": "اختر اللغة الهدف", - - // 翻译历史页 (translation_history_view.dart) - "noTranslationHistory": "لا يوجد سجل حتى الآن", + "me": "أنا", + "counterPart": "الطرف الآخر", + "bluetoothCallStateError": + "يرجى التأكد من توصيل سماعة البلوتوث بالهاتف وفي حالة الاتصال", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "كشف تلقائي", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "فشل اكتشاف اللغة", + "translationFailed": "فشلت الترجمة", + "pleaseInputText": "يرجى إدخال النص", + "textTooLong": "النص طويل جدًا، بحد أقصى 5000 حرف", + + // 翻译历史页 + "noTranslationHistory": "لا يوجد سجل تاريخي", + "historyRecords": "السجلات التاريخية", + "clearResults": "مسح النتائج", "clearHistory": "مسح السجل", "clearHistoryConfirm": "هل أنت متأكد من أنك تريد مسح كل سجل الترجمة؟ هذا الإجراء لا يمكن التراجع عنه.", @@ -956,9 +1222,59 @@ const Map arSA = { "deleteSessionConfirm": "هل أنت متأكد من أنك تريد حذف جميع سجلات الترجمة لهذه الجلسة؟ هذا الإجراء لا يمكن التراجع عنه.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "اختر مصدر الصورة", + "imagePreview": "معاينة الصورة", + "translationResult": "نتيجة الترجمة", + "recognitionResult": "نتيجة التعرف", + "translatedImagePreview": "معاينة الصورة المترجمة", + "translatedImageLoadFailed": "فشل تحميل الصورة المترجمة", + "pleaseSelectImage": "يرجى اختيار صورة", + "imageLoadFailed": "فشل تحميل الصورة", + "imageQuality": "جودة الصورة", + "maxSize": "الحجم الأقصى", + "close": "إغلاق", + "setImageQuality": "تعيين جودة الصورة", + "currentQuality": "الجودة الحالية: @value%", + "setMaxSize": "تعيين الحجم الأقصى", + "currentMaxSize": "الحالي: @pxpx", + "waitingForAction": "في انتظار الإجراء", + "pleaseSelectImageToStart": "يرجى اختيار صورة للبدء", + "chooseImage": "اختر صورة", + "openingCamera": "جاري فتح الكاميرا...", + "openingPhotoAlbum": "جاري فتح ألبوم الصور...", + "cancelled": "تم الإلغاء", + "userCancelledSelection": "ألغى المستخدم الاختيار", + "translatingImage": "جاري ترجمة الصورة", + "callingImageTranslateService": "جاري استدعاء خدمة ترجمة الصور...", + "savingRecord": "جاري حفظ السجل", + "savingTranslationResult": "جاري حفظ نتيجة الترجمة...", + "translationCompleted": "اكتملت الترجمة", + "allStepsCompleted": "اكتملت جميع الخطوات", + "processingFailed": "فشلت المعالجة", + "imageProcessingOrTranslationFailed": + "فشلت معالجة الصورة أو الترجمة، يرجى إعادة المحاولة.\nمعلومات الخطأ: {error}", + "imageTooLarge": "حجم الصورة يتجاوز حد 4 ميجابايت", + "imageTooLargeHint": + "حجم الصورة يتجاوز حد 4 ميجابايت، يرجى تقليل الجودة أو الحجم والمحاولة مرة أخرى", + "emptyTranslationResult": "أعادت واجهة ترجمة الصور نتيجة فارغة", + "imageTranslationFailedTryLater": + "فشلت ترجمة الصورة، الأسباب المحتملة: شذوذ في الشبكة أو تحديد معدل الواجهة، يرجى المحاولة لاحقًا", + "imageTranslationApiException": + "استثناء في استدعاء واجهة ترجمة الصور، يرجى التحقق من الشبكة والمحاولة مرة أخرى", + "permissionRequired": "متطلبات الإذن", + "cameraPermissionRequired": "تحتاج إلى إذن الكاميرا لالتقاط الصور", + "photoAlbumPermissionRequired": "تحتاج إلى إذن الألبوم لاختيار الصور", + "translationDetails": "تفاصيل الترجمة", + "originalImage": "الصورة الأصلية", + "sourceLanguage": "اللغة المصدر", + "targetLanguage": "اللغة الهدف", + "translationTime": "وقت الترجمة", + "shareInDevelopment": "وظيفة المشاركة قيد التطوير", + + // 翻译录音文件列表页 "translateAudioFiles": "ترجمة ملفات التسجيل", - "noAudioFiles": "لا توجد ملفات صوتية حتى الآن", + "noAudioFiles": "لا توجد ملفات صوتية", "calculating": "جاري الحساب...", "playing": "جاري التشغيل...", "paused": "متوقف مؤقتًا", @@ -1001,7 +1317,7 @@ const Map arSA = { "autoInputCode": "إدخال الرمز تلقائيًا", "skipBinding": "تخطي الربط", "rescan": "إعادة المسح", - "skip": "تخطي", + "verifyingDevice": "جاري التحقق من الجهاز...", "confirmBinding": "تأكيد الربط", "associatingDevice": "جاري ربط الجهاز...", @@ -1020,7 +1336,8 @@ const Map arSA = { "نجح الاقتران! سيتم التوجيه إلى الصفحة الرئيسية قريبًا...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "يرجى التأكد من توصيل جهاز Voitrans", + "ensureConnectedDeepSoundDevice": + "الجهاز المستخدم حاليًا: %s، يرجى التأكد من توصيل جهاز يدعمه Voitrans", "deviceAlreadyBoundToOtherAccount": "هذا الجهاز مرتبط بالفعل بحساب آخر", "deviceAssociationFailed": "فشل ارتباط الجهاز، يرجى المحاولة مرة أخرى", "scanTimeoutEnsureDeviceNearby": @@ -1030,12 +1347,17 @@ const Map arSA = { "pairingFailedRetry": "فشل الاقتران، يرجى المحاولة مرة أخرى", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'يرجى تمكين البلوتوث', 'deviceDisconnected': 'تم فصل الجهاز', 'readyToStartPairing': 'جاهز لبدء الاقتران', 'checkingEnvironment': 'جاري فحص البيئة...', 'ensureHeadsetOnAndPairingMode': 'يرجى التأكد من تشغيل سماعة الرأس وفي وضع الاقتران', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'جاري إنشاء اتصال آمن...', 'needManualBindingAuthCode': 'مطلوب رمز تفويض الربط اليدوي...', 'pairingSuccessful': 'نجح الاقتران!', @@ -1057,16 +1379,18 @@ const Map arSA = { 'deviceAuthorizationFailedCheckCode': 'فشل تفويض الجهاز، يرجى التحقق من رمز التفويض', - // iOS蓝牙引导窗 - 'bluetoothGuideTitle': 'يجب تمكين البلوتوث يدويًا', - 'bluetoothGuideSteps': 'يرجى اتباع الخطوات التالية:', - 'bluetoothGuideStep1': 'تمكين البلوتوث: الإعدادات ← البلوتوث ← تشغيل', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'يجب تمكين البلوتوث يدويًا', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'يرجى اتباع الخطوات التالية:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'تمكين البلوتوث: الإعدادات ← البلوتوث ← تشغيل', // 开启蓝牙:设置 → 蓝牙 → 开启 'bluetoothGuideStep2': - 'توصيل الجهاز: ابحث عن جهازك في "أجهزتي" وانقر للاتصال', - 'bluetoothGuideStep3': 'العودة إلى التطبيق لمتابعة عملية الاقتران', + 'توصيل الجهاز: ابحث عن جهازك في "أجهزتي" وانقر للاتصال', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'العودة إلى التطبيق لمتابعة عملية الاقتران', // 返回应用继续配对流程 'bluetoothGuideTip': - 'نصيحة: يمكنك أيضًا الضغط لفترة طويلة على أيقونة البلوتوث في مركز التحكم للوصول بسرعة إلى إعدادات البلوتوث', - 'iKnow': 'حسنًا', + 'نصيحة: يمكنك أيضًا الضغط لفترة طويلة على أيقونة البلوتوث في مركز التحكم للوصول بسرعة إلى إعدادات البلوتوث', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'أنا أعرف', // 我知道了 //用户反馈页 "feedback": "ملاحظات المستخدم", @@ -1074,44 +1398,53 @@ const Map arSA = { 'feedbackDescription': 'يرجى وصف المشكلة التي واجهتها أو اقتراحك', 'feedbackHint': 'يرجى إدخال ملاحظاتك...', 'feedbackRequired': 'يرجى إدخال محتوى الملاحظات', - 'contactInfo': 'معلومات الاتصال', - 'contactHint': 'البريد الإلكتروني/رقم الهاتف، حتى نتمكن من الاتصال بك', + 'contactInfo': 'طريقة الاتصال', + 'contactHint': 'البريد الإلكتروني/رقم الهاتف، لنسهل الاتصال بك', 'submit': 'إرسال', - 'feedbackSubmitSuccess': 'تم إرسال الملاحظات بنجاح، شكرًا لك على ملاحظاتك!', - 'feedbackSubmitFailed': 'فشل إرسال الملاحظات، يرجى المحاولة مرة أخرى لاحقًا', + 'feedbackSubmitSuccess': 'تم إرسال الملاحظات بنجاح، شكرًا لملاحظاتك!', + 'feedbackSubmitFailed': 'فشل إرسال الملاحظات، يرجى المحاولة لاحقًا', // OTA升级模块 "upgradeExitConfirm": - "التحديث قيد التقدم حاليًا، الخروج سيقطع عملية التحديث، هل أنت متأكد من أنك تريد الخروج؟", - "deviceModel": "طراز الجهاز", + "جاري الترقية حاليًا، الخروج سيقطع عملية الترقية، هل أنت متأكد من أنك تريد الخروج؟", + "deviceModel": "موديل الجهاز", "unknownDevice": "جهاز غير معروف", "currentFirmwareVersion": "إصدار البرنامج الثابت الحالي", "latestFirmwareVersion": "أحدث إصدار للبرنامج الثابت", "ota_newVersionFound": "تم العثور على إصدار جديد", - "latestVersion": "هذا هو أحدث إصدار بالفعل", + "latestVersion": "الإصدار الأحدث بالفعل", "gettingDeviceInfo": "جاري الحصول على معلومات الجهاز...", "keepDeviceConnected": "يرجى إبقاء الجهاز متصلاً", "connectionFailed": "فشل الاتصال", "retryConnection": "إعادة محاولة الاتصال", "ota_updateNow": "تحديث الآن", - "keepConnectedDontClose": "يرجى إبقاء الجهاز متصلاً، لا تغلق التطبيق", - "doNotDisconnect": "يرجى عدم قطع الاتصال", + "otaVersionInfoFailed": + "فشل الحصول على معلومات الإصدار، يرجى المحاولة لاحقًا", + "otaDeviceInfoUnavailable": + "لا يمكن الحصول على معلومات الجهاز، يرجى التحقق من الاتصال والمحاولة مرة أخرى", + "otaProductInfoUnavailable": + "لا يمكن التعرف على الجهاز الحالي، يرجى إعادة الاتصال والمحاولة مرة أخرى", + "otaFirmwareVersionInvalid": + "إصدار البرنامج الثابت للجهاز غير طبيعي، يرجى إعادة الاتصال والمحاولة مرة أخرى", + "keepConnectedDontClose": "يرجى إبقاء الجهاز متصلاً، ولا تغلق التطبيق", + "doNotDisconnect": "لا تقطع الاتصال", "charging": "جاري الشحن", "updateContent": "محتوى التحديث", "removeEarbudsEnsureBattery": - "أخرج كلتا سماعتي الأذن وتأكد من أن مستوى البطارية في كل منهما أعلى من 20%", + "أخرج السماعتين، وتأكد من أن مستوى البطارية أعلى من 20%", // 音乐列表页面 - "noMusic": "لا توجد موسيقى", - "noPlayingMusic": "لا توجد موسيقى قيد التشغيل", - "unknownSong": "أغنية غير معروفة", - "unknownArtist": "فنان غير معروف", - "playAll": "تشغيل الكل", + "noMusic": "لا توجد موسيقى", // 暂无音乐 + "noPlayingMusic": "لا توجد موسيقى قيد التشغيل", // 暂无播放音乐 + "unknownSong": "أغنية غير معروفة", // 未知歌曲 + "unknownArtist": "فنان غير معروف", // 未知歌手 + "playAll": "تشغيل الكل", // 播放全部 // 语言名称 "中文(简体)": "الصينية (المبسطة)", "中文(繁体)": "الصينية (التقليدية)", "中文(香港繁体)": "الصينية (هونغ كونغ التقليدية)", + "英语": "الإنجليزية", "日语": "اليابانية", "韩语": "الكورية", "法语": "الفرنسية", @@ -1150,113 +1483,20 @@ const Map arSA = { // 时间相关 "justNow": "الآن", - "minutesAgo": "منذ @minutes دقيقة", + "minutesAgo": "قبل @minutes دقيقة", "yesterday": "أمس", - // Guide overlay keys (placeholders in English) - "sayLilyHint": "Say \"Lily Lily\" to the mic", - "imHere": "I’m here~", - "guideWelcomeWakeAI": "Welcome to Voitrans! First, wake your AI “Lily”.", - "aiReplyCompleted": "Lily has finished the reply!", - "aiThinking": "Lily is thinking…", - "guideAwakenSuccess": "Great! Lily is awake—ask it to help.", - "confirmInput": "Confirm Input", - "guideClickSendPrefix": "Tap send, ", - "guideWeatherStart": "Tell Lily: “What’s the weather today?”", - "guideWeatherInput": "What’s the weather today?", - "guideWeatherSend": "Lily will report the weather in real time", - "guideWeatherEnd": "Lily can report weather live—try other commands", - "guideMusicStart": "Tell Lily: “Play some rock music”", - "guideMusicInput": "Play some rock music", - "guideMusicSend": "Lily will find music for you", - "guideMusicEnd": "Lily found music—try other commands", - "guideNavStart": "Tell Lily: “Navigate to Shenzhen Airport”", - "guideNavInput": "Navigate to Shenzhen Airport", - "guideNavSend": "Lily will plan the route", - "guideNavEnd": "Navigation set—try other commands", - "guideMeetingStart": - "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", - "guideMeetingInput": "Create a meeting reminder for 3pm tomorrow", - "guideMeetingSend": "Lily will create a meeting reminder", - "guideMeetingEnd": "Reminder created—try other commands", - "guidePhoneStart": "Tell Lily: “Call Mom”", - "guidePhoneInput": "Call Mom", - "guidePhoneSend": "Lily will make the call", - "guidePhoneEnd": "Call placed—try other commands", - "guideSmsStart": "Tell Lily: “Send Dad a text: I’ll be home for dinner”", - "guideSmsInput": "Text Dad: I’ll be home for dinner", - "guideSmsSend": "Lily will send the message", - "guideSmsEnd": "Message sent—voice control is convenient", - // Goods pages common footer (placeholders) - 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', - 'copyrightVoitrans': '© 2025 Voitrans Technologies', - - // Meeting goods page (placeholders) - 'meetingHeaderDesc1': - 'Audio recording, transcription, keyword search, and auto summary.', - 'meetingHeaderDesc2': - 'Suitable for business meetings, class notes, and interview minutes.', - 'meetingAutoRecording': 'Auto recording and segmentation', - 'meetingSpeakerTagging': 'Speaker labeling', - 'meetingLongAudioTranscription': 'Long audio transcription', - 'meetingKeyPointSummary': 'Key point extraction', - 'meetingTopicNameSearch': 'Search by topic/name', - 'meetingTimelineJump': 'Timeline jump', - 'meetingExportSummary': 'Export minutes', - 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': - 'Use in quiet environments; performance depends on microphone and network.', - - // Translation goods page (placeholders) - 'transHeaderDesc1': - 'ترجمة متزامنة فورية وترجمة نصية مع بث صوتي منخفض التأخير.', - 'transHeaderDesc2': 'مناسب للسفر والأعمال والخطب والتدريس.', - 'translateZhEn': 'ترجمة صينية-إنجليزية', - 'lowLatencyVoiceBroadcast': 'بث صوتي منخفض التأخير', - 'multiLangTextTranslation': 'ترجمة نصية متعددة اللغات', - 'termOptimizationContextPreserve': 'تحسين المصطلحات والحفاظ على السياق', - 'lexiconTourBusinessLife': 'قواميس السفر/الأعمال/الحياة', - 'personalVocabularyMemory': 'ذاكرة المفردات الشخصية', - 'conversationSubtitleLargeText': 'عناوين المحادثة / وضع النص الكبير', - 'colorHighContrast': 'تباين ألوان عالٍ', - 'transDisclaimer': - 'تعتمد جودة الترجمة على الميكروفون وزمن الشبكة والضوضاء المحيطة.', - - // VIP goods page (placeholders) - 'benefitsOverview': 'نظرة عامة على المزايا', - 'higherQuota': 'حصة استخدام أعلى', - 'lowerUnitPrice': 'سعر أقل لكل وحدة', - 'priorityService': 'خدمة ذات أولوية', - 'exclusiveSupportChannel': 'قناة دعم مخصصة', - 'fastResponse': 'استجابة سريعة للمشكلات', - 'eventsAndDiscounts': 'فعاليات وخصومات', - 'memberExclusiveEvents': 'فعاليات حصرية للأعضاء', - 'longTermDiscountPlan': 'خطة خصم طويلة الأجل', - 'generalPrivileges': 'امتيازات عامة', - 'earlyAccessNewFeatures': 'وصول مبكر إلى الميزات الجديدة', - 'crossDeviceSync': 'مزامنة عبر الأجهزة', - 'vipDisclaimer': - 'تعتمد الفوائد الفعلية على تفاصيل الباقة وقد تتغير مع الإصدارات.', - // Goods names by id - 'ai_001_name': 'الذكاء الاصطناعي الأساسي 100', - 'ai_002_name': 'الذكاء الاصطناعي الأساسي 500', - 'ai_003_name': 'الذكاء الاصطناعي الأساسي 1000', - 'meet_001_name': 'اجتماع أساسي 100', - 'meet_002_name': 'اجتماع أساسي 500', - 'meet_003_name': 'اجتماع أساسي 1000', - 'trans_001_name': 'ترجمة أساسية 100', - 'trans_002_name': 'ترجمة أساسية 500', - 'trans_003_name': 'ترجمة أساسية 1000', - // Goods descriptions by id - 'ai_001_desc': - 'يشمل 100 استخدام. الوصول إلى ميزات الذكاء الاصطناعي الأساسية.', - 'ai_002_desc': - 'يشمل 500 استخدام. الوصول إلى ميزات الذكاء الاصطناعي الأساسية.', - 'ai_003_desc': - 'يشمل 1000 استخدام. الوصول إلى ميزات الذكاء الاصطناعي الأساسية.', - 'meet_001_desc': 'يشمل 100 تسجيل/نسخ لاجتماعات.', - 'meet_002_desc': 'يشمل 500 تسجيل/نسخ لاجتماعات.', - 'meet_003_desc': 'يشمل 1000 تسجيل/نسخ لاجتماعات.', - 'trans_001_desc': 'يشمل 100 ترجمة (صوت/نص).', - 'trans_002_desc': 'يشمل 500 ترجمة (صوت/نص).', - 'trans_003_desc': 'يشمل 1000 ترجمة (صوت/نص).', + // 时间扩展(图片翻译模块使用) + "daysAgo": "قبل @days يوم", + "hoursAgo": "قبل @hours ساعة", + + //补充 + "insufficientIntegral": "نقاط غير كافية", + + //余额不足弹窗 + "insufficientBalanceDesc": + "الرصيد غير كافٍ، يرجى الانتقال إلى صفحة الشحن المقابلة للشحن", + "recharge": "الذهاب للشحن", + // 会员到期提示 + "aiMemberExpiredDesc": + "انتهت عضوية AI، يرجى الانتقال إلى شحن العضوية للتجديد", }; diff --git a/lib/core/translations/language/bg_bg.dart b/lib/core/translations/language/bg_bg.dart index 7a3d5d277..02e1ce8eb 100644 --- a/lib/core/translations/language/bg_bg.dart +++ b/lib/core/translations/language/bg_bg.dart @@ -33,6 +33,7 @@ const Map bgBG = { "spanish": "Испански", "portuguese": "Португалски", "traditionalChinese": "Традиционен китайски", + "traditionalChineseHK": "Традиционен китайски (Хонконг)", "japanese": "Японски", "korean": "Корейски", "french": "Френски", @@ -102,8 +103,8 @@ const Map bgBG = { "loginDeclaration": "Декларация на Voitrans", // Voitrans 声明 "welcomeToThisApp": "Добре дошли в Voitrans, моля прочетете внимателно", // 欢迎使用Voitrans,请充分阅读 - // "privacyPolicy": "Политика за поверителност", // 《隐私政策》 - 已存在,使用现有键 - // "userAgreement": "Потребителско споразумение", // 《用户协议》 - 已存在,使用现有键 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": ". Кликването на 'Съгласявам се и влизам' означава, че сте прочели напълно и се съгласявате с горните споразумения. Кликването на 'Не се съгласявам' ще затвори приложението.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 "disagree": "Не се съгласявам", // 不同意 @@ -186,6 +187,215 @@ const Map bgBG = { "usageStats": "Статистика за използване", "usageStatsInfo": "Прегледвайте статистика за използване на приложението", "scene": "Сценарии", + // 用量统计模块 + "aiChat": "AI чат", + "translationStats": "Статистика за преводи", + "meetingStats": "Статистика за срещи", + "today": "Днес", + "thisWeek": "Тази седмица", + "thisMonth": "Този месец", + "history": "История", + "currentSessionStats": "Статистика за текущата сесия", + "translationCount": "Брой преводи", + "sessionDuration": "Продължителност на сесията", + "characters": "Символи", + "recordingDuration": "Продължителност на записа", + "totalApiCalls": "Общо API повиквания", + "sessionCount": "Брой сесии", + "totalCharacters": "Общо символи", + "apiCallStats": "Статистика за API повиквания", + "translationApi": "API за превод", + "asr": "Разпознаване на реч", + "tts": "Синтез на реч", + //"aiSummary": "AI резюме", + "dataVolumeStats": "Статистика за обем данни", + "sourceTextCharacters": "Символи в изходния текст", + "ttsTextCharacters": "Символи в TTS текст", + "effectiveAudioDuration": "Ефективна продължителност на аудиото", + "totalSessionDuration": "Обща продължителност на сесията", + "costStats": "Статистика за разходи", + "estimatedCost": "Очаквани разходи", + "dailyCostThreshold": "Дневен лимит за разходи", + "monthlyCostThreshold": "Месечен лимит за разходи", + "usageBehaviorStats": "Статистика за поведение на използване", + "mostUsedLanguagePair": "Най-използвана езикова двойка", + "mostUsedMode": "Най-използван режим", + "asrApiCalls": "ASR повиквания", + "totalAudioDuration": "Обща продължителност на аудиото", + "audioFileSize": "Размер на аудио файла", + "transcriptBytes": "Байтове на транскрипцията", + // 通知文案 + "loadFailed": "Неуспешно зареждане", + "statsLoadFailedTryLater": + "Неуспешно зареждане на статистиката. Моля, опитайте отново по-късно.", + "cleanupComplete": "Почистването завърши", + "cleanedOldData": "Почистени са данни по-стари от 90 дни", + "exportFeature": "Функция за експорт", + "exportInDevelopment": "Експортът на данни е в процес на разработка", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Налични пакети', + 'remainingQuota': 'Оставаща квота', + 'totalQuota': 'Обща квота', + 'remaining': 'Оставащо', + 'featureDescription': 'Описание на функцията', + // AI 功能卡片 + 'musicAndRecommendation': 'Музика и препоръки', + 'navigationAndRoutes': 'Навигация и маршрути', + 'nearbySearch': 'Търсене наблизо', + 'newsInformation': 'Новини', + 'communicationAssistant': 'Комуникационен асистент', + // 翻译功能卡片 + 'realtimeTranscription': 'Транскрипция в реално време', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Сценариен речник', + 'subtitleDisplay': 'Субтитри', + // 会议功能卡片 + 'meetingRecording': 'Запис на среща', + 'transcriptionAndSummary': 'Транскрипция и резюме', + 'keywordSearch': 'Търсене по ключови думи', + 'collaborationSharing': 'Сътрудничество и споделяне', + // 商品名称(按ID) + 'ai_001_name': 'AI Базов 100', + 'ai_002_name': 'AI Базов 500', + 'ai_003_name': 'AI Базов 1000', + 'meet_001_name': 'Среща Базов 100', + 'meet_002_name': 'Среща Базов 500', + 'meet_003_name': 'Среща Базов 1000', + 'trans_001_name': 'Превод Базов 100', + 'trans_002_name': 'Превод Базов 500', + 'trans_003_name': 'Превод Базов 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Включва 100 използвания. Достъп до основни AI функции.', + 'ai_002_desc': 'Включва 500 използвания. Достъп до основни AI функции.', + 'ai_003_desc': 'Включва 1000 използвания. Достъп до основни AI функции.', + 'meet_001_desc': 'Включва 100 записа/транскрипции на срещи.', + 'meet_002_desc': 'Включва 500 записа/транскрипции на срещи.', + 'meet_003_desc': 'Включва 1000 записа/транскрипции на срещи.', + 'trans_001_desc': 'Включва 100 превода (глас/текст).', + 'trans_002_desc': 'Включва 500 превода (глас/текст).', + 'trans_003_desc': 'Включва 1000 превода (глас/текст).', + +// 商品页通用页脚 + 'appNameProvider': 'Приложение: VoiTrans · Предоставено от: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP обслужване на клиенти QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Аудио запис, транскрипция, търсене по ключови думи и автоматично резюме за повишаване на ефективността на срещите.', + 'meetingHeaderDesc2': + 'Подходящо за бизнес срещи, записки в клас и протоколи от интервюта.', + 'meetingAutoRecording': 'Автоматичен запис и сегментиране', + 'meetingSpeakerTagging': 'Етикетиране на говорителите', + 'meetingLongAudioTranscription': 'Транскрипция на дълго аудио', + 'meetingKeyPointSummary': 'Извличане на ключови точки', + 'meetingTopicNameSearch': 'Търсене по тема/име', + 'meetingTimelineJump': 'Скок във времевата линия', + 'meetingExportSummary': 'Експорт на протоколи', + 'meetingMultiPlatformShare': 'Споделяне между платформи', + 'meetingDisclaimer': + 'Използвайте в тиха среда; производителността зависи от микрофона и мрежата.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Едновременен превод в реално време и текстов превод с глас с ниска латентност.', + 'transHeaderDesc2': 'Подходящо за пътуване, бизнес, речи и обучение.', + 'translateZhEn': 'Китайско-английски превод', + 'lowLatencyVoiceBroadcast': 'Гласово излъчване с ниска латентност', + 'multiLangTextTranslation': 'Многоезичен текстов превод', + 'termOptimizationContextPreserve': + 'Оптимизация на терминологията и запазване на контекста', + 'lexiconTourBusinessLife': 'Речници за пътуване/бизнес/живот', + 'personalVocabularyMemory': 'Лична памет за речник', + 'conversationSubtitleLargeText': 'Субтитри за разговор / Режим с голям текст', + 'colorHighContrast': 'Висок цветови контраст', + 'transDisclaimer': + 'Производителността на превода зависи от микрофона, мрежовата латентност и околния шум.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'По-голяма квота за разговори, повече повиквания на инструменти, удължена дължина на контекста.', + 'aiHeaderDesc2': + 'Подходящо за агентски въпроси и отговори, обобщаване, анализ и изпълнение на задачи.', + 'musicSearchPlaybackControl': + 'Търсене в музикалната библиотека и контрол на възпроизвеждането', + 'smartPlaylistAndSimilarRecommendations': + 'Интелигентен плейлист и препоръки за подобни песни', + 'routePlanningAndCongestionAvoidance': + 'Планиране на маршрути и избягване на задръствания', + 'voiceBroadcastAndWaypoints': 'Гласово излъчване и настройки на точки', + 'realTimeWeatherForecast': 'Времето в реално време и прогноза', + 'clothingAdviceAndTravelReminders': + 'Съвети за облекло и напомняния за пътуване', + 'poiSearchFoodGasParking': 'Търсене на POI: хранене / гориво / паркинг', + 'ratingsHoursAndDirectRoutes': 'Рейтинги, работно време и директни маршрути', + 'hotNewsAndTopicOverview': 'Горещи новини и преглед на теми', + 'longArticleSummariesAndKeyPoints': + 'Резюмета на дълги статии и ключови точки', + 'helpCallAndSMS': 'Помощ при обаждания и SMS', + 'templatedMessagesAndScheduleReminders': + 'Шаблонни съобщения и напомняния за графика', + 'aiDisclaimer': + 'Функциите зависят от разрешенията на устройството, наличността на услугата и мрежовите условия.', + + // 会员商品页 + 'benefitsOverview': 'Преглед на предимствата', + 'higherQuota': 'По-висока квота за използване', + 'lowerUnitPrice': 'По-ниска единична цена', + 'priorityService': 'Приоритетно обслужване', + 'exclusiveSupportChannel': 'Специализиран канал за поддръжка', + 'fastResponse': 'Бърз отговор на проблеми', + 'eventsAndDiscounts': 'Събития и отстъпки', + 'memberExclusiveEvents': 'Ексклузивни събития за членове', + 'longTermDiscountPlan': 'Дългосрочен план за отстъпки', + 'generalPrivileges': 'Общи привилегии', + 'earlyAccessNewFeatures': 'Ранен достъп до нови функции', + 'crossDeviceSync': 'Синхронизация между устройства', + 'vipDisclaimer': + 'Действителните предимства зависят от детайлите на пакета и могат да се променят с версиите.', + + // 新手引导 / Onboarding + 'skip': "Прескочи", + 'next': 'Напред', + 'sayLilyHint': 'Кажете "Lily Lily" на микрофона', + 'imHere': 'Тук съм~', + 'guideWelcomeWakeAI': + 'Добре дошли в Voitrans! Първо, събудете вашия AI "Lily".', + 'aiReplyCompleted': 'Lily завърши отговора!', + 'aiThinking': 'Lily мисли…', + 'guideAwakenSuccess': 'Страхотно! Lily е будна—помолете я за помощ.', + 'confirmInput': 'Потвърди въвеждането', + 'guideClickSendPrefix': 'Натиснете изпрати, ', + // AI 引导步骤 + 'guideWeatherStart': 'Кажете на Lily: "Какво е времето днес?"', + 'guideWeatherInput': 'Какво е времето днес?', + 'guideWeatherSend': 'Lily ще докладва времето в реално време', + 'guideWeatherEnd': + 'Lily може да докладва времето на живо—опитайте други команди', + 'guideMusicStart': 'Кажете на Lily: "Пусни малко рок музика"', + 'guideMusicInput': 'Пусни малко рок музика', + 'guideMusicSend': 'Lily ще намери музика за вас', + 'guideMusicEnd': 'Lily намери музика—опитайте други команди', + 'guideNavStart': 'Кажете на Lily: "Навигирай до летище Шенжен"', + 'guideNavInput': 'Навигирай до летище Шенжен', + 'guideNavSend': 'Lily ще планира маршрута', + 'guideNavEnd': 'Навигацията е зададена—опитайте други команди', + 'guideMeetingStart': + 'Кажете на Lily: "Създай напомняне за среща за утре в 15:00"', + 'guideMeetingInput': 'Създай напомняне за среща за утре в 15:00', + 'guideMeetingSend': 'Lily ще създаде напомняне за среща', + 'guideMeetingEnd': 'Напомнянето е създадено—опитайте други команди', + 'guidePhoneStart': 'Кажете на Lily: "Обади се на мама"', + 'guidePhoneInput': 'Обади се на мама', + 'guidePhoneSend': 'Lily ще направи обаждането', + 'guidePhoneEnd': 'Обаждането е направено—опитайте други команди', + 'guideSmsStart': + 'Кажете на Lily: "Изпрати SMS на татко: Ще си бъда вкъщи за вечеря"', + 'guideSmsInput': 'SMS на татко: Ще си бъда вкъщи за вечеря', + 'guideSmsSend': 'Lily ще изпрати съобщението', + 'guideSmsEnd': 'Съобщението е изпратено—гласовият контрол е удобен', // 商务会议助手页 "startMeeting": "Започни среща", @@ -200,13 +410,247 @@ const Map bgBG = { 'aiSummary': 'AI резюме', 'meetingTranscript': 'Протокол от срещата', + // Meeting模块 - 导航和基础功能 + 'files': 'Файлове', + 'mine': 'Мои', + 'connect': 'Свържи', + 'allFiles': 'Всички файлове', + 'searchInAllFiles': 'Търсене във всички файлове', + 'from': 'От', + 'sortBy': 'Сортирай по', + 'creationTime': 'Време на създаване', + 'bluetoothConnection': 'Bluetooth връзка', + 'meetingReconnect': 'Свържи отново', + 'searching': 'Търсене...', + 'searchFailed': + 'Търсенето е неуспешно, моля проверете дали Bluetooth е включен', + 'aiPenNotFound': 'Устройството AI PEN не е намерено', + 'connectedToAiPen': 'Свързан към AI PEN устройство', + 'checkingNewFiles': 'Проверка за нови файлове за импорт', + 'startingWifi': 'Стартиране на Wi-Fi...', + 'newFilesDetected': 'Открити са нови файлове, подготовка за импорт', + 'noNewFiles': 'Няма нови файлове за импорт', + 'connectingWifi': 'Свързване с Wi-Fi...', + 'wifiConnected': 'Успешно свързване с Wi-Fi', + 'downloadingFiles': 'Изтегляне на файлове...', + 'downloadingFileProgress': 'Общо {total} файла, изтегляне на файл {current}', + 'downloadComplete': 'Изтеглянето завърши', + 'downloadCompleteInfo': + 'Изтеглянето завърши, общо {count} файла, автоматично връщане след 2 секунди', + + // Meeting模块 - 录音功能 + 'startRecording': 'Започни запис', + 'liveRecording': 'Запис на живо', + 'audioVideoRecording': 'Аудио/Видео запис', + 'callRecording': 'Запис на разговор', + 'importAudio': 'Импорт на аудио', + 'transcribing': 'Транскрибиране...', + 'summarizing': 'Обобщаване...', + 'analyzing': 'Анализиране...', + 'summaryComplete': 'Обобщението завърши', + //'generating': '正在生成...', + 'generate': 'Генерирай', + 'overview': 'Преглед', + 'transcription': 'Транскрипция', + 'summary': 'Резюме', + 'mindMap': 'Мисловна карта', + 'editSpeaker': 'Редактирай', + 'nameSpeaker': 'Име на говорител', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Записи на транскрипции', + 'templateCommunity': 'Общност за шаблони', + 'comingSoon': 'Очаквайте скоро', + 'integration': 'Интеграция', + 'voitransPrivateCloud': 'VOITRANS ЧАСТЕН ОБЛАК', + 'enabled': 'Включено', + 'disabled': 'Изключено', + 'myVoitransDevice': 'Моето VOITRANS устройство', + 'helpAndFeedback': 'Помощ и обратна връзка', + 'aboutVoitrans': 'За VOITRANS', + 'meetingDays': 'Дни', + 'meetingHours': 'Часове', + 'voitransAiMember': 'Voitrans AI член', + 'unlockStarterMember': 'Отключи стартов член', + 'bindDeviceToActivate': + 'Свържи Voitrans устройство за активиране на стартово членство', + 'unlockNow': 'Отключи сега', + + // Meeting模块 - 会员功能 + 'comparison': 'Сравнение', + 'detailedInfo': 'Детайлна информация', + 'monthlyTranscriptionTime': 'Месечно време за транскрипция', + 'unlimited': 'Неограничено', + 'professionalTemplates': 'Професионални шаблони', + 'limited': 'Ограничено', + 'fullTemplates': 'Пълни шаблони', + 'professionalTerms': 'Професионални термини', + 'customTemplates': 'Персонализирани шаблони', + 'visualMindMap': 'Визуална мисловна карта', + 'speakerIdentification': 'Идентификация на говорител', + 'aiVoiceEnhancement': 'AI подобрение на гласа', + 'audioImport': 'Аудио импорт', + 'multipleExportFormats': 'Множество формати за експорт', + 'professionalSummaryTemplates': 'Професионални шаблони за резюме', + 'professionalTemplateDesc': + 'Професионален дизайн на шаблони за подобряване на ефективността на работата. Персонализирано според нуждите на индустрията.', + 'customTemplateDesc': + 'Можете да персонализирате подканите за резюме според нуждите си и да ги използвате за генериране на необходимите резюмета.', + 'askAiDesc': + 'Интелигентно извличане на по-дълбока информация от записи, генериране на таблици с данни, ключови заключения от дискусии, списъци със задачи, имейли за доклади и друго форматирано съдържание с едно кликване.', + 'visualMindMapDesc': + 'Отвъд резюметата - организирайте и визуализирайте ключови точки с мисловни карти за по-ефективно разбиране на пълния текст.', + 'templateCommunityDesc': + 'Открийте, споделете и получете вдъхновение от библиотеката с шаблони, създадена от потребители.', + 'speakerIdentificationDesc': + 'Аудио транскрипцията ще поддържа идентификация на говорител, по-интуитивно възстановяване на съдържанието на срещи или телефонни разговори. В същото време резюмето ще бъде по-точно.', + 'privateCloudSyncDesc': + 'Вашите записи и транскрипции ще бъдат сигурно съхранявани на специализирани облачни сървъри, с пълно криптиране по време на качване и изтегляне, за да се гарантира поверителност и сигурност.', + 'aiVoiceEnhancementDesc': + 'AI подобрението на гласа поддържа множество настройки за намаляване на шума, интелигентно елиминира фоновия шум, подобрява яснотата на гласа и качеството на възпроизвеждане на аудио.', + 'audioImportDesc': + 'Лесно импортиране на аудио файлове от локални или приложения на трети страни, като гласови бележки, Google Drive и др.', + 'multipleExportFormatsDesc': + 'Експортирайте вашите аудио записи, транскрипционен текст и резюмета в различни формати (TXT, PDF, JPEG), за да отговорите на нуждите си.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Надстройте членството си', + 'yearlySubscription': 'Годишен абонамент', + 'monthlySubscription': 'Месечен абонамент', + 'proMonthly': 'Pro ¥60/месец', + 'proMonthlyDesc': + '7-дневен безплатен пробен период, след това ¥800/година. Отказ по всяко време преди края на пробния период.', + 'sevenDayTrial': '7-дневен безплатен пробен период', + 'unlimitedMonthly': 'Неограничен ¥120/месец', + 'unlimitedMonthlyDesc': + '7-дневен безплатен пробен период, след това ¥1600/година. Отказ по всяко време преди края на пробния период.', + 'trialNote': + '*Безплатен пробен период за 7 дни, след това таксуване годишно, отказ по всяко време.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/месец', + 'subscribe': 'Абонирай се', + 'unlimitedPrice': 'Неограничен ¥198', + 'unlimitedMonthlyPrice': '¥198/месец', + 'upgradeNote': + '*След надграждане на абонамента, оставащите дни от оригиналния абонамент ще бъдат автоматично изчислени и възстановени във вашия платежен акаунт', + 'buyMoreTranscriptionTime': 'Купи повече време за транскрипция', + 'sixThousandMinutes': '6,000 минути', + 'threeThousandMinutes': '3,000 минути', + 'sixHundredMinutes': '600 минути', + 'oneHundredTwentyMinutes': '120 минути', + 'validityPeriod': '*Период на валидност: ', + 'validityNote': + 'Активира се веднага след покупка, валидно за 2 години след активация.', + 'purchase': 'Покупка', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Избери шаблон за резюме', + 'useThisTemplate': 'Използвай този шаблон', + 'lastUsed': 'Последно използвано', + 'viewAll': 'Виж всички', + 'recordingLanguage': 'Език на записа', + 'chineseSimplified': 'Китайски мандарин (Опростен)', + 'meetingGenerateNow': 'Генерирай сега', + 'keyEventsAnalyzed': 'Анализирани {count} ключови събития.', + 'aiAnalysisDesc': + 'AI анализът идентифицира ключови събития в записите, позволявайки ви да изберете важни събития за AI генериране.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Системни настройки", //系统设置 - "vipRecharge": "Преплащане за VIP член", //会员充值 - "aiRecharge": "Премиум член", //AI充值 - "translationRecharge": "Преплащане за превод", //翻译充值 - "meetingAssistantRecharge": "Преплащане за Сообщението", //会议助手充值 - "cloudSync": "Преплащане за синхронизация в облака", //云端同步 + "systemSettings": "Системни настройки", + "vipRecharge": "Преплащане за VIP член", + "aiRecharge": "Премиум член", + "translationRecharge": "Преплащане за превод", + "meetingAssistantRecharge": "Преплащане за Сообщението", + "cloudSync": "Преплащане за синхронизация в облака", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Свързано устройство:", "accountId": "ID на акаунта:", "systemSetting": "Системни настройки", @@ -243,12 +687,10 @@ const Map bgBG = { 'selecttimbre': 'Избери тембър', 'pleaseRead': 'Моля прочетете', 'completeRecording': 'Завърши записа', - "firmwareUpgrade": "Актуализация на фърмуера", // 固件升级 - "bleHeadsetFirmwareUpgrade": - "Актуализация на фърмуера на BLE слушалките", // BLE耳机固件版本升级 - "deviceManagement": "Управление на устройства", // 设备管理 - "manageConnectedDevices": - "Управление на свързани Bluetooth устройства", // 管理已绑定的蓝牙设备 + "firmwareUpgrade": "Актуализация на фърмуера", + "bleHeadsetFirmwareUpgrade": "Актуализация на фърмуера на BLE слушалките", + "deviceManagement": "Управление на устройства", + "manageConnectedDevices": "Управление на свързани Bluetooth устройства", //设置setting_controller // 版本更新相关 @@ -257,11 +699,10 @@ const Map bgBG = { 'networkErrorRetry': 'Мрежова грешка, моля опитайте отново по-късно', // 设备管理相关 - 'clearPairedDevices': 'Изчисти сдвоени устройства', - 'clearPairedDevicesConfirm': - 'Сигурни ли сте, че искате да изчистите всички сдвоени устройства?', - 'clearPairedDevicesSuccess': 'Успешно изчистване на сдвоени устройства', - 'clearPairedDevicesFailed': 'Неуспешно изчистване на сдвоени устройства', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Гласов разговор в реално време", @@ -270,11 +711,20 @@ const Map bgBG = { "loading": "Зареждане...", //设备管理页面 - "earphone": "Слушалки", - "voicerecorder": "Диктофон", - "notBound": "Не е свързано", - "deviceNotBoundYet": "Все още няма свързано устройство", + "deviceTypeUnknown": "Неизвестно устройство", + "deviceTypeClassicBluetoothHeadset": "Класически Bluetooth слушалки", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth слушалки", + "deviceTypeSmartVoiceRecorder": "Интелигентен диктофон", + "deviceTypeSmartEye": "Интелигентни очила", "unbind": "Развържи", + "noDevicesBound": "Все още няма свързани устройства", + "pleaseBindDeviceFirst": "Моля, първо свържете устройство за управление", + "noMacAddress": "Няма MAC адрес", + "licenseCode": "Лицензен код", + "confirmUnbind": "Потвърдете развързването", + "confirmUnbindMessage": + "Сигурни ли сте, че искате да развържете устройство \"{deviceName}\"?", + "confirmUnbindAction": "Потвърдете развързването", //Agent 模块 // agent View @@ -303,6 +753,20 @@ const Map bgBG = { "loadMoreMessages": "Зареди повече съобщения...", "loadFailedClickRetry": "Неуспешно зареждане, кликнете за повторен опит", "swipeUpForMore": "Плъзнете нагоре за повече", + "callingTool": "Помагам ви, моля изчакайте!", // 正在帮您,请稍等! + "voice_interrupt": "Прекъсване", // 语音打断 + + // 预设提示词 + "presetMusic": "Пусни малко музика", // 来点音乐 + "presetNavigation": "Навигация до", // 导航 + "presetWeather": "Времето днес", // 今日天气 + "presetNews": "Новините днес", // 今日新闻 + "presetFood": "Храна наблизо", // 美食 + "playSomeMusic": "Пусни популярна музика", // 播放一些流行音乐 + "navigationTo": "Моля, помогни ми да навигирам до", // 导航到 + "todayWeather": "Какво е времето днес?", // 今日天气 + "todayNews": "Какви са новините днес?", // 今日新闻 + "nearbyFood": "Каква вкусна храна има наблизо?", // 美食 // Agent controller 'welcomeMessage': 'Здравейте! Аз съм **Сяо Ян**, мога да ви помогна с:\n\n' @@ -336,7 +800,7 @@ const Map bgBG = { 'submitSuccess': 'Успешно изпращане', 'submitFailed': 'Неуспешно изпращане', 'reportSubmitted': 'Докладът е изпратен, ще го обработим възможно най-скоро', - //'networkError': 'Мрежова грешка, моля опитайте отново по-късно', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Вредно/небезопасно', 'pornographicVulgar': 'Порнографско/вулгарно', 'misleadingAttack': 'Подвеждаща атака', @@ -346,7 +810,7 @@ const Map bgBG = { 'other': 'Друго', 'reportDescriptionHint': 'Искаме да знаем причината за доклада ви, можете да опишете проблема, с който сте се сблъскали.', - //'submit': 'Изпрати', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Генерирано от AI', @@ -401,6 +865,17 @@ const Map bgBG = { "friday": "Петък", "saturday": "Събота", "sunday": "Неделя", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Награда за добре дошли", + "firstBindRewardDesc": "Получихте награди за свързване.", + "vipLevelLabel": "VIP ниво:", + "expiryLabel": "Изтичане:", + "notActivated": "Неактивирано", + "aiChatCreditsLabel": "AI чат кредити:", + "translationCreditsLabel": "Кредити за превод:", + "meetingCreditsLabel": "Кредити за срещи:", + "ok": "ОК", + // 天气描述 "sunny": "Слънчево", "partlyCloudy": "Малко облачно", @@ -436,6 +911,8 @@ const Map bgBG = { 'deleteAccount': 'Изтрий акаунт', 'deleteAccountTips': 'Сигурни ли сте, че искате да изтриете завинаги акаунта си? Тази операция не може да бъде отменена', + 'clean': 'Изчисти кеша', + 'cleanTips': 'Сигурни ли сте, че искате да изчистите личния кеш?', // Profile 错误信息 'networkConnectionFailed': @@ -456,8 +933,8 @@ const Map bgBG = { 'Вътрешна грешка в сървъра, моля опитайте отново по-късно', // Profile 用户交互 -//'error': 'Грешка', -//'success': 'Успех', +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Неуспешно компресиране на изображението', 'avatarUpdateFailed': 'Неуспешна актуализация на аватара', 'usernameCannotBeEmpty': 'Потребителското име не може да бъде празно', @@ -491,15 +968,26 @@ const Map bgBG = { 'getPermissionStatusFailed': 'Неуспешно получаване на състоянието на разрешенията', 'communicationPermissions': 'Разрешения за комуникация', + 'bluetoothPermissions': 'Bluetooth разрешения', + 'notificationPermissions': 'Разрешения за известия', + 'storagePermissions': 'Разрешения за съхранение', + 'microphonePermissions': 'Разрешения за микрофон', + 'alarmPermissions': 'Разрешения за аларма', 'calendarPermissions': 'Разрешения за календар', 'locationPermissions': 'Разрешения за местоположение', 'phone': 'Телефон', 'sms': 'SMS', + 'contacts': 'Контакти', + //'bluetooth': '蓝牙', + 'notification': 'Известия', + 'alarm': 'Аларма', 'calendarWrite': 'Писане в календара', 'calendarFullAccess': 'Пълен достъп до календара', 'locationInfo': 'Информация за местоположението', 'phonePermissionDesc': 'Използва се за функцията за телефонни обаждания', 'smsPermissionDesc': 'Използва се за функцията за изпращане на SMS', + 'alarmPermissionDesc': + 'Използва се за задаване на точни аларми, за да се гарантира, че напомнянията се задействат навреме', 'calendarWritePermissionDesc': 'Използва се за създаване на календарни събития и напомняния', 'calendarFullAccessPermissionDesc': @@ -518,18 +1006,83 @@ const Map bgBG = { 'Функцията за телефонни обаждания се нуждае от разрешение за телефон', 'smsPermissionDetailDesc': 'Функцията за изпращане на SMS се нуждае от SMS разрешение', + 'alarmPermissionDetailDesc': + 'Това разрешение е необходимо за задаване на точни аларми и гарантиране, че напомнянията се задействат навреме', 'calendarWritePermissionDetailDesc': 'Създаването на календарни събития се нуждае от разрешение за писане в календара', 'calendarFullAccessPermissionDetailDesc': 'Управлението на календарни събития се нуждае от пълно разрешение за календара', 'locationPermissionDetailDesc': 'Получаването на информация за местоположението се нуждае от разрешение за местоположение', + 'contactsPermissionDesc': 'Използва се за достъп до информация за контакти', + 'contactsPermissionDetailDesc': + 'Функционалността за телефонни разговори и SMS изисква разрешение за контакти за избор на контакти', + 'bluetoothPermissionDesc': + 'Използва се за свързване и управление на Bluetooth устройства', + 'bluetoothPermissionDetailDesc': + 'Свързването с Bluetooth слушалки и други устройства изисква Bluetooth разрешение', + 'bluetoothScanPermissionDesc': + 'Използва се за сканиране на близки Bluetooth устройства', + 'bluetoothScanPermissionDetailDesc': + 'Сканирането за близки Bluetooth устройства изисква разрешение за Bluetooth сканиране', + 'bluetoothConnectPermissionDesc': + 'Използва се за свързване с Bluetooth устройства', + 'bluetoothConnectPermissionDetailDesc': + 'Свързването с Bluetooth устройства изисква разрешение за Bluetooth свързване', + 'notificationPermissionDesc': + 'Използва се за изпращане на уведомителни съобщения', + 'notificationPermissionDetailDesc': + 'Приложението се нуждае от разрешение за известия, за да ви изпраща важни сигнали и съобщения', 'appNeedsPermissionForFullFunction': 'Приложението се нуждае от това разрешение за да предостави пълна функционалност', 'permanentDenialText': 'Вие сте отказали постоянно разрешението за {permission}, моля отидете в настройките на приложението за да го включите', 'goToSettings': 'Отиди в настройки', + // 权限申请 + 'bluetoothScan': 'Bluetooth сканиране', + 'bluetoothConnect': 'Bluetooth свързване', + 'bluetoothScanExplanation': + 'Приложението се нуждае от разрешение за Bluetooth сканиране, за да сканира близки Bluetooth устройства.', + 'bluetoothConnectExplanation': + 'Приложението се нуждае от разрешение за Bluetooth свързване, за да се свързва с Bluetooth устройства.', + 'locationForBluetoothExplanation': + 'Приложението се нуждае от разрешение за местоположение, за да сканира Bluetooth устройства.', + 'bluetoothScanPermanentDenial': + 'Разрешението за Bluetooth сканиране е постоянно отказано, моля отидете в настройките, за да го включите ръчно.', + 'bluetoothConnectPermanentDenial': + 'Разрешението за Bluetooth свързване е постоянно отказано, моля отидете в настройките, за да го включите ръчно.', + 'locationPermanentDenial': + 'Разрешението за местоположение е постоянно отказано, моля отидете в настройките, за да го включите ръчно.', + 'notificationPermission': 'Известия', + 'locationPermission': 'Местоположение', + 'notificationPermissionExplanation': + 'Разрешението за известия е необходимо за показване на състоянието на възпроизвеждане на музика.', + 'locationPermissionExplanation': + 'Разрешението за местоположение е необходимо за получаване на текущото местоположение.', + 'notificationPermissionPermanentDenial': + 'Постоянно сте отказали разрешение за известия, моля отидете в настройките, за да го включите.', + 'locationPermissionPermanentDenial': + 'Постоянно сте отказали разрешение за местоположение, моля отидете в настройките, за да го включите.', +//'microphonePermission': '录音', + 'storagePermission': 'Съхранение', + 'microphonePermissionExplanation': + 'Нуждаем се от разрешение за микрофон, за да записваме аудио съдържание.', + 'storagePermissionExplanation': + 'Нуждаем се от разрешение за съхранение, за да избирате и качвате аудио файлове.', + 'microphonePermissionPermanentDenial': + 'Разрешението за микрофон е постоянно отказано. За да продължите да използвате тази функция, моля отидете в настройките на приложението, за да включите ръчно разрешението за микрофон.', + 'storagePermissionPermanentDenial': + 'Разрешението за съхранение е постоянно отказано. За да продължите да използвате тази функция, моля отидете в настройките на приложението, за да включите ръчно разрешението за съхранение.', + + //permission_util.dart + 'permissionUtilNeed': 'Нужно е ', + 'permissionUtilPermission': ' разрешение', + 'permissionUtilRestricted': ' Разрешението е ограничено', + 'permissionUtilRestrictedMessage': + 'Тази функция е недостъпна или ограничена на текущото устройство, моля проверете настройките на устройството или системните ограничения', + 'permissionUtilConfirm': 'ОК', + // 版本更新对话框 'newVersionFound': 'Намерена е нова версия', // 版本更新对话框标题 'remindLater': 'Напомни по-късно', // 稍后提醒按钮 @@ -648,8 +1201,23 @@ const Map bgBG = { "东帝汶": "Източен Тимор", "斐济": "Фиджи", "所罗门群岛": "Соломонови острови", + "刚果民主共和国": "Демократична република Конго", + "安哥拉": "Ангола", + "苏丹": "Судан", + "马尔代夫": "Малдиви", + "不丹": "Бутан", + "摩纳哥": "Монако", + "圣马力诺": "Сан Марино", + "牙买加": "Ямайка", + "巴哈马": "Бахами", + "巴布亚新几内亚": "Папуа Нова Гвинея", + "萨摩亚": "Самоа", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Превод на снимки", + "textTranslation": "Текстов превод", + // 翻译主页 (translation_view.dart) "translationHistory": "История на преводите", "enableRecording": "Включи записването", @@ -658,9 +1226,24 @@ const Map bgBG = { "phoneUser": "Потребител на телефон", "selectSourceLanguage": "Избери изходен език", "selectTargetLanguage": "Избери целеви език", + "me": "Аз", + "counterPart": "Събеседник", + "bluetoothCallStateError": + "Моля уверете се, че Bluetooth слушалките са свързани с телефона и са в състояние на разговор", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Автоматично откриване", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Неуспешно откриване на езика", + "translationFailed": "Неуспешен превод", + "pleaseInputText": "Моля въведете текст", + "textTooLong": "Текстът е твърде дълъг, макс 5000 символа", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Няма история на преводи", + "historyRecords": "Исторически записи", + "clearResults": "Изчисти резултатите", "clearHistory": "Изчисти историята", "clearHistoryConfirm": "Сигурни ли сте, че искате да изчистите цялата история на преводите? Тази операция не може да бъде отменена.", @@ -669,7 +1252,61 @@ const Map bgBG = { "deleteSessionConfirm": "Сигурни ли сте, че искате да изтриете всички записи на преводи за тази сесия? Тази операция не може да бъде отменена.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Избери източник на изображение", + "imagePreview": "Преглед на изображение", + "translationResult": "Резултат от превода", + "recognitionResult": "Резултат от разпознаването", + "translatedImagePreview": "Преглед на преведеното изображение", + "translatedImageLoadFailed": "Неуспешно зареждане на преведеното изображение", + "pleaseSelectImage": "Моля изберете изображение", + "imageLoadFailed": "Неуспешно зареждане на изображение", + "imageQuality": "Качество на изображението", + "maxSize": "Максимален размер", + "close": "Затвори", + "setImageQuality": "Задай качество на изображението", + "currentQuality": "Текущо качество: @value%", + "setMaxSize": "Задай максимален размер", + "currentMaxSize": "Текущ: @pxpx", + "waitingForAction": "Изчакване на действие", + "pleaseSelectImageToStart": "Моля изберете изображение за начало", + "chooseImage": "Избери изображение", + "openingCamera": "Отваряне на камерата...", + "openingPhotoAlbum": "Отваряне на фотоалбума...", + "cancelled": "Отменено", + "userCancelledSelection": "Потребителят отмени избора", + "translatingImage": "Превеждане на изображение", + "callingImageTranslateService": + "Повикване на услугата за превод на изображения...", + "savingRecord": "Запазване на записа", + "savingTranslationResult": "Запазване на резултата от превода...", + "translationCompleted": "Преводът завърши", + "allStepsCompleted": "Всички стъпки завършиха", + "processingFailed": "Обработката е неуспешна", + "imageProcessingOrTranslationFailed": + "Обработката на изображението или преводът са неуспешни. Моля опитайте отново.\nГрешка: {error}", + "imageTooLarge": "Размерът на изображението надвишава лимита от 4MB", + "imageTooLargeHint": + "Размерът на изображението надвишава 4MB. Намалете качеството или размерите и опитайте отново", + "emptyTranslationResult": + "API за превод на изображения върна празен резултат", + "imageTranslationFailedTryLater": + "Преводът на изображение е неуспешен. Мрежов проблем или лимит на скоростта. Моля опитайте по-късно", + "imageTranslationApiException": + "Изключение в API за превод на изображения. Проверете мрежата и опитайте отново", + "permissionRequired": "Изисква се разрешение", + "cameraPermissionRequired": + "Изисква се разрешение за камера за правене на снимки", + "photoAlbumPermissionRequired": + "Изисква се разрешение за фотоалбум за избор на изображения", + "translationDetails": "Детайли на превода", + "originalImage": "Оригинално изображение", + "sourceLanguage": "Изходен език", + "targetLanguage": "Целеви език", + "translationTime": "Време на превод", + "shareInDevelopment": "Функцията за споделяне е в процес на разработка", + + // 翻译录音文件列表页 "translateAudioFiles": "Преведи аудио файлове", "noAudioFiles": "Няма аудио файлове", "calculating": "Изчисляване...", @@ -715,7 +1352,7 @@ const Map bgBG = { "autoInputCode": "Автоматично въвеждане на код", "skipBinding": "Прескочи свързването", "rescan": "Сканирай отново", - "skip": "Прескочи", + "verifyingDevice": "Проверка на устройството...", "confirmBinding": "Потвърди свързването", "associatingDevice": "Асоцииране на устройството...", @@ -749,17 +1386,17 @@ const Map bgBG = { "pairingFailedRetry": "Неуспешно сдвояване, моля опитайте отново", // 配对控制器相关 - //'connectDevice': 'Свържи устройство', + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Моля включете Bluetooth', 'deviceDisconnected': 'Устройството е прекъснато', 'readyToStartPairing': 'Готов за започване на сдвояването', 'checkingEnvironment': 'Проверка на средата...', 'ensureHeadsetOnAndPairingMode': 'Моля уверете се, че слушалките са включени и в режим на сдвояване', - //'goToBluetoothSettings': 'Отиди в Bluetooth настройките', - //'verifyingDevice': 'Проверка на устройството...', - //'confirmBinding': 'Потвърди свързването', - //'associatingDevice': 'Асоцииране на устройството...', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Установяване на сигурна връзка...', 'needManualBindingAuthCode': 'Нужен е ръчен код за разрешение на свързването...', @@ -784,6 +1421,19 @@ const Map bgBG = { 'deviceAuthorizationFailedCheckCode': 'Неуспешно разрешение на устройството, моля проверете кода за разрешение', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Изисква се ръчно активиране на Bluetooth', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Моля следвайте тези стъпки:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Включете Bluetooth: Настройки → Bluetooth → Включи', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Свържете устройство: Намерете вашето устройство в "Моите устройства" и натиснете за свързване', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Върнете се в приложението, за да продължите процеса на сдвояване', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Съвет: Можете също да задържите иконата на Bluetooth в Центъра за управление за бърз достъп до настройките на Bluetooth', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'Разбрах', // 我知道了 + //用户反馈页 "feedback": "Потребителска обратна връзка", 'feedbackInfo': 'Предоставете обратна връзка или предложения', @@ -812,6 +1462,14 @@ const Map bgBG = { "connectionFailed": "Неуспешна връзка", "retryConnection": "Опитай връзката отново", "ota_updateNow": "Актуализирай сега", + "otaVersionInfoFailed": + "Неуспешно получаване на информация за версията. Моля опитайте отново по-късно.", + "otaDeviceInfoUnavailable": + "Не може да се получи информация за устройството. Моля проверете връзката и опитайте отново.", + "otaProductInfoUnavailable": + "Не може да се идентифицира устройството. Моля свържете се отново и опитайте отново.", + "otaFirmwareVersionInvalid": + "Версията на фърмуера е необичайна. Моля свържете се отново и опитайте отново.", "keepConnectedDontClose": "Моля поддържайте устройството свързано, не затваряйте приложението", "doNotDisconnect": "Моля не прекъсвайте връзката", @@ -867,4 +1525,23 @@ const Map bgBG = { "乌尔都语": "Урду", "波斯语": "Персийски", "斯瓦希里语": "Суахили", + + // 时间相关 + "justNow": "Току-що", + "minutesAgo": "преди @minutes минути", + "yesterday": "Вчера", + // 时间扩展(图片翻译模块使用) + "daysAgo": "преди @days дни", + "hoursAgo": "преди @hours часа", + + //补充 + "insufficientIntegral": "Недостатъчно точки", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Недостатъчен баланс, моля отидете на съответната страница за презареждане.', + "recharge": 'Отиди към презареждане', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI членството изтече, моля отидете на страницата за презареждане на членство за подновяване.', }; diff --git a/lib/core/translations/language/cs_cz.dart b/lib/core/translations/language/cs_cz.dart index 252c757e4..ce5ea20bc 100644 --- a/lib/core/translations/language/cs_cz.dart +++ b/lib/core/translations/language/cs_cz.dart @@ -33,6 +33,7 @@ const Map csCZ = { "spanish": "Španělština", "portuguese": "Portugalština", "traditionalChinese": "Tradiční čínština", + "traditionalChineseHK": "Tradiční čínština (Hongkong)", "japanese": "Japonština", "korean": "Korejština", "french": "Francouzština", @@ -103,8 +104,8 @@ const Map csCZ = { "loginDeclaration": "Prohlášení Voitrans", // Voitrans 声明 "welcomeToThisApp": "Vítejte v Voitrans, přečtěte si prosím pozorně", // 欢迎使用Voitrans,请充分阅读 - // "privacyPolicy": "Zásady ochrany osobních údajů", // 《隐私政策》 - 已存在,使用现有键 - // "userAgreement": "Uživatelská smlouva", // 《用户协议》 - 已存在,使用现有键 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": ". Kliknutím na 'Souhlasím a vstoupit' označujete, že jste si výše uvedené smlouvy plně přečetli a souhlasíte s nimi. Kliknutím na 'Nesouhlasím' aplikaci ukončíte.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 "disagree": "Nesouhlasím", // 不同意 @@ -185,6 +186,208 @@ const Map csCZ = { "usageStats": "Statistika použití", "usageStatsInfo": "Zobrazit statistiku použití aplikace", "scene": "Scénáře", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Statistiky překladů", + "meetingStats": "Statistiky schůzek", + "today": "Dnes", + "thisWeek": "Tento týden", + "thisMonth": "Tento měsíc", + "history": "Historie", + "currentSessionStats": "Statistiky aktuální relace", + "translationCount": "Počet překladů", + "sessionDuration": "Trvání relace", + "characters": "Znaky", + "recordingDuration": "Délka nahrávání", + "totalApiCalls": "Celkový počet volání API", + "sessionCount": "Počet relací", + "totalCharacters": "Celkový počet znaků", + "apiCallStats": "Statistiky volání API", + "translationApi": "Překladové API", + "asr": "Rozpoznávání řeči", + "tts": "Syntéza řeči", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Statistiky objemu dat", + "sourceTextCharacters": "Znaky zdrojového textu", + "ttsTextCharacters": "Znaky textu TTS", + "effectiveAudioDuration": "Efektivní délka zvuku", + "totalSessionDuration": "Celková délka relace", + "costStats": "Statistiky nákladů", + "estimatedCost": "Odhadované náklady", + "dailyCostThreshold": "Denní limit nákladů", + "monthlyCostThreshold": "Měsíční limit nákladů", + "usageBehaviorStats": "Statistiky chování při používání", + "mostUsedLanguagePair": "Nejpoužívanější jazykový pár", + "mostUsedMode": "Nejpoužívanější režim", + "asrApiCalls": "Volání ASR", + "totalAudioDuration": "Celková délka zvuku", + "audioFileSize": "Velikost zvukového souboru", + "transcriptBytes": "Bajty přepisu", + // 通知文案 + "loadFailed": "Načtení selhalo", + "statsLoadFailedTryLater": + "Statistiky se nepodařilo načíst. Zkuste to prosím později.", + "cleanupComplete": "Čištění dokončeno", + "cleanedOldData": "Vyčištěna data starší než 90 dní", + "exportFeature": "Funkce exportu", + "exportInDevelopment": "Export dat je ve vývoji", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Dostupné balíčky', + 'remainingQuota': 'Zbývající kvóta', + 'totalQuota': 'Celková kvóta', + 'remaining': 'Zbývá', + 'featureDescription': 'Popis funkce', + // AI 功能卡片 + 'musicAndRecommendation': 'Hudba a doporučení', + 'navigationAndRoutes': 'Navigace a trasy', + 'nearbySearch': 'Hledání v okolí', + 'newsInformation': 'Zprávy', + 'communicationAssistant': 'Komunikační asistent', + // 翻译功能卡片 + 'realtimeTranscription': 'Přepis v reálném čase', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Slovníček scénářů', + 'subtitleDisplay': 'Titulky', + // 会议功能卡片 + 'meetingRecording': 'Nahrávání schůzky', + 'transcriptionAndSummary': 'Přepis a shrnutí', + 'keywordSearch': 'Hledání klíčových slov', + 'collaborationSharing': 'Spolupráce a sdílení', + // 商品名称(按ID) + 'ai_001_name': 'AI Základ 100', + 'ai_002_name': 'AI Základ 500', + 'ai_003_name': 'AI Základ 1000', + 'meet_001_name': 'Schůzky Základ 100', + 'meet_002_name': 'Schůzky Základ 500', + 'meet_003_name': 'Schůzky Základ 1000', + 'trans_001_name': 'Překlad Základ 100', + 'trans_002_name': 'Překlad Základ 500', + 'trans_003_name': 'Překlad Základ 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Zahrnuje 100 použití. Přístup k základním AI funkcím.', + 'ai_002_desc': 'Zahrnuje 500 použití. Přístup k základním AI funkcím.', + 'ai_003_desc': 'Zahrnuje 1000 použití. Přístup k základním AI funkcím.', + 'meet_001_desc': 'Zahrnuje 100 nahrávek/přepisů schůzek.', + 'meet_002_desc': 'Zahrnuje 500 nahrávek/přepisů schůzek.', + 'meet_003_desc': 'Zahrnuje 1000 nahrávek/přepisů schůzek.', + 'trans_001_desc': 'Zahrnuje 100 překladů (hlas/text).', + 'trans_002_desc': 'Zahrnuje 500 překladů (hlas/text).', + 'trans_003_desc': 'Zahrnuje 1000 překladů (hlas/text).', + +// 商品页通用页脚 + 'appNameProvider': 'Aplikace: VoiTrans · Poskytovatel: VoiTrans', + 'iapCustomerServiceQQLabel': 'Zákaznický servis IAP QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Nahrávání zvuku, přepis, hledání klíčových slov a automatické shrnutí pro zvýšení efektivity schůzek.', + 'meetingHeaderDesc2': + 'Vhodné pro obchodní schůzky, poznámky z hodin a zápisy z pohovorů.', + 'meetingAutoRecording': 'Automatické nahrávání a segmentace', + 'meetingSpeakerTagging': 'Označování mluvčích', + 'meetingLongAudioTranscription': 'Přepis dlouhého zvuku', + 'meetingKeyPointSummary': 'Extrakce klíčových bodů', + 'meetingTopicNameSearch': 'Hledání podle tématu/jména', + 'meetingTimelineJump': 'Skok na časové ose', + 'meetingExportSummary': 'Export zápisů', + 'meetingMultiPlatformShare': 'Sdílení napříč platformami', + 'meetingDisclaimer': + 'Používejte v tichém prostředí; výkon závisí na mikrofonu a síti.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Simultánní tlumočení v reálném čase a překlad textu s nízkou latencí hlasu.', + 'transHeaderDesc2': 'Vhodné pro cestování, podnikání, projevy a výuku.', + 'translateZhEn': 'Čínsko-anglický překlad', + 'lowLatencyVoiceBroadcast': 'Hlasové vysílání s nízkou latencí', + 'multiLangTextTranslation': 'Vícejazyčný textový překlad', + 'termOptimizationContextPreserve': + 'Optimalizace terminologie a zachování kontextu', + 'lexiconTourBusinessLife': 'Slovníky pro cestování/podnikání/život', + 'personalVocabularyMemory': 'Paměť osobní slovní zásoby', + 'conversationSubtitleLargeText': 'Titulky konverzace / Režim velkého textu', + 'colorHighContrast': 'Vysoký barevný kontrast', + 'transDisclaimer': + 'Výkon překladu závisí na mikrofonu, latenci sítě a okolním hluku.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Delší kvóta konverzace, více volání nástrojů, rozšířená délka kontextu.', + 'aiHeaderDesc2': 'Vhodné pro Q&A agenta, shrnutí, analýzu a provádění úkolů.', + 'musicSearchPlaybackControl': + 'Hledání v hudební knihovně a ovládání přehrávání', + 'smartPlaylistAndSimilarRecommendations': + 'Chytrý playlist a doporučení podobných skladeb', + 'routePlanningAndCongestionAvoidance': 'Plánování trasy a vyhýbání se zácpám', + 'voiceBroadcastAndWaypoints': 'Hlasové vysílání a nastavení průjezdních bodů', + 'realTimeWeatherForecast': 'Počasí v reálném čase a předpověď', + 'clothingAdviceAndTravelReminders': + 'Rady ohledně oblečení a cestovní připomínky', + 'poiSearchFoodGasParking': 'Hledání POI: stravování / benzín / parkování', + 'ratingsHoursAndDirectRoutes': 'Hodnocení, otevírací doba a přímé trasy', + 'hotNewsAndTopicOverview': 'Žhavé novinky a přehled témat', + 'longArticleSummariesAndKeyPoints': 'Shrnutí dlouhých článků a klíčové body', + 'helpCallAndSMS': 'Pomoc s hovory a SMS', + 'templatedMessagesAndScheduleReminders': 'Šablony zpráv a připomínky plánu', + 'aiDisclaimer': + 'Funkce závisí na oprávněních zařízení, dostupnosti služby a síťových podmínkách.', + + // 会员商品页 + 'benefitsOverview': 'Přehled výhod', + 'higherQuota': 'Vyšší kvóta využití', + 'lowerUnitPrice': 'Nižší jednotková cena', + 'priorityService': 'Prioritní služba', + 'exclusiveSupportChannel': 'Vyhrazený kanál podpory', + 'fastResponse': 'Rychlá odpověď na problémy', + 'eventsAndDiscounts': 'Události a slevy', + 'memberExclusiveEvents': 'Exkluzivní události pro členy', + 'longTermDiscountPlan': 'Dlouhodobý slevový plán', + 'generalPrivileges': 'Obecná privilegia', + 'earlyAccessNewFeatures': 'Přednostní přístup k novým funkcím', + 'crossDeviceSync': 'Synchronizace napříč zařízeními', + 'vipDisclaimer': + 'Skutečné výhody závisí na podrobnostech balíčku a mohou se měnit s verzemi.', + + // 新手引导 / Onboarding + 'skip': "Přeskočit", + 'next': 'Další', + 'sayLilyHint': 'Řekněte "Lily Lily" do mikrofonu', + 'imHere': 'Jsem tady~', + 'guideWelcomeWakeAI': 'Vítejte ve Voitrans! Nejprve probuďte svou AI "Lily".', + 'aiReplyCompleted': 'Lily dokončila odpověď!', + 'aiThinking': 'Lily přemýšlí...', + 'guideAwakenSuccess': 'Skvělé! Lily je vzhůru – požádejte ji o pomoc.', + 'confirmInput': 'Potvrdit vstup', + 'guideClickSendPrefix': 'Klepněte na odeslat, ', + // AI 引导步骤 + 'guideWeatherStart': 'Řekněte Lily: „Jaké je dnes počasí?“', + 'guideWeatherInput': 'Jaké je dnes počasí?', + 'guideWeatherSend': 'Lily nahlásí počasí v reálném čase', + 'guideWeatherEnd': 'Lily může hlásit počasí živě – zkuste jiné příkazy', + 'guideMusicStart': 'Řekněte Lily: „Zahraj nějaký rock“', + 'guideMusicInput': 'Zahraj nějaký rock', + 'guideMusicSend': 'Lily pro vás najde hudbu', + 'guideMusicEnd': 'Lily našla hudbu – zkuste jiné příkazy', + 'guideNavStart': 'Řekněte Lily: „Naviguj na letiště Šen-čen“', + 'guideNavInput': 'Naviguj na letiště Šen-čen', + 'guideNavSend': 'Lily naplánuje trasu', + 'guideNavEnd': 'Navigace nastavena – zkuste jiné příkazy', + 'guideMeetingStart': + 'Řekněte Lily: „Vytvoř připomínku schůzky na zítra ve 3 odpoledne“', + 'guideMeetingInput': 'Vytvoř připomínku schůzky na zítra ve 3 odpoledne', + 'guideMeetingSend': 'Lily vytvoří připomínku schůzky', + 'guideMeetingEnd': 'Připomínka vytvořena – zkuste jiné příkazy', + 'guidePhoneStart': 'Řekněte Lily: „Zavolej mámě“', + 'guidePhoneInput': 'Zavolej mámě', + 'guidePhoneSend': 'Lily uskuteční hovor', + 'guidePhoneEnd': 'Hovor zahájen – zkuste jiné příkazy', + 'guideSmsStart': 'Řekněte Lily: „Pošli tátovi SMS: Přijdu na večeři domů“', + 'guideSmsInput': 'SMS tátovi: Přijdu na večeři domů', + 'guideSmsSend': 'Lily odešle zprávu', + 'guideSmsEnd': 'Zpráva odeslána – hlasové ovládání je pohodlné', // 商务会议助手页 "startMeeting": "Začít schůzku", @@ -199,13 +402,247 @@ const Map csCZ = { 'aiSummary': 'AI shrnutí', 'meetingTranscript': 'Přepis schůzky', + // Meeting模块 - 导航和基础功能 + 'files': 'Soubory', + 'mine': 'Moje', + 'connect': 'Připojit', + 'allFiles': 'Všechny soubory', + 'searchInAllFiles': 'Hledat ve všech souborech', + 'from': 'Od', + 'sortBy': 'Seřadit podle', + 'creationTime': 'Čas vytvoření', + 'bluetoothConnection': 'Bluetooth připojení', + 'meetingReconnect': 'Znovu připojit', + 'searching': 'Hledání...', + 'searchFailed': + 'Hledání selhalo, zkontrolujte prosím, zda je Bluetooth zapnuto', + 'aiPenNotFound': 'Zařízení AI PEN nenalezeno', + 'connectedToAiPen': 'Připojeno k zařízení AI PEN', + 'checkingNewFiles': 'Kontrola nových souborů k importu', + 'startingWifi': 'Spouštění Wi-Fi...', + 'newFilesDetected': 'Detekovány nové soubory, příprava k importu', + 'noNewFiles': 'Žádné nové soubory k importu', + 'connectingWifi': 'Připojování k Wi-Fi...', + 'wifiConnected': 'Wi-Fi úspěšně připojeno', + 'downloadingFiles': 'Stahování souborů...', + 'downloadingFileProgress': + 'Celkem {total} souborů, stahování souboru {current}', + 'downloadComplete': 'Stahování dokončeno', + 'downloadCompleteInfo': + 'Stahování dokončeno, celkem {count} souborů, automatický návrat za 2 sekundy', + + // Meeting模块 - 录音功能 + 'startRecording': 'Začít nahrávání', + 'liveRecording': 'Živé nahrávání', + 'audioVideoRecording': 'Audio/Video nahrávání', + 'callRecording': 'Nahrávání hovoru', + 'importAudio': 'Importovat audio', + 'transcribing': 'Přepisování...', + 'summarizing': 'Shrnování...', + 'analyzing': 'Analyzování...', + 'summaryComplete': 'Shrnutí dokončeno', + //'generating': '正在生成...', + 'generate': 'Generovat', + 'overview': 'Přehled', + 'transcription': 'Přepis', + 'summary': 'Shrnutí', + 'mindMap': 'Myšlenková mapa', + 'editSpeaker': 'Upravit', + 'nameSpeaker': 'Pojmenovat mluvčího', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Záznamy přepisů', + 'templateCommunity': 'Komunita šablon', + 'comingSoon': 'Brzy k dispozici', + 'integration': 'Integrace', + 'voitransPrivateCloud': 'VOITRANS PRIVÁTNÍ CLOUD', + 'enabled': 'Povoleno', + 'disabled': 'Zakázáno', + 'myVoitransDevice': 'Moje zařízení VOITRANS', + 'helpAndFeedback': 'Nápověda a zpětná vazba', + 'aboutVoitrans': 'O VOITRANS', + 'meetingDays': 'Dny', + 'meetingHours': 'Hodiny', + 'voitransAiMember': 'Členství Voitrans AI', + 'unlockStarterMember': 'Odemknout Startovací členství', + 'bindDeviceToActivate': + 'Propojte zařízení Voitrans pro aktivaci Startovacího členství', + 'unlockNow': 'Odemknout nyní', + + // Meeting模块 - 会员功能 + 'comparison': 'Porovnání', + 'detailedInfo': 'Podrobné informace', + 'monthlyTranscriptionTime': 'Měsíční čas přepisu', + 'unlimited': 'Neomezeno', + 'professionalTemplates': 'Profesionální šablony', + 'limited': 'Omezeno', + 'fullTemplates': 'Plné šablony', + 'professionalTerms': 'Profesionální termíny', + 'customTemplates': 'Vlastní šablony', + 'visualMindMap': 'Vizuální myšlenková mapa', + 'speakerIdentification': 'Identifikace mluvčího', + 'aiVoiceEnhancement': 'Vylepšení hlasu AI', + 'audioImport': 'Import audia', + 'multipleExportFormats': 'Více formátů exportu', + 'professionalSummaryTemplates': 'Profesionální šablony shrnutí', + 'professionalTemplateDesc': + 'Profesionální design šablon pro zlepšení efektivity vaší práce. Přizpůsobeno podle potřeb odvětví.', + 'customTemplateDesc': + 'Můžete si přizpůsobit výzvy pro shrnutí podle svých potřeb a použít je k vygenerování požadovaných shrnutí.', + 'askAiDesc': + 'Inteligentně extrahujte hlubší informace z nahrávek, generujte datové tabulky, klíčové závěry diskusí, seznamy úkolů, e-maily se zprávami a další formátovaný obsah jedním kliknutím.', + 'visualMindMapDesc': + 'Nad rámec shrnutí – organizujte a vizualizujte klíčové body pomocí myšlenkových map pro efektivnější pochopení celého textu.', + 'templateCommunityDesc': + 'Objevujte, sdílejte a získejte inspiraci z knihovny šablon vytvořených uživateli.', + 'speakerIdentificationDesc': + 'Přepis audia bude podporovat identifikaci mluvčího, intuitivněji obnoví obsah schůzky nebo telefonního hovoru. Zároveň bude shrnutí přesnější.', + 'privateCloudSyncDesc': + 'Vaše nahrávky a přepisy budou bezpečně uloženy na vyhrazených cloudových serverech s plným šifrováním během nahrávání a stahování pro zajištění soukromí a bezpečnosti.', + 'aiVoiceEnhancementDesc': + 'Vylepšení hlasu AI podporuje více nastavení redukce šumu, inteligentně eliminuje hluk na pozadí, zvyšuje čistotu hlasu a zlepšuje kvalitu přehrávání zvuku.', + 'audioImportDesc': + 'Snadno importujte zvukové soubory z místních nebo aplikací třetích stran, jako jsou hlasové poznámky, Google Drive atd.', + 'multipleExportFormatsDesc': + 'Exportujte své zvukové nahrávky, text přepisu a shrnutí v různých formátech (TXT, PDF, JPEG), aby vyhovovaly vašim potřebám.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Systémová nastavení", //系统设置 - "vipRecharge": "Přepayka VIP členství", //会员充值 - "aiRecharge": "Prémiový člen", //AI充值 - "translationRecharge": "Přepayka překladu", //翻译充值 - "meetingAssistantRecharge": "Přepayka asistenta schůzky", //会议助手充值 - "cloudSync": "Přepayka synchronizace v cloudu", //云端同步 + "systemSettings": "Systémová nastavení", + "vipRecharge": "Přepayka VIP členství", + "aiRecharge": "Prémiový člen", + "translationRecharge": "Přepayka překladu", + "meetingAssistantRecharge": "Přepayka asistenta schůzky", + "cloudSync": "Přepayka synchronizace v cloudu", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Připojené zařízení:", "accountId": "ID účtu:", "systemSetting": "Systémová nastavení", @@ -241,12 +678,10 @@ const Map csCZ = { 'selecttimbre': 'Vybrat barvu hlasu', 'pleaseRead': 'Přečtěte prosím', 'completeRecording': 'Dokončit nahrávání', - "firmwareUpgrade": "Aktualizace firmwaru", // 固件升级 - "bleHeadsetFirmwareUpgrade": - "Aktualizace firmwaru BLE sluchátek", // BLE耳机固件版本升级 - "deviceManagement": "Správa zařízení", // 设备管理 - "manageConnectedDevices": - "Správa připojených Bluetooth zařízení", // 管理已绑定的蓝牙设备 + "firmwareUpgrade": "Aktualizace firmwaru", + "bleHeadsetFirmwareUpgrade": "Aktualizace firmwaru BLE sluchátek", + "deviceManagement": "Správa zařízení", + "manageConnectedDevices": "Správa připojených Bluetooth zařízení", //设置setting_controller // 版本更新相关 @@ -255,11 +690,10 @@ const Map csCZ = { 'networkErrorRetry': 'Chyba sítě, zkuste to prosím později', // 设备管理相关 - 'clearPairedDevices': 'Vymazat spárovaná zařízení', - 'clearPairedDevicesConfirm': - 'Opravdu chcete vymazat všechna spárovaná zařízení?', - 'clearPairedDevicesSuccess': 'Úspěšné vymazání spárovaných zařízení', - 'clearPairedDevicesFailed': 'Vymazání spárovaných zařízení selhalo', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Hlasový chat v reálném čase", @@ -268,11 +702,19 @@ const Map csCZ = { "loading": "Načítání...", //设备管理页面 - "earphone": "Sluchátka", - "voicerecorder": "Diktafon", - "notBound": "Nepřipojeno", - "deviceNotBoundYet": "Zatím není připojeno žádné zařízení", + "deviceTypeUnknown": "Neznámé zařízení", + "deviceTypeClassicBluetoothHeadset": "Klasická Bluetooth sluchátka", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth sluchátka", + "deviceTypeSmartVoiceRecorder": "Chytrý hlasový záznamník", + "deviceTypeSmartEye": "Chytré brýle", "unbind": "Odpojit", + "noDevicesBound": "Zatím žádná spárovaná zařízení", + "pleaseBindDeviceFirst": "Nejprve spárujte zařízení pro správu", + "noMacAddress": "Žádná MAC adresa", + "licenseCode": "Licenční kód", + "confirmUnbind": "Potvrdit odpojení", + "confirmUnbindMessage": "Opravdu chcete odpojit zařízení „{deviceName}“?", + "confirmUnbindAction": "Potvrdit odpojení", //Agent 模块 // agent View @@ -301,6 +743,20 @@ const Map csCZ = { "loadMoreMessages": "Načíst více zpráv...", "loadFailedClickRetry": "Načítání selhalo, klikněte pro opakování", "swipeUpForMore": "Potáhněte nahoru pro více", + "callingTool": "Pomáhám vám, prosím čekejte!", // 正在帮您,请稍等! + "voice_interrupt": "Přerušit", // 语音打断 + + // 预设提示词 + "presetMusic": "Zahraj nějakou hudbu", // 来点音乐 + "presetNavigation": "Navigace do", // 导航 + "presetWeather": "Dnešní počasí", // 今日天气 + "presetNews": "Dnešní zprávy", // 今日新闻 + "presetFood": "Jídlo v okolí", // 美食 + "playSomeMusic": "Zahraj nějakou populární hudbu", // 播放一些流行音乐 + "navigationTo": "Prosím pomozte mi navigovat do", // 导航到 + "todayWeather": "Jaké je dnes počasí?", // 今日天气 + "todayNews": "Jaké jsou dnešní zprávy?", // 今日新闻 + "nearbyFood": "Jaké dobré jídlo je v okolí?", // 美食 // Agent controller 'welcomeMessage': 'Ahoj! Jsem **Lily**, mohu vám pomoci s:\n\n' @@ -333,7 +789,7 @@ const Map csCZ = { 'submitSuccess': 'Úspěšně odesláno', 'submitFailed': 'Odeslání selhalo', 'reportSubmitted': 'Hlášení bylo odesláno, zpracujeme ho co nejdříve', - //'networkError': 'Chyba sítě, zkuste to prosím později', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Škodlivé/nebezpečné', 'pornographicVulgar': 'Pornografické/vulgární', 'misleadingAttack': 'Zavádějící útok', @@ -343,7 +799,7 @@ const Map csCZ = { 'other': 'Jiné', 'reportDescriptionHint': 'Chceme znát důvod vašeho hlášení, můžete popsat problém, se kterým jste se setkali.', - //'submit': 'Odeslat', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Generováno AI', @@ -398,6 +854,17 @@ const Map csCZ = { "friday": "Pátek", "saturday": "Sobota", "sunday": "Neděle", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Uvítací odměna", + "firstBindRewardDesc": "Získali jste odměny za propojení.", + "vipLevelLabel": "Úroveň VIP:", + "expiryLabel": "Platnost:", + "notActivated": "Neaktivováno", + "aiChatCreditsLabel": "Kredity AI chatu:", + "translationCreditsLabel": "Kredity překladu:", + "meetingCreditsLabel": "Kredity schůzky:", + "ok": "OK", + // 天气描述 "sunny": "Slunečno", "partlyCloudy": "Polojasno", @@ -433,6 +900,8 @@ const Map csCZ = { 'deleteAccount': 'Smazat účet', 'deleteAccountTips': 'Opravdu chcete trvale smazat svůj účet? Tuto operaci nelze vrátit zpět', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -453,8 +922,8 @@ const Map csCZ = { 'Vnitřní chyba serveru, zkuste to prosím později', // Profile 用户交互 -//'error': 'Chyba', -//'success': 'Úspěch', +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Komprese obrázku selhala', 'avatarUpdateFailed': 'Aktualizace avataru selhala', 'usernameCannotBeEmpty': 'Uživatelské jméno nemůže být prázdné', @@ -482,15 +951,26 @@ const Map csCZ = { // 权限管理页面 'getPermissionStatusFailed': 'Získání stavu oprávnění selhalo', 'communicationPermissions': 'Komunikační oprávnění', + 'bluetoothPermissions': 'Oprávnění Bluetooth', + 'notificationPermissions': 'Oprávnění oznámení', + 'storagePermissions': 'Oprávnění úložiště', + 'microphonePermissions': 'Oprávnění mikrofonu', + 'alarmPermissions': 'Oprávnění budíku', 'calendarPermissions': 'Oprávnění kalendáře', 'locationPermissions': 'Oprávnění polohy', 'phone': 'Telefon', 'sms': 'SMS', + 'contacts': 'Kontakty', + //'bluetooth': '蓝牙', + 'notification': 'Oznámení', + 'alarm': 'Budík', 'calendarWrite': 'Zápis do kalendáře', 'calendarFullAccess': 'Úplný přístup ke kalendáři', 'locationInfo': 'Informace o poloze', 'phonePermissionDesc': 'Používá se pro funkci telefonních hovorů', 'smsPermissionDesc': 'Používá se pro funkci odesílání SMS', + 'alarmPermissionDesc': + 'Používá se k nastavení přesných budíků pro zajištění včasného spuštění připomínek', 'calendarWritePermissionDesc': 'Používá se pro vytváření událostí a připomínek v kalendáři', 'calendarFullAccessPermissionDesc': @@ -508,18 +988,82 @@ const Map csCZ = { 'phonePermissionDetailDesc': 'Funkce telefonních hovorů potřebuje oprávnění k telefonu', 'smsPermissionDetailDesc': 'Funkce odesílání SMS potřebuje SMS oprávnění', + 'alarmPermissionDetailDesc': + 'Toto oprávnění je vyžadováno pro nastavení přesných budíků a zajištění včasného spuštění připomínek', 'calendarWritePermissionDetailDesc': 'Vytváření událostí v kalendáři potřebuje oprávnění k zápisu do kalendáře', 'calendarFullAccessPermissionDetailDesc': 'Správa událostí v kalendáři potřebuje úplné oprávnění ke kalendáři', 'locationPermissionDetailDesc': 'Získání informací o poloze potřebuje oprávnění k poloze', + 'contactsPermissionDesc': 'Používá se pro přístup k informacím o kontaktech', + 'contactsPermissionDetailDesc': + 'Funkce telefonních hovorů a SMS vyžaduje oprávnění ke kontaktům pro výběr kontaktů', + 'bluetoothPermissionDesc': + 'Používá se pro připojení a správu Bluetooth zařízení', + 'bluetoothPermissionDetailDesc': + 'Připojení k Bluetooth sluchátkům a dalším zařízením vyžaduje oprávnění Bluetooth', + 'bluetoothScanPermissionDesc': + 'Používá se pro skenování okolních Bluetooth zařízení', + 'bluetoothScanPermissionDetailDesc': + 'Skenování okolních Bluetooth zařízení vyžaduje oprávnění ke skenování Bluetooth', + 'bluetoothConnectPermissionDesc': + 'Používá se pro připojení k Bluetooth zařízením', + 'bluetoothConnectPermissionDetailDesc': + 'Připojení k Bluetooth zařízením vyžaduje oprávnění k připojení Bluetooth', + 'notificationPermissionDesc': 'Používá se pro odesílání oznámení', + 'notificationPermissionDetailDesc': + 'Aplikace potřebuje oprávnění k oznámení, aby vám mohla posílat důležitá upozornění a zprávy', 'appNeedsPermissionForFullFunction': 'Aplikace potřebuje toto oprávnění pro poskytnutí plné funkčnosti', 'permanentDenialText': 'Trvale jste odmítli oprávnění {permission}, přejděte prosím do nastavení aplikace a povolte ho', 'goToSettings': 'Přejít do nastavení', + // 权限申请 + 'bluetoothScan': 'Skenování Bluetooth', + 'bluetoothConnect': 'Připojení Bluetooth', + 'bluetoothScanExplanation': + 'Aplikace potřebuje oprávnění ke skenování Bluetooth pro vyhledávání okolních zařízení Bluetooth.', + 'bluetoothConnectExplanation': + 'Aplikace potřebuje oprávnění k připojení Bluetooth pro připojení k zařízením Bluetooth.', + 'locationForBluetoothExplanation': + 'Aplikace potřebuje oprávnění k poloze pro skenování zařízení Bluetooth.', + 'bluetoothScanPermanentDenial': + 'Oprávnění ke skenování Bluetooth bylo trvale odmítnuto, přejděte prosím do nastavení a povolte jej ručně.', + 'bluetoothConnectPermanentDenial': + 'Oprávnění k připojení Bluetooth bylo trvale odmítnuto, přejděte prosím do nastavení a povolte jej ručně.', + 'locationPermanentDenial': + 'Oprávnění k poloze bylo trvale odmítnuto, přejděte prosím do nastavení a povolte jej ručně.', + 'notificationPermission': 'Oznámení', + 'locationPermission': 'Poloha', + 'notificationPermissionExplanation': + 'Oprávnění k oznámení je vyžadováno pro zobrazení stavu přehrávání hudby.', + 'locationPermissionExplanation': + 'Oprávnění k poloze je vyžadováno pro získání aktuální polohy.', + 'notificationPermissionPermanentDenial': + 'Trvale jste odmítli oprávnění k oznámení, přejděte prosím do nastavení a povolte jej.', + 'locationPermissionPermanentDenial': + 'Trvale jste odmítli oprávnění k poloze, přejděte prosím do nastavení a povolte jej.', +//'microphonePermission': '录音', + 'storagePermission': 'Úložiště', + 'microphonePermissionExplanation': + 'Potřebujeme oprávnění k mikrofonu pro nahrávání zvukového obsahu.', + 'storagePermissionExplanation': + 'Potřebujeme oprávnění k úložišti, abyste mohli vybírat a nahrávat audio soubory.', + 'microphonePermissionPermanentDenial': + 'Oprávnění k mikrofonu bylo trvale odmítnuto. Chcete-li tuto funkci dále používat, přejděte prosím do nastavení aplikace a ručně povolte oprávnění k mikrofonu.', + 'storagePermissionPermanentDenial': + 'Oprávnění k úložišti bylo trvale odmítnuto. Chcete-li tuto funkci dále používat, přejděte prosím do nastavení aplikace a ručně povolte oprávnění k úložišti.', + + //permission_util.dart + 'permissionUtilNeed': 'Je třeba ', + 'permissionUtilPermission': ' oprávnění', + 'permissionUtilRestricted': ' Oprávnění omezeno', + 'permissionUtilRestrictedMessage': + 'Tato funkce není k dispozici nebo je na aktuálním zařízení omezena, zkontrolujte prosím nastavení zařízení nebo systémová omezení', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 'newVersionFound': 'Nalezena nová verze', // 版本更新对话框标题 'remindLater': 'Připomenout později', // 稍后提醒按钮 @@ -638,8 +1182,23 @@ const Map csCZ = { "东帝汶": "Východní Timor", "斐济": "Fidži", "所罗门群岛": "Šalamounovy ostrovy", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Překlad obrázků", + "textTranslation": "Překlad textu", + // 翻译主页 (translation_view.dart) "translationHistory": "Historie překladů", "enableRecording": "Povolit nahrávání", @@ -648,9 +1207,24 @@ const Map csCZ = { "phoneUser": "Uživatel telefonu", "selectSourceLanguage": "Vyberte zdrojový jazyk", "selectTargetLanguage": "Vyberte cílový jazyk", + "me": "Já", + "counterPart": "Protějšek", + "bluetoothCallStateError": + "Ujistěte se prosím, že jsou Bluetooth sluchátka připojena k telefonu a probíhá hovor", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Automatická detekce", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Detekce jazyka selhala", + "translationFailed": "Překlad selhal", + "pleaseInputText": "Zadejte prosím text", + "textTooLong": "Text je příliš dlouhý, maximálně 5000 znaků", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Žádná historie překladů", + "historyRecords": "Záznamy historie", + "clearResults": "Vymazat výsledky", "clearHistory": "Vymazat historii", "clearHistoryConfirm": "Opravdu chcete vymazat celou historii překladů? Tuto operaci nelze vrátit zpět.", @@ -659,7 +1233,59 @@ const Map csCZ = { "deleteSessionConfirm": "Opravdu chcete smazat všechny záznamy překladů pro tuto relaci? Tuto operaci nelze vrátit zpět.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Vybrat zdroj obrázku", + "imagePreview": "Náhled obrázku", + "translationResult": "Výsledek překladu", + "recognitionResult": "Výsledek rozpoznání", + "translatedImagePreview": "Náhled přeloženého obrázku", + "translatedImageLoadFailed": "Načtení přeloženého obrázku selhalo", + "pleaseSelectImage": "Vyberte prosím obrázek", + "imageLoadFailed": "Načtení obrázku selhalo", + "imageQuality": "Kvalita obrázku", + "maxSize": "Max. velikost", + "close": "Zavřít", + "setImageQuality": "Nastavit kvalitu obrázku", + "currentQuality": "Aktuální kvalita: @value%", + "setMaxSize": "Nastavit max. velikost", + "currentMaxSize": "Aktuální: @pxpx", + "waitingForAction": "Čekání na akci", + "pleaseSelectImageToStart": "Vyberte prosím obrázek pro zahájení", + "chooseImage": "Vybrat obrázek", + "openingCamera": "Otevírání fotoaparátu...", + "openingPhotoAlbum": "Otevírání galerie...", + "cancelled": "Zrušeno", + "userCancelledSelection": "Uživatel zrušil výběr", + "translatingImage": "Překládání obrázku", + "callingImageTranslateService": "Volání služby překladu obrázků...", + "savingRecord": "Ukládání záznamu", + "savingTranslationResult": "Ukládání výsledku překladu...", + "translationCompleted": "Překlad dokončen", + "allStepsCompleted": "Všechny kroky dokončeny", + "processingFailed": "Zpracování selhalo", + "imageProcessingOrTranslationFailed": + "Zpracování nebo překlad obrázku selhalo. Zkuste to prosím znovu.\nChyba: {error}", + "imageTooLarge": "Velikost obrázku přesahuje limit 4 MB", + "imageTooLargeHint": + "Velikost obrázku přesahuje 4 MB. Snižte kvalitu nebo rozměry a zkuste to znovu", + "emptyTranslationResult": "API překladu obrázků vrátilo prázdný výsledek", + "imageTranslationFailedTryLater": + "Překlad obrázku selhal. Problém se sítí nebo limit rychlosti. Zkuste to prosím později", + "imageTranslationApiException": + "Výjimka API překladu obrázků. Zkontrolujte síť a zkuste to znovu", + "permissionRequired": "Vyžadováno oprávnění", + "cameraPermissionRequired": + "K fotografování je vyžadováno oprávnění k fotoaparátu", + "photoAlbumPermissionRequired": + "K výběru obrázků je vyžadováno oprávnění ke galerii", + "translationDetails": "Podrobnosti překladu", + "originalImage": "Původní obrázek", + "sourceLanguage": "Zdrojový jazyk", + "targetLanguage": "Cílový jazyk", + "translationTime": "Čas překladu", + "shareInDevelopment": "Funkce sdílení je ve vývoji", + + // 翻译录音文件列表页 "translateAudioFiles": "Přeložit audio soubory", "noAudioFiles": "Žádné audio soubory", "calculating": "Výpočet...", @@ -705,7 +1331,7 @@ const Map csCZ = { "autoInputCode": "Automatické zadání kódu", "skipBinding": "Přeskočit svázání", "rescan": "Znovu skenovat", - "skip": "Přeskočit", + "verifyingDevice": "Ověřování zařízení...", "confirmBinding": "Potvrdit svázání", "associatingDevice": "Přidružování zařízení...", @@ -738,17 +1364,17 @@ const Map csCZ = { "pairingFailedRetry": "Párování selhalo, zkuste to prosím znovu", // 配对控制器相关 - //'connectDevice': 'Připojit zařízení', + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Zapněte prosím Bluetooth', 'deviceDisconnected': 'Zařízení bylo odpojeno', 'readyToStartPairing': 'Připraveno k zahájení párování', 'checkingEnvironment': 'Kontrola prostředí...', 'ensureHeadsetOnAndPairingMode': 'Ujistěte se prosím, že jsou sluchátka zapnutá a v režimu párování', - //'goToBluetoothSettings': 'Přejít do nastavení Bluetooth', - //'verifyingDevice': 'Ověřování zařízení...', - //'confirmBinding': 'Potvrdit svázání', - //'associatingDevice': 'Přidružování zařízení...', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Navazování bezpečného spojení...', 'needManualBindingAuthCode': 'Potřeba ručního autorizačního kódu pro svázání...', @@ -772,6 +1398,19 @@ const Map csCZ = { 'deviceAuthorizationFailedCheckCode': 'Autorizace zařízení selhala, zkontrolujte prosím autorizační kód', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Vyžadována ruční aktivace Bluetooth', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Postupujte prosím podle těchto kroků:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Zapnout Bluetooth: Nastavení → Bluetooth → Zapnout', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Připojit zařízení: Najděte své zařízení v "Moje zařízení" a klepněte pro připojení', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Vraťte se do aplikace pro pokračování procesu párování', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: Můžete také dlouze stisknout ikonu Bluetooth v Ovládacím centru pro rychlý přístup k nastavení Bluetooth', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'Rozumím', // 我知道了 + //用户反馈页 "feedback": "Zpětná vazba uživatele", 'feedbackInfo': 'Poskytněte zpětnou vazbu nebo návrhy', @@ -799,6 +1438,14 @@ const Map csCZ = { "connectionFailed": "Připojení selhalo", "retryConnection": "Zkusit připojení znovu", "ota_updateNow": "Aktualizovat nyní", + "otaVersionInfoFailed": + "Získání informací o verzi selhalo. Zkuste to prosím později.", + "otaDeviceInfoUnavailable": + "Nelze získat informace o zařízení. Zkontrolujte prosím připojení a zkuste to znovu.", + "otaProductInfoUnavailable": + "Nelze identifikovat zařízení. Znovu připojte a zkuste to znovu.", + "otaFirmwareVersionInvalid": + "Verze firmwaru je abnormální. Znovu připojte a zkuste to znovu.", "keepConnectedDontClose": "Udržujte prosím zařízení připojené, nezavírejte aplikaci", "doNotDisconnect": "Neodpojujte prosím", @@ -854,4 +1501,23 @@ const Map csCZ = { "乌尔都语": "Urdština", "波斯语": "Perština", "斯瓦希里语": "Svahilština", + + // 时间相关 + "justNow": "Právě teď", + "minutesAgo": "před @minutes minutami", + "yesterday": "Včera", + // 时间扩展(图片翻译模块使用) + "daysAgo": "před @days dny", + "hoursAgo": "před @hours hodinami", + + //补充 + "insufficientIntegral": "Nedostatek bodů", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Nedostatečný zůstatek, přejděte prosím na příslušnou stránku pro dobití.', + "recharge": 'Přejít na dobití', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI členství vypršelo, přejděte prosím na stránku dobíjení členství pro obnovení.', }; diff --git a/lib/core/translations/language/da_dk.dart b/lib/core/translations/language/da_dk.dart index bdd1c77b6..16a2021b3 100644 --- a/lib/core/translations/language/da_dk.dart +++ b/lib/core/translations/language/da_dk.dart @@ -33,6 +33,7 @@ const Map daDK = { "spanish": "Spansk", "portuguese": "Portugisisk", "traditionalChinese": "Traditionel kinesisk", + "traditionalChineseHK": "Traditionel kinesisk (Hongkong)", "japanese": "Japansk", "korean": "Koreansk", "french": "Fransk", @@ -102,8 +103,8 @@ const Map daDK = { "loginDeclaration": "Voitrans erklæring", // Voitrans 声明 "welcomeToThisApp": "Velkommen til Voitrans, læs venligst grundigt", // 欢迎使用Voitrans,请充分阅读 - // "privacyPolicy": "Privatlivspolitik", // 《隐私政策》 - 已存在,使用现有键 - // "userAgreement": "Brugeraftale", // 《用户协议》 - 已存在,使用现有键 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": ". Ved at klikke 'Accepter og fortsæt' angiver du, at du har læst og accepteret ovenstående aftaler fuldt ud. Ved at klikke 'Accepter ikke' vil applikationen lukke.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 "disagree": "Accepter ikke", // 不同意 @@ -185,6 +186,211 @@ const Map daDK = { "usageStats": "Brugsstatistik", "usageStatsInfo": "Se statistik for brug af appen", "scene": "Scenarier", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Oversættelsesstatistik", + "meetingStats": "Mødestatistik", + "today": "I dag", + "thisWeek": "Denne uge", + "thisMonth": "Denne måned", + "history": "Historik", + "currentSessionStats": "Nuværende session statistik", + "translationCount": "Oversættelsesantal", + "sessionDuration": "Sessionsvarighed", + "characters": "Tegn", + "recordingDuration": "Optagelsesvarighed", + "totalApiCalls": "Totale API-kald", + "sessionCount": "Sessionsantal", + "totalCharacters": "Totale tegn", + "apiCallStats": "API-kald statistik", + "translationApi": "Oversættelses-API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Datamængdestatistik", + "sourceTextCharacters": "Kildeteksttegn", + "ttsTextCharacters": "TTS Teksttegn", + "effectiveAudioDuration": "Effektiv lydvarighed", + "totalSessionDuration": "Total sessionsvarighed", + "costStats": "Omkostningsstatistik", + "estimatedCost": "Estimeret omkostning", + "dailyCostThreshold": "Daglig omkostningstærskel", + "monthlyCostThreshold": "Månedlig omkostningstærskel", + "usageBehaviorStats": "Brugsadfærdsstatistik", + "mostUsedLanguagePair": "Mest brugte sprogpar", + "mostUsedMode": "Mest brugte tilstand", + "asrApiCalls": "ASR-kald", + "totalAudioDuration": "Total lydvarighed", + "audioFileSize": "Lydfilstørrelse", + "transcriptBytes": "Udskriftbytes", + // 通知文案 + "loadFailed": "Indlæsning mislykkedes", + "statsLoadFailedTryLater": + "Statistik kunne ikke indlæses. Prøv venligst igen senere.", + "cleanupComplete": "Oprydning fuldført", + "cleanedOldData": "Rensede data ældre end 90 dage", + "exportFeature": "Eksportfunktion", + "exportInDevelopment": "Dataeksport er under udvikling", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Tilgængelige pakker', + 'remainingQuota': 'Resterende kvote', + 'totalQuota': 'Total kvote', + 'remaining': 'Resterende', + 'featureDescription': 'Funktionsbeskrivelse', + // AI 功能卡片 + 'musicAndRecommendation': 'Musik & anbefaling', + 'navigationAndRoutes': 'Navigation & ruter', + 'nearbySearch': 'Søgning i nærheden', + 'newsInformation': 'Nyheder', + 'communicationAssistant': 'Kommunikationsassistent', + // 翻译功能卡片 + 'realtimeTranscription': 'Realtidstranskription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenarieordbog', + 'subtitleDisplay': 'Undertekster', + // 会议功能卡片 + 'meetingRecording': 'Mødeoptagelse', + 'transcriptionAndSummary': 'Transkription & sammendrag', + 'keywordSearch': 'Søgeordsøgning', + 'collaborationSharing': 'Samarbejde & deling', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Møde Basic 100', + 'meet_002_name': 'Møde Basic 500', + 'meet_003_name': 'Møde Basic 1000', + 'trans_001_name': 'Oversættelse Basic 100', + 'trans_002_name': 'Oversættelse Basic 500', + 'trans_003_name': 'Oversættelse Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Inkluderer 100 anvendelser. Adgang til kerne AI-funktioner.', + 'ai_002_desc': 'Inkluderer 500 anvendelser. Adgang til kerne AI-funktioner.', + 'ai_003_desc': 'Inkluderer 1000 anvendelser. Adgang til kerne AI-funktioner.', + 'meet_001_desc': 'Inkluderer 100 mødeoptagelser/transkriptioner.', + 'meet_002_desc': 'Inkluderer 500 mødeoptagelser/transkriptioner.', + 'meet_003_desc': 'Inkluderer 1000 mødeoptagelser/transkriptioner.', + 'trans_001_desc': 'Inkluderer 100 oversættelser (stemme/tekst).', + 'trans_002_desc': 'Inkluderer 500 oversættelser (stemme/tekst).', + 'trans_003_desc': 'Inkluderer 1000 oversættelser (stemme/tekst).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Leveret af: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP kundeservice QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Lydoptagelse, transkription, søgeordsøgning og automatisk sammendrag for at øge mødeeffektiviteten.', + 'meetingHeaderDesc2': + 'Velegnet til forretningsmøder, klassenoter og interviewreferater.', + 'meetingAutoRecording': 'Automatisk optagelse og segmentering', + 'meetingSpeakerTagging': 'Taleridentifikation', + 'meetingLongAudioTranscription': 'Lang lydtranskription', + 'meetingKeyPointSummary': 'Udtrækning af hovedpunkter', + 'meetingTopicNameSearch': 'Søg efter emne/navn', + 'meetingTimelineJump': 'Tidslinjehop', + 'meetingExportSummary': 'Eksportér referat', + 'meetingMultiPlatformShare': 'Del på tværs af platforme', + 'meetingDisclaimer': + 'Brug i stille omgivelser; ydeevne afhænger af mikrofon og netværk.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Realtids simultantolkning og tekstoversættelse med lav latenstid.', + 'transHeaderDesc2': 'Velegnet til rejser, forretning, taler og undervisning.', + 'translateZhEn': 'Kinesisk-engelsk oversættelse', + 'lowLatencyVoiceBroadcast': 'Stemmeudsendelse med lav latenstid', + 'multiLangTextTranslation': 'Flersproget tekstoversættelse', + 'termOptimizationContextPreserve': + 'Terminologioptimering og kontekstbevarelse', + 'lexiconTourBusinessLife': 'Rejse/Forretning/Livsstil ordbøger', + 'personalVocabularyMemory': 'Personlig ordforrådshukommelse', + 'conversationSubtitleLargeText': 'Samtaleundertekster / Stor teksttilstand', + 'colorHighContrast': 'Høj farvekontrast', + 'transDisclaimer': + 'Oversættelsesydelse afhænger af mikrofon, netværkslatenstid og omgivende støj.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Længere samtalekvote, flere værktøjskald, udvidet kontekstlængde.', + 'aiHeaderDesc2': + 'Velegnet til agent Q&A, sammendrag, analyse og opgaveudførelse.', + 'musicSearchPlaybackControl': 'Musikbibliotekssøgning og afspilningskontrol', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playliste og lignende sanganbefalinger', + 'routePlanningAndCongestionAvoidance': + 'Ruteplanlægning og undgåelse af trængsel', + 'voiceBroadcastAndWaypoints': 'Stemmeudsendelse og waypoint-indstillinger', + 'realTimeWeatherForecast': 'Realtidsvejr og prognose', + 'clothingAdviceAndTravelReminders': 'Tøjanbefalinger og rejsepåmindelser', + 'poiSearchFoodGasParking': 'POI-søgning: spisning / benzin / parkering', + 'ratingsHoursAndDirectRoutes': 'Bedømmelser, åbningstider og direkte ruter', + 'hotNewsAndTopicOverview': 'Hot news og emneoversigt', + 'longArticleSummariesAndKeyPoints': + 'Sammendrag af lange artikler og hovedpunkter', + 'helpCallAndSMS': 'Hjælp med opkald og SMS', + 'templatedMessagesAndScheduleReminders': + 'Skabelonbeskeder og tidsplanpåmindelser', + 'aiDisclaimer': + 'Funktioner afhænger af enhedstilladelser, servicetilgængelighed og netværksforhold.', + + // 会员商品页 + 'benefitsOverview': 'Fordelsoversigt', + 'higherQuota': 'Højere brugskvote', + 'lowerUnitPrice': 'Lavere enhedspris', + 'priorityService': 'Prioritetsservice', + 'exclusiveSupportChannel': 'Dedikeret supportkanal', + 'fastResponse': 'Hurtig problemrespons', + 'eventsAndDiscounts': 'Events og rabatter', + 'memberExclusiveEvents': 'Medlemseksklusive events', + 'longTermDiscountPlan': 'Langsigtet rabatplan', + 'generalPrivileges': 'Generelle privilegier', + 'earlyAccessNewFeatures': 'Tidlig adgang til nye funktioner', + 'crossDeviceSync': 'Synkronisering på tværs af enheder', + 'vipDisclaimer': + 'Faktiske fordele afhænger af pakkedetaljerne og kan ændre sig med versioner.', + + // 新手引导 / Onboarding + 'skip': "Spring over", + 'next': 'Næste', + 'sayLilyHint': 'Sig "Lily Lily" til mikrofonen', + 'imHere': 'Jeg er her~', + 'guideWelcomeWakeAI': 'Velkommen til Voitrans! Væk først din AI "Lily".', + 'aiReplyCompleted': 'Lily har afsluttet svaret!', + 'aiThinking': 'Lily tænker...', + 'guideAwakenSuccess': 'Fantastisk! Lily er vågen – bed hende om hjælp.', + 'confirmInput': 'Bekræft input', + 'guideClickSendPrefix': 'Tryk send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Sig til Lily: "Hvordan er vejret i dag?"', + 'guideWeatherInput': 'Hvordan er vejret i dag?', + 'guideWeatherSend': 'Lily vil rapportere vejret i realtid', + 'guideWeatherEnd': 'Lily kan rapportere vejret live – prøv andre kommandoer', + 'guideMusicStart': 'Sig til Lily: "Spil noget rockmusik"', + 'guideMusicInput': 'Spil noget rockmusik', + 'guideMusicSend': 'Lily vil finde musik til dig', + 'guideMusicEnd': 'Lily fandt musik – prøv andre kommandoer', + 'guideNavStart': 'Sig til Lily: "Naviger til Shenzhen Lufthavn"', + 'guideNavInput': 'Naviger til Shenzhen Lufthavn', + 'guideNavSend': 'Lily vil planlægge ruten', + 'guideNavEnd': 'Navigation indstillet – prøv andre kommandoer', + 'guideMeetingStart': + 'Sig til Lily: "Opret en mødepåmindelse til i morgen kl. 15"', + 'guideMeetingInput': 'Opret en mødepåmindelse til i morgen kl. 15', + 'guideMeetingSend': 'Lily vil oprette en mødepåmindelse', + 'guideMeetingEnd': 'Påmindelse oprettet – prøv andre kommandoer', + 'guidePhoneStart': 'Sig til Lily: "Ring til mor"', + 'guidePhoneInput': 'Ring til mor', + 'guidePhoneSend': 'Lily vil foretage opkaldet', + 'guidePhoneEnd': 'Opkald foretaget – prøv andre kommandoer', + 'guideSmsStart': + 'Sig til Lily: "Send far en SMS: Jeg kommer hjem til middag"', + 'guideSmsInput': 'SMS far: Jeg kommer hjem til middag', + 'guideSmsSend': 'Lily vil sende beskeden', + 'guideSmsEnd': 'Besked sendt – stemmestyring er praktisk', // 商务会议助手页 "startMeeting": "Start møde", @@ -199,13 +405,247 @@ const Map daDK = { 'aiSummary': 'AI sammendrag', 'meetingTranscript': 'Mødeudskrift', + // Meeting模块 - 导航和基础功能 + 'files': 'Filer', + 'mine': 'Mine', + 'connect': 'Tilslut', + 'allFiles': 'Alle filer', + 'searchInAllFiles': 'Søg i alle filer', + 'from': 'Fra', + 'sortBy': 'Sortér efter', + 'creationTime': 'Oprettelsestid', + 'bluetoothConnection': 'Bluetooth-forbindelse', + 'meetingReconnect': 'Tilslut igen', + 'searching': 'Søger...', + 'searchFailed': + 'Søgning mislykkedes, tjek venligst om Bluetooth er aktiveret', + 'aiPenNotFound': 'AI PEN enhed ikke fundet', + 'connectedToAiPen': 'Tilsluttet til AI PEN enhed', + 'checkingNewFiles': 'Tjekker for nye filer at importere', + 'startingWifi': 'Starter Wi-Fi...', + 'newFilesDetected': 'Nye filer fundet, forbereder import', + 'noNewFiles': 'Ingen nye filer at importere', + 'connectingWifi': 'Tilslutter til Wi-Fi...', + 'wifiConnected': 'Wi-Fi tilsluttet succesfuldt', + 'downloadingFiles': 'Downloader filer...', + 'downloadingFileProgress': 'Total {total} filer, downloader fil {current}', + 'downloadComplete': 'Download fuldført', + 'downloadCompleteInfo': + 'Download fuldført, {count} filer i alt, vender automatisk tilbage om 2 sekunder', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start optagelse', + 'liveRecording': 'Live optagelse', + 'audioVideoRecording': 'Lyd/Video optagelse', + 'callRecording': 'Opkaldsoptagelse', + 'importAudio': 'Importer lyd', + 'transcribing': 'Transskriberer...', + 'summarizing': 'Sammenfatter...', + 'analyzing': 'Analyserer...', + 'summaryComplete': 'Sammendrag fuldført', + //'generating': '正在生成...', + 'generate': 'Generer', + 'overview': 'Oversigt', + 'transcription': 'Transkription', + 'summary': 'Sammendrag', + 'mindMap': 'Mindmap', + 'editSpeaker': 'Rediger', + 'nameSpeaker': 'Navngiv taler', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transkriptionsoptagelser', + 'templateCommunity': 'Skabelonfællesskab', + 'comingSoon': 'Kommer snart', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVAT SKY', + 'enabled': 'Aktiveret', + 'disabled': 'Deaktiveret', + 'myVoitransDevice': 'Min VOITRANS enhed', + 'helpAndFeedback': 'Hjælp & feedback', + 'aboutVoitrans': 'Om VOITRANS', + 'meetingDays': 'Dage', + 'meetingHours': 'Timer', + 'voitransAiMember': 'Voitrans AI Medlem', + 'unlockStarterMember': 'Lås op for Starter Medlem', + 'bindDeviceToActivate': + 'Bind Voitrans enhed for at aktivere Starter medlemskab', + 'unlockNow': 'Lås op nu', + + // Meeting模块 - 会员功能 + 'comparison': 'Sammenligning', + 'detailedInfo': 'Detaljeret information', + 'monthlyTranscriptionTime': 'Månedlig transskriptionstid', + 'unlimited': 'Ubegrænset', + 'professionalTemplates': 'Professionelle skabeloner', + 'limited': 'Begrænset', + 'fullTemplates': 'Fulde skabeloner', + 'professionalTerms': 'Fagudtryk', + 'customTemplates': 'Brugerdefinerede skabeloner', + 'visualMindMap': 'Visuelt mindmap', + 'speakerIdentification': 'Taleridentifikation', + 'aiVoiceEnhancement': 'AI stemmeforbedring', + 'audioImport': 'Lydimport', + 'multipleExportFormats': 'Flere eksportformater', + 'professionalSummaryTemplates': 'Professionelle sammendragsskabeloner', + 'professionalTemplateDesc': + 'Professionelt skabelondesign for at forbedre din arbejdseffektivitet. Tilpasset efter industribehov.', + 'customTemplateDesc': + 'Du kan tilpasse sammendragsprompter efter dine behov og bruge dem til at generere de nødvendige sammendrag.', + 'askAiDesc': + 'Udtræk intelligent dybere information fra optagelser, generer datatabeller, vigtige diskussionskonklusioner, to-do lister, rapport-e-mails og andet formateret indhold med et enkelt klik.', + 'visualMindMapDesc': + 'Ud over sammendrag - organiser og visualiser hovedpunkter med mindmaps for en mere effektiv forståelse af hele teksten.', + 'templateCommunityDesc': + 'Opdag, del og få inspiration fra skabelonbiblioteket oprettet af brugere.', + 'speakerIdentificationDesc': + 'Lydtranskription vil understøtte taleridentifikation, mere intuitivt gendanne møde- eller telefonopkaldsindhold. Samtidig vil sammendraget være mere præcist.', + 'privateCloudSyncDesc': + 'Dine optagelser og transkriptioner vil blive sikkert gemt på dedikerede cloud-servere, med fuld kryptering under upload og download for at sikre privatliv og sikkerhed.', + 'aiVoiceEnhancementDesc': + 'AI stemmeforbedring understøtter flere støjreduktionsindstillinger, eliminerer intelligent baggrundsstøj, forbedrer stemmeklarhed og forbedrer lydafspilningskvalitet.', + 'audioImportDesc': + 'Importer nemt lydfiler fra lokale eller tredjepartsapplikationer, såsom stemmenotater, Google Drive osv.', + 'multipleExportFormatsDesc': + 'Eksportér dine lydoptagelser, transkriptionstekst og sammendrag i forskellige formater (TXT, PDF, JPEG) for at opfylde dine behov.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Opgrader dit medlemskab', + 'yearlySubscription': 'Årligt abonnement', + 'monthlySubscription': 'Månedligt abonnement', + 'proMonthly': 'Pro ¥60/måned', + 'proMonthlyDesc': + '7-dages gratis prøveperiode, derefter ¥800/år. Annuller når som helst før prøveperioden slutter.', + 'sevenDayTrial': '7-dages gratis prøveperiode', + 'unlimitedMonthly': 'Ubegrænset ¥120/måned', + 'unlimitedMonthlyDesc': + '7-dages gratis prøveperiode, derefter ¥1600/år. Annuller når som helst før prøveperioden slutter.', + 'trialNote': + '*Gratis prøveperiode i 7 dage, derefter opkræves årligt, annuller når som helst.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/måned', + 'subscribe': 'Abonner', + 'unlimitedPrice': 'Ubegrænset ¥198', + 'unlimitedMonthlyPrice': '¥198/måned', + 'upgradeNote': + '*Efter opgradering af abonnement vil de resterende dage af det oprindelige abonnement automatisk blive beregnet og refunderet til din betalingskonto', + 'buyMoreTranscriptionTime': 'Køb mere transskriptionstid', + 'sixThousandMinutes': '6.000 minutter', + 'threeThousandMinutes': '3.000 minutter', + 'sixHundredMinutes': '600 minutter', + 'oneHundredTwentyMinutes': '120 minutter', + 'validityPeriod': '*Gyldighedsperiode: ', + 'validityNote': 'Aktiveret straks efter køb, gyldig i 2 år efter aktivering.', + 'purchase': 'Køb', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Vælg sammendragsskabelon', + 'useThisTemplate': 'Brug denne skabelon', + 'lastUsed': 'Sidst brugt', + 'viewAll': 'Se alle', + 'recordingLanguage': 'Optagelsessprog', + 'chineseSimplified': 'Kinesisk Mandarin (Forenklet)', + 'meetingGenerateNow': 'Generer nu', + 'keyEventsAnalyzed': 'Analyserede {count} nøglebegivenheder.', + 'aiAnalysisDesc': + 'AI-analyse identificerer nøglebegivenheder i optagelser, så du kan vælge vigtige begivenheder til AI-generering.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importerer...', + 'batchImporting': 'Batchimporterer...', + 'importingLocalRecordings': 'Importerer lokale optagelser...', + 'importFailed': 'Import af fil mislykkedes: {filePath}, fejl: {error}', + 'importSuccess': 'Importerede succesfuldt {count} lokale optagelser', + 'importError': 'Import mislykkedes: {error}', + 'pleaseSelectAudioFile': 'Vælg venligst lydfil', + 'shareAudio': 'Del mødelyd', + 'shareComplete': 'Deling fuldført!', + 'shareFailed': 'Deling mislykkedes: {error}', + 'fileProcessingFailed': + 'Filbehandling mislykkedes: {filePath}, fejl: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Ukendt sprog', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Lagerplads', + 'meetingStoragePermissionExplanation': + 'Vi har brug for adgang til lagertilladelser, så du kan vælge og uploade lydfiler.', + 'meetingStoragePermissionPermanentDenial': + 'Detekteret at du permanent har nægtet lagertilladelse. For at fortsætte med at bruge denne funktion, skal du gå til app-indstillinger for at aktivere lagertilladelse manuelt.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Del mindmap', + 'shareSuccess': 'Deling succes', + + // Meeting模块 - AI相关 + 'askAI': 'Spørg AI ...', + 'askAIPrompt': 'Hvad kan jeg hjælpe dig med i dag?', + 'continueAsk': 'Fortsæt med at spørge', + 'todoList': 'To-do liste', + 'extractConclusion': 'Udtræk konklusion', + 'generateKeyIndicators': 'Generer nøgleindikatorer', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Gen-sammendrag', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Optagelsessprog', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Kantonesisk', + 'sichuan': 'Sichuan dialekt', + 'shanghai': 'Shanghai dialekt', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Del link', + 'copyTranscript': 'Kopier transkription', + 'copySummary': 'Kopier sammendrag', + 'exportAudio': 'Eksportér lyd', + 'exportTranscript': 'Eksportér transkription', + 'shareMeetingAudio': 'Del mødelyd', + 'exportSummary': 'Eksportér sammendrag', + 'exportAs': 'Eksportér som', + 'exportingPDF': 'Eksporterer PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Navngiv nuværende taler', + 'recentlyUsedNames': 'Nyligt brugte navne', + 'applyToCurrentParagraph': 'Anvend på nuværende afsnit', + 'totalTime': 'Samlet tid', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Sammendragstalere vil blive opdateret automatisk', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Synkroniser til skyen', + 'syncToCloudTip': + 'Synkroniser automatisk dine optagelser til skyen, du kan afspille, administrere og dele optagelser gennem enhver VOITRANS APP eller VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Synkroniser VOITRANS APP', + 'transcriptionRecord': 'Transkriptionsoptagelse', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Dato & Tid', + 'location': 'Lokation', + 'attendees': 'Deltagere', + 'inputLocation': 'Indtast lokation', + 'inputAttendees': 'Indtast deltagere', + // 设置页 - "systemSettings": "Systemindstillinger", //系统设置 - "vipRecharge": "Opladning af VIP medlem", //会员充值 - "aiRecharge": "Premium medlem", //AI充值 - "translationRecharge": "Opladning af oversetning", //翻译充值 - "meetingAssistantRecharge": "Opladning af mødeassistent", //会议助手充值 - "cloudSync": "Opladning af cloud-synkronisering", //云端同步 + "systemSettings": "Systemindstillinger", + "vipRecharge": "Opladning af VIP medlem", + "aiRecharge": "Premium medlem", + "translationRecharge": "Opladning af oversetning", + "meetingAssistantRecharge": "Opladning af mødeassistent", + "cloudSync": "Opladning af cloud-synkronisering", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Tilsluttet enhed:", "accountId": "Konto-ID:", "systemSetting": "Systemindstillinger", @@ -242,12 +682,10 @@ const Map daDK = { 'selecttimbre': 'Vælg klangfarve', 'pleaseRead': 'Læs venligst', 'completeRecording': 'Fuldfør optagelse', - "firmwareUpgrade": "Firmware opgradering", // 固件升级 - "bleHeadsetFirmwareUpgrade": - "BLE øretelefon firmware opgradering", // BLE耳机固件版本升级 - "deviceManagement": "Enhedsstyring", // 设备管理 - "manageConnectedDevices": - "Administrer tilsluttede Bluetooth enheder", // 管理已绑定的蓝牙设备 + "firmwareUpgrade": "Firmware opgradering", + "bleHeadsetFirmwareUpgrade": "BLE øretelefon firmware opgradering", + "deviceManagement": "Enhedsstyring", + "manageConnectedDevices": "Administrer tilsluttede Bluetooth enheder", //设置setting_controller // 版本更新相关 @@ -256,11 +694,10 @@ const Map daDK = { 'networkErrorRetry': 'Netværksfejl, prøv venligst igen senere', // 设备管理相关 - 'clearPairedDevices': 'Ryd parrede enheder', - 'clearPairedDevicesConfirm': - 'Er du sikker på, at du vil rydde alle parrede enheder?', - 'clearPairedDevicesSuccess': 'Rydning af parrede enheder lykkedes', - 'clearPairedDevicesFailed': 'Rydning af parrede enheder mislykkedes', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Realtids stemmechat", @@ -269,11 +706,20 @@ const Map daDK = { "loading": "Indlæser...", //设备管理页面 - "earphone": "Øretelefon", - "voicerecorder": "Diktafon", - "notBound": "Ikke bundet", - "deviceNotBoundYet": "Ingen enhed bundet endnu", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Afbind", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -302,6 +748,20 @@ const Map daDK = { "loadMoreMessages": "Indlæs flere beskeder...", "loadFailedClickRetry": "Indlæsning mislykkedes, klik for at prøve igen", "swipeUpForMore": "Stryg op for mere", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Hej! Jeg er **Lily**, jeg kan hjælpe dig med:\n\n' @@ -334,7 +794,7 @@ const Map daDK = { 'submitSuccess': 'Indsendt succesfuldt', 'submitFailed': 'Indsendelse mislykkedes', 'reportSubmitted': 'Rapport indsendt, vi vil behandle det hurtigst muligt', - //'networkError': 'Netværksfejl, prøv venligst igen senere', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Skadelig/usikker', 'pornographicVulgar': 'Pornografisk/vulgær', 'misleadingAttack': 'Vildledende angreb', @@ -344,7 +804,7 @@ const Map daDK = { 'other': 'Andet', 'reportDescriptionHint': 'Vi vil gerne vide årsagen til din rapport, du kan beskrive problemet du stødte på.', - //'submit': 'Indsend', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Genereret af AI', @@ -399,6 +859,17 @@ const Map daDK = { "friday": "Fredag", "saturday": "Lørdag", "sunday": "Søndag", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Solrigt", "partlyCloudy": "Delvis skyet", @@ -434,6 +905,8 @@ const Map daDK = { 'deleteAccount': 'Slet konto', 'deleteAccountTips': 'Er du sikker på, at du vil slette din konto permanent? Denne handling kan ikke fortrydes', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -454,8 +927,8 @@ const Map daDK = { 'Server intern fejl, prøv venligst igen senere', // Profile 用户交互 -//'error': 'Fejl', -//'success': 'Succes', +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Billedkomprimering mislykkedes', 'avatarUpdateFailed': 'Avatar opdatering mislykkedes', 'usernameCannotBeEmpty': 'Brugernavn kan ikke være tomt', @@ -483,15 +956,26 @@ const Map daDK = { // 权限管理页面 'getPermissionStatusFailed': 'Hentning af tilladelsestatus mislykkedes', 'communicationPermissions': 'Kommunikationstilladelser', + 'bluetoothPermissions': 'Bluetooth-tilladelser', + 'notificationPermissions': 'Notifikationstilladelser', + 'storagePermissions': 'Lagertilladelser', + 'microphonePermissions': 'Mikrofontilladelser', + 'alarmPermissions': 'Alarmtilladelser', 'calendarPermissions': 'Kalendertilladelser', 'locationPermissions': 'Placeringstilladelser', 'phone': 'Telefon', 'sms': 'SMS', + 'contacts': 'Kontakter', + //'bluetooth': '蓝牙', + 'notification': 'Notifikation', + 'alarm': 'Alarm', 'calendarWrite': 'Kalender skrivning', 'calendarFullAccess': 'Kalender fuld adgang', 'locationInfo': 'Placeringsinformation', 'phonePermissionDesc': 'Bruges til telefonopkaldsfunktion', 'smsPermissionDesc': 'Bruges til SMS-sendefunktion', + 'alarmPermissionDesc': + 'Bruges til at indstille præcise alarmer for at sikre, at påmindelser udløses til tiden', 'calendarWritePermissionDesc': 'Bruges til at oprette kalenderbegivenheder og påmindelser', 'calendarFullAccessPermissionDesc': @@ -508,18 +992,82 @@ const Map daDK = { 'phonePermissionDetailDesc': 'Telefonopkaldsfunktion har brug for telefontilladelse', 'smsPermissionDetailDesc': 'SMS-sendefunktion har brug for SMS-tilladelse', + 'alarmPermissionDetailDesc': + 'Denne tilladelse er påkrævet for at indstille præcise alarmer og sikre, at påmindelser udløses til tiden', 'calendarWritePermissionDetailDesc': 'Oprettelse af kalenderbegivenheder har brug for kalender skrivetilladelse', 'calendarFullAccessPermissionDetailDesc': 'Administration af kalenderbegivenheder har brug for fuld kalendertilladelse', 'locationPermissionDetailDesc': 'Hentning af placeringsinformation har brug for placeringstilladelse', + 'contactsPermissionDesc': 'Bruges til at få adgang til kontaktoplysninger', + 'contactsPermissionDetailDesc': + 'Telefonopkald og SMS-funktionalitet kræver kontakttilladelse for at vælge kontakter', + 'bluetoothPermissionDesc': + 'Bruges til at forbinde og administrere Bluetooth-enheder', + 'bluetoothPermissionDetailDesc': + 'Forbindelse til Bluetooth-hovedtelefoner og andre enheder kræver Bluetooth-tilladelse', + 'bluetoothScanPermissionDesc': + 'Bruges til at scanne efter Bluetooth-enheder i nærheden', + 'bluetoothScanPermissionDetailDesc': + 'Scanning efter Bluetooth-enheder i nærheden kræver Bluetooth-scanningstilladelse', + 'bluetoothConnectPermissionDesc': + 'Bruges til at forbinde til Bluetooth-enheder', + 'bluetoothConnectPermissionDetailDesc': + 'Forbindelse til Bluetooth-enheder kræver Bluetooth-forbindelsestilladelse', + 'notificationPermissionDesc': 'Bruges til at sende notifikationsbeskeder', + 'notificationPermissionDetailDesc': + 'Appen har brug for notifikationstilladelse for at sende dig vigtige alarmer og beskeder', 'appNeedsPermissionForFullFunction': 'Appen har brug for denne tilladelse for at give fuld funktionalitet', 'permanentDenialText': 'Du har permanent nægtet {permission} tilladelse, gå venligst til app-indstillinger for at aktivere det', 'goToSettings': 'Gå til indstillinger', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Forbindelse', + 'bluetoothScanExplanation': + 'Appen har brug for Bluetooth-scanningstilladelse til at scanne efter Bluetooth-enheder i nærheden.', + 'bluetoothConnectExplanation': + 'Appen har brug for Bluetooth-forbindelsestilladelse til at forbinde til Bluetooth-enheder.', + 'locationForBluetoothExplanation': + 'Appen har brug for placeringstilladelse til at scanne efter Bluetooth-enheder.', + 'bluetoothScanPermanentDenial': + 'Bluetooth-scanningstilladelse er blevet permanent afvist, gå venligst til indstillinger for at aktivere det manuelt.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth-forbindelsestilladelse er blevet permanent afvist, gå venligst til indstillinger for at aktivere det manuelt.', + 'locationPermanentDenial': + 'Placeringstilladelse er blevet permanent afvist, gå venligst til indstillinger for at aktivere det manuelt.', + 'notificationPermission': 'Notifikation', + 'locationPermission': 'Placering', + 'notificationPermissionExplanation': + 'Notifikationstilladelse er påkrævet for at vise musikafspilningsstatus.', + 'locationPermissionExplanation': + 'Placeringstilladelse er påkrævet for at få den aktuelle placering.', + 'notificationPermissionPermanentDenial': + 'Du har permanent afvist notifikationstilladelse, gå venligst til indstillinger for at aktivere det.', + 'locationPermissionPermanentDenial': + 'Du har permanent afvist placeringstilladelse, gå venligst til indstillinger for at aktivere det.', +//'microphonePermission': '录音', + 'storagePermission': 'Lagerplads', + 'microphonePermissionExplanation': + 'Vi har brug for mikrofontilladelse til at optage lydindhold.', + 'storagePermissionExplanation': + 'Vi har brug for lagertilladelse, så du kan vælge og uploade lydfiler.', + 'microphonePermissionPermanentDenial': + 'Mikrofontilladelse er blevet permanent afvist. For at fortsætte med at bruge denne funktion, skal du gå til app-indstillinger for at aktivere mikrofontilladelse manuelt.', + 'storagePermissionPermanentDenial': + 'Lagertilladelse er blevet permanent afvist. For at fortsætte med at bruge denne funktion, skal du gå til app-indstillinger for at aktivere lagertilladelse manuelt.', + + //permission_util.dart + 'permissionUtilNeed': 'Mangler ', + 'permissionUtilPermission': ' tilladelse', + 'permissionUtilRestricted': ' tilladelse begrænset', + 'permissionUtilRestrictedMessage': + 'Denne funktion er utilgængelig eller begrænset på den nuværende enhed, tjek venligst enhedsindstillinger eller systembegrænsninger', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 'newVersionFound': 'Ny version fundet', // 版本更新对话框标题 'remindLater': 'Påmind senere', // 稍后提醒按钮 @@ -638,8 +1186,23 @@ const Map daDK = { "东帝汶": "Østtimor", "斐济": "Fiji", "所罗门群岛": "Salomonøerne", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Oversættelseshistorik", "enableRecording": "Aktiver optagelse", @@ -648,9 +1211,24 @@ const Map daDK = { "phoneUser": "Telefon bruger", "selectSourceLanguage": "Vælg kildesprog", "selectTargetLanguage": "Vælg målsprog", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Ingen oversættelseshistorik", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Ryd historik", "clearHistoryConfirm": "Er du sikker på, at du vil rydde hele oversættelseshistorikken? Denne handling kan ikke fortrydes.", @@ -659,7 +1237,58 @@ const Map daDK = { "deleteSessionConfirm": "Er du sikker på, at du vil slette alle oversættelsesoptegnelser for denne session? Denne handling kan ikke fortrydes.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Oversæt lydfiler", "noAudioFiles": "Ingen lydfiler", "calculating": "Beregner...", @@ -705,7 +1334,7 @@ const Map daDK = { "autoInputCode": "Automatisk kodeinput", "skipBinding": "Spring binding over", "rescan": "Scan igen", - "skip": "Spring over", + "verifyingDevice": "Verificerer enhed...", "confirmBinding": "Bekræft binding", "associatingDevice": "Associerer enhed...", @@ -738,17 +1367,17 @@ const Map daDK = { "pairingFailedRetry": "Parring mislykkedes, prøv venligst igen", // 配对控制器相关 - //'connectDevice': 'Tilslut enhed', + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Aktiver venligst Bluetooth', 'deviceDisconnected': 'Enhed afbrudt', 'readyToStartPairing': 'Klar til at starte parring', 'checkingEnvironment': 'Kontrollerer miljø...', 'ensureHeadsetOnAndPairingMode': 'Sørg venligst for at øretelefonerne er tændt og i parringstilstand', - //'goToBluetoothSettings': 'Gå til Bluetooth indstillinger', - //'verifyingDevice': 'Verificerer enhed...', - //'confirmBinding': 'Bekræft binding', - //'associatingDevice': 'Associerer enhed...', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Etablerer sikker forbindelse...', 'needManualBindingAuthCode': 'Har brug for manuel bindingsautorisationskode...', @@ -771,6 +1400,19 @@ const Map daDK = { 'deviceAuthorizationFailedCheckCode': 'Enhedsautorisation mislykkedes, tjek venligst autorisationskode', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manuel Bluetooth-aktivering påkrævet', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Følg venligst disse trin:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Aktiver Bluetooth: Indstillinger → Bluetooth → Tænd', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Tilslut enhed: Find din enhed i "Mine enheder" og tryk for at tilslutte', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Vend tilbage til appen for at fortsætte parringsprocessen', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: Du kan også trykke længe på Bluetooth-ikonet i Kontrolcenter for hurtigt at få adgang til Bluetooth-indstillinger', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'Jeg ved det', // 我知道了 + //用户反馈页 "feedback": "Brugerfeedback", 'feedbackInfo': 'Giv feedback eller forslag', @@ -798,6 +1440,14 @@ const Map daDK = { "connectionFailed": "Forbindelse mislykkedes", "retryConnection": "Prøv forbindelse igen", "ota_updateNow": "Opdater nu", + "otaVersionInfoFailed": + "Kunne ikke hente versionsoplysninger. Prøv venligst igen senere.", + "otaDeviceInfoUnavailable": + "Kunne ikke hente enhedsoplysninger. Tjek venligst forbindelsen og prøv igen.", + "otaProductInfoUnavailable": + "Kunne ikke identificere enheden. Tilslut igen og prøv igen.", + "otaFirmwareVersionInvalid": + "Firmware version er unormal. Tilslut igen og prøv igen.", "keepConnectedDontClose": "Hold venligst enheden tilsluttet, luk ikke appen", "doNotDisconnect": "Afbryd venligst ikke forbindelsen", "charging": "Oplader", @@ -852,4 +1502,23 @@ const Map daDK = { "乌尔都语": "Urdu", "波斯语": "Persisk", "斯瓦希里语": "Swahili", + + // 时间相关 + "justNow": "Lige nu", + "minutesAgo": "for @minutes minutter siden", + "yesterday": "I går", + // 时间扩展(图片翻译模块使用) + "daysAgo": "for @days dage siden", + "hoursAgo": "for @hours timer siden", + + //补充 + "insufficientIntegral": "Utilstrækkelige point", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Utilstrækkelig saldo, gå venligst til den tilsvarende genopfyldningsside for at genopfylde.', + "recharge": 'Gå til genopfyldning', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI medlemskab udløbet, gå venligst til medlemskabsgenopfyldningssiden for at forny.', }; diff --git a/lib/core/translations/language/de_de.dart b/lib/core/translations/language/de_de.dart index ccc28727f..d303138e1 100644 --- a/lib/core/translations/language/de_de.dart +++ b/lib/core/translations/language/de_de.dart @@ -33,6 +33,7 @@ const Map deDE = { "spanish": "Spanisch", "portuguese": "Portugiesisch", "traditionalChinese": "Traditionelles Chinesisch", + "traditionalChineseHK": "Traditionelles Chinesisch (Hongkong)", "japanese": "Japanisch", "korean": "Koreanisch", "french": "Französisch", @@ -104,8 +105,8 @@ const Map deDE = { "loginDeclaration": "Voitrans Erklärung", // Voitrans 声明 "welcomeToThisApp": "Willkommen bei Voitrans, bitte lesen Sie sorgfältig", // 欢迎使用Voitrans,请充分阅读 - // "privacyPolicy": "Datenschutzrichtlinie", // 《隐私政策》 - 已存在,使用现有键 - // "userAgreement": "Nutzungsvereinbarung", // 《用户协议》 - 已存在,使用现有键 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": ". Durch Klicken auf 'Zustimmen und Eingeben' zeigen Sie an, dass Sie die oben genannten Vereinbarungen vollständig gelesen und ihnen zugestimmt haben. Durch Klicken auf 'Nicht zustimmen' wird die Anwendung beendet.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 "disagree": "Nicht zustimmen", // 不同意 @@ -190,6 +191,212 @@ const Map deDE = { "usageStatsInfo": "Sehen Sie sich die Statistiken für die Benutzung der App an", "scene": "Szenarien", + // 用量统计模块 + "aiChat": "KI-Chat", + "translationStats": "Übersetzungsstatistik", + "meetingStats": "Meeting-Statistik", + "today": "Heute", + "thisWeek": "Diese Woche", + "thisMonth": "Diesen Monat", + "history": "Verlauf", + "currentSessionStats": "Aktuelle Sitzungsstatistik", + "translationCount": "Anzahl Übersetzungen", + "sessionDuration": "Sitzungsdauer", + "characters": "Zeichen", + "recordingDuration": "Aufnahmedauer", + "totalApiCalls": "Gesamte API-Aufrufe", + "sessionCount": "Anzahl Sitzungen", + "totalCharacters": "Gesamtzeichen", + "apiCallStats": "API-Aufruf-Statistik", + "translationApi": "Übersetzungs-API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Datenvolumen-Statistik", + "sourceTextCharacters": "Quelltext-Zeichen", + "ttsTextCharacters": "TTS-Text-Zeichen", + "effectiveAudioDuration": "Effektive Audiodauer", + "totalSessionDuration": "Gesamte Sitzungsdauer", + "costStats": "Kostenstatistik", + "estimatedCost": "Geschätzte Kosten", + "dailyCostThreshold": "Tägliche Kostenschwelle", + "monthlyCostThreshold": "Monatliche Kostenschwelle", + "usageBehaviorStats": "Nutzungsverhaltensstatistik", + "mostUsedLanguagePair": "Meistgenutztes Sprachpaar", + "mostUsedMode": "Meistgenutzter Modus", + "asrApiCalls": "ASR-Aufrufe", + "totalAudioDuration": "Gesamte Audiodauer", + "audioFileSize": "Audiodateigröße", + "transcriptBytes": "Transkript-Bytes", + // 通知文案 + "loadFailed": "Laden fehlgeschlagen", + "statsLoadFailedTryLater": + "Statistik konnte nicht geladen werden. Bitte versuchen Sie es später erneut.", + "cleanupComplete": "Bereinigung abgeschlossen", + "cleanedOldData": "Daten älter als 90 Tage bereinigt", + "exportFeature": "Exportfunktion", + "exportInDevelopment": "Datenexport ist in Entwicklung", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Verfügbare Pakete', + 'remainingQuota': 'Verbleibendes Kontingent', + 'totalQuota': 'Gesamtkontingent', + 'remaining': 'Verbleibend', + 'featureDescription': 'Funktionsbeschreibung', + // AI 功能卡片 + 'musicAndRecommendation': 'Musik & Empfehlung', + 'navigationAndRoutes': 'Navigation & Routen', + 'nearbySearch': 'Suche in der Nähe', + 'newsInformation': 'Nachrichten', + 'communicationAssistant': 'Kommunikationsassistent', + // 翻译功能卡片 + 'realtimeTranscription': 'Echtzeit-Transkription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Szenarien-Glossar', + 'subtitleDisplay': 'Untertitel', + // 会议功能卡片 + 'meetingRecording': 'Meeting-Aufnahme', + 'transcriptionAndSummary': 'Transkription & Zusammenfassung', + 'keywordSearch': 'Stichwortsuche', + 'collaborationSharing': 'Zusammenarbeit & Teilen', + // 商品名称(按ID) + 'ai_001_name': 'KI Basic 100', + 'ai_002_name': 'KI Basic 500', + 'ai_003_name': 'KI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Übersetzung Basis 100', + 'trans_002_name': 'Übersetzung Basis 500', + 'trans_003_name': 'Übersetzung Basis 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Enthält 100 Nutzungen. Zugriff auf Kern-KI-Funktionen.', + 'ai_002_desc': 'Enthält 500 Nutzungen. Zugriff auf Kern-KI-Funktionen.', + 'ai_003_desc': 'Enthält 1000 Nutzungen. Zugriff auf Kern-KI-Funktionen.', + 'meet_001_desc': 'Enthält 100 Meeting-Aufnahmen/Transkriptionen.', + 'meet_002_desc': 'Enthält 500 Meeting-Aufnahmen/Transkriptionen.', + 'meet_003_desc': 'Enthält 1000 Meeting-Aufnahmen/Transkriptionen.', + 'trans_001_desc': 'Enthält 100 Übersetzungen (Stimme/Text).', + 'trans_002_desc': 'Enthält 500 Übersetzungen (Stimme/Text).', + 'trans_003_desc': 'Enthält 1000 Übersetzungen (Stimme/Text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Echtzeit-Simultandolmetschen und Textübersetzung mit Sprachwiedergabe bei niedriger Latenz.', + 'transHeaderDesc2': 'Geeignet für Reisen, Geschäft, Reden und Lehre.', + 'translateZhEn': 'Chinesisch-Englisch-Übersetzung', + 'lowLatencyVoiceBroadcast': 'Sprachübertragung mit niedriger Latenz', + 'multiLangTextTranslation': 'Mehrsprachige Textübersetzung', + 'termOptimizationContextPreserve': + 'Terminologieoptimierung und Kontextwahrung', + 'lexiconTourBusinessLife': 'Lexika für Reise/Geschäft/Alltag', + 'personalVocabularyMemory': 'Persönlicher Wortschatzspeicher', + 'conversationSubtitleLargeText': 'Konversationsuntertitel / Großtext-Modus', + 'colorHighContrast': 'Hoher Farbkontrast', + 'transDisclaimer': + 'Die Übersetzungsleistung hängt von Mikrofon, Netzwerklatenz und Umgebungsgeräuschen ab.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Übersicht der Vorteile', + 'higherQuota': 'Höheres Nutzungskontingent', + 'lowerUnitPrice': 'Niedrigerer Stückpreis', + 'priorityService': 'Priorisierter Service', + 'exclusiveSupportChannel': 'Dedizierter Supportkanal', + 'fastResponse': 'Schnelle Problemreaktion', + 'eventsAndDiscounts': 'Veranstaltungen und Rabatte', + 'memberExclusiveEvents': 'Exklusive Events für Mitglieder', + 'longTermDiscountPlan': 'Langfristiger Rabattplan', + 'generalPrivileges': 'Allgemeine Privilegien', + 'earlyAccessNewFeatures': 'Frühzeitiger Zugriff auf neue Funktionen', + 'crossDeviceSync': 'Geräteübergreifende Synchronisierung', + 'vipDisclaimer': + 'Die tatsächlichen Vorteile hängen von den Paketdetails ab und können sich mit Versionen ändern.', + + // 新手引导 / Onboarding + 'skip': "Überspringen", + 'next': 'Weiter', + 'sayLilyHint': "Sagen Sie \"Lily Lily\" ins Mikrofon", + 'imHere': "Ich bin hier~", + 'guideWelcomeWakeAI': + "Willkommen bei Voitrans! Wecken Sie zuerst Ihre KI „Lily“.", + 'aiReplyCompleted': "Lily hat die Antwort beendet!", + 'aiThinking': "Lily denkt nach...", + 'guideAwakenSuccess': "Großartig! Lily ist wach – bitten Sie sie um Hilfe.", + 'confirmInput': "Eingabe bestätigen", + 'guideClickSendPrefix': "Senden tippen, ", + // AI 引导步骤 + 'guideWeatherStart': "Sagen Sie Lily: „Wie ist das Wetter heute?“", + 'guideWeatherInput': "Wie ist das Wetter heute?", + 'guideWeatherSend': "Lily wird das Wetter in Echtzeit berichten", + 'guideWeatherEnd': + "Lily kann das Wetter live berichten – versuchen Sie andere Befehle", + 'guideMusicStart': "Sagen Sie Lily: „Spiel etwas Rockmusik“", + 'guideMusicInput': "Spiel etwas Rockmusik", + 'guideMusicSend': "Lily wird Musik für Sie finden", + 'guideMusicEnd': "Lily hat Musik gefunden – versuchen Sie andere Befehle", + 'guideNavStart': "Sagen Sie Lily: „Navigiere zum Flughafen Shenzhen“", + 'guideNavInput': "Navigiere zum Flughafen Shenzhen", + 'guideNavSend': "Lily wird die Route planen", + 'guideNavEnd': "Navigation eingestellt – versuchen Sie andere Befehle", + 'guideMeetingStart': + "Sagen Sie Lily: „Erstelle eine Meeting-Erinnerung für morgen 15 Uhr“", + 'guideMeetingInput': "Erstelle eine Meeting-Erinnerung für morgen 15 Uhr", + 'guideMeetingSend': "Lily wird eine Meeting-Erinnerung erstellen", + 'guideMeetingEnd': "Erinnerung erstellt – versuchen Sie andere Befehle", + 'guidePhoneStart': "Sagen Sie Lily: „Ruf Mama an“", + 'guidePhoneInput': "Ruf Mama an", + 'guidePhoneSend': "Lily wird den Anruf tätigen", + 'guidePhoneEnd': "Anruf getätigt – versuchen Sie andere Befehle", + 'guideSmsStart': + "Sagen Sie Lily: „Sende Papa eine SMS: Ich komme zum Abendessen“", + 'guideSmsInput': "SMS an Papa: Ich komme zum Abendessen", + 'guideSmsSend': "Lily wird die Nachricht senden", + 'guideSmsEnd': "Nachricht gesendet – Sprachsteuerung ist bequem", // 商务会议助手页 "startMeeting": "Meeting starten", @@ -204,13 +411,249 @@ const Map deDE = { 'aiSummary': 'KI-Zusammenfassung', 'meetingTranscript': 'Meeting-Transkript', + // Meeting模块 - 导航和基础功能 + 'files': 'Dateien', + 'mine': 'Mein', + 'connect': 'Verbinden', + 'allFiles': 'Alle Dateien', + 'searchInAllFiles': 'In allen Dateien suchen', + 'from': 'Von', + 'sortBy': 'Sortieren nach', + 'creationTime': 'Erstellungszeit', + 'bluetoothConnection': 'Bluetooth-Verbindung', + 'meetingReconnect': 'Erneut verbinden', + 'searching': 'Suche läuft...', + 'searchFailed': + 'Suche fehlgeschlagen, bitte prüfen Sie, ob Bluetooth aktiviert ist', + 'aiPenNotFound': 'AI PEN-Gerät nicht gefunden', + 'connectedToAiPen': 'Mit AI PEN-Gerät verbunden', + 'checkingNewFiles': 'Prüfe auf neue Dateien zum Importieren', + 'startingWifi': 'Starte WLAN...', + 'newFilesDetected': 'Neue Dateien erkannt, Import wird vorbereitet', + 'noNewFiles': 'Keine neuen Dateien zum Importieren', + 'connectingWifi': 'Verbinde mit WLAN...', + 'wifiConnected': 'WLAN erfolgreich verbunden', + 'downloadingFiles': 'Dateien werden heruntergeladen...', + 'downloadingFileProgress': + 'Gesamt {total} Dateien, lade Datei {current} herunter', + 'downloadComplete': 'Download abgeschlossen', + 'downloadCompleteInfo': + 'Download abgeschlossen, insgesamt {count} Dateien, automatische Rückkehr in 2 Sekunden', + + // Meeting模块 - 录音功能 + 'startRecording': 'Aufnahme starten', + 'liveRecording': 'Live-Aufnahme', + 'audioVideoRecording': 'Audio-/Video-Aufnahme', + 'callRecording': 'Anruf-Aufnahme', + 'importAudio': 'Audio importieren', + 'transcribing': 'Transkribieren...', + 'summarizing': 'Zusammenfassen...', + 'analyzing': 'Analysieren...', + 'summaryComplete': 'Zusammenfassung abgeschlossen', + //'generating': '正在生成...', + 'generate': 'Generieren', + 'overview': 'Übersicht', + 'transcription': 'Transkription', + 'summary': 'Zusammenfassung', + 'mindMap': 'Mindmap', + 'editSpeaker': 'Bearbeiten', + 'nameSpeaker': 'Sprecher benennen', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transkriptionsaufzeichnungen', + 'templateCommunity': 'Vorlagen-Community', + 'comingSoon': 'Demnächst verfügbar', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Aktiviert', + 'disabled': 'Deaktiviert', + 'myVoitransDevice': 'Mein VOITRANS-Gerät', + 'helpAndFeedback': 'Hilfe & Feedback', + 'aboutVoitrans': 'Über VOITRANS', + 'meetingDays': 'Tage', + 'meetingHours': 'Std.', + 'voitransAiMember': 'Voitrans AI-Mitglied', + 'unlockStarterMember': 'Starter-Mitgliedschaft freischalten', + 'bindDeviceToActivate': + 'Voitrans-Gerät binden, um Starter-Mitgliedschaft zu aktivieren', + 'unlockNow': 'Jetzt freischalten', + + // Meeting模块 - 会员功能 + 'comparison': 'Vergleich', + 'detailedInfo': 'Detaillierte Informationen', + 'monthlyTranscriptionTime': 'Monatliche Transkriptionszeit', + 'unlimited': 'Unbegrenzt', + 'professionalTemplates': 'Professionelle Vorlagen', + 'limited': 'Begrenzt', + 'fullTemplates': 'Alle Vorlagen', + 'professionalTerms': 'Professionelle Begriffe', + 'customTemplates': 'Benutzerdefinierte Vorlagen', + 'visualMindMap': 'Visuelle Mindmap', + 'speakerIdentification': 'Sprecheridentifikation', + 'aiVoiceEnhancement': 'KI-Sprachverbesserung', + 'audioImport': 'Audio-Import', + 'multipleExportFormats': 'Mehrere Exportformate', + 'professionalSummaryTemplates': 'Professionelle Zusammenfassungsvorlagen', + 'professionalTemplateDesc': + 'Professionelles Vorlagendesign zur Verbesserung Ihrer Arbeitseffizienz. Angepasst an Branchenanforderungen.', + 'customTemplateDesc': + 'Sie können Zusammenfassungsvorlagen nach Ihren Bedürfnissen anpassen und verwenden.', + 'askAiDesc': + 'Extrahieren Sie intelligent tiefere Informationen aus Aufnahmen, generieren Sie Datentabellen, wichtige Diskussionsergebnisse, To-Do-Listen, Bericht-E-Mails und andere formatierte Inhalte mit einem Klick.', + 'visualMindMapDesc': + 'Jenseits von Zusammenfassungen - organisieren und visualisieren Sie wichtige Punkte mit Mindmaps für ein effektiveres Verständnis des gesamten Textes.', + 'templateCommunityDesc': + 'Entdecken, teilen und holen Sie sich Inspiration aus der von Benutzern erstellten Vorlagenbibliothek.', + 'speakerIdentificationDesc': + 'Die Audiotranskription unterstützt die Sprecheridentifikation, um Meeting- oder Telefoninhalte intuitiver wiederherzustellen. Gleichzeitig wird die Zusammenfassung genauer.', + 'privateCloudSyncDesc': + 'Ihre Aufnahmen und Transkriptionen werden sicher auf dedizierten Cloud-Servern gespeichert, mit vollständiger Verschlüsselung während des Uploads und Downloads, um Datenschutz und Sicherheit zu gewährleisten.', + 'aiVoiceEnhancementDesc': + 'KI-Sprachverbesserung unterstützt mehrere Rauschunterdrückungseinstellungen, eliminiert intelligent Hintergrundgeräusche, verbessert die Sprachklarheit und die Audiowiedergabequalität.', + 'audioImportDesc': + 'Importieren Sie einfach Audiodateien aus lokalen oder Drittanbieter-Anwendungen wie Sprachmemos, Google Drive usw.', + 'multipleExportFormatsDesc': + 'Exportieren Sie Ihre Audioaufnahmen, Transkriptionstexte und Zusammenfassungen in verschiedenen Formaten (TXT, PDF, JPEG), um Ihre Anforderungen zu erfüllen.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Mitgliedschaft upgraden', + 'yearlySubscription': 'Jahresabo', + 'monthlySubscription': 'Monatsabo', + 'proMonthly': 'Pro ¥60/Monat', + 'proMonthlyDesc': + '7 Tage kostenlos testen, dann ¥800/Jahr. Jederzeit vor Ablauf kündbar.', + 'sevenDayTrial': '7 Tage kostenlos testen', + 'unlimitedMonthly': 'Unlimited ¥120/Monat', + 'unlimitedMonthlyDesc': + '7 Tage kostenlos testen, dann ¥1600/Jahr. Jederzeit vor Ablauf kündbar.', + 'trialNote': + '*7 Tage kostenlos testen, dann jährliche Abrechnung, jederzeit kündbar.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/Monat', + 'subscribe': 'Abonnieren', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/Monat', + 'upgradeNote': + '*Nach dem Upgrade wird die verbleibende Zeit des ursprünglichen Abonnements automatisch berechnet und auf Ihr Zahlungskonto zurückerstattet', + 'buyMoreTranscriptionTime': 'Mehr Transkriptionszeit kaufen', + 'sixThousandMinutes': '6.000 Minuten', + 'threeThousandMinutes': '3.000 Minuten', + 'sixHundredMinutes': '600 Minuten', + 'oneHundredTwentyMinutes': '120 Minuten', + 'validityPeriod': '*Gültigkeitsdauer: ', + 'validityNote': + 'Sofort nach Kauf aktiviert, 2 Jahre nach Aktivierung gültig.', + 'purchase': 'Kaufen', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Zusammenfassungsvorlage auswählen', + 'useThisTemplate': 'Diese Vorlage verwenden', + 'lastUsed': 'Zuletzt verwendet', + 'viewAll': 'Alle anzeigen', + 'recordingLanguage': 'Aufnahmesprache', + 'chineseSimplified': 'Chinesisch (Vereinfacht)', + 'meetingGenerateNow': 'Jetzt generieren', + 'keyEventsAnalyzed': '{count} Schlüsselereignisse analysiert.', + 'aiAnalysisDesc': + 'Die KI-Analyse identifiziert Schlüsselereignisse in Aufnahmen, sodass Sie wichtige Ereignisse für die KI-Generierung auswählen können.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importiere...', + 'batchImporting': 'Batch-Import...', + 'importingLocalRecordings': 'Importiere lokale Aufnahmen...', + 'importFailed': 'Dateiimport fehlgeschlagen: {filePath}, Fehler: {error}', + 'importSuccess': '{count} lokale Aufnahmen erfolgreich importiert', + 'importError': 'Import fehlgeschlagen: {error}', + 'pleaseSelectAudioFile': 'Bitte Audiodatei auswählen', + 'shareAudio': 'Meeting-Audio teilen', + 'shareComplete': 'Teilen abgeschlossen!', + 'shareFailed': 'Teilen fehlgeschlagen: {error}', + 'fileProcessingFailed': + 'Dateiverarbeitung fehlgeschlagen: {filePath}, Fehler: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unbekannte Sprache', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Speicher', + 'meetingStoragePermissionExplanation': + 'Wir benötigen Zugriff auf Speicherberechtigungen, damit Sie Audiodateien auswählen und hochladen können.', + 'meetingStoragePermissionPermanentDenial': + 'Sie haben die Speicherberechtigung dauerhaft verweigert. Um diese Funktion weiterhin nutzen zu können, aktivieren Sie die Speicherberechtigung bitte manuell in den App-Einstellungen.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Mindmap teilen', + 'shareSuccess': 'Teilen erfolgreich', + + // Meeting模块 - AI相关 + 'askAI': 'KI fragen...', + 'askAIPrompt': 'Wobei kann ich Ihnen heute helfen?', + 'continueAsk': 'Weiter fragen', + 'todoList': 'To-Do-Liste', + 'extractConclusion': 'Fazit extrahieren', + 'generateKeyIndicators': 'Schlüsselindikatoren generieren', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Erneut zusammenfassen', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Aufnahmesprache', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Kantonesisch', + 'sichuan': 'Sichuan-Dialekt', + 'shanghai': 'Shanghai-Dialekt', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Link teilen', + 'copyTranscript': 'Transkript kopieren', + 'copySummary': 'Zusammenfassung kopieren', + 'exportAudio': 'Audio exportieren', + 'exportTranscript': 'Transkript exportieren', + 'shareMeetingAudio': 'Meeting-Audio teilen', + 'exportSummary': 'Zusammenfassung exportieren', + 'exportAs': 'Exportieren als', + 'exportingPDF': 'Exportiere PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Aktuellen Sprecher benennen', + 'recentlyUsedNames': 'Zuletzt verwendete Namen', + 'applyToCurrentParagraph': 'Auf aktuellen Absatz anwenden', + 'totalTime': 'Gesamtzeit', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Zusammenfassungssprecher werden automatisch aktualisiert', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Mit Cloud synchronisieren', + 'syncToCloudTip': + 'Synchronisieren Sie Ihre Aufnahmen automatisch mit der Cloud. Sie können Aufnahmen über jede VOITRANS APP oder VOITRANS Web (web.voitrans.com) abspielen, verwalten und teilen.', + 'syncToVoitransApp': 'VOITRANS APP synchronisieren', + 'transcriptionRecord': 'Transkriptionsaufzeichnung', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Datum & Uhrzeit', + 'location': 'Ort', + 'attendees': 'Teilnehmer', + 'inputLocation': 'Ort eingeben', + 'inputAttendees': 'Teilnehmer eingeben', + // 设置页 - "systemSettings": "Systemeinstellungen", //系统设置 - "vipRecharge": "VIP-Mitgliedschaft-Recharge", //会员充值 - "aiRecharge": "Premium-Mitgliedschaft", //AI充值 - "translationRecharge": "Übersetzungs-Recharge", //翻译充值 - "meetingAssistantRecharge": "Meeting-Assistent-Recharge", //会议助手充值 - "cloudSync": "Cloud-Synchronisierung-Recharge", //云端同步 + "systemSettings": "Systemeinstellungen", + "vipRecharge": "VIP-Mitgliedschaft-Recharge", + "aiRecharge": "Premium-Mitgliedschaft", + "translationRecharge": "Übersetzungs-Recharge", + "meetingAssistantRecharge": "Meeting-Assistent-Recharge", + "cloudSync": "Cloud-Synchronisierung-Recharge", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Verbundenes Gerät:", "accountId": "Konto-ID:", "systemSetting": "Systemeinstellungen", @@ -247,11 +690,10 @@ const Map deDE = { 'selecttimbre': 'Klangfarbe auswählen', 'pleaseRead': 'Bitte lesen', 'completeRecording': 'Aufnahme abschließen', - "firmwareUpgrade": "Firmware-Upgrade", // 固件升级 - "bleHeadsetFirmwareUpgrade": "BLE-Kopfhörer Firmware-Upgrade", // BLE耳机固件版本升级 - "deviceManagement": "Geräteverwaltung", // 设备管理 - "manageConnectedDevices": - "Verbundene Bluetooth-Geräte verwalten", // 管理已绑定的蓝牙设备 + "firmwareUpgrade": "Firmware-Upgrade", + "bleHeadsetFirmwareUpgrade": "BLE-Kopfhörer Firmware-Upgrade", + "deviceManagement": "Geräteverwaltung", + "manageConnectedDevices": "Verbundene Bluetooth-Geräte verwalten", //设置setting_controller // 版本更新相关 @@ -260,24 +702,33 @@ const Map deDE = { 'networkErrorRetry': 'Netzwerkfehler, bitte später versuchen', // 设备管理相关 - 'clearPairedDevices': 'Gekoppelte Geräte löschen', - 'clearPairedDevicesConfirm': - 'Sind Sie sicher, dass Sie alle gekoppelten Geräte löschen möchten?', - 'clearPairedDevicesSuccess': 'Gekoppelte Geräte erfolgreich gelöscht', - 'clearPairedDevicesFailed': 'Löschen gekoppelter Geräte fehlgeschlagen', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 - 'realtimeVoiceChat': 'Echtzeit-Sprachgespräch', - 'realtimeVoiceChatInfo': + "realtimeVoiceChat": 'Echtzeit-Sprachgespräch', + "realtimeVoiceChatInfo": 'Intelligente Sprachinteraktionsfunktionen erleben (Vorschau)', - 'loading': 'Laden...', + "loading": 'Laden...', -//设备管理页面 - "earphone": "Kopfhörer", // 耳机 - "voicerecorder": "Sprachrekorder", // 录音笔 - "notBound": "Nicht gebunden", // 未绑定 - "deviceNotBoundYet": "Gerät noch nicht gebunden", // 还未绑定设备 - "unbind": "Bindung aufheben", // 解绑 + //设备管理页面 + "deviceTypeUnknown": "Unbekanntes Gerät", + "deviceTypeClassicBluetoothHeadset": "Klassisches Bluetooth-Headset", + "deviceTypeBleBluetoothHeadset": "BLE-Bluetooth-Headset", + "deviceTypeSmartVoiceRecorder": "Intelligenter Sprachrekorder", + "deviceTypeSmartEye": "Intelligente Brille", + "unbind": "Bindung aufheben", + "noDevicesBound": "Noch keine Geräte gebunden", + "pleaseBindDeviceFirst": + "Bitte binden Sie zuerst ein Gerät, um es zu verwalten", + "noMacAddress": "Keine MAC-Adresse", + "licenseCode": "Lizenzcode", + "confirmUnbind": "Bindung aufheben bestätigen", + "confirmUnbindMessage": + "Sind Sie sicher, dass Sie die Bindung des Geräts \"{deviceName}\" aufheben möchten?", + "confirmUnbindAction": "Bindung aufheben bestätigen", //Agent 模块 // agent View @@ -306,6 +757,20 @@ const Map deDE = { "loadMoreMessages": "Weitere Nachrichten laden...", "loadFailedClickRetry": "Laden fehlgeschlagen, zum Wiederholen klicken", "swipeUpForMore": "Nach oben wischen für mehr", + "callingTool": "Ich helfe Ihnen, bitte warten!", // 正在帮您,请稍等! + "voice_interrupt": "Unterbrechen", // 语音打断 + + // 预设提示词 + "presetMusic": "Musik abspielen", // 来点音乐 + "presetNavigation": "Navigieren zu", // 导航 + "presetWeather": "Wetter heute", // 今日天气 + "presetNews": "Nachrichten heute", // 今日新闻 + "presetFood": "Essen in der Nähe", // 美食 + "playSomeMusic": "Spielen Sie beliebte Musik", // 播放一些流行音乐 + "navigationTo": "Bitte helfen Sie mir bei der Navigation nach", // 导航到 + "todayWeather": "Wie ist das Wetter heute?", // 今日天气 + "todayNews": "Was sind die Nachrichten heute?", // 今日新闻 + "nearbyFood": "Welches leckere Essen gibt es in der Nähe?", // 美食 // Agent controller 'welcomeMessage': 'Hallo! Ich bin **Lily**, ich kann Ihnen helfen:\n\n' @@ -339,7 +804,7 @@ const Map deDE = { 'submitFailed': 'Übermittlung fehlgeschlagen', 'reportSubmitted': 'Meldung übermittelt, wir werden sie so schnell wie möglich bearbeiten', - //'networkError': 'Netzwerkfehler, bitte später versuchen', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Schädlich/Unsicher', 'pornographicVulgar': 'Pornografisch/Vulgär', 'misleadingAttack': 'Irreführend/Angriff', @@ -350,7 +815,7 @@ const Map deDE = { 'other': 'Andere', 'reportDescriptionHint': 'Wir möchten den Grund für Ihre Meldung wissen, Sie können das Problem beschreiben, das Sie erlebt haben.', - //'submit': 'Übermitteln', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Von KI generiert', @@ -373,7 +838,7 @@ const Map deDE = { "driving": "Fahren", "walking": "Gehen", "bicycling": "Radfahren", - "transit": "Öffentliche Verkehrsmittel", + "tsransit": "ÖPNV", //天气卡片 weather_card 'weatherQuery': 'Wetterabfrage:', @@ -405,6 +870,17 @@ const Map deDE = { "friday": "Fr", "saturday": "Sa", "sunday": "So", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Willkommensbonus", + "firstBindRewardDesc": "Sie haben Bindungsprämien erhalten.", + "vipLevelLabel": "VIP-Level:", + "expiryLabel": "Ablaufdatum:", + "notActivated": "Nicht aktiviert", + "aiChatCreditsLabel": "KI-Chat-Guthaben:", + "translationCreditsLabel": "Übersetzungsguthaben:", + "meetingCreditsLabel": "Meeting-Guthaben:", + "ok": "OK", + // 天气描述 "sunny": "Sonnig", "partlyCloudy": "Teilweise bewölkt", @@ -441,6 +917,9 @@ const Map deDE = { 'deleteAccount': 'Konto löschen', 'deleteAccountTips': 'Sind Sie sicher, dass Sie Ihr Konto dauerhaft löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.', + 'clean': 'Cache leeren', + 'cleanTips': + 'Sind Sie sicher, dass Sie den persönlichen Cache leeren möchten?', // Profile 错误信息 'networkConnectionFailed': @@ -463,8 +942,8 @@ const Map deDE = { 'Interner Serverfehler, bitte versuchen Sie es später erneut', // Profile 用户交互 -//'error': 'Fehler', -//'success': 'Erfolg', +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Bildkomprimierung fehlgeschlagen', 'avatarUpdateFailed': 'Avatar-Update fehlgeschlagen', 'usernameCannotBeEmpty': 'Benutzername darf nicht leer sein', @@ -496,15 +975,26 @@ const Map deDE = { // 权限管理页面 'getPermissionStatusFailed': 'Berechtigungsstatus abrufen fehlgeschlagen', 'communicationPermissions': 'Kommunikationsberechtigungen', + 'bluetoothPermissions': 'Bluetooth-Berechtigungen', + 'notificationPermissions': 'Benachrichtigungsberechtigungen', + 'storagePermissions': 'Speicherberechtigungen', + 'microphonePermissions': 'Mikrofonberechtigungen', + 'alarmPermissions': 'Alarmberechtigungen', 'calendarPermissions': 'Kalenderberechtigungen', 'locationPermissions': 'Standortberechtigungen', 'phone': 'Telefon', 'sms': 'SMS', + 'contacts': 'Kontakte', + //'bluetooth': '蓝牙', + 'notification': 'Benachrichtigung', + 'alarm': 'Alarm', 'calendarWrite': 'Kalender schreiben', 'calendarFullAccess': 'Vollzugriff auf Kalender', 'locationInfo': 'Standortinformationen', 'phonePermissionDesc': 'Wird für Anruffunktionen verwendet', 'smsPermissionDesc': 'Wird für SMS-Funktionen verwendet', + 'alarmPermissionDesc': + 'Wird verwendet, um genaue Alarme einzustellen, damit Erinnerungen pünktlich ausgelöst werden', 'calendarWritePermissionDesc': 'Wird zum Erstellen von Kalenderereignissen und Erinnerungen verwendet', 'calendarFullAccessPermissionDesc': @@ -522,18 +1012,84 @@ const Map deDE = { 'permissionRequestError': 'Fehler beim Anfordern der Berechtigung', 'phonePermissionDetailDesc': 'Anruffunktion benötigt Telefonberechtigung', 'smsPermissionDetailDesc': 'SMS-Funktion benötigt SMS-Berechtigung', + 'alarmPermissionDetailDesc': + 'Diese Berechtigung ist erforderlich, um genaue Alarme einzustellen und sicherzustellen, dass Erinnerungen pünktlich ausgelöst werden', 'calendarWritePermissionDetailDesc': 'Erstellen von Kalenderereignissen benötigt Kalender-Schreibberechtigung', 'calendarFullAccessPermissionDetailDesc': 'Verwalten von Kalenderereignissen benötigt vollständige Kalenderberechtigung', 'locationPermissionDetailDesc': 'Abrufen von Standortinformationen benötigt Standortberechtigung', + 'contactsPermissionDesc': + 'Wird für den Zugriff auf Kontaktinformationen verwendet', + 'contactsPermissionDetailDesc': + 'Anruf- und SMS-Funktionalität benötigt Kontaktberechtigung zur Auswahl von Kontakten', + 'bluetoothPermissionDesc': + 'Wird zum Verbinden und Verwalten von Bluetooth-Geräten verwendet', + 'bluetoothPermissionDetailDesc': + 'Verbindung zu Bluetooth-Kopfhörern und anderen Geräten erfordert Bluetooth-Berechtigung', + 'bluetoothScanPermissionDesc': + 'Wird zum Scannen von Bluetooth-Geräten in der Nähe verwendet', + 'bluetoothScanPermissionDetailDesc': + 'Scannen nach Bluetooth-Geräten in der Nähe erfordert Bluetooth-Scan-Berechtigung', + 'bluetoothConnectPermissionDesc': + 'Wird zum Verbinden mit Bluetooth-Geräten verwendet', + 'bluetoothConnectPermissionDetailDesc': + 'Verbindung zu Bluetooth-Geräten erfordert Bluetooth-Verbindungsberechtigung', + 'notificationPermissionDesc': + 'Wird zum Senden von Benachrichtigungen verwendet', + 'notificationPermissionDetailDesc': + 'Die App benötigt Benachrichtigungsberechtigung, um Ihnen wichtige Warnungen und Nachrichten zu senden', 'appNeedsPermissionForFullFunction': 'App benötigt diese Berechtigung für vollständige Funktionalität', 'permanentDenialText': 'Sie haben die {permission}-Berechtigung dauerhaft verweigert, bitte gehen Sie zu den App-Einstellungen, um sie zu aktivieren', 'goToSettings': 'Zu Einstellungen gehen', + // 权限申请 + 'bluetoothScan': 'Bluetooth-Scan', + 'bluetoothConnect': 'Bluetooth-Verbindung', + 'bluetoothScanExplanation': + 'Die App benötigt Bluetooth-Scan-Berechtigung, um Bluetooth-Geräte in der Nähe zu scannen.', + 'bluetoothConnectExplanation': + 'Die App benötigt Bluetooth-Verbindungsberechtigung, um sich mit Bluetooth-Geräten zu verbinden.', + 'locationForBluetoothExplanation': + 'Die App benötigt Standortberechtigung, um Bluetooth-Geräte zu scannen.', + 'bluetoothScanPermanentDenial': + 'Bluetooth-Scan-Berechtigung wurde dauerhaft verweigert, bitte gehen Sie zu den Einstellungen, um sie manuell zu aktivieren.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth-Verbindungsberechtigung wurde dauerhaft verweigert, bitte gehen Sie zu den Einstellungen, um sie manuell zu aktivieren.', + 'locationPermanentDenial': + 'Standortberechtigung wurde dauerhaft verweigert, bitte gehen Sie zu den Einstellungen, um sie manuell zu aktivieren.', + 'notificationPermission': 'Benachrichtigung', + 'locationPermission': 'Standort', + 'notificationPermissionExplanation': + 'Benachrichtigungsberechtigung ist erforderlich, um den Musikwiedergabestatus anzuzeigen.', + 'locationPermissionExplanation': + 'Standortberechtigung ist erforderlich, um den aktuellen Standort abzurufen.', + 'notificationPermissionPermanentDenial': + 'Sie haben die Benachrichtigungsberechtigung dauerhaft verweigert, bitte gehen Sie zu den Einstellungen, um sie zu aktivieren.', + 'locationPermissionPermanentDenial': + 'Sie haben die Standortberechtigung dauerhaft verweigert, bitte gehen Sie zu den Einstellungen, um sie zu aktivieren.', +//'microphonePermission': '录音', + 'storagePermission': 'Speicher', + 'microphonePermissionExplanation': + 'Wir benötigen Mikrofonberechtigung, um Audioinhalte aufzunehmen.', + 'storagePermissionExplanation': + 'Wir benötigen Speicherberechtigung, damit Sie Audiodateien auswählen und hochladen können.', + 'microphonePermissionPermanentDenial': + 'Mikrofonberechtigung wurde dauerhaft verweigert. Um diese Funktion weiterhin nutzen zu können, gehen Sie bitte zu den App-Einstellungen, um die Mikrofonberechtigung manuell zu aktivieren.', + 'storagePermissionPermanentDenial': + 'Speicherberechtigung wurde dauerhaft verweigert. Um diese Funktion weiterhin nutzen zu können, gehen Sie bitte zu den App-Einstellungen, um die Speicherberechtigung manuell zu aktivieren.', + + //permission_util.dart + 'permissionUtilNeed': 'Benötige ', + 'permissionUtilPermission': ' Berechtigung', + 'permissionUtilRestricted': ' Berechtigung eingeschränkt', + 'permissionUtilRestrictedMessage': + 'Diese Funktion ist auf dem aktuellen Gerät nicht verfügbar oder eingeschränkt, bitte überprüfen Sie die Geräteeinstellungen oder Systemeinschränkungen', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 'newVersionFound': 'Neue Version gefunden', // 版本更新对话框标题 'remindLater': 'Später erinnern', // 稍后提醒按钮 @@ -652,8 +1208,23 @@ const Map deDE = { "东帝汶": "Osttimor", "斐济": "Fidschi", "所罗门群岛": "Salomonen", + "刚果民主共和国": "Demokratische Republik Kongo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Malediven", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaika", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua-Neuguinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Bildübersetzung", + "textTranslation": "Textübersetzung", + // 翻译主页 (translation_view.dart) "translationHistory": "Übersetzungsverlauf", "enableRecording": "Aufnahme aktivieren", @@ -662,9 +1233,24 @@ const Map deDE = { "phoneUser": "Telefon-Benutzer", "selectSourceLanguage": "Quellsprache auswählen", "selectTargetLanguage": "Zielsprache auswählen", + "me": "Ich", + "counterPart": "Gegenüber", + "bluetoothCallStateError": + "Bitte stellen Sie sicher, dass das Bluetooth-Headset mit dem Telefon verbunden ist und sich in einem Anrufzustand befindet", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Automatische Erkennung", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Spracherkennung fehlgeschlagen", + "translationFailed": "Übersetzung fehlgeschlagen", + "pleaseInputText": "Bitte Text eingeben", + "textTooLong": "Text zu lang, max. 5000 Zeichen", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Kein Übersetzungsverlauf", + "historyRecords": "Verlaufsaufzeichnungen", + "clearResults": "Ergebnisse löschen", "clearHistory": "Verlauf löschen", "clearHistoryConfirm": "Sind Sie sicher, dass Sie den gesamten Übersetzungsverlauf löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", @@ -673,7 +1259,59 @@ const Map deDE = { "deleteSessionConfirm": "Sind Sie sicher, dass Sie alle Übersetzungsaufzeichnungen für diese Sitzung löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Bildquelle auswählen", + "imagePreview": "Bildvorschau", + "translationResult": "Übersetzungsergebnis", + "recognitionResult": "Erkennungsergebnis", + "translatedImagePreview": "Übersetzte Bildvorschau", + "translatedImageLoadFailed": "Laden des übersetzten Bildes fehlgeschlagen", + "pleaseSelectImage": "Bitte wählen Sie ein Bild aus", + "imageLoadFailed": "Bild laden fehlgeschlagen", + "imageQuality": "Bildqualität", + "maxSize": "Maximale Größe", + "close": "Schließen", + "setImageQuality": "Bildqualität einstellen", + "currentQuality": "Aktuelle Qualität: @value%", + "setMaxSize": "Maximale Größe einstellen", + "currentMaxSize": "Aktuell: @pxpx", + "waitingForAction": "Warte auf Aktion", + "pleaseSelectImageToStart": "Bitte wählen Sie ein Bild aus, um zu beginnen", + "chooseImage": "Bild auswählen", + "openingCamera": "Kamera öffnen...", + "openingPhotoAlbum": "Fotoalbum öffnen...", + "cancelled": "Abgebrochen", + "userCancelledSelection": "Benutzer hat die Auswahl abgebrochen", + "translatingImage": "Bild wird übersetzt", + "callingImageTranslateService": "Rufe Bildübersetzungsdienst auf...", + "savingRecord": "Speichere Datensatz", + "savingTranslationResult": "Speichere Übersetzungsergebnis...", + "translationCompleted": "Übersetzung abgeschlossen", + "allStepsCompleted": "Alle Schritte abgeschlossen", + "processingFailed": "Verarbeitung fehlgeschlagen", + "imageProcessingOrTranslationFailed": + "Bildverarbeitung oder Übersetzung fehlgeschlagen. Bitte erneut versuchen.\nFehler: {error}", + "imageTooLarge": "Bildgröße überschreitet 4MB-Limit", + "imageTooLargeHint": + "Bildgröße überschreitet 4MB. Qualität oder Abmessungen reduzieren und erneut versuchen", + "emptyTranslationResult": "Bildübersetzungs-API gab leeres Ergebnis zurück", + "imageTranslationFailedTryLater": + "Bildübersetzung fehlgeschlagen. Netzwerkproblem oder Ratenbegrenzung. Bitte später versuchen", + "imageTranslationApiException": + "Bildübersetzungs-API Ausnahme. Netzwerk prüfen und erneut versuchen", + "permissionRequired": "Berechtigung erforderlich", + "cameraPermissionRequired": + "Kameraberechtigung erforderlich, um Fotos aufzunehmen", + "photoAlbumPermissionRequired": + "Fotoalbum-Berechtigung erforderlich, um Bilder auszuwählen", + "translationDetails": "Übersetzungsdetails", + "originalImage": "Originalbild", + "sourceLanguage": "Quellsprache", + "targetLanguage": "Zielsprache", + "translationTime": "Übersetzungszeit", + "shareInDevelopment": "Teilen-Funktion in Entwicklung", + + // 翻译录音文件列表页 "translateAudioFiles": "Audiodateien übersetzen", "noAudioFiles": "Keine Audiodateien", "calculating": "Berechnung läuft...", @@ -719,7 +1357,7 @@ const Map deDE = { "autoInputCode": "Code automatisch eingeben", "skipBinding": "Bindung überspringen", "rescan": "Erneut scannen", - "skip": "Überspringen", + "verifyingDevice": "Gerät wird verifiziert...", "confirmBinding": "Bindung bestätigen", "associatingDevice": "Gerät wird zugeordnet...", @@ -752,18 +1390,18 @@ const Map deDE = { "pairingFailedRetry": "Kopplung fehlgeschlagen, bitte versuchen Sie es erneut", -//配对控制器相关 - //'connectDevice': 'Gerät verbinden', + // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Bitte aktivieren Sie Bluetooth', 'deviceDisconnected': 'Gerät getrennt', 'readyToStartPairing': 'Bereit zum Starten der Kopplung', 'checkingEnvironment': 'Umgebung wird überprüft...', 'ensureHeadsetOnAndPairingMode': 'Bitte stellen Sie sicher, dass das Headset eingeschaltet und im Kopplungsmodus ist', - //'goToBluetoothSettings': 'Zu Bluetooth-Einstellungen gehen', - //'verifyingDevice': 'Gerät wird verifiziert...', - //'confirmBinding': 'Bindung bestätigen', - //'associatingDevice': 'Gerät wird zugeordnet...', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Sichere Verbindung wird hergestellt...', 'needManualBindingAuthCode': 'Manuelle Bindung des Autorisierungscodes erforderlich...', @@ -790,6 +1428,19 @@ const Map deDE = { 'deviceAuthorizationFailedCheckCode': 'Geräteautorisierung fehlgeschlagen, bitte überprüfen Sie den Autorisierungscode', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Feedback", 'feedbackInfo': 'Feedback oder Vorschläge geben', @@ -818,6 +1469,13 @@ const Map deDE = { "connectionFailed": "Verbindung fehlgeschlagen", "retryConnection": "Verbindung wiederholen", "ota_updateNow": "Jetzt aktualisieren", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Bitte halten Sie das Gerät verbunden, schließen Sie die App nicht", "doNotDisconnect": "Nicht trennen", @@ -873,97 +1531,23 @@ const Map deDE = { "乌尔都语": "Urdu", "波斯语": "Persisch", "斯瓦希里语": "Swahili", - // Guide overlay keys (placeholders in English) - "sayLilyHint": "Say \"Lily Lily\" to the mic", - "imHere": "I’m here~", - "guideWelcomeWakeAI": "Welcome to Voitrans! First, wake your AI “Lily”.", - "aiReplyCompleted": "Lily has finished the reply!", - "aiThinking": "Lily is thinking…", - "guideAwakenSuccess": "Great! Lily is awake—ask it to help.", - "confirmInput": "Confirm Input", - "guideClickSendPrefix": "Tap send, ", - "guideWeatherStart": "Tell Lily: “What’s the weather today?”", - "guideWeatherInput": "What’s the weather today?", - "guideWeatherSend": "Lily will report the weather in real time", - "guideWeatherEnd": "Lily can report weather live—try other commands", - "guideMusicStart": "Tell Lily: “Play some rock music”", - "guideMusicInput": "Play some rock music", - "guideMusicSend": "Lily will find music for you", - "guideMusicEnd": "Lily found music—try other commands", - "guideNavStart": "Tell Lily: “Navigate to Shenzhen Airport”", - "guideNavInput": "Navigate to Shenzhen Airport", - "guideNavSend": "Lily will plan the route", - "guideNavEnd": "Navigation set—try other commands", - "guideMeetingStart": - "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", - "guideMeetingInput": "Create a meeting reminder for 3pm tomorrow", - "guideMeetingSend": "Lily will create a meeting reminder", - "guideMeetingEnd": "Reminder created—try other commands", - "guidePhoneStart": "Tell Lily: “Call Mom”", - "guidePhoneInput": "Call Mom", - "guidePhoneSend": "Lily will make the call", - "guidePhoneEnd": "Call placed—try other commands", - "guideSmsStart": "Tell Lily: “Send Dad a text: I’ll be home for dinner”", - "guideSmsInput": "Text Dad: I’ll be home for dinner", - "guideSmsSend": "Lily will send the message", - "guideSmsEnd": "Message sent—voice control is convenient", - // Goods pages common footer (placeholders) - 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', - 'copyrightVoitrans': '© 2025 Voitrans Technologies', - - // Meeting goods page (placeholders) - 'meetingHeaderDesc1': - 'Audio recording, transcription, keyword search, and auto summary.', - 'meetingHeaderDesc2': - 'Suitable for business meetings, class notes, and interview minutes.', - 'meetingAutoRecording': 'Auto recording and segmentation', - 'meetingSpeakerTagging': 'Speaker labeling', - 'meetingLongAudioTranscription': 'Long audio transcription', - 'meetingKeyPointSummary': 'Key point extraction', - 'meetingTopicNameSearch': 'Search by topic/name', - 'meetingTimelineJump': 'Timeline jump', - 'meetingExportSummary': 'Export minutes', - 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': - 'Use in quiet environments; performance depends on microphone and network.', - - // Translation goods page (placeholders) - 'transHeaderDesc1': - 'Echtzeit-Simultandolmetschen und Textübersetzung mit Sprachwiedergabe bei niedriger Latenz.', - 'transHeaderDesc2': 'Geeignet für Reisen, Geschäft, Reden und Lehre.', - 'translateZhEn': 'Chinesisch-Englisch-Übersetzung', - 'lowLatencyVoiceBroadcast': 'Sprachübertragung mit niedriger Latenz', - 'multiLangTextTranslation': 'Mehrsprachige Textübersetzung', - 'termOptimizationContextPreserve': - 'Terminologieoptimierung und Kontextwahrung', - 'lexiconTourBusinessLife': 'Lexika für Reise/Geschäft/Alltag', - 'personalVocabularyMemory': 'Persönlicher Wortschatzspeicher', - 'conversationSubtitleLargeText': 'Konversationsuntertitel / Großtext-Modus', - 'colorHighContrast': 'Hoher Farbkontrast', - 'transDisclaimer': - 'Die Übersetzungsleistung hängt von Mikrofon, Netzwerklatenz und Umgebungsgeräuschen ab.', - 'trans_001_name': 'Übersetzung Basis 100', - 'trans_002_name': 'Übersetzung Basis 500', - 'trans_003_name': 'Übersetzung Basis 1000', + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", - 'trans_001_desc': 'Enthält 100 Übersetzungen (Stimme/Text).', - 'trans_002_desc': 'Enthält 500 Übersetzungen (Stimme/Text).', - 'trans_003_desc': 'Enthält 1000 Übersetzungen (Stimme/Text).', + //补充 + "insufficientIntegral": "Insufficient integral", - // VIP goods page (placeholders) - 'benefitsOverview': 'Übersicht der Vorteile', - 'higherQuota': 'Höheres Nutzungskontingent', - 'lowerUnitPrice': 'Niedrigerer Stückpreis', - 'priorityService': 'Priorisierter Service', - 'exclusiveSupportChannel': 'Dedizierter Supportkanal', - 'fastResponse': 'Schnelle Problemreaktion', - 'eventsAndDiscounts': 'Veranstaltungen und Rabatte', - 'memberExclusiveEvents': 'Exklusive Events für Mitglieder', - 'longTermDiscountPlan': 'Langfristiger Rabattplan', - 'generalPrivileges': 'Allgemeine Privilegien', - 'earlyAccessNewFeatures': 'Frühzeitiger Zugriff auf neue Funktionen', - 'crossDeviceSync': 'Geräteübergreifende Synchronisierung', - 'vipDisclaimer': - 'Die tatsächlichen Vorteile hängen von den Paketdetails ab und können sich mit Versionen ändern.', + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/el_gr.dart b/lib/core/translations/language/el_gr.dart index a39a65cd4..5e3c95e20 100644 --- a/lib/core/translations/language/el_gr.dart +++ b/lib/core/translations/language/el_gr.dart @@ -33,6 +33,7 @@ const Map elGR = { "spanish": "Ισπανικά", "portuguese": "Πορτογαλικά", "traditionalChinese": "Παραδοσιακά κινέζικα", + "traditionalChineseHK": "Παραδοσιακά Κινέζικα (Χονγκ Κονγκ)", "japanese": "Ιαπωνικά", "korean": "Κορεατικά", "french": "Γαλλικά", @@ -102,8 +103,8 @@ const Map elGR = { "loginDeclaration": "Δήλωση Voitrans", // Voitrans 声明 "welcomeToThisApp": "Καλώς ήρθατε στο Voitrans, διαβάστε προσεκτικά", // 欢迎使用Voitrans,请充分阅读 - // "privacyPolicy": "Πολιτική απορρήτου", // 《隐私政策》 - 已存在,使用现有键 - // "userAgreement": "Συμφωνία χρήστη", // 《用户协议》 - 已存在,使用现有键 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": ". Κάνοντας κλικ στο 'Συμφωνώ και εισέρχομαι' δηλώνετε ότι έχετε διαβάσει πλήρως και συμφωνείτε με τις παραπάνω συμφωνίες. Κάνοντας κλικ στο 'Δεν συμφωνώ' θα κλείσει η εφαρμογή.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 "disagree": "Δεν συμφωνώ", // 不同意 @@ -187,6 +188,222 @@ const Map elGR = { "usageStats": "Στατιστικά χρήσης", "usageStatsInfo": "Δείτε τα στατιστικά χρήσης της εφαρμογής", "scene": "Σενάρια", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Στατιστικά Μετάφρασης", + "meetingStats": "Στατιστικά Συνάντησης", + "today": "Σήμερα", + "thisWeek": "Αυτή την εβδομάδα", + "thisMonth": "Αυτόν τον μήνα", + "history": "Ιστορικό", + "currentSessionStats": "Στατιστικά τρέχουσας συνεδρίας", + "translationCount": "Πλήθος μεταφράσεων", + "sessionDuration": "Διάρκεια συνεδρίας", + "characters": "Χαρακτήρες", + "recordingDuration": "Διάρκεια εγγραφής", + "totalApiCalls": "Σύνολο κλήσεων API", + "sessionCount": "Πλήθος συνεδριών", + "totalCharacters": "Σύνολο χαρακτήρων", + "apiCallStats": "Στατιστικά κλήσεων API", + "translationApi": "API Μετάφρασης", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Στατιστικά όγκου δεδομένων", + "sourceTextCharacters": "Χαρακτήρες πηγαίου κειμένου", + "ttsTextCharacters": "Χαρακτήρες κειμένου TTS", + "effectiveAudioDuration": "Αποτελεσματική διάρκεια ήχου", + "totalSessionDuration": "Συνολική διάρκεια συνεδρίας", + "costStats": "Στατιστικά κόστους", + "estimatedCost": "Εκτιμώμενο κόστος", + "dailyCostThreshold": "Ημερήσιο όριο κόστους", + "monthlyCostThreshold": "Μηνιαίο όριο κόστους", + "usageBehaviorStats": "Στατιστικά συμπεριφοράς χρήσης", + "mostUsedLanguagePair": "Συχνότερο ζεύγος γλωσσών", + "mostUsedMode": "Συχνότερη λειτουργία", + "asrApiCalls": "Κλήσεις ASR", + "totalAudioDuration": "Συνολική διάρκεια ήχου", + "audioFileSize": "Μέγεθος αρχείου ήχου", + "transcriptBytes": "Bytes απομαγνητοφώνησης", + // 通知文案 + "loadFailed": "Αποτυχία φόρτωσης", + "statsLoadFailedTryLater": + "Αποτυχία φόρτωσης στατιστικών. Δοκιμάστε ξανά αργότερα.", + "cleanupComplete": "Εκκαθάριση ολοκληρώθηκε", + "cleanedOldData": "Εκκαθαρίστηκαν δεδομένα παλαιότερα των 90 ημερών", + "exportFeature": "Λειτουργία εξαγωγής", + "exportInDevelopment": "Η εξαγωγή δεδομένων είναι υπό ανάπτυξη", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Διαθέσιμα πακέτα', + 'remainingQuota': 'Υπόλοιπο όριο', + 'totalQuota': 'Συνολικό όριο', + 'remaining': 'Υπόλοιπο', + 'featureDescription': 'Περιγραφή λειτουργίας', + // AI 功能卡片 + 'musicAndRecommendation': 'Μουσική & Προτάσεις', + 'navigationAndRoutes': 'Πλοήγηση & Διαδρομές', + 'nearbySearch': 'Αναζήτηση κοντά', + 'newsInformation': 'Ειδήσεις', + 'communicationAssistant': 'Βοηθός επικοινωνίας', + // 翻译功能卡片 + 'realtimeTranscription': 'Απομαγνητοφώνηση σε πραγματικό χρόνο', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Γλωσσάρι σεναρίων', + 'subtitleDisplay': 'Υπότιτλοι', + // 会议功能卡片 + 'meetingRecording': 'Εγγραφή συνάντησης', + 'transcriptionAndSummary': 'Απομαγνητοφώνηση & Περίληψη', + 'keywordSearch': 'Αναζήτηση λέξεων-κλειδιών', + 'collaborationSharing': 'Συνεργασία & Κοινή χρήση', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': + 'Περιλαμβάνει 100 χρήσεις. Πρόσβαση σε βασικές λειτουργίες AI.', + 'ai_002_desc': + 'Περιλαμβάνει 500 χρήσεις. Πρόσβαση σε βασικές λειτουργίες AI.', + 'ai_003_desc': + 'Περιλαμβάνει 1000 χρήσεις. Πρόσβαση σε βασικές λειτουργίες AI.', + 'meet_001_desc': 'Περιλαμβάνει 100 εγγραφές/απομαγνητοφωνήσεις συναντήσεων.', + 'meet_002_desc': 'Περιλαμβάνει 500 εγγραφές/απομαγνητοφωνήσεις συναντήσεων.', + 'meet_003_desc': 'Περιλαμβάνει 1000 εγγραφές/απομαγνητοφωνήσεις συναντήσεων.', + 'trans_001_desc': 'Περιλαμβάνει 100 μεταφράσεις (φωνή/κείμενο).', + 'trans_002_desc': 'Περιλαμβάνει 500 μεταφράσεις (φωνή/κείμενο).', + 'trans_003_desc': 'Περιλαμβάνει 1000 μεταφράσεις (φωνή/κείμενο).', + +// 商品页通用页脚 + 'appNameProvider': 'Εφαρμογή: VoiTrans · Παρέχεται από: VoiTrans', + 'iapCustomerServiceQQLabel': 'Εξυπηρέτηση πελατών IAP QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Εγγραφή ήχου, απομαγνητοφώνηση, αναζήτηση λέξεων-κλειδιών και αυτόματη περίληψη για ενίσχυση της αποδοτικότητας των συναντήσεων.', + 'meetingHeaderDesc2': + 'Κατάλληλο για επαγγελματικές συναντήσεις, σημειώσεις μαθημάτων και πρακτικά συνεντεύξεων.', + 'meetingAutoRecording': 'Αυτόματη εγγραφή και τμηματοποίηση', + 'meetingSpeakerTagging': 'Σήμανση ομιλητή', + 'meetingLongAudioTranscription': 'Απομαγνητοφώνηση μεγάλου ήχου', + 'meetingKeyPointSummary': 'Εξαγωγή βασικών σημείων', + 'meetingTopicNameSearch': 'Αναζήτηση με θέμα/όνομα', + 'meetingTimelineJump': 'Άλμα στη χρονογραμμή', + 'meetingExportSummary': 'Εξαγωγή πρακτικών', + 'meetingMultiPlatformShare': 'Κοινή χρήση σε πολλές πλατφόρμες', + 'meetingDisclaimer': + 'Χρήση σε ήσυχο περιβάλλον. Η απόδοση εξαρτάται από το μικρόφωνο και το δίκτυο.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Ταυτόχρονη διερμηνεία σε πραγματικό χρόνο και μετάφραση κειμένου με φωνή χαμηλής καθυστέρησης.', + 'transHeaderDesc2': + 'Κατάλληλο για ταξίδια, επιχειρήσεις, ομιλίες και διδασκαλία.', + 'translateZhEn': 'Μετάφραση Κινεζικά-Αγγλικά', + 'lowLatencyVoiceBroadcast': 'Φωνητική μετάδοση χαμηλής καθυστέρησης', + 'multiLangTextTranslation': 'Πολυγλωσσική μετάφραση κειμένου', + 'termOptimizationContextPreserve': + 'Βελτιστοποίηση ορολογίας και διατήρηση πλαισίου', + 'lexiconTourBusinessLife': 'Γλωσσάρια Ταξιδιού/Επιχειρήσεων/Ζωής', + 'personalVocabularyMemory': 'Προσωπική μνήμη λεξιλογίου', + 'conversationSubtitleLargeText': + 'Υπότιτλοι συνομιλίας / Λειτουργία μεγάλου κειμένου', + 'colorHighContrast': 'Υψηλή αντίθεση χρωμάτων', + 'transDisclaimer': + 'Η απόδοση μετάφρασης εξαρτάται από το μικρόφωνο, την καθυστέρηση δικτύου και τον θόρυβο περιβάλλοντος.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Μεγαλύτερο όριο συνομιλίας, περισσότερες κλήσεις εργαλείων, εκτεταμένο μήκος πλαισίου.', + 'aiHeaderDesc2': + 'Κατάλληλο για Q&A, περίληψη, ανάλυση και εκτέλεση εργασιών.', + 'musicSearchPlaybackControl': + 'Αναζήτηση μουσικής βιβλιοθήκης και έλεγχος αναπαραγωγής', + 'smartPlaylistAndSimilarRecommendations': + 'Έξυπνη λίστα αναπαραγωγής και προτάσεις παρόμοιων τραγουδιών', + 'routePlanningAndCongestionAvoidance': + 'Σχεδιασμός διαδρομής και αποφυγή συμφόρησης', + 'voiceBroadcastAndWaypoints': + 'Φωνητική μετάδοση και ρυθμίσεις σημείων διαδρομής', + 'realTimeWeatherForecast': 'Καιρός και πρόγνωση σε πραγματικό χρόνο', + 'clothingAdviceAndTravelReminders': + 'Συμβουλές ένδυσης και ταξιδιωτικές υπενθυμίσεις', + 'poiSearchFoodGasParking': 'Αναζήτηση POI: φαγητό / βενζίνη / στάθμευση', + 'ratingsHoursAndDirectRoutes': + 'Αξιολογήσεις, ώρες λειτουργίας και απευθείας δρομολόγηση', + 'hotNewsAndTopicOverview': 'Καυτά νέα και επισκόπηση θεμάτων', + 'longArticleSummariesAndKeyPoints': + 'Περιλήψεις μεγάλων άρθρων και βασικά σημεία', + 'helpCallAndSMS': 'Βοήθεια με κλήσεις και SMS', + 'templatedMessagesAndScheduleReminders': + 'Πρότυπα μηνύματα και υπενθυμίσεις προγράμματος', + 'aiDisclaimer': + 'Οι λειτουργίες εξαρτώνται από τα δικαιώματα συσκευής, τη διαθεσιμότητα υπηρεσίας και τις συνθήκες δικτύου.', + + // 会员商品页 + 'benefitsOverview': 'Επισκόπηση προνομίων', + 'higherQuota': 'Υψηλότερο όριο χρήσης', + 'lowerUnitPrice': 'Χαμηλότερη τιμή μονάδας', + 'priorityService': 'Υπηρεσία προτεραιότητας', + 'exclusiveSupportChannel': 'Αποκλειστικό κανάλι υποστήριξης', + 'fastResponse': 'Γρήγορη απόκριση σε θέματα', + 'eventsAndDiscounts': 'Εκδηλώσεις και εκπτώσεις', + 'memberExclusiveEvents': 'Αποκλειστικές εκδηλώσεις μελών', + 'longTermDiscountPlan': 'Μακροπρόθεσμο πρόγραμμα εκπτώσεων', + 'generalPrivileges': 'Γενικά προνόμια', + 'earlyAccessNewFeatures': 'Πρώιμη πρόσβαση σε νέες λειτουργίες', + 'crossDeviceSync': 'Συγχρονισμός μεταξύ συσκευών', + 'vipDisclaimer': + 'Τα πραγματικά προνόμια εξαρτώνται από τις λεπτομέρειες του πακέτου και μπορεί να αλλάξουν με τις εκδόσεις.', + + // 新手引导 / Onboarding + 'skip': "Παράλειψη", + 'next': 'Επόμενο', + 'sayLilyHint': 'Πείτε "Lily Lily" στο μικρόφωνο', + 'imHere': 'Είμαι εδώ~', + 'guideWelcomeWakeAI': + 'Καλώς ήρθατε στο Voitrans! Πρώτα, ξυπνήστε το AI σας "Lily".', + 'aiReplyCompleted': 'Η Lily ολοκλήρωσε την απάντηση!', + 'aiThinking': 'Η Lily σκέφτεται...', + 'guideAwakenSuccess': 'Τέλεια! Η Lily είναι ξύπνια - ζητήστε της βοήθεια.', + 'confirmInput': 'Επιβεβαίωση εισόδου', + 'guideClickSendPrefix': 'Πατήστε αποστολή, ', + // AI 引导步骤 + 'guideWeatherStart': 'Πείτε στη Lily: "Τι καιρό κάνει σήμερα;"', + 'guideWeatherInput': 'Τι καιρό κάνει σήμερα;', + 'guideWeatherSend': 'Η Lily θα αναφέρει τον καιρό σε πραγματικό χρόνο', + 'guideWeatherEnd': + 'Η Lily μπορεί να αναφέρει τον καιρό ζωντανά - δοκιμάστε άλλες εντολές', + 'guideMusicStart': 'Πείτε στη Lily: "Παίξε λίγη ροκ μουσική"', + 'guideMusicInput': 'Παίξε λίγη ροκ μουσική', + 'guideMusicSend': 'Η Lily θα βρει μουσική για εσάς', + 'guideMusicEnd': 'Η Lily βρήκε μουσική - δοκιμάστε άλλες εντολές', + 'guideNavStart': 'Πείτε στη Lily: "Πλοήγησέ με στο Αεροδρόμιο Shenzhen"', + 'guideNavInput': 'Πλοήγησέ με στο Αεροδρόμιο Shenzhen', + 'guideNavSend': 'Η Lily θα σχεδιάσει τη διαδρομή', + 'guideNavEnd': 'Η πλοήγηση ορίστηκε - δοκιμάστε άλλες εντολές', + 'guideMeetingStart': + 'Πείτε στη Lily: "Δημιούργησε υπενθύμιση συνάντησης για αύριο στις 3μμ"', + 'guideMeetingInput': 'Δημιούργησε υπενθύμιση συνάντησης για αύριο στις 3μμ', + 'guideMeetingSend': 'Η Lily θα δημιουργήσει μια υπενθύμιση συνάντησης', + 'guideMeetingEnd': 'Η υπενθύμιση δημιουργήθηκε - δοκιμάστε άλλες εντολές', + 'guidePhoneStart': 'Πείτε στη Lily: "Πάρε τη μαμά"', + 'guidePhoneInput': 'Πάρε τη μαμά', + 'guidePhoneSend': 'Η Lily θα πραγματοποιήσει την κλήση', + 'guidePhoneEnd': 'Η κλήση πραγματοποιήθηκε - δοκιμάστε άλλες εντολές', + 'guideSmsStart': + 'Πείτε στη Lily: "Στείλε μήνυμα στον μπαμπά: Θα είμαι σπίτι για φαγητό"', + 'guideSmsInput': 'Μήνυμα στον μπαμπά: Θα είμαι σπίτι για φαγητό', + 'guideSmsSend': 'Η Lily θα στείλει το μήνυμα', + 'guideSmsEnd': 'Το μήνυμα στάλθηκε - ο φωνητικός έλεγχος είναι βολικός', // 商务会议助手页 "startMeeting": "Έναρξη συνάντησης", @@ -201,13 +418,248 @@ const Map elGR = { 'aiSummary': 'Περίληψη AI', 'meetingTranscript': 'Απομαγνητοφώνηση συνάντησης', + // Meeting模块 - 导航和基础功能 + 'files': 'Αρχεία', + 'mine': 'Δικά μου', + 'connect': 'Σύνδεση', + 'allFiles': 'Όλα τα αρχεία', + 'searchInAllFiles': 'Αναζήτηση σε όλα τα αρχεία', + 'from': 'Από', + 'sortBy': 'Ταξινόμηση κατά', + 'creationTime': 'Χρόνος δημιουργίας', + 'bluetoothConnection': 'Σύνδεση Bluetooth', + 'meetingReconnect': 'Επανασύνδεση', + 'searching': 'Αναζήτηση...', + 'searchFailed': + 'Η αναζήτηση απέτυχε, ελέγξτε αν το Bluetooth είναι ενεργοποιημένο', + 'aiPenNotFound': 'Η συσκευή AI PEN δεν βρέθηκε', + 'connectedToAiPen': 'Συνδεδεμένο με συσκευή AI PEN', + 'checkingNewFiles': 'Έλεγχος για νέα αρχεία προς εισαγωγή', + 'startingWifi': 'Εκκίνηση Wi-Fi...', + 'newFilesDetected': 'Εντοπίστηκαν νέα αρχεία, προετοιμασία εισαγωγής', + 'noNewFiles': 'Δεν υπάρχουν νέα αρχεία για εισαγωγή', + 'connectingWifi': 'Σύνδεση σε Wi-Fi...', + 'wifiConnected': 'Επιτυχής σύνδεση Wi-Fi', + 'downloadingFiles': 'Λήψη αρχείων...', + 'downloadingFileProgress': 'Σύνολο {total} αρχεία, λήψη αρχείου {current}', + 'downloadComplete': 'Λήψη ολοκληρώθηκε', + 'downloadCompleteInfo': + 'Λήψη ολοκληρώθηκε, {count} αρχεία συνολικά, αυτόματη επιστροφή σε 2 δευτερόλεπτα', + + // Meeting模块 - 录音功能 + 'startRecording': 'Έναρξη εγγραφής', + 'liveRecording': 'Ζωντανή εγγραφή', + 'audioVideoRecording': 'Εγγραφή ήχου/βίντεο', + 'callRecording': 'Εγγραφή κλήσης', + 'importAudio': 'Εισαγωγή ήχου', + 'transcribing': 'Απομαγνητοφώνηση...', + 'summarizing': 'Δημιουργία περίληψης...', + 'analyzing': 'Ανάλυση...', + 'summaryComplete': 'Περίληψη ολοκληρώθηκε', + //'generating': '正在生成...', + 'generate': 'Δημιουργία', + 'overview': 'Επισκόπηση', + 'transcription': 'Απομαγνητοφώνηση', + 'summary': 'Περίληψη', + 'mindMap': 'Χάρτης μυαλού', + 'editSpeaker': 'Επεξεργασία', + 'nameSpeaker': 'Ονομασία ομιλητή', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Αρχεία απομαγνητοφώνησης', + 'templateCommunity': 'Κοινότητα προτύπων', + 'comingSoon': 'Σύντομα κοντά σας', + 'integration': 'Ενσωμάτωση', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Ενεργοποιημένο', + 'disabled': 'Απενεργοποιημένο', + 'myVoitransDevice': 'Η συσκευή μου VOITRANS', + 'helpAndFeedback': 'Βοήθεια & Σχόλια', + 'aboutVoitrans': 'Σχετικά με το VOITRANS', + 'meetingDays': 'Ημέρες', + 'meetingHours': 'Ώρες', + 'voitransAiMember': 'Μέλος Voitrans AI', + 'unlockStarterMember': 'Ξεκλείδωμα Starter μέλους', + 'bindDeviceToActivate': + 'Συνδέστε συσκευή Voitrans για ενεργοποίηση Starter μέλους', + 'unlockNow': 'Ξεκλείδωμα τώρα', + + // Meeting模块 - 会员功能 + 'comparison': 'Σύγκριση', + 'detailedInfo': 'Λεπτομερείς πληροφορίες', + 'monthlyTranscriptionTime': 'Μηνιαίος χρόνος απομαγνητοφώνησης', + 'unlimited': 'Απεριόριστο', + 'professionalTemplates': 'Επαγγελματικά πρότυπα', + 'limited': 'Περιορισμένο', + 'fullTemplates': 'Πλήρη πρότυπα', + 'professionalTerms': 'Επαγγελματικοί όροι', + 'customTemplates': 'Προσαρμοσμένα πρότυπα', + 'visualMindMap': 'Οπτικός χάρτης μυαλού', + 'speakerIdentification': 'Αναγνώριση ομιλητή', + 'aiVoiceEnhancement': 'Βελτίωση φωνής AI', + 'audioImport': 'Εισαγωγή ήχου', + 'multipleExportFormats': 'Πολλαπλές μορφές εξαγωγής', + 'professionalSummaryTemplates': 'Επαγγελματικά πρότυπα περίληψης', + 'professionalTemplateDesc': + 'Επαγγελματικός σχεδιασμός προτύπων για βελτίωση της αποδοτικότητας εργασίας. Προσαρμοσμένο στις ανάγκες της βιομηχανίας.', + 'customTemplateDesc': + 'Μπορείτε να προσαρμόσετε τις οδηγίες περίληψης σύμφωνα με τις ανάγκες σας και να τις χρησιμοποιήσετε για τη δημιουργία των απαιτούμενων περιλήψεων.', + 'askAiDesc': + 'Έξυπνη εξαγωγή βαθύτερων πληροφοριών από εγγραφές, δημιουργία πινάκων δεδομένων, συμπερασμάτων συζητήσεων, λιστών To-Do, email αναφοράς και άλλου μορφοποιημένου περιεχομένου με ένα κλικ.', + 'visualMindMapDesc': + 'Πέρα από περιλήψεις - οργανώστε και οπτικοποιήστε βασικά σημεία με χάρτες μυαλού για αποτελεσματικότερη κατανόηση του πλήρους κειμένου.', + 'templateCommunityDesc': + 'Ανακαλύψτε, μοιραστείτε και εμπνευστείτε από τη βιβλιοθήκη προτύπων που δημιουργήθηκε από χρήστες.', + 'speakerIdentificationDesc': + 'Η απομαγνητοφώνηση ήχου θα υποστηρίζει αναγνώριση ομιλητή, αποκαθιστώντας πιο διαισθητικά το περιεχόμενο συναντήσεων ή τηλεφωνικών κλήσεων. Ταυτόχρονα, η περίληψη θα είναι πιο ακριβής.', + 'privateCloudSyncDesc': + 'Οι εγγραφές και οι απομαγνητοφωνήσεις σας θα αποθηκεύονται με ασφάλεια σε αποκλειστικούς διακομιστές cloud, με πλήρη κρυπτογράφηση κατά τη μεταφόρτωση και λήψη για διασφάλιση απορρήτου και ασφάλειας.', + 'aiVoiceEnhancementDesc': + 'Η βελτίωση φωνής AI υποστηρίζει πολλαπλές ρυθμίσεις μείωσης θορύβου, εξαλείφει έξυπνα τον θόρυβο περιβάλλοντος, ενισχύει την καθαρότητα της φωνής και βελτιώνει την ποιότητα αναπαραγωγής ήχου.', + 'audioImportDesc': + 'Εύκολη εισαγωγή αρχείων ήχου από τοπικές ή τρίτες εφαρμογές, όπως φωνητικά σημειώματα, Google Drive, κ.λπ.', + 'multipleExportFormatsDesc': + 'Εξάγετε τις ηχογραφήσεις σας, το κείμενο απομαγνητοφώνησης και τις περιλήψεις σε διάφορες μορφές (TXT, PDF, JPEG) για να καλύψετε τις ανάγκες σας.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Αναβάθμιση συνδρομής', + 'yearlySubscription': 'Ετήσια συνδρομή', + 'monthlySubscription': 'Μηνιαία συνδρομή', + 'proMonthly': 'Pro ¥60/μήνα', + 'proMonthlyDesc': + 'Δωρεάν δοκιμή 7 ημερών, στη συνέχεια ¥800/έτος. Ακύρωση οποτεδήποτε πριν τη λήξη της δοκιμής.', + 'sevenDayTrial': '7 ημέρες δωρεάν δοκιμή', + 'unlimitedMonthly': 'Απεριόριστο ¥120/μήνα', + 'unlimitedMonthlyDesc': + 'Δωρεάν δοκιμή 7 ημερών, στη συνέχεια ¥1600/έτος. Ακύρωση οποτεδήποτε πριν τη λήξη της δοκιμής.', + 'trialNote': + '*Δωρεάν δοκιμή για 7 ημέρες, στη συνέχεια ετήσια χρέωση, ακύρωση οποτεδήποτε.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/μήνα', + 'subscribe': 'Εγγραφή', + 'unlimitedPrice': 'Απεριόριστο ¥198', + 'unlimitedMonthlyPrice': '¥198/μήνα', + 'upgradeNote': + '*Μετά την αναβάθμιση της συνδρομής, οι υπολειπόμενες ημέρες της αρχικής συνδρομής θα υπολογιστούν αυτόματα και θα επιστραφούν στον λογαριασμό πληρωμής σας', + 'buyMoreTranscriptionTime': 'Αγορά επιπλέον χρόνου απομαγνητοφώνησης', + 'sixThousandMinutes': '6.000 λεπτά', + 'threeThousandMinutes': '3.000 λεπτά', + 'sixHundredMinutes': '600 λεπτά', + 'oneHundredTwentyMinutes': '120 λεπτά', + 'validityPeriod': '*Περίοδος ισχύος: ', + 'validityNote': + 'Ενεργοποιείται αμέσως μετά την αγορά, ισχύει για 2 χρόνια μετά την ενεργοποίηση.', + 'purchase': 'Αγορά', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Επιλογή προτύπου περίληψης', + 'useThisTemplate': 'Χρήση αυτού του προτύπου', + 'lastUsed': 'Τελευταία χρήση', + 'viewAll': 'Προβολή όλων', + 'recordingLanguage': 'Γλώσσα εγγραφής', + 'chineseSimplified': 'Κινέζικα (Απλοποιημένα)', + 'meetingGenerateNow': 'Δημιουργία τώρα', + 'keyEventsAnalyzed': 'Αναλύθηκαν {count} βασικά γεγονότα.', + 'aiAnalysisDesc': + 'Η ανάλυση AI εντοπίζει βασικά γεγονότα στις εγγραφές, επιτρέποντάς σας να επιλέξετε σημαντικά γεγονότα για δημιουργία AI.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Εισαγωγή...', + 'batchImporting': 'Μαζική εισαγωγή...', + 'importingLocalRecordings': 'Εισαγωγή τοπικών εγγραφών...', + 'importFailed': 'Αποτυχία εισαγωγής αρχείου: {filePath}, σφάλμα: {error}', + 'importSuccess': 'Επιτυχής εισαγωγή {count} τοπικών εγγραφών', + 'importError': 'Αποτυχία εισαγωγής: {error}', + 'pleaseSelectAudioFile': 'Παρακαλώ επιλέξτε αρχείο ήχου', + 'shareAudio': 'Κοινοποίηση ήχου συνάντησης', + 'shareComplete': 'Η κοινοποίηση ολοκληρώθηκε!', + 'shareFailed': 'Αποτυχία κοινοποίησης: {error}', + 'fileProcessingFailed': + 'Αποτυχία επεξεργασίας αρχείου: {filePath}, σφάλμα: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Άγνωστη γλώσσα', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Αποθήκευση', + 'meetingStoragePermissionExplanation': + 'Χρειαζόμαστε πρόσβαση στα δικαιώματα αποθήκευσης για να μπορείτε να επιλέξετε και να ανεβάσετε αρχεία ήχου.', + 'meetingStoragePermissionPermanentDenial': + 'Εντοπίστηκε ότι έχετε αρνηθεί μόνιμα το δικαίωμα αποθήκευσης. Για να συνεχίσετε να χρησιμοποιείτε αυτή τη λειτουργία, παρακαλώ μεταβείτε στις ρυθμίσεις εφαρμογής για να ενεργοποιήσετε χειροκίνητα το δικαίωμα αποθήκευσης.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Κοινοποίηση χάρτη μυαλού', + 'shareSuccess': 'Επιτυχής κοινοποίηση', + + // Meeting模块 - AI相关 + 'askAI': 'Ρωτήστε το AI ...', + 'askAIPrompt': 'Πώς μπορώ να σας βοηθήσω σήμερα;', + 'continueAsk': 'Συνεχίστε να ρωτάτε', + 'todoList': 'Λίστα εργασιών', + 'extractConclusion': 'Εξαγωγή συμπεράσματος', + 'generateKeyIndicators': 'Δημιουργία βασικών δεικτών', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Επανασύνοψη', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Γλώσσα εγγραφής', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Καντονέζικα', + 'sichuan': 'Διάλεκτος Σετσουάν', + 'shanghai': 'Διάλεκτος Σαγκάης', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Κοινοποίηση συνδέσμου', + 'copyTranscript': 'Αντιγραφή απομαγνητοφώνησης', + 'copySummary': 'Αντιγραφή περίληψης', + 'exportAudio': 'Εξαγωγή ήχου', + 'exportTranscript': 'Εξαγωγή απομαγνητοφώνησης', + 'shareMeetingAudio': 'Κοινοποίηση ήχου συνάντησης', + 'exportSummary': 'Εξαγωγή περίληψης', + 'exportAs': 'Εξαγωγή ως', + 'exportingPDF': 'Εξαγωγή PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Ονομασία τρέχοντος ομιλητή', + 'recentlyUsedNames': 'Πρόσφατα χρησιμοποιημένα ονόματα', + 'applyToCurrentParagraph': 'Εφαρμογή στην τρέχουσα παράγραφο', + 'totalTime': 'Συνολικός χρόνος', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Οι ομιλητές της περίληψης θα ενημερωθούν αυτόματα', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Συγχρονισμός στο cloud', + 'syncToCloudTip': + 'Συγχρονίστε αυτόματα τις εγγραφές σας στο cloud, μπορείτε να αναπαράγετε, να διαχειριστείτε και να μοιραστείτε εγγραφές μέσω οποιασδήποτε εφαρμογής VOITRANS ή VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Συγχρονισμός VOITRANS APP', + 'transcriptionRecord': 'Αρχείο απομαγνητοφώνησης', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Ημερομηνία & Ώρα', + 'location': 'Τοποθεσία', + 'attendees': 'Παρευρισκόμενοι', + 'inputLocation': 'Εισαγωγή τοποθεσίας', + 'inputAttendees': 'Εισαγωγή παρευρισκομένων', + // 设置页 - "systemSettings": "Ρυθμίσεις συστήματος", //系统设置 - "vipRecharge": "Περιορέωση VIP μέλους", //会员充值 - "aiRecharge": "Premium μέλος", //AI充值 - "translationRecharge": "Περιορέωση μετάφρασης", //翻译充值 - "meetingAssistantRecharge": "Περιορέωση βοηθού συνάντησης", //会议助手充值 - "cloudSync": "Περιορέωση συγχρονισμού στο cloud", //云端同步 + "systemSettings": "Ρυθμίσεις συστήματος", + "vipRecharge": "Περιορέωση VIP μέλους", + "aiRecharge": "Premium μέλος", + "translationRecharge": "Περιορέωση μετάφρασης", + "meetingAssistantRecharge": "Περιορέωση βοηθού συνάντησης", + "cloudSync": "Περιορέωση συγχρονισμού στο cloud", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Συνδεδεμένη συσκευή:", "accountId": "ID λογαριασμού:", "systemSetting": "Ρυθμίσεις συστήματος", @@ -244,12 +696,10 @@ const Map elGR = { 'selecttimbre': 'Επιλέξτε τόνο φωνής', 'pleaseRead': 'Παρακαλώ διαβάστε', 'completeRecording': 'Ολοκλήρωση εγγραφής', - "firmwareUpgrade": "Αναβάθμιση firmware", // 固件升级 - "bleHeadsetFirmwareUpgrade": - "Αναβάθμιση firmware ακουστικών BLE", // BLE耳机固件版本升级 - "deviceManagement": "Διαχείριση συσκευών", // 设备管理 - "manageConnectedDevices": - "Διαχείριση συνδεδεμένων συσκευών Bluetooth", // 管理已绑定的蓝牙设备 + "firmwareUpgrade": "Αναβάθμιση firmware", + "bleHeadsetFirmwareUpgrade": "Αναβάθμιση firmware ακουστικών BLE", + "deviceManagement": "Διαχείριση συσκευών", + "manageConnectedDevices": "Διαχείριση συνδεδεμένων συσκευών Bluetooth", //设置setting_controller // 版本更新相关 @@ -258,11 +708,10 @@ const Map elGR = { 'networkErrorRetry': 'Σφάλμα δικτύου, δοκιμάστε ξανά αργότερα', // 设备管理相关 - 'clearPairedDevices': 'Εκκαθάριση συζευγμένων συσκευών', - 'clearPairedDevicesConfirm': - 'Είστε βέβαιοι ότι θέλετε να εκκαθαρίσετε όλες τις συζευγμένες συσκευές;', - 'clearPairedDevicesSuccess': 'Επιτυχής εκκαθάριση συζευγμένων συσκευών', - 'clearPairedDevicesFailed': 'Αποτυχία εκκαθάρισης συζευγμένων συσκευών', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Φωνητική συνομιλία σε πραγματικό χρόνο", @@ -271,11 +720,20 @@ const Map elGR = { "loading": "Φόρτωση...", //设备管理页面 - "earphone": "Ακουστικό", - "voicerecorder": "Συσκευή εγγραφής φωνής", - "notBound": "Μη συνδεδεμένο", - "deviceNotBoundYet": "Καμία συσκευή δεν έχει συνδεθεί ακόμα", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Αποσύνδεση", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -304,6 +762,20 @@ const Map elGR = { "loadMoreMessages": "Φόρτωση περισσότερων μηνυμάτων...", "loadFailedClickRetry": "Αποτυχία φόρτωσης, κάντε κλικ για επανάληψη", "swipeUpForMore": "Σύρετε προς τα πάνω για περισσότερα", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Γεια σας! Είμαι ο **Lily**, μπορώ να σας βοηθήσω με:\n\n' @@ -338,7 +810,7 @@ const Map elGR = { 'submitFailed': 'Αποτυχία υποβολής', 'reportSubmitted': 'Η αναφορά υποβλήθηκε, θα την επεξεργαστούμε το συντομότερο δυνατό', - //'networkError': 'Σφάλμα δικτύου, δοκιμάστε ξανά αργότερα', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Επιβλαβές/μη ασφαλές', 'pornographicVulgar': 'Πορνογραφικό/χυδαίο', 'misleadingAttack': 'Παραπλανητική επίθεση', @@ -348,7 +820,7 @@ const Map elGR = { 'other': 'Άλλο', 'reportDescriptionHint': 'Θέλουμε να γνωρίζουμε τον λόγο της αναφοράς σας, μπορείτε να περιγράψετε το πρόβλημα που αντιμετωπίσατε.', - 'submit': 'Υποβολή', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Δημιουργήθηκε από AI', @@ -403,6 +875,17 @@ const Map elGR = { "friday": "Παρασκευή", "saturday": "Σάββατο", "sunday": "Κυριακή", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Ηλιόλουστος", "partlyCloudy": "Μερικώς συννεφιασμένος", @@ -439,6 +922,8 @@ const Map elGR = { 'deleteAccount': 'Διαγραφή λογαριασμού', 'deleteAccountTips': 'Είστε βέβαιοι ότι θέλετε να διαγράψετε μόνιμα τον λογαριασμό σας; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -459,8 +944,8 @@ const Map elGR = { 'Εσωτερικό σφάλμα διακομιστή, δοκιμάστε ξανά αργότερα', // Profile 用户交互 -//'error': 'Σφάλμα', -//'success': 'Επιτυχία', +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Αποτυχία συμπίεσης εικόνας', 'avatarUpdateFailed': 'Αποτυχία ενημέρωσης avatar', 'usernameCannotBeEmpty': 'Το όνομα χρήστη δεν μπορεί να είναι κενό', @@ -489,16 +974,27 @@ const Map elGR = { // 权限管理页面 'getPermissionStatusFailed': 'Αποτυχία λήψης κατάστασης δικαιωμάτων', 'communicationPermissions': 'Δικαιώματα επικοινωνίας', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Δικαιώματα ημερολογίου', 'locationPermissions': 'Δικαιώματα τοποθεσίας', 'phone': 'Τηλέφωνο', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Εγγραφή ημερολογίου', 'calendarFullAccess': 'Πλήρης πρόσβαση ημερολογίου', 'locationInfo': 'Πληροφορίες τοποθεσίας', 'phonePermissionDesc': 'Χρησιμοποιείται για τη λειτουργία τηλεφωνικών κλήσεων', 'smsPermissionDesc': 'Χρησιμοποιείται για τη λειτουργία αποστολής SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Χρησιμοποιείται για τη δημιουργία γεγονότων και υπενθυμίσεων ημερολογίου', 'calendarFullAccessPermissionDesc': @@ -518,18 +1014,80 @@ const Map elGR = { 'Η λειτουργία τηλεφωνικών κλήσεων χρειάζεται δικαίωμα τηλεφώνου', 'smsPermissionDetailDesc': 'Η λειτουργία αποστολής SMS χρειάζεται δικαίωμα SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Η δημιουργία γεγονότων ημερολογίου χρειάζεται δικαίωμα εγγραφής ημερολογίου', 'calendarFullAccessPermissionDetailDesc': 'Η διαχείριση γεγονότων ημερολογίου χρειάζεται πλήρες δικαίωμα ημερολογίου', 'locationPermissionDetailDesc': 'Η λήψη πληροφοριών τοποθεσίας χρειάζεται δικαίωμα τοποθεσίας', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Η εφαρμογή χρειάζεται αυτό το δικαίωμα για να παρέχει πλήρη λειτουργικότητα', 'permanentDenialText': 'Έχετε αρνηθεί μόνιμα το δικαίωμα {permission}, μεταβείτε στις ρυθμίσεις εφαρμογής για να το ενεργοποιήσετε', 'goToSettings': 'Μετάβαση στις ρυθμίσεις', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 'newVersionFound': 'Βρέθηκε νέα έκδοση', // 版本更新对话框标题 'remindLater': 'Υπενθύμιση αργότερα', // 稍后提醒按钮 @@ -648,8 +1206,23 @@ const Map elGR = { "东帝汶": "Ανατολικό Τιμόρ", "斐济": "Φίτζι", "所罗门群岛": "Νησιά Σολομώντα", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Ιστορικό μεταφράσεων", "enableRecording": "Ενεργοποίηση εγγραφής", @@ -658,9 +1231,24 @@ const Map elGR = { "phoneUser": "Χρήστης τηλεφώνου", "selectSourceLanguage": "Επιλέξτε γλώσσα προέλευσης", "selectTargetLanguage": "Επιλέξτε γλώσσα προορισμού", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Δεν υπάρχει ιστορικό μεταφράσεων", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Εκκαθάριση ιστορικού", "clearHistoryConfirm": "Είστε βέβαιοι ότι θέλετε να εκκαθαρίσετε όλο το ιστορικό μεταφράσεων; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.", @@ -669,7 +1257,58 @@ const Map elGR = { "deleteSessionConfirm": "Είστε βέβαιοι ότι θέλετε να διαγράψετε όλες τις εγγραφές μεταφράσεων για αυτή τη συνεδρία; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Μετάφραση αρχείων ήχου", "noAudioFiles": "Δεν υπάρχουν αρχεία ήχου", "calculating": "Υπολογισμός...", @@ -715,7 +1354,7 @@ const Map elGR = { "autoInputCode": "Αυτόματη εισαγωγή κωδικού", "skipBinding": "Παράλειψη σύνδεσης", "rescan": "Επανάληψη σάρωσης", - "skip": "Παράλειψη", + "verifyingDevice": "Επαλήθευση συσκευής...", "confirmBinding": "Επιβεβαίωση σύνδεσης", "associatingDevice": "Συσχέτιση συσκευής...", @@ -747,17 +1386,17 @@ const Map elGR = { "pairingFailedRetry": "Αποτυχία σύζευξης, δοκιμάστε ξανά", // 配对控制器相关 - //'connectDevice': 'Σύνδεση συσκευής', + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Ενεργοποιήστε το Bluetooth', 'deviceDisconnected': 'Η συσκευή αποσυνδέθηκε', 'readyToStartPairing': 'Έτοιμο για έναρξη σύζευξης', 'checkingEnvironment': 'Έλεγχος περιβάλλοντος...', 'ensureHeadsetOnAndPairingMode': 'Βεβαιωθείτε ότι τα ακουστικά είναι ενεργοποιημένα και σε λειτουργία σύζευξης', - //'goToBluetoothSettings': 'Μετάβαση στις ρυθμίσεις Bluetooth', - //'verifyingDevice': 'Επαλήθευση συσκευής...', - //'confirmBinding': 'Επιβεβαίωση σύνδεσης', - //'associatingDevice': 'Συσχέτιση συσκευής...', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Δημιουργία ασφαλούς σύνδεσης...', 'needManualBindingAuthCode': 'Απαιτείται χειροκίνητος κωδικός εξουσιοδότησης σύνδεσης...', @@ -780,6 +1419,19 @@ const Map elGR = { 'deviceAuthorizationFailedCheckCode': 'Αποτυχία εξουσιοδότησης συσκευής, ελέγξτε τον κωδικό εξουσιοδότησης', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Σχόλια χρήστη", 'feedbackInfo': 'Παρέχετε σχόλια ή προτάσεις', @@ -788,7 +1440,7 @@ const Map elGR = { 'feedbackRequired': 'Εισάγετε περιεχόμενο σχολίων', 'contactInfo': 'Στοιχεία επικοινωνίας', 'contactHint': 'Email/τηλέφωνο, για να μπορούμε να επικοινωνήσουμε μαζί σας', - //'submit': 'Υποβολή', // 已存在,使用现有键 + 'submit': 'Υποβολή', 'feedbackSubmitSuccess': 'Επιτυχής υποβολή σχολίων, ευχαριστούμε!', 'feedbackSubmitFailed': 'Αποτυχία υποβολής σχολίων, δοκιμάστε ξανά αργότερα', @@ -806,6 +1458,13 @@ const Map elGR = { "connectionFailed": "Αποτυχία σύνδεσης", "retryConnection": "Επανάληψη σύνδεσης", "ota_updateNow": "Ενημέρωση τώρα", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Διατηρήστε τη συσκευή συνδεδεμένη, μην κλείσετε την εφαρμογή", "doNotDisconnect": "Μην αποσυνδέσετε", @@ -861,4 +1520,23 @@ const Map elGR = { "乌尔都语": "Ουρντού", "波斯语": "Περσικά", "斯瓦希里语": "Σουαχίλι", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/en_us.dart b/lib/core/translations/language/en_us.dart index bfac53331..13a914ebb 100644 --- a/lib/core/translations/language/en_us.dart +++ b/lib/core/translations/language/en_us.dart @@ -33,6 +33,7 @@ const Map enUS = { "spanish": "Spanish", "portuguese": "Portuguese", "traditionalChinese": "Traditional Chinese", + "traditionalChineseHK": "Traditional Chinese (Hong Kong)", "japanese": "Japanese", "korean": "Korean", "french": "French", @@ -989,6 +990,12 @@ const Map enUS = { 'smsPermissionDetailDesc': 'SMS functionality requires SMS permission', 'alarmPermissionDetailDesc': 'This permission is required to set exact alarms and ensure reminders trigger on time', + 'calendarWritePermissionDetailDesc': + 'Creating calendar events requires calendar write permission', + 'calendarFullAccessPermissionDetailDesc': + 'Managing calendar events requires full calendar permission', + 'locationPermissionDetailDesc': + 'Getting location information requires location permission', 'contactsPermissionDesc': 'Used for accessing contact information', 'contactsPermissionDetailDesc': 'Phone call and SMS functionality requires contacts permission to select contacts', @@ -1005,12 +1012,6 @@ const Map enUS = { 'notificationPermissionDesc': 'Used for sending notification messages', 'notificationPermissionDetailDesc': 'App needs notification permission to send you important alerts and messages', - 'calendarWritePermissionDetailDesc': - 'Creating calendar events requires calendar write permission', - 'calendarFullAccessPermissionDetailDesc': - 'Managing calendar events requires full calendar permission', - 'locationPermissionDetailDesc': - 'Getting location information requires location permission', 'appNeedsPermissionForFullFunction': 'App needs this permission to provide full functionality', 'permanentDenialText': @@ -1030,6 +1031,8 @@ const Map enUS = { 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', 'bluetoothConnectPermanentDenial': 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', 'notificationPermission': 'Notification', 'locationPermission': 'Location', 'notificationPermissionExplanation': @@ -1196,21 +1199,20 @@ const Map enUS = { // 翻译主页 (translation_view.dart) "translationHistory": "Translation History", - "historyRecords": "History Records", "enableRecording": "Enable Recording", "viewAudioFiles": "View Audio Files", "headsetUser": "Headset User", "phoneUser": "Phone User", "selectSourceLanguage": "Select Source Language", "selectTargetLanguage": "Select Target Language", - "me": "Me", //我 - "counterPart": "Counterpart", //对方 + "me": "Me", + "counterPart": "Counterpart", "bluetoothCallStateError": - "Please make sure the Bluetooth headset is connected to the phone and in a call state", //请确保蓝牙耳机已连接到手机并处于通话状态 + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) - // 翻译键代表的中文文本内容:取消/确认/自动检测 - "autoDetect": "Auto Detect", + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 // Text translation & language detection "languageDetectionFailed": "Language detection failed", "translationFailed": "Translation failed", @@ -1219,6 +1221,7 @@ const Map enUS = { // 翻译历史页 "noTranslationHistory": "No translation history", + "historyRecords": "History Records", "clearResults": "Clear Results", "clearHistory": "Clear History", "clearHistoryConfirm": @@ -1428,6 +1431,13 @@ const Map enUS = { "connectionFailed": "Connection Failed", "retryConnection": "Retry Connection", "ota_updateNow": "Update Now", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Please keep device connected, do not close the app", "doNotDisconnect": "Do not disconnect", diff --git a/lib/core/translations/language/es_es.dart b/lib/core/translations/language/es_es.dart index 76bbcc07a..102fb786f 100644 --- a/lib/core/translations/language/es_es.dart +++ b/lib/core/translations/language/es_es.dart @@ -33,6 +33,7 @@ const Map esES = { "spanish": "Español", "portuguese": "Portugués", "traditionalChinese": "Chino tradicional", + "traditionalChineseHK": "Chino tradicional (Hong Kong)", "japanese": "Japonés", "korean": "Coreano", "french": "Francés", @@ -102,8 +103,8 @@ const Map esES = { "loginDeclaration": "Declaración de Voitrans", // Voitrans 声明 "welcomeToThisApp": "Bienvenido a Voitrans, lee cuidadosamente", // 欢迎使用Voitrans,请充分阅读 - // "privacyPolicy": "Política de privacidad", // 《隐私政策》 - 已存在,使用现有键 - // "userAgreement": "Acuerdo de usuario", // 《用户协议》 - 已存在,使用现有键 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": ". Al hacer clic en 'Acepto y continúo' indicas que has leído completamente y aceptas los acuerdos anteriores. Al hacer clic en 'No acepto' se cerrará la aplicación.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 "disagree": "No acepto", // 不同意 @@ -188,6 +189,209 @@ const Map esES = { "usageStats": "Estadísticas de uso", "usageStatsInfo": "Consulte las estadísticas de uso de la aplicación", "scene": "Escenarios", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Omitir", + 'next': 'Next', + 'sayLilyHint': "Say \"Lily Lily\" to the mic", + 'imHere': "I’m here~", + 'guideWelcomeWakeAI': "Welcome to Voitrans! First, wake your AI “Lily”.", + 'aiReplyCompleted': "Lily has finished the reply!", + 'aiThinking': "Lily is thinking…", + 'guideAwakenSuccess': "Great! Lily is awake—ask it to help.", + 'confirmInput': "Confirm Input", + 'guideClickSendPrefix': "Tap send, ", + // AI 引导步骤 + 'guideWeatherStart': "Tell Lily: “What’s the weather today?”", + 'guideWeatherInput': "What’s the weather today?", + 'guideWeatherSend': "Lily will report the weather in real time", + 'guideWeatherEnd': "Lily can report weather live—try other commands", + 'guideMusicStart': "Tell Lily: “Play some rock music”", + 'guideMusicInput': "Play some rock music", + 'guideMusicSend': "Lily will find music for you", + 'guideMusicEnd': "Lily found music—try other commands", + 'guideNavStart': "Tell Lily: “Navigate to Shenzhen Airport”", + 'guideNavInput': "Navigate to Shenzhen Airport", + 'guideNavSend': "Lily will plan the route", + 'guideNavEnd': "Navigation set—try other commands", + 'guideMeetingStart': + "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", + 'guideMeetingInput': "Create a meeting reminder for 3pm tomorrow", + 'guideMeetingSend': "Lily will create a meeting reminder", + 'guideMeetingEnd': "Reminder created—try other commands", + 'guidePhoneStart': "Tell Lily: “Call Mom”", + 'guidePhoneInput': "Call Mom", + 'guidePhoneSend': "Lily will make the call", + 'guidePhoneEnd': "Call placed—try other commands", + 'guideSmsStart': "Tell Lily: “Send Dad a text: I’ll be home for dinner”", + 'guideSmsInput': "Text Dad: I’ll be home for dinner", + 'guideSmsSend': "Lily will send the message", + 'guideSmsEnd': "Message sent—voice control is convenient", // 商务会议助手页 "startMeeting": "Iniciar reunión", @@ -202,13 +406,244 @@ const Map esES = { 'aiSummary': 'Resumen de IA', 'meetingTranscript': 'Transcripción de reunión', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Configuración del sistema", //系统设置 - "vipRecharge": "Recarga de VIP", //会员充值 - "aiRecharge": "Miembro premium", //AI充值 - "translationRecharge": "Recarga de traducción", //翻译充值 - "meetingAssistantRecharge": "Recarga de asistente de reunión", //会议助手充值 - "cloudSync": "Recarga de sincronización en la nube", //云端同步 + "systemSettings": "Configuración del sistema", + "vipRecharge": "Recarga de VIP", + "aiRecharge": "Miembro premium", + "translationRecharge": "Recarga de traducción", + "meetingAssistantRecharge": "Recarga de asistente de reunión", + "cloudSync": "Recarga de sincronización en la nube", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Dispositivo conectado:", "accountId": "ID de cuenta:", "systemSetting": "Configuración del sistema", @@ -246,12 +681,10 @@ const Map esES = { 'selecttimbre': 'Seleccionar timbre', 'pleaseRead': 'Por favor lee', 'completeRecording': 'Completar grabación', - "firmwareUpgrade": "Actualización de firmware", // 固件升级 - "bleHeadsetFirmwareUpgrade": - "Actualización de firmware de auriculares BLE", // BLE耳机固件版本升级 - "deviceManagement": "Gestión de dispositivos", // 设备管理 - "manageConnectedDevices": - "Gestionar dispositivos Bluetooth conectados", // 管理已绑定的蓝牙设备 + "firmwareUpgrade": "Actualización de firmware", + "bleHeadsetFirmwareUpgrade": "Actualización de firmware de auriculares BLE", + "deviceManagement": "Gestión de dispositivos", + "manageConnectedDevices": "Gestionar dispositivos Bluetooth conectados", //设置setting_controller // 版本更新相关 @@ -260,11 +693,10 @@ const Map esES = { 'networkErrorRetry': 'Error de red, inténtalo de nuevo más tarde', // 设备管理相关 - 'clearPairedDevices': 'Limpiar dispositivos emparejados', - 'clearPairedDevicesConfirm': - '¿Estás seguro de que quieres limpiar todos los dispositivos emparejados?', - 'clearPairedDevicesSuccess': 'Limpieza de dispositivos emparejados exitosa', - 'clearPairedDevicesFailed': 'Fallo al limpiar dispositivos emparejados', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Chat de voz en tiempo real", @@ -273,11 +705,20 @@ const Map esES = { "loading": "Cargando...", //设备管理页面 - "earphone": "Auricular", - "voicerecorder": "Grabadora de voz", - "notBound": "No vinculado", - "deviceNotBoundYet": "Ningún dispositivo vinculado aún", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Desvincular", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -306,6 +747,20 @@ const Map esES = { "loadMoreMessages": "Cargar más mensajes...", "loadFailedClickRetry": "Carga fallida, haz clic para reintentar", "swipeUpForMore": "Desliza hacia arriba para más", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': '¡Hola! Soy **Lily**, puedo ayudarte con:\n\n' @@ -339,7 +794,7 @@ const Map esES = { 'submitSuccess': 'Enviado exitosamente', 'submitFailed': 'Fallo al enviar', 'reportSubmitted': 'Reporte enviado, lo procesaremos lo antes posible', - //'networkError': 'Error de red, inténtalo de nuevo más tarde', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Dañino/inseguro', 'pornographicVulgar': 'Pornográfico/vulgar', 'misleadingAttack': 'Ataque engañoso', @@ -349,7 +804,7 @@ const Map esES = { 'other': 'Otro', 'reportDescriptionHint': 'Queremos conocer la razón de tu reporte, puedes describir el problema que encontraste.', - 'submit': 'Enviar', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Generado por IA', @@ -404,6 +859,17 @@ const Map esES = { "friday": "Viernes", "saturday": "Sábado", "sunday": "Domingo", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Soleado", "partlyCloudy": "Parcialmente nublado", @@ -440,6 +906,8 @@ const Map esES = { 'deleteAccount': 'Eliminar cuenta', 'deleteAccountTips': '¿Estás seguro de que quieres eliminar permanentemente tu cuenta? Esta acción no se puede deshacer', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -460,8 +928,8 @@ const Map esES = { 'Error interno del servidor, inténtalo de nuevo más tarde', // Profile 用户交互 -//'error': 'Error', -//'success': 'Éxito', +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Fallo en la compresión de imagen', 'avatarUpdateFailed': 'Fallo en la actualización del avatar', 'usernameCannotBeEmpty': 'El nombre de usuario no puede estar vacío', @@ -492,15 +960,26 @@ const Map esES = { // 权限管理页面 'getPermissionStatusFailed': 'Fallo al obtener estado de permisos', 'communicationPermissions': 'Permisos de comunicación', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Permisos de calendario', 'locationPermissions': 'Permisos de ubicación', 'phone': 'Teléfono', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Escritura de calendario', 'calendarFullAccess': 'Acceso completo al calendario', 'locationInfo': 'Información de ubicación', 'phonePermissionDesc': 'Se usa para la función de llamadas telefónicas', 'smsPermissionDesc': 'Se usa para la función de envío de SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Se usa para crear eventos y recordatorios del calendario', 'calendarFullAccessPermissionDesc': @@ -520,18 +999,80 @@ const Map esES = { 'La función de llamadas telefónicas necesita permiso de teléfono', 'smsPermissionDetailDesc': 'La función de envío de SMS necesita permiso de SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'La creación de eventos del calendario necesita permiso de escritura del calendario', 'calendarFullAccessPermissionDetailDesc': 'La gestión de eventos del calendario necesita permiso completo del calendario', 'locationPermissionDetailDesc': 'Obtener información de ubicación necesita permiso de ubicación', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'La aplicación necesita este permiso para proporcionar funcionalidad completa', 'permanentDenialText': 'Has denegado permanentemente el permiso {permission}, ve a la configuración de la aplicación para habilitarlo', 'goToSettings': 'Ir a configuración', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 'newVersionFound': 'Nueva versión encontrada', // 版本更新对话框标题 'remindLater': 'Recordar más tarde', // 稍后提醒按钮 @@ -650,8 +1191,23 @@ const Map esES = { "东帝汶": "Timor Oriental", "斐济": "Fiyi", "所罗门群岛": "Islas Salomón", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Historial de traducción", "enableRecording": "Habilitar grabación", @@ -660,9 +1216,24 @@ const Map esES = { "phoneUser": "Usuario de teléfono", "selectSourceLanguage": "Seleccionar idioma origen", "selectTargetLanguage": "Seleccionar idioma destino", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Sin historial de traducción", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Limpiar historial", "clearHistoryConfirm": "¿Estás seguro de que quieres limpiar todo el historial de traducción? Esta operación no se puede deshacer.", @@ -671,7 +1242,58 @@ const Map esES = { "deleteSessionConfirm": "¿Estás seguro de que quieres eliminar todos los registros de traducción de esta sesión? Esta operación no se puede deshacer.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Traducir archivos de audio", "noAudioFiles": "Sin archivos de audio", "calculating": "Calculando...", @@ -717,7 +1339,7 @@ const Map esES = { "autoInputCode": "Entrada automática de código", "skipBinding": "Omitir vinculación", "rescan": "Volver a escanear", - "skip": "Omitir", + "verifyingDevice": "Verificando dispositivo...", "confirmBinding": "Confirmar vinculación", "associatingDevice": "Asociando dispositivo...", @@ -750,17 +1372,17 @@ const Map esES = { "pairingFailedRetry": "Fallo en el emparejamiento, inténtalo de nuevo", // 配对控制器相关 - //'connectDevice': 'Conectar dispositivo', + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Habilita Bluetooth por favor', 'deviceDisconnected': 'Dispositivo desconectado', 'readyToStartPairing': 'Listo para iniciar emparejamiento', 'checkingEnvironment': 'Verificando entorno...', 'ensureHeadsetOnAndPairingMode': 'Asegúrate de que los auriculares estén encendidos y en modo de emparejamiento', - //'goToBluetoothSettings': 'Ir a configuración de Bluetooth', - //'verifyingDevice': 'Verificando dispositivo...', - //'confirmBinding': 'Confirmar vinculación', - //'associatingDevice': 'Asociando dispositivo...', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Estableciendo conexión segura...', 'needManualBindingAuthCode': 'Necesita código de autorización de vinculación manual...', @@ -784,6 +1406,19 @@ const Map esES = { 'deviceAuthorizationFailedCheckCode': 'Fallo en la autorización del dispositivo, verifica el código de autorización', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Comentarios del usuario", 'feedbackInfo': 'Proporciona comentarios o sugerencias', @@ -792,7 +1427,7 @@ const Map esES = { 'feedbackRequired': 'Ingresa contenido de comentarios', 'contactInfo': 'Información de contacto', 'contactHint': 'Email/teléfono, para que podamos contactarte', - //'submit': 'Enviar', // 已存在,使用现有键 + 'submit': 'Enviar', 'feedbackSubmitSuccess': 'Comentarios enviados exitosamente, ¡gracias!', 'feedbackSubmitFailed': 'Fallo al enviar comentarios, inténtalo de nuevo más tarde', @@ -811,6 +1446,13 @@ const Map esES = { "connectionFailed": "Fallo de conexión", "retryConnection": "Reintentar conexión", "ota_updateNow": "Actualizar ahora", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Mantén el dispositivo conectado, no cierres la aplicación", "doNotDisconnect": "No desconectes", @@ -866,38 +1508,23 @@ const Map esES = { "乌尔都语": "Urdu", "波斯语": "Persa", "斯瓦希里语": "Suajili", - // Guide overlay keys (placeholders in English) - "sayLilyHint": "Say \"Lily Lily\" to the mic", - "imHere": "I’m here~", - "guideWelcomeWakeAI": "Welcome to Voitrans! First, wake your AI “Lily”.", - "aiReplyCompleted": "Lily has finished the reply!", - "aiThinking": "Lily is thinking…", - "guideAwakenSuccess": "Great! Lily is awake—ask it to help.", - "confirmInput": "Confirm Input", - "guideClickSendPrefix": "Tap send, ", - "guideWeatherStart": "Tell Lily: “What’s the weather today?”", - "guideWeatherInput": "What’s the weather today?", - "guideWeatherSend": "Lily will report the weather in real time", - "guideWeatherEnd": "Lily can report weather live—try other commands", - "guideMusicStart": "Tell Lily: “Play some rock music”", - "guideMusicInput": "Play some rock music", - "guideMusicSend": "Lily will find music for you", - "guideMusicEnd": "Lily found music—try other commands", - "guideNavStart": "Tell Lily: “Navigate to Shenzhen Airport”", - "guideNavInput": "Navigate to Shenzhen Airport", - "guideNavSend": "Lily will plan the route", - "guideNavEnd": "Navigation set—try other commands", - "guideMeetingStart": - "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", - "guideMeetingInput": "Create a meeting reminder for 3pm tomorrow", - "guideMeetingSend": "Lily will create a meeting reminder", - "guideMeetingEnd": "Reminder created—try other commands", - "guidePhoneStart": "Tell Lily: “Call Mom”", - "guidePhoneInput": "Call Mom", - "guidePhoneSend": "Lily will make the call", - "guidePhoneEnd": "Call placed—try other commands", - "guideSmsStart": "Tell Lily: “Send Dad a text: I’ll be home for dinner”", - "guideSmsInput": "Text Dad: I’ll be home for dinner", - "guideSmsSend": "Lily will send the message", - "guideSmsEnd": "Message sent—voice control is convenient", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/et_ee.dart b/lib/core/translations/language/et_ee.dart index ca977d0f2..c569c3d2e 100644 --- a/lib/core/translations/language/et_ee.dart +++ b/lib/core/translations/language/et_ee.dart @@ -33,6 +33,7 @@ const Map etEE = { "spanish": "Hispaania", "portuguese": "Portugali", "traditionalChinese": "Traditsiooniline hiina", + "traditionalChineseHK": "Traditsiooniline hiina (Hongkong)", "japanese": "Jaapani", "korean": "Korea", "french": "Prantsuse", @@ -102,8 +103,8 @@ const Map etEE = { "loginDeclaration": "Voitrans avaldus", // Voitrans 声明 "welcomeToThisApp": "Tere tulemast Voitrans'i, loe hoolikalt", // 欢迎使用Voitrans,请充分阅读 - // "privacyPolicy": "Privaatsuspoliitika", // 《隐私政策》 - 已存在,使用现有键 - // "userAgreement": "Kasutajaleping", // 《用户协议》 - 已存在,使用现有键 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": ". Klõpsates 'Nõustun ja sisenen' näitad, et oled täielikult lugenud ja nõustunud ülaltoodud lepingutega. Klõpsates 'Ei nõustu' rakendus sulgub.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 "disagree": "Ei nõustu", // 不同意 @@ -183,6 +184,209 @@ const Map etEE = { "usageStats": "Kasutamise statistika", "usageStatsInfo": "Näita sovelluksen kasutamise statistikat", "scene": "Stsenaariumid", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Jäta vahele", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Alusta koosolekut", @@ -197,13 +401,244 @@ const Map etEE = { 'aiSummary': 'AI kokkuvõte', 'meetingTranscript': 'Koosoleku transkriptsioon', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Süsteemi seaded", //系统设置 - "vipRecharge": "VIP liige varundus", //会员充值 - "aiRecharge": "Premium liige", //AI充值 - "translationRecharge": "Tõlke varundus", //翻译充值 - "meetingAssistantRecharge": "Koosoleku assistendi varundus", //会议助手充值 - "cloudSync": "Pääsyvaraus cloud-synkronointiin", //云端同步 + "systemSettings": "Süsteemi seaded", + "vipRecharge": "VIP liige varundus", + "aiRecharge": "Premium liige", + "translationRecharge": "Tõlke varundus", + "meetingAssistantRecharge": "Koosoleku assistendi varundus", + "cloudSync": "Pääsyvaraus cloud-synkronointiin", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Ühendatud seade:", "accountId": "Konto ID:", "systemSetting": "Süsteemi seaded", @@ -239,11 +674,10 @@ const Map etEE = { 'selecttimbre': 'Vali tämber', 'pleaseRead': 'Palun loe', 'completeRecording': 'Lõpeta salvestus', - "firmwareUpgrade": "Püsivara uuendus", // 固件升级 - "bleHeadsetFirmwareUpgrade": - "BLE kõrvaklappide püsivara uuendus", // BLE耳机固件版本升级 - "deviceManagement": "Seadmete haldamine", // 设备管理 - "manageConnectedDevices": "Halda ühendatud Bluetooth seadmeid", // 管理已绑定的蓝牙设备 + "firmwareUpgrade": "Püsivara uuendus", + "bleHeadsetFirmwareUpgrade": "BLE kõrvaklappide püsivara uuendus", + "deviceManagement": "Seadmete haldamine", + "manageConnectedDevices": "Halda ühendatud Bluetooth seadmeid", //设置setting_controller // 版本更新相关 @@ -252,11 +686,10 @@ const Map etEE = { 'networkErrorRetry': 'Võrgu viga, proovi hiljem uuesti', // 设备管理相关 - 'clearPairedDevices': 'Tühjenda seotud seadmed', - 'clearPairedDevicesConfirm': - 'Kas oled kindel, et tahad kõik seotud seadmed tühjendada?', - 'clearPairedDevicesSuccess': 'Seotud seadmete tühjendamine õnnestus', - 'clearPairedDevicesFailed': 'Seotud seadmete tühjendamine ebaõnnestus', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Reaalajas häälvestlus", @@ -265,11 +698,20 @@ const Map etEE = { "loading": "Laadimine...", //设备管理页面 - "earphone": "Kõrvaklapid", - "voicerecorder": "Häälesalvesti", - "notBound": "Pole seotud", - "deviceNotBoundYet": "Ükski seade pole veel seotud", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Eemalda seos", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -298,6 +740,20 @@ const Map etEE = { "loadMoreMessages": "Laadi rohkem sõnumeid...", "loadFailedClickRetry": "Laadimine ebaõnnestus, klõpsa uuesti proovimiseks", "swipeUpForMore": "Libista üles rohkema jaoks", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Tere! Olen **Lily**, saan sind aidata:\n\n' @@ -330,7 +786,7 @@ const Map etEE = { 'submitSuccess': 'Edukalt esitatud', 'submitFailed': 'Esitamine ebaõnnestus', 'reportSubmitted': 'Teade esitatud, töötleme selle võimalikult kiiresti', - //'networkError': 'Võrgu viga, proovi hiljem uuesti', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Kahjulik/ohtlik', 'pornographicVulgar': 'Pornograafiline/vulgaarne', 'misleadingAttack': 'Eksitav rünnak', @@ -340,7 +796,7 @@ const Map etEE = { 'other': 'Muu', 'reportDescriptionHint': 'Tahame teada teate põhjust, võid kirjeldada probleemi, millega kokku puutusid.', - 'submit': 'Esita', + //'submit': '提交', //Message_bubble 'generatedByAi': 'AI poolt genereeritud', @@ -393,6 +849,17 @@ const Map etEE = { "friday": "Reede", "saturday": "Laupäev", "sunday": "Pühapäev", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Päikeseline", "partlyCloudy": "Osaliselt pilves", @@ -428,6 +895,8 @@ const Map etEE = { 'deleteAccount': 'Kustuta konto', 'deleteAccountTips': 'Kas oled kindel, et tahad oma konto jäädavalt kustutada? Seda toimingut ei saa tagasi võtta', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -448,8 +917,8 @@ const Map etEE = { 'Serveri sisemine viga, proovi hiljem uuesti', // Profile 用户交互 -//'error': 'Viga', -//'success': 'Õnnestus', +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Pildi tihendamine ebaõnnestus', 'avatarUpdateFailed': 'Avatari uuendamine ebaõnnestus', 'usernameCannotBeEmpty': 'Kasutajanimi ei saa olla tühi', @@ -479,15 +948,26 @@ const Map etEE = { // 权限管理页面 'getPermissionStatusFailed': 'Lubade oleku hankimine ebaõnnestus', 'communicationPermissions': 'Suhtluse load', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Kalendri load', 'locationPermissions': 'Asukoha load', 'phone': 'Telefon', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Kalendri kirjutamine', 'calendarFullAccess': 'Kalendri täielik ligipääs', 'locationInfo': 'Asukoha info', 'phonePermissionDesc': 'Kasutatakse telefonikõnede funktsiooni jaoks', 'smsPermissionDesc': 'Kasutatakse SMS saatmise funktsiooni jaoks', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Kasutatakse kalendri sündmuste ja meeldetuletuste loomiseks', 'calendarFullAccessPermissionDesc': @@ -503,17 +983,79 @@ const Map etEE = { 'permissionRequestError': 'Loa taotluse viga', 'phonePermissionDetailDesc': 'Telefonikõnede funktsioon vajab telefoni luba', 'smsPermissionDetailDesc': 'SMS saatmise funktsioon vajab SMS luba', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Kalendri sündmuste loomine vajab kalendri kirjutamise luba', 'calendarFullAccessPermissionDetailDesc': 'Kalendri sündmuste haldamine vajab kalendri täielikku luba', 'locationPermissionDetailDesc': 'Asukoha info hankimine vajab asukoha luba', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Rakendus vajab seda luba täieliku funktsionaalsuse pakkumiseks', 'permanentDenialText': 'Oled püsivalt keeldunud {permission} loast, mine rakenduse seadetesse selle lubamiseks', 'goToSettings': 'Mine seadetesse', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 'newVersionFound': 'Leitud uus versioon', // 版本更新对话框标题 'remindLater': 'Tuleta hiljem meelde', // 稍后提醒按钮 @@ -632,8 +1174,23 @@ const Map etEE = { "东帝汶": "Ida-Timor", "斐济": "Fidži", "所罗门群岛": "Saalomoni Saared", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Tõlke ajalugu", "enableRecording": "Luba salvestamine", @@ -642,9 +1199,24 @@ const Map etEE = { "phoneUser": "Telefoni kasutaja", "selectSourceLanguage": "Vali lähtekeel", "selectTargetLanguage": "Vali sihtkeel", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Tõlke ajalugu puudub", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Tühjenda ajalugu", "clearHistoryConfirm": "Kas oled kindel, et tahad kogu tõlke ajaloo tühjendada? Seda toimingut ei saa tagasi võtta.", @@ -653,7 +1225,58 @@ const Map etEE = { "deleteSessionConfirm": "Kas oled kindel, et tahad kõik selle seansi tõlke kirjed kustutada? Seda toimingut ei saa tagasi võtta.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Tõlgi helifailid", "noAudioFiles": "Helifaile pole", "calculating": "Arvutamine...", @@ -699,7 +1322,7 @@ const Map etEE = { "autoInputCode": "Automaatne koodi sisestus", "skipBinding": "Jäta sidumine vahele", "rescan": "Skaneeri uuesti", - "skip": "Jäta vahele", + "verifyingDevice": "Seadme kontrollimine...", "confirmBinding": "Kinnita sidumine", "associatingDevice": "Seadme seostamine...", @@ -728,17 +1351,17 @@ const Map etEE = { "pairingFailedRetry": "Sidumine ebaõnnestus, proovi uuesti", // 配对控制器相关 - //'connectDevice': 'Ühenda seade', + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Luba Bluetooth', 'deviceDisconnected': 'Seade lahti ühendatud', 'readyToStartPairing': 'Valmis sidumist alustama', 'checkingEnvironment': 'Keskkonna kontrollimine...', 'ensureHeadsetOnAndPairingMode': 'Veendu, et kõrvaklapid on sisse lülitatud ja sidumisrežiimis', - //'goToBluetoothSettings': 'Mine Bluetooth seadetesse', - //'verifyingDevice': 'Seadme kontrollimine...', - //'confirmBinding': 'Kinnita sidumine', - //'associatingDevice': 'Seadme seostamine...', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Turvalise ühenduse loomine...', 'needManualBindingAuthCode': 'Vajab käsitsi sidumise autoriseerimiskoodi...', 'pairingSuccessful': 'Sidumine õnnestus!', @@ -760,6 +1383,19 @@ const Map etEE = { 'deviceAuthorizationFailedCheckCode': 'Seadme autoriseerimine ebaõnnestus, kontrolli autoriseerimiskoodi', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Kasutaja tagasiside", 'feedbackInfo': 'Anna tagasisidet või ettepanekuid', @@ -768,7 +1404,7 @@ const Map etEE = { 'feedbackRequired': 'Sisesta tagasiside sisu', 'contactInfo': 'Kontaktinfo', 'contactHint': 'E-mail/telefon, et saaksime sinuga ühendust võtta', - //'submit': 'Esita', // 已存在,使用现有键 + 'submit': 'Esita', 'feedbackSubmitSuccess': 'Tagasiside edukalt esitatud, täname!', 'feedbackSubmitFailed': 'Tagasiside esitamine ebaõnnestus, proovi hiljem uuesti', @@ -787,6 +1423,13 @@ const Map etEE = { "connectionFailed": "Ühendus ebaõnnestus", "retryConnection": "Proovi ühendust uuesti", "ota_updateNow": "Uuenda kohe", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Hoia seade ühendatuna, ära sulge rakendust", "doNotDisconnect": "Ära ühenda lahti", "charging": "Laadimine", @@ -841,4 +1484,23 @@ const Map etEE = { "乌尔都语": "Urdu", "波斯语": "Pärsia", "斯瓦希里语": "Suahiili", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/fa_ir.dart b/lib/core/translations/language/fa_ir.dart index aa577fcbc..d9ba2fa8d 100644 --- a/lib/core/translations/language/fa_ir.dart +++ b/lib/core/translations/language/fa_ir.dart @@ -33,6 +33,7 @@ const Map faIR = { "spanish": "اسپانیایی", "portuguese": "پرتغالی", "traditionalChinese": "چینی سنتی", + "traditionalChineseHK": "چینی سنتی (هنگ‌کنگ)", "japanese": "ژاپنی", "korean": "کره‌ای", "french": "فرانسوی", @@ -100,12 +101,15 @@ const Map faIR = { "usePasswordLogin": "ورود با رمز عبور", // 隐私政策弹窗 - "loginDeclaration": "بیانیه Voitrans", - "welcomeToThisApp": "به Voitrans خوش آمدید، لطفاً با دقت بخوانید ", + "loginDeclaration": "بیانیه Voitrans", // Voitrans 声明 + "welcomeToThisApp": + "به Voitrans خوش آمدید، لطفاً با دقت بخوانید ", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ". با کلیک بر روی «موافقم و وارد می‌شوم»، شما تأیید می‌کنید که توافق‌نامه‌های فوق را به طور کامل مطالعه کرده و با آن‌ها موافقت نموده‌اید. کلیک بر روی «مخالفم» منجر به خروج از برنامه خواهد شد.", - "disagree": "مخالفم", - "agreeAndEnter": "موافقم و وارد می‌شوم", + ". با کلیک بر روی «موافقم و وارد می‌شوم»، شما تأیید می‌کنید که توافق‌نامه‌های فوق را به طور کامل مطالعه کرده و با آن‌ها موافقت نموده‌اید. کلیک بر روی «مخالفم» منجر به خروج از برنامه خواهد شد.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "مخالفم", // 不同意 + "agreeAndEnter": "موافقم و وارد می‌شوم", // 同意并进入 // 首页 "deviceStatus": "وضعیت دستگاه", @@ -158,7 +162,7 @@ const Map faIR = { 'right': 'راست', 'checkConnectionStatusFailed': 'بررسی وضعیت اتصال ناموفق بود', - // 发现页 +// 发现页 "searchAi": "جستجوی ویژگی‌های هوش مصنوعی...", "exploreSlogan": "ایربادهای هوشمند، امکانات بی‌پایان", "exploreSlogan1": "همراه هوشمند، امکانات بی‌پایان", @@ -181,6 +185,209 @@ const Map faIR = { "usageStats": "استفاده از خدمات", "usageStatsInfo": "دیدن آمار مصرف سرویس‌ها", "scene": "سناریوها", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "رد کردن", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "شروع جلسه", @@ -233,6 +440,7 @@ const Map faIR = { 'summarizing': 'در حال خلاصه‌سازی...', 'analyzing': 'در حال تجزیه و تحلیل...', 'summaryComplete': 'خلاصه‌سازی کامل شد', + //'generating': '正在生成...', 'generate': 'ایجاد', 'overview': 'نمای کلی', 'transcription': 'متن', @@ -379,9 +587,17 @@ const Map faIR = { // Meeting模块 - 录音语言相关 'recordLanguage': 'زبان ضبط', + // 'chinese': '中文普通话(简体)', 'cantonese': 'کانتونی', 'sichuan': 'گویش سیچوان', 'shanghai': 'گویش شانگهایی', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', // Meeting模块 - 分享相关 'shareLink': 'اشتراک‌گذاری پیوند', @@ -417,12 +633,16 @@ const Map faIR = { 'inputAttendees': 'ورود شرکت‌کنندگان', // 设置页 - "systemSettings": "تنظیمات سیستم", //系统设置 - "vipRecharge": "شارژ عضویت ویژه", //会员充值 - "aiRecharge": "عضویت ویژه", //AI充值 - "translationRecharge": "شارژ ترجمه", //翻译充值 - "meetingAssistantRecharge": "شارژ کمک‌کننده جلسه", //会议助手充值 - "cloudSync": "شارژ همگام‌سازی ابری", //云端同步 + "systemSettings": "تنظیمات سیستم", + "vipRecharge": "شارژ عضویت ویژه", + "aiRecharge": "عضویت ویژه", + "translationRecharge": "شارژ ترجمه", + "meetingAssistantRecharge": "شارژ کمک‌کننده جلسه", + "cloudSync": "شارژ همگام‌سازی ابری", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "دستگاه متصل:", "accountId": "شناسه حساب:", "systemSetting": "تنظیمات سیستم", @@ -434,8 +654,8 @@ const Map faIR = { "lastBackup": "آخرین پشتیبان‌گیری:", "privacySettings": "تنظیمات حریم خصوصی", "privacySettingsInfo": "مدیریت جمع‌آوری داده‌ها و مجوزها", - "permissionManagement": "مدیریت مجوزها", - "permissionManagementInfo": "مدیریت تنظیمات مجوزهای برنامه", + "permissionManagement": "مدیریت مجوزها", // 权限管理 + "permissionManagementInfo": "مدیریت تنظیمات مجوزهای برنامه", // 管理应用权限设置 "aboutApplication": "درباره", "versions": "نسخه", "checkUpdates": "بررسی به‌روزرسانی‌ها", @@ -468,10 +688,16 @@ const Map faIR = { 'checkUpdateFailed': 'بررسی به‌روزرسانی ناموفق بود', 'networkErrorRetry': 'خطای شبکه، لطفاً بعداً دوباره تلاش کنید', +// 设备管理相关 + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', + // 设置页面 - 实时语音对话 - 'realtimeVoiceChat': 'چت صوتی همزمان', - 'realtimeVoiceChatInfo': 'تجربه ویژگی‌های تعامل صوتی هوشمند (پیش‌نمایش)', - 'loading': 'در حال بارگیری...', + "realtimeVoiceChat": 'چت صوتی همزمان', + "realtimeVoiceChatInfo": 'تجربه ویژگی‌های تعامل صوتی هوشمند (پیش‌نمایش)', + "loading": 'در حال بارگیری...', //设备管理页面 "deviceTypeUnknown": "دستگاه ناشناخته", @@ -489,8 +715,8 @@ const Map faIR = { "آیا مطمئن هستید که می‌خواهید اتصال دستگاه «{deviceName}» را لغو کنید؟", "confirmUnbindAction": "تأیید لغو اتصال", - // Agent模块 - //Agent View +//Agent 模块 + // agent View "Lily": "Lily", "clearChatHistory": "پاک کردن تاریخچه چت", "online": "آنلاین", @@ -516,19 +742,20 @@ const Map faIR = { "loadMoreMessages": "بارگیری پیام‌های بیشتر...", "loadFailedClickRetry": "بارگیری ناموفق بود، برای تلاش مجدد کلیک کنید", "swipeUpForMore": "برای مشاهده بیشتر به بالا بکشید", - "callingTool": "در حال کمک به شما هستم، لطفاً صبر کنید!", + "callingTool": "در حال کمک به شما هستم، لطفاً صبر کنید!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 // 预设提示词 - "presetMusic": "پخش موسیقی", - "presetNavigation": "مسیریابی به", - "presetWeather": "آب و هوای امروز", - "presetNews": "اخبار امروز", - "presetFood": "غذای نزدیک", - "playSomeMusic": "پخش چند موسیقی محبوب", - "navigationTo": "لطفاً به من در مسیریابی به", - "todayWeather": "امروز هوا چطور است؟", - "todayNews": "اخبار امروز چیست؟", - "nearbyFood": "چه غذاهای خوشمزه‌ای در این نزدیکی هست؟", + "presetMusic": "پخش موسیقی", // 来点音乐 + "presetNavigation": "مسیریابی به", // 导航 + "presetWeather": "آب و هوای امروز", // 今日天气 + "presetNews": "اخبار امروز", // 今日新闻 + "presetFood": "غذای نزدیک", // 美食 + "playSomeMusic": "پخش چند موسیقی محبوب", // 播放一些流行音乐 + "navigationTo": "لطفاً به من در مسیریابی به", // 导航到 + "todayWeather": "امروز هوا چطور است؟", // 今日天气 + "todayNews": "اخبار امروز چیست؟", // 今日新闻 + "nearbyFood": "چه غذاهای خوشمزه‌ای در این نزدیکی هست؟", // 美食 // Agent controller 'welcomeMessage': 'سلام! من **شیائویان** هستم، می‌توانم به شما کمک کنم:\n\n' @@ -549,9 +776,9 @@ const Map faIR = { 'startVoiceInput': 'شروع ورودی صوتی', 'startPhoneCallMode': 'شروع حالت تماس تلفنی، شروع ورودی صوتی', - //Agent 全屏编辑器 - 'fullScreenEditorHint': 'پیام خود را اینجا تایپ کنید...', - 'characterCount': '{count} کاراکتر', + // Agent 全屏编辑器 + 'fullScreenEditorHint': 'پیام خود را اینجا تایپ کنید...', // 全屏编辑器输入提示 + 'characterCount': '{count} کاراکتر', // 字符计数显示 // 消息长按操作 'copy': 'کپی', @@ -560,6 +787,7 @@ const Map faIR = { 'submitSuccess': 'ارسال موفقیت‌آمیز بود', 'submitFailed': 'ارسال ناموفق بود', 'reportSubmitted': 'گزارش ارسال شد، در اسرع وقت آن را پردازش خواهیم کرد', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'مضر/ناامن', 'pornographicVulgar': 'مستهجن/ مبتذل', 'misleadingAttack': 'گمراه‌کننده/تهاجمی', @@ -569,25 +797,26 @@ const Map faIR = { 'other': 'دیگر', 'reportDescriptionHint': 'ما می‌خواهیم دلیل گزارش شما را بدانیم، می‌توانید مشکلی را که با آن مواجه شدید توصیف کنید.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'تولید شده توسط هوش مصنوعی', - //music_card + //音乐卡片 music_card 'recommendedMusic': 'در اینجا چند موسیقی توصیه‌شده وجود دارد:', 'playList': 'لیست پخش', 'moreMusic': 'موسیقی بیشتر', //导航卡片 navigation_card - 'kilometers': ' کیلومتر', - 'meters': ' متر', - 'hours': ' ساعت', - 'minutes': ' دقیقه', - 'seconds': ' ثانیه', - 'navigating': 'در حال مسیریابی', - 'currentLocation': 'موقعیت فعلی', - 'approximate': 'حدود ', - 'enterRoad': ' وارد ', + 'kilometers': ' کیلومتر', // 公里单位 + 'meters': ' متر', // 米单位 + 'hours': ' ساعت', // 小时单位 + 'minutes': ' دقیقه', // 分钟单位 + 'seconds': ' ثانیه', // 秒单位 + 'navigating': 'در حال مسیریابی', // 导航状态 + 'currentLocation': 'موقعیت فعلی', // 当前位置 + 'approximate': 'حدود ', // 大约 + 'enterRoad': ' وارد ', // 进入道路 "driving": "رانندگی", "walking": "پیاده‌روی", "bicycling": "دوچرخه‌سواری", @@ -623,6 +852,17 @@ const Map faIR = { "friday": "جمعه", "saturday": "شنبه", "sunday": "یکشنبه", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "آفتابی", "partlyCloudy": "کمی ابری", @@ -644,7 +884,7 @@ const Map faIR = { "haze": "غبار", "strongWind": "باد شدید", - // 编辑个人信息页 + //编辑个人信息页 "editProfile": "ویرایش پروفایل", "avatar": "آواتار", "nickname": "نام مستعار", @@ -661,7 +901,7 @@ const Map faIR = { 'clean': 'پاک کردن حافظه پنهان', 'cleanTips': 'آیا مطمئن هستید که می‌خواهید حافظه پنهان شخصی را پاک کنید؟', - //Profile 错误信息 + // Profile 错误信息 'networkConnectionFailed': 'اتصال شبکه ناموفق بود، لطفاً تنظیمات شبکه را بررسی کرده و دوباره تلاش کنید', 'serverTemporarilyUnavailable': @@ -679,7 +919,9 @@ const Map faIR = { 'serverInternalErrorRetryLater': 'خطای داخلی سرور، لطفاً بعداً دوباره تلاش کنید', - //Profile 用户交互 +// Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'فشرده‌سازی تصویر ناموفق بود', 'avatarUpdateFailed': 'به‌روزرسانی آواتار ناموفق بود', 'usernameCannotBeEmpty': 'نام کاربری نمی‌تواند خالی باشد', @@ -692,15 +934,19 @@ const Map faIR = { 'deleteAccountFailedRetry': 'حذف حساب ناموفق بود، لطفاً دوباره تلاش کنید', // 账号服务相关 - 'clearUserDataFailed': 'پاک کردن داده‌های کاربر ناموفق بود', - 'deleteUserDataFailed': 'حذف داده‌های کاربر ناموفق بود', - 'thirdPartyLogoutSuccess': 'خروج از حساب شخص ثالث موفقیت‌آمیز بود', - 'thirdPartyLogoutFailed': 'خروج از حساب شخص ثالث ناموفق بود', - 'signOutProcessError': 'خطا در طول فرآیند خروج از حساب رخ داد', - 'deleteAccountProcessError': 'خطا در طول فرآیند حذف حساب رخ داد', - 'userDataClearSuccess': 'داده‌های کاربر با موفقیت پاک شد', - 'allUserDataClearSuccess': 'تمام داده‌های کاربر با موفقیت پاک شد', - 'accountServiceInitialized': 'AccountService آماده‌سازی شد', + 'clearUserDataFailed': 'پاک کردن داده‌های کاربر ناموفق بود', // 清理用户数据失败 + 'deleteUserDataFailed': 'حذف داده‌های کاربر ناموفق بود', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': + 'خروج از حساب شخص ثالث موفقیت‌آمیز بود', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'خروج از حساب شخص ثالث ناموفق بود', // 第三方登录退出失败 + 'signOutProcessError': 'خطا در طول فرآیند خروج از حساب رخ داد', // 登出过程发生错误 + 'deleteAccountProcessError': + 'خطا در طول فرآیند حذف حساب رخ داد', // 删除账号过程发生错误 + 'userDataClearSuccess': 'داده‌های کاربر با موفقیت پاک شد', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'تمام داده‌های کاربر با موفقیت پاک شد', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'AccountService آماده‌سازی شد', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'دریافت وضعیت مجوز ناموفق بود', @@ -715,6 +961,7 @@ const Map faIR = { 'phone': 'تلفن', 'sms': 'پیامک', 'contacts': 'مخاطبین', + //'bluetooth': '蓝牙', 'notification': 'اعلان', 'alarm': 'زنگ هشدار', 'calendarWrite': 'نوشتن در تقویم', @@ -742,6 +989,12 @@ const Map faIR = { 'smsPermissionDetailDesc': 'عملکرد پیامک به مجوز پیامک نیاز دارد', 'alarmPermissionDetailDesc': 'این مجوز برای تنظیم زنگ‌های هشدار دقیق و اطمینان از فعال شدن یادآوری‌ها به موقع مورد نیاز است', + 'calendarWritePermissionDetailDesc': + 'ایجاد رویدادهای تقویم به مجوز نوشتن در تقویم نیاز دارد', + 'calendarFullAccessPermissionDetailDesc': + 'مدیریت رویدادهای تقویم به مجوز دسترسی کامل به تقویم نیاز دارد', + 'locationPermissionDetailDesc': + 'دریافت اطلاعات موقعیت مکانی به مجوز موقعیت مکانی نیاز دارد', 'contactsPermissionDesc': 'برای دسترسی به اطلاعات مخاطبین استفاده می‌شود', 'contactsPermissionDetailDesc': 'عملکرد تماس تلفنی و پیامک برای انتخاب مخاطبین به مجوز مخاطبین نیاز دارد', @@ -760,12 +1013,6 @@ const Map faIR = { 'notificationPermissionDesc': 'برای ارسال پیام‌های اعلان استفاده می‌شود', 'notificationPermissionDetailDesc': 'برنامه برای ارسال هشدارها و پیام‌های مهم به شما به مجوز اعلان نیاز دارد', - 'calendarWritePermissionDetailDesc': - 'ایجاد رویدادهای تقویم به مجوز نوشتن در تقویم نیاز دارد', - 'calendarFullAccessPermissionDetailDesc': - 'مدیریت رویدادهای تقویم به مجوز دسترسی کامل به تقویم نیاز دارد', - 'locationPermissionDetailDesc': - 'دریافت اطلاعات موقعیت مکانی به مجوز موقعیت مکانی نیاز دارد', 'appNeedsPermissionForFullFunction': 'برنامه برای ارائه عملکرد کامل به این مجوز نیاز دارد', 'permanentDenialText': @@ -785,6 +1032,8 @@ const Map faIR = { 'مجوز اسکن بلوتوث برای همیشه رد شده است، لطفاً برای فعال کردن آن به صورت دستی به تنظیمات بروید.', 'bluetoothConnectPermanentDenial': 'مجوز اتصال بلوتوث برای همیشه رد شده است، لطفاً برای فعال کردن آن به صورت دستی به تنظیمات بروید.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', 'notificationPermission': 'اعلان', 'locationPermission': 'موقعیت مکانی', 'notificationPermissionExplanation': @@ -795,6 +1044,7 @@ const Map faIR = { 'شما مجوز اعلان را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات بروید.', 'locationPermissionPermanentDenial': 'شما مجوز موقعیت مکانی را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات بروید.', +//'microphonePermission': '录音', 'storagePermission': 'ذخیره‌سازی', 'microphonePermissionExplanation': 'ما برای ضبط محتوای صوتی به مجوز میکروفون نیاز داریم.', @@ -814,17 +1064,17 @@ const Map faIR = { 'permissionUtilConfirm': 'تأیید', // 版本更新对话框 - 'newVersionFound': 'نسخه جدید یافت شد', - 'remindLater': 'بعداً یادآوری کن', - 'updateNow': 'اکنون به‌روزرسانی کن', - 'checkUpdate': 'بررسی به‌روزرسانی', - 'updateFailed': 'به‌روزرسانی ناموفق بود', + 'newVersionFound': 'نسخه جدید یافت شد', // 版本更新对话框标题 + 'remindLater': 'بعداً یادآوری کن', // 稍后提醒按钮 + 'updateNow': 'اکنون به‌روزرسانی کن', // 立即更新按钮 + 'checkUpdate': 'بررسی به‌روزرسانی', // 检查更新按钮 + 'updateFailed': 'به‌روزرسانی ناموفق بود', // 更新失败提示 'cannotOpenAppStore': - 'نمی‌توان فروشگاه برنامه را باز کرد، لطفاً به صورت دستی به‌روزرسانی کنید', + 'نمی‌توان فروشگاه برنامه را باز کرد، لطفاً به صورت دستی به‌روزرسانی کنید', // 无法打开应用商店提示 'updateErrorRetry': - 'خطا در طول به‌روزرسانی رخ داد، لطفاً بعداً دوباره تلاش کنید', + 'خطا در طول به‌روزرسانی رخ داد، لطفاً بعداً دوباره تلاش کنید', // 更新错误重试提示 - // 国家列表 + //国家列表 "邮箱": "ایمیل", "中国": "چین", "美国": "ایالات متحده", @@ -948,7 +1198,7 @@ const Map faIR = { "pictureTranslation": "ترجمه تصویر", "textTranslation": "ترجمه متن", - // 翻译主页 + // 翻译主页 (translation_view.dart) "translationHistory": "تاریخچه ترجمه", "enableRecording": "فعال کردن ضبط", "viewAudioFiles": "مشاهده فایل‌های صوتی", @@ -958,12 +1208,22 @@ const Map faIR = { "selectTargetLanguage": "انتخاب زبان مقصد", "me": "من", "counterPart": "طرف مقابل", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) - "autoDetect": "تشخیص خودکار", + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "تشخیص خودکار", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", // 翻译历史页 "noTranslationHistory": "تاریخچه ترجمه وجود ندارد", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "پاک کردن تاریخچه", "clearHistoryConfirm": "آیا مطمئن هستید که می‌خواهید تمام تاریخچه ترجمه را پاک کنید؟ این عمل قابل بازگشت نیست.", @@ -972,7 +1232,58 @@ const Map faIR = { "deleteSessionConfirm": "آیا مطمئن هستید که می‌خواهید تمام سوابق ترجمه این جلسه را حذف کنید؟ این عمل قابل بازگشت نیست.", - // 翻译音频文件列表页 + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "ترجمه فایل‌های صوتی", "noAudioFiles": "فایل صوتی وجود ندارد", "calculating": "در حال محاسبه...", @@ -984,7 +1295,7 @@ const Map faIR = { "renameAudioFile": "تغییر نام فایل صوتی", "enterNewFileName": "لطفاً نام فایل جدید را وارد کنید", - // 翻译详情页(translation_detail_view.dart) + // 翻译详情页 (translation_detail_view.dart) "originalRecord": "سابقه اصلی", "recordSummary": "خلاصه سابقه", "clickToGenerateSummary": "برای ایجاد خلاصه جلسه، روی دکمه زیر کلیک کنید", @@ -1008,7 +1319,7 @@ const Map faIR = { "translationSessionRecord": "سابقه جلسه ترجمه", // 配对模块 - // 配对页面 + // 配对页面 (pairing_view.dart & pairing_view_new.dart) "devicePairing": "جفت‌سازی دستگاه", "connectYourDeepSoundHeadset": "هدست Voitrans خود را متصل کنید", "bind": "اتصال", @@ -1017,7 +1328,7 @@ const Map faIR = { "autoInputCode": "ورود خودکار کد", "skipBinding": "رد کردن اتصال", "rescan": "اسکن مجدد", - "skip": "رد کردن", + "verifyingDevice": "در حال تأیید دستگاه...", "confirmBinding": "تأیید اتصال", "associatingDevice": "در حال مرتبط‌سازی دستگاه...", @@ -1048,13 +1359,18 @@ const Map faIR = { "مجوز ناموفق بود، لطفاً کد مجوز را بررسی کنید", "pairingFailedRetry": "جفت‌سازی ناموفق بود، لطفاً دوباره تلاش کنید", - //配对控制器相关 + // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'لطفاً بلوتوث را فعال کنید', 'deviceDisconnected': 'دستگاه قطع شد', 'readyToStartPairing': 'آماده برای شروع جفت‌سازی', 'checkingEnvironment': 'در حال بررسی محیط...', 'ensureHeadsetOnAndPairingMode': 'لطفاً اطمینان حاصل کنید که هدست روشن و در حالت جفت‌سازی است', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'در حال برقراری اتصال امن...', 'needManualBindingAuthCode': 'کد مجوز اتصال دستی مورد نیاز است...', 'pairingSuccessful': 'جفت‌سازی موفقیت‌آمیز بود!', @@ -1077,18 +1393,20 @@ const Map faIR = { 'deviceAuthorizationFailedCheckCode': 'مجوز دستگاه ناموفق بود، لطفاً کد مجوز را بررسی کنید', - // iOS蓝牙引导窗 - 'bluetoothGuideTitle': 'فعال‌سازی دستی بلوتوث مورد نیاز است', - 'bluetoothGuideSteps': 'لطفاً این مراحل را دنبال کنید:', - 'bluetoothGuideStep1': 'فعال کردن بلوتوث: تنظیمات ← بلوتوث ← روشن کردن', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'فعال‌سازی دستی بلوتوث مورد نیاز است', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'لطفاً این مراحل را دنبال کنید:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'فعال کردن بلوتوث: تنظیمات ← بلوتوث ← روشن کردن', // 开启蓝牙:设置 → 蓝牙 → 开启 'bluetoothGuideStep2': - 'اتصال دستگاه: دستگاه خود را در «دستگاه‌های من» پیدا کنید و برای اتصال ضربه بزنید', - 'bluetoothGuideStep3': 'بازگشت به برنامه برای ادامه فرآیند جفت‌سازی', + 'اتصال دستگاه: دستگاه خود را در «دستگاه‌های من» پیدا کنید و برای اتصال ضربه بزنید', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'بازگشت به برنامه برای ادامه فرآیند جفت‌سازی', // 返回应用继续配对流程 'bluetoothGuideTip': - 'نکته: می‌توانید آیکون بلوتوث را در مرکز کنترل به مدت طولانی فشار دهید تا به سرعت به تنظیمات بلوتوث دسترسی پیدا کنید', - 'iKnow': 'متوجه شدم', + 'نکته: می‌توانید آیکون بلوتوث را در مرکز کنترل به مدت طولانی فشار دهید تا به سرعت به تنظیمات بلوتوث دسترسی پیدا کنید', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'متوجه شدم', // 我知道了 - // 用户反馈页 + //用户反馈页 "feedback": "بازخورد", 'feedbackInfo': 'ارائه بازخورد یا پیشنهادات', 'feedbackDescription': 'لطفاً مشکل یا پیشنهاد خود را توصیف کنید', @@ -1115,6 +1433,13 @@ const Map faIR = { "connectionFailed": "اتصال ناموفق", "retryConnection": "تلاش مجدد برای اتصال", "ota_updateNow": "اکنون به‌روزرسانی کن", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "لطفاً دستگاه را متصل نگه دارید، برنامه را نبندید", "doNotDisconnect": "اتصال را قطع نکنید", "charging": "در حال شارژ", @@ -1123,11 +1448,11 @@ const Map faIR = { "هر دو ایرباد را بردارید و اطمینان حاصل کنید که سطح باتری بالای ۲۰٪ است", // 音乐列表页面 - "noMusic": "بدون موسیقی", - "noPlayingMusic": "موسیقی در حال پخش نیست", - "unknownSong": "آهنگ ناشناخته", - "unknownArtist": "هنرمند ناشناخته", - "playAll": "پخش همه", + "noMusic": "بدون موسیقی", // 暂无音乐 + "noPlayingMusic": "موسیقی در حال پخش نیست", // 暂无播放音乐 + "unknownSong": "آهنگ ناشناخته", // 未知歌曲 + "unknownArtist": "هنرمند ناشناخته", // 未知歌手 + "playAll": "پخش همه", // 播放全部 // 语言名称 "中文(简体)": "چینی (ساده‌شده)", @@ -1170,8 +1495,22 @@ const Map faIR = { "波斯语": "فارسی", "斯瓦希里语": "سواحیلی", - // Time related + // 时间相关 "justNow": "همین الان", "minutesAgo": "@minutes دقیقه پیش", "yesterday": "دیروز", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/fi_fi.dart b/lib/core/translations/language/fi_fi.dart index b1d4c535a..e69482122 100644 --- a/lib/core/translations/language/fi_fi.dart +++ b/lib/core/translations/language/fi_fi.dart @@ -33,6 +33,7 @@ const Map fiFI = { "spanish": "Espanja", "portuguese": "Portugali", "traditionalChinese": "Perinteinen kiina", + "traditionalChineseHK": "Perinteinen kiina (Hongkong)", "japanese": "Japani", "korean": "Korea", "french": "Ranska", @@ -100,12 +101,15 @@ const Map fiFI = { "usePasswordLogin": "Kirjaudu sisään salasanalla", // 隐私政策弹窗 - "loginDeclaration": "Voitransin ilmoitus", - "welcomeToThisApp": "Tervetuloa Voitransiin, lue huolellisesti", + "loginDeclaration": "Voitransin ilmoitus", // Voitrans 声明 + "welcomeToThisApp": + "Tervetuloa Voitransiin, lue huolellisesti", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", klikkaamalla 'Hyväksy ja siirry' vahvistat, että olet lukenut ja hyväksynyt yllä olevat sopimukset. Klikkaamalla 'Hylkää' poistut sovelluksesta.", - "disagree": "Hylkää", - "agreeAndEnter": "Hyväksy ja siirry", + ", klikkaamalla 'Hyväksy ja siirry' vahvistat, että olet lukenut ja hyväksynyt yllä olevat sopimukset. Klikkaamalla 'Hylkää' poistut sovelluksesta.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Hylkää", // 不同意 + "agreeAndEnter": "Hyväksy ja siirry", // 同意并进入 // 首页 "deviceStatus": "Laitteen tila", @@ -185,6 +189,209 @@ const Map fiFI = { "usageStats": "Käyttöstatistiikka", "usageStatsInfo": "Näytä sovelluksen käytön statistiikka", "scene": "Skenaario", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Ohita", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Aloita kokous", @@ -199,13 +406,244 @@ const Map fiFI = { 'aiSummary': 'AI-yhteenveto', 'meetingTranscript': 'Kokouksen transkriptio', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Järjestelmäasetukset", //系统设置 - "vipRecharge": "Premium-jäsenvaraus", //会员充值 - "aiRecharge": "Premium-jäsen", //AI充值 - "translationRecharge": "Käännösvaraus", //翻译充值 - "meetingAssistantRecharge": "Kokousavustajan varaus", //会议助手充值 - "cloudSync": "Pääsyvaraus cloud-synkronointiin", //云端同步 + "systemSettings": "Järjestelmäasetukset", + "vipRecharge": "Premium-jäsenvaraus", + "aiRecharge": "Premium-jäsen", + "translationRecharge": "Käännösvaraus", + "meetingAssistantRecharge": "Kokousavustajan varaus", + "cloudSync": "Pääsyvaraus cloud-synkronointiin", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Yhdistetty laite:", "accountId": "Tilin tunnus:", "systemSetting": "Järjestelmäasetukset", @@ -217,8 +655,9 @@ const Map fiFI = { "lastBackup": "Viimeisin varmuuskopio:", "privacySettings": "Tietosuoja-asetukset", "privacySettingsInfo": "Hallitse tiedonkeruuta ja käyttöoikeuksia", - "permissionManagement": "Käyttöoikeuksien hallinta", - "permissionManagementInfo": "Hallitse sovelluksen käyttöoikeusasetuksia", + "permissionManagement": "Käyttöoikeuksien hallinta", // 权限管理 + "permissionManagementInfo": + "Hallitse sovelluksen käyttöoikeusasetuksia", // 管理应用权限设置 "aboutApplication": "Tietoja sovelluksesta", "versions": "Versio", "checkUpdates": "Tarkista päivitykset", @@ -254,11 +693,10 @@ const Map fiFI = { 'networkErrorRetry': 'Verkkovirhe, yritä myöhemmin uudelleen', // 设备管理相关 - 'clearPairedDevices': 'Tyhjennä paritetut laitteet', - 'clearPairedDevicesConfirm': - 'Oletko varma, että haluat tyhjentää kaikki paritetut laitteet?', - 'clearPairedDevicesSuccess': 'Paritettujen laitteiden tyhjennys onnistui', - 'clearPairedDevicesFailed': 'Paritettujen laitteiden tyhjennys epäonnistui', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Reaaliaikainen puhekeskustelu", @@ -267,11 +705,20 @@ const Map fiFI = { "loading": "Ladataan...", //设备管理页面 - "earphone": "Kuulokkeet", - "voicerecorder": "Ääninauhuri", - "notBound": "Ei sidottu", - "deviceNotBoundYet": "Laitetta ei ole vielä sidottu", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Poista sidonta", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -300,6 +747,20 @@ const Map fiFI = { "loadMoreMessages": "Lataa lisää viestejä...", "loadFailedClickRetry": "Lataus epäonnistui, yritä uudelleen napsauttamalla", "swipeUpForMore": "Pyyhkäise ylös nähdäksesi lisää", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Hei! Olen **Lily**, voin auttaa sinua:\n\n' @@ -322,8 +783,8 @@ const Map fiFI = { 'startPhoneCallMode': 'Aloita puhelutila, aloita puhesyöttö', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Kirjoita viestisi tähän...', - 'characterCount': '{count} merkkiä', + 'fullScreenEditorHint': 'Kirjoita viestisi tähän...', // 全屏编辑器输入提示 + 'characterCount': '{count} merkkiä', // 字符计数显示 // 消息长按操作 'copy': 'Kopioi', @@ -332,6 +793,7 @@ const Map fiFI = { 'submitSuccess': 'Lähetetty onnistuneesti', 'submitFailed': 'Lähetys epäonnistui', 'reportSubmitted': 'Ilmoitus lähetetty, käsittelemme sen mahdollisimman pian', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Haitallinen/Turvaton', 'pornographicVulgar': 'Pornografinen/Mauton', 'misleadingAttack': 'Harhaanjohtava/Hyökkäys', @@ -341,6 +803,7 @@ const Map fiFI = { 'other': 'Muu', 'reportDescriptionHint': 'Haluamme tietää, miksi ilmoitat, voit kuvailla kohtaamaasi ongelmaa.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'AI:n luoma', @@ -351,15 +814,15 @@ const Map fiFI = { 'moreMusic': 'Lisää musiikkia', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'tuntia', - 'minutes': 'minuuttia', - 'seconds': 'sekuntia', - 'navigating': 'Navigoidaan', - 'currentLocation': 'Nykyinen sijainti', - 'approximate': 'Noin', - 'enterRoad': 'Aja tielle', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'tuntia', // 小时单位 + 'minutes': 'minuuttia', // 分钟单位 + 'seconds': 'sekuntia', // 秒单位 + 'navigating': 'Navigoidaan', // 导航状态 + 'currentLocation': 'Nykyinen sijainti', // 当前位置 + 'approximate': 'Noin', // 大约 + 'enterRoad': 'Aja tielle', // 进入道路 "driving": 'Autolla', "walking": 'Kävellen', "bicycling": 'Pyörällä', @@ -393,6 +856,17 @@ const Map fiFI = { "friday": "Pe", "saturday": "La", "sunday": "Su", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Aurinkoinen", "partlyCloudy": "Puolipilvinen", @@ -428,6 +902,8 @@ const Map fiFI = { 'deleteAccount': 'Poista tili', 'deleteAccountTips': 'Oletko varma, että haluat poistaa tilisi pysyvästi? Tätä toimintoa ei voi kumota.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -450,6 +926,8 @@ const Map fiFI = { 'Sisäinen palvelinvirhe, yritä myöhemmin uudelleen', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Kuvan pakkaus epäonnistui', 'avatarUpdateFailed': 'Avatarin päivitys epäonnistui', 'usernameCannotBeEmpty': 'Käyttäjätunnus ei voi olla tyhjä', @@ -462,28 +940,46 @@ const Map fiFI = { 'deleteAccountFailedRetry': 'Tilin poistaminen epäonnistui, yritä uudelleen', // 账号服务相关 - 'clearUserDataFailed': 'Käyttäjätietojen tyhjennys epäonnistui', - 'deleteUserDataFailed': 'Käyttäjätietojen poisto epäonnistui', - 'thirdPartyLogoutSuccess': 'Kolmannen osapuolen uloskirjautuminen onnistui', - 'thirdPartyLogoutFailed': 'Kolmannen osapuolen uloskirjautuminen epäonnistui', - 'signOutProcessError': 'Uloskirjautumisprosessin aikana tapahtui virhe', - 'deleteAccountProcessError': 'Tilin poistoprosessin aikana tapahtui virhe', - 'userDataClearSuccess': 'Käyttäjätiedot tyhjennetty onnistuneesti', - 'allUserDataClearSuccess': 'Kaikki käyttäjätiedot tyhjennetty onnistuneesti', - 'accountServiceInitialized': 'Tili-palvelu on alustettu', + 'clearUserDataFailed': 'Käyttäjätietojen tyhjennys epäonnistui', // 清理用户数据失败 + 'deleteUserDataFailed': 'Käyttäjätietojen poisto epäonnistui', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': + 'Kolmannen osapuolen uloskirjautuminen onnistui', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': + 'Kolmannen osapuolen uloskirjautuminen epäonnistui', // 第三方登录退出失败 + 'signOutProcessError': + 'Uloskirjautumisprosessin aikana tapahtui virhe', // 登出过程发生错误 + 'deleteAccountProcessError': + 'Tilin poistoprosessin aikana tapahtui virhe', // 删除账号过程发生错误 + 'userDataClearSuccess': + 'Käyttäjätiedot tyhjennetty onnistuneesti', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Kaikki käyttäjätiedot tyhjennetty onnistuneesti', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Tili-palvelu on alustettu', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Käyttöoikeuden tilan haku epäonnistui', 'communicationPermissions': 'Viestintäoikeudet', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Kalenterioikeudet', 'locationPermissions': 'Sijaintioikeudet', 'phone': 'Puhelin', 'sms': 'Tekstiviesti', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Kalenterin kirjoitus', 'calendarFullAccess': 'Täysi kalenterin käyttöoikeus', 'locationInfo': 'Sijaintitiedot', 'phonePermissionDesc': 'Käytetään soittotoimintoon', 'smsPermissionDesc': 'Käytetään tekstiviestien lähetystoimintoon', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Käytetään kalenteritapahtumien ja muistutusten luomiseen', 'calendarFullAccessPermissionDesc': @@ -500,27 +996,89 @@ const Map fiFI = { 'phonePermissionDetailDesc': 'Soittotoiminto vaatii puhelinluvan', 'smsPermissionDetailDesc': 'Tekstiviestien lähetystoiminto vaatii tekstiviestiluvan', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Kalenteritapahtumien luominen vaatii kalenterin kirjoitusluvan', 'calendarFullAccessPermissionDetailDesc': 'Kalenteritapahtumien hallinta vaatii täyden kalenteriluvan', 'locationPermissionDetailDesc': 'Sijaintitietojen haku vaatii sijaintiluvan', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Sovellus tarvitsee tämän luvan täyden toiminnallisuuden varmistamiseksi', 'permanentDenialText': 'Olet pysyvästi kieltänyt {permission}-luvan, ota se käyttöön sovelluksen asetuksista', 'goToSettings': 'Siirry asetuksiin', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Uusi versio löytyi', - 'remindLater': 'Muistuta myöhemmin', - 'updateNow': 'Päivitä nyt', - 'checkUpdate': 'Tarkista päivitys', - 'updateFailed': 'Päivitys epäonnistui', + 'newVersionFound': 'Uusi versio löytyi', // 版本更新对话框标题 + 'remindLater': 'Muistuta myöhemmin', // 稍后提醒按钮 + 'updateNow': 'Päivitä nyt', // 立即更新按钮 + 'checkUpdate': 'Tarkista päivitys', // 检查更新按钮 + 'updateFailed': 'Päivitys epäonnistui', // 更新失败提示 'cannotOpenAppStore': - 'Sovelluskauppaa ei voi avata, siirry sovelluskauppaan manuaalisesti päivittääksesi', + 'Sovelluskauppaa ei voi avata, siirry sovelluskauppaan manuaalisesti päivittääksesi', // 无法打开应用商店提示 'updateErrorRetry': - 'Päivityksen aikana tapahtui virhe, yritä myöhemmin uudelleen', + 'Päivityksen aikana tapahtui virhe, yritä myöhemmin uudelleen', // 更新错误重试提示 //国家列表 "邮箱": "Sähköposti", @@ -629,8 +1187,23 @@ const Map fiFI = { "东帝汶": "Itä-Timor", "斐济": "Fidži", "所罗门群岛": "Salomonsaaret", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Käännöshistoria", "enableRecording": "Ota tallennus käyttöön", @@ -639,9 +1212,24 @@ const Map fiFI = { "phoneUser": "Puhelimen käyttäjä", "selectSourceLanguage": "Valitse lähdekieli", "selectTargetLanguage": "Valitse kohdekieli", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Ei historiaa vielä", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Tyhjennä historia", "clearHistoryConfirm": "Oletko varma, että haluat tyhjentää kaiken käännöshistorian? Tätä toimintoa ei voi kumota.", @@ -650,7 +1238,58 @@ const Map fiFI = { "deleteSessionConfirm": "Oletko varma, että haluat poistaa kaikki tämän istunnon käännöstallenteet? Tätä toimintoa ei voi kumota.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Käännä äänitiedostot", "noAudioFiles": "Ei äänitiedostoja vielä", "calculating": "Lasketaan...", @@ -696,7 +1335,7 @@ const Map fiFI = { "autoInputCode": "Syötä koodi automaattisesti", "skipBinding": "Ohita sidonta", "rescan": "Skannaa uudelleen", - "skip": "Ohita", + "verifyingDevice": "Vahvistetaan laitetta...", "confirmBinding": "Vahvista sidonta", "associatingDevice": "Yhdistetään laitetta...", @@ -727,12 +1366,17 @@ const Map fiFI = { "pairingFailedRetry": "Paritus epäonnistui, yritä uudelleen", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Ota Bluetooth käyttöön', 'deviceDisconnected': 'Laite irrotettu', 'readyToStartPairing': 'Valmis aloittamaan parituksen', 'checkingEnvironment': 'Tarkistetaan ympäristöä...', 'ensureHeadsetOnAndPairingMode': 'Varmista, että kuulokkeet ovat päällä ja paritustilassa', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Luodaan turvallista yhteyttä...', 'needManualBindingAuthCode': 'Manuaalinen sidontavaltuutuskoodi vaaditaan...', 'pairingSuccessful': 'Paritus onnistui!', @@ -754,6 +1398,19 @@ const Map fiFI = { 'deviceAuthorizationFailedCheckCode': 'Laitteen valtuutus epäonnistui, tarkista valtuutuskoodi', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Käyttäjäpalaute", 'feedbackInfo': 'Anna palautetta tai ehdotuksia', @@ -782,6 +1439,13 @@ const Map fiFI = { "connectionFailed": "Yhteys epäonnistui", "retryConnection": "Yritä yhdistää uudelleen", "ota_updateNow": "Päivitä nyt", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Pidä laite yhteydessä, älä sulje sovellusta", "doNotDisconnect": "Älä katkaise yhteyttä", "charging": "Ladataan", @@ -790,11 +1454,11 @@ const Map fiFI = { "Poista molemmat kuulokkeet ja varmista, että molempien akun varaus on yli 20%", // 音乐列表页面 - "noMusic": "Ei musiikkia", - "noPlayingMusic": "Ei soitettavaa musiikkia", - "unknownSong": "Tuntematon kappale", - "unknownArtist": "Tuntematon artisti", - "playAll": "Toista kaikki", + "noMusic": "Ei musiikkia", // 暂无音乐 + "noPlayingMusic": "Ei soitettavaa musiikkia", // 暂无播放音乐 + "unknownSong": "Tuntematon kappale", // 未知歌曲 + "unknownArtist": "Tuntematon artisti", // 未知歌手 + "playAll": "Toista kaikki", // 播放全部 // 语言名称 "中文(简体)": "Kiina (yksinkertaistettu)", @@ -836,4 +1500,23 @@ const Map fiFI = { "乌尔都语": "Urdu", "波斯语": "Persia", "斯瓦希里语": "Swahili", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/fr_fr.dart b/lib/core/translations/language/fr_fr.dart index 079135fa0..49086705a 100644 --- a/lib/core/translations/language/fr_fr.dart +++ b/lib/core/translations/language/fr_fr.dart @@ -33,6 +33,7 @@ const Map frFR = { "spanish": "Espagnol", "portuguese": "Portugais", "traditionalChinese": "Chinois traditionnel", + "traditionalChineseHK": "Chinois traditionnel (Hong Kong)", "japanese": "Japonais", "korean": "Coréen", "french": "Français", @@ -104,8 +105,8 @@ const Map frFR = { "loginDeclaration": "Déclaration Voitrans", // Voitrans 声明 "welcomeToThisApp": "Bienvenue sur Voitrans, veuillez lire attentivement", // 欢迎使用Voitrans,请充分阅读 - // "privacyPolicy": "Politique de confidentialité", // 《隐私政策》 - 已存在,使用现有键 - // "userAgreement": "Accord d'utilisateur", // 《用户协议》 - 已存在,使用现有键 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": ". En cliquant sur 'Accepter et entrer', vous indiquez que vous avez entièrement lu et accepté les accords ci-dessus. Cliquer sur 'Refuser' fermera l'application.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 "disagree": "Refuser", // 不同意 @@ -190,6 +191,209 @@ const Map frFR = { "usageStats": "Statistiques d'utilisation", "usageStatsInfo": "Consultez les statistiques d'utilisation de l'application", "scene": "Scénarios", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Ignorer", + 'next': 'Next', + 'sayLilyHint': "Say \"Lily Lily\" to the mic", + 'imHere': "I’m here~", + 'guideWelcomeWakeAI': "Welcome to Voitrans! First, wake your AI “Lily”.", + 'aiReplyCompleted': "Lily has finished the reply!", + 'aiThinking': "Lily is thinking…", + 'guideAwakenSuccess': "Great! Lily is awake—ask it to help.", + 'confirmInput': "Confirm Input", + 'guideClickSendPrefix': "Tap send, ", + // AI 引导步骤 + 'guideWeatherStart': "Tell Lily: “What’s the weather today?”", + 'guideWeatherInput': "What’s the weather today?", + 'guideWeatherSend': "Lily will report the weather in real time", + 'guideWeatherEnd': "Lily can report weather live—try other commands", + 'guideMusicStart': "Tell Lily: “Play some rock music”", + 'guideMusicInput': "Play some rock music", + 'guideMusicSend': "Lily will find music for you", + 'guideMusicEnd': "Lily found music—try other commands", + 'guideNavStart': "Tell Lily: “Navigate to Shenzhen Airport”", + 'guideNavInput': "Navigate to Shenzhen Airport", + 'guideNavSend': "Lily will plan the route", + 'guideNavEnd': "Navigation set—try other commands", + 'guideMeetingStart': + "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", + 'guideMeetingInput': "Create a meeting reminder for 3pm tomorrow", + 'guideMeetingSend': "Lily will create a meeting reminder", + 'guideMeetingEnd': "Reminder created—try other commands", + 'guidePhoneStart': "Tell Lily: “Call Mom”", + 'guidePhoneInput': "Call Mom", + 'guidePhoneSend': "Lily will make the call", + 'guidePhoneEnd': "Call placed—try other commands", + 'guideSmsStart': "Tell Lily: “Send Dad a text: I’ll be home for dinner”", + 'guideSmsInput': "Text Dad: I’ll be home for dinner", + 'guideSmsSend': "Lily will send the message", + 'guideSmsEnd': "Message sent—voice control is convenient", // 商务会议助手页 "startMeeting": "Démarrer la réunion", @@ -204,13 +408,244 @@ const Map frFR = { 'aiSummary': 'Résumé IA', 'meetingTranscript': 'Transcription de la réunion', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Paramètres système", //系统设置 - "vipRecharge": "Recharge de VIP", //会员充值 - "aiRecharge": "Membre premium", //AI充值 - "translationRecharge": "Recharge de traduction", //翻译充值 - "meetingAssistantRecharge": "Recharge de l'assistant de réunion", //会议助手充值 - "cloudSync": "Recharge de synchronisation cloud", //云端同步 + "systemSettings": "Paramètres système", + "vipRecharge": "Recharge de VIP", + "aiRecharge": "Membre premium", + "translationRecharge": "Recharge de traduction", + "meetingAssistantRecharge": "Recharge de l'assistant de réunion", + "cloudSync": "Recharge de synchronisation cloud", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Appareil connecté :", "accountId": "ID du compte :", "systemSetting": "Paramètres système", @@ -248,12 +683,10 @@ const Map frFR = { 'selecttimbre': 'Sélectionner le timbre', 'pleaseRead': 'Veuillez lire', 'completeRecording': 'Terminer l\'enregistrement', - "firmwareUpgrade": "Mise à niveau du firmware", // 固件升级 - "bleHeadsetFirmwareUpgrade": - "Mise à niveau du firmware des écouteurs BLE", // BLE耳机固件版本升级 - "deviceManagement": "Gestion des appareils", // 设备管理 - "manageConnectedDevices": - "Gérer les appareils Bluetooth connectés", // 管理已绑定的蓝牙设备 + "firmwareUpgrade": "Mise à niveau du firmware", + "bleHeadsetFirmwareUpgrade": "Mise à niveau du firmware des écouteurs BLE", + "deviceManagement": "Gestion des appareils", + "manageConnectedDevices": "Gérer les appareils Bluetooth connectés", //设置setting_controller // 版本更新相关 @@ -262,24 +695,32 @@ const Map frFR = { 'networkErrorRetry': 'Erreur réseau, veuillez réessayer plus tard', // 设备管理相关 - 'clearPairedDevices': 'Effacer les appareils appairés', - 'clearPairedDevicesConfirm': - 'Êtes-vous sûr de vouloir effacer tous les appareils appairés ?', - 'clearPairedDevicesSuccess': 'Appareils appairés effacés avec succès', - 'clearPairedDevicesFailed': 'Échec de l\'effacement des appareils appairés', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 - 'realtimeVoiceChat': 'Conversation vocale en temps réel', - 'realtimeVoiceChatInfo': + "realtimeVoiceChat": 'Conversation vocale en temps réel', + "realtimeVoiceChatInfo": 'Découvrez les fonctions d\'interaction vocale intelligente (Aperçu)', - 'loading': 'Chargement...', + "loading": 'Chargement...', -//设备管理页面 - "earphone": "Écouteurs", // 耳机 - "voicerecorder": "Enregistreur vocal", // 录音笔 - "notBound": "Non lié", // 未绑定 - "deviceNotBoundYet": "Appareil pas encore lié", // 还未绑定设备 - "unbind": "Délier", // 解绑 + //设备管理页面 + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", + "unbind": "Délier", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -309,6 +750,20 @@ const Map frFR = { "loadMoreMessages": "Charger plus de messages...", "loadFailedClickRetry": "Échec du chargement, cliquer pour réessayer", "swipeUpForMore": "Glisser vers le haut pour plus", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Bonjour ! Je suis **Lily**, je peux vous aider avec :\n\n' @@ -341,7 +796,7 @@ const Map frFR = { 'submitSuccess': 'Soumis avec succès', 'submitFailed': 'Échec de la soumission', 'reportSubmitted': 'Signalement soumis, nous le traiterons dès que possible', - //'networkError': 'Erreur réseau, veuillez réessayer plus tard', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Nuisible/Dangereux', 'pornographicVulgar': 'Pornographique/Vulgaire', 'misleadingAttack': 'Trompeur/Attaque', @@ -352,7 +807,7 @@ const Map frFR = { 'other': 'Autre', 'reportDescriptionHint': 'Nous aimerions connaître la raison de votre signalement, vous pouvez décrire le problème que vous avez rencontré.', - //'submit': 'Soumettre', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Généré par IA', @@ -375,7 +830,7 @@ const Map frFR = { "driving": "Conduite", "walking": "Marche", "bicycling": "Vélo", - "transit": "Transport public", + "tsransit": "Transit", //天气卡片 weather_card 'weatherQuery': 'Requête météo :', @@ -407,6 +862,17 @@ const Map frFR = { "friday": "Ven", "saturday": "Sam", "sunday": "Dim", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Ensoleillé", "partlyCloudy": "Partiellement nuageux", @@ -442,6 +908,8 @@ const Map frFR = { 'deleteAccount': 'Supprimer le compte', 'deleteAccountTips': 'Êtes-vous sûr de vouloir supprimer définitivement votre compte ? Cette action ne peut pas être annulée.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -462,8 +930,8 @@ const Map frFR = { 'Erreur interne du serveur, veuillez réessayer plus tard', // Profile 用户交互 -//'error': 'Erreur', -//'success': 'Succès', +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Échec de la compression de l\'image', 'avatarUpdateFailed': 'Échec de la mise à jour de l\'avatar', 'usernameCannotBeEmpty': 'Le nom d\'utilisateur ne peut pas être vide', @@ -498,15 +966,26 @@ const Map frFR = { 'getPermissionStatusFailed': 'Échec de l\'obtention du statut d\'autorisation', 'communicationPermissions': 'Autorisations de communication', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Autorisations de calendrier', 'locationPermissions': 'Autorisations de localisation', 'phone': 'Téléphone', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Écriture calendrier', 'calendarFullAccess': 'Accès complet au calendrier', 'locationInfo': 'Informations de localisation', 'phonePermissionDesc': 'Utilisé pour les fonctions d\'appel', 'smsPermissionDesc': 'Utilisé pour les fonctions SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Utilisé pour créer des événements de calendrier et des rappels', 'calendarFullAccessPermissionDesc': @@ -524,18 +1003,80 @@ const Map frFR = { 'phonePermissionDetailDesc': 'La fonction d\'appel nécessite l\'autorisation téléphone', 'smsPermissionDetailDesc': 'La fonction SMS nécessite l\'autorisation SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'La création d\'événements de calendrier nécessite l\'autorisation d\'écriture calendrier', 'calendarFullAccessPermissionDetailDesc': 'La gestion des événements de calendrier nécessite l\'autorisation complète du calendrier', 'locationPermissionDetailDesc': 'L\'obtention d\'informations de localisation nécessite l\'autorisation de localisation', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'L\'application a besoin de cette autorisation pour une fonctionnalité complète', 'permanentDenialText': 'Vous avez refusé définitivement l\'autorisation {permission}, veuillez aller dans les paramètres de l\'application pour l\'activer', 'goToSettings': 'Aller aux paramètres', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 'newVersionFound': 'Nouvelle version trouvée', // 版本更新对话框标题 'remindLater': 'Rappeler plus tard', // 稍后提醒按钮 @@ -654,8 +1195,23 @@ const Map frFR = { "东帝汶": "Timor Oriental", "斐济": "Fidji", "所罗门群岛": "Îles Salomon", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Historique de traduction", "enableRecording": "Activer l'enregistrement", @@ -664,9 +1220,24 @@ const Map frFR = { "phoneUser": "Utilisateur de téléphone", "selectSourceLanguage": "Sélectionner la langue source", "selectTargetLanguage": "Sélectionner la langue cible", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Aucun historique de traduction", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Effacer l'historique", "clearHistoryConfirm": "Êtes-vous sûr de vouloir effacer tout l'historique de traduction ? Cette action ne peut pas être annulée.", @@ -675,7 +1246,58 @@ const Map frFR = { "deleteSessionConfirm": "Êtes-vous sûr de vouloir supprimer tous les enregistrements de traduction pour cette session ? Cette action ne peut pas être annulée.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Traduire les fichiers audio", "noAudioFiles": "Aucun fichier audio", "calculating": "Calcul en cours...", @@ -721,7 +1343,7 @@ const Map frFR = { "autoInputCode": "Saisie automatique du code", "skipBinding": "Ignorer la liaison", "rescan": "Rescanner", - "skip": "Ignorer", + "verifyingDevice": "Vérification de l'appareil...", "confirmBinding": "Confirmer la liaison", "associatingDevice": "Association de l'appareil...", @@ -755,18 +1377,18 @@ const Map frFR = { "Échec de l'autorisation, veuillez vérifier le code d'autorisation", "pairingFailedRetry": "Échec de l'appairage, veuillez réessayer", -//配对控制器相关 - //'connectDevice': 'Connecter l\'appareil', + // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Veuillez activer le Bluetooth', 'deviceDisconnected': 'Appareil déconnecté', 'readyToStartPairing': 'Prêt à démarrer l\'appairage', 'checkingEnvironment': 'Vérification de l\'environnement...', 'ensureHeadsetOnAndPairingMode': 'Veuillez vous assurer que le casque est allumé et en mode appairage', - //'goToBluetoothSettings': 'Aller aux paramètres Bluetooth', - //'verifyingDevice': 'Vérification de l\'appareil...', - //'confirmBinding': 'Confirmer la liaison', - //'associatingDevice': 'Association de l\'appareil...', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Établissement d\'une connexion sécurisée...', 'needManualBindingAuthCode': 'Liaison manuelle du code d\'autorisation nécessaire...', @@ -791,6 +1413,19 @@ const Map frFR = { 'deviceAuthorizationFailedCheckCode': 'Échec de l\'autorisation d\'appareil, veuillez vérifier le code d\'autorisation', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Commentaires", 'feedbackInfo': 'Donner des commentaires ou suggestions', @@ -818,6 +1453,13 @@ const Map frFR = { "connectionFailed": "Échec de la connexion", "retryConnection": "Réessayer la connexion", "ota_updateNow": "Mettre à jour maintenant", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Veuillez maintenir l'appareil connecté, ne fermez pas l'application", "doNotDisconnect": "Ne pas déconnecter", @@ -873,38 +1515,23 @@ const Map frFR = { "乌尔都语": "Ourdou", "波斯语": "Persan", "斯瓦希里语": "Swahili", - // Guide overlay keys (placeholders in English) - "sayLilyHint": "Say \"Lily Lily\" to the mic", - "imHere": "I’m here~", - "guideWelcomeWakeAI": "Welcome to Voitrans! First, wake your AI “Lily”.", - "aiReplyCompleted": "Lily has finished the reply!", - "aiThinking": "Lily is thinking…", - "guideAwakenSuccess": "Great! Lily is awake—ask it to help.", - "confirmInput": "Confirm Input", - "guideClickSendPrefix": "Tap send, ", - "guideWeatherStart": "Tell Lily: “What’s the weather today?”", - "guideWeatherInput": "What’s the weather today?", - "guideWeatherSend": "Lily will report the weather in real time", - "guideWeatherEnd": "Lily can report weather live—try other commands", - "guideMusicStart": "Tell Lily: “Play some rock music”", - "guideMusicInput": "Play some rock music", - "guideMusicSend": "Lily will find music for you", - "guideMusicEnd": "Lily found music—try other commands", - "guideNavStart": "Tell Lily: “Navigate to Shenzhen Airport”", - "guideNavInput": "Navigate to Shenzhen Airport", - "guideNavSend": "Lily will plan the route", - "guideNavEnd": "Navigation set—try other commands", - "guideMeetingStart": - "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", - "guideMeetingInput": "Create a meeting reminder for 3pm tomorrow", - "guideMeetingSend": "Lily will create a meeting reminder", - "guideMeetingEnd": "Reminder created—try other commands", - "guidePhoneStart": "Tell Lily: “Call Mom”", - "guidePhoneInput": "Call Mom", - "guidePhoneSend": "Lily will make the call", - "guidePhoneEnd": "Call placed—try other commands", - "guideSmsStart": "Tell Lily: “Send Dad a text: I’ll be home for dinner”", - "guideSmsInput": "Text Dad: I’ll be home for dinner", - "guideSmsSend": "Lily will send the message", - "guideSmsEnd": "Message sent—voice control is convenient", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/hi_in.dart b/lib/core/translations/language/hi_in.dart index 187bc6c3e..2f53fc831 100644 --- a/lib/core/translations/language/hi_in.dart +++ b/lib/core/translations/language/hi_in.dart @@ -33,6 +33,7 @@ const Map hiIN = { "spanish": "स्पेनिश", "portuguese": "पुर्तगाली", "traditionalChinese": "पारंपरिक चीनी", + "traditionalChineseHK": "पारंपरागत चीनी (हांगकांग)", "japanese": "जापानी", "korean": "कोरियाई", "french": "फ्रेंच", @@ -99,12 +100,15 @@ const Map hiIN = { "usePasswordLogin": "पासवर्ड से लॉगिन करें", // 隐私政策弹窗 - "loginDeclaration": "Voitrans घोषणा", - "welcomeToThisApp": "Voitrans में आपका स्वागत है, कृपया ध्यान से पढ़ें", + "loginDeclaration": "Voitrans घोषणा", // Voitrans 声明 + "welcomeToThisApp": + "Voitrans में आपका स्वागत है, कृपया ध्यान से पढ़ें", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", 'सहमत हों और दर्ज करें' पर क्लिक करने का मतलब है कि आपने उपरोक्त समझौतों को पूरी तरह से पढ़ लिया है और उनसे सहमत हैं। 'असहमत' पर क्लिक करने से एप्लिकेशन से बाहर निकल जाएगा।", - "disagree": "असहमत", - "agreeAndEnter": "सहमत हों और दर्ज करें", + ", 'सहमत हों और दर्ज करें' पर क्लिक करने का मतलब है कि आपने उपरोक्त समझौतों को पूरी तरह से पढ़ लिया है और उनसे सहमत हैं। 'असहमत' पर क्लिक करने से एप्लिकेशन से बाहर निकल जाएगा।", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "असहमत", // 不同意 + "agreeAndEnter": "सहमत हों और दर्ज करें", // 同意并进入 // 首页 "deviceStatus": "डिवाइस की स्थिति", @@ -183,6 +187,209 @@ const Map hiIN = { "usageStats": "उपयोग सtatistik", "usageStatsInfo": "अप्लिकेशन का उपयोग सtatistik देखें", "scene": "दृश्य", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'एआई बेसिक 100', + 'ai_002_name': 'एआई बेसिक 500', + 'ai_003_name': 'एआई बेसिक 1000', + 'meet_001_name': 'मीटिंग बेसिक 100', + 'meet_002_name': 'मीटिंग बेसिक 500', + 'meet_003_name': 'मीटिंग बेसिक 1000', + 'trans_001_name': 'अनुवाद बेसिक 100', + 'trans_002_name': 'अनुवाद बेसिक 500', + 'trans_003_name': 'अनुवाद बेसिक 1000', + + // 商品描述(按ID) + 'ai_001_desc': '100 उपयोग शामिल। मुख्य AI सुविधाओं की पहुँच।', + 'ai_002_desc': '500 उपयोग शामिल। मुख्य AI सुविधाओं की पहुँच।', + 'ai_003_desc': '1000 उपयोग शामिल। मुख्य AI सुविधाओं की पहुँच।', + 'meet_001_desc': '100 बैठक रिकॉर्डिंग/ट्रांसक्रिप्शन शामिल।', + 'meet_002_desc': '500 बैठक रिकॉर्डिंग/ट्रांसक्रिप्शन शामिल।', + 'meet_003_desc': '1000 बैठक रिकॉर्डिंग/ट्रांसक्रिप्शन शामिल।', + 'trans_001_desc': '100 अनुवाद (वॉयस/टेक्स्ट) शामिल।', + 'trans_002_desc': '500 अनुवाद (वॉयस/टेक्स्ट) शामिल।', + 'trans_003_desc': '1000 अनुवाद (वॉयस/टेक्स्ट) शामिल।', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'रीयल-टाइम समकालीन व्याख्या और पाठ अनुवाद, कम विलंबता वॉइस प्रसारण के साथ।', + 'transHeaderDesc2': 'यात्रा, व्यवसाय, भाषण और शिक्षण के लिए उपयुक्त।', + 'translateZhEn': 'चीनी-अंग्रेज़ी अनुवाद', + 'lowLatencyVoiceBroadcast': 'कम विलंबता वॉइस प्रसारण', + 'multiLangTextTranslation': 'बहुभाषी पाठ अनुवाद', + 'termOptimizationContextPreserve': + 'पारिभाषिक शब्दों का अनुकूलन और संदर्भ बनाए रखना', + 'lexiconTourBusinessLife': 'यात्रा/व्यवसाय/जीवन शब्दकोश', + 'personalVocabularyMemory': 'व्यक्तिगत शब्दावली स्मृति', + 'conversationSubtitleLargeText': 'वार्तालाप उपशीर्षक / बड़े-टेक्स्ट मोड', + 'colorHighContrast': 'उच्च रंग-विपरीत', + 'transDisclaimer': + 'अनुवाद की गुणवत्ता माइक्रोफोन, नेटवर्क विलंबता और परिवेशी शोर पर निर्भर करती है।', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'लाभों का अवलोकन', + 'higherQuota': 'उच्च उपयोग कोटा', + 'lowerUnitPrice': 'कम इकाई मूल्य', + 'priorityService': 'प्राथमिकता सेवा', + 'exclusiveSupportChannel': 'समर्पित सहायता चैनल', + 'fastResponse': 'समस्याओं पर तेज़ प्रतिक्रिया', + 'eventsAndDiscounts': 'इवेंट और छूट', + 'memberExclusiveEvents': 'सदस्य-विशेष इवेंट', + 'longTermDiscountPlan': 'दीर्घकालीन छूट योजना', + 'generalPrivileges': 'सामान्य विशेषाधिकार', + 'earlyAccessNewFeatures': 'नई सुविधाओं का प्रारंभिक उपयोग', + 'crossDeviceSync': 'क्रॉस-डिवाइस सिंक', + 'vipDisclaimer': + 'वास्तविक लाभ पैकेज विवरण पर निर्भर करते हैं और संस्करणों के साथ बदल सकते हैं।', + + // 新手引导 / Onboarding + 'skip': "छोड़ें", + 'next': 'Next', + 'sayLilyHint': "Say \"Lily Lily\" to the mic", + 'imHere': "I’m here~", + 'guideWelcomeWakeAI': "Welcome to Voitrans! First, wake your AI “Lily”.", + 'aiReplyCompleted': "Lily has finished the reply!", + 'aiThinking': "Lily is thinking…", + 'guideAwakenSuccess': "Great! Lily is awake—ask it to help.", + 'confirmInput': "Confirm Input", + 'guideClickSendPrefix': "Tap send, ", + // AI 引导步骤 + 'guideWeatherStart': "Tell Lily: “What’s the weather today?”", + 'guideWeatherInput': "What’s the weather today?", + 'guideWeatherSend': "Lily will report the weather in real time", + 'guideWeatherEnd': "Lily can report weather live—try other commands", + 'guideMusicStart': "Tell Lily: “Play some rock music”", + 'guideMusicInput': "Play some rock music", + 'guideMusicSend': "Lily will find music for you", + 'guideMusicEnd': "Lily found music—try other commands", + 'guideNavStart': "Tell Lily: “Navigate to Shenzhen Airport”", + 'guideNavInput': "Navigate to Shenzhen Airport", + 'guideNavSend': "Lily will plan the route", + 'guideNavEnd': "Navigation set—try other commands", + 'guideMeetingStart': + "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", + 'guideMeetingInput': "Create a meeting reminder for 3pm tomorrow", + 'guideMeetingSend': "Lily will create a meeting reminder", + 'guideMeetingEnd': "Reminder created—try other commands", + 'guidePhoneStart': "Tell Lily: “Call Mom”", + 'guidePhoneInput': "Call Mom", + 'guidePhoneSend': "Lily will make the call", + 'guidePhoneEnd': "Call placed—try other commands", + 'guideSmsStart': "Tell Lily: “Send Dad a text: I’ll be home for dinner”", + 'guideSmsInput': "Text Dad: I’ll be home for dinner", + 'guideSmsSend': "Lily will send the message", + 'guideSmsEnd': "Message sent—voice control is convenient", // 商务会议助手页 "startMeeting": "बैठक शुरू करें", @@ -197,13 +404,244 @@ const Map hiIN = { 'aiSummary': 'एआई सारांश', 'meetingTranscript': 'बैठक का प्रतिलेख', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "सिस्टम सेटिंग्स", //系统设置 - "vipRecharge": "प्रीमियम सदस्य रिचार्ज", //会员充值 - "aiRecharge": "प्रीमियम सदस्य", //AI充值 - "translationRecharge": "अनुवाद रिचार्ज", //翻译充值 - "meetingAssistantRecharge": "बैठक असिस्टेंट रिचार्ज", //会议助手充值 - "cloudSync": "क्लाउड सिंक्रोनाइज़ेशन रिचार्ज", //云端同步 + "systemSettings": "सिस्टम सेटिंग्स", + "vipRecharge": "प्रीमियम सदस्य रिचार्ज", + "aiRecharge": "प्रीमियम सदस्य", + "translationRecharge": "अनुवाद रिचार्ज", + "meetingAssistantRecharge": "बैठक असिस्टेंट रिचार्ज", + "cloudSync": "क्लाउड सिंक्रोनाइज़ेशन रिचार्ज", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "कनेक्टेड डिवाइस:", "accountId": "खाता आईडी:", "systemSetting": "सिस्टम सेटिंग", @@ -215,8 +653,8 @@ const Map hiIN = { "lastBackup": "अंतिम बैकअप:", "privacySettings": "गोपनीयता सेटिंग्स", "privacySettingsInfo": "डेटा संग्रह और अनुमतियों का प्रबंधन करें", - "permissionManagement": "अनुमति प्रबंधन", - "permissionManagementInfo": "ऐप अनुमति सेटिंग्स का प्रबंधन करें", + "permissionManagement": "अनुमति प्रबंधन", // 权限管理 + "permissionManagementInfo": "ऐप अनुमति सेटिंग्स का प्रबंधन करें", // 管理应用权限设置 "aboutApplication": "ऐप के बारे में", "versions": "संस्करण", "checkUpdates": "अपडेट की जाँच करें", @@ -251,11 +689,10 @@ const Map hiIN = { 'networkErrorRetry': 'नेटवर्क त्रुटि, कृपया बाद में पुनः प्रयास करें', // 设备管理相关 - 'clearPairedDevices': 'पेयर किए गए डिवाइस साफ़ करें', - 'clearPairedDevicesConfirm': - 'क्या आप वाकई सभी पेयर किए गए डिवाइस साफ़ करना चाहते हैं?', - 'clearPairedDevicesSuccess': 'पेयर किए गए डिवाइस सफलतापूर्वक साफ़ किए गए', - 'clearPairedDevicesFailed': 'पेयर किए गए डिवाइस साफ़ करने में विफल', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "रीयल-टाइम वॉयस चैट", @@ -264,11 +701,20 @@ const Map hiIN = { "loading": "लोड हो रहा है...", //设备管理页面 - "earphone": "ईयरफोन", - "voicerecorder": "वॉयस रिकॉर्डर", - "notBound": "बाउंड नहीं", - "deviceNotBoundYet": "अभी तक कोई डिवाइस बाउंड नहीं है", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "अनबाइंड करें", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -298,6 +744,20 @@ const Map hiIN = { "loadFailedClickRetry": "लोड करने में विफल, पुनः प्रयास करने के लिए क्लिक करें", "swipeUpForMore": "अधिक के लिए ऊपर स्वाइप करें", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'नमस्ते! मैं **Lily** हूँ, मैं आपकी मदद कर सकता हूँ:\n\n' @@ -320,8 +780,8 @@ const Map hiIN = { 'startPhoneCallMode': 'कॉल मोड शुरू करें, वॉयस इनपुट शुरू करें', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'अपना संदेश यहां दर्ज करें...', - 'characterCount': '{count} अक्षर', + 'fullScreenEditorHint': 'अपना संदेश यहां दर्ज करें...', // 全屏编辑器输入提示 + 'characterCount': '{count} अक्षर', // 字符计数显示 // 消息长按操作 'copy': 'कॉपी करें', @@ -330,6 +790,7 @@ const Map hiIN = { 'submitSuccess': 'सफलतापूर्वक सबमिट किया गया', 'submitFailed': 'सबमिट करने में विफल', 'reportSubmitted': 'रिपोर्ट सबमिट कर दी गई है, हम इसे जल्द ही संसाधित करेंगे', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'हानिकारक/असुरक्षित', 'pornographicVulgar': 'अश्लील/अशिष्ट', 'misleadingAttack': 'भ्रामक/हमला', @@ -339,6 +800,7 @@ const Map hiIN = { 'other': 'अन्य', 'reportDescriptionHint': 'हम जानना चाहते हैं कि आप क्यों रिपोर्ट कर रहे हैं, आप जिस समस्या का सामना कर रहे हैं उसका वर्णन कर सकते हैं।', + //'submit': '提交', //Message_bubble 'generatedByAi': 'एआई द्वारा उत्पन्न', @@ -349,15 +811,15 @@ const Map hiIN = { 'moreMusic': 'और संगीत', //导航卡片 navigation_card - 'kilometers': 'किमी', - 'meters': 'मी', - 'hours': 'घंटे', - 'minutes': 'मिनट', - 'seconds': 'सेकंड', - 'navigating': 'नेविगेट कर रहा है', - 'currentLocation': 'वर्तमान स्थान', - 'approximate': 'लगभग', - 'enterRoad': 'प्रवेश करें', + 'kilometers': 'किमी', // 公里单位 + 'meters': 'मी', // 米单位 + 'hours': 'घंटे', // 小时单位 + 'minutes': 'मिनट', // 分钟单位 + 'seconds': 'सेकंड', // 秒单位 + 'navigating': 'नेविगेट कर रहा है', // 导航状态 + 'currentLocation': 'वर्तमान स्थान', // 当前位置 + 'approximate': 'लगभग', // 大约 + 'enterRoad': 'प्रवेश करें', // 进入道路 "driving": "ड्राइविंग", "walking": "पैदल चलना", "bicycling": "साइकिल चलाना", @@ -392,6 +854,17 @@ const Map hiIN = { "friday": "शुक्र", "saturday": "शनि", "sunday": "रवि", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "धूप", "partlyCloudy": "आंशिक रूप से बादल छाए हुए", @@ -427,6 +900,8 @@ const Map hiIN = { 'deleteAccount': 'खाता हटाएं', 'deleteAccountTips': 'क्या आप वाकई अपना खाता स्थायी रूप से हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -449,6 +924,8 @@ const Map hiIN = { 'सर्वर आंतरिक त्रुटि, कृपया बाद में पुनः प्रयास करें', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'छवि संपीड़न विफल', 'avatarUpdateFailed': 'अवतार अपडेट विफल', 'usernameCannotBeEmpty': 'उपयोगकर्ता नाम खाली नहीं हो सकता', @@ -461,28 +938,44 @@ const Map hiIN = { 'deleteAccountFailedRetry': 'खाता हटाने में विफल, कृपया पुनः प्रयास करें', // 账号服务相关 - 'clearUserDataFailed': 'उपयोगकर्ता डेटा साफ़ करने में विफल', - 'deleteUserDataFailed': 'उपयोगकर्ता डेटा हटाने में विफल', - 'thirdPartyLogoutSuccess': 'तीसरे पक्ष का लॉगआउट सफल', - 'thirdPartyLogoutFailed': 'तीसरे पक्ष का लॉगआउट विफल', - 'signOutProcessError': 'साइन आउट प्रक्रिया के दौरान एक त्रुटि हुई', - 'deleteAccountProcessError': 'खाता हटाने की प्रक्रिया के दौरान एक त्रुटि हुई', - 'userDataClearSuccess': 'उपयोगकर्ता डेटा सफलतापूर्वक साफ़ किया गया', - 'allUserDataClearSuccess': 'सभी उपयोगकर्ता डेटा सफलतापूर्वक साफ़ किया गया', - 'accountServiceInitialized': 'खाता सेवा प्रारंभ की गई है', + 'clearUserDataFailed': 'उपयोगकर्ता डेटा साफ़ करने में विफल', // 清理用户数据失败 + 'deleteUserDataFailed': 'उपयोगकर्ता डेटा हटाने में विफल', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': 'तीसरे पक्ष का लॉगआउट सफल', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'तीसरे पक्ष का लॉगआउट विफल', // 第三方登录退出失败 + 'signOutProcessError': + 'साइन आउट प्रक्रिया के दौरान एक त्रुटि हुई', // 登出过程发生错误 + 'deleteAccountProcessError': + 'खाता हटाने की प्रक्रिया के दौरान एक त्रुटि हुई', // 删除账号过程发生错误 + 'userDataClearSuccess': + 'उपयोगकर्ता डेटा सफलतापूर्वक साफ़ किया गया', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'सभी उपयोगकर्ता डेटा सफलतापूर्वक साफ़ किया गया', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'खाता सेवा प्रारंभ की गई है', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'अनुमति की स्थिति प्राप्त करने में विफल', 'communicationPermissions': 'संचार अनुमतियाँ', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'कैलेंडर अनुमतियाँ', 'locationPermissions': 'स्थान अनुमतियाँ', 'phone': 'फ़ोन', 'sms': 'एसएमएस', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'कैलेंडर में लिखें', 'calendarFullAccess': 'पूर्ण कैलेंडर एक्सेस', 'locationInfo': 'स्थान की जानकारी', 'phonePermissionDesc': 'कॉल करने के लिए उपयोग किया जाता है', 'smsPermissionDesc': 'एसएमएस भेजने के लिए उपयोग किया जाता है', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'कैलेंडर ईवेंट और रिमाइंडर बनाने के लिए उपयोग किया जाता है', 'calendarFullAccessPermissionDesc': @@ -501,28 +994,90 @@ const Map hiIN = { 'कॉल फ़ंक्शन के लिए फ़ोन अनुमति की आवश्यकता होती है', 'smsPermissionDetailDesc': 'एसएमएस भेजने के लिए एसएमएस अनुमति की आवश्यकता होती है', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'कैलेंडर ईवेंट बनाने के लिए कैलेंडर में लिखने की अनुमति की आवश्यकता होती है', 'calendarFullAccessPermissionDetailDesc': 'कैलेंडर ईवेंट प्रबंधित करने के लिए पूर्ण कैलेंडर अनुमति की आवश्यकता होती है', 'locationPermissionDetailDesc': 'स्थान की जानकारी प्राप्त करने के लिए स्थान अनुमति की आवश्यकता होती है', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'ऐप को पूर्ण कार्यक्षमता के लिए इस अनुमति की आवश्यकता है', 'permanentDenialText': 'आपने {permission} अनुमति को स्थायी रूप से अस्वीकार कर दिया है, कृपया इसे सक्षम करने کے لیے ऐप सेटिंग्स पर जाएं', 'goToSettings': 'सेटिंग्स पर जाएं', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'नया संस्करण मिला', - 'remindLater': 'बाद में याद दिलाएं', - 'updateNow': 'अभी अपडेट करें', - 'checkUpdate': 'अपडेट की जाँच करें', - 'updateFailed': 'अपडेट विफल', + 'newVersionFound': 'नया संस्करण मिला', // 版本更新对话框标题 + 'remindLater': 'बाद में याद दिलाएं', // 稍后提醒按钮 + 'updateNow': 'अभी अपडेट करें', // 立即更新按钮 + 'checkUpdate': 'अपडेट की जाँच करें', // 检查更新按钮 + 'updateFailed': 'अपडेट विफल', // 更新失败提示 'cannotOpenAppStore': - 'ऐप स्टोर नहीं खोल सकता, कृपया अपडेट करने के लिए मैन्युअल रूप से ऐप स्टोर पर जाएं', + 'ऐप स्टोर नहीं खोल सकता, कृपया अपडेट करने के लिए मैन्युअल रूप से ऐप स्टोर पर जाएं', // 无法打开应用商店提示 'updateErrorRetry': - 'अपडेट के दौरान एक त्रुटि हुई, कृपया बाद में पुनः प्रयास करें', + 'अपडेट के दौरान एक त्रुटि हुई, कृपया बाद में पुनः प्रयास करें', // 更新错误重试提示 //国家列表 "邮箱": "ईमेल", @@ -631,8 +1186,23 @@ const Map hiIN = { "东帝汶": "पूर्वी तिमोर", "斐济": "फिजी", "所罗门群岛": "सोलोमन द्वीप समूह", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "अनुवाद इतिहास", "enableRecording": "रिकॉर्डिंग सक्षम करें", @@ -641,9 +1211,24 @@ const Map hiIN = { "phoneUser": "फ़ोन उपयोगकर्ता", "selectSourceLanguage": "स्रोत भाषा चुनें", "selectTargetLanguage": "लक्ष्य भाषा चुनें", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", - // 翻译历史页 (translation_history_view.dart) + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", + + // 翻译历史页 "noTranslationHistory": "अभी तक कोई इतिहास नहीं", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "इतिहास साफ़ करें", "clearHistoryConfirm": "क्या आप वाकई सभी अनुवाद इतिहास साफ़ करना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।", @@ -652,7 +1237,58 @@ const Map hiIN = { "deleteSessionConfirm": "क्या आप वाकई इस सत्र के सभी अनुवाद रिकॉर्ड हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "ऑडियो फ़ाइलों का अनुवाद करें", "noAudioFiles": "अभी तक कोई ऑडियो फ़ाइल नहीं", "calculating": "गणना हो रही है...", @@ -698,7 +1334,7 @@ const Map hiIN = { "autoInputCode": "कोड स्वतः दर्ज करें", "skipBinding": "बाँधना छोड़ें", "rescan": "पुनः स्कैन करें", - "skip": "छोड़ें", + "verifyingDevice": "डिवाइस सत्यापित हो रहा है...", "confirmBinding": "बाँधने की पुष्टि करें", "associatingDevice": "डिवाइस को संबद्ध किया जा रहा है...", @@ -730,12 +1366,17 @@ const Map hiIN = { "pairingFailedRetry": "पेयरिंग विफल, कृपया पुनः प्रयास करें", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'कृपया ब्लूटूथ सक्षम करें', 'deviceDisconnected': 'डिवाइस डिस्कनेक्ट हो गया', 'readyToStartPairing': 'पेयरिंग शुरू करने के लिए तैयार', 'checkingEnvironment': 'वातावरण की जाँच हो रही है...', 'ensureHeadsetOnAndPairingMode': 'कृपया सुनिश्चित करें कि हेडसेट चालू है और पेयरिंग मोड में है', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'सुरक्षित कनेक्शन स्थापित हो रहा है...', 'needManualBindingAuthCode': 'मैनुअल बाइंडिंग प्राधिकरण कोड की आवश्यकता है...', @@ -758,6 +1399,19 @@ const Map hiIN = { 'deviceAuthorizationFailedCheckCode': 'डिवाइस प्राधिकरण विफल, कृपया प्राधिकरण कोड जांचें', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "उपयोगकर्ता प्रतिक्रिया", 'feedbackInfo': 'प्रतिक्रिया या सुझाव दें', @@ -787,6 +1441,13 @@ const Map hiIN = { "connectionFailed": "कनेक्शन विफल", "retryConnection": "कनेक्शन पुनः प्रयास करें", "ota_updateNow": "अभी अपडेट करें", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "डिवाइस को कनेक्टेड रखें, ऐप बंद न करें", "doNotDisconnect": "डिस्कनेक्ट न करें", "charging": "चार्ज हो रहा है", @@ -795,11 +1456,11 @@ const Map hiIN = { "दोनों ईयरबड निकालें, और सुनिश्चित करें कि दोनों की बैटरी 20% से ऊपर है", // 音乐列表页面 - "noMusic": "कोई संगीत नहीं", - "noPlayingMusic": "कोई संगीत नहीं चल रहा है", - "unknownSong": "अज्ञात गीत", - "unknownArtist": "अज्ञात कलाकार", - "playAll": "सभी चलाएं", + "noMusic": "कोई संगीत नहीं", // 暂无音乐 + "noPlayingMusic": "कोई संगीत नहीं चल रहा है", // 暂无播放音乐 + "unknownSong": "अज्ञात गीत", // 未知歌曲 + "unknownArtist": "अज्ञात कलाकार", // 未知歌手 + "playAll": "सभी चलाएं", // 播放全部 // 语言名称 "中文(简体)": "चीनी (सरलीकृत)", @@ -841,109 +1502,23 @@ const Map hiIN = { "乌尔都语": "उर्दू", "波斯语": "फारसी", "斯瓦希里语": "स्वाहिली", - // Guide overlay keys (placeholders in English) - "sayLilyHint": "Say \"Lily Lily\" to the mic", - "imHere": "I’m here~", - "guideWelcomeWakeAI": "Welcome to Voitrans! First, wake your AI “Lily”.", - "aiReplyCompleted": "Lily has finished the reply!", - "aiThinking": "Lily is thinking…", - "guideAwakenSuccess": "Great! Lily is awake—ask it to help.", - "confirmInput": "Confirm Input", - "guideClickSendPrefix": "Tap send, ", - "guideWeatherStart": "Tell Lily: “What’s the weather today?”", - "guideWeatherInput": "What’s the weather today?", - "guideWeatherSend": "Lily will report the weather in real time", - "guideWeatherEnd": "Lily can report weather live—try other commands", - "guideMusicStart": "Tell Lily: “Play some rock music”", - "guideMusicInput": "Play some rock music", - "guideMusicSend": "Lily will find music for you", - "guideMusicEnd": "Lily found music—try other commands", - "guideNavStart": "Tell Lily: “Navigate to Shenzhen Airport”", - "guideNavInput": "Navigate to Shenzhen Airport", - "guideNavSend": "Lily will plan the route", - "guideNavEnd": "Navigation set—try other commands", - "guideMeetingStart": - "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", - "guideMeetingInput": "Create a meeting reminder for 3pm tomorrow", - "guideMeetingSend": "Lily will create a meeting reminder", - "guideMeetingEnd": "Reminder created—try other commands", - "guidePhoneStart": "Tell Lily: “Call Mom”", - "guidePhoneInput": "Call Mom", - "guidePhoneSend": "Lily will make the call", - "guidePhoneEnd": "Call placed—try other commands", - "guideSmsStart": "Tell Lily: “Send Dad a text: I’ll be home for dinner”", - "guideSmsInput": "Text Dad: I’ll be home for dinner", - "guideSmsSend": "Lily will send the message", - "guideSmsEnd": "Message sent—voice control is convenient", - // Goods pages common footer (placeholders) - 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', - 'copyrightVoitrans': '© 2025 Voitrans Technologies', - // Meeting goods page (placeholders) - 'meetingHeaderDesc1': - 'Audio recording, transcription, keyword search, and auto summary.', - 'meetingHeaderDesc2': - 'Suitable for business meetings, class notes, and interview minutes.', - 'meetingAutoRecording': 'Auto recording and segmentation', - 'meetingSpeakerTagging': 'Speaker labeling', - 'meetingLongAudioTranscription': 'Long audio transcription', - 'meetingKeyPointSummary': 'Key point extraction', - 'meetingTopicNameSearch': 'Search by topic/name', - 'meetingTimelineJump': 'Timeline jump', - 'meetingExportSummary': 'Export minutes', - 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': - 'Use in quiet environments; performance depends on microphone and network.', + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", - // Translation goods page (placeholders) - 'transHeaderDesc1': - 'रीयल-टाइम समकालीन व्याख्या और पाठ अनुवाद, कम विलंबता वॉइस प्रसारण के साथ।', - 'transHeaderDesc2': 'यात्रा, व्यवसाय, भाषण और शिक्षण के लिए उपयुक्त।', - 'translateZhEn': 'चीनी-अंग्रेज़ी अनुवाद', - 'lowLatencyVoiceBroadcast': 'कम विलंबता वॉइस प्रसारण', - 'multiLangTextTranslation': 'बहुभाषी पाठ अनुवाद', - 'termOptimizationContextPreserve': - 'पारिभाषिक शब्दों का अनुकूलन और संदर्भ बनाए रखना', - 'lexiconTourBusinessLife': 'यात्रा/व्यवसाय/जीवन शब्दकोश', - 'personalVocabularyMemory': 'व्यक्तिगत शब्दावली स्मृति', - 'conversationSubtitleLargeText': 'वार्तालाप उपशीर्षक / बड़े-टेक्स्ट मोड', - 'colorHighContrast': 'उच्च रंग-विपरीत', - 'transDisclaimer': - 'अनुवाद की गुणवत्ता माइक्रोफोन, नेटवर्क विलंबता और परिवेशी शोर पर निर्भर करती है।', + //补充 + "insufficientIntegral": "Insufficient integral", - // VIP goods page (placeholders) - 'benefitsOverview': 'लाभों का अवलोकन', - 'higherQuota': 'उच्च उपयोग कोटा', - 'lowerUnitPrice': 'कम इकाई मूल्य', - 'priorityService': 'प्राथमिकता सेवा', - 'exclusiveSupportChannel': 'समर्पित सहायता चैनल', - 'fastResponse': 'समस्याओं पर तेज़ प्रतिक्रिया', - 'eventsAndDiscounts': 'इवेंट और छूट', - 'memberExclusiveEvents': 'सदस्य-विशेष इवेंट', - 'longTermDiscountPlan': 'दीर्घकालीन छूट योजना', - 'generalPrivileges': 'सामान्य विशेषाधिकार', - 'earlyAccessNewFeatures': 'नई सुविधाओं का प्रारंभिक उपयोग', - 'crossDeviceSync': 'क्रॉस-डिवाइस सिंक', - 'vipDisclaimer': - 'वास्तविक लाभ पैकेज विवरण पर निर्भर करते हैं और संस्करणों के साथ बदल सकते हैं।', - // Goods names by id - 'ai_001_name': 'एआई बेसिक 100', - 'ai_002_name': 'एआई बेसिक 500', - 'ai_003_name': 'एआई बेसिक 1000', - 'meet_001_name': 'मीटिंग बेसिक 100', - 'meet_002_name': 'मीटिंग बेसिक 500', - 'meet_003_name': 'मीटिंग बेसिक 1000', - 'trans_001_name': 'अनुवाद बेसिक 100', - 'trans_002_name': 'अनुवाद बेसिक 500', - 'trans_003_name': 'अनुवाद बेसिक 1000', - // Goods descriptions by id - 'ai_001_desc': '100 उपयोग शामिल। मुख्य AI सुविधाओं की पहुँच।', - 'ai_002_desc': '500 उपयोग शामिल। मुख्य AI सुविधाओं की पहुँच।', - 'ai_003_desc': '1000 उपयोग शामिल। मुख्य AI सुविधाओं की पहुँच।', - 'meet_001_desc': '100 बैठक रिकॉर्डिंग/ट्रांसक्रिप्शन शामिल।', - 'meet_002_desc': '500 बैठक रिकॉर्डिंग/ट्रांसक्रिप्शन शामिल।', - 'meet_003_desc': '1000 बैठक रिकॉर्डिंग/ट्रांसक्रिप्शन शामिल।', - 'trans_001_desc': '100 अनुवाद (वॉयस/टेक्स्ट) शामिल।', - 'trans_002_desc': '500 अनुवाद (वॉयस/टेक्स्ट) शामिल।', - 'trans_003_desc': '1000 अनुवाद (वॉयस/टेक्स्ट) शामिल।', + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/hr_hr.dart b/lib/core/translations/language/hr_hr.dart index a98916deb..05def5efe 100644 --- a/lib/core/translations/language/hr_hr.dart +++ b/lib/core/translations/language/hr_hr.dart @@ -33,6 +33,7 @@ const Map hrHR = { "spanish": "Španjolski", "portuguese": "Portugalski", "traditionalChinese": "Tradicionalni kineski", + "traditionalChineseHK": "Tradicionalni kineski (Hong Kong)", "japanese": "Japanski", "korean": "Korejski", "french": "Francuski", @@ -100,12 +101,15 @@ const Map hrHR = { "usePasswordLogin": "Prijava lozinkom", // 隐私政策弹窗 - "loginDeclaration": "Izjava tvrtke Voitrans", - "welcomeToThisApp": "Dobrodošli u Voitrans, molimo pročitajte pažljivo", + "loginDeclaration": "Izjava tvrtke Voitrans", // Voitrans 声明 + "welcomeToThisApp": + "Dobrodošli u Voitrans, molimo pročitajte pažljivo", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", klikom na 'Slažem se i ulazim' potvrđujete da ste u potpunosti pročitali i da se slažete s gore navedenim ugovorima. Klikom na 'Ne slažem se' izaći ćete iz aplikacije.", - "disagree": "Ne slažem se", - "agreeAndEnter": "Slažem se i ulazim", + ", klikom na 'Slažem se i ulazim' potvrđujete da ste u potpunosti pročitali i da se slažete s gore navedenim ugovorima. Klikom na 'Ne slažem se' izaći ćete iz aplikacije.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Ne slažem se", // 不同意 + "agreeAndEnter": "Slažem se i ulazim", // 同意并进入 // 首页 "deviceStatus": "Status uređaja", @@ -187,6 +191,209 @@ const Map hrHR = { "usageStats": "Statistika upotrebe", "usageStatsInfo": "Pregledajte statistiku upotrebe aplikacije", "scene": "Scenarij", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Preskoči", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Započni sastanak", @@ -201,13 +408,244 @@ const Map hrHR = { 'aiSummary': 'AI sažetak', 'meetingTranscript': 'Transkript sastanka', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Postavke sustava", //系统设置 - "vipRecharge": "Ponuda premium članstva", //会员充值 - "aiRecharge": "Premium član", //AI充值 - "translationRecharge": "Prijevod ponuda", //翻译充值 - "meetingAssistantRecharge": "Asistent sastanka ponuda", //会议助手充值 - "cloudSync": "Synchronizacija u oblaku ponuda", //云端同步 + "systemSettings": "Postavke sustava", + "vipRecharge": "Ponuda premium članstva", + "aiRecharge": "Premium član", + "translationRecharge": "Prijevod ponuda", + "meetingAssistantRecharge": "Asistent sastanka ponuda", + "cloudSync": "Synchronizacija u oblaku ponuda", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Povezan uređaj:", "accountId": "ID računa:", "systemSetting": "Postavke sustava", @@ -219,8 +657,9 @@ const Map hrHR = { "lastBackup": "Posljednja sigurnosna kopija:", "privacySettings": "Postavke privatnosti", "privacySettingsInfo": "Upravljanje prikupljanjem podataka i dopuštenjima", - "permissionManagement": "Upravljanje dopuštenjima", - "permissionManagementInfo": "Upravljanje postavkama dopuštenja aplikacije", + "permissionManagement": "Upravljanje dopuštenjima", // 权限管理 + "permissionManagementInfo": + "Upravljanje postavkama dopuštenja aplikacije", // 管理应用权限设置 "aboutApplication": "O aplikaciji", "versions": "Verzija", "checkUpdates": "Provjeri ažuriranja", @@ -255,11 +694,10 @@ const Map hrHR = { 'networkErrorRetry': 'Mrežna greška, pokušajte ponovno kasnije', // 设备管理相关 - 'clearPairedDevices': 'Obriši uparene uređaje', - 'clearPairedDevicesConfirm': - 'Jeste li sigurni da želite obrisati sve uparene uređaje?', - 'clearPairedDevicesSuccess': 'Uspješno obrisani upareni uređaji', - 'clearPairedDevicesFailed': 'Brisanje uparenih uređaja nije uspjelo', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Glasovni chat u stvarnom vremenu", @@ -268,11 +706,20 @@ const Map hrHR = { "loading": "Učitavanje...", //设备管理页面 - "earphone": "Slušalice", - "voicerecorder": "Diktafon", - "notBound": "Nije povezano", - "deviceNotBoundYet": "Uređaj još uvijek nije povezan", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Prekini vezu", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -301,6 +748,20 @@ const Map hrHR = { "loadMoreMessages": "Učitaj još poruka...", "loadFailedClickRetry": "Neuspješno učitavanje, kliknite za ponovni pokušaj", "swipeUpForMore": "Prijeđite prstom prema gore za više", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Zdravo! Ja sam **Lily**, mogu vam pomoći:\n\n' @@ -323,8 +784,8 @@ const Map hrHR = { 'startPhoneCallMode': 'Započni način poziva, započni unos glasom', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Unesite svoju poruku ovdje...', - 'characterCount': '{count} znakova', + 'fullScreenEditorHint': 'Unesite svoju poruku ovdje...', // 全屏编辑器输入提示 + 'characterCount': '{count} znakova', // 字符计数显示 // 消息长按操作 'copy': 'Kopiraj', @@ -333,6 +794,7 @@ const Map hrHR = { 'submitSuccess': 'Uspješno poslano', 'submitFailed': 'Slanje nije uspjelo', 'reportSubmitted': 'Prijava je poslana, obradit ćemo je što je prije moguće', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Štetno/Opasno', 'pornographicVulgar': 'Pornografski/Prostački', 'misleadingAttack': 'Obmanjujuće/Napad', @@ -342,6 +804,7 @@ const Map hrHR = { 'other': 'Ostalo', 'reportDescriptionHint': 'Želimo znati razlog vaše prijave, možete opisati problem s kojim ste se suočili.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Generirano od strane AI', @@ -352,15 +815,15 @@ const Map hrHR = { 'moreMusic': 'Još glazbe', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'sati', - 'minutes': 'minuta', - 'seconds': 'sekundi', - 'navigating': 'Navigacija', - 'currentLocation': 'Trenutna lokacija', - 'approximate': 'Približno', - 'enterRoad': 'Uđi na cestu', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'sati', // 小时单位 + 'minutes': 'minuta', // 分钟单位 + 'seconds': 'sekundi', // 秒单位 + 'navigating': 'Navigacija', // 导航状态 + 'currentLocation': 'Trenutna lokacija', // 当前位置 + 'approximate': 'Približno', // 大约 + 'enterRoad': 'Uđi na cestu', // 进入道路 "driving": "Vožnja", "walking": "Hodanje", "bicycling": "Biciklizam", @@ -395,6 +858,17 @@ const Map hrHR = { "friday": "Pet", "saturday": "Sub", "sunday": "Ned", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Sunčano", "partlyCloudy": "Djelomično oblačno", @@ -430,6 +904,8 @@ const Map hrHR = { 'deleteAccount': 'Obriši račun', 'deleteAccountTips': 'Jeste li sigurni da želite trajno obrisati svoj račun? Ova se radnja ne može poništiti.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -450,6 +926,8 @@ const Map hrHR = { 'Interna greška na poslužitelju, pokušajte ponovno kasnije', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Kompresija slike nije uspjela', 'avatarUpdateFailed': 'Ažuriranje avatara nije uspjelo', 'usernameCannotBeEmpty': 'Korisničko ime ne može biti prazno', @@ -462,29 +940,45 @@ const Map hrHR = { 'deleteAccountFailedRetry': 'Brisanje računa nije uspjelo, pokušajte ponovno', // 账号服务相关 - 'clearUserDataFailed': 'Brisanje korisničkih podataka nije uspjelo', - 'deleteUserDataFailed': 'Brisanje korisničkih podataka nije uspjelo', - 'thirdPartyLogoutSuccess': 'Uspješna odjava treće strane', - 'thirdPartyLogoutFailed': 'Odjava treće strane nije uspjela', - 'signOutProcessError': 'Došlo je do greške tijekom procesa odjave', + 'clearUserDataFailed': + 'Brisanje korisničkih podataka nije uspjelo', // 清理用户数据失败 + 'deleteUserDataFailed': + 'Brisanje korisničkih podataka nije uspjelo', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': 'Uspješna odjava treće strane', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'Odjava treće strane nije uspjela', // 第三方登录退出失败 + 'signOutProcessError': + 'Došlo je do greške tijekom procesa odjave', // 登出过程发生错误 'deleteAccountProcessError': - 'Došlo je do greške tijekom procesa brisanja računa', - 'userDataClearSuccess': 'Korisnički podaci uspješno obrisani', - 'allUserDataClearSuccess': 'Svi korisnički podaci uspješno obrisani', - 'accountServiceInitialized': 'AccountService je inicijaliziran', + 'Došlo je do greške tijekom procesa brisanja računa', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Korisnički podaci uspješno obrisani', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Svi korisnički podaci uspješno obrisani', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'AccountService je inicijaliziran', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Dohvaćanje statusa dopuštenja nije uspjelo', 'communicationPermissions': 'Komunikacijska dopuštenja', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Dopuštenja za kalendar', 'locationPermissions': 'Dopuštenja za lokaciju', 'phone': 'Telefon', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Pisanje u kalendar', 'calendarFullAccess': 'Potpuni pristup kalendaru', 'locationInfo': 'Informacije o lokaciji', 'phonePermissionDesc': 'Koristi se za funkciju pozivanja', 'smsPermissionDesc': 'Koristi se za funkciju slanja SMS-a', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Koristi se za stvaranje događaja i podsjetnika u kalendaru', 'calendarFullAccessPermissionDesc': @@ -503,28 +997,90 @@ const Map hrHR = { 'Funkcija pozivanja zahtijeva dopuštenje za telefon', 'smsPermissionDetailDesc': 'Funkcija slanja SMS-a zahtijeva dopuštenje za SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Stvaranje događaja u kalendaru zahtijeva dopuštenje za pisanje u kalendar', 'calendarFullAccessPermissionDetailDesc': 'Upravljanje događajima u kalendaru zahtijeva potpuno dopuštenje za kalendar', 'locationPermissionDetailDesc': 'Dobivanje informacija o lokaciji zahtijeva dopuštenje za lokaciju', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Aplikacija zahtijeva ovo dopuštenje za punu funkcionalnost', 'permanentDenialText': 'Trajno ste odbili dopuštenje za {permission}, idite u postavke aplikacije da biste ga omogućili', 'goToSettings': 'Idi na postavke', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Pronađena nova verzija', - 'remindLater': 'Podsjeti me kasnije', - 'updateNow': 'Ažuriraj sada', - 'checkUpdate': 'Provjeri ažuriranja', - 'updateFailed': 'Ažuriranje nije uspjelo', + 'newVersionFound': 'Pronađena nova verzija', // 版本更新对话框标题 + 'remindLater': 'Podsjeti me kasnije', // 稍后提醒按钮 + 'updateNow': 'Ažuriraj sada', // 立即更新按钮 + 'checkUpdate': 'Provjeri ažuriranja', // 检查更新按钮 + 'updateFailed': 'Ažuriranje nije uspjelo', // 更新失败提示 'cannotOpenAppStore': - 'Nije moguće otvoriti trgovinu aplikacija, idite ručno u trgovinu da biste ažurirali', + 'Nije moguće otvoriti trgovinu aplikacija, idite ručno u trgovinu da biste ažurirali', // 无法打开应用商店提示 'updateErrorRetry': - 'Došlo je do greške tijekom ažuriranja, pokušajte ponovno kasnije', + 'Došlo je do greške tijekom ažuriranja, pokušajte ponovno kasnije', // 更新错误重试提示 //国家列表 "邮箱": "E-pošta", @@ -633,8 +1189,23 @@ const Map hrHR = { "东帝汶": "Istočni Timor", "斐济": "Fidži", "所罗门群岛": "Salomonski Otoci", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Povijest prijevoda", "enableRecording": "Omogući snimanje", @@ -643,9 +1214,24 @@ const Map hrHR = { "phoneUser": "Korisnik telefona", "selectSourceLanguage": "Odaberi izvorni jezik", "selectTargetLanguage": "Odaberi ciljni jezik", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Nema povijesti", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Obriši povijest", "clearHistoryConfirm": "Jeste li sigurni da želite obrisati cijelu povijest prijevoda? Ova se radnja ne može poništiti.", @@ -654,7 +1240,58 @@ const Map hrHR = { "deleteSessionConfirm": "Jeste li sigurni da želite obrisati sve zapise prijevoda za ovu sesiju? Ova se radnja ne može poništiti.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Prevedi audio datoteke", "noAudioFiles": "Nema audio datoteka", "calculating": "Izračunavanje...", @@ -700,7 +1337,7 @@ const Map hrHR = { "autoInputCode": "Automatski unos koda", "skipBinding": "Preskoči povezivanje", "rescan": "Ponovno skeniraj", - "skip": "Preskoči", + "verifyingDevice": "Verifikacija uređaja...", "confirmBinding": "Potvrdi povezivanje", "associatingDevice": "Povezivanje uređaja...", @@ -733,12 +1370,17 @@ const Map hrHR = { "pairingFailedRetry": "Uparivanje nije uspjelo, pokušajte ponovno", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Omogućite Bluetooth', 'deviceDisconnected': 'Uređaj je isključen', 'readyToStartPairing': 'Spremno za početak uparivanja', 'checkingEnvironment': 'Provjera okruženja...', 'ensureHeadsetOnAndPairingMode': 'Provjerite jesu li slušalice uključene i u načinu uparivanja', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Uspostavljanje sigurne veze...', 'needManualBindingAuthCode': 'Potreban je kod za autorizaciju ručnog povezivanja...', @@ -762,6 +1404,19 @@ const Map hrHR = { 'deviceAuthorizationFailedCheckCode': 'Autorizacija uređaja nije uspjela, provjerite autorizacijski kod', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Povratne informacije korisnika", 'feedbackInfo': 'Dajte povratne informacije ili prijedloge', @@ -791,6 +1446,13 @@ const Map hrHR = { "connectionFailed": "Povezivanje nije uspjelo", "retryConnection": "Pokušaj ponovno povezivanje", "ota_updateNow": "Ažuriraj sada", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Držite uređaj povezanim, ne zatvarajte aplikaciju", "doNotDisconnect": "Ne prekidajte vezu", "charging": "Punjenje", @@ -799,11 +1461,11 @@ const Map hrHR = { "Izvadite obje slušalice i provjerite je li baterija obje iznad 20%", // 音乐列表页面 - "noMusic": "Nema glazbe", - "noPlayingMusic": "Nema glazbe koja se reproducira", - "unknownSong": "Nepoznata pjesma", - "unknownArtist": "Nepoznat izvođač", - "playAll": "Reproduciraj sve", + "noMusic": "Nema glazbe", // 暂无音乐 + "noPlayingMusic": "Nema glazbe koja se reproducira", // 暂无播放音乐 + "unknownSong": "Nepoznata pjesma", // 未知歌曲 + "unknownArtist": "Nepoznat izvođač", // 未知歌手 + "playAll": "Reproduciraj sve", // 播放全部 // 语言名称 "中文(简体)": "Kineski (pojednostavljeni)", @@ -845,4 +1507,23 @@ const Map hrHR = { "乌尔都语": "Urdu", "波斯语": "Perzijski", "斯瓦希里语": "Svahili", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/hu_hu.dart b/lib/core/translations/language/hu_hu.dart index 375f8a3f2..5eaf7e422 100644 --- a/lib/core/translations/language/hu_hu.dart +++ b/lib/core/translations/language/hu_hu.dart @@ -33,6 +33,7 @@ const Map huHU = { "spanish": "Spanyol", "portuguese": "Portugál", "traditionalChinese": "Hagyományos kínai", + "traditionalChineseHK": "Hagyományos kínai (Hongkong)", "japanese": "Japán", "korean": "Koreai", "french": "Francia", @@ -101,13 +102,15 @@ const Map huHU = { "usePasswordLogin": "Bejelentkezés jelszóval", // 隐私政策弹窗 - "loginDeclaration": "Voitrans nyilatkozat", + "loginDeclaration": "Voitrans nyilatkozat", // Voitrans 声明 "welcomeToThisApp": - "Üdvözöljük a Voitransban, kérjük, olvassa el figyelmesen", + "Üdvözöljük a Voitransban, kérjük, olvassa el figyelmesen", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", a 'Elfogadom és belépek' gombra kattintva megerősíti, hogy elolvasta és elfogadja a fenti megállapodásokat. A 'Nem fogadom el' gombra kattintva kilép az alkalmazásból.", - "disagree": "Nem fogadom el", - "agreeAndEnter": "Elfogadom és belépek", + ", a 'Elfogadom és belépek' gombra kattintva megerősíti, hogy elolvasta és elfogadja a fenti megállapodásokat. A 'Nem fogadom el' gombra kattintva kilép az alkalmazásból.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Nem fogadom el", // 不同意 + "agreeAndEnter": "Elfogadom és belépek", // 同意并进入 // 首页 "deviceStatus": "Eszköz állapota", @@ -188,6 +191,209 @@ const Map huHU = { "usageStats": "Használati statisztika", "usageStatsInfo": "Lásd a használati statisztikát", "scene": "Helyzet", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Kihagyás", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Megbeszélés indítása", @@ -202,13 +408,244 @@ const Map huHU = { 'aiSummary': 'AI összefoglaló', 'meetingTranscript': 'Megbeszélés átirata', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Rendszerbeállítások", //系统设置 - "vipRecharge": "Prémium tag ponuda", //会员充值 - "aiRecharge": "Prémium tag", //AI充值 - "translationRecharge": "Fordítás ponuda", //翻译充值 - "meetingAssistantRecharge": "Megbeszélés asszisztens ponuda", //会议助手充值 - "cloudSync": "Synchronizációs ponuda", //云端同步 + "systemSettings": "Rendszerbeállítások", + "vipRecharge": "Prémium tag ponuda", + "aiRecharge": "Prémium tag", + "translationRecharge": "Fordítás ponuda", + "meetingAssistantRecharge": "Megbeszélés asszisztens ponuda", + "cloudSync": "Synchronizációs ponuda", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Csatlakoztatott eszköz:", "accountId": "Fiók azonosító:", "systemSetting": "Rendszerbeállítás", @@ -220,8 +657,9 @@ const Map huHU = { "lastBackup": "Utolsó mentés:", "privacySettings": "Adatvédelmi beállítások", "privacySettingsInfo": "Adatgyűjtés és engedélyek kezelése", - "permissionManagement": "Engedélykezelés", - "permissionManagementInfo": "Alkalmazásengedély-beállítások kezelése", + "permissionManagement": "Engedélykezelés", // 权限管理 + "permissionManagementInfo": + "Alkalmazásengedély-beállítások kezelése", // 管理应用权限设置 "aboutApplication": "Az alkalmazásról", "versions": "Verzió", "checkUpdates": "Frissítések keresése", @@ -257,10 +695,10 @@ const Map huHU = { 'networkErrorRetry': 'Hálózati hiba, próbálja újra később', // 设备管理相关 - 'clearPairedDevices': 'Párosított eszközök törlése', - 'clearPairedDevicesConfirm': 'Biztosan törli az összes párosított eszközt?', - 'clearPairedDevicesSuccess': 'A párosított eszközök sikeresen törölve', - 'clearPairedDevicesFailed': 'A párosított eszközök törlése sikertelen', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Valós idejű hangcsevegés", @@ -269,11 +707,20 @@ const Map huHU = { "loading": "Betöltés...", //设备管理页面 - "earphone": "Fülhallgató", - "voicerecorder": "Diktafon", - "notBound": "Nincs párosítva", - "deviceNotBoundYet": "Még nincs párosított eszköz", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Párosítás megszüntetése", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -303,6 +750,20 @@ const Map huHU = { "loadFailedClickRetry": "Betöltés sikertelen, kattintson az újrapróbálkozáshoz", "swipeUpForMore": "Húzza felfelé a továbbiakért", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Szia! **Lily** vagyok, segíthetek neked:\n\n' @@ -325,8 +786,8 @@ const Map huHU = { 'startPhoneCallMode': 'Hívás mód indítása, hangbevitel indítása', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Írja ide az üzenetét...', - 'characterCount': '{count} karakter', + 'fullScreenEditorHint': 'Írja ide az üzenetét...', // 全屏编辑器输入提示 + 'characterCount': '{count} karakter', // 字符计数显示 // 消息长按操作 'copy': 'Másolás', @@ -335,6 +796,7 @@ const Map huHU = { 'submitSuccess': 'Sikeresen elküldve', 'submitFailed': 'Küldés sikertelen', 'reportSubmitted': 'A jelentés elküldve, mihamarabb feldolgozzuk', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Káros/Nem biztonságos', 'pornographicVulgar': 'Pornográf/Vulgáris', 'misleadingAttack': 'Félrevezető/Támadó', @@ -344,6 +806,7 @@ const Map huHU = { 'other': 'Egyéb', 'reportDescriptionHint': 'Szeretnénk tudni a jelentés okát, leírhatja a tapasztalt problémát.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'AI által generált', @@ -354,15 +817,15 @@ const Map huHU = { 'moreMusic': 'Több zene', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'óra', - 'minutes': 'perc', - 'seconds': 'másodperc', - 'navigating': 'Navigálás', - 'currentLocation': 'Jelenlegi hely', - 'approximate': 'Kb.', - 'enterRoad': 'Ráhajtás', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'óra', // 小时单位 + 'minutes': 'perc', // 分钟单位 + 'seconds': 'másodperc', // 秒单位 + 'navigating': 'Navigálás', // 导航状态 + 'currentLocation': 'Jelenlegi hely', // 当前位置 + 'approximate': 'Kb.', // 大约 + 'enterRoad': 'Ráhajtás', // 进入道路 "driving": "Vezetés", "walking": "Gyaloglás", "bicycling": "Kerékpározás", @@ -397,6 +860,17 @@ const Map huHU = { "friday": "Pé", "saturday": "Szo", "sunday": "Va", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Napos", "partlyCloudy": "Részben felhős", @@ -432,6 +906,8 @@ const Map huHU = { 'deleteAccount': 'Fiók törlése', 'deleteAccountTips': 'Biztosan véglegesen törli a fiókját? Ezt a műveletet nem lehet visszavonni.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -453,6 +929,8 @@ const Map huHU = { 'serverInternalErrorRetryLater': 'Belső szerverhiba, próbálja újra később', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'A képtömörítés sikertelen', 'avatarUpdateFailed': 'Az avatar frissítése sikertelen', 'usernameCannotBeEmpty': 'A felhasználónév nem lehet üres', @@ -465,29 +943,46 @@ const Map huHU = { 'deleteAccountFailedRetry': 'A fiók törlése sikertelen, próbálja újra', // 账号服务相关 - 'clearUserDataFailed': 'A felhasználói adatok törlése sikertelen', - 'deleteUserDataFailed': 'A felhasználói adatok törlése sikertelen', - 'thirdPartyLogoutSuccess': 'A harmadik féltől származó kijelentkezés sikeres', + 'clearUserDataFailed': 'A felhasználói adatok törlése sikertelen', // 清理用户数据失败 + 'deleteUserDataFailed': + 'A felhasználói adatok törlése sikertelen', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': + 'A harmadik féltől származó kijelentkezés sikeres', // 第三方登录退出成功 'thirdPartyLogoutFailed': - 'A harmadik féltől származó kijelentkezés sikertelen', - 'signOutProcessError': 'Hiba történt a kijelentkezési folyamat során', - 'deleteAccountProcessError': 'Hiba történt a fióktörlési folyamat során', - 'userDataClearSuccess': 'A felhasználói adatok sikeresen törölve', - 'allUserDataClearSuccess': 'Az összes felhasználói adat sikeresen törölve', - 'accountServiceInitialized': 'A fiókszolgáltatás inicializálva', + 'A harmadik féltől származó kijelentkezés sikertelen', // 第三方登录退出失败 + 'signOutProcessError': + 'Hiba történt a kijelentkezési folyamat során', // 登出过程发生错误 + 'deleteAccountProcessError': + 'Hiba történt a fióktörlési folyamat során', // 删除账号过程发生错误 + 'userDataClearSuccess': 'A felhasználói adatok sikeresen törölve', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Az összes felhasználói adat sikeresen törölve', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'A fiókszolgáltatás inicializálva', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Az engedély állapotának lekérése sikertelen', 'communicationPermissions': 'Kommunikációs engedélyek', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Naptár engedélyek', 'locationPermissions': 'Helymeghatározási engedélyek', 'phone': 'Telefon', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Naptárba írás', 'calendarFullAccess': 'Teljes naptár-hozzáférés', 'locationInfo': 'Helyinformáció', 'phonePermissionDesc': 'A hívás funkcióhoz használatos', 'smsPermissionDesc': 'Az SMS küldési funkcióhoz használatos', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Naptáresemények és emlékeztetők létrehozásához használatos', 'calendarFullAccessPermissionDesc': @@ -504,27 +999,90 @@ const Map huHU = { 'permissionRequestError': 'Hiba az engedély kérésekor', 'phonePermissionDetailDesc': 'A hívás funkcióhoz telefonengedély szükséges', 'smsPermissionDetailDesc': 'Az SMS küldési funkcióhoz SMS engedély szükséges', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'A naptáresemények létrehozásához naptárírási engedély szükséges', 'calendarFullAccessPermissionDetailDesc': 'A naptáresemények kezeléséhez teljes naptárengedély szükséges', 'locationPermissionDetailDesc': 'A helyinformációk lekéréséhez helymeghatározási engedély szükséges', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Az alkalmazásnak szüksége van erre az engedélyre a teljes funkcionalitáshoz', 'permanentDenialText': 'Véglegesen letiltotta a(z) {permission} engedélyt, kérjük, engedélyezze az alkalmazás beállításaiban', 'goToSettings': 'Ugrás a beállításokhoz', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Új verzió található', - 'remindLater': 'Emlékeztessen később', - 'updateNow': 'Frissítés most', - 'checkUpdate': 'Frissítés keresése', - 'updateFailed': 'A frissítés sikertelen', + 'newVersionFound': 'Új verzió található', // 版本更新对话框标题 + 'remindLater': 'Emlékeztessen később', // 稍后提醒按钮 + 'updateNow': 'Frissítés most', // 立即更新按钮 + 'checkUpdate': 'Frissítés keresése', // 检查更新按钮 + 'updateFailed': 'A frissítés sikertelen', // 更新失败提示 'cannotOpenAppStore': - 'Nem lehet megnyitni az alkalmazásboltot, kérjük, manuálisan keresse fel a frissítéshez', - 'updateErrorRetry': 'Hiba történt a frissítés során, próbálja újra később', + 'Nem lehet megnyitni az alkalmazásboltot, kérjük, manuálisan keresse fel a frissítéshez', // 无法打开应用商店提示 + 'updateErrorRetry': + 'Hiba történt a frissítés során, próbálja újra később', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -633,8 +1191,23 @@ const Map huHU = { "东帝汶": "Kelet-Timor", "斐济": "Fidzsi-szigetek", "所罗门群岛": "Salamon-szigetek", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Fordítási előzmények", "enableRecording": "Felvétel engedélyezése", @@ -643,9 +1216,24 @@ const Map huHU = { "phoneUser": "Telefon-felhasználó", "selectSourceLanguage": "Forrásnyelv kiválasztása", "selectTargetLanguage": "Célnyelv kiválasztása", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Még nincsenek előzmények", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Előzmények törlése", "clearHistoryConfirm": "Biztosan törli az összes fordítási előzményt? Ezt a műveletet nem lehet visszavonni.", @@ -654,7 +1242,58 @@ const Map huHU = { "deleteSessionConfirm": "Biztosan törli az összes fordítási rekordot ehhez a munkamenethez? Ezt a műveletet nem lehet visszavonni.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Hangfájlok fordítása", "noAudioFiles": "Még nincsenek hangfájlok", "calculating": "Számítás...", @@ -700,7 +1339,7 @@ const Map huHU = { "autoInputCode": "Kód automatikus bevitele", "skipBinding": "Párosítás kihagyása", "rescan": "Újraszkennelés", - "skip": "Kihagyás", + "verifyingDevice": "Eszköz ellenőrzése...", "confirmBinding": "Párosítás megerősítése", "associatingDevice": "Eszköz társítása...", @@ -732,12 +1371,17 @@ const Map huHU = { "pairingFailedRetry": "A párosítás sikertelen, próbálja újra", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Kérjük, engedélyezze a Bluetooth-t', 'deviceDisconnected': 'Az eszköz lecsatlakoztatva', 'readyToStartPairing': 'Készen áll a párosítás megkezdésére', 'checkingEnvironment': 'Környezet ellenőrzése...', 'ensureHeadsetOnAndPairingMode': 'Győződjön meg róla, hogy a fülhallgató be van kapcsolva és párosítási módban van', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Biztonságos kapcsolat létrehozása...', 'needManualBindingAuthCode': 'Kézi párosítási engedélyezési kód szükséges...', 'pairingSuccessful': 'A párosítás sikeres!', @@ -761,6 +1405,19 @@ const Map huHU = { 'deviceAuthorizationFailedCheckCode': 'Az eszközengedélyezés sikertelen, ellenőrizze az engedélyezési kódot', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Felhasználói visszajelzés", 'feedbackInfo': 'Adjon visszajelzést vagy javaslatot', @@ -790,6 +1447,13 @@ const Map huHU = { "connectionFailed": "A kapcsolat sikertelen", "retryConnection": "Kapcsolat újrapróbálása", "ota_updateNow": "Frissítés most", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Tartsa csatlakoztatva az eszközt, ne zárja be az alkalmazást", "doNotDisconnect": "Ne szakítsa meg a kapcsolatot", @@ -799,11 +1463,11 @@ const Map huHU = { "Vegye ki mindkét fülhallgatót, és győződjön meg róla, hogy mindkettő akkumulátora 20% felett van", // 音乐列表页面 - "noMusic": "Nincs zene", - "noPlayingMusic": "Nincs lejátszott zene", - "unknownSong": "Ismeretlen dal", - "unknownArtist": "Ismeretlen előadó", - "playAll": "Összes lejátszása", + "noMusic": "Nincs zene", // 暂无音乐 + "noPlayingMusic": "Nincs lejátszott zene", // 暂无播放音乐 + "unknownSong": "Ismeretlen dal", // 未知歌曲 + "unknownArtist": "Ismeretlen előadó", // 未知歌手 + "playAll": "Összes lejátszása", // 播放全部 // 语言名称 "中文(简体)": "Kínai (egyszerűsített)", @@ -845,4 +1509,23 @@ const Map huHU = { "乌尔都语": "Urdu", "波斯语": "Perzsa", "斯瓦希里语": "Szuahéli", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/id_id.dart b/lib/core/translations/language/id_id.dart index 5fc4c3983..d3199b9c9 100644 --- a/lib/core/translations/language/id_id.dart +++ b/lib/core/translations/language/id_id.dart @@ -33,6 +33,7 @@ const Map idID = { "spanish": "Bahasa Spanyol", "portuguese": "Bahasa Portugis", "traditionalChinese": "Bahasa Mandarin Tradisional", + "traditionalChineseHK": "Cina Tradisional (Hong Kong)", "japanese": "Bahasa Jepang", "korean": "Bahasa Korea", "french": "Bahasa Prancis", @@ -99,12 +100,15 @@ const Map idID = { "usePasswordLogin": "Masuk dengan kata sandi", // 隐私政策弹窗 - "loginDeclaration": "Deklarasi Voitrans", - "welcomeToThisApp": "Selamat datang di Voitrans, silakan baca dengan seksama", + "loginDeclaration": "Deklarasi Voitrans", // Voitrans 声明 + "welcomeToThisApp": + "Selamat datang di Voitrans, silakan baca dengan seksama", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", dengan mengklik 'Setuju dan Masuk' berarti Anda telah membaca dan menyetujui perjanjian di atas. Mengklik 'Tidak Setuju' akan keluar dari aplikasi.", - "disagree": "Tidak Setuju", - "agreeAndEnter": "Setuju dan Masuk", + ", dengan mengklik 'Setuju dan Masuk' berarti Anda telah membaca dan menyetujui perjanjian di atas. Mengklik 'Tidak Setuju' akan keluar dari aplikasi.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Tidak Setuju", // 不同意 + "agreeAndEnter": "Setuju dan Masuk", // 同意并进入 // 首页 "deviceStatus": "Status Perangkat", @@ -183,6 +187,209 @@ const Map idID = { "usageStats": "Statistik Penggunaan", "usageStatsInfo": "Lihat statistik penggunaan aplikasi", "scene": "Skenario", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Lewati", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Mulai Rapat", @@ -197,13 +404,244 @@ const Map idID = { 'aiSummary': 'Ringkasan AI', 'meetingTranscript': 'Transkrip Rapat', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Pengaturan Sistem", //系统设置 - "vipRecharge": "Pembayaran Premium", //会员充值 - "aiRecharge": "Anggota Premium", //AI充值 - "translationRecharge": "Pembayaran Terjemahan", //翻译充值 - "meetingAssistantRecharge": "Pembayaran Asisten Rapat", //会议助手充值 - "cloudSync": "Pembayaran Sinkronisasi awan", //云端同步 + "systemSettings": "Pengaturan Sistem", + "vipRecharge": "Pembayaran Premium", + "aiRecharge": "Anggota Premium", + "translationRecharge": "Pembayaran Terjemahan", + "meetingAssistantRecharge": "Pembayaran Asisten Rapat", + "cloudSync": "Pembayaran Sinkronisasi awan", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Perangkat terhubung:", "accountId": "ID Akun:", "systemSetting": "Pengaturan Sistem", @@ -215,8 +653,8 @@ const Map idID = { "lastBackup": "Cadangan terakhir:", "privacySettings": "Pengaturan Privasi", "privacySettingsInfo": "Kelola pengumpulan data dan izin", - "permissionManagement": "Manajemen Izin", - "permissionManagementInfo": "Kelola pengaturan izin aplikasi", + "permissionManagement": "Manajemen Izin", // 权限管理 + "permissionManagementInfo": "Kelola pengaturan izin aplikasi", // 管理应用权限设置 "aboutApplication": "Tentang Aplikasi", "versions": "Versi", "checkUpdates": "Periksa Pembaruan", @@ -251,11 +689,10 @@ const Map idID = { 'networkErrorRetry': 'Kesalahan jaringan, silakan coba lagi nanti', // 设备管理相关 - 'clearPairedDevices': 'Hapus Perangkat yang Dipasangkan', - 'clearPairedDevicesConfirm': - 'Apakah Anda yakin ingin menghapus semua perangkat yang dipasangkan?', - 'clearPairedDevicesSuccess': 'Berhasil menghapus perangkat yang dipasangkan', - 'clearPairedDevicesFailed': 'Gagal menghapus perangkat yang dipasangkan', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Obrolan Suara Waktu Nyata", @@ -264,11 +701,20 @@ const Map idID = { "loading": "Memuat...", //设备管理页面 - "earphone": "Earphone", - "voicerecorder": "Perekam Suara", - "notBound": "Tidak Terikat", - "deviceNotBoundYet": "Belum ada perangkat yang terikat", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Putuskan Ikatan", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -298,6 +744,20 @@ const Map idID = { "loadMoreMessages": "Muat lebih banyak pesan...", "loadFailedClickRetry": "Gagal memuat, klik untuk mencoba lagi", "swipeUpForMore": "Geser ke atas untuk lebih banyak", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Halo! Saya **Lily**, saya bisa membantu Anda:\n\n' @@ -320,8 +780,8 @@ const Map idID = { 'startPhoneCallMode': 'Mulai mode panggilan telepon, mulai input suara', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Masukkan pesan Anda di sini...', - 'characterCount': '{count} karakter', + 'fullScreenEditorHint': 'Masukkan pesan Anda di sini...', // 全屏编辑器输入提示 + 'characterCount': '{count} karakter', // 字符计数显示 // 消息长按操作 'copy': 'Salin', @@ -331,6 +791,7 @@ const Map idID = { 'submitFailed': 'Gagal dikirim', 'reportSubmitted': 'Laporan telah dikirim, kami akan memprosesnya sesegera mungkin', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Berbahaya/Tidak Aman', 'pornographicVulgar': 'Pornografi/Vulgär', 'misleadingAttack': 'Menyesatkan/Serangan', @@ -340,6 +801,7 @@ const Map idID = { 'other': 'Lainnya', 'reportDescriptionHint': 'Kami ingin tahu alasan Anda melaporkan, Anda dapat menjelaskan masalah yang Anda hadapi.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Dihasilkan oleh AI', @@ -350,15 +812,15 @@ const Map idID = { 'moreMusic': 'Lebih Banyak Musik', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'jam', - 'minutes': 'menit', - 'seconds': 'detik', - 'navigating': 'Menavigasi', - 'currentLocation': 'Lokasi Saat Ini', - 'approximate': 'Kira-kira', - 'enterRoad': 'Masuk jalan', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'jam', // 小时单位 + 'minutes': 'menit', // 分钟单位 + 'seconds': 'detik', // 秒单位 + 'navigating': 'Menavigasi', // 导航状态 + 'currentLocation': 'Lokasi Saat Ini', // 当前位置 + 'approximate': 'Kira-kira', // 大约 + 'enterRoad': 'Masuk jalan', // 进入道路 "driving": "Mengemudi", "walking": "Berjalan", "bicycling": "Bersepeda", @@ -394,6 +856,17 @@ const Map idID = { "friday": "Jumat", "saturday": "Sabtu", "sunday": "Minggu", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Cerah", "partlyCloudy": "Setengah Berawan", @@ -429,6 +902,8 @@ const Map idID = { 'deleteAccount': 'Hapus Akun', 'deleteAccountTips': 'Apakah Anda yakin ingin menghapus akun Anda secara permanen? Tindakan ini tidak dapat dibatalkan', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -450,6 +925,8 @@ const Map idID = { 'Kesalahan internal server, silakan coba lagi nanti', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Kompresi gambar gagal', 'avatarUpdateFailed': 'Pembaruan avatar gagal', 'usernameCannotBeEmpty': 'Nama pengguna tidak boleh kosong', @@ -462,28 +939,42 @@ const Map idID = { 'deleteAccountFailedRetry': 'Gagal menghapus akun, silakan coba lagi', // 账号服务相关 - 'clearUserDataFailed': 'Gagal menghapus data pengguna', - 'deleteUserDataFailed': 'Gagal menghapus data pengguna', - 'thirdPartyLogoutSuccess': 'Berhasil keluar dari pihak ketiga', - 'thirdPartyLogoutFailed': 'Gagal keluar dari pihak ketiga', - 'signOutProcessError': 'Terjadi kesalahan saat proses keluar', - 'deleteAccountProcessError': 'Terjadi kesalahan saat proses penghapusan akun', - 'userDataClearSuccess': 'Data pengguna berhasil dihapus', - 'allUserDataClearSuccess': 'Semua data pengguna berhasil dihapus', - 'accountServiceInitialized': 'Layanan Akun telah diinisialisasi', + 'clearUserDataFailed': 'Gagal menghapus data pengguna', // 清理用户数据失败 + 'deleteUserDataFailed': 'Gagal menghapus data pengguna', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': 'Berhasil keluar dari pihak ketiga', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'Gagal keluar dari pihak ketiga', // 第三方登录退出失败 + 'signOutProcessError': 'Terjadi kesalahan saat proses keluar', // 登出过程发生错误 + 'deleteAccountProcessError': + 'Terjadi kesalahan saat proses penghapusan akun', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Data pengguna berhasil dihapus', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Semua data pengguna berhasil dihapus', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Layanan Akun telah diinisialisasi', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Gagal mendapatkan status izin', 'communicationPermissions': 'Izin Komunikasi', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Izin Kalender', 'locationPermissions': 'Izin Lokasi', 'phone': 'Telepon', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Tulis Kalender', 'calendarFullAccess': 'Akses Penuh Kalender', 'locationInfo': 'Informasi Lokasi', 'phonePermissionDesc': 'Digunakan untuk fungsi melakukan panggilan', 'smsPermissionDesc': 'Digunakan untuk fungsi mengirim SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Digunakan untuk membuat acara kalender dan pengingat', 'calendarFullAccessPermissionDesc': @@ -500,28 +991,90 @@ const Map idID = { 'permissionRequestError': 'Kesalahan saat meminta izin', 'phonePermissionDetailDesc': 'Fungsi panggilan memerlukan izin telepon', 'smsPermissionDetailDesc': 'Fungsi mengirim SMS memerlukan izin SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Membuat acara kalender memerlukan izin menulis kalender', 'calendarFullAccessPermissionDetailDesc': 'Mengelola acara kalender memerlukan izin penuh kalender', 'locationPermissionDetailDesc': 'Mendapatkan informasi lokasi memerlukan izin lokasi', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Aplikasi memerlukan izin ini untuk fungsionalitas penuh', 'permanentDenialText': 'Anda telah menolak izin {permission} secara permanen, silakan buka pengaturan aplikasi untuk mengaktifkannya', 'goToSettings': 'Buka Pengaturan', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Versi Baru Ditemukan', - 'remindLater': 'Ingatkan Nanti', - 'updateNow': 'Perbarui Sekarang', - 'checkUpdate': 'Periksa Pembaruan', - 'updateFailed': 'Pembaruan Gagal', + 'newVersionFound': 'Versi Baru Ditemukan', // 版本更新对话框标题 + 'remindLater': 'Ingatkan Nanti', // 稍后提醒按钮 + 'updateNow': 'Perbarui Sekarang', // 立即更新按钮 + 'checkUpdate': 'Periksa Pembaruan', // 检查更新按钮 + 'updateFailed': 'Pembaruan Gagal', // 更新失败提示 'cannotOpenAppStore': - 'Tidak dapat membuka toko aplikasi, silakan buka toko aplikasi secara manual untuk memperbarui', + 'Tidak dapat membuka toko aplikasi, silakan buka toko aplikasi secara manual untuk memperbarui', // 无法打开应用商店提示 'updateErrorRetry': - 'Terjadi kesalahan saat pembaruan, silakan coba lagi nanti', + 'Terjadi kesalahan saat pembaruan, silakan coba lagi nanti', // 更新错误重试提示 //国家列表 "邮箱": "Email", @@ -630,8 +1183,23 @@ const Map idID = { "东帝汶": "Timor Leste", "斐济": "Fiji", "所罗门群岛": "Kepulauan Solomon", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Riwayat Terjemahan", "enableRecording": "Aktifkan Perekaman", @@ -640,9 +1208,24 @@ const Map idID = { "phoneUser": "Pengguna Telepon", "selectSourceLanguage": "Pilih bahasa sumber", "selectTargetLanguage": "Pilih bahasa target", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Belum ada riwayat", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Hapus Riwayat", "clearHistoryConfirm": "Apakah Anda yakin ingin menghapus semua riwayat terjemahan? Tindakan ini tidak dapat dibatalkan.", @@ -651,7 +1234,58 @@ const Map idID = { "deleteSessionConfirm": "Apakah Anda yakin ingin menghapus semua rekaman terjemahan untuk sesi ini? Tindakan ini tidak dapat dibatalkan.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Terjemahkan File Audio", "noAudioFiles": "Belum ada file audio", "calculating": "Menghitung...", @@ -696,7 +1330,7 @@ const Map idID = { "autoInputCode": "Masukkan kode secara otomatis", "skipBinding": "Lewati Pengikatan", "rescan": "Pindai Ulang", - "skip": "Lewati", + "verifyingDevice": "Memverifikasi perangkat...", "confirmBinding": "Konfirmasi Pengikatan", "associatingDevice": "Mengasosiasikan perangkat...", @@ -728,12 +1362,17 @@ const Map idID = { "pairingFailedRetry": "Pemasangan gagal, silakan coba lagi", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Harap aktifkan Bluetooth', 'deviceDisconnected': 'Perangkat terputus', 'readyToStartPairing': 'Siap untuk memulai pemasangan', 'checkingEnvironment': 'Memeriksa lingkungan...', 'ensureHeadsetOnAndPairingMode': 'Harap pastikan headset dihidupkan dan dalam mode pemasangan', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Membangun koneksi aman...', 'needManualBindingAuthCode': 'Diperlukan kode otorisasi pengikatan manual...', 'pairingSuccessful': 'Pemasangan berhasil!', @@ -754,6 +1393,19 @@ const Map idID = { 'deviceAuthorizationFailedCheckCode': 'Otorisasi perangkat gagal, harap periksa kode otorisasi', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Umpan Balik Pengguna", 'feedbackInfo': 'Berikan umpan balik atau saran', @@ -782,6 +1434,13 @@ const Map idID = { "connectionFailed": "Koneksi Gagal", "retryConnection": "Coba Sambungkan Kembali", "ota_updateNow": "Perbarui Sekarang", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Jaga agar perangkat tetap terhubung, jangan tutup aplikasi", "doNotDisconnect": "Jangan putuskan sambungan", @@ -791,11 +1450,11 @@ const Map idID = { "Keluarkan kedua earbud, dan pastikan baterai keduanya di atas 20%", // 音乐列表页面 - "noMusic": "Tidak Ada Musik", - "noPlayingMusic": "Tidak ada musik yang diputar", - "unknownSong": "Lagu Tidak Dikenal", - "unknownArtist": "Artis Tidak Dikenal", - "playAll": "Putar Semua", + "noMusic": "Tidak Ada Musik", // 暂无音乐 + "noPlayingMusic": "Tidak ada musik yang diputar", // 暂无播放音乐 + "unknownSong": "Lagu Tidak Dikenal", // 未知歌曲 + "unknownArtist": "Artis Tidak Dikenal", // 未知歌手 + "playAll": "Putar Semua", // 播放全部 // 语言名称 "中文(简体)": "Bahasa Mandarin (Sederhana)", @@ -837,4 +1496,23 @@ const Map idID = { "乌尔都语": "Bahasa Urdu", "波斯语": "Bahasa Persia", "斯瓦希里语": "Bahasa Swahili", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/is_is.dart b/lib/core/translations/language/is_is.dart index 2e8e5a424..dee55b3ae 100644 --- a/lib/core/translations/language/is_is.dart +++ b/lib/core/translations/language/is_is.dart @@ -33,6 +33,7 @@ const Map isIS = { "spanish": "Spænska", "portuguese": "Portúgalska", "traditionalChinese": "Hefðbundin kínverska", + "traditionalChineseHK": "Hefðbundin kínverska (Hong Kong)", "japanese": "Japanska", "korean": "Kóreska", "french": "Franska", @@ -99,12 +100,15 @@ const Map isIS = { "usePasswordLogin": "Innskráning með lykilorði", // 隐私政策弹窗 - "loginDeclaration": "Yfirlýsing Voitrans", - "welcomeToThisApp": "Velkomin(n) í Voitrans, vinsamlegast lestu vandlega", + "loginDeclaration": "Yfirlýsing Voitrans", // Voitrans 声明 + "welcomeToThisApp": + "Velkomin(n) í Voitrans, vinsamlegast lestu vandlega", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", með því að smella á 'Samþykkja og halda áfram' staðfestir þú að þú hafir lesið og samþykkt ofangreinda samninga. Með því að smella á 'Hafna' lokarðu forritinu.", - "disagree": "Hafna", - "agreeAndEnter": "Samþykkja og halda áfram", + ", með því að smella á 'Samþykkja og halda áfram' staðfestir þú að þú hafir lesið og samþykkt ofangreinda samninga. Með því að smella á 'Hafna' lokarðu forritinu.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Hafna", // 不同意 + "agreeAndEnter": "Samþykkja og halda áfram", // 同意并进入 // 首页 "deviceStatus": "Staða tækis", @@ -184,6 +188,209 @@ const Map isIS = { "usageStats": "Notendastatistika", "usageStatsInfo": " skoða notendastatistika", "scene": "Atburðarás", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Sleppa", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Hefja fund", @@ -198,13 +405,244 @@ const Map isIS = { 'aiSummary': 'Gervigreindaryfirlit', 'meetingTranscript': 'Fundarritun', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Kerfisstillingar", //系统设置 - "vipRecharge": "Premium meðlimurinnsla", //会员充值 - "aiRecharge": "Premium meðlimur", //AI充值 - "translationRecharge": "Þýðingsponsoring", //翻译充值 - "meetingAssistantRecharge": "Fundarasistentsponsoring", //会议助手充值 - "cloudSync": "Synchronisering með skýjaraddþjónustu", //云端同步 + "systemSettings": "Kerfisstillingar", + "vipRecharge": "Premium meðlimurinnsla", + "aiRecharge": "Premium meðlimur", + "translationRecharge": "Þýðingsponsoring", + "meetingAssistantRecharge": "Fundarasistentsponsoring", + "cloudSync": "Synchronisering með skýjaraddþjónustu", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Tengt tæki:", "accountId": "Auðkenni reiknings:", "systemSetting": "Kerfisstillingar", @@ -216,8 +654,9 @@ const Map isIS = { "lastBackup": "Síðasta afritun:", "privacySettings": "Persónuverndarstillingar", "privacySettingsInfo": "Stjórna gagnaöflun og heimildum", - "permissionManagement": "Heimildastjórnun", - "permissionManagementInfo": "Stjórna heimildastillingum forritsins", + "permissionManagement": "Heimildastjórnun", // 权限管理 + "permissionManagementInfo": + "Stjórna heimildastillingum forritsins", // 管理应用权限设置 "aboutApplication": "Um forritið", "versions": "Útgáfa", "checkUpdates": "Athuga með uppfærslur", @@ -252,11 +691,10 @@ const Map isIS = { 'networkErrorRetry': 'Netvilla, vinsamlegast reyndu aftur síðar', // 设备管理相关 - 'clearPairedDevices': 'Hreinsa pöruð tæki', - 'clearPairedDevicesConfirm': - 'Ertu viss um að þú viljir hreinsa öll pöruð tæki?', - 'clearPairedDevicesSuccess': 'Pöruðum tækjum var eytt', - 'clearPairedDevicesFailed': 'Ekki tókst að hreinsa pöruð tæki', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Rauntíma raddspjall", @@ -265,11 +703,20 @@ const Map isIS = { "loading": "Hleður...", //设备管理页面 - "earphone": "Heyrnartól", - "voicerecorder": "Upptökutæki", - "notBound": "Óbundið", - "deviceNotBoundYet": "Tæki er ekki enn bundið", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Losa bindingu", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -298,6 +745,20 @@ const Map isIS = { "loadMoreMessages": "Hlaða fleiri skilaboðum...", "loadFailedClickRetry": "Hleðsla mistókst, smelltu til að reyna aftur", "swipeUpForMore": "Strjúktu upp til að sjá meira", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Halló! Ég er **Lily**, ég get hjálpað þér með:\n\n' @@ -319,8 +780,8 @@ const Map isIS = { 'startPhoneCallMode': 'Hefja símtalsham, hefja raddinnslátt', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Sláðu inn skilaboðin þín hér...', - 'characterCount': '{count} stafir', + 'fullScreenEditorHint': 'Sláðu inn skilaboðin þín hér...', // 全屏编辑器输入提示 + 'characterCount': '{count} stafir', // 字符计数显示 // 消息长按操作 'copy': 'Afrita', @@ -330,6 +791,7 @@ const Map isIS = { 'submitFailed': 'Sending mistókst', 'reportSubmitted': 'Tilkynning send, við munum afgreiða hana eins fljótt og auðið er', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Skaðlegt/Óöruggt', 'pornographicVulgar': 'Klámfengið/Gróft', 'misleadingAttack': 'Villandi/Árás', @@ -339,6 +801,7 @@ const Map isIS = { 'other': 'Annað', 'reportDescriptionHint': 'Við viljum vita hvers vegna þú ert að tilkynna, þú getur lýst vandamálinu sem þú lendir í.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Myndað af gervigreind', @@ -349,15 +812,15 @@ const Map isIS = { 'moreMusic': 'Meiri tónlist', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'klst.', - 'minutes': 'mín.', - 'seconds': 'sek.', - 'navigating': 'Leiðsögn', - 'currentLocation': 'Núverandi staðsetning', - 'approximate': 'U.þ.b.', - 'enterRoad': 'Fara inn á', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'klst.', // 小时单位 + 'minutes': 'mín.', // 分钟单位 + 'seconds': 'sek.', // 秒单位 + 'navigating': 'Leiðsögn', // 导航状态 + 'currentLocation': 'Núverandi staðsetning', // 当前位置 + 'approximate': 'U.þ.b.', // 大约 + 'enterRoad': 'Fara inn á', // 进入道路 "driving": 'Akstur', "walking": 'Ganga', "bicycling": 'Hjólreiðar', @@ -393,6 +856,17 @@ const Map isIS = { "friday": "Fös", "saturday": "Lau", "sunday": "Sun", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Sólskin", "partlyCloudy": "Skýjað með köflum", @@ -428,6 +902,8 @@ const Map isIS = { 'deleteAccount': 'Eyða reikningi', 'deleteAccountTips': 'Ertu viss um að þú viljir eyða reikningnum þínum varanlega? Ekki er hægt að afturkalla þessa aðgerð.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -450,6 +926,8 @@ const Map isIS = { 'Innri netþjónsvilla, vinsamlegast reyndu aftur síðar', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Myndþjöppun mistókst', 'avatarUpdateFailed': 'Uppfærsla prófílmyndar mistókst', 'usernameCannotBeEmpty': 'Notandanafn má ekki vera autt', @@ -463,28 +941,41 @@ const Map isIS = { 'Eyðing reiknings mistókst, vinsamlegast reyndu aftur', // 账号服务相关 - 'clearUserDataFailed': 'Ekki tókst að hreinsa notandagögn', - 'deleteUserDataFailed': 'Ekki tókst að eyða notandagögnum', - 'thirdPartyLogoutSuccess': 'Útskráning þriðja aðila tókst', - 'thirdPartyLogoutFailed': 'Útskráning þriðja aðila mistókst', - 'signOutProcessError': 'Villa kom upp við útskráningu', - 'deleteAccountProcessError': 'Villa kom upp við eyðingu reiknings', - 'userDataClearSuccess': 'Notandagögnum var eytt', - 'allUserDataClearSuccess': 'Öllum notandagögnum var eytt', - 'accountServiceInitialized': 'Reikningsþjónusta frumstillt', + 'clearUserDataFailed': 'Ekki tókst að hreinsa notandagögn', // 清理用户数据失败 + 'deleteUserDataFailed': 'Ekki tókst að eyða notandagögnum', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': 'Útskráning þriðja aðila tókst', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'Útskráning þriðja aðila mistókst', // 第三方登录退出失败 + 'signOutProcessError': 'Villa kom upp við útskráningu', // 登出过程发生错误 + 'deleteAccountProcessError': + 'Villa kom upp við eyðingu reiknings', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Notandagögnum var eytt', // 用户数据清理成功 + 'allUserDataClearSuccess': 'Öllum notandagögnum var eytt', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Reikningsþjónusta frumstillt', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Ekki tókst að fá stöðu heimilda', 'communicationPermissions': 'Samskiptaheimildir', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Dagbókarheimildir', 'locationPermissions': 'Staðsetningarheimildir', 'phone': 'Sími', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Skrifa í dagbók', 'calendarFullAccess': 'Fullur aðgangur að dagbók', 'locationInfo': 'Staðsetningarupplýsingar', 'phonePermissionDesc': 'Notað fyrir símtalsaðgerð', 'smsPermissionDesc': 'Notað fyrir SMS sendingaraðgerð', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Notað til að búa til dagbókarviðburði og áminningar', 'calendarFullAccessPermissionDesc': @@ -501,28 +992,90 @@ const Map isIS = { 'permissionRequestError': 'Villa við beiðni um heimild', 'phonePermissionDetailDesc': 'Símtalsaðgerð krefst símaheimildar', 'smsPermissionDetailDesc': 'SMS sendingaraðgerð krefst SMS heimildar', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Að búa til dagbókarviðburði krefst skrifheimildar í dagbók', 'calendarFullAccessPermissionDetailDesc': 'Að stjórna dagbókarviðburðum krefst fullrar dagbókarheimildar', 'locationPermissionDetailDesc': 'Að fá staðsetningarupplýsingar krefst staðsetningarheimildar', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Forritið þarf þessa heimild til að veita fulla virkni', 'permanentDenialText': 'Þú hefur varanlega hafnað {permission}-heimild, vinsamlegast farðu í forritastillingar til að virkja hana', 'goToSettings': 'Fara í stillingar', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Ný útgáfa fannst', - 'remindLater': 'Minn mig á síðar', - 'updateNow': 'Uppfæra núna', - 'checkUpdate': 'Athuga með uppfærslu', - 'updateFailed': 'Uppfærsla mistókst', + 'newVersionFound': 'Ný útgáfa fannst', // 版本更新对话框标题 + 'remindLater': 'Minn mig á síðar', // 稍后提醒按钮 + 'updateNow': 'Uppfæra núna', // 立即更新按钮 + 'checkUpdate': 'Athuga með uppfærslu', // 检查更新按钮 + 'updateFailed': 'Uppfærsla mistókst', // 更新失败提示 'cannotOpenAppStore': - 'Ekki hægt að opna forritaverslun, vinsamlegast farðu handvirkt í forritaverslun til að uppfæra', + 'Ekki hægt að opna forritaverslun, vinsamlegast farðu handvirkt í forritaverslun til að uppfæra', // 无法打开应用商店提示 'updateErrorRetry': - 'Villa kom upp við uppfærslu, vinsamlegast reyndu aftur síðar', + 'Villa kom upp við uppfærslu, vinsamlegast reyndu aftur síðar', // 更新错误重试提示 //国家列表 "邮箱": "Tölvupóstur", @@ -631,8 +1184,23 @@ const Map isIS = { "东帝汶": "Austur-Tímor", "斐济": "Fídjí", "所罗门群岛": "Salómonseyjar", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Þýðingasaga", "enableRecording": "Virkja upptöku", @@ -641,9 +1209,24 @@ const Map isIS = { "phoneUser": "Notandi síma", "selectSourceLanguage": "Veldu upprunamál", "selectTargetLanguage": "Veldu markmál", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Engin saga ennþá", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Hreinsa sögu", "clearHistoryConfirm": "Ertu viss um að þú viljir hreinsa alla þýðingasögu? Ekki er hægt að afturkalla þessa aðgerð.", @@ -652,7 +1235,58 @@ const Map isIS = { "deleteSessionConfirm": "Ertu viss um að þú viljir eyða öllum þýðingarupptökum fyrir þessa lotu? Ekki er hægt að afturkalla þessa aðgerð.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Þýða hljóðskrár", "noAudioFiles": "Engar hljóðskrár ennþá", "calculating": "Reiknar...", @@ -698,7 +1332,7 @@ const Map isIS = { "autoInputCode": "Sjálfvirk innsláttur kóða", "skipBinding": "Sleppa bindingu", "rescan": "Skanna aftur", - "skip": "Sleppa", + "verifyingDevice": "Staðfestir tæki...", "confirmBinding": "Staðfesta bindingu", "associatingDevice": "Tengir tæki...", @@ -729,12 +1363,17 @@ const Map isIS = { "pairingFailedRetry": "Pörun mistókst, vinsamlegast reyndu aftur", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Vinsamlegast virkjaðu Bluetooth', 'deviceDisconnected': 'Tæki aftengt', 'readyToStartPairing': 'Tilbúið til að hefja pörun', 'checkingEnvironment': 'Athuga umhverfi...', 'ensureHeadsetOnAndPairingMode': 'Gakktu úr skugga um að heyrnartólin séu á og í pörunarham', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Stofna örugga tengingu...', 'needManualBindingAuthCode': 'Handvirkur bindingarheimildarkóði er nauðsynlegur...', @@ -759,6 +1398,19 @@ const Map isIS = { 'deviceAuthorizationFailedCheckCode': 'Tækisheimildun mistókst, athugaðu heimildarkóðann', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Endurgjöf notenda", 'feedbackInfo': 'Gefðu endurgjöf eða tillögur', @@ -786,6 +1438,13 @@ const Map isIS = { "connectionFailed": "Tenging mistókst", "retryConnection": "Reyna að tengjast aftur", "ota_updateNow": "Uppfæra núna", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Haltu tækinu tengdu, ekki loka forritinu", "doNotDisconnect": "Ekki aftengja", "charging": "Hleður", @@ -794,11 +1453,11 @@ const Map isIS = { "Taktu báðar heyrnartólin úr og gakktu úr skugga um að rafhlaðan á báðum sé yfir 20%", // 音乐列表页面 - "noMusic": "Engin tónlist", - "noPlayingMusic": "Engin tónlist í spilun", - "unknownSong": "Óþekkt lag", - "unknownArtist": "Óþekktur flytjandi", - "playAll": "Spila allt", + "noMusic": "Engin tónlist", // 暂无音乐 + "noPlayingMusic": "Engin tónlist í spilun", // 暂无播放音乐 + "unknownSong": "Óþekkt lag", // 未知歌曲 + "unknownArtist": "Óþekktur flytjandi", // 未知歌手 + "playAll": "Spila allt", // 播放全部 // 语言名称 "中文(简体)": "Kínverska (einfölduð)", @@ -840,4 +1499,23 @@ const Map isIS = { "乌尔都语": "Úrdú", "波斯语": "Persneska", "斯瓦希里语": "Svahílí", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/it_it.dart b/lib/core/translations/language/it_it.dart index fece149d3..69400531d 100644 --- a/lib/core/translations/language/it_it.dart +++ b/lib/core/translations/language/it_it.dart @@ -34,6 +34,7 @@ const Map itIT = { "spanish": "Spagnolo", "portuguese": "Portoghese", "traditionalChinese": "Cinese tradizionale", + "traditionalChineseHK": "Cinese tradizionale (Hong Kong)", "japanese": "Giapponese", "korean": "Coreano", "french": "Francese", @@ -100,12 +101,15 @@ const Map itIT = { "usePasswordLogin": "Accedi con password", // 隐私政策弹窗 - "loginDeclaration": "Dichiarazione di Voitrans", - "welcomeToThisApp": "Benvenuto in Voitrans, si prega di leggere attentamente", + "loginDeclaration": "Dichiarazione di Voitrans", // Voitrans 声明 + "welcomeToThisApp": + "Benvenuto in Voitrans, si prega di leggere attentamente", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", cliccando su 'Accetta e entra' dichiari di aver letto e accettato integralmente i suddetti accordi. Cliccando su 'Rifiuta' uscirai dall'applicazione.", - "disagree": "Rifiuta", - "agreeAndEnter": "Accetta e entra", + ", cliccando su 'Accetta e entra' dichiari di aver letto e accettato integralmente i suddetti accordi. Cliccando su 'Rifiuta' uscirai dall'applicazione.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Rifiuta", // 不同意 + "agreeAndEnter": "Accetta e entra", // 同意并进入 // 首页 "deviceStatus": "Stato del dispositivo", @@ -189,6 +193,210 @@ const Map itIT = { "usageStats": "Statistiche di utilizzo", "usageStatsInfo": "Visualizza le statistiche di utilizzo dell'applicazione", "scene": "Scenario", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Traduzione Base 100', + 'trans_002_name': 'Traduzione Base 500', + 'trans_003_name': 'Traduzione Base 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Include 100 traduzioni (voce/testo).', + 'trans_002_desc': 'Include 500 traduzioni (voce/testo).', + 'trans_003_desc': 'Include 1000 traduzioni (voce/testo).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Interpretazione simultanea e traduzione di testo in tempo reale, con voce a bassa latenza.', + 'transHeaderDesc2': 'Adatto a viaggi, affari, discorsi e insegnamento.', + 'translateZhEn': 'Traduzione Cinese-Inglese', + 'lowLatencyVoiceBroadcast': 'Trasmissione vocale a bassa latenza', + 'multiLangTextTranslation': 'Traduzione di testo multilingue', + 'termOptimizationContextPreserve': + 'Ottimizzazione della terminologia e mantenimento del contesto', + 'lexiconTourBusinessLife': 'Lessici per viaggio/affari/vita quotidiana', + 'personalVocabularyMemory': 'Memoria del vocabolario personale', + 'conversationSubtitleLargeText': + 'Sottotitoli conversazione / modalità testo grande', + 'colorHighContrast': 'Elevato contrasto dei colori', + 'transDisclaimer': + 'Le prestazioni della traduzione dipendono dal microfono, dalla latenza di rete e dal rumore ambientale.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Panoramica dei vantaggi', + 'higherQuota': 'Quota di utilizzo più alta', + 'lowerUnitPrice': 'Prezzo unitario più basso', + 'priorityService': 'Servizio prioritario', + 'exclusiveSupportChannel': 'Canale di supporto dedicato', + 'fastResponse': 'Risposta rapida ai problemi', + 'eventsAndDiscounts': 'Eventi e sconti', + 'memberExclusiveEvents': 'Eventi esclusivi per i membri', + 'longTermDiscountPlan': 'Piano di sconti a lungo termine', + 'generalPrivileges': 'Privilegi generali', + 'earlyAccessNewFeatures': 'Accesso anticipato alle nuove funzionalità', + 'crossDeviceSync': 'Sincronizzazione tra dispositivi', + 'vipDisclaimer': + 'I benefici effettivi dipendono dai dettagli del pacchetto e possono cambiare con le versioni.', + + // 新手引导 / Onboarding + 'skip': "Salta", + 'next': 'Next', + 'sayLilyHint': "Say \"Lily Lily\" to the mic", + 'imHere': "I’m here~", + 'guideWelcomeWakeAI': "Welcome to Voitrans! First, wake your AI “Lily”.", + 'aiReplyCompleted': "Lily has finished the reply!", + 'aiThinking': "Lily is thinking…", + 'guideAwakenSuccess': "Great! Lily is awake—ask it to help.", + 'confirmInput': "Confirm Input", + 'guideClickSendPrefix': "Tap send, ", + // AI 引导步骤 + 'guideWeatherStart': "Tell Lily: “What’s the weather today?”", + 'guideWeatherInput': "What’s the weather today?", + 'guideWeatherSend': "Lily will report the weather in real time", + 'guideWeatherEnd': "Lily can report weather live—try other commands", + 'guideMusicStart': "Tell Lily: “Play some rock music”", + 'guideMusicInput': "Play some rock music", + 'guideMusicSend': "Lily will find music for you", + 'guideMusicEnd': "Lily found music—try other commands", + 'guideNavStart': "Tell Lily: “Navigate to Shenzhen Airport”", + 'guideNavInput': "Navigate to Shenzhen Airport", + 'guideNavSend': "Lily will plan the route", + 'guideNavEnd': "Navigation set—try other commands", + 'guideMeetingStart': + "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", + 'guideMeetingInput': "Create a meeting reminder for 3pm tomorrow", + 'guideMeetingSend': "Lily will create a meeting reminder", + 'guideMeetingEnd': "Reminder created—try other commands", + 'guidePhoneStart': "Tell Lily: “Call Mom”", + 'guidePhoneInput': "Call Mom", + 'guidePhoneSend': "Lily will make the call", + 'guidePhoneEnd': "Call placed—try other commands", + 'guideSmsStart': "Tell Lily: “Send Dad a text: I’ll be home for dinner”", + 'guideSmsInput': "Text Dad: I’ll be home for dinner", + 'guideSmsSend': "Lily will send the message", + 'guideSmsEnd': "Message sent—voice control is convenient", // 商务会议助手页 "startMeeting": "Inizia riunione", @@ -203,13 +411,244 @@ const Map itIT = { 'aiSummary': 'Riepilogo AI', 'meetingTranscript': 'Trascrizione riunione', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Impostazioni di sistema", //系统设置 - "vipRecharge": "Ricarica membro Premium", //会员充值 - "aiRecharge": "Membro Premium", //AI充值 - "translationRecharge": "Recharge traduzione", //翻译充值 - "meetingAssistantRecharge": "Recharge assistente riunione", //会议助手充值 - "cloudSync": "Recharge sincronizzazione cloud", //云端同步 + "systemSettings": "Impostazioni di sistema", + "vipRecharge": "Ricarica membro Premium", + "aiRecharge": "Membro Premium", + "translationRecharge": "Recharge traduzione", + "meetingAssistantRecharge": "Recharge assistente riunione", + "cloudSync": "Recharge sincronizzazione cloud", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Dispositivo connesso:", "accountId": "ID account:", "systemSetting": "Impostazioni di sistema", @@ -222,9 +661,9 @@ const Map itIT = { "lastBackup": "Ultimo backup:", "privacySettings": "Impostazioni privacy", "privacySettingsInfo": "Gestisci la raccolta dei dati e le autorizzazioni", - "permissionManagement": "Gestione autorizzazioni", + "permissionManagement": "Gestione autorizzazioni", // 权限管理 "permissionManagementInfo": - "Gestisci le impostazioni delle autorizzazioni dell'app", + "Gestisci le impostazioni delle autorizzazioni dell'app", // 管理应用权限设置 "aboutApplication": "Informazioni sull'app", "versions": "Versione", "checkUpdates": "Controlla aggiornamenti", @@ -261,11 +700,10 @@ const Map itIT = { 'networkErrorRetry': 'Errore di rete, riprova più tardi', // 设备管理相关 - 'clearPairedDevices': 'Cancella dispositivi associati', - 'clearPairedDevicesConfirm': - 'Sei sicuro di voler cancellare tutti i dispositivi associati?', - 'clearPairedDevicesSuccess': 'Dispositivi associati cancellati con successo', - 'clearPairedDevicesFailed': 'Cancellazione dei dispositivi associati fallita', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Chat vocale in tempo reale", @@ -274,11 +712,20 @@ const Map itIT = { "loading": "Caricamento...", //设备管理页面 - "earphone": "Auricolari", - "voicerecorder": "Registratore vocale", - "notBound": "Non associato", - "deviceNotBoundYet": "Nessun dispositivo ancora associato", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Disassocia", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -308,6 +755,20 @@ const Map itIT = { "loadMoreMessages": "Carica altri messaggi...", "loadFailedClickRetry": "Caricamento fallito, clicca per riprovare", "swipeUpForMore": "Scorri verso l'alto per vedere di più", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Ciao! Sono **Lily**, posso aiutarti a:\n\n' @@ -330,8 +791,8 @@ const Map itIT = { 'startPhoneCallMode': 'Avvia modalità chiamata, avvia input vocale', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Inserisci il tuo messaggio qui...', - 'characterCount': '{count} caratteri', + 'fullScreenEditorHint': 'Inserisci il tuo messaggio qui...', // 全屏编辑器输入提示 + 'characterCount': '{count} caratteri', // 字符计数显示 // 消息长按操作 'copy': 'Copia', @@ -340,6 +801,7 @@ const Map itIT = { 'submitSuccess': 'Inviato con successo', 'submitFailed': 'Invio fallito', 'reportSubmitted': 'Segnalazione inviata, la elaboreremo il prima possibile', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Dannoso/Non sicuro', 'pornographicVulgar': 'Pornografico/Volgare', 'misleadingAttack': 'Fuorviante/Attacco', @@ -350,6 +812,7 @@ const Map itIT = { 'other': 'Altro', 'reportDescriptionHint': 'Vogliamo sapere perché stai segnalando, puoi descrivere il problema che hai riscontrato.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Generato da AI', @@ -360,15 +823,15 @@ const Map itIT = { 'moreMusic': 'Altra musica', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'ore', - 'minutes': 'minuti', - 'seconds': 'secondi', - 'navigating': 'Navigazione', - 'currentLocation': 'Posizione attuale', - 'approximate': 'Circa', - 'enterRoad': 'Entra in', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'ore', // 小时单位 + 'minutes': 'minuti', // 分钟单位 + 'seconds': 'secondi', // 秒单位 + 'navigating': 'Navigazione', // 导航状态 + 'currentLocation': 'Posizione attuale', // 当前位置 + 'approximate': 'Circa', // 大约 + 'enterRoad': 'Entra in', // 进入道路 "driving": "In auto", "walking": "A piedi", "bicycling": "In bicicletta", @@ -404,6 +867,17 @@ const Map itIT = { "friday": "Ven", "saturday": "Sab", "sunday": "Dom", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Soleggiato", "partlyCloudy": "Poco nuvoloso", @@ -439,6 +913,8 @@ const Map itIT = { 'deleteAccount': 'Elimina account', 'deleteAccountTips': 'Sei sicuro di voler eliminare permanentemente il tuo account? Questa azione non può essere annullata.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -461,6 +937,8 @@ const Map itIT = { 'Errore interno del server, riprova più tardi', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Compressione dell\'immagine fallita', 'avatarUpdateFailed': 'Aggiornamento dell\'avatar fallito', 'usernameCannotBeEmpty': 'Il nome utente non può essere vuoto', @@ -473,32 +951,46 @@ const Map itIT = { 'deleteAccountFailedRetry': 'Eliminazione dell\'account fallita, riprova', // 账号服务相关 - 'clearUserDataFailed': 'Cancellazione dei dati utente fallita', - 'deleteUserDataFailed': 'Eliminazione dei dati utente fallita', - 'thirdPartyLogoutSuccess': 'Disconnessione di terze parti riuscita', - 'thirdPartyLogoutFailed': 'Disconnessione di terze parti fallita', + 'clearUserDataFailed': 'Cancellazione dei dati utente fallita', // 清理用户数据失败 + 'deleteUserDataFailed': 'Eliminazione dei dati utente fallita', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': + 'Disconnessione di terze parti riuscita', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': + 'Disconnessione di terze parti fallita', // 第三方登录退出失败 'signOutProcessError': - 'Si è verificato un errore durante il processo di disconnessione', + 'Si è verificato un errore durante il processo di disconnessione', // 登出过程发生错误 'deleteAccountProcessError': - 'Si è verificato un errore durante il processo di eliminazione dell\'account', - 'userDataClearSuccess': 'Dati utente cancellati con successo', + 'Si è verificato un errore durante il processo di eliminazione dell\'account', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Dati utente cancellati con successo', // 用户数据清理成功 'allUserDataClearSuccess': - 'Tutti i dati utente sono stati cancellati con successo', - 'accountServiceInitialized': 'Servizio account inizializzato', + 'Tutti i dati utente sono stati cancellati con successo', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Servizio account inizializzato', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Ottenimento dello stato delle autorizzazioni fallito', 'communicationPermissions': 'Autorizzazioni di comunicazione', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Autorizzazioni del calendario', 'locationPermissions': 'Autorizzazioni di localizzazione', 'phone': 'Telefono', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Scrivi nel calendario', 'calendarFullAccess': 'Accesso completo al calendario', 'locationInfo': 'Informazioni sulla posizione', 'phonePermissionDesc': 'Utilizzato per la funzione di chiamata', 'smsPermissionDesc': 'Utilizzato per la funzione di invio SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Utilizzato per creare eventi e promemoria nel calendario', 'calendarFullAccessPermissionDesc': @@ -518,28 +1010,90 @@ const Map itIT = { 'La funzione di chiamata richiede l\'autorizzazione del telefono', 'smsPermissionDetailDesc': 'La funzione di invio SMS richiede l\'autorizzazione SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'La creazione di eventi nel calendario richiede l\'autorizzazione di scrittura nel calendario', 'calendarFullAccessPermissionDetailDesc': 'La gestione degli eventi del calendario richiede l\'autorizzazione completa del calendario', 'locationPermissionDetailDesc': 'L\'ottenimento di informazioni sulla posizione richiede l\'autorizzazione di localizzazione', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'L\'app necessita di questa autorizzazione per la piena funzionalità', 'permanentDenialText': 'Hai negato permanentemente l\'autorizzazione {permission}, vai alle impostazioni dell\'app per attivarla', 'goToSettings': 'Vai alle impostazioni', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Nuova versione trovata', - 'remindLater': 'Ricordamelo più tardi', - 'updateNow': 'Aggiorna ora', - 'checkUpdate': 'Controlla aggiornamenti', - 'updateFailed': 'Aggiornamento fallito', + 'newVersionFound': 'Nuova versione trovata', // 版本更新对话框标题 + 'remindLater': 'Ricordamelo più tardi', // 稍后提醒按钮 + 'updateNow': 'Aggiorna ora', // 立即更新按钮 + 'checkUpdate': 'Controlla aggiornamenti', // 检查更新按钮 + 'updateFailed': 'Aggiornamento fallito', // 更新失败提示 'cannotOpenAppStore': - 'Impossibile aprire l\'app store, vai manualmente all\'app store per aggiornare', + 'Impossibile aprire l\'app store, vai manualmente all\'app store per aggiornare', // 无法打开应用商店提示 'updateErrorRetry': - 'Si è verificato un errore durante l\'aggiornamento, riprova più tardi', + 'Si è verificato un errore durante l\'aggiornamento, riprova più tardi', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -648,8 +1202,23 @@ const Map itIT = { "东帝汶": "Timor Est", "斐济": "Figi", "所罗门群岛": "Isole Salomone", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Cronologia traduzioni", "enableRecording": "Abilita registrazione", @@ -658,9 +1227,24 @@ const Map itIT = { "phoneUser": "Utente telefono", "selectSourceLanguage": "Seleziona lingua di origine", "selectTargetLanguage": "Seleziona lingua di destinazione", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", - // 翻译历史页 (translation_history_view.dart) + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", + + // 翻译历史页 "noTranslationHistory": "Nessuna cronologia", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Cancella cronologia", "clearHistoryConfirm": "Sei sicuro di voler cancellare tutta la cronologia delle traduzioni? Questa azione non può essere annullata.", @@ -669,7 +1253,58 @@ const Map itIT = { "deleteSessionConfirm": "Sei sicuro di voler eliminare tutte le registrazioni di traduzione per questa sessione? Questa azione non può essere annullata.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Traduci file audio", "noAudioFiles": "Nessun file audio", "calculating": "Calcolo...", @@ -715,7 +1350,7 @@ const Map itIT = { "autoInputCode": "Inserimento automatico del codice", "skipBinding": "Salta associazione", "rescan": "Riesegui scansione", - "skip": "Salta", + "verifyingDevice": "Verifica del dispositivo...", "confirmBinding": "Conferma associazione", "associatingDevice": "Associazione del dispositivo...", @@ -749,12 +1384,17 @@ const Map itIT = { "pairingFailedRetry": "Associazione fallita, riprova", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Abilita il Bluetooth', 'deviceDisconnected': 'Dispositivo disconnesso', 'readyToStartPairing': 'Pronto per iniziare l associazione', 'checkingEnvironment': 'Controllo dell ambiente...', 'ensureHeadsetOnAndPairingMode': 'Assicurati che le cuffie siano accese e in modalità di associazione', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Creazione di una connessione sicura...', 'needManualBindingAuthCode': "È necessario un codice di autorizzazione per l'associazione manuale...", @@ -777,6 +1417,19 @@ const Map itIT = { 'deviceAuthorizationFailedCheckCode': 'Autorizzazione del dispositivo fallita, controlla il codice di autorizzazione', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Feedback utente", 'feedbackInfo': 'Fornisci feedback o suggerimenti', @@ -805,6 +1458,13 @@ const Map itIT = { "connectionFailed": "Connessione fallita", "retryConnection": "Riprova connessione", "ota_updateNow": "Aggiorna ora", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Mantieni il dispositivo connesso, non chiudere l'app", "doNotDisconnect": "Non disconnettere", @@ -814,11 +1474,11 @@ const Map itIT = { "Rimuovi entrambi gli auricolari e assicurati che la batteria di entrambi sia superiore al 20%", // 音乐列表页面 - "noMusic": "Nessuna musica", - "noPlayingMusic": "Nessuna musica in riproduzione", - "unknownSong": "Canzone sconosciuta", - "unknownArtist": "Artista sconosciuto", - "playAll": "Riproduci tutto", + "noMusic": "Nessuna musica", // 暂无音乐 + "noPlayingMusic": "Nessuna musica in riproduzione", // 暂无播放音乐 + "unknownSong": "Canzone sconosciuta", // 未知歌曲 + "unknownArtist": "Artista sconosciuto", // 未知歌手 + "playAll": "Riproduci tutto", // 播放全部 // 语言名称 "中文(简体)": "Cinese (semplificato)", @@ -860,98 +1520,23 @@ const Map itIT = { "乌尔都语": "Urdu", "波斯语": "Persiano", "斯瓦希里语": "Swahili", - // Guide overlay keys (placeholders in English) - "sayLilyHint": "Say \"Lily Lily\" to the mic", - "imHere": "I’m here~", - "guideWelcomeWakeAI": "Welcome to Voitrans! First, wake your AI “Lily”.", - "aiReplyCompleted": "Lily has finished the reply!", - "aiThinking": "Lily is thinking…", - "guideAwakenSuccess": "Great! Lily is awake—ask it to help.", - "confirmInput": "Confirm Input", - "guideClickSendPrefix": "Tap send, ", - "guideWeatherStart": "Tell Lily: “What’s the weather today?”", - "guideWeatherInput": "What’s the weather today?", - "guideWeatherSend": "Lily will report the weather in real time", - "guideWeatherEnd": "Lily can report weather live—try other commands", - "guideMusicStart": "Tell Lily: “Play some rock music”", - "guideMusicInput": "Play some rock music", - "guideMusicSend": "Lily will find music for you", - "guideMusicEnd": "Lily found music—try other commands", - "guideNavStart": "Tell Lily: “Navigate to Shenzhen Airport”", - "guideNavInput": "Navigate to Shenzhen Airport", - "guideNavSend": "Lily will plan the route", - "guideNavEnd": "Navigation set—try other commands", - "guideMeetingStart": - "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", - "guideMeetingInput": "Create a meeting reminder for 3pm tomorrow", - "guideMeetingSend": "Lily will create a meeting reminder", - "guideMeetingEnd": "Reminder created—try other commands", - "guidePhoneStart": "Tell Lily: “Call Mom”", - "guidePhoneInput": "Call Mom", - "guidePhoneSend": "Lily will make the call", - "guidePhoneEnd": "Call placed—try other commands", - "guideSmsStart": "Tell Lily: “Send Dad a text: I’ll be home for dinner”", - "guideSmsInput": "Text Dad: I’ll be home for dinner", - "guideSmsSend": "Lily will send the message", - "guideSmsEnd": "Message sent—voice control is convenient", - // Goods pages common footer (placeholders) - 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', - 'copyrightVoitrans': '© 2025 Voitrans Technologies', - - // Meeting goods page (placeholders) - 'meetingHeaderDesc1': - 'Audio recording, transcription, keyword search, and auto summary.', - 'meetingHeaderDesc2': - 'Suitable for business meetings, class notes, and interview minutes.', - 'meetingAutoRecording': 'Auto recording and segmentation', - 'meetingSpeakerTagging': 'Speaker labeling', - 'meetingLongAudioTranscription': 'Long audio transcription', - 'meetingKeyPointSummary': 'Key point extraction', - 'meetingTopicNameSearch': 'Search by topic/name', - 'meetingTimelineJump': 'Timeline jump', - 'meetingExportSummary': 'Export minutes', - 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': - 'Use in quiet environments; performance depends on microphone and network.', - - // Translation goods page (placeholders) - 'transHeaderDesc1': - 'Interpretazione simultanea e traduzione di testo in tempo reale, con voce a bassa latenza.', - 'transHeaderDesc2': 'Adatto a viaggi, affari, discorsi e insegnamento.', - 'translateZhEn': 'Traduzione Cinese-Inglese', - 'lowLatencyVoiceBroadcast': 'Trasmissione vocale a bassa latenza', - 'multiLangTextTranslation': 'Traduzione di testo multilingue', - 'termOptimizationContextPreserve': - 'Ottimizzazione della terminologia e mantenimento del contesto', - 'lexiconTourBusinessLife': 'Lessici per viaggio/affari/vita quotidiana', - 'personalVocabularyMemory': 'Memoria del vocabolario personale', - 'conversationSubtitleLargeText': - 'Sottotitoli conversazione / modalità testo grande', - 'colorHighContrast': 'Elevato contrasto dei colori', - 'transDisclaimer': - 'Le prestazioni della traduzione dipendono dal microfono, dalla latenza di rete e dal rumore ambientale.', - 'trans_001_name': 'Traduzione Base 100', - 'trans_002_name': 'Traduzione Base 500', - 'trans_003_name': 'Traduzione Base 1000', + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", - 'trans_001_desc': 'Include 100 traduzioni (voce/testo).', - 'trans_002_desc': 'Include 500 traduzioni (voce/testo).', - 'trans_003_desc': 'Include 1000 traduzioni (voce/testo).', + //补充 + "insufficientIntegral": "Insufficient integral", - // VIP goods page (placeholders) - 'benefitsOverview': 'Panoramica dei vantaggi', - 'higherQuota': 'Quota di utilizzo più alta', - 'lowerUnitPrice': 'Prezzo unitario più basso', - 'priorityService': 'Servizio prioritario', - 'exclusiveSupportChannel': 'Canale di supporto dedicato', - 'fastResponse': 'Risposta rapida ai problemi', - 'eventsAndDiscounts': 'Eventi e sconti', - 'memberExclusiveEvents': 'Eventi esclusivi per i membri', - 'longTermDiscountPlan': 'Piano di sconti a lungo termine', - 'generalPrivileges': 'Privilegi generali', - 'earlyAccessNewFeatures': 'Accesso anticipato alle nuove funzionalità', - 'crossDeviceSync': 'Sincronizzazione tra dispositivi', - 'vipDisclaimer': - 'I benefici effettivi dipendono dai dettagli del pacchetto e possono cambiare con le versioni.', + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/ja_jp.dart b/lib/core/translations/language/ja_jp.dart index 4e9bffa4f..40a10581c 100644 --- a/lib/core/translations/language/ja_jp.dart +++ b/lib/core/translations/language/ja_jp.dart @@ -33,6 +33,7 @@ const Map jaJP = { "spanish": "スペイン語", "portuguese": "ポルトガル語", "traditionalChinese": "繁体字中国語", + "traditionalChineseHK": "中国語(繁体字・香港)", "japanese": "日本語", "korean": "韓国語", "french": "フランス語", @@ -100,8 +101,8 @@ const Map jaJP = { // 隐私政策弹窗 "loginDeclaration": "Voitrans 声明", // Voitrans 声明 "welcomeToThisApp": "Voitransへようこそ、十分にお読みください", // 欢迎使用Voitrans,请充分阅读 - // "privacyPolicy": "プライバシーポリシー", // 《隐私政策》 - 已存在,使用现有键 - // "userAgreement": "利用規約", // 《用户协议》 - 已存在,使用现有键 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": "。「同意して進む」をクリックすると、上記の規約を十分に読み、同意したことを示します。「同意しない」をクリックするとアプリケーションが終了します。", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 "disagree": "同意しない", // 不同意 @@ -179,6 +180,209 @@ const Map jaJP = { "usageStats": "使用統計", "usageStatsInfo": "使用統計を確認", "scene": "シナリオ", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "スキップ", + 'next': 'Next', + 'sayLilyHint': "Say \"Lily Lily\" to the mic", + 'imHere': "I’m here~", + 'guideWelcomeWakeAI': "Welcome to Voitrans! First, wake your AI “Lily”.", + 'aiReplyCompleted': "Lily has finished the reply!", + 'aiThinking': "Lily is thinking…", + 'guideAwakenSuccess': "Great! Lily is awake—ask it to help.", + 'confirmInput': "Confirm Input", + 'guideClickSendPrefix': "Tap send, ", + // AI 引导步骤 + 'guideWeatherStart': "Tell Lily: “What’s the weather today?”", + 'guideWeatherInput': "What’s the weather today?", + 'guideWeatherSend': "Lily will report the weather in real time", + 'guideWeatherEnd': "Lily can report weather live—try other commands", + 'guideMusicStart': "Tell Lily: “Play some rock music”", + 'guideMusicInput': "Play some rock music", + 'guideMusicSend': "Lily will find music for you", + 'guideMusicEnd': "Lily found music—try other commands", + 'guideNavStart': "Tell Lily: “Navigate to Shenzhen Airport”", + 'guideNavInput': "Navigate to Shenzhen Airport", + 'guideNavSend': "Lily will plan the route", + 'guideNavEnd': "Navigation set—try other commands", + 'guideMeetingStart': + "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", + 'guideMeetingInput': "Create a meeting reminder for 3pm tomorrow", + 'guideMeetingSend': "Lily will create a meeting reminder", + 'guideMeetingEnd': "Reminder created—try other commands", + 'guidePhoneStart': "Tell Lily: “Call Mom”", + 'guidePhoneInput': "Call Mom", + 'guidePhoneSend': "Lily will make the call", + 'guidePhoneEnd': "Call placed—try other commands", + 'guideSmsStart': "Tell Lily: “Send Dad a text: I’ll be home for dinner”", + 'guideSmsInput': "Text Dad: I’ll be home for dinner", + 'guideSmsSend': "Lily will send the message", + 'guideSmsEnd': "Message sent—voice control is convenient", // 商务会议助手页 "startMeeting": "会議を開始", @@ -191,15 +395,246 @@ const Map jaJP = { 'meeting': '会議', 'recordingDetails': '録音詳細', 'aiSummary': 'AI要約', - 'meetingTranscript': '会議記録', //会议记录 + 'meetingTranscript': '会議記録', + + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', // 设置页 - "systemSettings": "システム設定", //系统设置 - "vipRecharge": "プレミアムメンバー料金", //会员充值 - "aiRecharge": "プレミアムメンバー", //AI充值 - "translationRecharge": "翻訳料金", //翻译充值 - "meetingAssistantRecharge": "会議アシスタント料金", //会议助手充值 - "cloudSync": "クラウド同期料金", //云端同步 + "systemSettings": "システム設定", + "vipRecharge": "プレミアムメンバー料金", + "aiRecharge": "プレミアムメンバー", + "translationRecharge": "翻訳料金", + "meetingAssistantRecharge": "会議アシスタント料金", + "cloudSync": "クラウド同期料金", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "接続デバイス:", "accountId": "アカウントID:", "systemSetting": "システム設定", @@ -233,10 +668,10 @@ const Map jaJP = { 'selecttimbre': '音色を選択', 'pleaseRead': 'お読みください', 'completeRecording': '録音を完了', - "firmwareUpgrade": "ファームウェアアップグレード", // 固件升级 - "bleHeadsetFirmwareUpgrade": "BLEイヤホンファームウェアアップグレード", // BLE耳机固件版本升级 - "deviceManagement": "デバイス管理", // 设备管理 - "manageConnectedDevices": "接続されたBluetoothデバイスを管理", // 管理已绑定的蓝牙设备 + "firmwareUpgrade": "ファームウェアアップグレード", + "bleHeadsetFirmwareUpgrade": "BLEイヤホンファームウェアアップグレード", + "deviceManagement": "デバイス管理", + "manageConnectedDevices": "接続されたBluetoothデバイスを管理", //设置setting_controller // 版本更新相关 @@ -245,22 +680,31 @@ const Map jaJP = { 'networkErrorRetry': 'ネットワークエラー、後でもう一度お試しください', // 设备管理相关 - 'clearPairedDevices': 'ペアリングデバイスをクリア', - 'clearPairedDevicesConfirm': 'すべてのペアリングデバイスをクリアしてもよろしいですか?', - 'clearPairedDevicesSuccess': 'ペアリングデバイスのクリアに成功', - 'clearPairedDevicesFailed': 'ペアリングデバイスのクリアに失敗', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 - 'realtimeVoiceChat': 'リアルタイム音声会話', - 'realtimeVoiceChatInfo': 'スマート音声インタラクション機能を体験(プレビュー)', - 'loading': '読み込み中...', + "realtimeVoiceChat": 'リアルタイム音声会話', + "realtimeVoiceChatInfo": 'スマート音声インタラクション機能を体験(プレビュー)', + "loading": '読み込み中...', -//设备管理页面 - "earphone": "イヤホン", // 耳机 - "voicerecorder": "ボイスレコーダー", // 录音笔 - "notBound": "未バインド", // 未绑定 - "deviceNotBoundYet": "デバイスはまだバインドされていません", // 还未绑定设备 - "unbind": "バインド解除", // 解绑 + //设备管理页面 + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", + "unbind": "バインド解除", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -289,6 +733,20 @@ const Map jaJP = { "loadMoreMessages": "さらにメッセージを読み込み...", "loadFailedClickRetry": "読み込みに失敗、クリックして再試行", "swipeUpForMore": "上にスワイプしてさらに表示", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'こんにちは!私は**Lily**です。以下のことでお手伝いできます:\n\n' @@ -317,7 +775,7 @@ const Map jaJP = { 'submitSuccess': '送信に成功', 'submitFailed': '送信に失敗', 'reportSubmitted': '報告を送信しました。できるだけ早く処理いたします', - //'networkError': 'ネットワークエラー、後でもう一度お試しください', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': '有害/危険', 'pornographicVulgar': 'ポルノ/下品', 'misleadingAttack': '誤解を招く/攻撃', @@ -326,7 +784,7 @@ const Map jaJP = { 'copyrightViolation': '私の著作権、人格権などの侵害', 'other': 'その他', 'reportDescriptionHint': '報告の理由を知りたいと思います。遭遇した問題を説明してください。', - //'submit': '送信', + //'submit': '提交', //Message_bubble 'generatedByAi': 'AIによって生成', @@ -349,7 +807,7 @@ const Map jaJP = { "driving": "運転", "walking": "徒歩", "bicycling": "自転車", - "transit": "公共交通機関", + "tsransit": "Transit", //天气卡片 weather_card 'weatherQuery': '天気照会:', @@ -372,6 +830,17 @@ const Map jaJP = { "friday": "金", "saturday": "土", "sunday": "日", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "晴れ", "partlyCloudy": "一部曇り", @@ -406,6 +875,8 @@ const Map jaJP = { "logoutTips": "現在のアカウントからログアウトしてもよろしいですか?", 'deleteAccount': 'アカウント削除', 'deleteAccountTips': 'アカウントを永続的に削除してもよろしいですか?この操作は元に戻せません。', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': 'ネットワーク接続に失敗しました。ネットワーク設定を確認して再試行してください', @@ -421,7 +892,7 @@ const Map jaJP = { 'serverInternalErrorRetryLater': 'サーバー内部エラー、後でもう一度お試しください', // Profile 用户交互 -//'error': 'エラー', +//'error': '错误', //'success': '成功', 'imageCompressionFailed': '画像圧縮に失敗', 'avatarUpdateFailed': 'アバター更新に失敗', @@ -448,15 +919,26 @@ const Map jaJP = { // 权限管理页面 'getPermissionStatusFailed': '権限状態の取得に失敗', 'communicationPermissions': '通信権限', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'カレンダー権限', 'locationPermissions': '位置情報権限', 'phone': '電話', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'カレンダー書き込み', 'calendarFullAccess': 'カレンダーフルアクセス', 'locationInfo': '位置情報', 'phonePermissionDesc': '通話機能に使用', 'smsPermissionDesc': 'SMS機能に使用', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'カレンダーイベントとリマインダーの作成に使用', 'calendarFullAccessPermissionDesc': 'カレンダーイベントとリマインダーの読み取りと管理に使用', 'locationPermissionDesc': '現在の位置情報の取得に使用', @@ -470,13 +952,75 @@ const Map jaJP = { 'permissionRequestError': '権限要求エラー', 'phonePermissionDetailDesc': '通話機能には電話権限が必要', 'smsPermissionDetailDesc': 'SMS機能にはSMS権限が必要', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'カレンダーイベントの作成にはカレンダー書き込み権限が必要', 'calendarFullAccessPermissionDetailDesc': 'カレンダーイベントの管理には完全なカレンダー権限が必要', 'locationPermissionDetailDesc': '位置情報の取得には位置情報権限が必要', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'アプリは完全な機能のためにこの権限が必要です', 'permanentDenialText': '{permission}権限を永続的に拒否されました。アプリ設定で有効にしてください', 'goToSettings': '設定に移動', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 'newVersionFound': '新しいバージョンが見つかりました', // 版本更新对话框标题 'remindLater': '後で通知', // 稍后提醒按钮 @@ -593,8 +1137,23 @@ const Map jaJP = { "东帝汶": "東ティモール", "斐济": "フィジー", "所罗门群岛": "ソロモン諸島", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "翻訳履歴", "enableRecording": "録音を有効にする", @@ -603,16 +1162,82 @@ const Map jaJP = { "phoneUser": "電話ユーザー", "selectSourceLanguage": "ソース言語を選択", "selectTargetLanguage": "ターゲット言語を選択", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "翻訳履歴がありません", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "履歴をクリア", "clearHistoryConfirm": "すべての翻訳履歴をクリアしてもよろしいですか?この操作は元に戻せません。", "unknownLanguage": "不明な言語", "deleteSessionRecord": "セッション記録を削除", "deleteSessionConfirm": "このセッションのすべての翻訳記録を削除してもよろしいですか?この操作は元に戻せません。", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "音声ファイルを翻訳", "noAudioFiles": "音声ファイルがありません", "calculating": "計算中...", @@ -656,7 +1281,7 @@ const Map jaJP = { "autoInputCode": "コードを自動入力", "skipBinding": "バインドをスキップ", "rescan": "再スキャン", - "skip": "スキップ", + "verifyingDevice": "デバイスを確認中...", "confirmBinding": "バインドを確認", "associatingDevice": "デバイスを関連付け中...", @@ -682,17 +1307,17 @@ const Map jaJP = { "authorizationFailedCheckCode": "承認に失敗しました。承認コードを確認してください", "pairingFailedRetry": "ペアリングに失敗しました。再試行してください", -//配对控制器相关 - //'connectDevice': 'デバイスを接続', + // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Bluetoothを有効にしてください', 'deviceDisconnected': 'デバイスが切断されました', 'readyToStartPairing': 'ペアリング開始準備完了', 'checkingEnvironment': '環境を確認中...', 'ensureHeadsetOnAndPairingMode': 'ヘッドセットがオンでペアリングモードであることを確認してください', - //'goToBluetoothSettings': 'Bluetooth設定に移動', - //'verifyingDevice': 'デバイスを確認中...', - //'confirmBinding': 'バインドを確認', - //'associatingDevice': 'デバイスを関連付け中...', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'セキュア接続を確立中...', 'needManualBindingAuthCode': '手動バインド承認コードが必要...', 'pairingSuccessful': 'ペアリング成功!', @@ -712,6 +1337,19 @@ const Map jaJP = { 'bleConnectionFailed': 'BLE接続に失敗', 'deviceAuthorizationFailedCheckCode': 'デバイス承認に失敗しました。承認コードを確認してください', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "フィードバック", 'feedbackInfo': 'フィードバックや提案を提供', @@ -737,6 +1375,13 @@ const Map jaJP = { "connectionFailed": "接続に失敗", "retryConnection": "接続を再試行", "ota_updateNow": "今すぐ更新", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "デバイスを接続したままにし、アプリを閉じないでください", "doNotDisconnect": "切断しないでください", "charging": "充電中", @@ -790,38 +1435,23 @@ const Map jaJP = { "乌尔都语": "ウルドゥー語", "波斯语": "ペルシャ語", "斯瓦希里语": "スワヒリ語", - // Guide overlay keys (placeholders in English) - "sayLilyHint": "Say \"Lily Lily\" to the mic", - "imHere": "I’m here~", - "guideWelcomeWakeAI": "Welcome to Voitrans! First, wake your AI “Lily”.", - "aiReplyCompleted": "Lily has finished the reply!", - "aiThinking": "Lily is thinking…", - "guideAwakenSuccess": "Great! Lily is awake—ask it to help.", - "confirmInput": "Confirm Input", - "guideClickSendPrefix": "Tap send, ", - "guideWeatherStart": "Tell Lily: “What’s the weather today?”", - "guideWeatherInput": "What’s the weather today?", - "guideWeatherSend": "Lily will report the weather in real time", - "guideWeatherEnd": "Lily can report weather live—try other commands", - "guideMusicStart": "Tell Lily: “Play some rock music”", - "guideMusicInput": "Play some rock music", - "guideMusicSend": "Lily will find music for you", - "guideMusicEnd": "Lily found music—try other commands", - "guideNavStart": "Tell Lily: “Navigate to Shenzhen Airport”", - "guideNavInput": "Navigate to Shenzhen Airport", - "guideNavSend": "Lily will plan the route", - "guideNavEnd": "Navigation set—try other commands", - "guideMeetingStart": - "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", - "guideMeetingInput": "Create a meeting reminder for 3pm tomorrow", - "guideMeetingSend": "Lily will create a meeting reminder", - "guideMeetingEnd": "Reminder created—try other commands", - "guidePhoneStart": "Tell Lily: “Call Mom”", - "guidePhoneInput": "Call Mom", - "guidePhoneSend": "Lily will make the call", - "guidePhoneEnd": "Call placed—try other commands", - "guideSmsStart": "Tell Lily: “Send Dad a text: I’ll be home for dinner”", - "guideSmsInput": "Text Dad: I’ll be home for dinner", - "guideSmsSend": "Lily will send the message", - "guideSmsEnd": "Message sent—voice control is convenient", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/ko_kr.dart b/lib/core/translations/language/ko_kr.dart index 5067aae43..6a1f3efaa 100644 --- a/lib/core/translations/language/ko_kr.dart +++ b/lib/core/translations/language/ko_kr.dart @@ -33,6 +33,7 @@ const Map koKR = { "spanish": "스페인어", "portuguese": "포르투갈어", "traditionalChinese": "중국어 번체", + "traditionalChineseHK": "중국어(번체, 홍콩)", "japanese": "일본어", "korean": "한국어", "french": "프랑스어", @@ -98,12 +99,14 @@ const Map koKR = { "usePasswordLogin": "비밀번호로 로그인", // 隐私政策弹窗 - "loginDeclaration": "Voitrans 선언", - "welcomeToThisApp": "Voitrans에 오신 것을 환영합니다. 충분히 읽어주십시오", + "loginDeclaration": "Voitrans 선언", // Voitrans 声明 + "welcomeToThisApp": "Voitrans에 오신 것을 환영합니다. 충분히 읽어주십시오", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", '동의하고 시작하기'를 클릭하면 위 약관을 충분히 읽고 동의한 것으로 간주됩니다. '동의하지 않음'을 클릭하면 앱이 종료됩니다.", - "disagree": "동의하지 않음", - "agreeAndEnter": "동의하고 시작하기", + ", '동의하고 시작하기'를 클릭하면 위 약관을 충분히 읽고 동의한 것으로 간주됩니다. '동의하지 않음'을 클릭하면 앱이 종료됩니다.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "동의하지 않음", // 不同意 + "agreeAndEnter": "동의하고 시작하기", // 同意并进入 // 首页 "deviceStatus": "기기 상태", @@ -177,6 +180,205 @@ const Map koKR = { "usageStats": "사용 통계", "usageStatsInfo": "사용 통계를 확인하세요", "scene": "상황", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': '번역 기본 100', + 'trans_002_name': '번역 기본 500', + 'trans_003_name': '번역 기본 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': '번역 100회 포함(음성/텍스트).', + 'trans_002_desc': '번역 500회 포함(음성/텍스트).', + 'trans_003_desc': '번역 1000회 포함(음성/텍스트).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': '실시간 동시통역과 텍스트 번역, 저지연 음성 방송.', + 'transHeaderDesc2': '여행, 비즈니스, 연설, 교육에 적합합니다.', + 'translateZhEn': '중-영 번역', + 'lowLatencyVoiceBroadcast': '저지연 음성 방송', + 'multiLangTextTranslation': '다국어 텍스트 번역', + 'termOptimizationContextPreserve': '용어 최적화 및 문맥 유지', + 'lexiconTourBusinessLife': '여행/비즈니스/일상 용어집', + 'personalVocabularyMemory': '개인 어휘 메모리', + 'conversationSubtitleLargeText': '대화 자막 / 큰 글자 모드', + 'colorHighContrast': '높은 색 대비', + 'transDisclaimer': '번역 품질은 마이크, 네트워크 지연 및 주변 소음에 따라 달라집니다.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': '혜택 개요', + 'higherQuota': '더 높은 사용 한도', + 'lowerUnitPrice': '더 낮은 단가', + 'priorityService': '우선 서비스', + 'exclusiveSupportChannel': '전용 지원 채널', + 'fastResponse': '문제 신속 대응', + 'eventsAndDiscounts': '이벤트 및 할인', + 'memberExclusiveEvents': '회원 전용 이벤트', + 'longTermDiscountPlan': '장기 할인 계획', + 'generalPrivileges': '일반 특권', + 'earlyAccessNewFeatures': '신기능 사전 이용', + 'crossDeviceSync': '디바이스 간 동기화', + 'vipDisclaimer': '실제 혜택은 패키지 세부사항에 따라 달라지며 버전에 따라 변경될 수 있습니다.', + + // 新手引导 / Onboarding + 'skip': "건너뛰기", + 'next': 'Next', + 'sayLilyHint': "Say \"Lily Lily\" to the mic", + 'imHere': "I’m here~", + 'guideWelcomeWakeAI': "Welcome to Voitrans! First, wake your AI “Lily”.", + 'aiReplyCompleted': "Lily has finished the reply!", + 'aiThinking': "Lily is thinking…", + 'guideAwakenSuccess': "Great! Lily is awake—ask it to help.", + 'confirmInput': "Confirm Input", + 'guideClickSendPrefix': "Tap send, ", + // AI 引导步骤 + 'guideWeatherStart': "Tell Lily: “What’s the weather today?”", + 'guideWeatherInput': "What’s the weather today?", + 'guideWeatherSend': "Lily will report the weather in real time", + 'guideWeatherEnd': "Lily can report weather live—try other commands", + 'guideMusicStart': "Tell Lily: “Play some rock music”", + 'guideMusicInput': "Play some rock music", + 'guideMusicSend': "Lily will find music for you", + 'guideMusicEnd': "Lily found music—try other commands", + 'guideNavStart': "Tell Lily: “Navigate to Shenzhen Airport”", + 'guideNavInput': "Navigate to Shenzhen Airport", + 'guideNavSend': "Lily will plan the route", + 'guideNavEnd': "Navigation set—try other commands", + 'guideMeetingStart': + "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", + 'guideMeetingInput': "Create a meeting reminder for 3pm tomorrow", + 'guideMeetingSend': "Lily will create a meeting reminder", + 'guideMeetingEnd': "Reminder created—try other commands", + 'guidePhoneStart': "Tell Lily: “Call Mom”", + 'guidePhoneInput': "Call Mom", + 'guidePhoneSend': "Lily will make the call", + 'guidePhoneEnd': "Call placed—try other commands", + 'guideSmsStart': "Tell Lily: “Send Dad a text: I’ll be home for dinner”", + 'guideSmsInput': "Text Dad: I’ll be home for dinner", + 'guideSmsSend': "Lily will send the message", + 'guideSmsEnd': "Message sent—voice control is convenient", // 商务会议助手页 "startMeeting": "회의 시작", @@ -191,13 +393,244 @@ const Map koKR = { 'aiSummary': 'AI 요약', 'meetingTranscript': '회의 원문', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "시스템 설정", //系统设置 - "vipRecharge": "프리미엄 회원료", //会员充值 - "aiRecharge": "프리미엄 회원", //AI充值 - "translationRecharge": "번역료", //翻译充值 - "meetingAssistantRecharge": "회의 어시스턴트료", //会议助手充值 - "cloudSync": "클라우드 동기화료", //云端同步 + "systemSettings": "시스템 설정", + "vipRecharge": "프리미엄 회원료", + "aiRecharge": "프리미엄 회원", + "translationRecharge": "번역료", + "meetingAssistantRecharge": "회의 어시스턴트료", + "cloudSync": "클라우드 동기화료", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "연결된 기기:", "accountId": "계정 ID:", "systemSetting": "시스템 설정", @@ -209,8 +642,8 @@ const Map koKR = { "lastBackup": "마지막 백업:", "privacySettings": "개인정보 설정", "privacySettingsInfo": "데이터 수집 및 권한 관리", - "permissionManagement": "권한 관리", - "permissionManagementInfo": "앱 권한 설정 관리", + "permissionManagement": "권한 관리", // 权限管理 + "permissionManagementInfo": "앱 권한 설정 관리", // 管理应用权限设置 "aboutApplication": "앱 정보", "versions": "버전", "checkUpdates": "업데이트 확인", @@ -243,10 +676,10 @@ const Map koKR = { 'networkErrorRetry': '네트워크 오류, 잠시 후 다시 시도하세요', // 设备管理相关 - 'clearPairedDevices': '페어링된 기기 지우기', - 'clearPairedDevicesConfirm': '모든 페어링된 기기를 지우시겠습니까?', - 'clearPairedDevicesSuccess': '페어링된 기기 지우기 성공', - 'clearPairedDevicesFailed': '페어링된 기기 지우기 실패', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "실시간 음성 대화", @@ -254,11 +687,20 @@ const Map koKR = { "loading": "로딩 중...", //设备管理页面 - "earphone": "이어폰", - "voicerecorder": "음성 녹음기", - "notBound": "연결되지 않음", - "deviceNotBoundYet": "아직 연결된 기기가 없습니다", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "연결 해제", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -287,6 +729,20 @@ const Map koKR = { "loadMoreMessages": "메시지 더 불러오기...", "loadFailedClickRetry": "불러오기 실패, 클릭하여 재시도", "swipeUpForMore": "더 보려면 위로 스와이프하세요", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': '안녕하세요! 저는 **샤오옌**입니다. 다음과 같은 도움을 드릴 수 있습니다:\n\n' @@ -305,8 +761,8 @@ const Map koKR = { 'startPhoneCallMode': '전화 걸기 모드 시작, 음성 입력 시작', // Agent 全屏编辑器 - 'fullScreenEditorHint': '여기에 메시지를 입력하세요...', - 'characterCount': '{count}자', + 'fullScreenEditorHint': '여기에 메시지를 입력하세요...', // 全屏编辑器输入提示 + 'characterCount': '{count}자', // 字符计数显示 // 消息长按操作 'copy': '복사', @@ -315,6 +771,7 @@ const Map koKR = { 'submitSuccess': '제출 성공', 'submitFailed': '제출 실패', 'reportSubmitted': '신고가 제출되었습니다. 최대한 빨리 처리하겠습니다.', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': '유해/안전하지 않음', 'pornographicVulgar': '음란/저속함', 'misleadingAttack': '오해의 소지가 있는 공격', @@ -323,6 +780,7 @@ const Map koKR = { 'copyrightViolation': '내 저작권, 명예 등을 침해', 'other': '기타', 'reportDescriptionHint': '신고 사유를 알고 싶습니다. 겪으신 문제를 설명해주세요.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'AI가 생성함', @@ -333,15 +791,15 @@ const Map koKR = { 'moreMusic': '더 많은 음악', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': '시간', - 'minutes': '분', - 'seconds': '초', - 'navigating': '경로 안내 중', - 'currentLocation': '현재 위치', - 'approximate': '약', - 'enterRoad': '진입', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': '시간', // 小时单位 + 'minutes': '분', // 分钟单位 + 'seconds': '초', // 秒单位 + 'navigating': '경로 안내 중', // 导航状态 + 'currentLocation': '현재 위치', // 当前位置 + 'approximate': '약', // 大约 + 'enterRoad': '진입', // 进入道路 "driving": "운전", "walking": "도보", "bicycling": "자전거", @@ -368,6 +826,17 @@ const Map koKR = { "friday": "금", "saturday": "토", "sunday": "일", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "맑음", "partlyCloudy": "구름 조금", @@ -402,6 +871,8 @@ const Map koKR = { "logoutTips": "현재 계정에서 로그아웃하시겠습니까?", 'deleteAccount': '계정 삭제', 'deleteAccountTips': '계정을 영구적으로 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': '네트워크 연결 실패, 네트워크 설정을 확인하고 다시 시도하세요', @@ -417,6 +888,8 @@ const Map koKR = { 'serverInternalErrorRetryLater': '서버 내부 오류, 잠시 후 다시 시도하세요', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': '이미지 압축 실패', 'avatarUpdateFailed': '아바타 업데이트 실패', 'usernameCannotBeEmpty': '사용자 이름은 비워둘 수 없습니다', @@ -429,28 +902,39 @@ const Map koKR = { 'deleteAccountFailedRetry': '계정 삭제 실패, 다시 시도하세요', // 账号服务相关 - 'clearUserDataFailed': '사용자 데이터 지우기 실패', - 'deleteUserDataFailed': '사용자 데이터 삭제 실패', - 'thirdPartyLogoutSuccess': '타사 로그인 로그아웃 성공', - 'thirdPartyLogoutFailed': '타사 로그인 로그아웃 실패', - 'signOutProcessError': '로그아웃 과정에서 오류가 발생했습니다', - 'deleteAccountProcessError': '계정 삭제 과정에서 오류가 발생했습니다', - 'userDataClearSuccess': '사용자 데이터 지우기 성공', - 'allUserDataClearSuccess': '모든 사용자 데이터 지우기 성공', - 'accountServiceInitialized': '계정 서비스가 초기화되었습니다', + 'clearUserDataFailed': '사용자 데이터 지우기 실패', // 清理用户数据失败 + 'deleteUserDataFailed': '사용자 데이터 삭제 실패', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': '타사 로그인 로그아웃 성공', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': '타사 로그인 로그아웃 실패', // 第三方登录退出失败 + 'signOutProcessError': '로그아웃 과정에서 오류가 발생했습니다', // 登出过程发生错误 + 'deleteAccountProcessError': '계정 삭제 과정에서 오류가 발생했습니다', // 删除账号过程发生错误 + 'userDataClearSuccess': '사용자 데이터 지우기 성공', // 用户数据清理成功 + 'allUserDataClearSuccess': '모든 사용자 데이터 지우기 성공', // 所有用户数据清理成功 + 'accountServiceInitialized': '계정 서비스가 초기화되었습니다', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': '권한 상태 가져오기 실패', 'communicationPermissions': '통신 권한', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': '캘린더 권한', 'locationPermissions': '위치 권한', 'phone': '전화', 'sms': '문자', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': '캘린더 쓰기', 'calendarFullAccess': '캘린더 전체 액세스', 'locationInfo': '위치 정보', 'phonePermissionDesc': '전화 걸기 기능에 사용됩니다', 'smsPermissionDesc': '문자 보내기 기능에 사용됩니다', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': '캘린더 이벤트 및 알림 생성에 사용됩니다', 'calendarFullAccessPermissionDesc': '캘린더 이벤트 및 알림 읽기 및 관리에 사용됩니다', 'locationPermissionDesc': '현재 위치 정보 가져오기에 사용됩니다', @@ -464,21 +948,84 @@ const Map koKR = { 'permissionRequestError': '권한 요청 중 오류 발생', 'phonePermissionDetailDesc': '전화 걸기 기능에는 전화 권한이 필요합니다', 'smsPermissionDetailDesc': '문자 보내기 기능에는 문자 권한이 필요합니다', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': '캘린더 이벤트 생성에는 캘린더 쓰기 권한이 필요합니다', 'calendarFullAccessPermissionDetailDesc': '캘린더 이벤트 관리에는 전체 캘린더 권한이 필요합니다', 'locationPermissionDetailDesc': '위치 정보 가져오기에는 위치 권한이 필요합니다', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': '앱이 전체 기능을 제공하려면 이 권한이 필요합니다', 'permanentDenialText': '{permission} 권한을 영구적으로 거부하셨습니다. 앱 설정에서 활성화해주세요', 'goToSettings': '설정으로 이동', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': '새 버전 발견', - 'remindLater': '나중에 알림', - 'updateNow': '지금 업데이트', - 'checkUpdate': '업데이트 확인', - 'updateFailed': '업데이트 실패', - 'cannotOpenAppStore': '앱 스토어를 열 수 없습니다. 수동으로 앱 스토어로 이동하여 업데이트하세요', - 'updateErrorRetry': '업데이트 중 오류가 발생했습니다. 잠시 후 다시 시도하세요', + 'newVersionFound': '새 버전 발견', // 版本更新对话框标题 + 'remindLater': '나중에 알림', // 稍后提醒按钮 + 'updateNow': '지금 업데이트', // 立即更新按钮 + 'checkUpdate': '업데이트 확인', // 检查更新按钮 + 'updateFailed': '업데이트 실패', // 更新失败提示 + 'cannotOpenAppStore': + '앱 스토어를 열 수 없습니다. 수동으로 앱 스토어로 이동하여 업데이트하세요', // 无法打开应用商店提示 + 'updateErrorRetry': '업데이트 중 오류가 발생했습니다. 잠시 후 다시 시도하세요', // 更新错误重试提示 //国家列表 "邮箱": "이메일", @@ -587,8 +1134,23 @@ const Map koKR = { "东帝汶": "동티모르", "斐济": "피지", "所罗门群岛": "솔로몬 제도", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "번역 기록", "enableRecording": "녹음 활성화", @@ -597,16 +1159,82 @@ const Map koKR = { "phoneUser": "휴대폰 사용자", "selectSourceLanguage": "원본 언어 선택", "selectTargetLanguage": "대상 언어 선택", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "기록 없음", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "기록 지우기", "clearHistoryConfirm": "모든 번역 기록을 지우시겠습니까? 이 작업은 되돌릴 수 없습니다.", "unknownLanguage": "알 수 없는 언어", "deleteSessionRecord": "세션 기록 삭제", "deleteSessionConfirm": "이 세션의 모든 번역 기록을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "녹음 파일 번역", "noAudioFiles": "오디오 파일 없음", "calculating": "계산 중...", @@ -649,7 +1277,7 @@ const Map koKR = { "autoInputCode": "코드 자동 입력", "skipBinding": "연결 건너뛰기", "rescan": "다시 스캔", - "skip": "건너뛰기", + "verifyingDevice": "기기 확인 중...", "confirmBinding": "연결 확인", "associatingDevice": "기기 연결 중...", @@ -675,11 +1303,16 @@ const Map koKR = { "pairingFailedRetry": "페어링 실패, 다시 시도하세요", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': '블루투스를 활성화해주세요', 'deviceDisconnected': '기기 연결 해제됨', 'readyToStartPairing': '페어링 시작 준비 완료', 'checkingEnvironment': '환경 확인 중...', 'ensureHeadsetOnAndPairingMode': '헤드셋이 켜져 있고 페어링 모드인지 확인하세요', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': '보안 연결 설정 중...', 'needManualBindingAuthCode': '수동 연결 인증 코드가 필요합니다...', 'pairingSuccessful': '페어링 성공!', @@ -699,6 +1332,19 @@ const Map koKR = { 'bleConnectionFailed': 'BLE 연결 실패', 'deviceAuthorizationFailedCheckCode': '기기 인증 실패, 인증 코드를 확인하세요', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "사용자 피드백", 'feedbackInfo': '피드백 또는 제안 제공', @@ -724,6 +1370,13 @@ const Map koKR = { "connectionFailed": "연결 실패", "retryConnection": "연결 재시도", "ota_updateNow": "지금 업데이트", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "기기를 연결된 상태로 유지하고 앱을 닫지 마세요", "doNotDisconnect": "연결을 끊지 마세요", "charging": "충전 중", @@ -731,11 +1384,11 @@ const Map koKR = { "removeEarbudsEnsureBattery": "양쪽 이어버드를 꺼내고 배터리가 모두 20% 이상인지 확인하세요", // 音乐列表页面 - "noMusic": "음악 없음", - "noPlayingMusic": "재생 중인 음악 없음", - "unknownSong": "알 수 없는 노래", - "unknownArtist": "알 수 없는 아티스트", - "playAll": "모두 재생", + "noMusic": "음악 없음", // 暂无音乐 + "noPlayingMusic": "재생 중인 음악 없음", // 暂无播放音乐 + "unknownSong": "알 수 없는 노래", // 未知歌曲 + "unknownArtist": "알 수 없는 아티스트", // 未知歌手 + "playAll": "모두 재생", // 播放全部 // 语言名称 "中文(简体)": "중국어(간체)", @@ -777,93 +1430,23 @@ const Map koKR = { "乌尔都语": "우르두어", "波斯语": "페르시아어", "斯瓦希里语": "스와힐리어", - // Guide overlay keys (placeholders in English) - "sayLilyHint": "Say \"Lily Lily\" to the mic", - "imHere": "I’m here~", - "guideWelcomeWakeAI": "Welcome to Voitrans! First, wake your AI “Lily”.", - "aiReplyCompleted": "Lily has finished the reply!", - "aiThinking": "Lily is thinking…", - "guideAwakenSuccess": "Great! Lily is awake—ask it to help.", - "confirmInput": "Confirm Input", - "guideClickSendPrefix": "Tap send, ", - "guideWeatherStart": "Tell Lily: “What’s the weather today?”", - "guideWeatherInput": "What’s the weather today?", - "guideWeatherSend": "Lily will report the weather in real time", - "guideWeatherEnd": "Lily can report weather live—try other commands", - "guideMusicStart": "Tell Lily: “Play some rock music”", - "guideMusicInput": "Play some rock music", - "guideMusicSend": "Lily will find music for you", - "guideMusicEnd": "Lily found music—try other commands", - "guideNavStart": "Tell Lily: “Navigate to Shenzhen Airport”", - "guideNavInput": "Navigate to Shenzhen Airport", - "guideNavSend": "Lily will plan the route", - "guideNavEnd": "Navigation set—try other commands", - "guideMeetingStart": - "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", - "guideMeetingInput": "Create a meeting reminder for 3pm tomorrow", - "guideMeetingSend": "Lily will create a meeting reminder", - "guideMeetingEnd": "Reminder created—try other commands", - "guidePhoneStart": "Tell Lily: “Call Mom”", - "guidePhoneInput": "Call Mom", - "guidePhoneSend": "Lily will make the call", - "guidePhoneEnd": "Call placed—try other commands", - "guideSmsStart": "Tell Lily: “Send Dad a text: I’ll be home for dinner”", - "guideSmsInput": "Text Dad: I’ll be home for dinner", - "guideSmsSend": "Lily will send the message", - "guideSmsEnd": "Message sent—voice control is convenient", - // Goods pages common footer (placeholders) - 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', - 'copyrightVoitrans': '© 2025 Voitrans Technologies', - // Meeting goods page (placeholders) - 'meetingHeaderDesc1': - 'Audio recording, transcription, keyword search, and auto summary.', - 'meetingHeaderDesc2': - 'Suitable for business meetings, class notes, and interview minutes.', - 'meetingAutoRecording': 'Auto recording and segmentation', - 'meetingSpeakerTagging': 'Speaker labeling', - 'meetingLongAudioTranscription': 'Long audio transcription', - 'meetingKeyPointSummary': 'Key point extraction', - 'meetingTopicNameSearch': 'Search by topic/name', - 'meetingTimelineJump': 'Timeline jump', - 'meetingExportSummary': 'Export minutes', - 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': - 'Use in quiet environments; performance depends on microphone and network.', + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", - // Translation goods page (placeholders) - 'transHeaderDesc1': '실시간 동시통역과 텍스트 번역, 저지연 음성 방송.', - 'transHeaderDesc2': '여행, 비즈니스, 연설, 교육에 적합합니다.', - 'translateZhEn': '중-영 번역', - 'lowLatencyVoiceBroadcast': '저지연 음성 방송', - 'multiLangTextTranslation': '다국어 텍스트 번역', - 'termOptimizationContextPreserve': '용어 최적화 및 문맥 유지', - 'lexiconTourBusinessLife': '여행/비즈니스/일상 용어집', - 'personalVocabularyMemory': '개인 어휘 메모리', - 'conversationSubtitleLargeText': '대화 자막 / 큰 글자 모드', - 'colorHighContrast': '높은 색 대비', - 'transDisclaimer': '번역 품질은 마이크, 네트워크 지연 및 주변 소음에 따라 달라집니다.', - - 'trans_001_name': '번역 기본 100', - 'trans_002_name': '번역 기본 500', - 'trans_003_name': '번역 기본 1000', - - 'trans_001_desc': '번역 100회 포함(음성/텍스트).', - 'trans_002_desc': '번역 500회 포함(음성/텍스트).', - 'trans_003_desc': '번역 1000회 포함(음성/텍스트).', + //补充 + "insufficientIntegral": "Insufficient integral", - // VIP goods page (placeholders) - 'benefitsOverview': '혜택 개요', - 'higherQuota': '더 높은 사용 한도', - 'lowerUnitPrice': '더 낮은 단가', - 'priorityService': '우선 서비스', - 'exclusiveSupportChannel': '전용 지원 채널', - 'fastResponse': '문제 신속 대응', - 'eventsAndDiscounts': '이벤트 및 할인', - 'memberExclusiveEvents': '회원 전용 이벤트', - 'longTermDiscountPlan': '장기 할인 계획', - 'generalPrivileges': '일반 특권', - 'earlyAccessNewFeatures': '신기능 사전 이용', - 'crossDeviceSync': '디바이스 간 동기화', - 'vipDisclaimer': '실제 혜택은 패키지 세부사항에 따라 달라지며 버전에 따라 변경될 수 있습니다.', + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/lt_lt.dart b/lib/core/translations/language/lt_lt.dart index 9bcdaca54..c31f48ef0 100644 --- a/lib/core/translations/language/lt_lt.dart +++ b/lib/core/translations/language/lt_lt.dart @@ -34,6 +34,7 @@ const Map ltLT = { "spanish": "Ispanų", "portuguese": "Portugalų", "traditionalChinese": "Tradicinė kinų", + "traditionalChineseHK": "Tradicinė kinų (Honkongas)", "japanese": "Japonų", "korean": "Korėjiečių", "french": "Prancūzų", @@ -101,12 +102,15 @@ const Map ltLT = { "usePasswordLogin": "Prisijungti su slaptažodžiu", // 隐私政策弹窗 - "loginDeclaration": "Voitrans deklaracija", - "welcomeToThisApp": "Sveiki atvykę į Voitrans, prašome atidžiai perskaityti", + "loginDeclaration": "Voitrans deklaracija", // Voitrans 声明 + "welcomeToThisApp": + "Sveiki atvykę į Voitrans, prašome atidžiai perskaityti", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", paspaudus 'Sutinku ir tęsti' reiškia, kad jūs visiškai perskaitėte ir sutinkate su aukščiau nurodytomis sutartimis. Paspaudus 'Nesutinku' išeisite iš programos.", - "disagree": "Nesutinku", - "agreeAndEnter": "Sutinku ir tęsti", + ", paspaudus 'Sutinku ir tęsti' reiškia, kad jūs visiškai perskaitėte ir sutinkate su aukščiau nurodytomis sutartimis. Paspaudus 'Nesutinku' išeisite iš programos.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Nesutinku", // 不同意 + "agreeAndEnter": "Sutinku ir tęsti", // 同意并进入 // 首页 "deviceStatus": "Įrenginio būsena", @@ -187,6 +191,209 @@ const Map ltLT = { "usageStats": "Naudojimo statistika", "usageStatsInfo": "Peržiūrėkite jūsų naudojimo statistiką", "scene": "Scenarijus", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Praleisti", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Pradėti susitikimą", @@ -201,13 +408,244 @@ const Map ltLT = { 'aiSummary': 'AI santrauka', 'meetingTranscript': 'Susitikimo stenograma', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Sistemos nustatymai", //系统设置 - "vipRecharge": "Premium naryso užsipirkimas", //会员充值 - "aiRecharge": "Premium narys", //AI充值 - "translationRecharge": "Vertimo užsipirkimas", //翻译充值 - "meetingAssistantRecharge": "Susitikimų asistento užsipirkimas", //会议助手充值 - "cloudSync": "Synchronizacijos užsipirkimas", //云端同步 + "systemSettings": "Sistemos nustatymai", + "vipRecharge": "Premium naryso užsipirkimas", + "aiRecharge": "Premium narys", + "translationRecharge": "Vertimo užsipirkimas", + "meetingAssistantRecharge": "Susitikimų asistento užsipirkimas", + "cloudSync": "Synchronizacijos užsipirkimas", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Prijungtas įrenginys:", "accountId": "Paskyros ID:", "systemSetting": "Sistemos nustatymas", @@ -219,8 +657,9 @@ const Map ltLT = { "lastBackup": "Paskutinė atsarginė kopija:", "privacySettings": "Privatumo nustatymai", "privacySettingsInfo": "Valdyti duomenų rinkimą ir leidimus", - "permissionManagement": "Leidimų valdymas", - "permissionManagementInfo": "Valdyti programos leidimų nustatymus", + "permissionManagement": "Leidimų valdymas", // 权限管理 + "permissionManagementInfo": + "Valdyti programos leidimų nustatymus", // 管理应用权限设置 "aboutApplication": "Apie programą", "versions": "Versija", "checkUpdates": "Patikrinti atnaujinimus", @@ -256,11 +695,10 @@ const Map ltLT = { 'networkErrorRetry': 'Tinklo klaida, bandykite dar kartą vėliau', // 设备管理相关 - 'clearPairedDevices': 'Išvalyti susietus įrenginius', - 'clearPairedDevicesConfirm': - 'Ar tikrai norite išvalyti visus susietus įrenginius?', - 'clearPairedDevicesSuccess': 'Susieti įrenginiai sėkmingai išvalyti', - 'clearPairedDevicesFailed': 'Nepavyko išvalyti susietų įrenginių', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Balso pokalbis realiuoju laiku", @@ -269,11 +707,20 @@ const Map ltLT = { "loading": "Įkeliama...", //设备管理页面 - "earphone": "Ausinės", - "voicerecorder": "Diktofonas", - "notBound": "Nesusieta", - "deviceNotBoundYet": "Įrenginys dar nesusietas", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Atsieti", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -303,6 +750,20 @@ const Map ltLT = { "loadFailedClickRetry": "Įkėlimas nepavyko, spustelėkite, kad bandytumėte dar kartą", "swipeUpForMore": "Braukite aukštyn, kad pamatytumėte daugiau", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Sveiki! Aš esu **Lily**, galiu jums padėti:\n\n' @@ -325,8 +786,8 @@ const Map ltLT = { 'startPhoneCallMode': 'Pradėti skambinimo režimą, pradėti balso įvestį', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Įveskite savo žinutę čia...', - 'characterCount': '{count} simbolių', + 'fullScreenEditorHint': 'Įveskite savo žinutę čia...', // 全屏编辑器输入提示 + 'characterCount': '{count} simbolių', // 字符计数显示 // 消息长按操作 'copy': 'Kopijuoti', @@ -335,6 +796,7 @@ const Map ltLT = { 'submitSuccess': 'Sėkmingai pateikta', 'submitFailed': 'Pateikimas nepavyko', 'reportSubmitted': 'Pranešimas pateiktas, mes jį apdorosime kuo greičiau', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Žalingas/Nesaugus', 'pornographicVulgar': 'Pornografinis/Vulgarus', 'misleadingAttack': 'Klaidinantis/Užpuolimas', @@ -344,6 +806,7 @@ const Map ltLT = { 'other': 'Kita', 'reportDescriptionHint': 'Norėtume sužinoti, kodėl pranešate, galite aprašyti problemą, su kuria susidūrėte.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Sugeneruota AI', @@ -354,15 +817,15 @@ const Map ltLT = { 'moreMusic': 'Daugiau muzikos', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'val.', - 'minutes': 'min.', - 'seconds': 'sek.', - 'navigating': 'Naviguojama', - 'currentLocation': 'Dabartinė vieta', - 'approximate': 'Apytiksliai', - 'enterRoad': 'Įvažiuoti į', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'val.', // 小时单位 + 'minutes': 'min.', // 分钟单位 + 'seconds': 'sek.', // 秒单位 + 'navigating': 'Naviguojama', // 导航状态 + 'currentLocation': 'Dabartinė vieta', // 当前位置 + 'approximate': 'Apytiksliai', // 大约 + 'enterRoad': 'Įvažiuoti į', // 进入道路 "driving": "Važiavimas", "walking": "Ėjimas", "bicycling": "Važiavimas dviračiu", @@ -398,6 +861,17 @@ const Map ltLT = { "friday": "Penkt", "saturday": "Šešt", "sunday": "Sekm", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Saulėta", "partlyCloudy": "Mažai debesuota", @@ -433,6 +907,8 @@ const Map ltLT = { 'deleteAccount': 'Ištrinti paskyrą', 'deleteAccountTips': 'Ar tikrai norite visam laikui ištrinti savo paskyrą? Šio veiksmo negalima atšaukti.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -454,6 +930,8 @@ const Map ltLT = { 'Vidinė serverio klaida, bandykite dar kartą vėliau', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Vaizdo suspaudimas nepavyko', 'avatarUpdateFailed': 'Avataro atnaujinimas nepavyko', 'usernameCannotBeEmpty': 'Vartotojo vardas negali būti tuščias', @@ -467,28 +945,44 @@ const Map ltLT = { 'Paskyros ištrynimas nepavyko, bandykite dar kartą', // 账号服务相关 - 'clearUserDataFailed': 'Nepavyko išvalyti vartotojo duomenų', - 'deleteUserDataFailed': 'Nepavyko ištrinti vartotojo duomenų', - 'thirdPartyLogoutSuccess': 'Trečiosios šalies atsijungimas sėkmingas', - 'thirdPartyLogoutFailed': 'Trečiosios šalies atsijungimas nepavyko', - 'signOutProcessError': 'Atsijungimo proceso metu įvyko klaida', - 'deleteAccountProcessError': 'Paskyros ištrynimo proceso metu įvyko klaida', - 'userDataClearSuccess': 'Vartotojo duomenys sėkmingai išvalyti', - 'allUserDataClearSuccess': 'Visi vartotojo duomenys sėkmingai išvalyti', - 'accountServiceInitialized': 'Paskyros paslauga inicijuota', + 'clearUserDataFailed': 'Nepavyko išvalyti vartotojo duomenų', // 清理用户数据失败 + 'deleteUserDataFailed': 'Nepavyko ištrinti vartotojo duomenų', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': + 'Trečiosios šalies atsijungimas sėkmingas', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': + 'Trečiosios šalies atsijungimas nepavyko', // 第三方登录退出失败 + 'signOutProcessError': 'Atsijungimo proceso metu įvyko klaida', // 登出过程发生错误 + 'deleteAccountProcessError': + 'Paskyros ištrynimo proceso metu įvyko klaida', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Vartotojo duomenys sėkmingai išvalyti', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Visi vartotojo duomenys sėkmingai išvalyti', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Paskyros paslauga inicijuota', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Nepavyko gauti leidimo būsenos', 'communicationPermissions': 'Komunikacijos leidimai', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Kalendoriaus leidimai', 'locationPermissions': 'Vietovės leidimai', 'phone': 'Telefonas', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Rašyti į kalendorių', 'calendarFullAccess': 'Visiškas priėjimas prie kalendoriaus', 'locationInfo': 'Vietovės informacija', 'phonePermissionDesc': 'Naudojama skambinimo funkcijai', 'smsPermissionDesc': 'Naudojama SMS siuntimo funkcijai', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Naudojama kuriant kalendoriaus įvykius ir priminimus', 'calendarFullAccessPermissionDesc': @@ -505,28 +999,90 @@ const Map ltLT = { 'phonePermissionDetailDesc': 'Skambinimo funkcijai reikalingas telefono leidimas', 'smsPermissionDetailDesc': 'SMS siuntimo funkcijai reikalingas SMS leidimas', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Kalendoriaus įvykių kūrimui reikalingas rašymo į kalendorių leidimas', 'calendarFullAccessPermissionDetailDesc': 'Kalendoriaus įvykių valdymui reikalingas visiškas kalendoriaus leidimas', 'locationPermissionDetailDesc': 'Vietovės informacijos gavimui reikalingas vietovės leidimas', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Programai reikalingas šis leidimas, kad veiktų visa funkcionalumas', 'permanentDenialText': 'Jūs visam laikui atmetėte {permission} leidimą, eikite į programos nustatymus, kad jį įjungtumėte', 'goToSettings': 'Eiti į nustatymus', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Rasta nauja versija', - 'remindLater': 'Priminti vėliau', - 'updateNow': 'Atnaujinti dabar', - 'checkUpdate': 'Patikrinti atnaujinimą', - 'updateFailed': 'Atnaujinimas nepavyko', + 'newVersionFound': 'Rasta nauja versija', // 版本更新对话框标题 + 'remindLater': 'Priminti vėliau', // 稍后提醒按钮 + 'updateNow': 'Atnaujinti dabar', // 立即更新按钮 + 'checkUpdate': 'Patikrinti atnaujinimą', // 检查更新按钮 + 'updateFailed': 'Atnaujinimas nepavyko', // 更新失败提示 'cannotOpenAppStore': - 'Negalima atidaryti programų parduotuvės, eikite į parduotuvę rankiniu būdu, kad atnaujintumėte', + 'Negalima atidaryti programų parduotuvės, eikite į parduotuvę rankiniu būdu, kad atnaujintumėte', // 无法打开应用商店提示 'updateErrorRetry': - 'Atnaujinimo metu įvyko klaida, bandykite dar kartą vėliau', + 'Atnaujinimo metu įvyko klaida, bandykite dar kartą vėliau', // 更新错误重试提示 //国家列表 "邮箱": "El. paštas", @@ -635,8 +1191,23 @@ const Map ltLT = { "东帝汶": "Rytų Timoras", "斐济": "Fidžis", "所罗门群岛": "Saliamono Salos", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Vertimų istorija", "enableRecording": "Įjungti įrašymą", @@ -645,9 +1216,24 @@ const Map ltLT = { "phoneUser": "Telefono naudotojas", "selectSourceLanguage": "Pasirinkite šaltinio kalbą", "selectTargetLanguage": "Pasirinkite tikslo kalbą", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Dar nėra istorijos", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Išvalyti istoriją", "clearHistoryConfirm": "Ar tikrai norite išvalyti visą vertimų istoriją? Šio veiksmo negalima atšaukti.", @@ -656,7 +1242,58 @@ const Map ltLT = { "deleteSessionConfirm": "Ar tikrai norite ištrinti visus šios sesijos vertimų įrašus? Šio veiksmo negalima atšaukti.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Versti garso failus", "noAudioFiles": "Dar nėra garso failų", "calculating": "Skaičiuojama...", @@ -702,7 +1339,7 @@ const Map ltLT = { "autoInputCode": "Automatinis kodo įvedimas", "skipBinding": "Praleisti susiejimą", "rescan": "Nuskaityti iš naujo", - "skip": "Praleisti", + "verifyingDevice": "Tikrinamas įrenginys...", "confirmBinding": "Patvirtinti susiejimą", "associatingDevice": "Asocijuojamas įrenginys...", @@ -735,12 +1372,17 @@ const Map ltLT = { "pairingFailedRetry": "Susiejimas nepavyko, bandykite dar kartą", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Įjunkite Bluetooth', 'deviceDisconnected': 'Įrenginys atjungtas', 'readyToStartPairing': 'Pasiruošta pradėti susiejimą', 'checkingEnvironment': 'Tikrinama aplinka...', 'ensureHeadsetOnAndPairingMode': 'Įsitikinkite, kad ausinės įjungtos ir yra susiejimo režime', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Kuriama saugi jungtis...', 'needManualBindingAuthCode': 'Reikalingas rankinio susiejimo autorizacijos kodas...', @@ -763,6 +1405,19 @@ const Map ltLT = { 'deviceAuthorizationFailedCheckCode': 'Įrenginio autorizacija nepavyko, patikrinkite autorizacijos kodą', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Vartotojų atsiliepimai", 'feedbackInfo': 'Pateikite atsiliepimą ar pasiūlymą', @@ -792,6 +1447,13 @@ const Map ltLT = { "connectionFailed": "Ryšys nepavyko", "retryConnection": "Bandyti prisijungti dar kartą", "ota_updateNow": "Atnaujinti dabar", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Laikykite įrenginį prijungtą, neuždarykite programos", "doNotDisconnect": "Neatjunkite", @@ -801,11 +1463,11 @@ const Map ltLT = { "Išimkite abi ausines ir įsitikinkite, kad abiejų baterijos lygis yra didesnis nei 20%", // 音乐列表页面 - "noMusic": "Nėra muzikos", - "noPlayingMusic": "Negrojama jokia muzika", - "unknownSong": "Nežinoma daina", - "unknownArtist": "Nežinomas atlikėjas", - "playAll": "Groti viską", + "noMusic": "Nėra muzikos", // 暂无音乐 + "noPlayingMusic": "Negrojama jokia muzika", // 暂无播放音乐 + "unknownSong": "Nežinoma daina", // 未知歌曲 + "unknownArtist": "Nežinomas atlikėjas", // 未知歌手 + "playAll": "Groti viską", // 播放全部 // 语言名称 "中文(简体)": "Kinų (supaprastinta)", @@ -847,4 +1509,23 @@ const Map ltLT = { "乌尔都语": "Urdu", "波斯语": "Persų", "斯瓦希里语": "Svahilių", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/lv_lv.dart b/lib/core/translations/language/lv_lv.dart index 97f316618..cd2a604ec 100644 --- a/lib/core/translations/language/lv_lv.dart +++ b/lib/core/translations/language/lv_lv.dart @@ -33,6 +33,7 @@ const Map lvLV = { "spanish": "Spāņu", "portuguese": "Portugāļu", "traditionalChinese": "Tradicionālā ķīniešu", + "traditionalChineseHK": "Tradicionālā ķīniešu (Honkonga)", "japanese": "Japāņu", "korean": "Korejiešu", "french": "Franču", @@ -100,12 +101,15 @@ const Map lvLV = { "usePasswordLogin": "Pieteikties ar paroli", // 隐私政策弹窗 - "loginDeclaration": "Voitrans deklarācija", - "welcomeToThisApp": "Laipni lūdzam Voitrans, lūdzu, uzmanīgi izlasiet", + "loginDeclaration": "Voitrans deklarācija", // Voitrans 声明 + "welcomeToThisApp": + "Laipni lūdzam Voitrans, lūdzu, uzmanīgi izlasiet", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", noklikšķinot uz 'Piekrītu un ienākt', jūs apliecināt, ka esat pilnībā izlasījis un piekrītat iepriekš minētajiem līgumiem. Noklikšķinot uz 'Nepiekrītu', jūs iziesiet no lietotnes.", - "disagree": "Nepiekrītu", - "agreeAndEnter": "Piekrītu un ienākt", + ", noklikšķinot uz 'Piekrītu un ienākt', jūs apliecināt, ka esat pilnībā izlasījis un piekrītat iepriekš minētajiem līgumiem. Noklikšķinot uz 'Nepiekrītu', jūs iziesiet no lietotnes.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Nepiekrītu", // 不同意 + "agreeAndEnter": "Piekrītu un ienākt", // 同意并进入 // 首页 "deviceStatus": "Ierīces statuss", @@ -186,6 +190,209 @@ const Map lvLV = { "usageStats": "Pārskatījumu statistika", "usageStatsInfo": "Pārskatiet jūsu lietotāja pārskatījumu statistiku", "scene": "Scenārijs", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Izlaist", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Sākt sapulci", @@ -200,13 +407,244 @@ const Map lvLV = { 'aiSummary': 'AI kopsavilkums', 'meetingTranscript': 'Sapulces atšifrējums', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Sistēmas iestatījumi", //系统设置 - "vipRecharge": "Premium biedra pārrakstīšana", //会员充值 - "aiRecharge": "Premium biedrs", //AI充值 - "translationRecharge": "Tulkošanas pārrakstīšana", //翻译充值 - "meetingAssistantRecharge": "Sapulces palīgs pārrakstīšana", //会议助手充值 - "cloudSync": "Tīkla sincronizācijas pārrakstīšana", //云端同步 + "systemSettings": "Sistēmas iestatījumi", + "vipRecharge": "Premium biedra pārrakstīšana", + "aiRecharge": "Premium biedrs", + "translationRecharge": "Tulkošanas pārrakstīšana", + "meetingAssistantRecharge": "Sapulces palīgs pārrakstīšana", + "cloudSync": "Tīkla sincronizācijas pārrakstīšana", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Savienotā ierīce:", "accountId": "Konta ID:", "systemSetting": "Sistēmas iestatījumi", @@ -218,8 +656,9 @@ const Map lvLV = { "lastBackup": "Pēdējā dublēšana:", "privacySettings": "Privātuma iestatījumi", "privacySettingsInfo": "Pārvaldīt datu vākšanu un atļaujas", - "permissionManagement": "Atļauju pārvaldība", - "permissionManagementInfo": "Pārvaldīt lietotnes atļauju iestatījumus", + "permissionManagement": "Atļauju pārvaldība", // 权限管理 + "permissionManagementInfo": + "Pārvaldīt lietotnes atļauju iestatījumus", // 管理应用权限设置 "aboutApplication": "Par lietotni", "versions": "Versija", "checkUpdates": "Pārbaudīt atjauninājumus", @@ -255,11 +694,10 @@ const Map lvLV = { 'networkErrorRetry': 'Tīkla kļūda, lūdzu, mēģiniet vēlreiz vēlāk', // 设备管理相关 - 'clearPairedDevices': 'Notīrīt pārī savienotās ierīces', - 'clearPairedDevicesConfirm': - 'Vai esat pārliecināts, ka vēlaties notīrīt visas pārī savienotās ierīces?', - 'clearPairedDevicesSuccess': 'Pārī savienotās ierīces veiksmīgi notīrītas', - 'clearPairedDevicesFailed': 'Neizdevās notīrīt pārī savienotās ierīces', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Reāllaika balss tērzēšana", @@ -268,11 +706,20 @@ const Map lvLV = { "loading": "Ielādē...", //设备管理页面 - "earphone": "Austiņas", - "voicerecorder": "Diktofons", - "notBound": "Nav saistīts", - "deviceNotBoundYet": "Ierīce vēl nav saistīta", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Atsaistīt", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -302,6 +749,20 @@ const Map lvLV = { "loadFailedClickRetry": "Ielāde neizdevās, noklikšķiniet, lai mēģinātu vēlreiz", "swipeUpForMore": "Velciet uz augšu, lai redzētu vairāk", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Sveiki! Esmu **SjaoJaņ**, es varu jums palīdzēt:\n\n' @@ -324,8 +785,8 @@ const Map lvLV = { 'startPhoneCallMode': 'Sākt zvanīšanas režīmu, sākt balss ievadi', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Ievadiet savu ziņu šeit...', - 'characterCount': '{count} rakstzīmes', + 'fullScreenEditorHint': 'Ievadiet savu ziņu šeit...', // 全屏编辑器输入提示 + 'characterCount': '{count} rakstzīmes', // 字符计数显示 // 消息长按操作 'copy': 'Kopēt', @@ -335,6 +796,7 @@ const Map lvLV = { 'submitFailed': 'Iesniegšana neizdevās', 'reportSubmitted': 'Ziņojums iesniegts, mēs to apstrādāsim pēc iespējas ātrāk', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Kaitīgs/Nedrošs', 'pornographicVulgar': 'Pornogrāfisks/Vulgārs', 'misleadingAttack': 'Maldinošs/Uzbrukums', @@ -344,6 +806,7 @@ const Map lvLV = { 'other': 'Cits', 'reportDescriptionHint': 'Mēs vēlamies zināt, kāpēc jūs ziņojat, jūs varat aprakstīt problēmu, ar kuru saskārāties.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Ģenerējis AI', @@ -354,15 +817,15 @@ const Map lvLV = { 'moreMusic': 'Vairāk mūzikas', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'stundas', - 'minutes': 'minūtes', - 'seconds': 'sekundes', - 'navigating': 'Navigē', - 'currentLocation': 'Pašreizējā atrašanās vieta', - 'approximate': 'Apm.', - 'enterRoad': 'Iebraukt', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'stundas', // 小时单位 + 'minutes': 'minūtes', // 分钟单位 + 'seconds': 'sekundes', // 秒单位 + 'navigating': 'Navigē', // 导航状态 + 'currentLocation': 'Pašreizējā atrašanās vieta', // 当前位置 + 'approximate': 'Apm.', // 大约 + 'enterRoad': 'Iebraukt', // 进入道路 "driving": "Braukšana", "walking": "Iešana", "bicycling": "Riteņbraukšana", @@ -398,6 +861,17 @@ const Map lvLV = { "friday": "Piekt.", "saturday": "Sest.", "sunday": "Svēt.", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Saulains", "partlyCloudy": "Daļēji apmācies", @@ -434,6 +908,8 @@ const Map lvLV = { 'deleteAccount': 'Dzēst kontu', 'deleteAccountTips': 'Vai esat pārliecināts, ka vēlaties neatgriezeniski dzēst savu kontu? Šī darbība nav atgriezeniska.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -455,6 +931,8 @@ const Map lvLV = { 'Iekšēja servera kļūda, lūdzu, mēģiniet vēlreiz vēlāk', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Attēla saspiešana neizdevās', 'avatarUpdateFailed': 'Avatara atjaunināšana neizdevās', 'usernameCannotBeEmpty': 'Lietotājvārds nevar būt tukšs', @@ -468,28 +946,43 @@ const Map lvLV = { 'Konta dzēšana neizdevās, lūdzu, mēģiniet vēlreiz', // 账号服务相关 - 'clearUserDataFailed': 'Neizdevās notīrīt lietotāja datus', - 'deleteUserDataFailed': 'Neizdevās dzēst lietotāja datus', - 'thirdPartyLogoutSuccess': 'Trešās puses izrakstīšanās veiksmīga', - 'thirdPartyLogoutFailed': 'Trešās puses izrakstīšanās neizdevās', - 'signOutProcessError': 'Izrakstīšanās procesā radās kļūda', - 'deleteAccountProcessError': 'Konta dzēšanas procesā radās kļūda', - 'userDataClearSuccess': 'Lietotāja dati veiksmīgi notīrīti', - 'allUserDataClearSuccess': 'Visi lietotāja dati veiksmīgi notīrīti', - 'accountServiceInitialized': 'Konta pakalpojums ir inicializēts', + 'clearUserDataFailed': 'Neizdevās notīrīt lietotāja datus', // 清理用户数据失败 + 'deleteUserDataFailed': 'Neizdevās dzēst lietotāja datus', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': + 'Trešās puses izrakstīšanās veiksmīga', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'Trešās puses izrakstīšanās neizdevās', // 第三方登录退出失败 + 'signOutProcessError': 'Izrakstīšanās procesā radās kļūda', // 登出过程发生错误 + 'deleteAccountProcessError': + 'Konta dzēšanas procesā radās kļūda', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Lietotāja dati veiksmīgi notīrīti', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Visi lietotāja dati veiksmīgi notīrīti', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Konta pakalpojums ir inicializēts', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Neizdevās iegūt atļaujas statusu', 'communicationPermissions': 'Komunikācijas atļaujas', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Kalendāra atļaujas', 'locationPermissions': 'Atrašanās vietas atļaujas', 'phone': 'Tālrunis', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Rakstīt kalendārā', 'calendarFullAccess': 'Pilna piekļuve kalendāram', 'locationInfo': 'Atrašanās vietas informācija', 'phonePermissionDesc': 'Izmanto zvanīšanas funkcijai', 'smsPermissionDesc': 'Izmanto SMS sūtīšanas funkcijai', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Izmanto kalendāra notikumu un atgādinājumu izveidei', 'calendarFullAccessPermissionDesc': @@ -507,28 +1000,90 @@ const Map lvLV = { 'phonePermissionDetailDesc': 'Zvanīšanas funkcijai nepieciešama tālruņa atļauja', 'smsPermissionDetailDesc': 'SMS sūtīšanas funkcijai nepieciešama SMS atļauja', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Kalendāra notikumu izveidei nepieciešama kalendāra rakstīšanas atļauja', 'calendarFullAccessPermissionDetailDesc': 'Kalendāra notikumu pārvaldībai nepieciešama pilna kalendāra atļauja', 'locationPermissionDetailDesc': 'Atrašanās vietas informācijas iegūšanai nepieciešama atrašanās vietas atļauja', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Lietotnei ir nepieciešama šī atļauja pilnai funkcionalitātei', 'permanentDenialText': 'Jūs esat neatgriezeniski atteicis {permission} atļauju, lūdzu, dodieties uz lietotnes iestatījumiem, lai to iespējotu', 'goToSettings': 'Doties uz iestatījumiem', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Atrasta jauna versija', - 'remindLater': 'Atgādināt vēlāk', - 'updateNow': 'Atjaunināt tagad', - 'checkUpdate': 'Pārbaudīt atjauninājumu', - 'updateFailed': 'Atjaunināšana neizdevās', + 'newVersionFound': 'Atrasta jauna versija', // 版本更新对话框标题 + 'remindLater': 'Atgādināt vēlāk', // 稍后提醒按钮 + 'updateNow': 'Atjaunināt tagad', // 立即更新按钮 + 'checkUpdate': 'Pārbaudīt atjauninājumu', // 检查更新按钮 + 'updateFailed': 'Atjaunināšana neizdevās', // 更新失败提示 'cannotOpenAppStore': - 'Nevar atvērt lietotņu veikalu, lūdzu, dodieties uz lietotņu veikalu manuāli, lai atjauninātu', + 'Nevar atvērt lietotņu veikalu, lūdzu, dodieties uz lietotņu veikalu manuāli, lai atjauninātu', // 无法打开应用商店提示 'updateErrorRetry': - 'Atjaunināšanas laikā radās kļūda, lūdzu, mēģiniet vēlreiz vēlāk', + 'Atjaunināšanas laikā radās kļūda, lūdzu, mēģiniet vēlreiz vēlāk', // 更新错误重试提示 //国家列表 "邮箱": "E-pasts", @@ -637,8 +1192,23 @@ const Map lvLV = { "东帝汶": "Austrumtimora", "斐济": "Fidži", "所罗门群岛": "Zālamana Salas", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Tulkošanas vēsture", "enableRecording": "Iespējot ierakstīšanu", @@ -647,9 +1217,24 @@ const Map lvLV = { "phoneUser": "Tālruņa lietotājs", "selectSourceLanguage": "Izvēlēties avota valodu", "selectTargetLanguage": "Izvēlēties mērķa valodu", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Vēl nav vēstures", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Notīrīt vēsturi", "clearHistoryConfirm": "Vai esat pārliecināts, ka vēlaties notīrīt visu tulkošanas vēsturi? Šī darbība nav atgriezeniska.", @@ -658,7 +1243,58 @@ const Map lvLV = { "deleteSessionConfirm": "Vai esat pārliecināts, ka vēlaties dzēst visus šīs sesijas tulkošanas ierakstus? Šī darbība nav atgriezeniska.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Tulkot audio failus", "noAudioFiles": "Vēl nav audio failu", "calculating": "Aprēķina...", @@ -704,7 +1340,7 @@ const Map lvLV = { "autoInputCode": "Automātiska koda ievade", "skipBinding": "Izlaist saistīšanu", "rescan": "Skenēt vēlreiz", - "skip": "Izlaist", + "verifyingDevice": "Pārbauda ierīci...", "confirmBinding": "Apstiprināt saistīšanu", "associatingDevice": "Asociē ierīci...", @@ -736,12 +1372,17 @@ const Map lvLV = { "pairingFailedRetry": "Savienošana pārī neizdevās, lūdzu, mēģiniet vēlreiz", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Lūdzu, iespējojiet Bluetooth', 'deviceDisconnected': 'Ierīce atvienota', 'readyToStartPairing': 'Gatavs sākt savienošanu pārī', 'checkingEnvironment': 'Pārbauda vidi...', 'ensureHeadsetOnAndPairingMode': 'Lūdzu, pārliecinieties, ka austiņas ir ieslēgtas un savienošanas pārī režīmā', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Izveido drošu savienojumu...', 'needManualBindingAuthCode': 'Nepieciešams manuālas saistīšanas autorizācijas kods...', @@ -765,6 +1406,19 @@ const Map lvLV = { 'deviceAuthorizationFailedCheckCode': 'Ierīces autorizācija neizdevās, lūdzu, pārbaudiet autorizācijas kodu', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Lietotāju atsauksmes", 'feedbackInfo': 'Sniedziet atsauksmes vai ieteikumus', @@ -794,6 +1448,13 @@ const Map lvLV = { "connectionFailed": "Savienojums neizdevās", "retryConnection": "Mēģināt savienot vēlreiz", "ota_updateNow": "Atjaunināt tagad", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Turiet ierīci savienotu, neaizveriet lietotni", "doNotDisconnect": "Neatvienojiet", "charging": "Uzlādējas", @@ -802,11 +1463,11 @@ const Map lvLV = { "Izņemiet abas austiņas un pārliecinieties, ka abu baterijas līmenis ir virs 20%", // 音乐列表页面 - "noMusic": "Nav mūzikas", - "noPlayingMusic": "Netiek atskaņota mūzika", - "unknownSong": "Nezināma dziesma", - "unknownArtist": "Nezināms izpildītājs", - "playAll": "Atskaņot visu", + "noMusic": "Nav mūzikas", // 暂无音乐 + "noPlayingMusic": "Netiek atskaņota mūzika", // 暂无播放音乐 + "unknownSong": "Nezināma dziesma", // 未知歌曲 + "unknownArtist": "Nezināms izpildītājs", // 未知歌手 + "playAll": "Atskaņot visu", // 播放全部 // 语言名称 "中文(简体)": "Ķīniešu (vienkāršotā)", @@ -848,4 +1509,23 @@ const Map lvLV = { "乌尔都语": "Urdu", "波斯语": "Persiešu", "斯瓦希里语": "Svahili", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/ms_my.dart b/lib/core/translations/language/ms_my.dart index e1b998b45..8ec840b47 100644 --- a/lib/core/translations/language/ms_my.dart +++ b/lib/core/translations/language/ms_my.dart @@ -33,6 +33,7 @@ const Map msMY = { "spanish": "Bahasa Sepanyol", "portuguese": "Bahasa Portugis", "traditionalChinese": "Bahasa Cina Tradisional", + "traditionalChineseHK": "Cina Tradisional (Hong Kong)", "japanese": "Bahasa Jepun", "korean": "Bahasa Korea", "french": "Bahasa Perancis", @@ -100,12 +101,15 @@ const Map msMY = { "usePasswordLogin": "Log masuk dengan kata laluan", // 隐私政策弹窗 - "loginDeclaration": "Pengisytiharan Voitrans", - "welcomeToThisApp": "Selamat datang ke Voitrans, sila baca dengan teliti", + "loginDeclaration": "Pengisytiharan Voitrans", // Voitrans 声明 + "welcomeToThisApp": + "Selamat datang ke Voitrans, sila baca dengan teliti", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", dengan mengklik 'Setuju dan Masuk' bermakna anda telah membaca sepenuhnya dan bersetuju dengan perjanjian di atas. Mengklik 'Tidak Setuju' akan keluar dari aplikasi.", - "disagree": "Tidak Setuju", - "agreeAndEnter": "Setuju dan Masuk", + ", dengan mengklik 'Setuju dan Masuk' bermakna anda telah membaca sepenuhnya dan bersetuju dengan perjanjian di atas. Mengklik 'Tidak Setuju' akan keluar dari aplikasi.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Tidak Setuju", // 不同意 + "agreeAndEnter": "Setuju dan Masuk", // 同意并进入 // 首页 "deviceStatus": "Status Peranti", @@ -185,6 +189,209 @@ const Map msMY = { "usageStats": "Statistik Penggunaan", "usageStatsInfo": "Lihat statistik penggunaan aplikasi", "scene": "Senario", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Langkau", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Mula Mesyuarat", @@ -199,13 +406,244 @@ const Map msMY = { 'aiSummary': 'Ringkasan AI', 'meetingTranscript': 'Transkrip Mesyuarat', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Tetapan Sistem", //系统设置 - "vipRecharge": "Pembayaran Ahli Premium", //会员充值 - "aiRecharge": "Ahli Premium", //AI充值 - "translationRecharge": "Pembayaran Penterjemahan", //翻译充值 - "meetingAssistantRecharge": "Pembayaran Pembantu Mesyuarat", //会议助手充值 - "cloudSync": "Pembayaran Sinkronisasi awan", //云端同步 + "systemSettings": "Tetapan Sistem", + "vipRecharge": "Pembayaran Ahli Premium", + "aiRecharge": "Ahli Premium", + "translationRecharge": "Pembayaran Penterjemahan", + "meetingAssistantRecharge": "Pembayaran Pembantu Mesyuarat", + "cloudSync": "Pembayaran Sinkronisasi awan", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Peranti disambungkan:", "accountId": "ID Akaun:", "systemSetting": "Tetapan Sistem", @@ -217,8 +655,8 @@ const Map msMY = { "lastBackup": "Sandaran terakhir:", "privacySettings": "Tetapan Privasi", "privacySettingsInfo": "Urus pengumpulan data dan kebenaran", - "permissionManagement": "Pengurusan Kebenaran", - "permissionManagementInfo": "Urus tetapan kebenaran aplikasi", + "permissionManagement": "Pengurusan Kebenaran", // 权限管理 + "permissionManagementInfo": "Urus tetapan kebenaran aplikasi", // 管理应用权限设置 "aboutApplication": "Mengenai Aplikasi", "versions": "Versi", "checkUpdates": "Semak Kemas Kini", @@ -253,11 +691,10 @@ const Map msMY = { 'networkErrorRetry': 'Ralat rangkaian, sila cuba lagi nanti', // 设备管理相关 - 'clearPairedDevices': 'Kosongkan Peranti Dipasangkan', - 'clearPairedDevicesConfirm': - 'Adakah anda pasti mahu mengosongkan semua peranti yang dipasangkan?', - 'clearPairedDevicesSuccess': 'Berjaya mengosongkan peranti yang dipasangkan', - 'clearPairedDevicesFailed': 'Gagal mengosongkan peranti yang dipasangkan', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Sembang Suara Masa Nyata", @@ -266,11 +703,20 @@ const Map msMY = { "loading": "Memuatkan...", //设备管理页面 - "earphone": "Fon Telinga", - "voicerecorder": "Perakam Suara", - "notBound": "Tidak Diikat", - "deviceNotBoundYet": "Belum ada peranti yang diikat", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Nyahikat", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -299,6 +745,20 @@ const Map msMY = { "loadMoreMessages": "Muatkan lebih banyak mesej...", "loadFailedClickRetry": "Gagal memuatkan, klik untuk cuba lagi", "swipeUpForMore": "Leret ke atas untuk lebih banyak", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Helo! Saya **Lily**, saya boleh bantu anda:\n\n' @@ -321,8 +781,8 @@ const Map msMY = { 'startPhoneCallMode': 'Mula mod panggilan telefon, mula input suara', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Masukkan mesej anda di sini...', - 'characterCount': '{count} aksara', + 'fullScreenEditorHint': 'Masukkan mesej anda di sini...', // 全屏编辑器输入提示 + 'characterCount': '{count} aksara', // 字符计数显示 // 消息长按操作 'copy': 'Salin', @@ -332,6 +792,7 @@ const Map msMY = { 'submitFailed': 'Gagal dihantar', 'reportSubmitted': 'Laporan telah dihantar, kami akan memprosesnya secepat mungkin', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Berbahaya/Tidak Selamat', 'pornographicVulgar': 'Pornografi/Lucah', 'misleadingAttack': 'Mengelirukan/Serangan', @@ -341,6 +802,7 @@ const Map msMY = { 'other': 'Lain-lain', 'reportDescriptionHint': 'Kami ingin tahu sebab anda melaporkan, anda boleh menerangkan masalah yang anda hadapi.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Dihasilkan oleh AI', @@ -351,15 +813,15 @@ const Map msMY = { 'moreMusic': 'Lagi Muzik', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'jam', - 'minutes': 'minit', - 'seconds': 'saat', - 'navigating': 'Menavigasi', - 'currentLocation': 'Lokasi Semasa', - 'approximate': 'Anggaran', - 'enterRoad': 'Masuk jalan', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'jam', // 小时单位 + 'minutes': 'minit', // 分钟单位 + 'seconds': 'saat', // 秒单位 + 'navigating': 'Menavigasi', // 导航状态 + 'currentLocation': 'Lokasi Semasa', // 当前位置 + 'approximate': 'Anggaran', // 大约 + 'enterRoad': 'Masuk jalan', // 进入道路 "driving": "Memandu", "walking": "Berjalan", "bicycling": "Berbasikal", @@ -395,6 +857,17 @@ const Map msMY = { "friday": "Jumaat", "saturday": "Sabtu", "sunday": "Ahad", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Cerah", "partlyCloudy": "Separuh Berawan", @@ -430,6 +903,8 @@ const Map msMY = { 'deleteAccount': 'Padam Akaun', 'deleteAccountTips': 'Adakah anda pasti mahu memadam akaun anda secara kekal? Tindakan ini tidak boleh dibatalkan', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -452,6 +927,8 @@ const Map msMY = { 'Ralat dalaman pelayan, sila cuba lagi nanti', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Mampatan imej gagal', 'avatarUpdateFailed': 'Kemas kini avatar gagal', 'usernameCannotBeEmpty': 'Nama pengguna tidak boleh kosong', @@ -464,28 +941,42 @@ const Map msMY = { 'deleteAccountFailedRetry': 'Gagal memadam akaun, sila cuba lagi', // 账号服务相关 - 'clearUserDataFailed': 'Gagal mengosongkan data pengguna', - 'deleteUserDataFailed': 'Gagal memadam data pengguna', - 'thirdPartyLogoutSuccess': 'Log keluar pihak ketiga berjaya', - 'thirdPartyLogoutFailed': 'Log keluar pihak ketiga gagal', - 'signOutProcessError': 'Berlaku ralat semasa proses log keluar', - 'deleteAccountProcessError': 'Berlaku ralat semasa proses pemadaman akaun', - 'userDataClearSuccess': 'Data pengguna berjaya dikosongkan', - 'allUserDataClearSuccess': 'Semua data pengguna berjaya dikosongkan', - 'accountServiceInitialized': 'Perkhidmatan Akaun telah dimulakan', + 'clearUserDataFailed': 'Gagal mengosongkan data pengguna', // 清理用户数据失败 + 'deleteUserDataFailed': 'Gagal memadam data pengguna', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': 'Log keluar pihak ketiga berjaya', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'Log keluar pihak ketiga gagal', // 第三方登录退出失败 + 'signOutProcessError': 'Berlaku ralat semasa proses log keluar', // 登出过程发生错误 + 'deleteAccountProcessError': + 'Berlaku ralat semasa proses pemadaman akaun', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Data pengguna berjaya dikosongkan', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Semua data pengguna berjaya dikosongkan', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Perkhidmatan Akaun telah dimulakan', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Gagal mendapatkan status kebenaran', 'communicationPermissions': 'Kebenaran Komunikasi', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Kebenaran Kalendar', 'locationPermissions': 'Kebenaran Lokasi', 'phone': 'Telefon', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Tulis Kalendar', 'calendarFullAccess': 'Akses Penuh Kalendar', 'locationInfo': 'Maklumat Lokasi', 'phonePermissionDesc': 'Digunakan untuk fungsi membuat panggilan', 'smsPermissionDesc': 'Digunakan untuk fungsi menghantar SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Digunakan untuk membuat acara kalendar dan peringatan', 'calendarFullAccessPermissionDesc': @@ -502,27 +993,90 @@ const Map msMY = { 'permissionRequestError': 'Ralat semasa meminta kebenaran', 'phonePermissionDetailDesc': 'Fungsi panggilan memerlukan kebenaran telefon', 'smsPermissionDetailDesc': 'Fungsi menghantar SMS memerlukan kebenaran SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Membuat acara kalendar memerlukan kebenaran menulis kalendar', 'calendarFullAccessPermissionDetailDesc': 'Mengurus acara kalendar memerlukan kebenaran penuh kalendar', 'locationPermissionDetailDesc': 'Mendapatkan maklumat lokasi memerlukan kebenaran lokasi', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Aplikasi memerlukan kebenaran ini untuk fungsi penuh', 'permanentDenialText': 'Anda telah menafikan kebenaran {permission} secara kekal, sila pergi ke tetapan aplikasi untuk mendayakannya', 'goToSettings': 'Pergi ke Tetapan', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Versi Baharu Ditemui', - 'remindLater': 'Ingatkan Kemudian', - 'updateNow': 'Kemas Kini Sekarang', - 'checkUpdate': 'Semak Kemas Kini', - 'updateFailed': 'Kemas Kini Gagal', + 'newVersionFound': 'Versi Baharu Ditemui', // 版本更新对话框标题 + 'remindLater': 'Ingatkan Kemudian', // 稍后提醒按钮 + 'updateNow': 'Kemas Kini Sekarang', // 立即更新按钮 + 'checkUpdate': 'Semak Kemas Kini', // 检查更新按钮 + 'updateFailed': 'Kemas Kini Gagal', // 更新失败提示 'cannotOpenAppStore': - 'Tidak dapat membuka gedung aplikasi, sila pergi ke gedung aplikasi secara manual untuk mengemas kini', - 'updateErrorRetry': 'Berlaku ralat semasa kemas kini, sila cuba lagi nanti', + 'Tidak dapat membuka gedung aplikasi, sila pergi ke gedung aplikasi secara manual untuk mengemas kini', // 无法打开应用商店提示 + 'updateErrorRetry': + 'Berlaku ralat semasa kemas kini, sila cuba lagi nanti', // 更新错误重试提示 //国家列表 "邮箱": "E-mel", @@ -631,8 +1185,23 @@ const Map msMY = { "东帝汶": "Timor-Leste", "斐济": "Fiji", "所罗门群岛": "Solomon Islands", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Sejarah Terjemahan", "enableRecording": "Dayakan Rakaman", @@ -641,9 +1210,24 @@ const Map msMY = { "phoneUser": "Pengguna Telefon", "selectSourceLanguage": "Pilih bahasa sumber", "selectTargetLanguage": "Pilih bahasa sasaran", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Tiada sejarah lagi", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Kosongkan Sejarah", "clearHistoryConfirm": "Adakah anda pasti mahu mengosongkan semua sejarah terjemahan? Tindakan ini tidak boleh dibatalkan.", @@ -652,7 +1236,58 @@ const Map msMY = { "deleteSessionConfirm": "Adakah anda pasti mahu memadam semua rekod terjemahan untuk sesi ini? Tindakan ini tidak boleh dibatalkan.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Terjemah Fail Audio", "noAudioFiles": "Tiada fail audio lagi", "calculating": "Mengira...", @@ -697,7 +1332,7 @@ const Map msMY = { "autoInputCode": "Masukkan kod secara automatik", "skipBinding": "Langkau Pengikatan", "rescan": "Imbas Semula", - "skip": "Langkau", + "verifyingDevice": "Mengesahkan peranti...", "confirmBinding": "Sahkan Pengikatan", "associatingDevice": "Mengaitkan peranti...", @@ -729,12 +1364,17 @@ const Map msMY = { "pairingFailedRetry": "Pemasangan gagal, sila cuba lagi", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Sila dayakan Bluetooth', 'deviceDisconnected': 'Peranti diputuskan sambungan', 'readyToStartPairing': 'Sedia untuk memulakan pemasangan', 'checkingEnvironment': 'Menyemak persekitaran...', 'ensureHeadsetOnAndPairingMode': 'Sila pastikan fon kepala dihidupkan dan dalam mod pemasangan', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Mewujudkan sambungan selamat...', 'needManualBindingAuthCode': 'Kod kebenaran pengikatan manual diperlukan...', 'pairingSuccessful': 'Pemasangan berjaya!', @@ -755,6 +1395,19 @@ const Map msMY = { 'deviceAuthorizationFailedCheckCode': 'Kebenaran peranti gagal, sila semak kod kebenaran', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Maklum Balas Pengguna", 'feedbackInfo': 'Berikan maklum balas atau cadangan', @@ -783,6 +1436,13 @@ const Map msMY = { "connectionFailed": "Sambungan Gagal", "retryConnection": "Cuba Sambung Semula", "ota_updateNow": "Kemas Kini Sekarang", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Pastikan peranti sentiasa bersambung, jangan tutup aplikasi", "doNotDisconnect": "Jangan putuskan sambungan", @@ -792,11 +1452,11 @@ const Map msMY = { "Keluarkan kedua-dua fon telinga, dan pastikan bateri kedua-duanya melebihi 20%", // 音乐列表页面 - "noMusic": "Tiada Muzik", - "noPlayingMusic": "Tiada muzik dimainkan", - "unknownSong": "Lagu Tidak Diketahui", - "unknownArtist": "Artis Tidak Diketahui", - "playAll": "Main Semua", + "noMusic": "Tiada Muzik", // 暂无音乐 + "noPlayingMusic": "Tiada muzik dimainkan", // 暂无播放音乐 + "unknownSong": "Lagu Tidak Diketahui", // 未知歌曲 + "unknownArtist": "Artis Tidak Diketahui", // 未知歌手 + "playAll": "Main Semua", // 播放全部 // 语言名称 "中文(简体)": "Bahasa Cina (Ringkas)", @@ -838,4 +1498,23 @@ const Map msMY = { "乌尔都语": "Bahasa Urdu", "波斯语": "Bahasa Parsi", "斯瓦希里语": "Bahasa Swahili", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/nb_no.dart b/lib/core/translations/language/nb_no.dart index cc35187fb..b83d3bdd0 100644 --- a/lib/core/translations/language/nb_no.dart +++ b/lib/core/translations/language/nb_no.dart @@ -33,6 +33,7 @@ const Map nbNO = { "spanish": "Spansk", "portuguese": "Portugisisk", "traditionalChinese": "Tradisjonell kinesisk", + "traditionalChineseHK": "Tradisjonell kinesisk (Hongkong)", "japanese": "Japansk", "korean": "Koreansk", "french": "Fransk", @@ -99,12 +100,15 @@ const Map nbNO = { "usePasswordLogin": "Logg inn med passord", // 隐私政策弹窗 - "loginDeclaration": "Voitrans-erklæring", - "welcomeToThisApp": "Velkommen til Voitrans, vennligst les nøye", + "loginDeclaration": "Voitrans-erklæring", // Voitrans 声明 + "welcomeToThisApp": + "Velkommen til Voitrans, vennligst les nøye", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", ved å klikke 'Godta og gå inn' bekrefter du at du har lest og godtar de ovennevnte avtalene. Ved å klikke 'Avslå' vil du avslutte applikasjonen.", - "disagree": "Avslå", - "agreeAndEnter": "Godta og gå inn", + ", ved å klikke 'Godta og gå inn' bekrefter du at du har lest og godtar de ovennevnte avtalene. Ved å klikke 'Avslå' vil du avslutte applikasjonen.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Avslå", // 不同意 + "agreeAndEnter": "Godta og gå inn", // 同意并进入 // 首页 "deviceStatus": "Enhetsstatus", @@ -185,6 +189,209 @@ const Map nbNO = { "usageStats": "Brukstatistikk", "usageStatsInfo": "Vis brukstatistikk for din app", "scene": "Scenario", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Hopp over", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Start møte", @@ -199,13 +406,244 @@ const Map nbNO = { 'aiSummary': 'AI-sammendrag', 'meetingTranscript': 'Møtetranskripsjon', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Systeminnstillinger", //系统设置 - "vipRecharge": "Premium-medlemsinnskudd", //会员充值 - "aiRecharge": "Premium-medlem", //AI充值 - "translationRecharge": "Oversettelsespenger", //翻译充值 - "meetingAssistantRecharge": "Møteassistentpenger", //会议助手充值 - "cloudSync": "Cloud-synchroniseringspenger", //云端同步 + "systemSettings": "Systeminnstillinger", + "vipRecharge": "Premium-medlemsinnskudd", + "aiRecharge": "Premium-medlem", + "translationRecharge": "Oversettelsespenger", + "meetingAssistantRecharge": "Møteassistentpenger", + "cloudSync": "Cloud-synchroniseringspenger", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Tilkoblet enhet:", "accountId": "Konto-ID:", "systemSetting": "Systeminnstillinger", @@ -217,8 +655,9 @@ const Map nbNO = { "lastBackup": "Siste sikkerhetskopi:", "privacySettings": "Personverninnstillinger", "privacySettingsInfo": "Administrer datainnsamling og tillatelser", - "permissionManagement": "Tillatelsesadministrasjon", - "permissionManagementInfo": "Administrer innstillinger for app-tillatelser", + "permissionManagement": "Tillatelsesadministrasjon", // 权限管理 + "permissionManagementInfo": + "Administrer innstillinger for app-tillatelser", // 管理应用权限设置 "aboutApplication": "Om appen", "versions": "Versjon", "checkUpdates": "Se etter oppdateringer", @@ -254,11 +693,10 @@ const Map nbNO = { 'networkErrorRetry': 'Nettverksfeil, prøv igjen senere', // 设备管理相关 - 'clearPairedDevices': 'Fjern parede enheter', - 'clearPairedDevicesConfirm': - 'Er du sikker på at du vil fjerne alle parede enheter?', - 'clearPairedDevicesSuccess': 'Parede enheter fjernet', - 'clearPairedDevicesFailed': 'Fjerning av parede enheter mislyktes', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Sanntids talechat", @@ -267,11 +705,20 @@ const Map nbNO = { "loading": "Laster inn...", //设备管理页面 - "earphone": "Ørepropper", - "voicerecorder": "Lydopptaker", - "notBound": "Ikke bundet", - "deviceNotBoundYet": "Enheten er ikke bundet ennå", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Fjern binding", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -301,6 +748,20 @@ const Map nbNO = { "loadMoreMessages": "Last inn flere meldinger...", "loadFailedClickRetry": "Innlasting mislyktes, klikk for å prøve igjen", "swipeUpForMore": "Sveip opp for mer", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Hei! Jeg er **Lily**, jeg kan hjelpe deg med:\n\n' @@ -323,8 +784,8 @@ const Map nbNO = { 'startPhoneCallMode': 'Start anropsmodus, start taleinndata', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Skriv meldingen din her...', - 'characterCount': '{count} tegn', + 'fullScreenEditorHint': 'Skriv meldingen din her...', // 全屏编辑器输入提示 + 'characterCount': '{count} tegn', // 字符计数显示 // 消息长按操作 'copy': 'Kopier', @@ -333,6 +794,7 @@ const Map nbNO = { 'submitSuccess': 'Sendt inn', 'submitFailed': 'Innsending mislyktes', 'reportSubmitted': 'Rapport sendt, vi vil behandle den så snart som mulig', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Skadelig/Usikker', 'pornographicVulgar': 'Pornografisk/Vulgær', 'misleadingAttack': 'Villedende/Angrep', @@ -342,6 +804,7 @@ const Map nbNO = { 'other': 'Annet', 'reportDescriptionHint': 'Vi vil gjerne vite hvorfor du rapporterer, du kan beskrive problemet du opplevde.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Generert av AI', @@ -352,15 +815,15 @@ const Map nbNO = { 'moreMusic': 'Mer musikk', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'timer', - 'minutes': 'minutter', - 'seconds': 'sekunder', - 'navigating': 'Navigerer', - 'currentLocation': 'Nåværende posisjon', - 'approximate': 'Omtrent', - 'enterRoad': 'Kjør inn på', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'timer', // 小时单位 + 'minutes': 'minutter', // 分钟单位 + 'seconds': 'sekunder', // 秒单位 + 'navigating': 'Navigerer', // 导航状态 + 'currentLocation': 'Nåværende posisjon', // 当前位置 + 'approximate': 'Omtrent', // 大约 + 'enterRoad': 'Kjør inn på', // 进入道路 "driving": 'Kjøring', "walking": 'Gåing', "bicycling": 'Sykling', @@ -396,6 +859,17 @@ const Map nbNO = { "friday": "Fre", "saturday": "Lør", "sunday": "Søn", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Sol", "partlyCloudy": "Delvis skyet", @@ -431,6 +905,8 @@ const Map nbNO = { 'deleteAccount': 'Slett konto', 'deleteAccountTips': 'Er du sikker på at du vil slette kontoen din permanent? Denne handlingen kan ikke angres.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -452,6 +928,8 @@ const Map nbNO = { 'serverInternalErrorRetryLater': 'Intern serverfeil, prøv igjen senere', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Bildekomprimering mislyktes', 'avatarUpdateFailed': 'Avatar-oppdatering mislyktes', 'usernameCannotBeEmpty': 'Brukernavn kan ikke være tomt', @@ -464,28 +942,41 @@ const Map nbNO = { 'deleteAccountFailedRetry': 'Sletting av konto mislyktes, prøv igjen', // 账号服务相关 - 'clearUserDataFailed': 'Fjerning av brukerdata mislyktes', - 'deleteUserDataFailed': 'Sletting av brukerdata mislyktes', - 'thirdPartyLogoutSuccess': 'Utlogging fra tredjepart vellykket', - 'thirdPartyLogoutFailed': 'Utlogging fra tredjepart mislyktes', - 'signOutProcessError': 'Det oppstod en feil under utloggingen', - 'deleteAccountProcessError': 'Det oppstod en feil under sletting av kontoen', - 'userDataClearSuccess': 'Brukerdata fjernet', - 'allUserDataClearSuccess': 'Alle brukerdata fjernet', - 'accountServiceInitialized': 'Kontotjenesten er initialisert', + 'clearUserDataFailed': 'Fjerning av brukerdata mislyktes', // 清理用户数据失败 + 'deleteUserDataFailed': 'Sletting av brukerdata mislyktes', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': 'Utlogging fra tredjepart vellykket', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'Utlogging fra tredjepart mislyktes', // 第三方登录退出失败 + 'signOutProcessError': 'Det oppstod en feil under utloggingen', // 登出过程发生错误 + 'deleteAccountProcessError': + 'Det oppstod en feil under sletting av kontoen', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Brukerdata fjernet', // 用户数据清理成功 + 'allUserDataClearSuccess': 'Alle brukerdata fjernet', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Kontotjenesten er initialisert', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Henting av tillatelsesstatus mislyktes', 'communicationPermissions': 'Kommunikasjonstillatelser', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Kalendertillatelser', 'locationPermissions': 'Posisjonstillatelser', 'phone': 'Telefon', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Skriv til kalender', 'calendarFullAccess': 'Full tilgang til kalender', 'locationInfo': 'Posisjonsinformasjon', 'phonePermissionDesc': 'Brukes for å ringe', 'smsPermissionDesc': 'Brukes for å sende SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Brukes for å opprette kalenderhendelser og påminnelser', 'calendarFullAccessPermissionDesc': @@ -501,28 +992,90 @@ const Map nbNO = { 'permissionRequestError': 'Feil ved forespørsel om tillatelse', 'phonePermissionDetailDesc': 'Ringefunksjonen krever telefontillatelse', 'smsPermissionDetailDesc': 'Send SMS-funksjonen krever SMS-tillatelse', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Å opprette kalenderhendelser krever skrivetilgang til kalenderen', 'calendarFullAccessPermissionDetailDesc': 'Å administrere kalenderhendelser krever full tilgang til kalenderen', 'locationPermissionDetailDesc': 'Å hente posisjonsinformasjon krever posisjonstillatelse', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Appen trenger denne tillatelsen for full funksjonalitet', 'permanentDenialText': 'Du har permanent nektet {permission}-tillatelse, gå til appinnstillingene for å aktivere den', 'goToSettings': 'Gå til innstillinger', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Ny versjon funnet', - 'remindLater': 'Minn meg senere', - 'updateNow': 'Oppdater nå', - 'checkUpdate': 'Se etter oppdatering', - 'updateFailed': 'Oppdatering mislyktes', + 'newVersionFound': 'Ny versjon funnet', // 版本更新对话框标题 + 'remindLater': 'Minn meg senere', // 稍后提醒按钮 + 'updateNow': 'Oppdater nå', // 立即更新按钮 + 'checkUpdate': 'Se etter oppdatering', // 检查更新按钮 + 'updateFailed': 'Oppdatering mislyktes', // 更新失败提示 'cannotOpenAppStore': - 'Kan ikke åpne appbutikken, gå til appbutikken manuelt for å oppdatere', + 'Kan ikke åpne appbutikken, gå til appbutikken manuelt for å oppdatere', // 无法打开应用商店提示 'updateErrorRetry': - 'Det oppstod en feil under oppdateringen, prøv igjen senere', + 'Det oppstod en feil under oppdateringen, prøv igjen senere', // 更新错误重试提示 //国家列表 "邮箱": "E-post", @@ -631,8 +1184,23 @@ const Map nbNO = { "东帝汶": "Øst-Timor", "斐济": "Fiji", "所罗门群岛": "Salomonøyene", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Oversettelseshistorikk", "enableRecording": "Aktiver opptak", @@ -641,9 +1209,24 @@ const Map nbNO = { "phoneUser": "Telefonbruker", "selectSourceLanguage": "Velg kildespråk", "selectTargetLanguage": "Velg målspråk", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Ingen historikk ennå", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Tøm historikk", "clearHistoryConfirm": "Er du sikker på at du vil tømme all oversettelseshistorikk? Denne handlingen kan ikke angres.", @@ -652,7 +1235,58 @@ const Map nbNO = { "deleteSessionConfirm": "Er du sikker på at du vil slette alle oversettelsesopptak for denne sesjonen? Denne handlingen kan ikke angres.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Oversett lydfiler", "noAudioFiles": "Ingen lydfiler ennå", "calculating": "Beregner...", @@ -698,7 +1332,7 @@ const Map nbNO = { "autoInputCode": "Automatisk innsetting av kode", "skipBinding": "Hopp over binding", "rescan": "Skann på nytt", - "skip": "Hopp over", + "verifyingDevice": "Verifiserer enhet...", "confirmBinding": "Bekreft binding", "associatingDevice": "Knytter til enhet...", @@ -730,12 +1364,17 @@ const Map nbNO = { "pairingFailedRetry": "Paring mislyktes, prøv igjen", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Vennligst aktiver Bluetooth', 'deviceDisconnected': 'Enheten er frakoblet', 'readyToStartPairing': 'Klar til å starte paring', 'checkingEnvironment': 'Sjekker miljø...', 'ensureHeadsetOnAndPairingMode': 'Sørg for at hodesettet er på og i paringsmodus', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Oppretter sikker tilkobling...', 'needManualBindingAuthCode': 'Manuell bindingsautorisasjonskode kreves...', 'pairingSuccessful': 'Paring vellykket!', @@ -756,6 +1395,19 @@ const Map nbNO = { 'deviceAuthorizationFailedCheckCode': 'Enhetsautorisasjon mislyktes, sjekk autorisasjonskoden', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Bruker-tilbakemelding", 'feedbackInfo': 'Gi tilbakemelding eller forslag', @@ -783,6 +1435,13 @@ const Map nbNO = { "connectionFailed": "Tilkobling mislyktes", "retryConnection": "Prøv å koble til på nytt", "ota_updateNow": "Oppdater nå", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Hold enheten tilkoblet, ikke lukk appen", "doNotDisconnect": "Ikke koble fra", "charging": "Lader", @@ -791,11 +1450,11 @@ const Map nbNO = { "Ta ut begge øreproppene og sørg for at batterinivået på begge er over 20 %", // 音乐列表页面 - "noMusic": "Ingen musikk", - "noPlayingMusic": "Ingen musikk spilles av", - "unknownSong": "Ukjent sang", - "unknownArtist": "Ukjent artist", - "playAll": "Spill alle", + "noMusic": "Ingen musikk", // 暂无音乐 + "noPlayingMusic": "Ingen musikk spilles av", // 暂无播放音乐 + "unknownSong": "Ukjent sang", // 未知歌曲 + "unknownArtist": "Ukjent artist", // 未知歌手 + "playAll": "Spill alle", // 播放全部 // 语言名称 "中文(简体)": "Kinesisk (forenklet)", @@ -837,4 +1496,23 @@ const Map nbNO = { "乌尔都语": "Urdu", "波斯语": "Persisk", "斯瓦希里语": "Swahili", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/nl_nl.dart b/lib/core/translations/language/nl_nl.dart index d03e9f0ca..0f3297e05 100644 --- a/lib/core/translations/language/nl_nl.dart +++ b/lib/core/translations/language/nl_nl.dart @@ -33,6 +33,7 @@ const Map nlNL = { "spanish": "Spaans", "portuguese": "Portugees", "traditionalChinese": "Traditioneel Chinees", + "traditionalChineseHK": "Traditioneel Chinees (Hongkong)", "japanese": "Japans", "korean": "Koreaans", "french": "Frans", @@ -99,12 +100,15 @@ const Map nlNL = { "usePasswordLogin": "Inloggen met wachtwoord", // 隐私政策弹窗 - "loginDeclaration": "Voitrans Verklaring", - "welcomeToThisApp": "Welkom bij Voitrans, lees aandachtig door", + "loginDeclaration": "Voitrans Verklaring", // Voitrans 声明 + "welcomeToThisApp": + "Welkom bij Voitrans, lees aandachtig door", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", door op 'Akkoord en doorgaan' te klikken, geeft u aan dat u de bovenstaande overeenkomsten volledig hebt gelezen en ermee akkoord gaat. Door op 'Niet akkoord' te klikken, wordt de applicatie afgesloten.", - "disagree": "Niet akkoord", - "agreeAndEnter": "Akkoord en doorgaan", + ", door op 'Akkoord en doorgaan' te klikken, geeft u aan dat u de bovenstaande overeenkomsten volledig hebt gelezen en ermee akkoord gaat. Door op 'Niet akkoord' te klikken, wordt de applicatie afgesloten.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Niet akkoord", // 不同意 + "agreeAndEnter": "Akkoord en doorgaan", // 同意并进入 // 首页 "deviceStatus": "Apparaatstatus", @@ -186,6 +190,209 @@ const Map nlNL = { "usageStats": "Gebruikstatistieken", "usageStatsInfo": " Bekijk de gebruikstatistieken van uw applicatie", "scene": "Scenario", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Overslaan", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Start vergadering", @@ -200,13 +407,244 @@ const Map nlNL = { 'aiSummary': 'AI-samenvatting', 'meetingTranscript': 'Vergadertranscript', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Systeeminstellingen", //系统设置 - "vipRecharge": "Premium lidspayering", //会员充值 - "aiRecharge": "Premium lid", //AI充值 - "translationRecharge": "Vertalingspayering", //翻译充值 - "meetingAssistantRecharge": "Vergaderassistentpayering", //会议助手充值 - "cloudSync": "Cloud-synchronisatiepayering", //云端同步 + "systemSettings": "Systeeminstellingen", + "vipRecharge": "Premium lidspayering", + "aiRecharge": "Premium lid", + "translationRecharge": "Vertalingspayering", + "meetingAssistantRecharge": "Vergaderassistentpayering", + "cloudSync": "Cloud-synchronisatiepayering", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Verbonden apparaat:", "accountId": "Account-ID:", "systemSetting": "Systeeminstellingen", @@ -218,8 +656,8 @@ const Map nlNL = { "lastBackup": "Laatste back-up:", "privacySettings": "Privacyinstellingen", "privacySettingsInfo": "Beheer gegevensverzameling en toestemmingen", - "permissionManagement": "Toestemmingsbeheer", - "permissionManagementInfo": "Beheer app-toestemmingsinstellingen", + "permissionManagement": "Toestemmingsbeheer", // 权限管理 + "permissionManagementInfo": "Beheer app-toestemmingsinstellingen", // 管理应用权限设置 "aboutApplication": "Over de app", "versions": "Versie", "checkUpdates": "Controleren op updates", @@ -254,11 +692,10 @@ const Map nlNL = { 'networkErrorRetry': 'Netwerkfout, probeer het later opnieuw', // 设备管理相关 - 'clearPairedDevices': 'Gekoppelde apparaten wissen', - 'clearPairedDevicesConfirm': - 'Weet u zeker dat u alle gekoppelde apparaten wilt wissen?', - 'clearPairedDevicesSuccess': 'Gekoppelde apparaten met succes gewist', - 'clearPairedDevicesFailed': 'Wissen van gekoppelde apparaten mislukt', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Realtime spraakchat", @@ -267,11 +704,20 @@ const Map nlNL = { "loading": "Laden...", //设备管理页面 - "earphone": "Oortjes", - "voicerecorder": "Spraakrecorder", - "notBound": "Niet gekoppeld", - "deviceNotBoundYet": "Nog geen apparaat gekoppeld", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Ontkoppelen", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -301,6 +747,20 @@ const Map nlNL = { "loadMoreMessages": "Meer berichten laden...", "loadFailedClickRetry": "Laden mislukt, klik om opnieuw te proberen", "swipeUpForMore": "Veeg omhoog voor meer", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Hallo! Ik ben **Lily**, ik kan u helpen met:\n\n' @@ -323,8 +783,8 @@ const Map nlNL = { 'startPhoneCallMode': 'Start belmodus, start spraakinvoer', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Voer uw bericht hier in...', - 'characterCount': '{count} tekens', + 'fullScreenEditorHint': 'Voer uw bericht hier in...', // 全屏编辑器输入提示 + 'characterCount': '{count} tekens', // 字符计数显示 // 消息长按操作 'copy': 'Kopiëren', @@ -334,6 +794,7 @@ const Map nlNL = { 'submitFailed': 'Indienen mislukt', 'reportSubmitted': 'Rapport ingediend, we zullen het zo snel mogelijk verwerken', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Schadelijk/Onveilig', 'pornographicVulgar': 'Pornografisch/Vulgair', 'misleadingAttack': 'Misleidend/Aanval', @@ -343,6 +804,7 @@ const Map nlNL = { 'other': 'Overig', 'reportDescriptionHint': 'We willen weten waarom u rapporteert, u kunt het probleem dat u tegenkwam beschrijven.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Gegenereerd door AI', @@ -353,15 +815,15 @@ const Map nlNL = { 'moreMusic': 'Meer muziek', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'uur', - 'minutes': 'minuten', - 'seconds': 'seconden', - 'navigating': 'Navigeren', - 'currentLocation': 'Huidige locatie', - 'approximate': 'Ongeveer', - 'enterRoad': 'Weg oprijden', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'uur', // 小时单位 + 'minutes': 'minuten', // 分钟单位 + 'seconds': 'seconden', // 秒单位 + 'navigating': 'Navigeren', // 导航状态 + 'currentLocation': 'Huidige locatie', // 当前位置 + 'approximate': 'Ongeveer', // 大约 + 'enterRoad': 'Weg oprijden', // 进入道路 "driving": 'Rijden', "walking": 'Lopen', "bicycling": 'Fietsen', @@ -396,6 +858,17 @@ const Map nlNL = { "friday": "Vr", "saturday": "Za", "sunday": "Zo", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Zonnig", "partlyCloudy": "Licht bewolkt", @@ -431,6 +904,8 @@ const Map nlNL = { 'deleteAccount': 'Account verwijderen', 'deleteAccountTips': 'Weet u zeker dat u uw account permanent wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -452,6 +927,8 @@ const Map nlNL = { 'Interne serverfout, probeer het later opnieuw', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Beeldcompressie mislukt', 'avatarUpdateFailed': 'Avatar-update mislukt', 'usernameCannotBeEmpty': 'Gebruikersnaam mag niet leeg zijn', @@ -465,30 +942,46 @@ const Map nlNL = { 'Verwijderen van account mislukt, probeer het opnieuw', // 账号服务相关 - 'clearUserDataFailed': 'Wissen van gebruikersgegevens mislukt', - 'deleteUserDataFailed': 'Verwijderen van gebruikersgegevens mislukt', - 'thirdPartyLogoutSuccess': 'Uitloggen bij derde partij succesvol', - 'thirdPartyLogoutFailed': 'Uitloggen bij derde partij mislukt', - 'signOutProcessError': 'Er is een fout opgetreden tijdens het uitloggen', + 'clearUserDataFailed': 'Wissen van gebruikersgegevens mislukt', // 清理用户数据失败 + 'deleteUserDataFailed': + 'Verwijderen van gebruikersgegevens mislukt', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': + 'Uitloggen bij derde partij succesvol', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'Uitloggen bij derde partij mislukt', // 第三方登录退出失败 + 'signOutProcessError': + 'Er is een fout opgetreden tijdens het uitloggen', // 登出过程发生错误 'deleteAccountProcessError': - 'Er is een fout opgetreden tijdens het verwijderen van het account', - 'userDataClearSuccess': 'Gebruikersgegevens succesvol gewist', - 'allUserDataClearSuccess': 'Alle gebruikersgegevens succesvol gewist', - 'accountServiceInitialized': 'Accountservice is geïnitialiseerd', + 'Er is een fout opgetreden tijdens het verwijderen van het account', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Gebruikersgegevens succesvol gewist', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Alle gebruikersgegevens succesvol gewist', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Accountservice is geïnitialiseerd', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Ophalen van toestemmingsstatus mislukt', 'communicationPermissions': 'Communicatietoestemmingen', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Kalendertoestemmingen', 'locationPermissions': 'Locatietoestemmingen', 'phone': 'Telefoon', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Kalender schrijven', 'calendarFullAccess': 'Volledige kalendertoegang', 'locationInfo': 'Locatie-informatie', 'phonePermissionDesc': 'Gebruikt voor de belfunctie', 'smsPermissionDesc': 'Gebruikt voor de functie voor het verzenden van sms-berichten', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Gebruikt voor het maken van kalenderafspraken en herinneringen', 'calendarFullAccessPermissionDesc': @@ -507,28 +1000,90 @@ const Map nlNL = { 'phonePermissionDetailDesc': 'De belfunctie vereist telefoontoestemming', 'smsPermissionDetailDesc': 'De functie voor het verzenden van sms-berichten vereist sms-toestemming', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Het maken van kalenderafspraken vereist schrijftoestemming voor de kalender', 'calendarFullAccessPermissionDetailDesc': 'Het beheren van kalenderafspraken vereist volledige kalendertoegang', 'locationPermissionDetailDesc': 'Het ophalen van locatie-informatie vereist locatietoestemming', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'De app heeft deze toestemming nodig voor volledige functionaliteit', 'permanentDenialText': 'U hebt de toestemming {permission} permanent geweigerd, ga naar de app-instellingen om deze in te schakelen', 'goToSettings': 'Ga naar instellingen', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Nieuwe versie gevonden', - 'remindLater': 'Later herinneren', - 'updateNow': 'Nu bijwerken', - 'checkUpdate': 'Controleren op update', - 'updateFailed': 'Update mislukt', + 'newVersionFound': 'Nieuwe versie gevonden', // 版本更新对话框标题 + 'remindLater': 'Later herinneren', // 稍后提醒按钮 + 'updateNow': 'Nu bijwerken', // 立即更新按钮 + 'checkUpdate': 'Controleren op update', // 检查更新按钮 + 'updateFailed': 'Update mislukt', // 更新失败提示 'cannotOpenAppStore': - 'Kan de app store niet openen, ga handmatig naar de app store om bij te werken', + 'Kan de app store niet openen, ga handmatig naar de app store om bij te werken', // 无法打开应用商店提示 'updateErrorRetry': - 'Er is een fout opgetreden tijdens het bijwerken, probeer het later opnieuw', + 'Er is een fout opgetreden tijdens het bijwerken, probeer het later opnieuw', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -637,8 +1192,23 @@ const Map nlNL = { "东帝汶": "Oost-Timor", "斐济": "Fiji", "所罗门群岛": "Salomonseilanden", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Vertaalgeschiedenis", "enableRecording": "Opname inschakelen", @@ -647,9 +1217,24 @@ const Map nlNL = { "phoneUser": "Telefoongebruiker", "selectSourceLanguage": "Selecteer brontaal", "selectTargetLanguage": "Selecteer doeltaal", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Nog geen geschiedenis", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Geschiedenis wissen", "clearHistoryConfirm": "Weet u zeker dat u alle vertaalgeschiedenis wilt wissen? Deze actie kan niet ongedaan worden gemaakt.", @@ -658,7 +1243,58 @@ const Map nlNL = { "deleteSessionConfirm": "Weet u zeker dat u alle vertaalopnamen voor deze sessie wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Audiobestanden vertalen", "noAudioFiles": "Nog geen audiobestanden", "calculating": "Berekenen...", @@ -704,7 +1340,7 @@ const Map nlNL = { "autoInputCode": "Code automatisch invoeren", "skipBinding": "Koppeling overslaan", "rescan": "Opnieuw scannen", - "skip": "Overslaan", + "verifyingDevice": "Apparaat verifiëren...", "confirmBinding": "Koppeling bevestigen", "associatingDevice": "Apparaat associëren...", @@ -736,12 +1372,17 @@ const Map nlNL = { "pairingFailedRetry": "Koppelen mislukt, probeer het opnieuw", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Schakel Bluetooth in', 'deviceDisconnected': 'Apparaat losgekoppeld', 'readyToStartPairing': 'Klaar om te beginnen met koppelen', 'checkingEnvironment': 'Omgeving controleren...', 'ensureHeadsetOnAndPairingMode': 'Zorg ervoor dat de headset is ingeschakeld en in de koppelingsmodus staat', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Beveiligde verbinding tot stand brengen...', 'needManualBindingAuthCode': 'Handmatige koppelingsautorisatiecode vereist...', @@ -764,6 +1405,19 @@ const Map nlNL = { 'deviceAuthorizationFailedCheckCode': 'Apparaatautorisatie mislukt, controleer de autorisatiecode', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Gebruikersfeedback", 'feedbackInfo': 'Geef feedback of suggesties', @@ -793,6 +1447,13 @@ const Map nlNL = { "connectionFailed": "Verbinding mislukt", "retryConnection": "Verbinding opnieuw proberen", "ota_updateNow": "Nu bijwerken", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Houd het apparaat verbonden, sluit de app niet", "doNotDisconnect": "Verbreek de verbinding niet", "charging": "Opladen", @@ -801,11 +1462,11 @@ const Map nlNL = { "Haal beide oortjes eruit en zorg ervoor dat de batterij van beide meer dan 20% is", // 音乐列表页面 - "noMusic": "Geen muziek", - "noPlayingMusic": "Geen muziek aan het afspelen", - "unknownSong": "Onbekend nummer", - "unknownArtist": "Onbekende artiest", - "playAll": "Alles afspelen", + "noMusic": "Geen muziek", // 暂无音乐 + "noPlayingMusic": "Geen muziek aan het afspelen", // 暂无播放音乐 + "unknownSong": "Onbekend nummer", // 未知歌曲 + "unknownArtist": "Onbekende artiest", // 未知歌手 + "playAll": "Alles afspelen", // 播放全部 // 语言名称 "中文(简体)": "Chinees (vereenvoudigd)", @@ -847,4 +1508,23 @@ const Map nlNL = { "乌尔都语": "Urdu", "波斯语": "Perzisch", "斯瓦希里语": "Swahili", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/pl_pl.dart b/lib/core/translations/language/pl_pl.dart index c00f8046d..f28194e01 100644 --- a/lib/core/translations/language/pl_pl.dart +++ b/lib/core/translations/language/pl_pl.dart @@ -33,6 +33,7 @@ const Map plPL = { "spanish": "Hiszpański", "portuguese": "Portugalski", "traditionalChinese": "Chiński tradycyjny", + "traditionalChineseHK": "Chiński tradycyjny (Hongkong)", "japanese": "Japoński", "korean": "Koreański", "french": "Francuski", @@ -100,12 +101,15 @@ const Map plPL = { "usePasswordLogin": "Zaloguj się hasłem", // 隐私政策弹窗 - "loginDeclaration": "Oświadczenie Voitrans", - "welcomeToThisApp": "Witaj w Voitrans, prosimy o uważne przeczytanie", + "loginDeclaration": "Oświadczenie Voitrans", // Voitrans 声明 + "welcomeToThisApp": + "Witaj w Voitrans, prosimy o uważne przeczytanie", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", kliknięcie 'Zgadzam się i wchodzę' oznacza, że przeczytałeś i zgadzasz się z powyższymi umowami. Kliknięcie 'Nie zgadzam się' spowoduje wyjście z aplikacji.", - "disagree": "Nie zgadzam się", - "agreeAndEnter": "Zgadzam się i wchodzę", + ", kliknięcie 'Zgadzam się i wchodzę' oznacza, że przeczytałeś i zgadzasz się z powyższymi umowami. Kliknięcie 'Nie zgadzam się' spowoduje wyjście z aplikacji.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Nie zgadzam się", // 不同意 + "agreeAndEnter": "Zgadzam się i wchodzę", // 同意并进入 // 首页 "deviceStatus": "Stan urządzenia", @@ -187,6 +191,209 @@ const Map plPL = { "usageStats": "Statystyki użycia", "usageStatsInfo": "Przeglądaj statystyki użycia aplikacji", "scene": "Scenariusz", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Pomiń", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Rozpocznij spotkanie", @@ -201,13 +408,244 @@ const Map plPL = { 'aiSummary': 'Podsumowanie AI', 'meetingTranscript': 'Transkrypcja spotkania', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Ustawienia systemowe", //系统设置 - "vipRecharge": "Płatność Premium", //会员充值 - "aiRecharge": "Członek Premium", //AI充值 - "translationRecharge": "Płatność tłumaczenia", //翻译充值 - "meetingAssistantRecharge": "Płatność asystenta spotkań", //会议助手充值 - "cloudSync": "Płatność synchronizacji w chmurze", //云端同步 + "systemSettings": "Ustawienia systemowe", + "vipRecharge": "Płatność Premium", + "aiRecharge": "Członek Premium", + "translationRecharge": "Płatność tłumaczenia", + "meetingAssistantRecharge": "Płatność asystenta spotkań", + "cloudSync": "Płatność synchronizacji w chmurze", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Podłączone urządzenie:", "accountId": "ID konta:", "systemSetting": "Ustawienia systemowe", @@ -219,8 +657,9 @@ const Map plPL = { "lastBackup": "Ostatnia kopia zapasowa:", "privacySettings": "Ustawienia prywatności", "privacySettingsInfo": "Zarządzaj zbieraniem danych i uprawnieniami", - "permissionManagement": "Zarządzanie uprawnieniami", - "permissionManagementInfo": "Zarządzaj ustawieniami uprawnień aplikacji", + "permissionManagement": "Zarządzanie uprawnieniami", // 权限管理 + "permissionManagementInfo": + "Zarządzaj ustawieniami uprawnień aplikacji", // 管理应用权限设置 "aboutApplication": "O aplikacji", "versions": "Wersja", "checkUpdates": "Sprawdź aktualizacje", @@ -256,12 +695,10 @@ const Map plPL = { 'networkErrorRetry': 'Błąd sieci, spróbuj ponownie później', // 设备管理相关 - 'clearPairedDevices': 'Wyczyść sparowane urządzenia', - 'clearPairedDevicesConfirm': - 'Czy na pewno chcesz wyczyścić wszystkie sparowane urządzenia?', - 'clearPairedDevicesSuccess': 'Pomyślnie wyczyszczono sparowane urządzenia', - 'clearPairedDevicesFailed': - 'Wyczyszczenie sparowanych urządzeń nie powiodło się', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Czat głosowy w czasie rzeczywistym", @@ -270,11 +707,20 @@ const Map plPL = { "loading": "Ładowanie...", //设备管理页面 - "earphone": "Słuchawki", - "voicerecorder": "Dyktafon", - "notBound": "Niepowiązane", - "deviceNotBoundYet": "Urządzenie nie jest jeszcze powiązane", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Rozłącz", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -304,6 +750,20 @@ const Map plPL = { "loadFailedClickRetry": "Ładowanie nie powiodło się, kliknij, aby spróbować ponownie", "swipeUpForMore": "Przesuń w górę, aby zobaczyć więcej", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Cześć! Jestem **Lily**, mogę Ci pomóc:\n\n' @@ -327,8 +787,8 @@ const Map plPL = { 'Rozpocznij tryb dzwonienia, rozpocznij wprowadzanie głosowe', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Wpisz swoją wiadomość tutaj...', - 'characterCount': '{count} znaków', + 'fullScreenEditorHint': 'Wpisz swoją wiadomość tutaj...', // 全屏编辑器输入提示 + 'characterCount': '{count} znaków', // 字符计数显示 // 消息长按操作 'copy': 'Kopiuj', @@ -338,6 +798,7 @@ const Map plPL = { 'submitFailed': 'Przesyłanie nie powiodło się', 'reportSubmitted': 'Zgłoszenie zostało przesłane, zajmiemy się nim jak najszybciej', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Szkodliwe/Niebezpieczne', 'pornographicVulgar': 'Pornograficzne/Wulgarne', 'misleadingAttack': 'Wprowadzające w błąd/Atak', @@ -348,6 +809,7 @@ const Map plPL = { 'other': 'Inne', 'reportDescriptionHint': 'Chcielibyśmy wiedzieć, dlaczego zgłaszasz, możesz opisać problem, z którym się spotkałeś.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Wygenerowano przez AI', @@ -358,15 +820,15 @@ const Map plPL = { 'moreMusic': 'Więcej muzyki', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'godz.', - 'minutes': 'min', - 'seconds': 's', - 'navigating': 'Nawigacja', - 'currentLocation': 'Obecna lokalizacja', - 'approximate': 'Około', - 'enterRoad': 'Wjedź na', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'godz.', // 小时单位 + 'minutes': 'min', // 分钟单位 + 'seconds': 's', // 秒单位 + 'navigating': 'Nawigacja', // 导航状态 + 'currentLocation': 'Obecna lokalizacja', // 当前位置 + 'approximate': 'Około', // 大约 + 'enterRoad': 'Wjedź na', // 进入道路 "driving": 'Jazda samochodem', "walking": 'Pieszo', "bicycling": 'Rowerem', @@ -402,6 +864,17 @@ const Map plPL = { "friday": "Pt", "saturday": "Sob", "sunday": "Niedz", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Słonecznie", "partlyCloudy": "Częściowe zachmurzenie", @@ -437,6 +910,8 @@ const Map plPL = { 'deleteAccount': 'Usuń konto', 'deleteAccountTips': 'Czy na pewno chcesz trwale usunąć swoje konto? Tej operacji nie można cofnąć.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -458,6 +933,8 @@ const Map plPL = { 'Wewnętrzny błąd serwera, spróbuj ponownie później', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Kompresja obrazu nie powiodła się', 'avatarUpdateFailed': 'Aktualizacja awatara nie powiodła się', 'usernameCannotBeEmpty': 'Nazwa użytkownika nie może być pusta', @@ -471,29 +948,47 @@ const Map plPL = { 'Usuwanie konta nie powiodło się, spróbuj ponownie', // 账号服务相关 - 'clearUserDataFailed': 'Wyczyszczenie danych użytkownika nie powiodło się', - 'deleteUserDataFailed': 'Usunięcie danych użytkownika nie powiodło się', - 'thirdPartyLogoutSuccess': 'Wylogowanie z usługi zewnętrznej powiodło się', - 'thirdPartyLogoutFailed': 'Wylogowanie z usługi zewnętrznej nie powiodło się', - 'signOutProcessError': 'Wystąpił błąd podczas wylogowywania', - 'deleteAccountProcessError': 'Wystąpił błąd podczas usuwania konta', - 'userDataClearSuccess': 'Dane użytkownika zostały pomyślnie wyczyszczone', + 'clearUserDataFailed': + 'Wyczyszczenie danych użytkownika nie powiodło się', // 清理用户数据失败 + 'deleteUserDataFailed': + 'Usunięcie danych użytkownika nie powiodło się', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': + 'Wylogowanie z usługi zewnętrznej powiodło się', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': + 'Wylogowanie z usługi zewnętrznej nie powiodło się', // 第三方登录退出失败 + 'signOutProcessError': 'Wystąpił błąd podczas wylogowywania', // 登出过程发生错误 + 'deleteAccountProcessError': + 'Wystąpił błąd podczas usuwania konta', // 删除账号过程发生错误 + 'userDataClearSuccess': + 'Dane użytkownika zostały pomyślnie wyczyszczone', // 用户数据清理成功 'allUserDataClearSuccess': - 'Wszystkie dane użytkownika zostały pomyślnie wyczyszczone', - 'accountServiceInitialized': 'Usługa konta została zainicjowana', + 'Wszystkie dane użytkownika zostały pomyślnie wyczyszczone', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Usługa konta została zainicjowana', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Pobranie stanu uprawnień nie powiodło się', 'communicationPermissions': 'Uprawnienia komunikacyjne', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Uprawnienia kalendarza', 'locationPermissions': 'Uprawnienia lokalizacji', 'phone': 'Telefon', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Zapis do kalendarza', 'calendarFullAccess': 'Pełny dostęp do kalendarza', 'locationInfo': 'Informacje o lokalizacji', 'phonePermissionDesc': 'Używane do funkcji dzwonienia', 'smsPermissionDesc': 'Używane do funkcji wysyłania SMS-ów', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Używane do tworzenia wydarzeń i przypomnień w kalendarzu', 'calendarFullAccessPermissionDesc': @@ -511,28 +1006,90 @@ const Map plPL = { 'phonePermissionDetailDesc': 'Funkcja dzwonienia wymaga uprawnień telefonicznych', 'smsPermissionDetailDesc': 'Funkcja wysyłania SMS-ów wymaga uprawnień SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Tworzenie wydarzeń w kalendarzu wymaga uprawnień do zapisu w kalendarzu', 'calendarFullAccessPermissionDetailDesc': 'Zarządzanie wydarzeniami w kalendarzu wymaga pełnych uprawnień do kalendarza', 'locationPermissionDetailDesc': 'Uzyskiwanie informacji o lokalizacji wymaga uprawnień lokalizacyjnych', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Aplikacja wymaga tego uprawnienia do pełnej funkcjonalności', 'permanentDenialText': 'Trwale odmówiłeś uprawnienia {permission}, przejdź do ustawień aplikacji, aby je włączyć', 'goToSettings': 'Przejdź do ustawień', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Znaleziono nową wersję', - 'remindLater': 'Przypomnij później', - 'updateNow': 'Zaktualizuj teraz', - 'checkUpdate': 'Sprawdź aktualizację', - 'updateFailed': 'Aktualizacja nie powiodła się', + 'newVersionFound': 'Znaleziono nową wersję', // 版本更新对话框标题 + 'remindLater': 'Przypomnij później', // 稍后提醒按钮 + 'updateNow': 'Zaktualizuj teraz', // 立即更新按钮 + 'checkUpdate': 'Sprawdź aktualizację', // 检查更新按钮 + 'updateFailed': 'Aktualizacja nie powiodła się', // 更新失败提示 'cannotOpenAppStore': - 'Nie można otworzyć sklepu z aplikacjami, przejdź do sklepu ręcznie, aby zaktualizować', + 'Nie można otworzyć sklepu z aplikacjami, przejdź do sklepu ręcznie, aby zaktualizować', // 无法打开应用商店提示 'updateErrorRetry': - 'Wystąpił błąd podczas aktualizacji, spróbuj ponownie później', + 'Wystąpił błąd podczas aktualizacji, spróbuj ponownie później', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -641,8 +1198,23 @@ const Map plPL = { "东帝汶": "Timor Wschodni", "斐济": "Fidżi", "所罗门群岛": "Wyspy Salomona", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Historia tłumaczeń", "enableRecording": "Włącz nagrywanie", @@ -651,9 +1223,24 @@ const Map plPL = { "phoneUser": "Użytkownik telefonu", "selectSourceLanguage": "Wybierz język źródłowy", "selectTargetLanguage": "Wybierz język docelowy", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Brak historii", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Wyczyść historię", "clearHistoryConfirm": "Czy na pewno chcesz wyczyścić całą historię tłumaczeń? Tej operacji nie można cofnąć.", @@ -662,7 +1249,58 @@ const Map plPL = { "deleteSessionConfirm": "Czy na pewno chcesz usunąć wszystkie zapisy tłumaczeń dla tej sesji? Tej operacji nie można cofnąć.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Przetłumacz pliki audio", "noAudioFiles": "Brak plików audio", "calculating": "Obliczanie...", @@ -708,7 +1346,7 @@ const Map plPL = { "autoInputCode": "Automatyczne wprowadzanie kodu", "skipBinding": "Pomiń powiązanie", "rescan": "Skanuj ponownie", - "skip": "Pomiń", + "verifyingDevice": "Weryfikacja urządzenia...", "confirmBinding": "Potwierdź powiązanie", "associatingDevice": "Kojarzenie urządzenia...", @@ -741,12 +1379,17 @@ const Map plPL = { "pairingFailedRetry": "Parowanie nie powiodło się, spróbuj ponownie", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Włącz Bluetooth', 'deviceDisconnected': 'Urządzenie odłączone', 'readyToStartPairing': 'Gotowy do rozpoczęcia parowania', 'checkingEnvironment': 'Sprawdzanie środowiska...', 'ensureHeadsetOnAndPairingMode': 'Upewnij się, że słuchawki są włączone i w trybie parowania', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Ustanawianie bezpiecznego połączenia...', 'needManualBindingAuthCode': 'Wymagany jest kod autoryzacji do ręcznego powiązania...', @@ -770,6 +1413,19 @@ const Map plPL = { 'deviceAuthorizationFailedCheckCode': 'Autoryzacja urządzenia nie powiodła się, sprawdź kod autoryzacji', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Opinie użytkowników", 'feedbackInfo': 'Prześlij opinię lub sugestię', @@ -798,6 +1454,13 @@ const Map plPL = { "connectionFailed": "Połączenie nie powiodło się", "retryConnection": "Spróbuj połączyć ponownie", "ota_updateNow": "Zaktualizuj teraz", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Utrzymuj urządzenie w stanie połączenia, nie zamykaj aplikacji", "doNotDisconnect": "Nie odłączaj", @@ -807,11 +1470,11 @@ const Map plPL = { "Wyjmij obie słuchawki i upewnij się, że poziom naładowania baterii obu wynosi ponad 20%", // 音乐列表页面 - "noMusic": "Brak muzyki", - "noPlayingMusic": "Brak odtwarzanej muzyki", - "unknownSong": "Nieznana piosenka", - "unknownArtist": "Nieznany artysta", - "playAll": "Odtwórz wszystko", + "noMusic": "Brak muzyki", // 暂无音乐 + "noPlayingMusic": "Brak odtwarzanej muzyki", // 暂无播放音乐 + "unknownSong": "Nieznana piosenka", // 未知歌曲 + "unknownArtist": "Nieznany artysta", // 未知歌手 + "playAll": "Odtwórz wszystko", // 播放全部 // 语言名称 "中文(简体)": "Chiński (uproszczony)", @@ -853,4 +1516,23 @@ const Map plPL = { "乌尔都语": "Urdu", "波斯语": "Perski", "斯瓦希里语": "Suahili", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/pt_pt.dart b/lib/core/translations/language/pt_pt.dart index 4404d9d2b..9d37853d9 100644 --- a/lib/core/translations/language/pt_pt.dart +++ b/lib/core/translations/language/pt_pt.dart @@ -33,6 +33,7 @@ const Map ptPT = { "spanish": "Espanhol", "portuguese": "Português", "traditionalChinese": "Chinês Tradicional", + "traditionalChineseHK": "Chinês tradicional (Hong Kong)", "japanese": "Japonês", "korean": "Coreano", "french": "Francês", @@ -100,12 +101,15 @@ const Map ptPT = { "usePasswordLogin": "Iniciar sessão com palavra-passe", // 隐私政策弹窗 - "loginDeclaration": "Declaração Voitrans", - "welcomeToThisApp": "Bem-vindo à Voitrans, por favor, leia atentamente", + "loginDeclaration": "Declaração Voitrans", // Voitrans 声明 + "welcomeToThisApp": + "Bem-vindo à Voitrans, por favor, leia atentamente", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", clicar em 'Concordo e Entrar' significa que leu e concorda com os acordos acima. Clicar em 'Discordo' sairá da aplicação.", - "disagree": "Discordo", - "agreeAndEnter": "Concordo e Entrar", + ", clicar em 'Concordo e Entrar' significa que leu e concorda com os acordos acima. Clicar em 'Discordo' sairá da aplicação.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Discordo", // 不同意 + "agreeAndEnter": "Concordo e Entrar", // 同意并进入 // 首页 "deviceStatus": "Estado do Dispositivo", @@ -189,15 +193,211 @@ const Map ptPT = { "usageStats": "Estatísticas de Uso", "usageStatsInfo": "Visualize as estatísticas de uso da sua aplicação", "scene": "Cenário", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', 'trans_001_name': 'Tradução Básica 100', 'trans_002_name': 'Tradução Básica 500', 'trans_003_name': 'Tradução Básica 1000', + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', 'trans_001_desc': 'Inclui 100 traduções (voz/texto).', 'trans_002_desc': 'Inclui 500 traduções (voz/texto).', 'trans_003_desc': 'Inclui 1000 traduções (voz/texto).', +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Interpretação simultânea e tradução de texto em tempo real, com voz de baixa latência.', + 'transHeaderDesc2': 'Adequado para viagens, negócios, palestras e ensino.', + 'translateZhEn': 'Tradução Chinês-Inglês', + 'lowLatencyVoiceBroadcast': 'Transmissão de voz de baixa latência', + 'multiLangTextTranslation': 'Tradução de texto multilingue', + 'termOptimizationContextPreserve': + 'Otimização de terminologia e preservação de contexto', + 'lexiconTourBusinessLife': 'Léxicos de viagem/negócios/vida', + 'personalVocabularyMemory': 'Memória de vocabulário pessoal', + 'conversationSubtitleLargeText': + 'Legendagem de conversas / modo de texto grande', + 'colorHighContrast': 'Alto contraste de cor', + 'transDisclaimer': + 'O desempenho da tradução depende do microfone, da latência da rede e do ruído ambiente.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Visão geral de benefícios', + 'higherQuota': 'Maior quota de utilização', + 'lowerUnitPrice': 'Preço unitário inferior', + 'priorityService': 'Serviço prioritário', + 'exclusiveSupportChannel': 'Canal de suporte dedicado', + 'fastResponse': 'Resposta rápida a problemas', + 'eventsAndDiscounts': 'Eventos e descontos', + 'memberExclusiveEvents': 'Eventos exclusivos para membros', + 'longTermDiscountPlan': 'Plano de desconto a longo prazo', + 'generalPrivileges': 'Privilégios gerais', + 'earlyAccessNewFeatures': 'Acesso antecipado a novas funcionalidades', + 'crossDeviceSync': 'Sincronização entre dispositivos', + 'vipDisclaimer': + 'Os benefícios reais dependem dos detalhes do pacote e podem mudar entre versões.', + + // 新手引导 / Onboarding + 'skip': "Saltar", + 'next': 'Next', + 'sayLilyHint': "Say \"Lily Lily\" to the mic", + 'imHere': "I’m here~", + 'guideWelcomeWakeAI': "Welcome to Voitrans! First, wake your AI “Lily”.", + 'aiReplyCompleted': "Lily has finished the reply!", + 'aiThinking': "Lily is thinking…", + 'guideAwakenSuccess': "Great! Lily is awake—ask it to help.", + 'confirmInput': "Confirm Input", + 'guideClickSendPrefix': "Tap send, ", + // AI 引导步骤 + 'guideWeatherStart': "Tell Lily: “What’s the weather today?”", + 'guideWeatherInput': "What’s the weather today?", + 'guideWeatherSend': "Lily will report the weather in real time", + 'guideWeatherEnd': "Lily can report weather live—try other commands", + 'guideMusicStart': "Tell Lily: “Play some rock music”", + 'guideMusicInput': "Play some rock music", + 'guideMusicSend': "Lily will find music for you", + 'guideMusicEnd': "Lily found music—try other commands", + 'guideNavStart': "Tell Lily: “Navigate to Shenzhen Airport”", + 'guideNavInput': "Navigate to Shenzhen Airport", + 'guideNavSend': "Lily will plan the route", + 'guideNavEnd': "Navigation set—try other commands", + 'guideMeetingStart': + "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", + 'guideMeetingInput': "Create a meeting reminder for 3pm tomorrow", + 'guideMeetingSend': "Lily will create a meeting reminder", + 'guideMeetingEnd': "Reminder created—try other commands", + 'guidePhoneStart': "Tell Lily: “Call Mom”", + 'guidePhoneInput': "Call Mom", + 'guidePhoneSend': "Lily will make the call", + 'guidePhoneEnd': "Call placed—try other commands", + 'guideSmsStart': "Tell Lily: “Send Dad a text: I’ll be home for dinner”", + 'guideSmsInput': "Text Dad: I’ll be home for dinner", + 'guideSmsSend': "Lily will send the message", + 'guideSmsEnd': "Message sent—voice control is convenient", + // 商务会议助手页 "startMeeting": "Iniciar Reunião", 'edit': 'Editar', @@ -211,13 +411,244 @@ const Map ptPT = { 'aiSummary': 'Resumo IA', 'meetingTranscript': 'Transcrição da Reunião', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Definições do Sistema", //系统设置 - "vipRecharge": "Recarga Premium", //会员充值 - "aiRecharge": "Membro Premium", //AI充值 - "translationRecharge": "Recarga de Tradução", //翻译充值 - "meetingAssistantRecharge": "Recarga do Assistente de Reunião", //会议助手充值 - "cloudSync": "Recarga de Sincronização em Nuvem", //云端同步 + "systemSettings": "Definições do Sistema", + "vipRecharge": "Recarga Premium", + "aiRecharge": "Membro Premium", + "translationRecharge": "Recarga de Tradução", + "meetingAssistantRecharge": "Recarga do Assistente de Reunião", + "cloudSync": "Recarga de Sincronização em Nuvem", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Dispositivo conectado:", "accountId": "ID da Conta:", "systemSetting": "Definição do Sistema", @@ -230,8 +661,9 @@ const Map ptPT = { "lastBackup": "Última cópia de segurança:", "privacySettings": "Definições de Privacidade", "privacySettingsInfo": "Gerir a recolha de dados e permissões", - "permissionManagement": "Gestão de Permissões", - "permissionManagementInfo": "Gerir as definições de permissão da aplicação", + "permissionManagement": "Gestão de Permissões", // 权限管理 + "permissionManagementInfo": + "Gerir as definições de permissão da aplicação", // 管理应用权限设置 "aboutApplication": "Sobre a Aplicação", "versions": "Versão", "checkUpdates": "Verificar Atualizações", @@ -267,11 +699,10 @@ const Map ptPT = { 'networkErrorRetry': 'Erro de rede, tente novamente mais tarde', // 设备管理相关 - 'clearPairedDevices': 'Limpar Dispositivos Emparelhados', - 'clearPairedDevicesConfirm': - 'Tem a certeza que quer limpar todos os dispositivos emparelhados?', - 'clearPairedDevicesSuccess': 'Dispositivos emparelhados limpos com sucesso', - 'clearPairedDevicesFailed': 'Falha ao limpar dispositivos emparelhados', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Chat de Voz em Tempo Real", @@ -280,11 +711,20 @@ const Map ptPT = { "loading": "A carregar...", //设备管理页面 - "earphone": "Auriculares", - "voicerecorder": "Gravador de Voz", - "notBound": "Não Vinculado", - "deviceNotBoundYet": "Ainda não há dispositivo vinculado", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Desvincular", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -314,6 +754,20 @@ const Map ptPT = { "loadMoreMessages": "Carregar mais mensagens...", "loadFailedClickRetry": "Falha ao carregar, clique para tentar novamente", "swipeUpForMore": "Deslize para cima para ver mais", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Olá! Eu sou a **Lily**, posso ajudá-lo(a) a:\n\n' @@ -336,8 +790,8 @@ const Map ptPT = { 'startPhoneCallMode': 'Iniciar modo de chamada, iniciar entrada de voz', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Introduza a sua mensagem aqui...', - 'characterCount': '{count} caracteres', + 'fullScreenEditorHint': 'Introduza a sua mensagem aqui...', // 全屏编辑器输入提示 + 'characterCount': '{count} caracteres', // 字符计数显示 // 消息长按操作 'copy': 'Copiar', @@ -346,6 +800,7 @@ const Map ptPT = { 'submitSuccess': 'Enviado com sucesso', 'submitFailed': 'Falha no envio', 'reportSubmitted': 'Denúncia enviada, iremos processá-la em breve', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Nocivo/Inseguro', 'pornographicVulgar': 'Pornográfico/Vulgar', 'misleadingAttack': 'Enganoso/Ataque', @@ -355,6 +810,7 @@ const Map ptPT = { 'other': 'Outro', 'reportDescriptionHint': 'Gostaríamos de saber o motivo da sua denúncia, pode descrever o problema que encontrou.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Gerado por IA', @@ -365,15 +821,15 @@ const Map ptPT = { 'moreMusic': 'Mais Música', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'horas', - 'minutes': 'minutos', - 'seconds': 'segundos', - 'navigating': 'A navegar', - 'currentLocation': 'Localização Atual', - 'approximate': 'Aprox.', - 'enterRoad': 'Entrar na estrada', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'horas', // 小时单位 + 'minutes': 'minutos', // 分钟单位 + 'seconds': 'segundos', // 秒单位 + 'navigating': 'A navegar', // 导航状态 + 'currentLocation': 'Localização Atual', // 当前位置 + 'approximate': 'Aprox.', // 大约 + 'enterRoad': 'Entrar na estrada', // 进入道路 "driving": "A conduzir", "walking": "A caminhar", "bicycling": "De bicicleta", @@ -409,6 +865,17 @@ const Map ptPT = { "friday": "Sex", "saturday": "Sáb", "sunday": "Dom", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Ensolarado", "partlyCloudy": "Pouco Nublado", @@ -444,6 +911,8 @@ const Map ptPT = { 'deleteAccount': 'Eliminar Conta', 'deleteAccountTips': 'Tem a certeza que quer eliminar permanentemente a sua conta? Esta ação não pode ser revertida.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -466,6 +935,8 @@ const Map ptPT = { 'Erro interno do servidor, tente novamente mais tarde', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Falha na compressão da imagem', 'avatarUpdateFailed': 'Falha na atualização do avatar', 'usernameCannotBeEmpty': 'O nome de utilizador não pode estar vazio', @@ -478,31 +949,46 @@ const Map ptPT = { 'deleteAccountFailedRetry': 'Falha ao eliminar a conta, tente novamente', // 账号服务相关 - 'clearUserDataFailed': 'Falha ao limpar os dados do utilizador', - 'deleteUserDataFailed': 'Falha ao eliminar os dados do utilizador', - 'thirdPartyLogoutSuccess': 'Sessão de terceiros terminada com sucesso', - 'thirdPartyLogoutFailed': 'Falha ao terminar a sessão de terceiros', + 'clearUserDataFailed': 'Falha ao limpar os dados do utilizador', // 清理用户数据失败 + 'deleteUserDataFailed': + 'Falha ao eliminar os dados do utilizador', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': + 'Sessão de terceiros terminada com sucesso', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': + 'Falha ao terminar a sessão de terceiros', // 第三方登录退出失败 'signOutProcessError': - 'Ocorreu um erro durante o processo de terminar a sessão', + 'Ocorreu um erro durante o processo de terminar a sessão', // 登出过程发生错误 'deleteAccountProcessError': - 'Ocorreu um erro durante o processo de eliminação da conta', - 'userDataClearSuccess': 'Dados do utilizador limpos com sucesso', + 'Ocorreu um erro durante o processo de eliminação da conta', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Dados do utilizador limpos com sucesso', // 用户数据清理成功 'allUserDataClearSuccess': - 'Todos os dados do utilizador foram limpos com sucesso', - 'accountServiceInitialized': 'Serviço de Conta inicializado', + 'Todos os dados do utilizador foram limpos com sucesso', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Serviço de Conta inicializado', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Falha ao obter o estado da permissão', 'communicationPermissions': 'Permissões de Comunicação', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Permissões do Calendário', 'locationPermissions': 'Permissões de Localização', 'phone': 'Telefone', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Escrever no Calendário', 'calendarFullAccess': 'Acesso Total ao Calendário', 'locationInfo': 'Informações de Localização', 'phonePermissionDesc': 'Usado para a função de fazer chamadas', 'smsPermissionDesc': 'Usado para a função de enviar SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Usado para criar eventos e lembretes no calendário', 'calendarFullAccessPermissionDesc': @@ -520,28 +1006,90 @@ const Map ptPT = { 'phonePermissionDetailDesc': 'A função de chamada requer permissão de telefone', 'smsPermissionDetailDesc': 'A função de envio de SMS requer permissão de SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'A criação de eventos no calendário requer permissão de escrita no calendário', 'calendarFullAccessPermissionDetailDesc': 'A gestão de eventos no calendário requer permissão total de calendário', 'locationPermissionDetailDesc': 'A obtenção de informações de localização requer permissão de localização', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'A aplicação precisa desta permissão para fornecer funcionalidade completa', 'permanentDenialText': 'Negou permanentemente a permissão de {permission}, por favor, vá às definições da aplicação para a ativar', 'goToSettings': 'Ir para Definições', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Nova Versão Encontrada', - 'remindLater': 'Lembrar Mais Tarde', - 'updateNow': 'Atualizar Agora', - 'checkUpdate': 'Verificar Atualização', - 'updateFailed': 'Atualização Falhou', + 'newVersionFound': 'Nova Versão Encontrada', // 版本更新对话框标题 + 'remindLater': 'Lembrar Mais Tarde', // 稍后提醒按钮 + 'updateNow': 'Atualizar Agora', // 立即更新按钮 + 'checkUpdate': 'Verificar Atualização', // 检查更新按钮 + 'updateFailed': 'Atualização Falhou', // 更新失败提示 'cannotOpenAppStore': - 'Não é possível abrir a loja de aplicações, por favor, vá manualmente à loja de aplicações para atualizar', + 'Não é possível abrir a loja de aplicações, por favor, vá manualmente à loja de aplicações para atualizar', // 无法打开应用商店提示 'updateErrorRetry': - 'Ocorreu um erro durante a atualização, por favor, tente novamente mais tarde', + 'Ocorreu um erro durante a atualização, por favor, tente novamente mais tarde', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -650,8 +1198,23 @@ const Map ptPT = { "东帝汶": "Timor-Leste", "斐济": "Fiji", "所罗门群岛": "Ilhas Salomão", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Histórico de Traduções", "enableRecording": "Ativar Gravação", @@ -660,9 +1223,24 @@ const Map ptPT = { "phoneUser": "Utilizador de Telemóvel", "selectSourceLanguage": "Selecionar idioma de origem", "selectTargetLanguage": "Selecionar idioma de destino", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", - // 翻译历史页 (translation_history_view.dart) + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", + + // 翻译历史页 "noTranslationHistory": "Ainda não há histórico", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Limpar Histórico", "clearHistoryConfirm": "Tem a certeza que quer limpar todo o histórico de traduções? Esta ação não pode ser revertida.", @@ -671,7 +1249,58 @@ const Map ptPT = { "deleteSessionConfirm": "Tem a certeza que quer eliminar todos os registos de tradução desta sessão? Esta ação não pode ser revertida.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Traduzir Ficheiros de Áudio", "noAudioFiles": "Ainda não há ficheiros de áudio", "calculating": "A calcular...", @@ -717,7 +1346,7 @@ const Map ptPT = { "autoInputCode": "Introdução automática do código", "skipBinding": "Saltar Vinculação", "rescan": "Digitalizar Novamente", - "skip": "Saltar", + "verifyingDevice": "A verificar dispositivo...", "confirmBinding": "Confirmar Vinculação", "associatingDevice": "A associar dispositivo...", @@ -750,12 +1379,17 @@ const Map ptPT = { "pairingFailedRetry": "Falha no emparelhamento, tente novamente", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Por favor, ative o Bluetooth', 'deviceDisconnected': 'Dispositivo desconectado', 'readyToStartPairing': 'Pronto para iniciar o emparelhamento', 'checkingEnvironment': 'A verificar ambiente...', 'ensureHeadsetOnAndPairingMode': 'Certifique-se de que os auriculares estão ligados e em modo de emparelhamento', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'A estabelecer conexão segura...', 'needManualBindingAuthCode': 'É necessário um código de autorização de vinculação manual...', @@ -779,6 +1413,19 @@ const Map ptPT = { 'deviceAuthorizationFailedCheckCode': 'Falha na autorização do dispositivo, verifique o código de autorização', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Feedback do Utilizador", 'feedbackInfo': 'Forneça feedback ou sugestões', @@ -807,6 +1454,13 @@ const Map ptPT = { "connectionFailed": "Falha na Conexão", "retryConnection": "Tentar Conectar Novamente", "ota_updateNow": "Atualizar Agora", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Mantenha o dispositivo conectado, não feche a aplicação", "doNotDisconnect": "Não desconecte", @@ -816,11 +1470,11 @@ const Map ptPT = { "Retire ambos os auriculares e certifique-se de que a bateria de ambos está acima de 20%", // 音乐列表页面 - "noMusic": "Sem Música", - "noPlayingMusic": "Nenhuma música a tocar", - "unknownSong": "Música Desconhecida", - "unknownArtist": "Artista Desconhecido", - "playAll": "Tocar Todas", + "noMusic": "Sem Música", // 暂无音乐 + "noPlayingMusic": "Nenhuma música a tocar", // 暂无播放音乐 + "unknownSong": "Música Desconhecida", // 未知歌曲 + "unknownArtist": "Artista Desconhecido", // 未知歌手 + "playAll": "Tocar Todas", // 播放全部 // 语言名称 "中文(简体)": "Chinês (Simplificado)", @@ -862,90 +1516,23 @@ const Map ptPT = { "乌尔都语": "Urdu", "波斯语": "Persa", "斯瓦希里语": "Suaíli", - // Guide overlay keys (placeholders in English) - "sayLilyHint": "Say \"Lily Lily\" to the mic", - "imHere": "I’m here~", - "guideWelcomeWakeAI": "Welcome to Voitrans! First, wake your AI “Lily”.", - "aiReplyCompleted": "Lily has finished the reply!", - "aiThinking": "Lily is thinking…", - "guideAwakenSuccess": "Great! Lily is awake—ask it to help.", - "confirmInput": "Confirm Input", - "guideClickSendPrefix": "Tap send, ", - "guideWeatherStart": "Tell Lily: “What’s the weather today?”", - "guideWeatherInput": "What’s the weather today?", - "guideWeatherSend": "Lily will report the weather in real time", - "guideWeatherEnd": "Lily can report weather live—try other commands", - "guideMusicStart": "Tell Lily: “Play some rock music”", - "guideMusicInput": "Play some rock music", - "guideMusicSend": "Lily will find music for you", - "guideMusicEnd": "Lily found music—try other commands", - "guideNavStart": "Tell Lily: “Navigate to Shenzhen Airport”", - "guideNavInput": "Navigate to Shenzhen Airport", - "guideNavSend": "Lily will plan the route", - "guideNavEnd": "Navigation set—try other commands", - "guideMeetingStart": - "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", - "guideMeetingInput": "Create a meeting reminder for 3pm tomorrow", - "guideMeetingSend": "Lily will create a meeting reminder", - "guideMeetingEnd": "Reminder created—try other commands", - "guidePhoneStart": "Tell Lily: “Call Mom”", - "guidePhoneInput": "Call Mom", - "guidePhoneSend": "Lily will make the call", - "guidePhoneEnd": "Call placed—try other commands", - "guideSmsStart": "Tell Lily: “Send Dad a text: I’ll be home for dinner”", - "guideSmsInput": "Text Dad: I’ll be home for dinner", - "guideSmsSend": "Lily will send the message", - "guideSmsEnd": "Message sent—voice control is convenient", - // Goods pages common footer (placeholders) - 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', - 'copyrightVoitrans': '© 2025 Voitrans Technologies', - // Meeting goods page (placeholders) - 'meetingHeaderDesc1': - 'Audio recording, transcription, keyword search, and auto summary.', - 'meetingHeaderDesc2': - 'Suitable for business meetings, class notes, and interview minutes.', - 'meetingAutoRecording': 'Auto recording and segmentation', - 'meetingSpeakerTagging': 'Speaker labeling', - 'meetingLongAudioTranscription': 'Long audio transcription', - 'meetingKeyPointSummary': 'Key point extraction', - 'meetingTopicNameSearch': 'Search by topic/name', - 'meetingTimelineJump': 'Timeline jump', - 'meetingExportSummary': 'Export minutes', - 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': - 'Use in quiet environments; performance depends on microphone and network.', + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", - // Translation goods page (placeholders) - 'transHeaderDesc1': - 'Interpretação simultânea e tradução de texto em tempo real, com voz de baixa latência.', - 'transHeaderDesc2': 'Adequado para viagens, negócios, palestras e ensino.', - 'translateZhEn': 'Tradução Chinês-Inglês', - 'lowLatencyVoiceBroadcast': 'Transmissão de voz de baixa latência', - 'multiLangTextTranslation': 'Tradução de texto multilingue', - 'termOptimizationContextPreserve': - 'Otimização de terminologia e preservação de contexto', - 'lexiconTourBusinessLife': 'Léxicos de viagem/negócios/vida', - 'personalVocabularyMemory': 'Memória de vocabulário pessoal', - 'conversationSubtitleLargeText': - 'Legendagem de conversas / modo de texto grande', - 'colorHighContrast': 'Alto contraste de cor', - 'transDisclaimer': - 'O desempenho da tradução depende do microfone, da latência da rede e do ruído ambiente.', + //补充 + "insufficientIntegral": "Insufficient integral", - // VIP goods page (placeholders) - 'benefitsOverview': 'Visão geral de benefícios', - 'higherQuota': 'Maior quota de utilização', - 'lowerUnitPrice': 'Preço unitário inferior', - 'priorityService': 'Serviço prioritário', - 'exclusiveSupportChannel': 'Canal de suporte dedicado', - 'fastResponse': 'Resposta rápida a problemas', - 'eventsAndDiscounts': 'Eventos e descontos', - 'memberExclusiveEvents': 'Eventos exclusivos para membros', - 'longTermDiscountPlan': 'Plano de desconto a longo prazo', - 'generalPrivileges': 'Privilégios gerais', - 'earlyAccessNewFeatures': 'Acesso antecipado a novas funcionalidades', - 'crossDeviceSync': 'Sincronização entre dispositivos', - 'vipDisclaimer': - 'Os benefícios reais dependem dos detalhes do pacote e podem mudar entre versões.', + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/ro_ro.dart b/lib/core/translations/language/ro_ro.dart index fe9b4158a..9969fe884 100644 --- a/lib/core/translations/language/ro_ro.dart +++ b/lib/core/translations/language/ro_ro.dart @@ -33,6 +33,7 @@ const Map roRO = { "spanish": "Spaniolă", "portuguese": "Portugheză", "traditionalChinese": "Chineză tradițională", + "traditionalChineseHK": "Chineză tradițională (Hong Kong)", "japanese": "Japoneză", "korean": "Coreeană", "french": "Franceză", @@ -100,12 +101,15 @@ const Map roRO = { "usePasswordLogin": "Autentificare cu parolă", // 隐私政策弹窗 - "loginDeclaration": "Declarația Voitrans", - "welcomeToThisApp": "Bun venit la Voitrans, vă rugăm să citiți cu atenție", + "loginDeclaration": "Declarația Voitrans", // Voitrans 声明 + "welcomeToThisApp": + "Bun venit la Voitrans, vă rugăm să citiți cu atenție", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", apăsând 'De acord și intră' înseamnă că ați citit complet și sunteți de acord cu acordurile de mai sus. Apăsând 'Nu sunt de acord' veți ieși din aplicație.", - "disagree": "Nu sunt de acord", - "agreeAndEnter": "De acord și intră", + ", apăsând 'De acord și intră' înseamnă că ați citit complet și sunteți de acord cu acordurile de mai sus. Apăsând 'Nu sunt de acord' veți ieși din aplicație.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Nu sunt de acord", // 不同意 + "agreeAndEnter": "De acord și intră", // 同意并进入 // 首页 "deviceStatus": "Starea dispozitivului", @@ -188,6 +192,209 @@ const Map roRO = { "usageStats": "Statistici de utilizare", "usageStatsInfo": "Vizualizați istoricul utilizării aplicației", "scene": "Scenariu", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Omite", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Începe ședința", @@ -202,13 +409,244 @@ const Map roRO = { 'aiSummary': 'Rezumat AI', 'meetingTranscript': 'Transcriere ședință', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Setări de sistem", //系统设置 - "vipRecharge": "Recarga Premium", //会员充值 - "aiRecharge": "Membru Premium", //AI充值 - "translationRecharge": "Recarga de traducere", //翻译充值 - "meetingAssistantRecharge": "Recarga de asistent ședință", //会议助手充值 - "cloudSync": "Recarga de sincronizare în cloud", //云端同步 + "systemSettings": "Setări de sistem", + "vipRecharge": "Recarga Premium", + "aiRecharge": "Membru Premium", + "translationRecharge": "Recarga de traducere", + "meetingAssistantRecharge": "Recarga de asistent ședință", + "cloudSync": "Recarga de sincronizare în cloud", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Dispozitiv conectat:", "accountId": "ID cont:", "systemSetting": "Setări de sistem", @@ -220,9 +658,9 @@ const Map roRO = { "lastBackup": "Ultimul backup:", "privacySettings": "Setări de confidențialitate", "privacySettingsInfo": "Gestionați colectarea datelor și permisiunile", - "permissionManagement": "Gestionarea permisiunilor", + "permissionManagement": "Gestionarea permisiunilor", // 权限管理 "permissionManagementInfo": - "Gestionați setările de permisiuni ale aplicației", + "Gestionați setările de permisiuni ale aplicației", // 管理应用权限设置 "aboutApplication": "Despre aplicație", "versions": "Versiune", "checkUpdates": "Verifică actualizări", @@ -257,12 +695,10 @@ const Map roRO = { 'networkErrorRetry': 'Eroare de rețea, reîncercați mai târziu', // 设备管理相关 - 'clearPairedDevices': 'Șterge dispozitivele asociate', - 'clearPairedDevicesConfirm': - 'Sunteți sigur că doriți să ștergeți toate dispozitivele asociate?', - 'clearPairedDevicesSuccess': - 'Dispozitivele asociate au fost șterse cu succes', - 'clearPairedDevicesFailed': 'Ștergerea dispozitivelor asociate a eșuat', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Chat vocal în timp real", @@ -271,11 +707,20 @@ const Map roRO = { "loading": "Se încarcă...", //设备管理页面 - "earphone": "Căști", - "voicerecorder": "Reportofon", - "notBound": "Nelegat", - "deviceNotBoundYet": "Niciun dispozitiv nu este legat încă", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Deleagă", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -305,6 +750,20 @@ const Map roRO = { "loadMoreMessages": "Încarcă mai multe mesaje...", "loadFailedClickRetry": "Încărcare eșuată, faceți clic pentru a reîncerca", "swipeUpForMore": "Glisați în sus pentru mai mult", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Bună! Sunt **Lily**, vă pot ajuta cu:\n\n' @@ -327,8 +786,8 @@ const Map roRO = { 'startPhoneCallMode': 'Începe modul de apel, începe intrarea vocală', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Introduceți mesajul dvs. aici...', - 'characterCount': '{count} caractere', + 'fullScreenEditorHint': 'Introduceți mesajul dvs. aici...', // 全屏编辑器输入提示 + 'characterCount': '{count} caractere', // 字符计数显示 // 消息长按操作 'copy': 'Copiază', @@ -337,6 +796,7 @@ const Map roRO = { 'submitSuccess': 'Trimis cu succes', 'submitFailed': 'Trimitere eșuată', 'reportSubmitted': 'Raport trimis, îl vom procesa în curând', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Dăunător/Periculos', 'pornographicVulgar': 'Pornografic/Vulgar', 'misleadingAttack': 'Înșelător/Atac', @@ -347,6 +807,7 @@ const Map roRO = { 'other': 'Altele', 'reportDescriptionHint': 'Dorim să știm de ce raportați, puteți descrie problema pe care ați întâmpinat-o.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Generat de AI', @@ -357,15 +818,15 @@ const Map roRO = { 'moreMusic': 'Mai multă muzică', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'ore', - 'minutes': 'minute', - 'seconds': 'secunde', - 'navigating': 'Navigare', - 'currentLocation': 'Locație curentă', - 'approximate': 'Aprox.', - 'enterRoad': 'Intră pe drum', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'ore', // 小时单位 + 'minutes': 'minute', // 分钟单位 + 'seconds': 'secunde', // 秒单位 + 'navigating': 'Navigare', // 导航状态 + 'currentLocation': 'Locație curentă', // 当前位置 + 'approximate': 'Aprox.', // 大约 + 'enterRoad': 'Intră pe drum', // 进入道路 "driving": "Cu mașina", "walking": "Pe jos", "bicycling": "Cu bicicleta", @@ -401,6 +862,17 @@ const Map roRO = { "friday": "Vi", "saturday": "Sâ", "sunday": "Du", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Însorit", "partlyCloudy": "Parțial înnorat", @@ -437,6 +909,8 @@ const Map roRO = { 'deleteAccount': 'Șterge contul', 'deleteAccountTips': 'Sunteți sigur că doriți să ștergeți permanent contul? Această acțiune nu poate fi anulată.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -459,6 +933,8 @@ const Map roRO = { 'Eroare internă de server, reîncercați mai târziu', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Comprimarea imaginii a eșuat', 'avatarUpdateFailed': 'Actualizarea avatarului a eșuat', 'usernameCannotBeEmpty': 'Numele de utilizator nu poate fi gol', @@ -471,31 +947,44 @@ const Map roRO = { 'deleteAccountFailedRetry': 'Ștergerea contului a eșuat, reîncercați', // 账号服务相关 - 'clearUserDataFailed': 'Ștergerea datelor de utilizator a eșuat', - 'deleteUserDataFailed': 'Ștergerea datelor de utilizator a eșuat', - 'thirdPartyLogoutSuccess': 'Deconectarea terță parte a reușit', - 'thirdPartyLogoutFailed': 'Deconectarea terță parte a eșuat', + 'clearUserDataFailed': 'Ștergerea datelor de utilizator a eșuat', // 清理用户数据失败 + 'deleteUserDataFailed': 'Ștergerea datelor de utilizator a eșuat', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': 'Deconectarea terță parte a reușit', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'Deconectarea terță parte a eșuat', // 第三方登录退出失败 'signOutProcessError': - 'A apărut o eroare în timpul procesului de deconectare', + 'A apărut o eroare în timpul procesului de deconectare', // 登出过程发生错误 'deleteAccountProcessError': - 'A apărut o eroare în timpul procesului de ștergere a contului', - 'userDataClearSuccess': 'Datele de utilizator au fost șterse cu succes', + 'A apărut o eroare în timpul procesului de ștergere a contului', // 删除账号过程发生错误 + 'userDataClearSuccess': + 'Datele de utilizator au fost șterse cu succes', // 用户数据清理成功 'allUserDataClearSuccess': - 'Toate datele de utilizator au fost șterse cu succes', - 'accountServiceInitialized': 'Serviciul de cont a fost inițializat', + 'Toate datele de utilizator au fost șterse cu succes', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Serviciul de cont a fost inițializat', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Obținerea stării permisiunii a eșuat', 'communicationPermissions': 'Permisiuni de comunicare', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Permisiuni calendar', 'locationPermissions': 'Permisiuni locație', 'phone': 'Telefon', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Scriere în calendar', 'calendarFullAccess': 'Acces complet la calendar', 'locationInfo': 'Informații locație', 'phonePermissionDesc': 'Utilizat pentru funcția de apelare', 'smsPermissionDesc': 'Utilizat pentru funcția de trimitere SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Utilizat pentru crearea de evenimente și memento-uri în calendar', 'calendarFullAccessPermissionDesc': @@ -514,28 +1003,90 @@ const Map roRO = { 'Funcția de apelare necesită permisiunea pentru telefon', 'smsPermissionDetailDesc': 'Funcția de trimitere SMS necesită permisiunea pentru SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Crearea de evenimente în calendar necesită permisiunea de scriere în calendar', 'calendarFullAccessPermissionDetailDesc': 'Gestionarea evenimentelor din calendar necesită permisiunea completă pentru calendar', 'locationPermissionDetailDesc': 'Obținerea informațiilor despre locație necesită permisiunea pentru locație', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Aplicația necesită această permisiune pentru funcționalitate completă', 'permanentDenialText': 'Ați refuzat permanent permisiunea {permission}, vă rugăm să mergeți la setările aplicației pentru a o activa', 'goToSettings': 'Mergeți la setări', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Versiune nouă găsită', - 'remindLater': 'Amintește-mi mai târziu', - 'updateNow': 'Actualizează acum', - 'checkUpdate': 'Verifică actualizări', - 'updateFailed': 'Actualizare eșuată', + 'newVersionFound': 'Versiune nouă găsită', // 版本更新对话框标题 + 'remindLater': 'Amintește-mi mai târziu', // 稍后提醒按钮 + 'updateNow': 'Actualizează acum', // 立即更新按钮 + 'checkUpdate': 'Verifică actualizări', // 检查更新按钮 + 'updateFailed': 'Actualizare eșuată', // 更新失败提示 'cannotOpenAppStore': - 'Nu se poate deschide magazinul de aplicații, mergeți manual la magazin pentru a actualiza', + 'Nu se poate deschide magazinul de aplicații, mergeți manual la magazin pentru a actualiza', // 无法打开应用商店提示 'updateErrorRetry': - 'A apărut o eroare în timpul actualizării, reîncercați mai târziu', + 'A apărut o eroare în timpul actualizării, reîncercați mai târziu', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -644,8 +1195,23 @@ const Map roRO = { "东帝汶": "Timorul de Est", "斐济": "Fiji", "所罗门群岛": "Insulele Solomon", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Istoric traduceri", "enableRecording": "Activează înregistrarea", @@ -654,9 +1220,24 @@ const Map roRO = { "phoneUser": "Utilizator telefon", "selectSourceLanguage": "Selectează limba sursă", "selectTargetLanguage": "Selectează limba țintă", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Niciun istoric", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Șterge istoricul", "clearHistoryConfirm": "Sunteți sigur că doriți să ștergeți tot istoricul traducerilor? Această acțiune nu poate fi anulată.", @@ -665,7 +1246,58 @@ const Map roRO = { "deleteSessionConfirm": "Sunteți sigur că doriți să ștergeți toate înregistrările de traducere pentru această sesiune? Această acțiune nu poate fi anulată.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Tradu fișierele audio", "noAudioFiles": "Niciun fișier audio", "calculating": "Se calculează...", @@ -711,7 +1343,7 @@ const Map roRO = { "autoInputCode": "Introducere automată a codului", "skipBinding": "Omite legarea", "rescan": "Rescanează", - "skip": "Omite", + "verifyingDevice": "Se verifică dispozitivul...", "confirmBinding": "Confirmă legarea", "associatingDevice": "Se asociază dispozitivul...", @@ -743,12 +1375,17 @@ const Map roRO = { "pairingFailedRetry": "Asociere eșuată, reîncercați", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Activați Bluetooth', 'deviceDisconnected': 'Dispozitiv deconectat', 'readyToStartPairing': 'Gata pentru a începe asocierea', 'checkingEnvironment': 'Se verifică mediul...', 'ensureHeadsetOnAndPairingMode': 'Asigurați-vă că căștile sunt pornite și în modul de asociere', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Se stabilește o conexiune sigură...', 'needManualBindingAuthCode': 'Este necesar un cod de autorizare pentru legarea manuală...', @@ -771,6 +1408,19 @@ const Map roRO = { 'deviceAuthorizationFailedCheckCode': 'Autorizarea dispozitivului a eșuat, verificați codul de autorizare', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Feedback utilizator", 'feedbackInfo': 'Oferiți feedback sau sugestii', @@ -800,6 +1450,13 @@ const Map roRO = { "connectionFailed": "Conexiune eșuată", "retryConnection": "Reîncearcă conexiunea", "ota_updateNow": "Actualizează acum", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Mențineți dispozitivul conectat, nu închideți aplicația", "doNotDisconnect": "Nu deconectați", @@ -809,11 +1466,11 @@ const Map roRO = { "Scoateți ambele căști și asigurați-vă că bateria ambelor este peste 20%", // 音乐列表页面 - "noMusic": "Fără muzică", - "noPlayingMusic": "Nicio melodie în redare", - "unknownSong": "Melodie necunoscută", - "unknownArtist": "Artist necunoscut", - "playAll": "Redă tot", + "noMusic": "Fără muzică", // 暂无音乐 + "noPlayingMusic": "Nicio melodie în redare", // 暂无播放音乐 + "unknownSong": "Melodie necunoscută", // 未知歌曲 + "unknownArtist": "Artist necunoscut", // 未知歌手 + "playAll": "Redă tot", // 播放全部 // 语言名称 "中文(简体)": "Chineză (simplificată)", @@ -855,4 +1512,23 @@ const Map roRO = { "乌尔都语": "Urdu", "波斯语": "Persană", "斯瓦希里语": "Swahili", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/ru_ru.dart b/lib/core/translations/language/ru_ru.dart index 95674fdc5..ba935ca20 100644 --- a/lib/core/translations/language/ru_ru.dart +++ b/lib/core/translations/language/ru_ru.dart @@ -33,6 +33,7 @@ const Map ruRU = { "spanish": "Испанский", "portuguese": "Португальский", "traditionalChinese": "Традиционный китайский", + "traditionalChineseHK": "Традиционный китайский (Гонконг)", "japanese": "Японский", "korean": "Корейский", "french": "Французский", @@ -100,13 +101,15 @@ const Map ruRU = { "usePasswordLogin": "Войти с паролем", // 隐私政策弹窗 - "loginDeclaration": "Заявление Voitrans", + "loginDeclaration": "Заявление Voitrans", // Voitrans 声明 "welcomeToThisApp": - "Добро пожаловать в Voitrans, пожалуйста, внимательно прочтите", + "Добро пожаловать в Voitrans, пожалуйста, внимательно прочтите", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", нажатие «Согласен и войти» означает, что вы полностью прочли и согласны с вышеуказанными соглашениями. Нажатие «Не согласен» приведет к выходу из приложения.", - "disagree": "Не согласен", - "agreeAndEnter": "Согласен и войти", + ", нажатие «Согласен и войти» означает, что вы полностью прочли и согласны с вышеуказанными соглашениями. Нажатие «Не согласен» приведет к выходу из приложения.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Не согласен", // 不同意 + "agreeAndEnter": "Согласен и войти", // 同意并进入 // 首页 "deviceStatus": "Статус устройства", @@ -187,15 +190,212 @@ const Map ruRU = { "usageStats": "Статистика использования", "usageStatsInfo": "Просмотрите статистику использования вашего приложения", "scene": "Сценарий", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', 'trans_001_name': 'Перевод Базовый 100', 'trans_002_name': 'Перевод Базовый 500', 'trans_003_name': 'Перевод Базовый 1000', + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', 'trans_001_desc': 'Включает 100 переводов (голос/текст).', 'trans_002_desc': 'Включает 500 переводов (голос/текст).', 'trans_003_desc': 'Включает 1000 переводов (голос/текст).', +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Синхронный перевод и перевод текста в реальном времени с низкой задержкой голосового озвучивания.', + 'transHeaderDesc2': + 'Подходит для путешествий, бизнеса, выступлений и обучения.', + 'translateZhEn': 'Китайско-английский перевод', + 'lowLatencyVoiceBroadcast': 'Голосовое вещание с низкой задержкой', + 'multiLangTextTranslation': 'Многоязычный перевод текста', + 'termOptimizationContextPreserve': + 'Оптимизация терминологии и сохранение контекста', + 'lexiconTourBusinessLife': + 'Лексика для путешествий/бизнеса/повседневной жизни', + 'personalVocabularyMemory': 'Память персонального словаря', + 'conversationSubtitleLargeText': 'Субтитры беседы / режим крупных шрифтов', + 'colorHighContrast': 'Высокая контрастность цветов', + 'transDisclaimer': + 'Качество перевода зависит от микрофона, сетевой задержки и фонового шума.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Обзор преимуществ', + 'higherQuota': 'Более высокая квота использования', + 'lowerUnitPrice': 'Низкая цена за единицу', + 'priorityService': 'Приоритетное обслуживание', + 'exclusiveSupportChannel': 'Выделенный канал поддержки', + 'fastResponse': 'Быстрый отклик на проблемы', + 'eventsAndDiscounts': 'События и скидки', + 'memberExclusiveEvents': 'Эксклюзивные мероприятия для участников', + 'longTermDiscountPlan': 'Долгосрочный план скидок', + 'generalPrivileges': 'Общие привилегии', + 'earlyAccessNewFeatures': 'Ранний доступ к новым функциям', + 'crossDeviceSync': 'Синхронизация между устройствами', + 'vipDisclaimer': + 'Фактические преимущества зависят от деталей пакета и могут меняться с версиями.', + + // 新手引导 / Onboarding + 'skip': "Пропустить", + 'next': 'Next', + 'sayLilyHint': "Say \"Lily Lily\" to the mic", + 'imHere': "I’m here~", + 'guideWelcomeWakeAI': "Welcome to Voitrans! First, wake your AI “Lily”.", + 'aiReplyCompleted': "Lily has finished the reply!", + 'aiThinking': "Lily is thinking…", + 'guideAwakenSuccess': "Great! Lily is awake—ask it to help.", + 'confirmInput': "Confirm Input", + 'guideClickSendPrefix': "Tap send, ", + // AI 引导步骤 + 'guideWeatherStart': "Tell Lily: “What’s the weather today?”", + 'guideWeatherInput': "What’s the weather today?", + 'guideWeatherSend': "Lily will report the weather in real time", + 'guideWeatherEnd': "Lily can report weather live—try other commands", + 'guideMusicStart': "Tell Lily: “Play some rock music”", + 'guideMusicInput': "Play some rock music", + 'guideMusicSend': "Lily will find music for you", + 'guideMusicEnd': "Lily found music—try other commands", + 'guideNavStart': "Tell Lily: “Navigate to Shenzhen Airport”", + 'guideNavInput': "Navigate to Shenzhen Airport", + 'guideNavSend': "Lily will plan the route", + 'guideNavEnd': "Navigation set—try other commands", + 'guideMeetingStart': + "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", + 'guideMeetingInput': "Create a meeting reminder for 3pm tomorrow", + 'guideMeetingSend': "Lily will create a meeting reminder", + 'guideMeetingEnd': "Reminder created—try other commands", + 'guidePhoneStart': "Tell Lily: “Call Mom”", + 'guidePhoneInput': "Call Mom", + 'guidePhoneSend': "Lily will make the call", + 'guidePhoneEnd': "Call placed—try other commands", + 'guideSmsStart': "Tell Lily: “Send Dad a text: I’ll be home for dinner”", + 'guideSmsInput': "Text Dad: I’ll be home for dinner", + 'guideSmsSend': "Lily will send the message", + 'guideSmsEnd': "Message sent—voice control is convenient", + // 商务会议助手页 "startMeeting": "Начать встречу", 'edit': 'Редактировать', @@ -209,13 +409,244 @@ const Map ruRU = { 'aiSummary': 'AI-резюме', 'meetingTranscript': 'Транскрипт встречи', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Системные настройки", //系统设置 - "vipRecharge": "Пополнение премиум-члена", //会员充值 - "aiRecharge": "Премиум-участник", //AI充值 - "translationRecharge": "Пополнение перевода", //翻译充值 - "meetingAssistantRecharge": "Пополнение помощника встречи", //会议助手充值 - "cloudSync": "Пополнение синхронизации в облаке", //云端同步 + "systemSettings": "Системные настройки", + "vipRecharge": "Пополнение премиум-члена", + "aiRecharge": "Премиум-участник", + "translationRecharge": "Пополнение перевода", + "meetingAssistantRecharge": "Пополнение помощника встречи", + "cloudSync": "Пополнение синхронизации в облаке", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Подключенное устройство:", "accountId": "ID аккаунта:", "systemSetting": "Системные настройки", @@ -227,8 +658,9 @@ const Map ruRU = { "lastBackup": "Последнее резервное копирование:", "privacySettings": "Настройки конфиденциальности", "privacySettingsInfo": "Управление сбором данных и разрешениями", - "permissionManagement": "Управление разрешениями", - "permissionManagementInfo": "Управление настройками разрешений приложения", + "permissionManagement": "Управление разрешениями", // 权限管理 + "permissionManagementInfo": + "Управление настройками разрешений приложения", // 管理应用权限设置 "aboutApplication": "О приложении", "versions": "Версия", "checkUpdates": "Проверить обновления", @@ -263,11 +695,10 @@ const Map ruRU = { 'networkErrorRetry': 'Ошибка сети, попробуйте еще раз позже', // 设备管理相关 - 'clearPairedDevices': 'Очистить сопряженные устройства', - 'clearPairedDevicesConfirm': - 'Вы уверены, что хотите очистить все сопряженные устройства?', - 'clearPairedDevicesSuccess': 'Сопряженные устройства успешно очищены', - 'clearPairedDevicesFailed': 'Не удалось очистить сопряженные устройства', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Голосовой чат в реальном времени", @@ -276,11 +707,20 @@ const Map ruRU = { "loading": "Загрузка...", //设备管理页面 - "earphone": "Наушники", - "voicerecorder": "Диктофон", - "notBound": "Не привязано", - "deviceNotBoundYet": "Устройство еще не привязано", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Отвязать", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -309,6 +749,20 @@ const Map ruRU = { "loadMoreMessages": "Загрузить еще сообщения...", "loadFailedClickRetry": "Не удалось загрузить, нажмите, чтобы повторить", "swipeUpForMore": "Проведите пальцем вверх, чтобы увидеть больше", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Привет! Я **СяоЯнь**, я могу вам помочь:\n\n' @@ -331,8 +785,8 @@ const Map ruRU = { 'startPhoneCallMode': 'Начать режим звонка, начать голосовой ввод', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Введите ваше сообщение здесь...', - 'characterCount': '{count} символов', + 'fullScreenEditorHint': 'Введите ваше сообщение здесь...', // 全屏编辑器输入提示 + 'characterCount': '{count} символов', // 字符计数显示 // 消息长按操作 'copy': 'Копировать', @@ -341,6 +795,7 @@ const Map ruRU = { 'submitSuccess': 'Успешно отправлено', 'submitFailed': 'Ошибка отправки', 'reportSubmitted': 'Жалоба отправлена, мы ее рассмотрим в ближайшее время', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Вредный/Небезопасный', 'pornographicVulgar': 'Порнографический/Вульгарный', 'misleadingAttack': 'Вводящий в заблуждение/Атака', @@ -350,6 +805,7 @@ const Map ruRU = { 'other': 'Другое', 'reportDescriptionHint': 'Мы хотим знать причину вашей жалобы, вы можете описать проблему, с которой столкнулись.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Сгенерировано AI', @@ -360,15 +816,15 @@ const Map ruRU = { 'moreMusic': 'Больше музыки', //导航卡片 navigation_card - 'kilometers': 'км', - 'meters': 'м', - 'hours': 'ч', - 'minutes': 'мин', - 'seconds': 'с', - 'navigating': 'Навигация', - 'currentLocation': 'Текущее местоположение', - 'approximate': 'Прибл.', - 'enterRoad': 'Выезд на', + 'kilometers': 'км', // 公里单位 + 'meters': 'м', // 米单位 + 'hours': 'ч', // 小时单位 + 'minutes': 'мин', // 分钟单位 + 'seconds': 'с', // 秒单位 + 'navigating': 'Навигация', // 导航状态 + 'currentLocation': 'Текущее местоположение', // 当前位置 + 'approximate': 'Прибл.', // 大约 + 'enterRoad': 'Выезд на', // 进入道路 "driving": "На машине", "walking": "Пешком", "bicycling": "На велосипеде", @@ -404,6 +860,17 @@ const Map ruRU = { "friday": "Пт", "saturday": "Сб", "sunday": "Вс", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Солнечно", "partlyCloudy": "Переменная облачность", @@ -439,6 +906,8 @@ const Map ruRU = { 'deleteAccount': 'Удалить аккаунт', 'deleteAccountTips': 'Вы уверены, что хотите навсегда удалить свой аккаунт? Это действие необратимо.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -461,6 +930,8 @@ const Map ruRU = { 'Внутренняя ошибка сервера, попробуйте еще раз позже', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Не удалось сжать изображение', 'avatarUpdateFailed': 'Не удалось обновить аватар', 'usernameCannotBeEmpty': "Имя пользователя не может быть пустым", @@ -473,28 +944,44 @@ const Map ruRU = { 'deleteAccountFailedRetry': 'Не удалось удалить аккаунт, попробуйте еще раз', // 账号服务相关 - 'clearUserDataFailed': 'Не удалось очистить данные пользователя', - 'deleteUserDataFailed': 'Не удалось удалить данные пользователя', - 'thirdPartyLogoutSuccess': 'Выход из стороннего сервиса успешен', - 'thirdPartyLogoutFailed': 'Не удалось выйти из стороннего сервиса', - 'signOutProcessError': 'Произошла ошибка во время выхода из системы', - 'deleteAccountProcessError': 'Произошла ошибка во время удаления аккаунта', - 'userDataClearSuccess': 'Данные пользователя успешно очищены', - 'allUserDataClearSuccess': 'Все данные пользователя успешно очищены', - 'accountServiceInitialized': 'Служба аккаунтов инициализирована', + 'clearUserDataFailed': 'Не удалось очистить данные пользователя', // 清理用户数据失败 + 'deleteUserDataFailed': 'Не удалось удалить данные пользователя', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': 'Выход из стороннего сервиса успешен', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': + 'Не удалось выйти из стороннего сервиса', // 第三方登录退出失败 + 'signOutProcessError': + 'Произошла ошибка во время выхода из системы', // 登出过程发生错误 + 'deleteAccountProcessError': + 'Произошла ошибка во время удаления аккаунта', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Данные пользователя успешно очищены', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Все данные пользователя успешно очищены', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Служба аккаунтов инициализирована', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Не удалось получить статус разрешений', 'communicationPermissions': 'Разрешения на связь', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Разрешения календаря', 'locationPermissions': 'Разрешения на местоположение', 'phone': 'Телефон', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Запись в календарь', 'calendarFullAccess': 'Полный доступ к календарю', 'locationInfo': 'Информация о местоположении', 'phonePermissionDesc': 'Используется для совершения звонков', 'smsPermissionDesc': 'Используется для отправки SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Используется для создания событий и напоминаний в календаре', 'calendarFullAccessPermissionDesc': @@ -513,28 +1000,90 @@ const Map ruRU = { 'Для функции звонков требуется разрешение на доступ к телефону', 'smsPermissionDetailDesc': 'Для функции отправки SMS требуется разрешение на доступ к SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Для создания событий в календаре требуется разрешение на запись в календарь', 'calendarFullAccessPermissionDetailDesc': 'Для управления событиями в календаре требуется полный доступ к календарю', 'locationPermissionDetailDesc': 'Для получения информации о местоположении требуется разрешение на доступ к местоположению', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Приложению требуется это разрешение для предоставления полной функциональности', 'permanentDenialText': 'Вы навсегда отказали в доступе к {permission}, пожалуйста, перейдите в настройки приложения, чтобы включить его', 'goToSettings': 'Перейти в настройки', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Найдена новая версия', - 'remindLater': 'Напомнить позже', - 'updateNow': 'Обновить сейчас', - 'checkUpdate': 'Проверить обновления', - 'updateFailed': 'Не удалось обновить', + 'newVersionFound': 'Найдена новая версия', // 版本更新对话框标题 + 'remindLater': 'Напомнить позже', // 稍后提醒按钮 + 'updateNow': 'Обновить сейчас', // 立即更新按钮 + 'checkUpdate': 'Проверить обновления', // 检查更新按钮 + 'updateFailed': 'Не удалось обновить', // 更新失败提示 'cannotOpenAppStore': - 'Не удается открыть App Store, пожалуйста, перейдите в App Store вручную, чтобы обновить', + 'Не удается открыть App Store, пожалуйста, перейдите в App Store вручную, чтобы обновить', // 无法打开应用商店提示 'updateErrorRetry': - 'Произошла ошибка во время обновления, попробуйте еще раз позже', + 'Произошла ошибка во время обновления, попробуйте еще раз позже', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -643,8 +1192,23 @@ const Map ruRU = { "东帝汶": "Восточный Тимор", "斐济": "Фиджи", "所罗门群岛": "Соломоновы Острова", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "История переводов", "enableRecording": "Включить запись", @@ -653,9 +1217,24 @@ const Map ruRU = { "phoneUser": "Пользователь телефона", "selectSourceLanguage": "Выберите исходный язык", "selectTargetLanguage": "Выберите целевой язык", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", - // 翻译历史页 (translation_history_view.dart) + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", + + // 翻译历史页 "noTranslationHistory": "История отсутствует", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Очистить историю", "clearHistoryConfirm": "Вы уверены, что хотите очистить всю историю переводов? Это действие необратимо.", @@ -664,7 +1243,58 @@ const Map ruRU = { "deleteSessionConfirm": "Вы уверены, что хотите удалить все записи переводов этой сессии? Это действие необратимо.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Перевести аудиофайлы", "noAudioFiles": "Аудиофайлы отсутствуют", "calculating": "Вычисление...", @@ -710,7 +1340,7 @@ const Map ruRU = { "autoInputCode": "Автоматический ввод кода", "skipBinding": "Пропустить привязку", "rescan": "Повторное сканирование", - "skip": "Пропустить", + "verifyingDevice": "Проверка устройства...", "confirmBinding": "Подтвердить привязку", "associatingDevice": "Связывание устройства...", @@ -743,12 +1373,17 @@ const Map ruRU = { "pairingFailedRetry": "Не удалось выполнить сопряжение, попробуйте еще раз", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Пожалуйста, включите Bluetooth', 'deviceDisconnected': 'Устройство отключено', 'readyToStartPairing': 'Готово к началу сопряжения', 'checkingEnvironment': 'Проверка среды...', 'ensureHeadsetOnAndPairingMode': 'Убедитесь, что наушники включены и находятся в режиме сопряжения', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Установление безопасного соединения...', 'needManualBindingAuthCode': 'Требуется код авторизации для ручной привязки...', @@ -772,6 +1407,19 @@ const Map ruRU = { 'deviceAuthorizationFailedCheckCode': 'Ошибка авторизации устройства, проверьте код авторизации', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Отзыв пользователя", 'feedbackInfo': 'Оставить отзыв или предложение', @@ -800,6 +1448,13 @@ const Map ruRU = { "connectionFailed": "Ошибка подключения", "retryConnection": "Повторить подключение", "ota_updateNow": "Обновить сейчас", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Пожалуйста, держите устройство подключенным, не закрывайте приложение", "doNotDisconnect": "Пожалуйста, не отключайтесь", @@ -809,11 +1464,11 @@ const Map ruRU = { "Извлеките оба наушника и убедитесь, что уровень заряда батареи в обоих превышает 20%", // 音乐列表页面 - "noMusic": "Нет музыки", - "noPlayingMusic": "Нет воспроизводимой музыки", - "unknownSong": "Неизвестная песня", - "unknownArtist": "Неизвестный исполнитель", - "playAll": "Воспроизвести все", + "noMusic": "Нет музыки", // 暂无音乐 + "noPlayingMusic": "Нет воспроизводимой музыки", // 暂无播放音乐 + "unknownSong": "Неизвестная песня", // 未知歌曲 + "unknownArtist": "Неизвестный исполнитель", // 未知歌手 + "playAll": "Воспроизвести все", // 播放全部 // 语言名称 "中文(简体)": "Китайский (упрощенный)", @@ -855,91 +1510,23 @@ const Map ruRU = { "乌尔都语": "Урду", "波斯语": "Персидский", "斯瓦希里语": "Суахили", - // Guide overlay keys (placeholders in English) - "sayLilyHint": "Say \"Lily Lily\" to the mic", - "imHere": "I’m here~", - "guideWelcomeWakeAI": "Welcome to Voitrans! First, wake your AI “Lily”.", - "aiReplyCompleted": "Lily has finished the reply!", - "aiThinking": "Lily is thinking…", - "guideAwakenSuccess": "Great! Lily is awake—ask it to help.", - "confirmInput": "Confirm Input", - "guideClickSendPrefix": "Tap send, ", - "guideWeatherStart": "Tell Lily: “What’s the weather today?”", - "guideWeatherInput": "What’s the weather today?", - "guideWeatherSend": "Lily will report the weather in real time", - "guideWeatherEnd": "Lily can report weather live—try other commands", - "guideMusicStart": "Tell Lily: “Play some rock music”", - "guideMusicInput": "Play some rock music", - "guideMusicSend": "Lily will find music for you", - "guideMusicEnd": "Lily found music—try other commands", - "guideNavStart": "Tell Lily: “Navigate to Shenzhen Airport”", - "guideNavInput": "Navigate to Shenzhen Airport", - "guideNavSend": "Lily will plan the route", - "guideNavEnd": "Navigation set—try other commands", - "guideMeetingStart": - "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", - "guideMeetingInput": "Create a meeting reminder for 3pm tomorrow", - "guideMeetingSend": "Lily will create a meeting reminder", - "guideMeetingEnd": "Reminder created—try other commands", - "guidePhoneStart": "Tell Lily: “Call Mom”", - "guidePhoneInput": "Call Mom", - "guidePhoneSend": "Lily will make the call", - "guidePhoneEnd": "Call placed—try other commands", - "guideSmsStart": "Tell Lily: “Send Dad a text: I’ll be home for dinner”", - "guideSmsInput": "Text Dad: I’ll be home for dinner", - "guideSmsSend": "Lily will send the message", - "guideSmsEnd": "Message sent—voice control is convenient", - // Goods pages common footer (placeholders) - 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', - 'copyrightVoitrans': '© 2025 Voitrans Technologies', - // Meeting goods page (placeholders) - 'meetingHeaderDesc1': - 'Audio recording, transcription, keyword search, and auto summary.', - 'meetingHeaderDesc2': - 'Suitable for business meetings, class notes, and interview minutes.', - 'meetingAutoRecording': 'Auto recording and segmentation', - 'meetingSpeakerTagging': 'Speaker labeling', - 'meetingLongAudioTranscription': 'Long audio transcription', - 'meetingKeyPointSummary': 'Key point extraction', - 'meetingTopicNameSearch': 'Search by topic/name', - 'meetingTimelineJump': 'Timeline jump', - 'meetingExportSummary': 'Export minutes', - 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': - 'Use in quiet environments; performance depends on microphone and network.', + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", - // Translation goods page (placeholders) - 'transHeaderDesc1': - 'Синхронный перевод и перевод текста в реальном времени с низкой задержкой голосового озвучивания.', - 'transHeaderDesc2': - 'Подходит для путешествий, бизнеса, выступлений и обучения.', - 'translateZhEn': 'Китайско-английский перевод', - 'lowLatencyVoiceBroadcast': 'Голосовое вещание с низкой задержкой', - 'multiLangTextTranslation': 'Многоязычный перевод текста', - 'termOptimizationContextPreserve': - 'Оптимизация терминологии и сохранение контекста', - 'lexiconTourBusinessLife': - 'Лексика для путешествий/бизнеса/повседневной жизни', - 'personalVocabularyMemory': 'Память персонального словаря', - 'conversationSubtitleLargeText': 'Субтитры беседы / режим крупных шрифтов', - 'colorHighContrast': 'Высокая контрастность цветов', - 'transDisclaimer': - 'Качество перевода зависит от микрофона, сетевой задержки и фонового шума.', + //补充 + "insufficientIntegral": "Insufficient integral", - // VIP goods page (placeholders) - 'benefitsOverview': 'Обзор преимуществ', - 'higherQuota': 'Более высокая квота использования', - 'lowerUnitPrice': 'Низкая цена за единицу', - 'priorityService': 'Приоритетное обслуживание', - 'exclusiveSupportChannel': 'Выделенный канал поддержки', - 'fastResponse': 'Быстрый отклик на проблемы', - 'eventsAndDiscounts': 'События и скидки', - 'memberExclusiveEvents': 'Эксклюзивные мероприятия для участников', - 'longTermDiscountPlan': 'Долгосрочный план скидок', - 'generalPrivileges': 'Общие привилегии', - 'earlyAccessNewFeatures': 'Ранний доступ к новым функциям', - 'crossDeviceSync': 'Синхронизация между устройствами', - 'vipDisclaimer': - 'Фактические преимущества зависят от деталей пакета и могут меняться с версиями.', + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/sk_sk.dart b/lib/core/translations/language/sk_sk.dart index 2e33a37ad..80bb2bc57 100644 --- a/lib/core/translations/language/sk_sk.dart +++ b/lib/core/translations/language/sk_sk.dart @@ -33,6 +33,7 @@ const Map skSK = { "spanish": "Španielčina", "portuguese": "Portugalčina", "traditionalChinese": "Tradičná čínština", + "traditionalChineseHK": "Tradičná čínština (Hongkong)", "japanese": "Japončina", "korean": "Kórejčina", "french": "Francúzština", @@ -100,12 +101,15 @@ const Map skSK = { "usePasswordLogin": "Prihlásiť sa heslom", // 隐私政策弹窗 - "loginDeclaration": "Vyhlásenie Voitrans", - "welcomeToThisApp": "Vitajte v Voitrans, prečítajte si prosím pozorne", + "loginDeclaration": "Vyhlásenie Voitrans", // Voitrans 声明 + "welcomeToThisApp": + "Vitajte v Voitrans, prečítajte si prosím pozorne", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", kliknutím na 'Súhlasím a vstúpiť' potvrdzujete, že ste si prečítali a súhlasíte s vyššie uvedenými zmluvami. Kliknutím на 'Nesúhlasím' opustíte aplikáciu.", - "disagree": "Nesúhlasím", - "agreeAndEnter": "Súhlasím a vstúpiť", + ", kliknutím na 'Súhlasím a vstúpiť' potvrdzujete, že ste si prečítali a súhlasíte s vyššie uvedenými zmluvami. Kliknutím на 'Nesúhlasím' opustíte aplikáciu.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Nesúhlasím", // 不同意 + "agreeAndEnter": "Súhlasím a vstúpiť", // 同意并进入 // 首页 "deviceStatus": "Stav zariadenia", @@ -186,6 +190,209 @@ const Map skSK = { "usageStats": "Statistiky využitia", "usageStatsInfo": "Zobrazte vaše využitie aplikácie", "scene": "Scenár", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Preskočiť", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Začať stretnutie", @@ -200,13 +407,244 @@ const Map skSK = { 'aiSummary': 'AI zhrnutie', 'meetingTranscript': 'Prepis stretnutia', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Systémové nastavenia", //系统设置 - "vipRecharge": "Nákup prémium členstva", //会员充值 - "aiRecharge": "Prémium člen", //AI充值 - "translationRecharge": "Nákup prekladov", //翻译充值 - "meetingAssistantRecharge": "Nákup asistentu stretnutia", //会议助手充值 - "cloudSync": "Nákup synchronizácie v cloude", //云端同步 + "systemSettings": "Systémové nastavenia", + "vipRecharge": "Nákup prémium členstva", + "aiRecharge": "Prémium člen", + "translationRecharge": "Nákup prekladov", + "meetingAssistantRecharge": "Nákup asistentu stretnutia", + "cloudSync": "Nákup synchronizácie v cloude", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Pripojené zariadenie:", "accountId": "ID účtu:", "systemSetting": "Systémové nastavenie", @@ -218,8 +656,8 @@ const Map skSK = { "lastBackup": "Posledná záloha:", "privacySettings": "Nastavenia ochrany osobných údajov", "privacySettingsInfo": "Správa zberu údajov a povolení", - "permissionManagement": "Správa povolení", - "permissionManagementInfo": "Správa nastavení povolení aplikácie", + "permissionManagement": "Správa povolení", // 权限管理 + "permissionManagementInfo": "Správa nastavení povolení aplikácie", // 管理应用权限设置 "aboutApplication": "O aplikácii", "versions": "Verzia", "checkUpdates": "Skontrolovať aktualizácie", @@ -254,11 +692,10 @@ const Map skSK = { 'networkErrorRetry': 'Chyba siete, skúste to znova neskôr', // 设备管理相关 - 'clearPairedDevices': 'Vymazať spárované zariadenia', - 'clearPairedDevicesConfirm': - 'Ste si istí, že chcete vymazať všetky spárované zariadenia?', - 'clearPairedDevicesSuccess': 'Spárované zariadenia úspešne vymazané', - 'clearPairedDevicesFailed': 'Vymazanie spárovaných zariadení zlyhalo', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Hlasový chat v reálnom čase", @@ -267,11 +704,20 @@ const Map skSK = { "loading": "Načítava sa...", //设备管理页面 - "earphone": "Slúchadlá", - "voicerecorder": "Diktafón", - "notBound": "Neprepojené", - "deviceNotBoundYet": "Zariadenie ešte nie je prepojené", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Zrušiť prepojenie", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -300,6 +746,20 @@ const Map skSK = { "loadMoreMessages": "Načítať viac správ...", "loadFailedClickRetry": "Načítanie zlyhalo, kliknite pre opakovanie", "swipeUpForMore": "Potiahnite nahor pre viac", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Ahoj! Som **Lily**, môžem vám pomôcť:\n\n' @@ -322,8 +782,8 @@ const Map skSK = { 'startPhoneCallMode': 'Začať režim volania, začať hlasový vstup', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Sem zadajte svoju správu...', - 'characterCount': '{count} znakov', + 'fullScreenEditorHint': 'Sem zadajte svoju správu...', // 全屏编辑器输入提示 + 'characterCount': '{count} znakov', // 字符计数显示 // 消息长按操作 'copy': 'Kopírovať', @@ -332,6 +792,7 @@ const Map skSK = { 'submitSuccess': 'Úspešne odoslané', 'submitFailed': 'Odoslanie zlyhalo', 'reportSubmitted': 'Hlásenie bolo odoslané, spracujeme ho čo najskôr', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Škodlivé/Nebezpečné', 'pornographicVulgar': 'Pornografické/Vulgárne', 'misleadingAttack': 'Zavádzajúce/Útok', @@ -341,6 +802,7 @@ const Map skSK = { 'other': 'Iné', 'reportDescriptionHint': 'Chceme vedieť dôvod vášho hlásenia, môžete opísať problém, s ktorým ste sa stretli.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Vygenerované AI', @@ -351,15 +813,15 @@ const Map skSK = { 'moreMusic': 'Viac hudby', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'hodín', - 'minutes': 'minút', - 'seconds': 'sekúnd', - 'navigating': 'Navigácia', - 'currentLocation': 'Aktuálna poloha', - 'approximate': 'Pribl.', - 'enterRoad': 'Vstúpiť na cestu', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'hodín', // 小时单位 + 'minutes': 'minút', // 分钟单位 + 'seconds': 'sekúnd', // 秒单位 + 'navigating': 'Navigácia', // 导航状态 + 'currentLocation': 'Aktuálna poloha', // 当前位置 + 'approximate': 'Pribl.', // 大约 + 'enterRoad': 'Vstúpiť na cestu', // 进入道路 "driving": "Jazda autom", "walking": "Chôdza", "bicycling": "Bicyklovanie", @@ -394,6 +856,17 @@ const Map skSK = { "friday": "Pi", "saturday": "So", "sunday": "Ne", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Slnečno", "partlyCloudy": "Polooblačno", @@ -429,6 +902,8 @@ const Map skSK = { 'deleteAccount': 'Odstrániť účet', 'deleteAccountTips': 'Ste si istí, že chcete natrvalo odstrániť svoj účet? Túto akciu nie je možné vrátiť späť.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -449,6 +924,8 @@ const Map skSK = { 'Interná chyba servera, skúste to znova neskôr', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Kompresia obrázka zlyhala', 'avatarUpdateFailed': 'Aktualizácia avatara zlyhala', 'usernameCannotBeEmpty': 'Používateľské meno nemôže byť prázdne', @@ -461,29 +938,44 @@ const Map skSK = { 'deleteAccountFailedRetry': 'Odstránenie účtu zlyhalo, skúste to znova', // 账号服务相关 - 'clearUserDataFailed': 'Vymazanie používateľských údajov zlyhalo', - 'deleteUserDataFailed': 'Odstránenie používateľských údajov zlyhalo', - 'thirdPartyLogoutSuccess': 'Odhlásenie tretej strany úspešné', - 'thirdPartyLogoutFailed': 'Odhlásenie tretej strany zlyhalo', - 'signOutProcessError': 'Počas procesu odhlásenia sa vyskytla chyba', + 'clearUserDataFailed': 'Vymazanie používateľských údajov zlyhalo', // 清理用户数据失败 + 'deleteUserDataFailed': + 'Odstránenie používateľských údajov zlyhalo', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': 'Odhlásenie tretej strany úspešné', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'Odhlásenie tretej strany zlyhalo', // 第三方登录退出失败 + 'signOutProcessError': + 'Počas procesu odhlásenia sa vyskytla chyba', // 登出过程发生错误 'deleteAccountProcessError': - 'Počas procesu odstraňovania účtu sa vyskytla chyba', - 'userDataClearSuccess': 'Používateľské údaje úspešne vymazané', - 'allUserDataClearSuccess': 'Všetky používateľské údaje úspešne vymazané', - 'accountServiceInitialized': 'Služba účtu bola inicializovaná', + 'Počas procesu odstraňovania účtu sa vyskytla chyba', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Používateľské údaje úspešne vymazané', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Všetky používateľské údaje úspešne vymazané', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Služba účtu bola inicializovaná', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Získanie stavu povolenia zlyhalo', 'communicationPermissions': 'Komunikačné povolenia', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Povolenia kalendára', 'locationPermissions': 'Povolenia polohy', 'phone': 'Telefón', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Zápis do kalendára', 'calendarFullAccess': 'Plný prístup ku kalendáru', 'locationInfo': 'Informácie o polohe', 'phonePermissionDesc': 'Používa sa pre funkciu volania', 'smsPermissionDesc': 'Používa sa pre funkciu odosielania SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Používa sa na vytváranie udalostí a pripomienok v kalendári', 'calendarFullAccessPermissionDesc': @@ -501,28 +993,90 @@ const Map skSK = { 'phonePermissionDetailDesc': 'Funkcia volania vyžaduje povolenie pre telefón', 'smsPermissionDetailDesc': 'Funkcia odosielania SMS vyžaduje povolenie pre SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Vytváranie udalostí v kalendári vyžaduje povolenie na zápis do kalendára', 'calendarFullAccessPermissionDetailDesc': 'Správa udalostí v kalendári vyžaduje úplné povolenie pre kalendár', 'locationPermissionDetailDesc': 'Získanie informácií o polohe vyžaduje povolenie pre polohu', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Aplikácia vyžaduje toto povolenie pre plnú funkčnosť', 'permanentDenialText': 'Trvalo ste odmietli povolenie {permission}, prejdite do nastavení aplikácie, aby ste ho povolili', 'goToSettings': 'Prejsť do nastavení', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Nájdená nová verzia', - 'remindLater': 'Pripomenúť neskôr', - 'updateNow': 'Aktualizovať teraz', - 'checkUpdate': 'Skontrolovať aktualizácie', - 'updateFailed': 'Aktualizácia zlyhala', + 'newVersionFound': 'Nájdená nová verzia', // 版本更新对话框标题 + 'remindLater': 'Pripomenúť neskôr', // 稍后提醒按钮 + 'updateNow': 'Aktualizovať teraz', // 立即更新按钮 + 'checkUpdate': 'Skontrolovať aktualizácie', // 检查更新按钮 + 'updateFailed': 'Aktualizácia zlyhala', // 更新失败提示 'cannotOpenAppStore': - 'Nie je možné otvoriť obchod s aplikáciami, prejdite do obchodu manuálne a aktualizujte', + 'Nie je možné otvoriť obchod s aplikáciami, prejdite do obchodu manuálne a aktualizujte', // 无法打开应用商店提示 'updateErrorRetry': - 'Počas aktualizácie sa vyskytla chyba, skúste to znova neskôr', + 'Počas aktualizácie sa vyskytla chyba, skúste to znova neskôr', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -631,8 +1185,23 @@ const Map skSK = { "东帝汶": "Východný Timor", "斐济": "Fidži", "所罗门群岛": "Šalamúnove ostrovy", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "História prekladov", "enableRecording": "Povoliť nahrávanie", @@ -641,9 +1210,24 @@ const Map skSK = { "phoneUser": "Používateľ telefónu", "selectSourceLanguage": "Vyberte zdrojový jazyk", "selectTargetLanguage": "Vyberte cieľový jazyk", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Žiadna história", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Vymazať históriu", "clearHistoryConfirm": "Ste si istí, že chcete vymazať celú históriu prekladov? Túto akciu nie je možné vrátiť späť.", @@ -652,7 +1236,58 @@ const Map skSK = { "deleteSessionConfirm": "Ste si istí, že chcete odstrániť všetky záznamy prekladov pre túto reláciu? Túto akciu nie je možné vrátiť späť.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Preložiť zvukové súbory", "noAudioFiles": "Žiadne zvukové súbory", "calculating": "Vypočítava sa...", @@ -698,7 +1333,7 @@ const Map skSK = { "autoInputCode": "Automatické zadanie kódu", "skipBinding": "Preskočiť prepojenie", "rescan": "Znova skenovať", - "skip": "Preskočiť", + "verifyingDevice": "Overuje sa zariadenie...", "confirmBinding": "Potvrdiť prepojenie", "associatingDevice": "Priraďuje sa zariadenie...", @@ -730,12 +1365,17 @@ const Map skSK = { "pairingFailedRetry": "Párovanie zlyhalo, skúste to znova", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Zapnite Bluetooth', 'deviceDisconnected': 'Zariadenie odpojené', 'readyToStartPairing': 'Pripravené na začatie párovania', 'checkingEnvironment': 'Kontrola prostredia...', 'ensureHeadsetOnAndPairingMode': 'Uistite sa, že sú slúchadlá zapnuté a v režime párovania', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Vytvára sa bezpečné pripojenie...', 'needManualBindingAuthCode': 'Vyžaduje sa kód pre autorizáciu manuálneho prepojenia...', @@ -758,6 +1398,19 @@ const Map skSK = { 'deviceAuthorizationFailedCheckCode': 'Autorizácia zariadenia zlyhala, skontrolujte autorizačný kód', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Spätná väzba používateľa", 'feedbackInfo': 'Poskytnite spätnú väzbu alebo návrhy', @@ -787,6 +1440,13 @@ const Map skSK = { "connectionFailed": "Pripojenie zlyhalo", "retryConnection": "Znova pripojiť", "ota_updateNow": "Aktualizovať teraz", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Udržujte zariadenie pripojené, nezatvárajte aplikáciu", "doNotDisconnect": "Neodpájajte", @@ -796,11 +1456,11 @@ const Map skSK = { "Vyberte obe slúchadlá a uistite sa, že batéria oboch je nad 20%", // 音乐列表页面 - "noMusic": "Žiadna hudba", - "noPlayingMusic": "Neprehráva sa žiadna hudba", - "unknownSong": "Neznáma pieseň", - "unknownArtist": "Neznámy interpret", - "playAll": "Prehrať všetko", + "noMusic": "Žiadna hudba", // 暂无音乐 + "noPlayingMusic": "Neprehráva sa žiadna hudba", // 暂无播放音乐 + "unknownSong": "Neznáma pieseň", // 未知歌曲 + "unknownArtist": "Neznámy interpret", // 未知歌手 + "playAll": "Prehrať všetko", // 播放全部 // 语言名称 "中文(简体)": "Čínština (zjednodušená)", @@ -842,4 +1502,23 @@ const Map skSK = { "乌尔都语": "Urdčina", "波斯语": "Perzština", "斯瓦希里语": "Svahilčina", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/sl_si.dart b/lib/core/translations/language/sl_si.dart index 4bd16b7b9..bc70cfd3c 100644 --- a/lib/core/translations/language/sl_si.dart +++ b/lib/core/translations/language/sl_si.dart @@ -33,6 +33,7 @@ const Map slSI = { "spanish": "Španščina", "portuguese": "Portugalščina", "traditionalChinese": "Tradicionalna kitajščina", + "traditionalChineseHK": "Tradicionalna kitajščina (Hongkong)", "japanese": "Japonščina", "korean": "Korejščina", "french": "Francoščina", @@ -100,12 +101,15 @@ const Map slSI = { "usePasswordLogin": "Prijava z geslom", // 隐私政策弹窗 - "loginDeclaration": "Izjava Voitrans", - "welcomeToThisApp": "Dobrodošli v Voitrans, prosimo, da natančno preberete", + "loginDeclaration": "Izjava Voitrans", // Voitrans 声明 + "welcomeToThisApp": + "Dobrodošli v Voitrans, prosimo, da natančno preberete", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", s klikom na 'Strinjam se in vstopi' potrjujete, da ste v celoti prebrali in se strinjate z zgoraj navedenimi sporazumi. S klikom na 'Ne strinjam se' boste zapustili aplikacijo.", - "disagree": "Ne strinjam se", - "agreeAndEnter": "Strinjam se in vstopi", + ", s klikom na 'Strinjam se in vstopi' potrjujete, da ste v celoti prebrali in se strinjate z zgoraj navedenimi sporazumi. S klikom na 'Ne strinjam se' boste zapustili aplikacijo.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Ne strinjam se", // 不同意 + "agreeAndEnter": "Strinjam se in vstopi", // 同意并进入 // 首页 "deviceStatus": "Stanje naprave", @@ -186,6 +190,209 @@ const Map slSI = { "usageStats": "Statistika uporabe", "usageStatsInfo": "Pregledajte vaše uporabo aplikacije", "scene": "Scenarij", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Preskoči", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Začni sestanek", @@ -200,13 +407,244 @@ const Map slSI = { 'aiSummary': 'Povzetek AI', 'meetingTranscript': 'Prepis sestanka', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Sistemske nastavitve", //系统设置 - "vipRecharge": "Nákup premium člana", //会员充值 - "aiRecharge": "Premium član", //AI充值 - "translationRecharge": "Nákup prevajanja", //翻译充值 - "meetingAssistantRecharge": "Nákup asistenta sestanka", //会议助手充值 - "cloudSync": "Nákup sinkronizacije v oblaku", //云端同步 + "systemSettings": "Sistemske nastavitve", + "vipRecharge": "Nákup premium člana", + "aiRecharge": "Premium član", + "translationRecharge": "Nákup prevajanja", + "meetingAssistantRecharge": "Nákup asistenta sestanka", + "cloudSync": "Nákup sinkronizacije v oblaku", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Povezana naprava:", "accountId": "ID računa:", "systemSetting": "Sistemska nastavitev", @@ -218,8 +656,9 @@ const Map slSI = { "lastBackup": "Zadnja varnostna kopija:", "privacySettings": "Nastavitve zasebnosti", "privacySettingsInfo": "Upravljanje zbiranja podatkov in dovoljenj", - "permissionManagement": "Upravljanje dovoljenj", - "permissionManagementInfo": "Upravljanje nastavitev dovoljenj aplikacije", + "permissionManagement": "Upravljanje dovoljenj", // 权限管理 + "permissionManagementInfo": + "Upravljanje nastavitev dovoljenj aplikacije", // 管理应用权限设置 "aboutApplication": "O aplikaciji", "versions": "Različica", "checkUpdates": "Preveri posodobitve", @@ -255,11 +694,10 @@ const Map slSI = { 'networkErrorRetry': 'Napaka v omrežju, poskusite znova kasneje', // 设备管理相关 - 'clearPairedDevices': 'Počisti seznanjene naprave', - 'clearPairedDevicesConfirm': - 'Ali ste prepričani, da želite počistiti vse seznanjene naprave?', - 'clearPairedDevicesSuccess': 'Seznanjene naprave uspešno počiščene', - 'clearPairedDevicesFailed': 'Čiščenje seznanjenih naprav ni uspelo', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Glasovni klepet v realnem času", @@ -268,11 +706,20 @@ const Map slSI = { "loading": "Nalaganje...", //设备管理页面 - "earphone": "Slušalke", - "voicerecorder": "Snemalnik zvoka", - "notBound": "Ni povezan", - "deviceNotBoundYet": "Naprava še ni povezana", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Prekini povezavo", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -301,6 +748,20 @@ const Map slSI = { "loadMoreMessages": "Naloži več sporočil...", "loadFailedClickRetry": "Nalaganje ni uspelo, kliknite za ponovni poskus", "swipeUpForMore": "Povlecite navzgor za več", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Živjo! Sem **Lily**, lahko vam pomagam:\n\n' @@ -323,8 +784,8 @@ const Map slSI = { 'startPhoneCallMode': 'Začni način klicanja, začni glasovni vnos', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Tukaj vnesite svoje sporočilo...', - 'characterCount': '{count} znakov', + 'fullScreenEditorHint': 'Tukaj vnesite svoje sporočilo...', // 全屏编辑器输入提示 + 'characterCount': '{count} znakov', // 字符计数显示 // 消息长按操作 'copy': 'Kopiraj', @@ -334,6 +795,7 @@ const Map slSI = { 'submitFailed': 'Pošiljanje ni uspelo', 'reportSubmitted': 'Prijava je bila poslana, obdelali jo bomo v najkrajšem možnem času', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Škodljivo/Nevarno', 'pornographicVulgar': 'Pornografsko/Vulgarno', 'misleadingAttack': 'Zavajajoče/Napad', @@ -343,6 +805,7 @@ const Map slSI = { 'other': 'Drugo', 'reportDescriptionHint': 'Želimo vedeti, zakaj prijavljate, lahko opišete težavo, s katero ste se soočili.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Generirano s strani AI', @@ -353,15 +816,15 @@ const Map slSI = { 'moreMusic': 'Več glasbe', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'ur', - 'minutes': 'minut', - 'seconds': 'sekund', - 'navigating': 'Navigacija', - 'currentLocation': 'Trenutna lokacija', - 'approximate': 'Pribl.', - 'enterRoad': 'Vstopi na cesto', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'ur', // 小时单位 + 'minutes': 'minut', // 分钟单位 + 'seconds': 'sekund', // 秒单位 + 'navigating': 'Navigacija', // 导航状态 + 'currentLocation': 'Trenutna lokacija', // 当前位置 + 'approximate': 'Pribl.', // 大约 + 'enterRoad': 'Vstopi na cesto', // 进入道路 "driving": 'Vožnja', "walking": 'Hoja', "bicycling": 'Kolesarjenje', @@ -397,6 +860,17 @@ const Map slSI = { "friday": "Pet", "saturday": "Sob", "sunday": "Ned", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Sončno", "partlyCloudy": "Delno oblačno", @@ -433,6 +907,8 @@ const Map slSI = { 'deleteAccount': 'Izbriši račun', 'deleteAccountTips': 'Ali ste prepričani, da želite trajno izbrisati svoj račun? Tega dejanja ni mogoče razveljaviti', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -453,6 +929,8 @@ const Map slSI = { 'Notranja napaka strežnika, poskusite znova kasneje', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Stiskanje slike ni uspelo', 'avatarUpdateFailed': 'Posodobitev avatarja ni uspela', 'usernameCannotBeEmpty': 'Uporabniško ime ne sme biti prazno', @@ -465,29 +943,43 @@ const Map slSI = { 'deleteAccountFailedRetry': 'Brisanje računa ni uspelo, poskusite znova', // 账号服务相关 - 'clearUserDataFailed': 'Čiščenje uporabniških podatkov ni uspelo', - 'deleteUserDataFailed': 'Brisanje uporabniških podatkov ni uspelo', - 'thirdPartyLogoutSuccess': 'Odjava tretje osebe uspela', - 'thirdPartyLogoutFailed': 'Odjava tretje osebe ni uspela', - 'signOutProcessError': 'Prišlo je do napake med postopkom odjave', + 'clearUserDataFailed': 'Čiščenje uporabniških podatkov ni uspelo', // 清理用户数据失败 + 'deleteUserDataFailed': + 'Brisanje uporabniških podatkov ni uspelo', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': 'Odjava tretje osebe uspela', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'Odjava tretje osebe ni uspela', // 第三方登录退出失败 + 'signOutProcessError': 'Prišlo je do napake med postopkom odjave', // 登出过程发生错误 'deleteAccountProcessError': - 'Prišlo je do napake med postopkom brisanja računa', - 'userDataClearSuccess': 'Uporabniški podatki uspešno počiščeni', - 'allUserDataClearSuccess': 'Vsi uporabniški podatki uspešno počiščeni', - 'accountServiceInitialized': 'AccountService je bil inicializiran', + 'Prišlo je do napake med postopkom brisanja računa', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Uporabniški podatki uspešno počiščeni', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Vsi uporabniški podatki uspešno počiščeni', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'AccountService je bil inicializiran', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Pridobivanje stanja dovoljenja ni uspelo', 'communicationPermissions': 'Dovoljenja za komunikacijo', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Dovoljenja za koledar', 'locationPermissions': 'Dovoljenja za lokacijo', 'phone': 'Telefon', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Pisanje v koledar', 'calendarFullAccess': 'Poln dostop do koledarja', 'locationInfo': 'Informacije o lokaciji', 'phonePermissionDesc': 'Uporablja se za funkcijo klicanja', 'smsPermissionDesc': 'Uporablja se za funkcijo pošiljanja SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Uporablja se za ustvarjanje dogodkov in opomnikov v koledarju', 'calendarFullAccessPermissionDesc': @@ -506,28 +998,90 @@ const Map slSI = { 'Funkcija klicanja zahteva dovoljenje za telefon', 'smsPermissionDetailDesc': 'Funkcija pošiljanja SMS zahteva dovoljenje za SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Ustvarjanje dogodkov v koledarju zahteva dovoljenje za pisanje v koledar', 'calendarFullAccessPermissionDetailDesc': 'Upravljanje dogodkov v koledarju zahteva polno dovoljenje za koledar', 'locationPermissionDetailDesc': 'Pridobivanje informacij o lokaciji zahteva dovoljenje za lokacijo', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Aplikacija zahteva to dovoljenje za polno funkcionalnost', 'permanentDenialText': 'Trajno ste zavrnili dovoljenje za {permission}, pojdite v nastavitve aplikacije, da ga omogočite', 'goToSettings': 'Pojdi na nastavitve', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Najdena nova različica', - 'remindLater': 'Opomni me kasneje', - 'updateNow': 'Posodobi zdaj', - 'checkUpdate': 'Preveri posodobitve', - 'updateFailed': 'Posodobitev ni uspela', + 'newVersionFound': 'Najdena nova različica', // 版本更新对话框标题 + 'remindLater': 'Opomni me kasneje', // 稍后提醒按钮 + 'updateNow': 'Posodobi zdaj', // 立即更新按钮 + 'checkUpdate': 'Preveri posodobitve', // 检查更新按钮 + 'updateFailed': 'Posodobitev ni uspela', // 更新失败提示 'cannotOpenAppStore': - 'Ni mogoče odpreti trgovine z aplikacijami, pojdite ročno v trgovino, da posodobite', + 'Ni mogoče odpreti trgovine z aplikacijami, pojdite ročno v trgovino, da posodobite', // 无法打开应用商店提示 'updateErrorRetry': - 'Prišlo je do napake med posodabljanjem, poskusite znova kasneje', + 'Prišlo je do napake med posodabljanjem, poskusite znova kasneje', // 更新错误重试提示 //国家列表 "邮箱": "E-pošta", @@ -636,8 +1190,23 @@ const Map slSI = { "东帝汶": "Vzhodni Timor", "斐济": "Fidži", "所罗门群岛": "Salomonovi otoki", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Zgodovina prevodov", "enableRecording": "Omogoči snemanje", @@ -646,9 +1215,24 @@ const Map slSI = { "phoneUser": "Uporabnik telefona", "selectSourceLanguage": "Izberi izvorni jezik", "selectTargetLanguage": "Izberi ciljni jezik", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Ni zgodovine", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Počisti zgodovino", "clearHistoryConfirm": "Ali ste prepričani, da želite počistiti vso zgodovino prevodov? Tega dejanja ni mogoče razveljaviti.", @@ -657,7 +1241,58 @@ const Map slSI = { "deleteSessionConfirm": "Ali ste prepričani, da želite izbrisati vse zapise prevodov za to sejo? Tega dejanja ni mogoče razveljaviti.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Prevedi zvočne datoteke", "noAudioFiles": "Ni zvočnih datotek", "calculating": "Izračunavanje...", @@ -703,7 +1338,7 @@ const Map slSI = { "autoInputCode": "Samodejni vnos kode", "skipBinding": "Preskoči povezavo", "rescan": "Ponovno skeniraj", - "skip": "Preskoči", + "verifyingDevice": "Preverjanje naprave...", "confirmBinding": "Potrdi povezavo", "associatingDevice": "Povezovanje naprave...", @@ -735,12 +1370,17 @@ const Map slSI = { "pairingFailedRetry": "Seznanjanje ni uspelo, poskusite znova", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Omogočite Bluetooth', 'deviceDisconnected': 'Naprava je bila odklopljena', 'readyToStartPairing': 'Pripravljen za začetek seznanjanja', 'checkingEnvironment': 'Preverjanje okolja...', 'ensureHeadsetOnAndPairingMode': 'Prepričajte se, da so slušalke vklopljene in v načinu seznanjanja', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Vzpostavljanje varne povezave...', 'needManualBindingAuthCode': 'Potrebna je koda za avtorizacijo ročne povezave...', @@ -764,6 +1404,19 @@ const Map slSI = { 'deviceAuthorizationFailedCheckCode': 'Avtorizacija naprave ni uspela, preverite avtorizacijsko kodo', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Povratne informacije uporabnikov", 'feedbackInfo': 'Podajte povratne informacije ali predloge', @@ -792,6 +1445,13 @@ const Map slSI = { "connectionFailed": "Povezava ni uspela", "retryConnection": "Ponovno poskusi povezati", "ota_updateNow": "Posodobi zdaj", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Ohranite napravo povezano, ne zapirajte aplikacije", "doNotDisconnect": "Ne prekinjajte povezave", @@ -801,11 +1461,11 @@ const Map slSI = { "Odstranite obe slušalki in se prepričajte, da je baterija obeh nad 20%", // 音乐列表页面 - "noMusic": "Ni glasbe", - "noPlayingMusic": "Ni predvajane glasbe", - "unknownSong": "Neznana pesem", - "unknownArtist": "Neznan izvajalec", - "playAll": "Predvajaj vse", + "noMusic": "Ni glasbe", // 暂无音乐 + "noPlayingMusic": "Ni predvajane glasbe", // 暂无播放音乐 + "unknownSong": "Neznana pesem", // 未知歌曲 + "unknownArtist": "Neznan izvajalec", // 未知歌手 + "playAll": "Predvajaj vse", // 播放全部 // 语言名称 "中文(简体)": "Kitajščina (poenostavljena)", @@ -847,4 +1507,23 @@ const Map slSI = { "乌尔都语": "Urdujščina", "波斯语": "Perzijščina", "斯瓦希里语": "Svahilščina", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/sr_rs.dart b/lib/core/translations/language/sr_rs.dart index 6dd585a23..bf2feb6b0 100644 --- a/lib/core/translations/language/sr_rs.dart +++ b/lib/core/translations/language/sr_rs.dart @@ -33,6 +33,7 @@ const Map srRS = { "spanish": "Španski", "portuguese": "Portugalski", "traditionalChinese": "Tradicionalni kineski", + "traditionalChineseHK": "Tradicionalni kineski (Hong Kong)", "japanese": "Japanski", "korean": "Korejski", "french": "Francuski", @@ -99,12 +100,15 @@ const Map srRS = { "usePasswordLogin": "Prijavi se lozinkom", // 隐私政策弹窗 - "loginDeclaration": "Voitrans izjava", - "welcomeToThisApp": "Dobrodošli u Voitrans, molimo vas da pažljivo pročitate", + "loginDeclaration": "Voitrans izjava", // Voitrans 声明 + "welcomeToThisApp": + "Dobrodošli u Voitrans, molimo vas da pažljivo pročitate", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", klikom na 'Slažem se i ulazim' potvrđujete da ste u potpunosti pročitali i da se slažete sa gore navedenim ugovorima. Klikom na 'Ne slažem se' izaći ćete iz aplikacije.", - "disagree": "Ne slažem se", - "agreeAndEnter": "Slažem se i ulazim", + ", klikom na 'Slažem se i ulazim' potvrđujete da ste u potpunosti pročitali i da se slažete sa gore navedenim ugovorima. Klikom na 'Ne slažem se' izaći ćete iz aplikacije.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Ne slažem se", // 不同意 + "agreeAndEnter": "Slažem se i ulazim", // 同意并进入 // 首页 "deviceStatus": "Status uređaja", @@ -185,6 +189,209 @@ const Map srRS = { "usageStats": "Statistika korišćenja", "usageStatsInfo": "Pregledajte vaše korišćenje aplikacije", "scene": "Scena", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Preskoči", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Započni sastanak", @@ -199,13 +406,244 @@ const Map srRS = { 'aiSummary': 'AI sažetak', 'meetingTranscript': 'Transkript sastanka', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Sistemska podešavanja", //系统设置 - "vipRecharge": "Nákup premium člana", //会员充值 - "aiRecharge": "Premium član", //AI充值 - "translationRecharge": "Nákup prevajanja", //翻译充值 - "meetingAssistantRecharge": "Nákup asistenta sastanka", //会议助手充值 - "cloudSync": "Nákup sinkronizacije u oblaku", //云端同步 + "systemSettings": "Sistemska podešavanja", + "vipRecharge": "Nákup premium člana", + "aiRecharge": "Premium član", + "translationRecharge": "Nákup prevajanja", + "meetingAssistantRecharge": "Nákup asistenta sastanka", + "cloudSync": "Nákup sinkronizacije u oblaku", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Povezan uređaj:", "accountId": "ID naloga:", "systemSetting": "Sistemsko podešavanje", @@ -217,8 +655,9 @@ const Map srRS = { "lastBackup": "Poslednja rezervna kopija:", "privacySettings": "Podešavanja privatnosti", "privacySettingsInfo": "Upravljanje prikupljanjem podataka i dozvolama", - "permissionManagement": "Upravljanje dozvolama", - "permissionManagementInfo": "Upravljanje podešavanjima dozvola aplikacije", + "permissionManagement": "Upravljanje dozvolama", // 权限管理 + "permissionManagementInfo": + "Upravljanje podešavanjima dozvola aplikacije", // 管理应用权限设置 "aboutApplication": "O aplikaciji", "versions": "Verzija", "checkUpdates": "Proveri ažuriranja", @@ -253,11 +692,10 @@ const Map srRS = { 'networkErrorRetry': 'Mrežna greška, pokušajte ponovo kasnije', // 设备管理相关 - 'clearPairedDevices': 'Obriši uparene uređaje', - 'clearPairedDevicesConfirm': - 'Da li ste sigurni da želite da obrišete sve uparene uređaje?', - 'clearPairedDevicesSuccess': 'Uspešno obrisani upareni uređaji', - 'clearPairedDevicesFailed': 'Neuspešno brisanje uparenih uređaja', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Glasovno ćaskanje u realnom vremenu", @@ -266,11 +704,20 @@ const Map srRS = { "loading": "Učitavanje...", //设备管理页面 - "earphone": "Slušalice", - "voicerecorder": "Diktafon", - "notBound": "Nije povezano", - "deviceNotBoundYet": "Uređaj još uvek nije povezan", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Prekini vezu", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -299,6 +746,20 @@ const Map srRS = { "loadMoreMessages": "Učitaj još poruka...", "loadFailedClickRetry": "Neuspešno učitavanje, kliknite da pokušate ponovo", "swipeUpForMore": "Prevucite nagore za više", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Zdravo! Ja sam **Lily**, mogu vam pomoći:\n\n' @@ -321,8 +782,8 @@ const Map srRS = { 'startPhoneCallMode': 'Započni režim poziva, započni unos glasom', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Unesite svoju poruku ovde...', - 'characterCount': '{count} karaktera', + 'fullScreenEditorHint': 'Unesite svoju poruku ovde...', // 全屏编辑器输入提示 + 'characterCount': '{count} karaktera', // 字符计数显示 // 消息长按操作 'copy': 'Kopiraj', @@ -331,6 +792,7 @@ const Map srRS = { 'submitSuccess': 'Uspešno poslato', 'submitFailed': 'Neuspešno slanje', 'reportSubmitted': 'Prijava je poslata, obradićemo je što je pre moguće', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Štetno/Opasno', 'pornographicVulgar': 'Pornografski/Prostački', 'misleadingAttack': 'Obmanjujuće/Napad', @@ -340,6 +802,7 @@ const Map srRS = { 'other': 'Ostalo', 'reportDescriptionHint': 'Želimo da znamo razlog vaše prijave, možete opisati problem sa kojim ste se suočili.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Generisano od strane AI', @@ -350,15 +813,15 @@ const Map srRS = { 'moreMusic': 'Još muzike', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'sati', - 'minutes': 'minuta', - 'seconds': 'sekundi', - 'navigating': 'Navigacija', - 'currentLocation': 'Trenutna lokacija', - 'approximate': 'Približno', - 'enterRoad': 'Uđi na put', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'sati', // 小时单位 + 'minutes': 'minuta', // 分钟单位 + 'seconds': 'sekundi', // 秒单位 + 'navigating': 'Navigacija', // 导航状态 + 'currentLocation': 'Trenutna lokacija', // 当前位置 + 'approximate': 'Približno', // 大约 + 'enterRoad': 'Uđi na put', // 进入道路 "driving": "Vožnja", "walking": "Hodanje", "bicycling": "Biciklizam", @@ -393,6 +856,17 @@ const Map srRS = { "friday": "Pet", "saturday": "Sub", "sunday": "Ned", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Sunčano", "partlyCloudy": "Delimično oblačno", @@ -429,6 +903,8 @@ const Map srRS = { 'deleteAccount': 'Obriši nalog', 'deleteAccountTips': 'Da li ste sigurni da želite trajno da obrišete svoj nalog? Ova radnja se ne može opozvati', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -449,6 +925,8 @@ const Map srRS = { 'Interna greška na serveru, pokušajte ponovo kasnije', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Neuspešna kompresija slike', 'avatarUpdateFailed': 'Neuspešno ažuriranje avatara', 'usernameCannotBeEmpty': 'Korisničko ime ne može biti prazno', @@ -461,29 +939,45 @@ const Map srRS = { 'deleteAccountFailedRetry': 'Neuspešno brisanje naloga, pokušajte ponovo', // 账号服务相关 - 'clearUserDataFailed': 'Neuspešno brisanje korisničkih podataka', - 'deleteUserDataFailed': 'Neuspešno brisanje korisničkih podataka', - 'thirdPartyLogoutSuccess': 'Uspešno odjavljivanje sa treće strane', - 'thirdPartyLogoutFailed': 'Neuspešno odjavljivanje sa treće strane', - 'signOutProcessError': 'Došlo je do greške tokom procesa odjavljivanja', + 'clearUserDataFailed': 'Neuspešno brisanje korisničkih podataka', // 清理用户数据失败 + 'deleteUserDataFailed': 'Neuspešno brisanje korisničkih podataka', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': + 'Uspešno odjavljivanje sa treće strane', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': + 'Neuspešno odjavljivanje sa treće strane', // 第三方登录退出失败 + 'signOutProcessError': + 'Došlo je do greške tokom procesa odjavljivanja', // 登出过程发生错误 'deleteAccountProcessError': - 'Došlo je do greške tokom procesa brisanja naloga', - 'userDataClearSuccess': 'Korisnički podaci uspešno obrisani', - 'allUserDataClearSuccess': 'Svi korisnički podaci uspešno obrisani', - 'accountServiceInitialized': 'AccountService je inicijalizovan', + 'Došlo je do greške tokom procesa brisanja naloga', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Korisnički podaci uspešno obrisani', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Svi korisnički podaci uspešno obrisani', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'AccountService je inicijalizovan', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Neuspešno dobijanje statusa dozvole', 'communicationPermissions': 'Dozvole za komunikaciju', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Dozvole za kalendar', 'locationPermissions': 'Dozvole za lokaciju', 'phone': 'Telefon', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Pisanje u kalendar', 'calendarFullAccess': 'Potpuni pristup kalendaru', 'locationInfo': 'Informacije o lokaciji', 'phonePermissionDesc': 'Koristi se za funkciju pozivanja', 'smsPermissionDesc': 'Koristi se za funkciju slanja SMS-a', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Koristi se za kreiranje događaja i podsetnika u kalendaru', 'calendarFullAccessPermissionDesc': @@ -501,28 +995,90 @@ const Map srRS = { 'permissionRequestError': 'Greška prilikom traženja dozvole', 'phonePermissionDetailDesc': 'Funkcija pozivanja zahteva dozvolu za telefon', 'smsPermissionDetailDesc': 'Funkcija slanja SMS-a zahteva dozvolu za SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Kreiranje događaja u kalendaru zahteva dozvolu za pisanje u kalendar', 'calendarFullAccessPermissionDetailDesc': 'Upravljanje događajima u kalendaru zahteva potpunu dozvolu za kalendar', 'locationPermissionDetailDesc': 'Dobijanje informacija o lokaciji zahteva dozvolu za lokaciju', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Aplikacija zahteva ovu dozvolu za punu funkcionalnost', 'permanentDenialText': 'Trajno ste odbili dozvolu za {permission}, idite u podešavanja aplikacije da biste je omogućili', 'goToSettings': 'Idi na podešavanja', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Pronađena nova verzija', - 'remindLater': 'Podseti me kasnije', - 'updateNow': 'Ažuriraj sada', - 'checkUpdate': 'Proveri ažuriranja', - 'updateFailed': 'Neuspešno ažuriranje', + 'newVersionFound': 'Pronađena nova verzija', // 版本更新对话框标题 + 'remindLater': 'Podseti me kasnije', // 稍后提醒按钮 + 'updateNow': 'Ažuriraj sada', // 立即更新按钮 + 'checkUpdate': 'Proveri ažuriranja', // 检查更新按钮 + 'updateFailed': 'Neuspešno ažuriranje', // 更新失败提示 'cannotOpenAppStore': - 'Nije moguće otvoriti prodavnicu aplikacija, idite ručno u prodavnicu da biste ažurirali', + 'Nije moguće otvoriti prodavnicu aplikacija, idite ručno u prodavnicu da biste ažurirali', // 无法打开应用商店提示 'updateErrorRetry': - 'Došlo je do greške tokom ažuriranja, pokušajte ponovo kasnije', + 'Došlo je do greške tokom ažuriranja, pokušajte ponovo kasnije', // 更新错误重试提示 //国家列表 "邮箱": "E-pošta", @@ -631,8 +1187,23 @@ const Map srRS = { "东帝汶": "Istočni Timor", "斐济": "Fidži", "所罗门群岛": "Solomonska Ostrva", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Istorija prevođenja", "enableRecording": "Omogući snimanje", @@ -641,9 +1212,24 @@ const Map srRS = { "phoneUser": "Korisnik telefona", "selectSourceLanguage": "Izaberi izvorni jezik", "selectTargetLanguage": "Izaberi ciljni jezik", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Nema istorije", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Obriši istoriju", "clearHistoryConfirm": "Da li ste sigurni da želite da obrišete celu istoriju prevođenja? Ova radnja se ne može opozvati.", @@ -652,7 +1238,58 @@ const Map srRS = { "deleteSessionConfirm": "Da li ste sigurni da želite da obrišete sve zapise prevođenja za ovu sesiju? Ova radnja se ne može opozvati.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Prevedi audio datoteke", "noAudioFiles": "Nema audio datoteka", "calculating": "Izračunavanje...", @@ -698,7 +1335,7 @@ const Map srRS = { "autoInputCode": "Automatski unos koda", "skipBinding": "Preskoči povezivanje", "rescan": "Ponovo skeniraj", - "skip": "Preskoči", + "verifyingDevice": "Verifikacija uređaja...", "confirmBinding": "Potvrdi povezivanje", "associatingDevice": "Povezivanje uređaja...", @@ -730,12 +1367,17 @@ const Map srRS = { "pairingFailedRetry": "Neuspešno uparivanje, pokušajte ponovo", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Omogućite Bluetooth', 'deviceDisconnected': 'Uređaj je isključen', 'readyToStartPairing': 'Spremno za početak uparivanja', 'checkingEnvironment': 'Provera okruženja...', 'ensureHeadsetOnAndPairingMode': 'Uverite se da su slušalice uključene i u režimu uparivanja', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Uspostavljanje bezbedne veze...', 'needManualBindingAuthCode': 'Potreban je kod za autorizaciju ručnog povezivanja...', @@ -758,6 +1400,19 @@ const Map srRS = { 'deviceAuthorizationFailedCheckCode': 'Neuspešna autorizacija uređaja, proverite autorizacioni kod', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Povratne informacije korisnika", 'feedbackInfo': 'Dajte povratne informacije ili predloge', @@ -787,6 +1442,13 @@ const Map srRS = { "connectionFailed": "Neuspešno povezivanje", "retryConnection": "Pokušaj ponovo povezivanje", "ota_updateNow": "Ažuriraj sada", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Držite uređaj povezanim, ne zatvarajte aplikaciju", "doNotDisconnect": "Ne prekidajte vezu", "charging": "Punjenje", @@ -795,11 +1457,11 @@ const Map srRS = { "Izvadite obe slušalice i uverite se da je baterija obe iznad 20%", // 音乐列表页面 - "noMusic": "Nema muzike", - "noPlayingMusic": "Nema muzike koja se reprodukuje", - "unknownSong": "Nepoznata pesma", - "unknownArtist": "Nepoznat izvođač", - "playAll": "Reprodukuj sve", + "noMusic": "Nema muzike", // 暂无音乐 + "noPlayingMusic": "Nema muzike koja se reprodukuje", // 暂无播放音乐 + "unknownSong": "Nepoznata pesma", // 未知歌曲 + "unknownArtist": "Nepoznat izvođač", // 未知歌手 + "playAll": "Reprodukuj sve", // 播放全部 // 语言名称 "中文(简体)": "Kineski (pojednostavljeni)", @@ -841,4 +1503,23 @@ const Map srRS = { "乌尔都语": "Urdu", "波斯语": "Persijski", "斯瓦希里语": "Svahili", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/sv_se.dart b/lib/core/translations/language/sv_se.dart index a44d13fe2..64041c6e7 100644 --- a/lib/core/translations/language/sv_se.dart +++ b/lib/core/translations/language/sv_se.dart @@ -33,6 +33,7 @@ const Map svSE = { "spanish": "Spanska", "portuguese": "Portugisiska", "traditionalChinese": "Traditionell kinesiska", + "traditionalChineseHK": "Traditionell kinesiska (Hongkong)", "japanese": "Japanska", "korean": "Koreanska", "french": "Franska", @@ -100,12 +101,15 @@ const Map svSE = { "usePasswordLogin": "Logga in med lösenord", // 隐私政策弹窗 - "loginDeclaration": "Voitrans-deklaration", - "welcomeToThisApp": "Välkommen till Voitrans, vänligen läs noggrant", + "loginDeclaration": "Voitrans-deklaration", // Voitrans 声明 + "welcomeToThisApp": + "Välkommen till Voitrans, vänligen läs noggrant", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", genom att klicka på 'Godkänn och gå in' bekräftar du att du har läst och godkänt ovanstående avtal. Att klicka på 'Godkänner inte' kommer att avsluta applikationen.", - "disagree": "Godkänner inte", - "agreeAndEnter": "Godkänn och gå in", + ", genom att klicka på 'Godkänn och gå in' bekräftar du att du har läst och godkänt ovanstående avtal. Att klicka på 'Godkänner inte' kommer att avsluta applikationen.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Godkänner inte", // 不同意 + "agreeAndEnter": "Godkänn och gå in", // 同意并进入 // 首页 "deviceStatus": "Enhetsstatus", @@ -185,6 +189,209 @@ const Map svSE = { "usageStats": "Användningsstatistik", "usageStatsInfo": "Visa din användningsstatistik", "scene": "Scenario", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Hoppa över", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Starta möte", @@ -199,13 +406,244 @@ const Map svSE = { 'aiSummary': 'AI-sammanfattning', 'meetingTranscript': 'Mötesutskrift', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Systeminställningar", //系统设置 - "vipRecharge": "Premium-låntagning", //会员充值 - "aiRecharge": "Premium-medlem", //AI充值 - "translationRecharge": "Översättningslåntagning", //翻译充值 - "meetingAssistantRecharge": "Mötesassistentlåntagning", //会议助手充值 - "cloudSync": "Molnsynkronisering", //云端同步 + "systemSettings": "Systeminställningar", + "vipRecharge": "Premium-låntagning", + "aiRecharge": "Premium-medlem", + "translationRecharge": "Översättningslåntagning", + "meetingAssistantRecharge": "Mötesassistentlåntagning", + "cloudSync": "Molnsynkronisering", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Ansluten enhet:", "accountId": "Konto-ID:", "systemSetting": "Systeminställning", @@ -217,8 +655,9 @@ const Map svSE = { "lastBackup": "Senaste säkerhetskopia:", "privacySettings": "Integritetsinställningar", "privacySettingsInfo": "Hantera datainsamling och behörigheter", - "permissionManagement": "Behörighetshantering", - "permissionManagementInfo": "Hantera inställningar för appbehörigheter", + "permissionManagement": "Behörighetshantering", // 权限管理 + "permissionManagementInfo": + "Hantera inställningar för appbehörigheter", // 管理应用权限设置 "aboutApplication": "Om appen", "versions": "Version", "checkUpdates": "Sök efter uppdateringar", @@ -253,11 +692,10 @@ const Map svSE = { 'networkErrorRetry': 'Nätverksfel, försök igen senare', // 设备管理相关 - 'clearPairedDevices': 'Rensa parkopplade enheter', - 'clearPairedDevicesConfirm': - 'Är du säker på att du vill rensa alla parkopplade enheter?', - 'clearPairedDevicesSuccess': 'Rensning av parkopplade enheter lyckades', - 'clearPairedDevicesFailed': 'Rensning av parkopplade enheter misslyckades', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Realtids röstchatt", @@ -266,11 +704,20 @@ const Map svSE = { "loading": "Laddar...", //设备管理页面 - "earphone": "Hörlurar", - "voicerecorder": "Röstinspelare", - "notBound": "Inte bunden", - "deviceNotBoundYet": "Ingen enhet är bunden ännu", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Lossa bindning", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -299,6 +746,20 @@ const Map svSE = { "loadMoreMessages": "Ladda fler meddelanden...", "loadFailedClickRetry": "Inläsning misslyckades, klicka för att försöka igen", "swipeUpForMore": "Svep upp för mer", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Hej! Jag är **Lily**, jag kan hjälpa dig med:\n\n' @@ -321,8 +782,8 @@ const Map svSE = { 'startPhoneCallMode': 'Starta samtalsläge, starta röstinmatning', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Skriv ditt meddelande här...', - 'characterCount': '{count} tecken', + 'fullScreenEditorHint': 'Skriv ditt meddelande här...', // 全屏编辑器输入提示 + 'characterCount': '{count} tecken', // 字符计数显示 // 消息长按操作 'copy': 'Kopiera', @@ -331,6 +792,7 @@ const Map svSE = { 'submitSuccess': 'Inskickat', 'submitFailed': 'Inskickning misslyckades', 'reportSubmitted': 'Anmälan inskickad, vi behandlar den så snart som möjligt', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Skadligt/Osäkert', 'pornographicVulgar': 'Pornografiskt/Vulgärt', 'misleadingAttack': 'Vilseledande/Attack', @@ -340,6 +802,7 @@ const Map svSE = { 'other': 'Annat', 'reportDescriptionHint': 'Vi vill veta varför du anmäler, du kan beskriva problemet du stött på.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Genererad av AI', @@ -350,15 +813,15 @@ const Map svSE = { 'moreMusic': 'Mer musik', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'timmar', - 'minutes': 'minuter', - 'seconds': 'sekunder', - 'navigating': 'Navigerar', - 'currentLocation': 'Nuvarande plats', - 'approximate': 'Ungefär', - 'enterRoad': 'Kör in på', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'timmar', // 小时单位 + 'minutes': 'minuter', // 分钟单位 + 'seconds': 'sekunder', // 秒单位 + 'navigating': 'Navigerar', // 导航状态 + 'currentLocation': 'Nuvarande plats', // 当前位置 + 'approximate': 'Ungefär', // 大约 + 'enterRoad': 'Kör in på', // 进入道路 "driving": "Körning", "walking": "Gång", "bicycling": "Cykling", @@ -394,6 +857,17 @@ const Map svSE = { "friday": "Fre", "saturday": "Lör", "sunday": "Sön", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Soligt", "partlyCloudy": "Delvis molnigt", @@ -430,6 +904,8 @@ const Map svSE = { 'deleteAccount': 'Ta bort konto', 'deleteAccountTips': 'Är du säker på att du vill ta bort ditt konto permanent? Denna åtgärd kan inte ångras', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -451,6 +927,8 @@ const Map svSE = { 'serverInternalErrorRetryLater': 'Internt serverfel, försök igen senare', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Bildkomprimering misslyckades', 'avatarUpdateFailed': 'Avataruppdatering misslyckades', 'usernameCannotBeEmpty': 'Användarnamn kan inte vara tomt', @@ -463,29 +941,45 @@ const Map svSE = { 'deleteAccountFailedRetry': 'Borttagning av konto misslyckades, försök igen', // 账号服务相关 - 'clearUserDataFailed': 'Rensning av användardata misslyckades', - 'deleteUserDataFailed': 'Borttagning av användardata misslyckades', - 'thirdPartyLogoutSuccess': 'Utloggning från tredje part lyckades', - 'thirdPartyLogoutFailed': 'Utloggning från tredje part misslyckades', - 'signOutProcessError': 'Ett fel uppstod under utloggningsprocessen', + 'clearUserDataFailed': 'Rensning av användardata misslyckades', // 清理用户数据失败 + 'deleteUserDataFailed': + 'Borttagning av användardata misslyckades', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': + 'Utloggning från tredje part lyckades', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': + 'Utloggning från tredje part misslyckades', // 第三方登录退出失败 + 'signOutProcessError': + 'Ett fel uppstod under utloggningsprocessen', // 登出过程发生错误 'deleteAccountProcessError': - 'Ett fel uppstod under borttagningsprocessen av kontot', - 'userDataClearSuccess': 'Rensning av användardata lyckades', - 'allUserDataClearSuccess': 'All användardata har rensats', - 'accountServiceInitialized': 'Kontotjänsten har initierats', + 'Ett fel uppstod under borttagningsprocessen av kontot', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Rensning av användardata lyckades', // 用户数据清理成功 + 'allUserDataClearSuccess': 'All användardata har rensats', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Kontotjänsten har initierats', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Hämtning av behörighetsstatus misslyckades', 'communicationPermissions': 'Kommunikationsbehörigheter', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Kalenderbehörigheter', 'locationPermissions': 'Platsbehörigheter', 'phone': 'Telefon', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Skriv till kalender', 'calendarFullAccess': 'Fullständig kalenderåtkomst', 'locationInfo': 'Platsinformation', 'phonePermissionDesc': 'Används för att ringa samtal', 'smsPermissionDesc': 'Används för att skicka SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Används för att skapa kalenderhändelser och påminnelser', 'calendarFullAccessPermissionDesc': @@ -501,27 +995,90 @@ const Map svSE = { 'permissionRequestError': 'Fel vid begäran om behörighet', 'phonePermissionDetailDesc': 'Samtalsfunktionen kräver telefonbehörighet', 'smsPermissionDetailDesc': 'SMS-funktionen kräver SMS-behörighet', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Att skapa kalenderhändelser kräver skrivbehörighet till kalendern', 'calendarFullAccessPermissionDetailDesc': 'Att hantera kalenderhändelser kräver fullständig kalenderåtkomst', 'locationPermissionDetailDesc': 'Att hämta platsinformation kräver platsbehörighet', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Appen behöver denna behörighet för full funktionalitet', 'permanentDenialText': 'Du har permanent nekat {permission}-behörighet, vänligen gå till appinställningarna för att aktivera den', 'goToSettings': 'Gå till inställningar', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Ny version hittad', - 'remindLater': 'Påminn mig senare', - 'updateNow': 'Uppdatera nu', - 'checkUpdate': 'Sök efter uppdatering', - 'updateFailed': 'Uppdatering misslyckades', + 'newVersionFound': 'Ny version hittad', // 版本更新对话框标题 + 'remindLater': 'Påminn mig senare', // 稍后提醒按钮 + 'updateNow': 'Uppdatera nu', // 立即更新按钮 + 'checkUpdate': 'Sök efter uppdatering', // 检查更新按钮 + 'updateFailed': 'Uppdatering misslyckades', // 更新失败提示 'cannotOpenAppStore': - 'Kan inte öppna appbutiken, vänligen gå till appbutiken manuellt för att uppdatera', - 'updateErrorRetry': 'Ett fel uppstod under uppdateringen, försök igen senare', + 'Kan inte öppna appbutiken, vänligen gå till appbutiken manuellt för att uppdatera', // 无法打开应用商店提示 + 'updateErrorRetry': + 'Ett fel uppstod under uppdateringen, försök igen senare', // 更新错误重试提示 //国家列表 "邮箱": "E-post", @@ -630,8 +1187,23 @@ const Map svSE = { "东帝汶": "Östtimor", "斐济": "Fiji", "所罗门群岛": "Salomonöarna", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Översättningshistorik", "enableRecording": "Aktivera inspelning", @@ -640,9 +1212,24 @@ const Map svSE = { "phoneUser": "Telefonanvändare", "selectSourceLanguage": "Välj källspråk", "selectTargetLanguage": "Välj målspråk", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Ingen historik ännu", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Rensa historik", "clearHistoryConfirm": "Är du säker på att du vill rensa all översättningshistorik? Denna åtgärd kan inte ångras.", @@ -651,7 +1238,58 @@ const Map svSE = { "deleteSessionConfirm": "Är du säker på att du vill ta bort alla översättningsinspelningar för denna session? Denna åtgärd kan inte ångras.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Översätt ljudfiler", "noAudioFiles": "Inga ljudfiler ännu", "calculating": "Beräknar...", @@ -697,7 +1335,7 @@ const Map svSE = { "autoInputCode": "Ange koden automatiskt", "skipBinding": "Hoppa över bindning", "rescan": "Skanna igen", - "skip": "Hoppa över", + "verifyingDevice": "Verifierar enhet...", "confirmBinding": "Bekräfta bindning", "associatingDevice": "Associerar enhet...", @@ -729,12 +1367,17 @@ const Map svSE = { "pairingFailedRetry": "Parkoppling misslyckades, försök igen", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Aktivera Bluetooth', 'deviceDisconnected': 'Enheten frånkopplad', 'readyToStartPairing': 'Redo att starta parkoppling', 'checkingEnvironment': 'Kontrollerar miljö...', 'ensureHeadsetOnAndPairingMode': 'Se till att hörlurarna är på och i parkopplingsläge', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Upprättar säker anslutning...', 'needManualBindingAuthCode': 'Manuell bindningsauktoriseringskod krävs...', 'pairingSuccessful': 'Parkoppling lyckades!', @@ -755,6 +1398,19 @@ const Map svSE = { 'deviceAuthorizationFailedCheckCode': 'Enhetsauktorisering misslyckades, kontrollera auktoriseringskoden', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Användarfeedback", 'feedbackInfo': 'Ge feedback eller förslag', @@ -782,6 +1438,13 @@ const Map svSE = { "connectionFailed": "Anslutning misslyckades", "retryConnection": "Försök ansluta igen", "ota_updateNow": "Uppdatera nu", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Håll enheten ansluten, stäng inte appen", "doNotDisconnect": "Koppla inte från", "charging": "Laddar", @@ -790,11 +1453,11 @@ const Map svSE = { "Ta ut båda hörlurarna och se till att batterinivån är över 20 % på båda", // 音乐列表页面 - "noMusic": "Ingen musik", - "noPlayingMusic": "Ingen musik spelas", - "unknownSong": "Okänd låt", - "unknownArtist": "Okänd artist", - "playAll": "Spela alla", + "noMusic": "Ingen musik", // 暂无音乐 + "noPlayingMusic": "Ingen musik spelas", // 暂无播放音乐 + "unknownSong": "Okänd låt", // 未知歌曲 + "unknownArtist": "Okänd artist", // 未知歌手 + "playAll": "Spela alla", // 播放全部 // 语言名称 "中文(简体)": "Kinesiska (förenklad)", @@ -836,4 +1499,23 @@ const Map svSE = { "乌尔都语": "Urdu", "波斯语": "Persiska", "斯瓦希里语": "Swahili", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/th_th.dart b/lib/core/translations/language/th_th.dart index 3f828f4f6..a35ff8181 100644 --- a/lib/core/translations/language/th_th.dart +++ b/lib/core/translations/language/th_th.dart @@ -33,6 +33,7 @@ const Map thTH = { "spanish": "ภาษาสเปน", "portuguese": "ภาษาโปรตุเกส", "traditionalChinese": "ภาษาจีนตัวเต็ม", + "traditionalChineseHK": "ภาษาจีนตัวเต็ม (ฮ่องกง)", "japanese": "ภาษาญี่ปุ่น", "korean": "ภาษาเกาหลี", "french": "ภาษาฝรั่งเศส", @@ -99,12 +100,15 @@ const Map thTH = { "usePasswordLogin": "เข้าสู่ระบบด้วยรหัสผ่าน", // 隐私政策弹窗 - "loginDeclaration": "คำประกาศของ Voitrans", - "welcomeToThisApp": "ยินดีต้อนรับสู่ Voitrans กรุณาอ่านอย่างละเอียด", + "loginDeclaration": "คำประกาศของ Voitrans", // Voitrans 声明 + "welcomeToThisApp": + "ยินดีต้อนรับสู่ Voitrans กรุณาอ่านอย่างละเอียด", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - " การคลิก 'ยอมรับและเข้าสู่' หมายความว่าคุณได้อ่านและยอมรับข้อตกลงข้างต้นแล้ว การคลิก 'ไม่ยอมรับ' จะเป็นการออกจากแอปพลิเคชัน", - "disagree": "ไม่ยอมรับ", - "agreeAndEnter": "ยอมรับและเข้าสู่", + " การคลิก 'ยอมรับและเข้าสู่' หมายความว่าคุณได้อ่านและยอมรับข้อตกลงข้างต้นแล้ว การคลิก 'ไม่ยอมรับ' จะเป็นการออกจากแอปพลิเคชัน", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "ไม่ยอมรับ", // 不同意 + "agreeAndEnter": "ยอมรับและเข้าสู่", // 同意并进入 // 首页 "deviceStatus": "สถานะอุปกรณ์", @@ -179,6 +183,209 @@ const Map thTH = { "usageStats": "สถิติการใช้งาน", "usageStatsInfo": "ดูสถิติการใช้งานของคุณ", "scene": "สถานการณ์", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "ข้าม", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "เริ่มการประชุม", @@ -193,13 +400,244 @@ const Map thTH = { 'aiSummary': 'สรุปโดย AI', 'meetingTranscript': 'ข้อความถอดเสียงการประชุม', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "การตั้งค่าระบบ", //系统设置 - "vipRecharge": "การเติมเงินสมาชิกระดับพรีเมียม", //会员充值 - "aiRecharge": "สมาชิกระดับพรีเมียม", //AI充值 - "translationRecharge": "การเติมเงินการแปล", //翻译充值 - "meetingAssistantRecharge": "การเติมเงินผู้ช่วยการประชุม", //会议助手充值 - "cloudSync": "การเติมเงินการ đồng bộ hóaคลาวด์", //云端同步 + "systemSettings": "การตั้งค่าระบบ", + "vipRecharge": "การเติมเงินสมาชิกระดับพรีเมียม", + "aiRecharge": "สมาชิกระดับพรีเมียม", + "translationRecharge": "การเติมเงินการแปล", + "meetingAssistantRecharge": "การเติมเงินผู้ช่วยการประชุม", + "cloudSync": "การเติมเงินการ đồng bộ hóaคลาวด์", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "อุปกรณ์ที่เชื่อมต่อ:", "accountId": "ID บัญชี:", "systemSetting": "การตั้งค่าระบบ", @@ -211,8 +649,9 @@ const Map thTH = { "lastBackup": "การสำรองข้อมูลล่าสุด:", "privacySettings": "การตั้งค่าความเป็นส่วนตัว", "privacySettingsInfo": "จัดการการรวบรวมข้อมูลและสิทธิ์", - "permissionManagement": "การจัดการสิทธิ์", - "permissionManagementInfo": "จัดการการตั้งค่าสิทธิ์ของแอปพลิเคชัน", + "permissionManagement": "การจัดการสิทธิ์", // 权限管理 + "permissionManagementInfo": + "จัดการการตั้งค่าสิทธิ์ของแอปพลิเคชัน", // 管理应用权限设置 "aboutApplication": "เกี่ยวกับแอปพลิเคชัน", "versions": "เวอร์ชัน", "checkUpdates": "ตรวจสอบการอัปเดต", @@ -247,11 +686,10 @@ const Map thTH = { 'networkErrorRetry': 'ข้อผิดพลาดเครือข่าย กรุณาลองใหม่ในภายหลัง', // 设备管理相关 - 'clearPairedDevices': 'ล้างอุปกรณ์ที่จับคู่แล้ว', - 'clearPairedDevicesConfirm': - 'คุณแน่ใจหรือไม่ว่าต้องการล้างอุปกรณ์ที่จับคู่แล้วทั้งหมด', - 'clearPairedDevicesSuccess': 'ล้างอุปกรณ์ที่จับคู่แล้วสำเร็จ', - 'clearPairedDevicesFailed': 'ล้างอุปกรณ์ที่จับคู่แล้วล้มเหลว', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "แชทเสียงแบบเรียลไทม์", @@ -260,11 +698,20 @@ const Map thTH = { "loading": "กำลังโหลด...", //设备管理页面 - "earphone": "หูฟัง", - "voicerecorder": "เครื่องบันทึกเสียง", - "notBound": "ยังไม่ได้ผูก", - "deviceNotBoundYet": "ยังไม่ได้ผูกอุปกรณ์", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "ยกเลิกการผูก", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -293,6 +740,20 @@ const Map thTH = { "loadMoreMessages": "โหลดข้อความเพิ่มเติม...", "loadFailedClickRetry": "โหลดล้มเหลว คลิกเพื่อลองใหม่", "swipeUpForMore": "ปัดขึ้นเพื่อดูเพิ่มเติม", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'สวัสดี! ฉันคือ **เสี่ยวเหยียน** ฉันสามารถช่วยคุณได้:\n\n' @@ -315,8 +776,8 @@ const Map thTH = { 'startPhoneCallMode': 'เริ่มโหมดโทรศัพท์ เริ่มการป้อนข้อมูลด้วยเสียง', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'ป้อนข้อความของคุณที่นี่...', - 'characterCount': '{count} ตัวอักษร', + 'fullScreenEditorHint': 'ป้อนข้อความของคุณที่นี่...', // 全屏编辑器输入提示 + 'characterCount': '{count} ตัวอักษร', // 字符计数显示 // 消息长按操作 'copy': 'คัดลอก', @@ -325,6 +786,7 @@ const Map thTH = { 'submitSuccess': 'ส่งสำเร็จ', 'submitFailed': 'ส่งล้มเหลว', 'reportSubmitted': 'รายงานถูกส่งแล้ว เราจะดำเนินการโดยเร็วที่สุด', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'เป็นอันตราย/ไม่ปลอดภัย', 'pornographicVulgar': 'ลามกอนาจาร', 'misleadingAttack': 'ทำให้เข้าใจผิด/โจมตี', @@ -334,6 +796,7 @@ const Map thTH = { 'other': 'อื่นๆ', 'reportDescriptionHint': 'เราต้องการทราบเหตุผลที่คุณรายงาน คุณสามารถอธิบายปัญหาที่คุณพบได้', + //'submit': '提交', //Message_bubble 'generatedByAi': 'สร้างโดย AI', @@ -344,15 +807,15 @@ const Map thTH = { 'moreMusic': 'เพลงเพิ่มเติม', //导航卡片 navigation_card - 'kilometers': 'กม.', - 'meters': 'ม.', - 'hours': 'ชม.', - 'minutes': 'นาที', - 'seconds': 'วินาที', - 'navigating': 'กำลังนำทาง', - 'currentLocation': 'ตำแหน่งปัจจุบัน', - 'approximate': 'ประมาณ', - 'enterRoad': 'เข้าสู่', + 'kilometers': 'กม.', // 公里单位 + 'meters': 'ม.', // 米单位 + 'hours': 'ชม.', // 小时单位 + 'minutes': 'นาที', // 分钟单位 + 'seconds': 'วินาที', // 秒单位 + 'navigating': 'กำลังนำทาง', // 导航状态 + 'currentLocation': 'ตำแหน่งปัจจุบัน', // 当前位置 + 'approximate': 'ประมาณ', // 大约 + 'enterRoad': 'เข้าสู่', // 进入道路 "driving": "ขับรถ", "walking": "เดิน", "bicycling": "ขี่จักรยาน", @@ -386,6 +849,17 @@ const Map thTH = { "friday": "ศ.", "saturday": "ส.", "sunday": "อา.", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "แจ่มใส", "partlyCloudy": "มีเมฆบางส่วน", @@ -421,6 +895,8 @@ const Map thTH = { 'deleteAccount': 'ลบบัญชี', 'deleteAccountTips': 'คุณแน่ใจหรือไม่ว่าต้องการลบบัญชีของคุณอย่างถาวร การกระทำนี้ไม่สามารถย้อนกลับได้', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -442,6 +918,8 @@ const Map thTH = { 'ข้อผิดพลาดภายในเซิร์ฟเวอร์ โปรดลองใหม่ในภายหลัง', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'การบีบอัดรูปภาพล้มเหลว', 'avatarUpdateFailed': 'อัปเดตอวาตาร์ล้มเหลว', 'usernameCannotBeEmpty': 'ชื่อผู้ใช้ต้องไม่ว่างเปล่า', @@ -454,28 +932,41 @@ const Map thTH = { 'deleteAccountFailedRetry': 'ลบบัญชีล้มเหลว โปรดลองใหม่', // 账号服务相关 - 'clearUserDataFailed': 'ล้างข้อมูลผู้ใช้ล้มเหลว', - 'deleteUserDataFailed': 'ลบข้อมูลผู้ใช้ล้มเหลว', - 'thirdPartyLogoutSuccess': 'ออกจากระบบบุคคลที่สามสำเร็จ', - 'thirdPartyLogoutFailed': 'ออกจากระบบบุคคลที่สามล้มเหลว', - 'signOutProcessError': 'เกิดข้อผิดพลาดระหว่างกระบวนการออกจากระบบ', - 'deleteAccountProcessError': 'เกิดข้อผิดพลาดระหว่างกระบวนการลบบัญชี', - 'userDataClearSuccess': 'ล้างข้อมูลผู้ใช้สำเร็จ', - 'allUserDataClearSuccess': 'ล้างข้อมูลผู้ใช้ทั้งหมดสำเร็จ', - 'accountServiceInitialized': 'AccountService ได้รับการเริ่มต้นแล้ว', + 'clearUserDataFailed': 'ล้างข้อมูลผู้ใช้ล้มเหลว', // 清理用户数据失败 + 'deleteUserDataFailed': 'ลบข้อมูลผู้ใช้ล้มเหลว', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': 'ออกจากระบบบุคคลที่สามสำเร็จ', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'ออกจากระบบบุคคลที่สามล้มเหลว', // 第三方登录退出失败 + 'signOutProcessError': 'เกิดข้อผิดพลาดระหว่างกระบวนการออกจากระบบ', // 登出过程发生错误 + 'deleteAccountProcessError': + 'เกิดข้อผิดพลาดระหว่างกระบวนการลบบัญชี', // 删除账号过程发生错误 + 'userDataClearSuccess': 'ล้างข้อมูลผู้ใช้สำเร็จ', // 用户数据清理成功 + 'allUserDataClearSuccess': 'ล้างข้อมูลผู้ใช้ทั้งหมดสำเร็จ', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'AccountService ได้รับการเริ่มต้นแล้ว', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'รับสถานะสิทธิ์ล้มเหลว', 'communicationPermissions': 'สิทธิ์การสื่อสาร', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'สิทธิ์ปฏิทิน', 'locationPermissions': 'สิทธิ์ตำแหน่ง', 'phone': 'โทรศัพท์', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'เขียนปฏิทิน', 'calendarFullAccess': 'เข้าถึงปฏิทินเต็มรูปแบบ', 'locationInfo': 'ข้อมูลตำแหน่ง', 'phonePermissionDesc': 'ใช้สำหรับฟังก์ชันการโทรออก', 'smsPermissionDesc': 'ใช้สำหรับฟังก์ชันการส่ง SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'ใช้สำหรับสร้างกิจกรรมและการแจ้งเตือนในปฏิทิน', 'calendarFullAccessPermissionDesc': 'ใช้สำหรับอ่านและจัดการกิจกรรมและการแจ้งเตือนในปฏิทิน', @@ -490,26 +981,89 @@ const Map thTH = { 'permissionRequestError': 'เกิดข้อผิดพลาดขณะขอสิทธิ์', 'phonePermissionDetailDesc': 'ฟังก์ชันโทรออกต้องการสิทธิ์โทรศัพท์', 'smsPermissionDetailDesc': 'ฟังก์ชันส่ง SMS ต้องการสิทธิ์ SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'การสร้างกิจกรรมในปฏิทินต้องการสิทธิ์เขียนปฏิทิน', 'calendarFullAccessPermissionDetailDesc': 'การจัดการกิจกรรมในปฏิทินต้องการสิทธิ์เข้าถึงปฏิทินเต็มรูปแบบ', 'locationPermissionDetailDesc': 'การรับข้อมูลตำแหน่งต้องการสิทธิ์ตำแหน่ง', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'แอปพลิเคชันต้องการสิทธิ์นี้เพื่อให้บริการเต็มรูปแบบ', 'permanentDenialText': 'คุณได้ปฏิเสธสิทธิ์ {permission} อย่างถาวร โปรดไปที่การตั้งค่าแอปเพื่อเปิดใช้งาน', 'goToSettings': 'ไปที่การตั้งค่า', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'พบเวอร์ชันใหม่', - 'remindLater': 'เตือนภายหลัง', - 'updateNow': 'อัปเดตทันที', - 'checkUpdate': 'ตรวจสอบการอัปเดต', - 'updateFailed': 'อัปเดตล้มเหลว', + 'newVersionFound': 'พบเวอร์ชันใหม่', // 版本更新对话框标题 + 'remindLater': 'เตือนภายหลัง', // 稍后提醒按钮 + 'updateNow': 'อัปเดตทันที', // 立即更新按钮 + 'checkUpdate': 'ตรวจสอบการอัปเดต', // 检查更新按钮 + 'updateFailed': 'อัปเดตล้มเหลว', // 更新失败提示 'cannotOpenAppStore': - 'ไม่สามารถเปิด App Store ได้ โปรดไปที่ App Store เพื่ออัปเดตด้วยตนเอง', - 'updateErrorRetry': 'เกิดข้อผิดพลาดระหว่างการอัปเดต โปรดลองใหม่ในภายหลัง', + 'ไม่สามารถเปิด App Store ได้ โปรดไปที่ App Store เพื่ออัปเดตด้วยตนเอง', // 无法打开应用商店提示 + 'updateErrorRetry': + 'เกิดข้อผิดพลาดระหว่างการอัปเดต โปรดลองใหม่ในภายหลัง', // 更新错误重试提示 //国家列表 "邮箱": "อีเมล", @@ -618,8 +1172,23 @@ const Map thTH = { "东帝汶": "ติมอร์-เลสเต", "斐济": "ฟิจิ", "所罗门群岛": "หมู่เกาะโซโลมอน", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "ประวัติการแปล", "enableRecording": "เปิดใช้งานการบันทึก", @@ -628,9 +1197,24 @@ const Map thTH = { "phoneUser": "ผู้ใช้โทรศัพท์", "selectSourceLanguage": "เลือกภาษาต้นทาง", "selectTargetLanguage": "เลือกภาษาเป้าหมาย", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "ยังไม่มีประวัติ", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "ล้างประวัติ", "clearHistoryConfirm": "คุณแน่ใจหรือไม่ว่าต้องการล้างประวัติการแปลทั้งหมด การกระทำนี้ไม่สามารถย้อนกลับได้", @@ -639,7 +1223,58 @@ const Map thTH = { "deleteSessionConfirm": "คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกการแปลทั้งหมดของเซสชันนี้ การกระทำนี้ไม่สามารถย้อนกลับได้", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "แปลไฟล์เสียง", "noAudioFiles": "ยังไม่มีไฟล์เสียง", "calculating": "กำลังคำนวณ...", @@ -684,7 +1319,7 @@ const Map thTH = { "autoInputCode": "ป้อนรหัสอัตโนมัติ", "skipBinding": "ข้ามการผูก", "rescan": "สแกนอีกครั้ง", - "skip": "ข้าม", + "verifyingDevice": "กำลังตรวจสอบอุปกรณ์...", "confirmBinding": "ยืนยันการผูก", "associatingDevice": "กำลังเชื่อมโยงอุปกรณ์...", @@ -715,12 +1350,17 @@ const Map thTH = { "pairingFailedRetry": "การจับคู่ล้มเหลว โปรดลองอีกครั้ง", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'กรุณาเปิดใช้งานบลูทูธ', 'deviceDisconnected': 'อุปกรณ์ตัดการเชื่อมต่อแล้ว', 'readyToStartPairing': 'พร้อมที่จะเริ่มการจับคู่', 'checkingEnvironment': 'กำลังตรวจสอบสภาพแวดล้อม...', 'ensureHeadsetOnAndPairingMode': 'โปรดตรวจสอบให้แน่ใจว่าหูฟังเปิดอยู่และอยู่ในโหมดจับคู่', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'กำลังสร้างการเชื่อมต่อที่ปลอดภัย...', 'needManualBindingAuthCode': 'ต้องใช้รหัสอนุญาตการผูกด้วยตนเอง...', 'pairingSuccessful': 'การจับคู่สำเร็จ!', @@ -741,6 +1381,19 @@ const Map thTH = { 'deviceAuthorizationFailedCheckCode': 'การอนุญาตอุปกรณ์ล้มเหลว โปรดตรวจสอบรหัสอนุญาต', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "ความคิดเห็นของผู้ใช้", 'feedbackInfo': 'ให้ความคิดเห็นหรือข้อเสนอแนะ', @@ -768,6 +1421,13 @@ const Map thTH = { "connectionFailed": "การเชื่อมต่อล้มเหลว", "retryConnection": "ลองเชื่อมต่อใหม่", "ota_updateNow": "อัปเดตทันที", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "โปรดให้อุปกรณ์เชื่อมต่ออยู่เสมอ อย่าปิดแอปพลิเคชัน", "doNotDisconnect": "โปรดอย่าตัดการเชื่อมต่อ", @@ -777,11 +1437,11 @@ const Map thTH = { "ถอดหูฟังทั้งสองข้างออก และตรวจสอบให้แน่ใจว่าแบตเตอรี่ทั้งสองข้างมีพลังงานมากกว่า 20%", // 音乐列表页面 - "noMusic": "ไม่มีเพลง", - "noPlayingMusic": "ไม่มีเพลงที่กำลังเล่น", - "unknownSong": "เพลงที่ไม่รู้จัก", - "unknownArtist": "ศิลปินที่ไม่รู้จัก", - "playAll": "เล่นทั้งหมด", + "noMusic": "ไม่มีเพลง", // 暂无音乐 + "noPlayingMusic": "ไม่มีเพลงที่กำลังเล่น", // 暂无播放音乐 + "unknownSong": "เพลงที่ไม่รู้จัก", // 未知歌曲 + "unknownArtist": "ศิลปินที่ไม่รู้จัก", // 未知歌手 + "playAll": "เล่นทั้งหมด", // 播放全部 // 语言名称 "中文(简体)": "ภาษาจีน (ตัวย่อ)", @@ -823,4 +1483,23 @@ const Map thTH = { "乌尔都语": "ภาษาอูรดู", "波斯语": "ภาษาเปอร์เซีย", "斯瓦希里语": "ภาษาสวาฮีลี", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/tl_ph.dart b/lib/core/translations/language/tl_ph.dart index ee9c6d87d..7754df114 100644 --- a/lib/core/translations/language/tl_ph.dart +++ b/lib/core/translations/language/tl_ph.dart @@ -33,6 +33,7 @@ const Map tlPH = { "spanish": "Espanyol", "portuguese": "Portuges", "traditionalChinese": "Tradisyonal na Chinese", + "traditionalChineseHK": "Tradisyunal na Tsino (Hong Kong)", "japanese": "Hapon", "korean": "Koreano", "french": "Pranses", @@ -100,13 +101,15 @@ const Map tlPH = { "usePasswordLogin": "Gamitin ang password para mag-login", // 隐私政策弹窗 - "loginDeclaration": "Pahayag ng Voitrans", + "loginDeclaration": "Pahayag ng Voitrans", // Voitrans 声明 "welcomeToThisApp": - "Maligayang pagdating sa Voitrans, mangyaring basahin nang mabuti", + "Maligayang pagdating sa Voitrans, mangyaring basahin nang mabuti", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", ang pag-click sa 'Sumang-ayon at Pumasok' ay nangangahulugang nabasa mo nang buo at sumasang-ayon ka sa mga nabanggit na kasunduan. Ang pag-click sa 'Hindi Sumasang-ayon' ay magsasara ng app.", - "disagree": "Hindi Sumasang-ayon", - "agreeAndEnter": "Sumang-ayon at Pumasok", + ", ang pag-click sa 'Sumang-ayon at Pumasok' ay nangangahulugang nabasa mo nang buo at sumasang-ayon ka sa mga nabanggit na kasunduan. Ang pag-click sa 'Hindi Sumasang-ayon' ay magsasara ng app.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Hindi Sumasang-ayon", // 不同意 + "agreeAndEnter": "Sumang-ayon at Pumasok", // 同意并进入 // 首页 "deviceStatus": "Katayuan ng Device", @@ -188,6 +191,209 @@ const Map tlPH = { "usageStats": "Usage Statistics", "usageStatsInfo": "View your usage statistics", "scene": "Eksena", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Laktawan", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Simulan ang Pulong", @@ -202,13 +408,244 @@ const Map tlPH = { 'aiSummary': 'Buod ng AI', 'meetingTranscript': 'Transkripsyon ng Pulong', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Mga Setting ng System", //系统设置 - "vipRecharge": "Pagsasalin ng Recharge ng Premium na Miyembro", //会员充值 - "aiRecharge": "Premium na Miyembro", //AI充值 - "translationRecharge": "Pagsasalin ng Recharge", //翻译充值 - "meetingAssistantRecharge": "Pagsasalin ng Recharge ng Pulong", //会议助手充值 - "cloudSync": "Pagsasalin ng Recharge ng Cloud", //云端同步 + "systemSettings": "Mga Setting ng System", + "vipRecharge": "Pagsasalin ng Recharge ng Premium na Miyembro", + "aiRecharge": "Premium na Miyembro", + "translationRecharge": "Pagsasalin ng Recharge", + "meetingAssistantRecharge": "Pagsasalin ng Recharge ng Pulong", + "cloudSync": "Pagsasalin ng Recharge ng Cloud", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Konektadong device:", "accountId": "Account ID:", "systemSetting": "Setting ng System", @@ -220,8 +657,9 @@ const Map tlPH = { "lastBackup": "Huling backup:", "privacySettings": "Mga Setting ng Privacy", "privacySettingsInfo": "Pamahalaan ang koleksyon ng data at mga pahintulot", - "permissionManagement": "Pamamahala ng Pahintulot", - "permissionManagementInfo": "Pamahalaan ang mga setting ng pahintulot ng app", + "permissionManagement": "Pamamahala ng Pahintulot", // 权限管理 + "permissionManagementInfo": + "Pamahalaan ang mga setting ng pahintulot ng app", // 管理应用权限设置 "aboutApplication": "Tungkol sa App", "versions": "Bersyon", "checkUpdates": "Suriin kung may mga Update", @@ -258,12 +696,10 @@ const Map tlPH = { 'networkErrorRetry': 'Error sa network, pakisubukang muli mamaya', // 设备管理相关 - 'clearPairedDevices': 'Alisin ang mga Naka-pair na Device', - 'clearPairedDevicesConfirm': - 'Sigurado ka bang gusto mong alisin ang lahat ng naka-pair na device?', - 'clearPairedDevicesSuccess': - 'Matagumpay na naalis ang mga naka-pair na device', - 'clearPairedDevicesFailed': 'Nabigong alisin ang mga naka-pair na device', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Real-time na Voice Chat", @@ -272,11 +708,20 @@ const Map tlPH = { "loading": "Naglo-load...", //设备管理页面 - "earphone": "Earphones", - "voicerecorder": "Voice Recorder", - "notBound": "Hindi Naka-bind", - "deviceNotBoundYet": "Wala pang naka-bind na device", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Alisin sa pagkaka-bind", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -306,6 +751,20 @@ const Map tlPH = { "loadMoreMessages": "Mag-load ng mas maraming mensahe...", "loadFailedClickRetry": "Nabigo ang pag-load, i-click para subukang muli", "swipeUpForMore": "Mag-swipe pataas para sa higit pa", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Kumusta! Ako si **Lily**, matutulungan kita sa:\n\n' @@ -328,8 +787,8 @@ const Map tlPH = { 'startPhoneCallMode': 'Simulan ang mode ng pagtawag, simulan ang voice input', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Ilagay ang iyong mensahe dito...', - 'characterCount': '{count} na character', + 'fullScreenEditorHint': 'Ilagay ang iyong mensahe dito...', // 全屏编辑器输入提示 + 'characterCount': '{count} na character', // 字符计数显示 // 消息长按操作 'copy': 'Kopyahin', @@ -339,6 +798,7 @@ const Map tlPH = { 'submitFailed': 'Nabigo ang pagsusumite', 'reportSubmitted': 'Naisumite na ang report, ipoproseso namin ito sa lalong madaling panahon', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Nakapipinsala/Hindi Ligtas', 'pornographicVulgar': 'Pornograpiko/Bastos', 'misleadingAttack': 'Mapanlinlang/Pag-atake', @@ -348,6 +808,7 @@ const Map tlPH = { 'other': 'Iba pa', 'reportDescriptionHint': 'Gusto naming malaman kung bakit ka nagre-report, maaari mong ilarawan ang problemang iyong naranasan.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Nilikha ng AI', @@ -358,15 +819,15 @@ const Map tlPH = { 'moreMusic': 'Higit pang Musika', //导航卡片 navigation_card - 'kilometers': 'kilometro', - 'meters': 'metro', - 'hours': 'oras', - 'minutes': 'minuto', - 'seconds': 'segundo', - 'navigating': 'Nag-na-navigate', - 'currentLocation': 'Kasalukuyang Lokasyon', - 'approximate': 'Tinatayang', - 'enterRoad': 'Pumasok sa', + 'kilometers': 'kilometro', // 公里单位 + 'meters': 'metro', // 米单位 + 'hours': 'oras', // 小时单位 + 'minutes': 'minuto', // 分钟单位 + 'seconds': 'segundo', // 秒单位 + 'navigating': 'Nag-na-navigate', // 导航状态 + 'currentLocation': 'Kasalukuyang Lokasyon', // 当前位置 + 'approximate': 'Tinatayang', // 大约 + 'enterRoad': 'Pumasok sa', // 进入道路 "driving": "Pagmamaneho", "walking": "Paglalakad", "bicycling": "Pagbibisikleta", @@ -402,6 +863,17 @@ const Map tlPH = { "friday": "Biyernes", "saturday": "Sabado", "sunday": "Linggo", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Maaraw", "partlyCloudy": "Bahagyang Maulap", @@ -438,6 +910,8 @@ const Map tlPH = { 'deleteAccount': 'Burahin ang Account', 'deleteAccountTips': 'Sigurado ka bang gusto mong permanenteng burahin ang iyong account? Hindi na ito maibabalik.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -460,6 +934,8 @@ const Map tlPH = { 'Internal na error sa server, pakisubukang muli mamaya', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Nabigo ang pag-compress ng imahe', 'avatarUpdateFailed': 'Nabigo ang pag-update ng avatar', 'usernameCannotBeEmpty': 'Hindi maaaring walang laman ang username', @@ -472,29 +948,44 @@ const Map tlPH = { 'deleteAccountFailedRetry': 'Nabigong burahin ang account, pakisubukang muli', // 账号服务相关 - 'clearUserDataFailed': 'Nabigong i-clear ang data ng user', - 'deleteUserDataFailed': 'Nabigong burahin ang data ng user', - 'thirdPartyLogoutSuccess': 'Matagumpay na naka-logout sa third-party', - 'thirdPartyLogoutFailed': 'Nabigo ang pag-logout sa third-party', - 'signOutProcessError': 'Nagkaroon ng error sa proseso ng pag-sign out', + 'clearUserDataFailed': 'Nabigong i-clear ang data ng user', // 清理用户数据失败 + 'deleteUserDataFailed': 'Nabigong burahin ang data ng user', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': + 'Matagumpay na naka-logout sa third-party', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'Nabigo ang pag-logout sa third-party', // 第三方登录退出失败 + 'signOutProcessError': + 'Nagkaroon ng error sa proseso ng pag-sign out', // 登出过程发生错误 'deleteAccountProcessError': - 'Nagkaroon ng error sa proseso ng pagbura ng account', - 'userDataClearSuccess': 'Matagumpay na na-clear ang data ng user', - 'allUserDataClearSuccess': 'Matagumpay na na-clear ang lahat ng data ng user', - 'accountServiceInitialized': 'Naisimulan na ang AccountService', + 'Nagkaroon ng error sa proseso ng pagbura ng account', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Matagumpay na na-clear ang data ng user', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Matagumpay na na-clear ang lahat ng data ng user', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Naisimulan na ang AccountService', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Nabigong makuha ang katayuan ng pahintulot', 'communicationPermissions': 'Mga Pahintulot sa Komunikasyon', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Mga Pahintulot sa Kalendaryo', 'locationPermissions': 'Mga Pahintulot sa Lokasyon', 'phone': 'Telepono', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Pagsulat sa Kalendaryo', 'calendarFullAccess': 'Buong Access sa Kalendaryo', 'locationInfo': 'Impormasyon sa Lokasyon', 'phonePermissionDesc': 'Ginagamit para sa function ng pagtawag', 'smsPermissionDesc': 'Ginagamit para sa function ng pagpapadala ng SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Ginagamit para sa paglikha ng mga kaganapan at paalala sa kalendaryo', 'calendarFullAccessPermissionDesc': @@ -513,28 +1004,90 @@ const Map tlPH = { 'Ang function ng pagtawag ay nangangailangan ng pahintulot sa telepono', 'smsPermissionDetailDesc': 'Ang function ng pagpapadala ng SMS ay nangangailangan ng pahintulot sa SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Ang paglikha ng mga kaganapan sa kalendaryo ay nangangailangan ng pahintulot sa pagsulat sa kalendaryo', 'calendarFullAccessPermissionDetailDesc': 'Ang pamamahala ng mga kaganapan sa kalendaryo ay nangangailangan ng buong pahintulot sa kalendaryo', 'locationPermissionDetailDesc': 'Ang pagkuha ng impormasyon sa lokasyon ay nangangailangan ng pahintulot sa lokasyon', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Kailangan ng app ang pahintulot na ito para sa buong paggana', 'permanentDenialText': 'Permanenteng tinanggihan mo ang pahintulot sa {permission}, mangyaring pumunta sa mga setting ng app para paganahin ito', 'goToSettings': 'Pumunta sa Mga Setting', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'May Natagpuang Bagong Bersyon', - 'remindLater': 'Paalalahanan Mamaya', - 'updateNow': 'I-update Ngayon', - 'checkUpdate': 'Suriin kung may Update', - 'updateFailed': 'Nabigo ang Pag-update', + 'newVersionFound': 'May Natagpuang Bagong Bersyon', // 版本更新对话框标题 + 'remindLater': 'Paalalahanan Mamaya', // 稍后提醒按钮 + 'updateNow': 'I-update Ngayon', // 立即更新按钮 + 'checkUpdate': 'Suriin kung may Update', // 检查更新按钮 + 'updateFailed': 'Nabigo ang Pag-update', // 更新失败提示 'cannotOpenAppStore': - 'Hindi mabuksan ang app store, mangyaring pumunta nang manu-mano sa app store para mag-update', + 'Hindi mabuksan ang app store, mangyaring pumunta nang manu-mano sa app store para mag-update', // 无法打开应用商店提示 'updateErrorRetry': - 'Nagkaroon ng error habang nag-a-update, pakisubukang muli mamaya', + 'Nagkaroon ng error habang nag-a-update, pakisubukang muli mamaya', // 更新错误重试提示 //国家列表 "邮箱": "Email", @@ -643,8 +1196,23 @@ const Map tlPH = { "东帝汶": "Timor-Leste", "斐济": "Fiji", "所罗门群岛": "Solomon Islands", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Kasaysayan ng Pagsasalin", "enableRecording": "Paganahin ang Pag-record", @@ -653,9 +1221,24 @@ const Map tlPH = { "phoneUser": "User ng Telepono", "selectSourceLanguage": "Pumili ng pinagmulang wika", "selectTargetLanguage": "Pumili ng target na wika", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Wala pang kasaysayan", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Burahin ang Kasaysayan", "clearHistoryConfirm": "Sigurado ka bang gusto mong burahin ang lahat ng kasaysayan ng pagsasalin? Hindi na ito maibabalik.", @@ -664,7 +1247,58 @@ const Map tlPH = { "deleteSessionConfirm": "Sigurado ka bang gusto mong burahin ang lahat ng record ng pagsasalin para sa session na ito? Hindi na ito maibabalik.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Isalin ang mga Audio File", "noAudioFiles": "Wala pang mga audio file", "calculating": "Kinakalkula...", @@ -710,7 +1344,7 @@ const Map tlPH = { "autoInputCode": "Awtomatikong ilagay ang code", "skipBinding": "Laktawan ang pag-bind", "rescan": "I-scan muli", - "skip": "Laktawan", + "verifyingDevice": "Bine-verify ang device...", "confirmBinding": "Kumpirmahin ang pag-bind", "associatingDevice": "Inuugnay ang device...", @@ -744,12 +1378,17 @@ const Map tlPH = { "pairingFailedRetry": "Nabigo ang pag-pair, pakisubukang muli", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Paki-enable ang Bluetooth', 'deviceDisconnected': 'Nadiskonekta ang device', 'readyToStartPairing': 'Handa nang simulan ang pag-pair', 'checkingEnvironment': 'Sinusuri ang kapaligiran...', 'ensureHeadsetOnAndPairingMode': 'Pakitiyak na naka-on ang headset at nasa pairing mode', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Itinatatag ang secure na koneksyon...', 'needManualBindingAuthCode': 'Kailangan ng manual binding authorization code...', @@ -774,6 +1413,19 @@ const Map tlPH = { 'deviceAuthorizationFailedCheckCode': 'Nabigo ang awtorisasyon ng device, pakisuri ang authorization code', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Feedback ng User", 'feedbackInfo': 'Magbigay ng feedback o suhestiyon', @@ -803,6 +1455,13 @@ const Map tlPH = { "connectionFailed": "Nabigo ang Koneksyon", "retryConnection": "Muling kumonekta", "ota_updateNow": "I-update Ngayon", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Panatilihing konektado ang device, huwag isara ang app", "doNotDisconnect": "Huwag idiskonekta", @@ -812,11 +1471,11 @@ const Map tlPH = { "Alisin ang parehong earbuds, at tiyaking parehong may 20% o higit pang baterya", // 音乐列表页面 - "noMusic": "Walang Musika", - "noPlayingMusic": "Walang tumutugtog na musika", - "unknownSong": "Hindi Kilalang Kanta", - "unknownArtist": "Hindi Kilalang Artista", - "playAll": "I-play Lahat", + "noMusic": "Walang Musika", // 暂无音乐 + "noPlayingMusic": "Walang tumutugtog na musika", // 暂无播放音乐 + "unknownSong": "Hindi Kilalang Kanta", // 未知歌曲 + "unknownArtist": "Hindi Kilalang Artista", // 未知歌手 + "playAll": "I-play Lahat", // 播放全部 // 语言名称 "中文(简体)": "Chinese (Pinasimple)", @@ -858,4 +1517,23 @@ const Map tlPH = { "乌尔都语": "Urdu", "波斯语": "Persian", "斯瓦希里语": "Swahili", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/tr_tr.dart b/lib/core/translations/language/tr_tr.dart index c981bdeba..190a4cdc8 100644 --- a/lib/core/translations/language/tr_tr.dart +++ b/lib/core/translations/language/tr_tr.dart @@ -33,6 +33,7 @@ const Map trTR = { "spanish": "İspanyolca", "portuguese": "Portekizce", "traditionalChinese": "Geleneksel Çince", + "traditionalChineseHK": "Geleneksel Çince (Hong Kong)", "japanese": "Japonca", "korean": "Korece", "french": "Fransızca", @@ -100,12 +101,15 @@ const Map trTR = { "usePasswordLogin": "Parolayla Giriş Yap", // 隐私政策弹窗 - "loginDeclaration": "Voitrans Beyanı", - "welcomeToThisApp": "Voitrans'a hoş geldiniz, lütfen dikkatlice okuyun", + "loginDeclaration": "Voitrans Beyanı", // Voitrans 声明 + "welcomeToThisApp": + "Voitrans'a hoş geldiniz, lütfen dikkatlice okuyun", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", 'Kabul Et ve Gir' düğmesine tıklamak, yukarıdaki sözleşmeleri tamamen okuduğunuzu ve kabul ettiğinizi gösterir. 'Reddet' düğmesine tıklamak uygulamadan çıkacaktır.", - "disagree": "Reddet", - "agreeAndEnter": "Kabul Et ve Gir", + ", 'Kabul Et ve Gir' düğmesine tıklamak, yukarıdaki sözleşmeleri tamamen okuduğunuzu ve kabul ettiğinizi gösterir. 'Reddet' düğmesine tıklamak uygulamadan çıkacaktır.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Reddet", // 不同意 + "agreeAndEnter": "Kabul Et ve Gir", // 同意并进入 // 首页 "deviceStatus": "Cihaz Durumu", @@ -183,6 +187,209 @@ const Map trTR = { "usageStats": "Kullanım İstatistikleri", "usageStatsInfo": "Kullanım istatistiklerinizi görüntüleyin", "scene": "Senaryo", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Atla", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Toplantıyı Başlat", @@ -197,13 +404,244 @@ const Map trTR = { 'aiSummary': 'Yapay Zeka Özeti', 'meetingTranscript': 'Toplantı Metni', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Sistem Ayarları", //系统设置 - "vipRecharge": "Premium Üye Recharge", //会员充值 - "aiRecharge": "Premium Üye", //AI充值 - "translationRecharge": "Çeviri Toplantı Recharge", //翻译充值 - "meetingAssistantRecharge": "Toplantı Asistanı Recharge", //会议助手充值 - "cloudSync": "Bulut Sincronizasyonu", //云端同步 + "systemSettings": "Sistem Ayarları", + "vipRecharge": "Premium Üye Recharge", + "aiRecharge": "Premium Üye", + "translationRecharge": "Çeviri Toplantı Recharge", + "meetingAssistantRecharge": "Toplantı Asistanı Recharge", + "cloudSync": "Bulut Sincronizasyonu", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Bağlı cihaz:", "accountId": "Hesap Kimliği:", "systemSetting": "Sistem Ayarları", @@ -216,8 +654,8 @@ const Map trTR = { "lastBackup": "Son yedekleme:", "privacySettings": "Gizlilik Ayarları", "privacySettingsInfo": "Veri toplama ve izinleri yönetin", - "permissionManagement": "İzin Yönetimi", - "permissionManagementInfo": "Uygulama izin ayarlarını yönetin", + "permissionManagement": "İzin Yönetimi", // 权限管理 + "permissionManagementInfo": "Uygulama izin ayarlarını yönetin", // 管理应用权限设置 "aboutApplication": "Uygulama Hakkında", "versions": "Sürüm", "checkUpdates": "Güncellemeleri Kontrol Et", @@ -253,11 +691,10 @@ const Map trTR = { 'networkErrorRetry': 'Ağ hatası, lütfen daha sonra tekrar deneyin', // 设备管理相关 - 'clearPairedDevices': 'Eşleştirilmiş Cihazları Temizle', - 'clearPairedDevicesConfirm': - 'Tüm eşleştirilmiş cihazları temizlemek istediğinizden emin misiniz?', - 'clearPairedDevicesSuccess': 'Eşleştirilmiş cihazlar başarıyla temizlendi', - 'clearPairedDevicesFailed': 'Eşleştirilmiş cihazlar temizlenemedi', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Gerçek Zamanlı Sesli Sohbet", @@ -266,11 +703,20 @@ const Map trTR = { "loading": "Yükleniyor...", //设备管理页面 - "earphone": "Kulaklık", - "voicerecorder": "Ses Kaydedici", - "notBound": "Bağlı Değil", - "deviceNotBoundYet": "Henüz cihaz bağlanmadı", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Bağlantıyı Kaldır", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -299,6 +745,20 @@ const Map trTR = { "loadMoreMessages": "Daha fazla mesaj yükle...", "loadFailedClickRetry": "Yüklenemedi, yeniden denemek için tıklayın", "swipeUpForMore": "Daha fazlası için yukarı kaydırın", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': @@ -322,8 +782,8 @@ const Map trTR = { 'startPhoneCallMode': 'Arama modunu başlat, sesli girişi başlat', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Mesajınızı buraya girin...', - 'characterCount': '{count} karakter', + 'fullScreenEditorHint': 'Mesajınızı buraya girin...', // 全屏编辑器输入提示 + 'characterCount': '{count} karakter', // 字符计数显示 // 消息长按操作 'copy': 'Kopyala', @@ -332,6 +792,7 @@ const Map trTR = { 'submitSuccess': 'Başarıyla gönderildi', 'submitFailed': 'Gönderim başarısız', 'reportSubmitted': 'Şikayetiniz gönderildi, en kısa sürede işleme alacağız', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Zararlı/Güvensiz', 'pornographicVulgar': 'Pornografik/Kaba', 'misleadingAttack': 'Yanıltıcı/Saldırgan', @@ -341,6 +802,7 @@ const Map trTR = { 'other': 'Diğer', 'reportDescriptionHint': 'Şikayet nedeninizi öğrenmek istiyoruz, karşılaştığınız sorunu açıklayabilirsiniz.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Yapay Zeka tarafından oluşturuldu', @@ -351,15 +813,15 @@ const Map trTR = { 'moreMusic': 'Daha Fazla Müzik', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'saat', - 'minutes': 'dakika', - 'seconds': 'saniye', - 'navigating': 'Navigasyon sürüyor', - 'currentLocation': 'Mevcut Konum', - 'approximate': 'Yaklaşık', - 'enterRoad': 'Yola Gir', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'saat', // 小时单位 + 'minutes': 'dakika', // 分钟单位 + 'seconds': 'saniye', // 秒单位 + 'navigating': 'Navigasyon sürüyor', // 导航状态 + 'currentLocation': 'Mevcut Konum', // 当前位置 + 'approximate': 'Yaklaşık', // 大约 + 'enterRoad': 'Yola Gir', // 进入道路 "driving": "Sürüş", "walking": "Yürüme", "bicycling": "Bisiklet", @@ -395,6 +857,17 @@ const Map trTR = { "friday": "Cum", "saturday": "Cmt", "sunday": "Paz", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Güneşli", "partlyCloudy": "Az Bulutlu", @@ -430,6 +903,8 @@ const Map trTR = { 'deleteAccount': 'Hesabı Sil', 'deleteAccountTips': 'Hesabınızı kalıcı olarak silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -450,6 +925,8 @@ const Map trTR = { 'Sunucu iç hatası, lütfen daha sonra tekrar deneyin', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Resim sıkıştırılamadı', 'avatarUpdateFailed': 'Avatar güncellenemedi', 'usernameCannotBeEmpty': 'Kullanıcı adı boş olamaz', @@ -462,28 +939,44 @@ const Map trTR = { 'deleteAccountFailedRetry': 'Hesap silinemedi, lütfen tekrar deneyin', // 账号服务相关 - 'clearUserDataFailed': 'Kullanıcı verileri temizlenemedi', - 'deleteUserDataFailed': 'Kullanıcı verileri silinemedi', - 'thirdPartyLogoutSuccess': 'Üçüncü taraf oturumu başarıyla kapatıldı', - 'thirdPartyLogoutFailed': 'Üçüncü taraf oturumu kapatılamadı', - 'signOutProcessError': 'Oturum kapatma işlemi sırasında bir hata oluştu', - 'deleteAccountProcessError': 'Hesap silme işlemi sırasında bir hata oluştu', - 'userDataClearSuccess': 'Kullanıcı verileri başarıyla temizlendi', - 'allUserDataClearSuccess': 'Tüm kullanıcı verileri başarıyla temizlendi', - 'accountServiceInitialized': 'Hesap Hizmeti başlatıldı', + 'clearUserDataFailed': 'Kullanıcı verileri temizlenemedi', // 清理用户数据失败 + 'deleteUserDataFailed': 'Kullanıcı verileri silinemedi', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': + 'Üçüncü taraf oturumu başarıyla kapatıldı', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'Üçüncü taraf oturumu kapatılamadı', // 第三方登录退出失败 + 'signOutProcessError': + 'Oturum kapatma işlemi sırasında bir hata oluştu', // 登出过程发生错误 + 'deleteAccountProcessError': + 'Hesap silme işlemi sırasında bir hata oluştu', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Kullanıcı verileri başarıyla temizlendi', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Tüm kullanıcı verileri başarıyla temizlendi', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Hesap Hizmeti başlatıldı', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'İzin durumu alınamadı', 'communicationPermissions': 'İletişim İzinleri', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Takvim İzinleri', 'locationPermissions': 'Konum İzinleri', 'phone': 'Telefon', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Takvime Yaz', 'calendarFullAccess': 'Tam Takvim Erişimi', 'locationInfo': 'Konum Bilgisi', 'phonePermissionDesc': 'Telefon arama özelliği için kullanılır', 'smsPermissionDesc': 'SMS gönderme özelliği için kullanılır', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Takvim etkinlikleri ve hatırlatıcılar oluşturmak için kullanılır', 'calendarFullAccessPermissionDesc': @@ -499,27 +992,89 @@ const Map trTR = { 'permissionRequestError': 'İzin istenirken hata oluştu', 'phonePermissionDetailDesc': 'Arama özelliği telefon izni gerektirir', 'smsPermissionDetailDesc': 'SMS gönderme özelliği SMS izni gerektirir', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Takvim etkinliği oluşturma takvime yazma izni gerektirir', 'calendarFullAccessPermissionDetailDesc': 'Takvim etkinliklerini yönetme tam takvim erişimi gerektirir', 'locationPermissionDetailDesc': 'Konum bilgisi alma konum izni gerektirir', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Uygulamanın tam işlevsellik için bu izne ihtiyacı var', 'permanentDenialText': '{permission} iznini kalıcı olarak reddettiniz, lütfen etkinleştirmek için uygulama ayarlarına gidin', 'goToSettings': 'Ayarlara Git', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Yeni Sürüm Bulundu', - 'remindLater': 'Daha Sonra Hatırlat', - 'updateNow': 'Şimdi Güncelle', - 'checkUpdate': 'Güncellemeleri Kontrol Et', - 'updateFailed': 'Güncelleme Başarısız', + 'newVersionFound': 'Yeni Sürüm Bulundu', // 版本更新对话框标题 + 'remindLater': 'Daha Sonra Hatırlat', // 稍后提醒按钮 + 'updateNow': 'Şimdi Güncelle', // 立即更新按钮 + 'checkUpdate': 'Güncellemeleri Kontrol Et', // 检查更新按钮 + 'updateFailed': 'Güncelleme Başarısız', // 更新失败提示 'cannotOpenAppStore': - 'Uygulama mağazası açılamıyor, lütfen güncellemek için manuel olarak gidin', + 'Uygulama mağazası açılamıyor, lütfen güncellemek için manuel olarak gidin', // 无法打开应用商店提示 'updateErrorRetry': - 'Güncelleme sırasında bir hata oluştu, lütfen daha sonra tekrar deneyin', + 'Güncelleme sırasında bir hata oluştu, lütfen daha sonra tekrar deneyin', // 更新错误重试提示 //国家列表 "邮箱": "E-posta", @@ -628,8 +1183,23 @@ const Map trTR = { "东帝汶": "Doğu Timor", "斐济": "Fiji", "所罗门群岛": "Solomon Adaları", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Çeviri Geçmişi", "enableRecording": "Kaydı Etkinleştir", @@ -638,9 +1208,24 @@ const Map trTR = { "phoneUser": "Telefon Kullanıcısı", "selectSourceLanguage": "Kaynak Dil Seç", "selectTargetLanguage": "Hedef Dil Seç", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Henüz geçmiş yok", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Geçmişi Temizle", "clearHistoryConfirm": "Tüm çeviri geçmişini temizlemek istediğinizden emin misiniz? Bu işlem geri alınamaz.", @@ -649,7 +1234,58 @@ const Map trTR = { "deleteSessionConfirm": "Bu oturumun tüm çeviri kayıtlarını silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Ses Dosyalarını Çevir", "noAudioFiles": "Henüz ses dosyası yok", "calculating": "Hesaplanıyor...", @@ -695,7 +1331,7 @@ const Map trTR = { "autoInputCode": "Kodu otomatik gir", "skipBinding": "Bağlamayı Atla", "rescan": "Yeniden Tara", - "skip": "Atla", + "verifyingDevice": "Cihaz doğrulanıyor...", "confirmBinding": "Bağlamayı Onayla", "associatingDevice": "Cihaz ilişkilendiriliyor...", @@ -726,12 +1362,17 @@ const Map trTR = { "pairingFailedRetry": "Eşleştirme başarısız, lütfen tekrar deneyin", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Lütfen Bluetooth\'u etkinleştirin', 'deviceDisconnected': 'Cihaz bağlantısı kesildi', 'readyToStartPairing': 'Eşleştirmeye başlamaya hazır', 'checkingEnvironment': 'Ortam kontrol ediliyor...', 'ensureHeadsetOnAndPairingMode': 'Lütfen kulaklığın açık ve eşleştirme modunda olduğundan emin olun', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Güvenli bağlantı kuruluyor...', 'needManualBindingAuthCode': 'Manuel bağlama yetkilendirme kodu gerekli...', 'pairingSuccessful': 'Eşleştirme başarılı!', @@ -754,6 +1395,19 @@ const Map trTR = { 'deviceAuthorizationFailedCheckCode': 'Cihaz yetkilendirmesi başarısız, lütfen yetkilendirme kodunu kontrol edin', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Kullanıcı Geri Bildirimi", 'feedbackInfo': 'Geri bildirim veya öneri sağlayın', @@ -783,6 +1437,13 @@ const Map trTR = { "connectionFailed": "Bağlantı Başarısız", "retryConnection": "Yeniden Dene", "ota_updateNow": "Şimdi Güncelle", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Lütfen cihazı bağlı tutun ve uygulamayı kapatmayın", "doNotDisconnect": "Bağlantıyı kesmeyin", @@ -792,11 +1453,11 @@ const Map trTR = { "Her iki kulaklığı da çıkarın ve pil seviyelerinin %20'un üzerinde olduğundan emin olun", // 音乐列表页面 - "noMusic": "Müzik Yok", - "noPlayingMusic": "Çalan Müzik Yok", - "unknownSong": "Bilinmeyen Şarkı", - "unknownArtist": "Bilinmeyen Sanatçı", - "playAll": "Tümünü Oynat", + "noMusic": "Müzik Yok", // 暂无音乐 + "noPlayingMusic": "Çalan Müzik Yok", // 暂无播放音乐 + "unknownSong": "Bilinmeyen Şarkı", // 未知歌曲 + "unknownArtist": "Bilinmeyen Sanatçı", // 未知歌手 + "playAll": "Tümünü Oynat", // 播放全部 // 语言名称 "中文(简体)": "Çince (Basitleştirilmiş)", @@ -838,4 +1499,23 @@ const Map trTR = { "乌尔都语": "Urduca", "波斯语": "Farsça", "斯瓦希里语": "Svahili", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/uk_ua.dart b/lib/core/translations/language/uk_ua.dart index fd1d08b77..a933b00a0 100644 --- a/lib/core/translations/language/uk_ua.dart +++ b/lib/core/translations/language/uk_ua.dart @@ -33,6 +33,7 @@ const Map ukUA = { "spanish": "Іспанська", "portuguese": "Португальська", "traditionalChinese": "Традиційна китайська", + "traditionalChineseHK": "Традиційна китайська (Гонконг)", "japanese": "Японська", "korean": "Корейська", "french": "Французька", @@ -100,13 +101,15 @@ const Map ukUA = { "usePasswordLogin": "Увійти за паролем", // 隐私政策弹窗 - "loginDeclaration": "Декларація Voitrans", + "loginDeclaration": "Декларація Voitrans", // Voitrans 声明 "welcomeToThisApp": - "Ласкаво просимо до Voitrans, будь ласка, уважно прочитайте", + "Ласкаво просимо до Voitrans, будь ласка, уважно прочитайте", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", натискання 'Погодитися та увійти' означає, що ви повністю прочитали та погодилися з вищезазначеними угодами. Натискання 'Не погоджуватися' призведе до виходу з програми.", - "disagree": "Не погоджуватися", - "agreeAndEnter": "Погодитися та увійти", + ", натискання 'Погодитися та увійти' означає, що ви повністю прочитали та погодилися з вищезазначеними угодами. Натискання 'Не погоджуватися' призведе до виходу з програми.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Не погоджуватися", // 不同意 + "agreeAndEnter": "Погодитися та увійти", // 同意并进入 // 首页 "deviceStatus": "Статус пристрою", @@ -186,6 +189,209 @@ const Map ukUA = { "usageStats": "Статистика використання", "usageStatsInfo": "Перегляньте статистику використання вашого пристрою", "scene": "Сценарій", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Пропустити", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Почати зустріч", @@ -200,13 +406,244 @@ const Map ukUA = { 'aiSummary': 'Підсумок від AI', 'meetingTranscript': 'Транскрипт зустрічі', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Системні налаштування", //系统设置 - "vipRecharge": "Підписатися на премиум-членство", //会员充值 - "aiRecharge": "Преміум-учасник", //AI充值 - "translationRecharge": "Підписатися на переклад", //翻译充值 - "meetingAssistantRecharge": "Підписатися на допомогу з зустрічю", //会议助手充值 - "cloudSync": "Увімкнути синхронізацію в хмарі", //云端同步 + "systemSettings": "Системні налаштування", + "vipRecharge": "Підписатися на премиум-членство", + "aiRecharge": "Преміум-учасник", + "translationRecharge": "Підписатися на переклад", + "meetingAssistantRecharge": "Підписатися на допомогу з зустрічю", + "cloudSync": "Увімкнути синхронізацію в хмарі", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Підключений пристрій:", "accountId": "ID облікового запису:", "systemSetting": "Системні налаштування", @@ -218,8 +655,9 @@ const Map ukUA = { "lastBackup": "Останнє резервне копіювання:", "privacySettings": "Налаштування конфіденційності", "privacySettingsInfo": "Керування збором даних та дозволами", - "permissionManagement": "Керування дозволами", - "permissionManagementInfo": "Керування налаштуваннями дозволів програми", + "permissionManagement": "Керування дозволами", // 权限管理 + "permissionManagementInfo": + "Керування налаштуваннями дозволів програми", // 管理应用权限设置 "aboutApplication": "Про програму", "versions": "Версія", "checkUpdates": "Перевірити оновлення", @@ -254,11 +692,10 @@ const Map ukUA = { 'networkErrorRetry': 'Помилка мережі, спробуйте ще раз пізніше', // 设备管理相关 - 'clearPairedDevices': 'Очистити список спарених пристроїв', - 'clearPairedDevicesConfirm': - 'Ви впевнені, що хочете очистити всі спарені пристрої?', - 'clearPairedDevicesSuccess': 'Список спарених пристроїв успішно очищено', - 'clearPairedDevicesFailed': 'Не вдалося очистити список спарених пристроїв', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Голосовий чат у реальному часі", @@ -267,11 +704,20 @@ const Map ukUA = { "loading": "Завантаження...", //设备管理页面 - "earphone": "Навушники", - "voicerecorder": "Диктофон", - "notBound": "Не прив'язано", - "deviceNotBoundYet": "Пристрій ще не прив'язано", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Відв'язати", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -300,6 +746,20 @@ const Map ukUA = { "loadMoreMessages": "Завантажити більше повідомлень...", "loadFailedClickRetry": "Не вдалося завантажити, натисніть, щоб повторити", "swipeUpForMore": "Проведіть пальцем вгору, щоб побачити більше", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Привіт! Я **СяоЯнь**, я можу допомогти вам:\n\n' @@ -322,8 +782,8 @@ const Map ukUA = { 'startPhoneCallMode': 'Почати режим дзвінка, почати голосове введення', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Введіть своє повідомлення тут...', - 'characterCount': '{count} символів', + 'fullScreenEditorHint': 'Введіть своє повідомлення тут...', // 全屏编辑器输入提示 + 'characterCount': '{count} символів', // 字符计数显示 // 消息长按操作 'copy': 'Копіювати', @@ -332,6 +792,7 @@ const Map ukUA = { 'submitSuccess': 'Надіслано успішно', 'submitFailed': 'Не вдалося надіслати', 'reportSubmitted': 'Скаргу надіслано, ми її розглянемо найближчим часом', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Шкідливий/Небезпечний', 'pornographicVulgar': 'Порнографічний/Вульгарний', 'misleadingAttack': 'Вводить в оману/Атака', @@ -341,6 +802,7 @@ const Map ukUA = { 'other': 'Інше', 'reportDescriptionHint': 'Ми хочемо знати причину вашої скарги, ви можете описати проблему, з якою зіткнулися.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Згенеровано AI', @@ -351,15 +813,15 @@ const Map ukUA = { 'moreMusic': 'Більше музики', //导航卡片 navigation_card - 'kilometers': 'км', - 'meters': 'м', - 'hours': 'год', - 'minutes': 'хв', - 'seconds': 'с', - 'navigating': 'Навігація', - 'currentLocation': 'Поточне місцезнаходження', - 'approximate': 'Прибл.', - 'enterRoad': 'Виїзд на', + 'kilometers': 'км', // 公里单位 + 'meters': 'м', // 米单位 + 'hours': 'год', // 小时单位 + 'minutes': 'хв', // 分钟单位 + 'seconds': 'с', // 秒单位 + 'navigating': 'Навігація', // 导航状态 + 'currentLocation': 'Поточне місцезнаходження', // 当前位置 + 'approximate': 'Прибл.', // 大约 + 'enterRoad': 'Виїзд на', // 进入道路 "driving": "Автомобілем", "walking": "Пішки", "bicycling": "Велосипедом", @@ -395,6 +857,17 @@ const Map ukUA = { "friday": "Пт", "saturday": "Сб", "sunday": "Нд", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Сонячно", "partlyCloudy": "Мінлива хмарність", @@ -430,6 +903,8 @@ const Map ukUA = { 'deleteAccount': 'Видалити обліковий запис', 'deleteAccountTips': 'Ви впевнені, що хочете назавжди видалити свій обліковий запис? Цю дію неможливо скасувати', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -451,6 +926,8 @@ const Map ukUA = { 'Внутрішня помилка сервера, спробуйте ще раз пізніше', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Не вдалося стиснути зображення', 'avatarUpdateFailed': 'Не вдалося оновити аватар', 'usernameCannotBeEmpty': "Ім'я користувача не може бути порожнім", @@ -464,29 +941,44 @@ const Map ukUA = { 'Не вдалося видалити обліковий запис, спробуйте ще раз', // 账号服务相关 - 'clearUserDataFailed': 'Не вдалося очистити дані користувача', - 'deleteUserDataFailed': 'Не вдалося видалити дані користувача', - 'thirdPartyLogoutSuccess': 'Вихід зі стороннього сервісу успішний', - 'thirdPartyLogoutFailed': 'Не вдалося вийти зі стороннього сервісу', - 'signOutProcessError': 'Сталася помилка під час виходу з системи', + 'clearUserDataFailed': 'Не вдалося очистити дані користувача', // 清理用户数据失败 + 'deleteUserDataFailed': 'Не вдалося видалити дані користувача', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': + 'Вихід зі стороннього сервісу успішний', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': + 'Не вдалося вийти зі стороннього сервісу', // 第三方登录退出失败 + 'signOutProcessError': 'Сталася помилка під час виходу з системи', // 登出过程发生错误 'deleteAccountProcessError': - 'Сталася помилка під час видалення облікового запису', - 'userDataClearSuccess': 'Дані користувача успішно очищено', - 'allUserDataClearSuccess': 'Усі дані користувача успішно очищено', - 'accountServiceInitialized': 'Службу облікових записів ініціалізовано', + 'Сталася помилка під час видалення облікового запису', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Дані користувача успішно очищено', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Усі дані користувача успішно очищено', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Службу облікових записів ініціалізовано', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Не вдалося отримати статус дозволів', 'communicationPermissions': 'Дозволи на зв\'язок', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Дозволи календаря', 'locationPermissions': 'Дозволи на місцезнаходження', 'phone': 'Телефон', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Запис до календаря', 'calendarFullAccess': 'Повний доступ до календаря', 'locationInfo': 'Інформація про місцезнаходження', 'phonePermissionDesc': 'Використовується для здійснення дзвінків', 'smsPermissionDesc': 'Використовується для надсилання SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Використовується для створення подій та нагадувань у календарі', 'calendarFullAccessPermissionDesc': @@ -505,28 +997,90 @@ const Map ukUA = { 'Для функції дзвінків потрібен дозвіл на доступ до телефону', 'smsPermissionDetailDesc': 'Для функції надсилання SMS потрібен дозвіл на доступ до SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Для створення подій у календарі потрібен дозвіл на запис до календаря', 'calendarFullAccessPermissionDetailDesc': 'Для керування подіями у календарі потрібен повний доступ до календаря', 'locationPermissionDetailDesc': 'Для отримання інформації про місцезнаходження потрібен дозвіл на доступ до місцезнаходження', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Програмі потрібен цей дозвіл для надання повної функціональності', 'permanentDenialText': 'Ви назавжди відмовили в доступі до {permission}, будь ласка, перейдіть до налаштувань програми, щоб увімкнути його', 'goToSettings': 'Перейти до налаштувань', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Знайдено нову версію', - 'remindLater': 'Нагадати пізніше', - 'updateNow': 'Оновити зараз', - 'checkUpdate': 'Перевірити оновлення', - 'updateFailed': 'Не вдалося оновити', + 'newVersionFound': 'Знайдено нову версію', // 版本更新对话框标题 + 'remindLater': 'Нагадати пізніше', // 稍后提醒按钮 + 'updateNow': 'Оновити зараз', // 立即更新按钮 + 'checkUpdate': 'Перевірити оновлення', // 检查更新按钮 + 'updateFailed': 'Не вдалося оновити', // 更新失败提示 'cannotOpenAppStore': - 'Не вдається відкрити App Store, будь ласка, перейдіть до App Store вручну, щоб оновити', + 'Не вдається відкрити App Store, будь ласка, перейдіть до App Store вручну, щоб оновити', // 无法打开应用商店提示 'updateErrorRetry': - 'Сталася помилка під час оновлення, спробуйте ще раз пізніше', + 'Сталася помилка під час оновлення, спробуйте ще раз пізніше', // 更新错误重试提示 //国家列表 "邮箱": "Email", @@ -635,8 +1189,23 @@ const Map ukUA = { "东帝汶": "Східний Тимор", "斐济": "Фіджі", "所罗门群岛": "Соломонові Острови", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Історія перекладів", "enableRecording": "Увімкнути запис", @@ -645,9 +1214,24 @@ const Map ukUA = { "phoneUser": "Користувач телефону", "selectSourceLanguage": "Вибрати вихідну мову", "selectTargetLanguage": "Вибрати цільову мову", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Історія відсутня", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Очистити історію", "clearHistoryConfirm": "Ви впевнені, що хочете очистити всю історію перекладів? Цю дію неможливо скасувати.", @@ -656,7 +1240,58 @@ const Map ukUA = { "deleteSessionConfirm": "Ви впевнені, що хочете видалити всі записи перекладів цієї сесії? Цю дію неможливо скасувати.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Перекласти аудіофайли", "noAudioFiles": "Аудіофайли відсутні", "calculating": "Обчислення...", @@ -702,7 +1337,7 @@ const Map ukUA = { "autoInputCode": "Автоматичне введення коду", "skipBinding": "Пропустити прив'язку", "rescan": "Повторне сканування", - "skip": "Пропустити", + "verifyingDevice": "Перевірка пристрою...", "confirmBinding": "Підтвердити прив'язку", "associatingDevice": "Асоціація пристрою...", @@ -734,12 +1369,17 @@ const Map ukUA = { "pairingFailedRetry": "Не вдалося спарити, спробуйте ще раз", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Будь ласка, увімкніть Bluetooth', 'deviceDisconnected': 'Пристрій відключено', 'readyToStartPairing': 'Готово до початку спарювання', 'checkingEnvironment': 'Перевірка середовища...', 'ensureHeadsetOnAndPairingMode': 'Переконайтеся, що навушники увімкнені та знаходяться в режимі спарювання', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Встановлення безпечного з\'єднання...', 'needManualBindingAuthCode': 'Потрібен код авторизації для ручної прив\'язки...', @@ -763,6 +1403,19 @@ const Map ukUA = { 'deviceAuthorizationFailedCheckCode': 'Помилка авторизації пристрою, перевірте код авторизації', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Відгук користувача", 'feedbackInfo': 'Надати відгук або пропозицію', @@ -791,6 +1444,13 @@ const Map ukUA = { "connectionFailed": "Помилка підключення", "retryConnection": "Повторити підключення", "ota_updateNow": "Оновити зараз", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Будь ласка, тримайте пристрій підключеним, не закривайте програму", "doNotDisconnect": "Будь ласка, не відключайте", @@ -800,11 +1460,11 @@ const Map ukUA = { "Вийміть обидва навушники та переконайтеся, що заряд батареї в обох перевищує 20%", // 音乐列表页面 - "noMusic": "Немає музики", - "noPlayingMusic": "Немає відтворюваної музики", - "unknownSong": "Невідома пісня", - "unknownArtist": "Невідомий виконавець", - "playAll": "Відтворити все", + "noMusic": "Немає музики", // 暂无音乐 + "noPlayingMusic": "Немає відтворюваної музики", // 暂无播放音乐 + "unknownSong": "Невідома пісня", // 未知歌曲 + "unknownArtist": "Невідомий виконавець", // 未知歌手 + "playAll": "Відтворити все", // 播放全部 // 语言名称 "中文(简体)": "Китайська (спрощена)", @@ -846,4 +1506,23 @@ const Map ukUA = { "乌尔都语": "Урду", "波斯语": "Перська", "斯瓦希里语": "Свахілі", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/vi_vn.dart b/lib/core/translations/language/vi_vn.dart index bc96afa82..4ecda89d1 100644 --- a/lib/core/translations/language/vi_vn.dart +++ b/lib/core/translations/language/vi_vn.dart @@ -33,6 +33,7 @@ const Map viVN = { "spanish": "Tiếng Tây Ban Nha", "portuguese": "Tiếng Bồ Đào Nha", "traditionalChinese": "Tiếng Trung (Phồn thể)", + "traditionalChineseHK": "Tiếng Trung phồn thể (Hồng Kông)", "japanese": "Tiếng Nhật", "korean": "Tiếng Hàn", "french": "Tiếng Pháp", @@ -99,12 +100,15 @@ const Map viVN = { "usePasswordLogin": "Đăng nhập bằng mật khẩu", // 隐私政策弹窗 - "loginDeclaration": "Tuyên bố của Voitrans", - "welcomeToThisApp": "Chào mừng bạn đến với Voitrans, vui lòng đọc kỹ", + "loginDeclaration": "Tuyên bố của Voitrans", // Voitrans 声明 + "welcomeToThisApp": + "Chào mừng bạn đến với Voitrans, vui lòng đọc kỹ", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", nhấn 'Đồng ý và vào' có nghĩa là bạn đã đọc kỹ và đồng ý với các thỏa thuận trên. Nhấn 'Không đồng ý' sẽ thoát khỏi ứng dụng.", - "disagree": "Không đồng ý", - "agreeAndEnter": "Đồng ý và vào", + ", nhấn 'Đồng ý và vào' có nghĩa là bạn đã đọc kỹ và đồng ý với các thỏa thuận trên. Nhấn 'Không đồng ý' sẽ thoát khỏi ứng dụng.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Không đồng ý", // 不同意 + "agreeAndEnter": "Đồng ý và vào", // 同意并进入 // 首页 "deviceStatus": "Trạng thái thiết bị", @@ -182,6 +186,209 @@ const Map viVN = { "usageStats": "Thống kê sử dụng", "usageStatsInfo": "Xem thống kê sử dụng của bạn", "scene": "Tình huống", + // 用量统计模块 + "aiChat": "AI Chat", + "translationStats": "Translation Statistics", + "meetingStats": "Meeting Statistics", + "today": "Today", + "thisWeek": "This Week", + "thisMonth": "This Month", + "history": "History", + "currentSessionStats": "Current Session Stats", + "translationCount": "Translation Count", + "sessionDuration": "Session Duration", + "characters": "Characters", + "recordingDuration": "Recording Duration", + "totalApiCalls": "Total API Calls", + "sessionCount": "Session Count", + "totalCharacters": "Total Characters", + "apiCallStats": "API Call Stats", + "translationApi": "Translation API", + "asr": "ASR", + "tts": "TTS", + //"aiSummary": "AI摘要", + "dataVolumeStats": "Data Volume Stats", + "sourceTextCharacters": "Source Text Characters", + "ttsTextCharacters": "TTS Text Characters", + "effectiveAudioDuration": "Effective Audio Duration", + "totalSessionDuration": "Total Session Duration", + "costStats": "Cost Stats", + "estimatedCost": "Estimated Cost", + "dailyCostThreshold": "Daily Cost Threshold", + "monthlyCostThreshold": "Monthly Cost Threshold", + "usageBehaviorStats": "Usage Behavior Stats", + "mostUsedLanguagePair": "Most-used language pair", + "mostUsedMode": "Most-used mode", + "asrApiCalls": "ASR Calls", + "totalAudioDuration": "Total Audio Duration", + "audioFileSize": "Audio File Size", + "transcriptBytes": "Transcript Bytes", + // 通知文案 + "loadFailed": "Load Failed", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", + "cleanupComplete": "Cleanup Complete", + "cleanedOldData": "Cleaned data older than 90 days", + "exportFeature": "Export Feature", + "exportInDevelopment": "Data export is under development", + + // 商品页面(AI/翻译/会议) + 'availablePackages': 'Available Packages', + 'remainingQuota': 'Remaining Quota', + 'totalQuota': 'Total Quota', + 'remaining': 'Remaining', + 'featureDescription': 'Feature Description', + // AI 功能卡片 + 'musicAndRecommendation': 'Music & Recommendation', + 'navigationAndRoutes': 'Navigation & Routes', + 'nearbySearch': 'Nearby Search', + 'newsInformation': 'News', + 'communicationAssistant': 'Communication Assistant', + // 翻译功能卡片 + 'realtimeTranscription': 'Real-time Transcription', + // 'textTranslation' 已存在 + 'sceneLexicon': 'Scenario Glossary', + 'subtitleDisplay': 'Subtitles', + // 会议功能卡片 + 'meetingRecording': 'Meeting Recording', + 'transcriptionAndSummary': 'Transcription & Summary', + 'keywordSearch': 'Keyword Search', + 'collaborationSharing': 'Collaboration & Sharing', + // 商品名称(按ID) + 'ai_001_name': 'AI Basic 100', + 'ai_002_name': 'AI Basic 500', + 'ai_003_name': 'AI Basic 1000', + 'meet_001_name': 'Meeting Basic 100', + 'meet_002_name': 'Meeting Basic 500', + 'meet_003_name': 'Meeting Basic 1000', + 'trans_001_name': 'Translation Basic 100', + 'trans_002_name': 'Translation Basic 500', + 'trans_003_name': 'Translation Basic 1000', + + // 商品描述(按ID) + 'ai_001_desc': 'Includes 100 uses. Access core AI features.', + 'ai_002_desc': 'Includes 500 uses. Access core AI features.', + 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', + 'meet_001_desc': 'Includes 100 meeting recordings/transcriptions.', + 'meet_002_desc': 'Includes 500 meeting recordings/transcriptions.', + 'meet_003_desc': 'Includes 1000 meeting recordings/transcriptions.', + 'trans_001_desc': 'Includes 100 translations (voice/text).', + 'trans_002_desc': 'Includes 500 translations (voice/text).', + 'trans_003_desc': 'Includes 1000 translations (voice/text).', + +// 商品页通用页脚 + 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', + 'iapCustomerServiceQQLabel': 'IAP customer service QQ: @qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': + 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', + 'meetingHeaderDesc2': + 'Suitable for business meetings, class notes, and interview minutes.', + 'meetingAutoRecording': 'Auto recording and segmentation', + 'meetingSpeakerTagging': 'Speaker labeling', + 'meetingLongAudioTranscription': 'Long audio transcription', + 'meetingKeyPointSummary': 'Key point extraction', + 'meetingTopicNameSearch': 'Search by topic/name', + 'meetingTimelineJump': 'Timeline jump', + 'meetingExportSummary': 'Export minutes', + 'meetingMultiPlatformShare': 'Share across platforms', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': + 'Real-time simultaneous interpretation and text translation with low-latency voice.', + 'transHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', + 'translateZhEn': 'Chinese-English translation', + 'lowLatencyVoiceBroadcast': 'Low-latency voice broadcast', + 'multiLangTextTranslation': 'Multilingual text translation', + 'termOptimizationContextPreserve': + 'Terminology optimization and context preservation', + 'lexiconTourBusinessLife': 'Travel/Business/Life lexicons', + 'personalVocabularyMemory': 'Personal vocabulary memory', + 'conversationSubtitleLargeText': 'Conversation subtitles / Large-text mode', + 'colorHighContrast': 'High color contrast', + 'transDisclaimer': + 'Translation performance depends on microphone, network latency, and ambient noise.', + + // AI 商品页描述 + 'aiHeaderDesc1': + 'Longer conversation quota, more tool calls, extended context length.', + 'aiHeaderDesc2': + 'Suitable for agent Q&A, summarization, analysis, and task execution.', + 'musicSearchPlaybackControl': 'Music library search and playback control', + 'smartPlaylistAndSimilarRecommendations': + 'Smart playlist and similar song recommendations', + 'routePlanningAndCongestionAvoidance': + 'Route planning and congestion avoidance', + 'voiceBroadcastAndWaypoints': 'Voice broadcast and waypoint settings', + 'realTimeWeatherForecast': 'Real-time weather and forecast', + 'clothingAdviceAndTravelReminders': 'Clothing advice and travel reminders', + 'poiSearchFoodGasParking': 'POI search: dining / gas / parking', + 'ratingsHoursAndDirectRoutes': 'Ratings, business hours, and direct routing', + 'hotNewsAndTopicOverview': 'Hot news and topic overview', + 'longArticleSummariesAndKeyPoints': 'Long-article summaries and key points', + 'helpCallAndSMS': 'Help with calls and SMS', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', + + // 会员商品页 + 'benefitsOverview': 'Benefits overview', + 'higherQuota': 'Higher usage quota', + 'lowerUnitPrice': 'Lower unit price', + 'priorityService': 'Priority service', + 'exclusiveSupportChannel': 'Dedicated support channel', + 'fastResponse': 'Fast issue response', + 'eventsAndDiscounts': 'Events and discounts', + 'memberExclusiveEvents': 'Member-exclusive events', + 'longTermDiscountPlan': 'Long-term discount plan', + 'generalPrivileges': 'General privileges', + 'earlyAccessNewFeatures': 'Early access to new features', + 'crossDeviceSync': 'Cross-device sync', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', + + // 新手引导 / Onboarding + 'skip': "Bỏ qua", + 'next': 'Next', + 'sayLilyHint': 'Say "Lily Lily" to the mic', + 'imHere': 'I’m here~', + 'guideWelcomeWakeAI': 'Welcome to Voitrans! First, wake your AI “Lily”.', + 'aiReplyCompleted': 'Lily has finished the reply!', + 'aiThinking': 'Lily is thinking…', + 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', + 'confirmInput': 'Confirm Input', + 'guideClickSendPrefix': 'Tap send, ', + // AI 引导步骤 + 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', + 'guideWeatherInput': 'What’s the weather today?', + 'guideWeatherSend': 'Lily will report the weather in real time', + 'guideWeatherEnd': 'Lily can report weather live—try other commands', + 'guideMusicStart': 'Tell Lily: “Play some rock music”', + 'guideMusicInput': 'Play some rock music', + 'guideMusicSend': 'Lily will find music for you', + 'guideMusicEnd': 'Lily found music—try other commands', + 'guideNavStart': 'Tell Lily: “Navigate to Shenzhen Airport”', + 'guideNavInput': 'Navigate to Shenzhen Airport', + 'guideNavSend': 'Lily will plan the route', + 'guideNavEnd': 'Navigation set—try other commands', + 'guideMeetingStart': + 'Tell Lily: “Create a meeting reminder for 3pm tomorrow”', + 'guideMeetingInput': 'Create a meeting reminder for 3pm tomorrow', + 'guideMeetingSend': 'Lily will create a meeting reminder', + 'guideMeetingEnd': 'Reminder created—try other commands', + 'guidePhoneStart': 'Tell Lily: “Call Mom”', + 'guidePhoneInput': 'Call Mom', + 'guidePhoneSend': 'Lily will make the call', + 'guidePhoneEnd': 'Call placed—try other commands', + 'guideSmsStart': 'Tell Lily: “Send Dad a text: I’ll be home for dinner”', + 'guideSmsInput': 'Text Dad: I’ll be home for dinner', + 'guideSmsSend': 'Lily will send the message', + 'guideSmsEnd': 'Message sent—voice control is convenient', // 商务会议助手页 "startMeeting": "Bắt đầu cuộc họp", @@ -196,13 +403,244 @@ const Map viVN = { 'aiSummary': 'Tóm tắt AI', 'meetingTranscript': 'Bản ghi cuộc họp', + // Meeting模块 - 导航和基础功能 + 'files': 'Files', + 'mine': 'Mine', + 'connect': 'Connect', + 'allFiles': 'All Files', + 'searchInAllFiles': 'Search in all files', + 'from': 'From', + 'sortBy': 'Sort by', + 'creationTime': 'Creation Time', + 'bluetoothConnection': 'Bluetooth Connection', + 'meetingReconnect': 'Reconnect', + 'searching': 'Searching...', + 'searchFailed': 'Search failed, please check if Bluetooth is enabled', + 'aiPenNotFound': 'AI PEN device not found', + 'connectedToAiPen': 'Connected to AI PEN device', + 'checkingNewFiles': 'Checking for new files to import', + 'startingWifi': 'Starting Wi-Fi...', + 'newFilesDetected': 'New files detected, preparing to import', + 'noNewFiles': 'No new files to import', + 'connectingWifi': 'Connecting to Wi-Fi...', + 'wifiConnected': 'Wi-Fi connected successfully', + 'downloadingFiles': 'Downloading files...', + 'downloadingFileProgress': 'Total {total} files, downloading file {current}', + 'downloadComplete': 'Download complete', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', + + // Meeting模块 - 录音功能 + 'startRecording': 'Start Recording', + 'liveRecording': 'Live Recording', + 'audioVideoRecording': 'Audio/Video Recording', + 'callRecording': 'Call Recording', + 'importAudio': 'Import Audio', + 'transcribing': 'Transcribing...', + 'summarizing': 'Summarizing...', + 'analyzing': 'Analyzing...', + 'summaryComplete': 'Summary Complete', + //'generating': '正在生成...', + 'generate': 'Generate', + 'overview': 'Overview', + 'transcription': 'Transcription', + 'summary': 'Summary', + 'mindMap': 'Mind Map', + 'editSpeaker': 'Edit', + 'nameSpeaker': 'Name Speaker', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': 'Transcription Records', + 'templateCommunity': 'Template Community', + 'comingSoon': 'Coming Soon', + 'integration': 'Integration', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': 'Enabled', + 'disabled': 'Disabled', + 'myVoitransDevice': 'My VOITRANS Device', + 'helpAndFeedback': 'Help & Feedback', + 'aboutVoitrans': 'About VOITRANS', + 'meetingDays': 'Days', + 'meetingHours': 'Hours', + 'voitransAiMember': 'Voitrans AI Member', + 'unlockStarterMember': 'Unlock Starter Member', + 'bindDeviceToActivate': 'Bind Voitrans device to activate Starter membership', + 'unlockNow': 'Unlock Now', + + // Meeting模块 - 会员功能 + 'comparison': 'Comparison', + 'detailedInfo': 'Detailed Information', + 'monthlyTranscriptionTime': 'Monthly Transcription Time', + 'unlimited': 'Unlimited', + 'professionalTemplates': 'Professional Templates', + 'limited': 'Limited', + 'fullTemplates': 'Full Templates', + 'professionalTerms': 'Professional Terms', + 'customTemplates': 'Custom Templates', + 'visualMindMap': 'Visual Mind Map', + 'speakerIdentification': 'Speaker Identification', + 'aiVoiceEnhancement': 'AI Voice Enhancement', + 'audioImport': 'Audio Import', + 'multipleExportFormats': 'Multiple Export Formats', + 'professionalSummaryTemplates': 'Professional Summary Templates', + 'professionalTemplateDesc': + 'Professional template design to improve your work efficiency. Customized according to industry needs.', + 'customTemplateDesc': + 'You can customize summary prompts according to your needs and use them to generate the required summaries.', + 'askAiDesc': + 'Intelligently extract deeper information from recordings, generate data tables, key discussion conclusions, To-Do lists, report emails and other formatted content with one click.', + 'visualMindMapDesc': + 'Beyond summaries - organize and visualize key points with mind maps for more effective understanding of the full text.', + 'templateCommunityDesc': + 'Discover, share, and get inspiration from the template library created by users.', + 'speakerIdentificationDesc': + 'Audio transcription will support speaker identification, more intuitively restore meeting or phone call content. At the same time, the summary will be more accurate.', + 'privateCloudSyncDesc': + 'Your recordings and transcriptions will be securely stored on dedicated cloud servers, with full encryption during upload and download to ensure privacy and security.', + 'aiVoiceEnhancementDesc': + 'AI voice enhancement supports multiple noise reduction settings, intelligently eliminates background noise, enhances voice clarity, and improves audio playback quality.', + 'audioImportDesc': + 'Easily import audio files from local or third-party applications, such as voice memos, Google Drive, etc.', + 'multipleExportFormatsDesc': + 'Export your audio recordings, transcription text and summaries in various formats (TXT, PDF, JPEG) to meet your needs.', + + // Meeting模块 - 升级会员 + 'upgradeMembership': 'Upgrade Your Membership', + 'yearlySubscription': 'Yearly Subscription', + 'monthlySubscription': 'Monthly Subscription', + 'proMonthly': 'Pro ¥60/month', + 'proMonthlyDesc': + '7-day free trial, then ¥800/year. Cancel anytime before trial ends.', + 'sevenDayTrial': '7-day Free Trial', + 'unlimitedMonthly': 'Unlimited ¥120/month', + 'unlimitedMonthlyDesc': + '7-day free trial, then ¥1600/year. Cancel anytime before trial ends.', + 'trialNote': '*Free trial for 7 days, then charged annually, cancel anytime.', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/month', + 'subscribe': 'Subscribe', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/month', + 'upgradeNote': + '*After upgrading subscription, the remaining days of the original subscription will be automatically calculated and refunded to your payment account', + 'buyMoreTranscriptionTime': 'Buy More Transcription Time', + 'sixThousandMinutes': '6,000 minutes', + 'threeThousandMinutes': '3,000 minutes', + 'sixHundredMinutes': '600 minutes', + 'oneHundredTwentyMinutes': '120 minutes', + 'validityPeriod': '*Validity Period: ', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', + 'purchase': 'Purchase', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': 'Select Summary Template', + 'useThisTemplate': 'Use This Template', + 'lastUsed': 'Last Used', + 'viewAll': 'View All', + 'recordingLanguage': 'Recording Language', + 'chineseSimplified': 'Chinese Mandarin (Simplified)', + 'meetingGenerateNow': 'Generate Now', + 'keyEventsAnalyzed': 'Analyzed {count} key events.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', + + // Meeting模块 - 文件操作和状态 + 'importing': 'Importing...', + 'batchImporting': 'Batch importing...', + 'importingLocalRecordings': 'Importing local recordings...', + 'importFailed': 'Import file failed: {filePath}, error: {error}', + 'importSuccess': 'Successfully imported {count} local recordings', + 'importError': 'Import failed: {error}', + 'pleaseSelectAudioFile': 'Please select audio file', + 'shareAudio': 'Share Meeting Audio', + 'shareComplete': 'Share complete!', + 'shareFailed': 'Share failed: {error}', + 'fileProcessingFailed': 'File processing failed: {filePath}, error: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': 'Unknown Language', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': 'Storage', + 'meetingStoragePermissionExplanation': + 'We need access to storage permissions so you can select and upload audio files.', + 'meetingStoragePermissionPermanentDenial': + 'Detected that you have permanently denied storage permission. To continue using this feature, please go to app settings to manually enable storage permission.', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': 'Share Mind Map', + 'shareSuccess': 'Share Success', + + // Meeting模块 - AI相关 + 'askAI': 'Ask AI ...', + 'askAIPrompt': 'What can I help you with today?', + 'continueAsk': 'Continue Asking', + 'todoList': 'To-Do List', + 'extractConclusion': 'Extract Conclusion', + 'generateKeyIndicators': 'Generate Key Indicators', + + // Meeting模块 - 更多操作相关 + 'reSummarize': 'Re-summarize', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': 'Recording Language', + // 'chinese': '中文普通话(简体)', + 'cantonese': 'Cantonese', + 'sichuan': 'Sichuan Dialect', + 'shanghai': 'Shanghai Dialect', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': 'Share Link', + 'copyTranscript': 'Copy Transcript', + 'copySummary': 'Copy Summary', + 'exportAudio': 'Export Audio', + 'exportTranscript': 'Export Transcript', + 'shareMeetingAudio': 'Share Meeting Audio', + 'exportSummary': 'Export Summary', + 'exportAs': 'Export As', + 'exportingPDF': 'Exporting PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': 'Name Current Speaker', + 'recentlyUsedNames': 'Recently Used Names', + 'applyToCurrentParagraph': 'Apply to Current Paragraph', + 'totalTime': 'Total Time', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': 'Sync to Cloud', + 'syncToCloudTip': + 'Automatically sync your recordings to the cloud, you can play, manage and share recordings through any VOITRANS APP or VOITRANS Web (web.voitrans.com).', + 'syncToVoitransApp': 'Sync VOITRANS APP', + 'transcriptionRecord': 'Transcription Record', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': 'Date & Time', + 'location': 'Location', + 'attendees': 'Attendees', + 'inputLocation': 'Enter Location', + 'inputAttendees': 'Enter Attendees', + // 设置页 - "systemSettings": "Cài đặt hệ thống", //系统设置 - "vipRecharge": "Nạp lại dịch vụ Premium", //会员充值 - "aiRecharge": "Thành viên Premium", //AI充值 - "translationRecharge": "Nạp lại dịch vụ dịch", //翻译充值 - "meetingAssistantRecharge": "Nạp lại dịch vụ hỗ trợ họp", //会议助手充值 - "cloudSync": "Chuyển đổi đồng bộ hóa đám mây", //云端同步 + "systemSettings": "Cài đặt hệ thống", + "vipRecharge": "Nạp lại dịch vụ Premium", + "aiRecharge": "Thành viên Premium", + "translationRecharge": "Nạp lại dịch vụ dịch", + "meetingAssistantRecharge": "Nạp lại dịch vụ hỗ trợ họp", + "cloudSync": "Chuyển đổi đồng bộ hóa đám mây", + "memberService": "Member Service", + "bindRewardTitle": "Rewards", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Thiết bị đã kết nối:", "accountId": "ID tài khoản:", "systemSetting": "Cài đặt hệ thống", @@ -214,8 +652,8 @@ const Map viVN = { "lastBackup": "Lần sao lưu cuối:", "privacySettings": "Cài đặt bảo mật", "privacySettingsInfo": "Quản lý thu thập dữ liệu và quyền", - "permissionManagement": "Quản lý quyền", - "permissionManagementInfo": "Quản lý cài đặt quyền của ứng dụng", + "permissionManagement": "Quản lý quyền", // 权限管理 + "permissionManagementInfo": "Quản lý cài đặt quyền của ứng dụng", // 管理应用权限设置 "aboutApplication": "Về ứng dụng", "versions": "Phiên bản", "checkUpdates": "Kiểm tra cập nhật", @@ -250,11 +688,10 @@ const Map viVN = { 'networkErrorRetry': 'Lỗi mạng, vui lòng thử lại sau', // 设备管理相关 - 'clearPairedDevices': 'Xóa thiết bị đã ghép nối', - 'clearPairedDevicesConfirm': - 'Bạn có chắc chắn muốn xóa tất cả các thiết bị đã ghép nối không?', - 'clearPairedDevicesSuccess': 'Xóa thiết bị đã ghép nối thành công', - 'clearPairedDevicesFailed': 'Xóa thiết bị đã ghép nối thất bại', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Trò chuyện giọng nói thời gian thực", @@ -263,11 +700,20 @@ const Map viVN = { "loading": "Đang tải...", //设备管理页面 - "earphone": "Tai nghe", - "voicerecorder": "Máy ghi âm", - "notBound": "Chưa liên kết", - "deviceNotBoundYet": "Chưa liên kết thiết bị", + "deviceTypeUnknown": "Unknown Device", + "deviceTypeClassicBluetoothHeadset": "Classic Bluetooth Headset", + "deviceTypeBleBluetoothHeadset": "BLE Bluetooth Headset", + "deviceTypeSmartVoiceRecorder": "Smart Voice Recorder", + "deviceTypeSmartEye": "Smart Glasses", "unbind": "Hủy liên kết", + "noDevicesBound": "No devices bound yet", + "pleaseBindDeviceFirst": "Please bind a device first to manage", + "noMacAddress": "No MAC Address", + "licenseCode": "License Code", + "confirmUnbind": "Confirm Unbind", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindAction": "Confirm Unbind", //Agent 模块 // agent View @@ -296,6 +742,20 @@ const Map viVN = { "loadMoreMessages": "Tải thêm tin nhắn...", "loadFailedClickRetry": "Tải thất bại, nhấn để thử lại", "swipeUpForMore": "Vuốt lên để xem thêm", + "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! + "voice_interrupt": "Interrupt", // 语音打断 + + // 预设提示词 + "presetMusic": "Play some music", // 来点音乐 + "presetNavigation": "Navigation to", // 导航 + "presetWeather": "Today's weather", // 今日天气 + "presetNews": "Today's news", // 今日新闻 + "presetFood": "Nearby food", // 美食 + "playSomeMusic": "Play some popular music", // 播放一些流行音乐 + "navigationTo": "Please help me navigate to", // 导航到 + "todayWeather": "How's the weather today?", // 今日天气 + "todayNews": "What's the news today?", // 今日新闻 + "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller 'welcomeMessage': 'Chào bạn! Tôi là **Lily**, tôi có thể giúp bạn:\n\n' @@ -319,8 +779,8 @@ const Map viVN = { 'Bắt đầu chế độ gọi điện, bắt đầu nhập liệu bằng giọng nói', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Nhập tin nhắn của bạn ở đây...', - 'characterCount': '{count} ký tự', + 'fullScreenEditorHint': 'Nhập tin nhắn của bạn ở đây...', // 全屏编辑器输入提示 + 'characterCount': '{count} ký tự', // 字符计数显示 // 消息长按操作 'copy': 'Sao chép', @@ -329,6 +789,7 @@ const Map viVN = { 'submitSuccess': 'Gửi thành công', 'submitFailed': 'Gửi thất bại', 'reportSubmitted': 'Báo cáo đã được gửi, chúng tôi sẽ xử lý sớm', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Có hại/Không an toàn', 'pornographicVulgar': 'Khiêu dâm/Thô tục', 'misleadingAttack': 'Gây hiểu lầm/Tấn công', @@ -338,6 +799,7 @@ const Map viVN = { 'other': 'Khác', 'reportDescriptionHint': 'Chúng tôi muốn biết lý do bạn báo cáo, bạn có thể mô tả vấn đề bạn gặp phải.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Được tạo bởi AI', @@ -348,15 +810,15 @@ const Map viVN = { 'moreMusic': 'Thêm nhạc', //导航卡片 navigation_card - 'kilometers': 'km', - 'meters': 'm', - 'hours': 'giờ', - 'minutes': 'phút', - 'seconds': 'giây', - 'navigating': 'Đang điều hướng', - 'currentLocation': 'Vị trí hiện tại', - 'approximate': 'Khoảng', - 'enterRoad': 'Vào đường', + 'kilometers': 'km', // 公里单位 + 'meters': 'm', // 米单位 + 'hours': 'giờ', // 小时单位 + 'minutes': 'phút', // 分钟单位 + 'seconds': 'giây', // 秒单位 + 'navigating': 'Đang điều hướng', // 导航状态 + 'currentLocation': 'Vị trí hiện tại', // 当前位置 + 'approximate': 'Khoảng', // 大约 + 'enterRoad': 'Vào đường', // 进入道路 "driving": "Lái xe", "walking": "Đi bộ", "bicycling": "Đi xe đạp", @@ -391,6 +853,17 @@ const Map viVN = { "friday": "Thứ 6", "saturday": "Thứ 7", "sunday": "Chủ nhật", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Nắng", "partlyCloudy": "Ít mây", @@ -427,6 +900,8 @@ const Map viVN = { 'deleteAccount': 'Xóa tài khoản', 'deleteAccountTips': 'Bạn có chắc chắn muốn xóa vĩnh viễn tài khoản của mình không? Thao tác này không thể hoàn tác', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -446,6 +921,8 @@ const Map viVN = { 'serverInternalErrorRetryLater': 'Lỗi nội bộ máy chủ, vui lòng thử lại sau', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Nén hình ảnh thất bại', 'avatarUpdateFailed': 'Cập nhật ảnh đại diện thất bại', 'usernameCannotBeEmpty': 'Tên người dùng không được để trống', @@ -458,28 +935,42 @@ const Map viVN = { 'deleteAccountFailedRetry': 'Xóa tài khoản thất bại, vui lòng thử lại', // 账号服务相关 - 'clearUserDataFailed': 'Xóa dữ liệu người dùng thất bại', - 'deleteUserDataFailed': 'Xóa dữ liệu người dùng thất bại', - 'thirdPartyLogoutSuccess': 'Đăng xuất bên thứ ba thành công', - 'thirdPartyLogoutFailed': 'Đăng xuất bên thứ ba thất bại', - 'signOutProcessError': 'Đã xảy ra lỗi trong quá trình đăng xuất', - 'deleteAccountProcessError': 'Đã xảy ra lỗi trong quá trình xóa tài khoản', - 'userDataClearSuccess': 'Xóa dữ liệu người dùng thành công', - 'allUserDataClearSuccess': 'Tất cả dữ liệu người dùng đã được xóa thành công', - 'accountServiceInitialized': 'AccountService đã được khởi tạo', + 'clearUserDataFailed': 'Xóa dữ liệu người dùng thất bại', // 清理用户数据失败 + 'deleteUserDataFailed': 'Xóa dữ liệu người dùng thất bại', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': 'Đăng xuất bên thứ ba thành công', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'Đăng xuất bên thứ ba thất bại', // 第三方登录退出失败 + 'signOutProcessError': 'Đã xảy ra lỗi trong quá trình đăng xuất', // 登出过程发生错误 + 'deleteAccountProcessError': + 'Đã xảy ra lỗi trong quá trình xóa tài khoản', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Xóa dữ liệu người dùng thành công', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Tất cả dữ liệu người dùng đã được xóa thành công', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'AccountService đã được khởi tạo', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Lấy trạng thái quyền thất bại', 'communicationPermissions': 'Quyền giao tiếp', + 'bluetoothPermissions': 'Bluetooth Permissions', + 'notificationPermissions': 'Notification Permissions', + 'storagePermissions': 'Storage Permissions', + 'microphonePermissions': 'Microphone Permissions', + 'alarmPermissions': 'Alarm Permissions', 'calendarPermissions': 'Quyền lịch', 'locationPermissions': 'Quyền vị trí', 'phone': 'Điện thoại', 'sms': 'SMS', + 'contacts': 'Contacts', + //'bluetooth': '蓝牙', + 'notification': 'Notification', + 'alarm': 'Alarm', 'calendarWrite': 'Ghi lịch', 'calendarFullAccess': 'Truy cập lịch đầy đủ', 'locationInfo': 'Thông tin vị trí', 'phonePermissionDesc': 'Dùng cho chức năng gọi điện thoại', 'smsPermissionDesc': 'Dùng cho chức năng gửi SMS', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'Dùng để tạo sự kiện và lời nhắc trên lịch', 'calendarFullAccessPermissionDesc': 'Dùng để đọc và quản lý các sự kiện và lời nhắc trên lịch', @@ -495,28 +986,90 @@ const Map viVN = { 'phonePermissionDetailDesc': 'Chức năng gọi điện cần quyền truy cập điện thoại', 'smsPermissionDetailDesc': 'Chức năng gửi SMS cần quyền truy cập SMS', + 'alarmPermissionDetailDesc': + 'This permission is required to set exact alarms and ensure reminders trigger on time', 'calendarWritePermissionDetailDesc': 'Tạo sự kiện lịch cần quyền ghi vào lịch', 'calendarFullAccessPermissionDetailDesc': 'Quản lý sự kiện lịch cần quyền truy cập lịch đầy đủ', 'locationPermissionDetailDesc': 'Lấy thông tin vị trí cần quyền truy cập vị trí', + 'contactsPermissionDesc': 'Used for accessing contact information', + 'contactsPermissionDetailDesc': + 'Phone call and SMS functionality requires contacts permission to select contacts', + 'bluetoothPermissionDesc': + 'Used for connecting and managing Bluetooth devices', + 'bluetoothPermissionDetailDesc': + 'Connecting to Bluetooth headphones and other devices requires Bluetooth permission', + 'bluetoothScanPermissionDesc': 'Used for scanning nearby Bluetooth devices', + 'bluetoothScanPermissionDetailDesc': + 'Scanning for nearby Bluetooth devices requires Bluetooth scan permission', + 'bluetoothConnectPermissionDesc': 'Used for connecting to Bluetooth devices', + 'bluetoothConnectPermissionDetailDesc': + 'Connecting to Bluetooth devices requires Bluetooth connect permission', + 'notificationPermissionDesc': 'Used for sending notification messages', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'Ứng dụng cần quyền này để cung cấp đầy đủ chức năng', 'permanentDenialText': 'Bạn đã từ chối vĩnh viễn quyền {permission}, vui lòng vào cài đặt ứng dụng để bật', 'goToSettings': 'Đi đến cài đặt', + // 权限申请 + 'bluetoothScan': 'Bluetooth Scan', + 'bluetoothConnect': 'Bluetooth Connect', + 'bluetoothScanExplanation': + 'The app needs Bluetooth scan permission to scan nearby Bluetooth devices.', + 'bluetoothConnectExplanation': + 'The app needs Bluetooth connect permission to connect to Bluetooth devices.', + 'locationForBluetoothExplanation': + 'The app needs location permission to scan Bluetooth devices.', + 'bluetoothScanPermanentDenial': + 'Bluetooth scan permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothConnectPermanentDenial': + 'Bluetooth connect permission has been permanently denied, please go to settings to enable it manually.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'notificationPermission': 'Notification', + 'locationPermission': 'Location', + 'notificationPermissionExplanation': + 'Notification permission is required to display music playback status.', + 'locationPermissionExplanation': + 'Location permission is required to get current location.', + 'notificationPermissionPermanentDenial': + 'You have permanently denied notification permission, please go to settings to enable it.', + 'locationPermissionPermanentDenial': + 'You have permanently denied location permission, please go to settings to enable it.', +//'microphonePermission': '录音', + 'storagePermission': 'Storage', + 'microphonePermissionExplanation': + 'We need microphone permission to record audio content.', + 'storagePermissionExplanation': + 'We need storage permission so you can select and upload audio files.', + 'microphonePermissionPermanentDenial': + 'Microphone permission has been permanently denied. To continue using this feature, please go to app settings to manually enable microphone permission.', + 'storagePermissionPermanentDenial': + 'Storage permission has been permanently denied. To continue using this feature, please go to app settings to manually enable storage permission.', + + //permission_util.dart + 'permissionUtilNeed': 'Need ', + 'permissionUtilPermission': ' Permission', + 'permissionUtilRestricted': ' Permission Restricted', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', + 'permissionUtilConfirm': 'OK', + // 版本更新对话框 - 'newVersionFound': 'Đã tìm thấy phiên bản mới', - 'remindLater': 'Nhắc lại sau', - 'updateNow': 'Cập nhật ngay', - 'checkUpdate': 'Kiểm tra cập nhật', - 'updateFailed': 'Cập nhật thất bại', + 'newVersionFound': 'Đã tìm thấy phiên bản mới', // 版本更新对话框标题 + 'remindLater': 'Nhắc lại sau', // 稍后提醒按钮 + 'updateNow': 'Cập nhật ngay', // 立即更新按钮 + 'checkUpdate': 'Kiểm tra cập nhật', // 检查更新按钮 + 'updateFailed': 'Cập nhật thất bại', // 更新失败提示 'cannotOpenAppStore': - 'Không thể mở App Store, vui lòng vào App Store để cập nhật thủ công', + 'Không thể mở App Store, vui lòng vào App Store để cập nhật thủ công', // 无法打开应用商店提示 'updateErrorRetry': - 'Đã xảy ra lỗi trong quá trình cập nhật, vui lòng thử lại sau', + 'Đã xảy ra lỗi trong quá trình cập nhật, vui lòng thử lại sau', // 更新错误重试提示 //国家列表 "邮箱": "Email", @@ -625,8 +1178,23 @@ const Map viVN = { "东帝汶": "Timor-Leste", "斐济": "Fiji", "所罗门群岛": "Quần đảo Solomon", + "刚果民主共和国": "Democratic Republic of the Congo", + "安哥拉": "Angola", + "苏丹": "Sudan", + "马尔代夫": "Maldives", + "不丹": "Bhutan", + "摩纳哥": "Monaco", + "圣马力诺": "San Marino", + "牙买加": "Jamaica", + "巴哈马": "Bahamas", + "巴布亚新几内亚": "Papua New Guinea", + "萨摩亚": "Samoa", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Picture Translation", + "textTranslation": "Text Translation", + // 翻译主页 (translation_view.dart) "translationHistory": "Lịch sử dịch", "enableRecording": "Bật ghi âm", @@ -635,9 +1203,24 @@ const Map viVN = { "phoneUser": "Người dùng điện thoại", "selectSourceLanguage": "Chọn ngôn ngữ nguồn", "selectTargetLanguage": "Chọn ngôn ngữ đích", + "me": "Me", + "counterPart": "Counterpart", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": "Auto Detect", // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": "Language detection failed", + "translationFailed": "Translation failed", + "pleaseInputText": "Please input text", + "textTooLong": "Text too long, max 5000 characters", - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "Chưa có lịch sử", + "historyRecords": "History Records", + "clearResults": "Clear Results", "clearHistory": "Xóa lịch sử", "clearHistoryConfirm": "Bạn có chắc muốn xóa toàn bộ lịch sử dịch không? Thao tác này không thể hoàn tác.", @@ -646,7 +1229,58 @@ const Map viVN = { "deleteSessionConfirm": "Bạn có chắc muốn xóa tất cả các bản ghi dịch của phiên này không? Thao tác này không thể hoàn tác.", - // 翻译录音文件列表页 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": "Select Image Source", + "imagePreview": "Image Preview", + "translationResult": "Translation Result", + "recognitionResult": "Recognition Result", + "translatedImagePreview": "Translated Image Preview", + "translatedImageLoadFailed": "Failed to load translated image", + "pleaseSelectImage": "Please select an image", + "imageLoadFailed": "Image load failed", + "imageQuality": "Image Quality", + "maxSize": "Max Size", + "close": "Close", + "setImageQuality": "Set Image Quality", + "currentQuality": "Current quality: @value%", + "setMaxSize": "Set Max Size", + "currentMaxSize": "Current: @pxpx", + "waitingForAction": "Waiting for action", + "pleaseSelectImageToStart": "Please select an image to start", + "chooseImage": "Choose Image", + "openingCamera": "Opening camera...", + "openingPhotoAlbum": "Opening photo album...", + "cancelled": "Cancelled", + "userCancelledSelection": "User cancelled selection", + "translatingImage": "Translating Image", + "callingImageTranslateService": "Calling image translation service...", + "savingRecord": "Saving Record", + "savingTranslationResult": "Saving translation result...", + "translationCompleted": "Translation Completed", + "allStepsCompleted": "All steps completed", + "processingFailed": "Processing Failed", + "imageProcessingOrTranslationFailed": + "Image processing or translation failed. Please retry.\nError: {error}", + "imageTooLarge": "Image size exceeds 4MB limit", + "imageTooLargeHint": + "Image size exceeds 4MB. Reduce quality or dimensions and retry", + "emptyTranslationResult": "Image translation API returned empty result", + "imageTranslationFailedTryLater": + "Image translation failed. Network issue or rate limit. Please try later", + "imageTranslationApiException": + "Image translation API exception. Check network and retry", + "permissionRequired": "Permission Required", + "cameraPermissionRequired": "Camera permission required to take photos", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", + "translationDetails": "Translation Details", + "originalImage": "Original Image", + "sourceLanguage": "Source Language", + "targetLanguage": "Target Language", + "translationTime": "Translation Time", + "shareInDevelopment": "Sharing feature under development", + + // 翻译录音文件列表页 "translateAudioFiles": "Dịch tệp âm thanh", "noAudioFiles": "Chưa có tệp âm thanh", "calculating": "Đang tính toán...", @@ -691,7 +1325,7 @@ const Map viVN = { "autoInputCode": "Tự động nhập mã", "skipBinding": "Bỏ qua liên kết", "rescan": "Quét lại", - "skip": "Bỏ qua", + "verifyingDevice": "Đang xác minh thiết bị...", "confirmBinding": "Xác nhận liên kết", "associatingDevice": "Đang liên kết thiết bị...", @@ -723,12 +1357,17 @@ const Map viVN = { "pairingFailedRetry": "Ghép nối thất bại, vui lòng thử lại", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Vui lòng bật Bluetooth', 'deviceDisconnected': 'Thiết bị đã ngắt kết nối', 'readyToStartPairing': 'Sẵn sàng bắt đầu ghép nối', 'checkingEnvironment': 'Đang kiểm tra môi trường...', 'ensureHeadsetOnAndPairingMode': 'Vui lòng đảm bảo tai nghe đã bật và ở chế độ ghép nối', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Đang thiết lập kết nối an toàn...', 'needManualBindingAuthCode': 'Cần mã ủy quyền liên kết thủ công...', 'pairingSuccessful': 'Ghép nối thành công!', @@ -750,6 +1389,19 @@ const Map viVN = { 'deviceAuthorizationFailedCheckCode': 'Ủy quyền thiết bị thất bại, vui lòng kiểm tra mã ủy quyền', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Manual Bluetooth Activation Required', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Please follow these steps:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Enable Bluetooth: Settings → Bluetooth → Turn On', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Connect Device: Find your device in "My Devices" and tap to connect', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Return to app to continue pairing process', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Tip: You can also long press the Bluetooth icon in Control Center to quickly access Bluetooth settings', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'I Know', // 我知道了 + //用户反馈页 "feedback": "Phản hồi người dùng", 'feedbackInfo': 'Cung cấp phản hồi hoặc đề xuất', @@ -776,6 +1428,13 @@ const Map viVN = { "connectionFailed": "Kết nối thất bại", "retryConnection": "Thử kết nối lại", "ota_updateNow": "Cập nhật ngay", + "otaVersionInfoFailed": "Failed to get version info. Please try again later.", + "otaDeviceInfoUnavailable": + "Unable to get device info. Please check the connection and retry.", + "otaProductInfoUnavailable": + "Unable to identify the device. Please reconnect and retry.", + "otaFirmwareVersionInvalid": + "Firmware version is abnormal. Please reconnect and retry.", "keepConnectedDontClose": "Vui lòng giữ thiết bị kết nối, không đóng ứng dụng", "doNotDisconnect": "Vui lòng không ngắt kết nối", @@ -785,11 +1444,11 @@ const Map viVN = { "Lấy cả hai tai nghe ra và đảm bảo pin của cả hai đều trên 20%", // 音乐列表页面 - "noMusic": "Không có nhạc", - "noPlayingMusic": "Không có nhạc đang phát", - "unknownSong": "Bài hát không xác định", - "unknownArtist": "Nghệ sĩ không xác định", - "playAll": "Phát tất cả", + "noMusic": "Không có nhạc", // 暂无音乐 + "noPlayingMusic": "Không có nhạc đang phát", // 暂无播放音乐 + "unknownSong": "Bài hát không xác định", // 未知歌曲 + "unknownArtist": "Nghệ sĩ không xác định", // 未知歌手 + "playAll": "Phát tất cả", // 播放全部 // 语言名称 "中文(简体)": "Tiếng Trung (Giản thể)", @@ -831,4 +1490,23 @@ const Map viVN = { "乌尔都语": "Tiếng Urdu", "波斯语": "Tiếng Ba Tư", "斯瓦希里语": "Tiếng Swahili", + + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", + + //补充 + "insufficientIntegral": "Insufficient integral", + + //余额不足弹窗 + "insufficientBalanceDesc": + 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', + // 会员到期提示 + "aiMemberExpiredDesc": + 'AI membership expired, please go to the membership recharge page to renew.', }; diff --git a/lib/core/translations/language/zh_cn.dart b/lib/core/translations/language/zh_cn.dart index fd1602857..a7da9384f 100644 --- a/lib/core/translations/language/zh_cn.dart +++ b/lib/core/translations/language/zh_cn.dart @@ -33,6 +33,7 @@ const Map zhCN = { "spanish": "西班牙语", "portuguese": "葡萄牙语", "traditionalChinese": "繁体中文", + "traditionalChineseHK": "繁体中文(香港)", "japanese": "日语", "korean": "韩语", "french": "法语", @@ -714,7 +715,7 @@ const Map zhCN = { // Agent controller 'welcomeMessage': '你好!我是**Lily**,我能帮你:\n\n' - '• 答问题和提供信息\n\n' + '• 回答问题和提供信息\n\n' '• 实时语音翻译\n\n' '• 推荐音乐和播客\n\n' '• 语音备忘录和提醒\n\n' @@ -1306,6 +1307,10 @@ const Map zhCN = { "connectionFailed": "连接失败", "retryConnection": "重试连接", "ota_updateNow": "立即更新", + "otaVersionInfoFailed": "获取版本信息失败,请稍后重试", + "otaDeviceInfoUnavailable": "无法获取设备信息,请检查连接后重试", + "otaProductInfoUnavailable": "无法识别当前设备,请重新连接后重试", + "otaFirmwareVersionInvalid": "设备固件版本异常,请重新连接后重试", "keepConnectedDontClose": "请保持设备连接,不要关闭应用", "doNotDisconnect": "请勿断开连接", "charging": "充电中", diff --git a/lib/core/translations/language/zh_hk.dart b/lib/core/translations/language/zh_hk.dart index 535bb5f11..752892fb6 100644 --- a/lib/core/translations/language/zh_hk.dart +++ b/lib/core/translations/language/zh_hk.dart @@ -1,5 +1,4 @@ const Map zhHK = { - // // 通用 'continue': '繼續', 'confirm': '確認', @@ -18,22 +17,23 @@ const Map zhHK = { "responseTimeout": "響應超時", "unknownError": "未知錯誤", - // 啟動頁 + // 启动页 "slogan": "連接世界,豈止聲音", "sloganInfo": "AI語音專家 · 隨時隨地", - // 底部導航 + // 底部导航 "home": "首頁", "explore": "發現", "settings": "設定", - // 語言 + // 语言 "followingSystem": "跟隨系統", "chinese": "中文", "english": "英語", "spanish": "西班牙語", "portuguese": "葡萄牙語", "traditionalChinese": "繁體中文", + "traditionalChineseHK": "繁體中文(HK)", "japanese": "日語", "korean": "韓語", "french": "法語", @@ -56,7 +56,7 @@ const Map zhHK = { "hungarian": "匈牙利語", "norwegian": "挪威語", "romanian": "羅馬尼亞語", - "ukrainian": "烏克兰語", + "ukrainian": "烏克蘭語", "greek": "希臘語", "bulgarian": "保加利亞語", "croatian": "克羅地亞語", @@ -70,7 +70,7 @@ const Map zhHK = { "arabic": "阿拉伯語", "persian": "波斯語", - // 登錄頁 + // 登录页 "welcome": "歡迎使用", "loginTips": "請使用手機號或郵箱登入/註冊", "accountNumber": "手機號碼或郵箱", @@ -98,15 +98,17 @@ const Map zhHK = { "login": "登入", "usePasswordLogin": "使用密碼登入", - // 私隱政策彈窗 - "loginDeclaration": "Voitrans 聲明", // Voitrans 聲明 - "welcomeToThisApp": "歡迎使用Voitrans,請充分閱讀", // 歡迎使用Voitrans,請充分閱讀 + // 隐私政策弹窗 + "loginDeclaration": "Voitrans 聲明", // Voitrans 声明 + "welcomeToThisApp": "歡迎使用Voitrans,請充分閱讀", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - "點擊'同意並進入'表示您已充分閱讀並同意上述協議。點擊'不同意'將退出應用。", // ,點擊"同意並進入"表示您已充分閱讀並同意上述協議。點擊"不同意"將退出應用。 + "點擊'同意並進入'表示您已充分閱讀並同意上述協議。點擊'不同意'將退出應用。", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 "disagree": "不同意", // 不同意 - "agreeAndEnter": "同意並進入", // 同意並進入 + "agreeAndEnter": "同意並進入", // 同意并进入 - // 首頁 + // 首页 "deviceStatus": "設備狀態", "reconnect": "重新連接", "connectingDevice": "正在連接設備...", @@ -155,7 +157,7 @@ const Map zhHK = { 'right': '右', 'checkConnectionStatusFailed': '檢查連接狀態失敗', -// 發現頁 +// 发现页 "searchAi": "搜尋AI功能...", "exploreSlogan": "智能耳機,無限可能", "exploreSlogan1": "智能陪伴,無限可能", @@ -178,7 +180,74 @@ const Map zhHK = { "usageStats": "用量統計", "usageStatsInfo": "查看您的使用統計數據", "scene": "場景", - // 商品名稱(按ID) + // 用量统计模块 + "aiChat": 'AI聊天', + "translationStats": '翻譯統計', + "meetingStats": '會議統計', + "today": '今日', + "thisWeek": '本週', + "thisMonth": '本月', + "history": '歷史', + "currentSessionStats": '當前會話統計', + "translationCount": '翻譯次數', + "sessionDuration": '會話時長', + "characters": '字元數', + "recordingDuration": '錄音時長', + "totalApiCalls": '總調用次數', + "sessionCount": '會話數量', + "totalCharacters": '總字元數', + "apiCallStats": 'API調用統計', + "translationApi": '翻譯API', + "asr": '語音識別', + "tts": '語音合成', + //"aiSummary": "AI摘要", + "dataVolumeStats": '數據量統計', + "sourceTextCharacters": '來源文本字元', + "ttsTextCharacters": 'TTS文本字元', + "effectiveAudioDuration": '有效音訊時長', + "totalSessionDuration": '總會話時長', + "costStats": '成本統計', + "estimatedCost": '預估成本', + "dailyCostThreshold": '日成本預警閾值', + "monthlyCostThreshold": '月成本預警閾值', + "usageBehaviorStats": '使用行為統計', + "mostUsedLanguagePair": '最常用語言對', + "mostUsedMode": '最常用模式', + "asrApiCalls": 'ASR調用次數', + "totalAudioDuration": '音訊總時長', + "audioFileSize": '音訊檔案大小', + "transcriptBytes": '轉寫位元組', + // 通知文案 + "loadFailed": '載入失敗', + "statsLoadFailedTryLater": '統計數據載入失敗,請稍後重試', + "cleanupComplete": '清理完成', + "cleanedOldData": '已清理90天前的過期數據', + "exportFeature": '導出功能', + "exportInDevelopment": '數據導出功能正在開發中', + + // 商品页面(AI/翻译/会议) + 'availablePackages': '可購買套餐', + 'remainingQuota': '剩餘額度', + 'totalQuota': '總額度', + 'remaining': '剩餘', + 'featureDescription': '功能說明', + // AI 功能卡片 + 'musicAndRecommendation': '聽歌與推薦', + 'navigationAndRoutes': '導航與路線', + 'nearbySearch': '附近搜尋', + 'newsInformation': '新聞資訊', + 'communicationAssistant': '通訊助手', + // 翻译功能卡片 + 'realtimeTranscription': '實時同傳', + // 'textTranslation' 已存在 + 'sceneLexicon': '場景詞庫', + 'subtitleDisplay': '字幕顯示', + // 会议功能卡片 + 'meetingRecording': '會議記錄', + 'transcriptionAndSummary': '轉寫與總結', + 'keywordSearch': '關鍵詞檢索', + 'collaborationSharing': '協同分享', + // 商品名称(按ID) 'ai_001_name': 'AI基礎 100 次', 'ai_002_name': 'AI基礎 500 次', 'ai_003_name': 'AI基礎 1000 次', @@ -200,7 +269,108 @@ const Map zhHK = { 'trans_002_desc': '含 500 次翻譯(語音/文本)', 'trans_003_desc': '含 1000 次翻譯(語音/文本)', - // 商務會議助手頁 +// 商品页通用页脚 + 'appNameProvider': '應用名稱:Voitrans · 服務提供:Voitrans', + 'iapCustomerServiceQQLabel': '內購商品專屬客服QQ:@qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': '錄音轉寫、關鍵詞檢索與自動總結,提升會議效率。', + 'meetingHeaderDesc2': '適用於商務會議、課堂筆記、訪談紀要等場景。', + 'meetingAutoRecording': '自動錄音與分段', + 'meetingSpeakerTagging': '講話人標注', + 'meetingLongAudioTranscription': '長音訊轉寫', + 'meetingKeyPointSummary': '關鍵要點提煉', + 'meetingTopicNameSearch': '按主題/人名檢索', + 'meetingTimelineJump': '時間線跳轉', + 'meetingExportSummary': '導出紀要', + 'meetingMultiPlatformShare': '多平台分享', + 'meetingDisclaimer': '建議在安靜環境使用,效果受麥克風與網絡影響,具體以實際表現為準。', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': '多語種實時同傳與文本翻譯,低延時語音播報。', + 'transHeaderDesc2': '適用於出行、商務、演講與教學等場景。', + 'translateZhEn': '中英互譯', + 'lowLatencyVoiceBroadcast': '低延時語音播報', + 'multiLangTextTranslation': '多語種文本翻譯', + 'termOptimizationContextPreserve': '術語優化與語境保持', + 'lexiconTourBusinessLife': '旅遊/商務/生活詞庫', + 'personalVocabularyMemory': '專屬詞彙記憶', + 'conversationSubtitleLargeText': '對話字幕/大字模式', + 'colorHighContrast': '顏色高對比度', + 'transDisclaimer': '翻譯效果受麥克風、網絡時延與環境噪聲影響,具體以實際表現為準。', + + // AI 商品页描述 + 'aiHeaderDesc1': '更長對話額度、更多工具調用、更強上下文長度支持。', + 'aiHeaderDesc2': '適用於智能體問答、總結分析、任務執行等場景。', + 'musicSearchPlaybackControl': '檢索曲庫、播放控制', + 'smartPlaylistAndSimilarRecommendations': '智能推薦歌單與相似歌曲', + 'routePlanningAndCongestionAvoidance': '路線規劃與擁堵規避', + 'voiceBroadcastAndWaypoints': '語音播報與途徑點設置', + 'realTimeWeatherForecast': '實時天氣與預報', + 'clothingAdviceAndTravelReminders': '穿衣建議與出行提醒', + 'poiSearchFoodGasParking': '餐飲/加油/停車等地點檢索', + 'ratingsHoursAndDirectRoutes': '評分、營業時間與路線直達', + 'hotNewsAndTopicOverview': '熱點快訊與專題速覽', + 'longArticleSummariesAndKeyPoints': '長文總結與要點提煉', + 'helpCallAndSMS': '幫忙撥打電話與發短信', + 'templatedMessagesAndScheduleReminders': '模板消息與日程提醒', + 'aiDisclaimer': '以上功能受設備權限、服務可用性與網絡狀況影響,具體以實際表現為準。', + + // 会员商品页 + 'benefitsOverview': '權益總覽', + 'higherQuota': '更高使用額度', + 'lowerUnitPrice': '更低單價', + 'priorityService': '優先服務', + 'exclusiveSupportChannel': '專屬客服通道', + 'fastResponse': '問題快速響應', + 'eventsAndDiscounts': '活動與折扣', + 'memberExclusiveEvents': '會員專屬活動', + 'longTermDiscountPlan': '長期優惠計劃', + 'generalPrivileges': '通用特權', + 'earlyAccessNewFeatures': '新功能優先體驗', + 'crossDeviceSync': '跨設備同步', + 'vipDisclaimer': '具體權益以實際套餐說明為準,可能隨版本迭代調整。', + + // 新手引导 / Onboarding + 'skip': "跳過", + 'next': '下一步', + 'sayLilyHint': "Say \"Lily Lily\" to the mic", + 'imHere': "I’m here~", + 'guideWelcomeWakeAI': "Welcome to Voitrans! First, wake your AI “Lily”.", + 'aiReplyCompleted': "Lily has finished the reply!", + 'aiThinking': "Lily is thinking…", + 'guideAwakenSuccess': "Great! Lily is awake—ask it to help.", + 'confirmInput': "Confirm Input", + 'guideClickSendPrefix': "Tap send, ", + // AI 引导步骤 + 'guideWeatherStart': "Tell Lily: “What’s the weather today?”", + 'guideWeatherInput': "What’s the weather today?", + 'guideWeatherSend': "Lily will report the weather in real time", + 'guideWeatherEnd': "Lily can report weather live—try other commands", + 'guideMusicStart': "Tell Lily: “Play some rock music”", + 'guideMusicInput': "Play some rock music", + 'guideMusicSend': "Lily will find music for you", + 'guideMusicEnd': "Lily found music—try other commands", + 'guideNavStart': "Tell Lily: “Navigate to Shenzhen Airport”", + 'guideNavInput': "Navigate to Shenzhen Airport", + 'guideNavSend': "Lily will plan the route", + 'guideNavEnd': "Navigation set—try other commands", + 'guideMeetingStart': + "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", + 'guideMeetingInput': "Create a meeting reminder for 3pm tomorrow", + 'guideMeetingSend': "Lily will create a meeting reminder", + 'guideMeetingEnd': "Reminder created—try other commands", + 'guidePhoneStart': "Tell Lily: “Call Mom”", + 'guidePhoneInput': "Call Mom", + 'guidePhoneSend': "Lily will make the call", + 'guidePhoneEnd': "Call placed—try other commands", + 'guideSmsStart': "Tell Lily: “Send Dad a text: I’ll be home for dinner”", + 'guideSmsInput': "Text Dad: I’ll be home for dinner", + 'guideSmsSend': "Lily will send the message", + 'guideSmsEnd': "Message sent—voice control is convenient", + + // 商务会议助手页 "startMeeting": "開始會議", 'edit': '編輯', 'delete': '刪除', @@ -213,13 +383,225 @@ const Map zhHK = { 'aiSummary': 'AI總結', 'meetingTranscript': '會議原文', - // 設定頁 - "systemSettings": "系統設定", //系统设置 - "vipRecharge": "高級會員充值", //会员充值 - "aiRecharge": "AI充值", //AI充值 - "translationRecharge": "翻譯充值", //翻译充值 - "meetingAssistantRecharge": "會議充值", //会议充值 - "cloudSync": "雲端同步", //云端同步 + // Meeting模块 - 导航和基础功能 + 'files': '檔案', + 'mine': '我的', + 'connect': '連接', + 'allFiles': '全部檔案', + 'searchInAllFiles': '在所有檔案中搜尋', + 'from': '來自', + 'sortBy': '排序方式', + 'creationTime': '建立時間', + 'bluetoothConnection': '藍牙連接', + 'meetingReconnect': '重新連接', + 'searching': '搜尋中...', + 'searchFailed': '搜尋失敗,請檢查藍牙是否已開啟', + 'aiPenNotFound': '未搜尋到 AI PEN 設備', + 'connectedToAiPen': '已連接到 AI PEN 設備', + 'checkingNewFiles': '檢查是否有新檔案需要導入', + 'startingWifi': '正在開啟Wi-Fi...', + 'newFilesDetected': '檢查到有新檔案,正在準備導入', + 'noNewFiles': '沒有新檔案需要導入', + 'connectingWifi': '正在連接 Wi-Fi...', + 'wifiConnected': 'Wi-Fi 連接成功', + 'downloadingFiles': '正在下載檔案...', + 'downloadingFileProgress': '共{total}個檔案,正在下載第{current}個檔案', + 'downloadComplete': '下載完成', + 'downloadCompleteInfo': '下載完成,共{count}個檔案,2秒後自動返回', + + // Meeting模块 - 录音功能 + 'startRecording': '開始錄音', + 'liveRecording': '現場錄音', + 'audioVideoRecording': '音訊、影片錄音', + 'callRecording': '通話錄音', + 'importAudio': '導入音訊', + 'transcribing': '正在轉寫...', + 'summarizing': '正在總結...', + 'analyzing': '正在分析...', + 'summaryComplete': '總結完成', + //'generating': '正在生成...', + 'generate': '生成', + 'overview': '概覽', + 'transcription': '轉寫', + 'summary': '總結', + 'mindMap': '思維導圖', + 'editSpeaker': '編輯', + 'nameSpeaker': '命名發言者', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': '轉寫記錄', + 'templateCommunity': '模板社區', + 'comingSoon': '敬請期待', + 'integration': '集成', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': '開啟', + 'disabled': '關閉', + 'myVoitransDevice': '我的VOITRANS設備', + 'helpAndFeedback': '幫助與反饋', + 'aboutVoitrans': '關於VOITRANS', + 'meetingDays': '天', + 'meetingHours': '小時', + 'voitransAiMember': 'Voitrans AI會員', + 'unlockStarterMember': '解鎖 Starter 會員', + 'bindDeviceToActivate': '綁定 Voitrans 設備可啟用 Starter 會員', + 'unlockNow': '立即解鎖', + + // Meeting模块 - 会员功能 + 'comparison': '對比', + 'detailedInfo': '詳細資訊', + 'monthlyTranscriptionTime': '每月轉寫時長', + 'unlimited': '無限', + 'professionalTemplates': '專業模板', + 'limited': '有限', + 'fullTemplates': '全量模板', + 'professionalTerms': '專業術語', + 'customTemplates': '自訂模板', + 'visualMindMap': '可視化思維導圖', + 'speakerIdentification': '區分說話人', + 'aiVoiceEnhancement': 'AI 人聲增強', + 'audioImport': '音訊導入', + 'multipleExportFormats': '支援多種導出格式', + 'professionalSummaryTemplates': '專業總結模板', + 'professionalTemplateDesc': '專業模板設計,提高您的工作效率。根據行業需求量身定制。', + 'customTemplateDesc': '您可以根據需求自訂總結 Prompts,並用它們生成所需的總結。', + 'askAiDesc': '從錄音中智能挖掘更深入資訊,一鍵生成數據表格、關鍵討論結論、To Do、匯報郵件等格式內容。', + 'visualMindMapDesc': '超越總結-用思維導圖整理和可視化要點,更有效地理解全文。', + 'templateCommunityDesc': '發現、分享,並從用戶建立的模板庫中獲得靈感。', + 'speakerIdentificationDesc': '音訊轉寫將支援區分發言者,更直觀地還原會議或電話通話內容。同時總結將更加準確。', + 'privateCloudSyncDesc': '您的錄音和轉寫等數據將安全儲存在專屬的雲端伺服器中,無論是上傳還是下載,全程加密處理,確保隱私安全。', + 'aiVoiceEnhancementDesc': 'AI 人聲增強支援多檔降噪設定,智能消除背景噪音,增強語音清晰度,提升音訊回放效果。', + 'audioImportDesc': '可以輕鬆從本地或第三方應用導入音訊檔案,如語音備忘錄、Google雲端硬碟等。', + 'multipleExportFormatsDesc': '導出您的音訊錄音、轉寫文本和摘要為各種格式(TXT、PDF、JPEG),以滿足您的需求。', + + // Meeting模块 - 升级会员 + 'upgradeMembership': '升級您的會員', + 'yearlySubscription': '年訂閱', + 'monthlySubscription': '月訂閱', + 'proMonthly': 'Pro ¥60/月', + 'proMonthlyDesc': '7天免費試用,之後按¥800/年。試用期結束前可隨時取消。', + 'sevenDayTrial': '7天免費試用', + 'unlimitedMonthly': 'Unlimited ¥120/月', + 'unlimitedMonthlyDesc': '7天免費試用,之後按¥1600/年。試用期結束前可隨時取消。', + 'trialNote': '*免費試用7天,然後按年收費,隨時取消。', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/月', + 'subscribe': '訂閱', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/月', + 'upgradeNote': '*升級訂閱後,原訂閱的剩餘天數會自動折算差價並退還至您的支付帳戶', + 'buyMoreTranscriptionTime': '購買更多轉寫時長', + 'sixThousandMinutes': '6,000分鐘', + 'threeThousandMinutes': '3,000分鐘', + 'sixHundredMinutes': '600分鐘', + 'oneHundredTwentyMinutes': '120分鐘', + 'validityPeriod': '*有效期:', + 'validityNote': '購買後立即啟用,啟用後2年內有效。', + 'purchase': '購買', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': '選擇總結模板', + 'useThisTemplate': '就用這個模板', + 'lastUsed': '上次使用', + 'viewAll': '查看全部', + 'recordingLanguage': '錄音語言', + 'chineseSimplified': '中文普通話(簡體)', + 'meetingGenerateNow': '立即生成', + 'keyEventsAnalyzed': '分析出{count}個關鍵事件。', + 'aiAnalysisDesc': 'AI分析識別錄音中的關鍵事件,讓你選擇重要事件進行AI生成。', + + // Meeting模块 - 文件操作和状态 + 'importing': '正在導入...', + 'batchImporting': '正在批量導入...', + 'importingLocalRecordings': '正在導入本地錄音...', + 'importFailed': '導入檔案失敗: {filePath}, error: {error}', + 'importSuccess': '成功導入本地 {count} 條錄音', + 'importError': '導入失敗: {error}', + 'pleaseSelectAudioFile': '請選擇音訊檔案', + 'shareAudio': '分享會議音訊', + 'shareComplete': '分享完成!', + 'shareFailed': '分享失敗: {error}', + 'fileProcessingFailed': '檔案處理失敗: {filePath}, 錯誤: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': '未知語言', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': '儲存', + 'meetingStoragePermissionExplanation': '我們需要存取儲存權限,以便您可以選擇並上傳音訊檔案。', + 'meetingStoragePermissionPermanentDenial': + '檢測到您已永久拒絕儲存權限。如需繼續使用此功能,請前往應用設定中手動開啟儲存權限。', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': '分享思維導圖', + 'shareSuccess': '分享成功', + + // Meeting模块 - AI相关 + 'askAI': '問 AI ...', + 'askAIPrompt': '今天我能幫您做點什麼呢?', + 'continueAsk': '繼續提問', + 'todoList': '待辦事項', + 'extractConclusion': '提取結論', + 'generateKeyIndicators': '生成關鍵指標', + + // Meeting模块 - 更多操作相关 + 'reSummarize': '重新總結', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': '錄音語言', + // 'chinese': '中文普通话(简体)', + 'cantonese': '粵語', + 'sichuan': '四川話', + 'shanghai': '上海話', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': '分享連結', + 'copyTranscript': '複製轉寫', + 'copySummary': '複製總結', + 'exportAudio': '導出音訊', + 'exportTranscript': '導出轉寫', + 'shareMeetingAudio': '分享會議音訊', + 'exportSummary': '導出總結', + 'exportAs': '導出為', + 'exportingPDF': '正在導出PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': '命名當前發言者', + 'recentlyUsedNames': '最近使用過的名稱', + 'applyToCurrentParagraph': '應用到當前段落', + 'totalTime': '總計', + 'summarySpeakerWillBeUpdatedAutomatically': '總結的發言者將自動更新', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': '同步到雲端', + 'syncToCloudTip': + '自動將你的錄音同步到雲端,你可以通過任意VOITRANS APP或VOITRANS Web(web.voitrans.com)播放、管理和分享錄音。', + 'syncToVoitransApp': '同步VOITRANS APP', + 'transcriptionRecord': '轉寫記錄', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': '日期時間', + 'location': '地點', + 'attendees': '與會人員', + 'inputLocation': '輸入地點', + 'inputAttendees': '輸入與會人員', + + // 设置页 + "systemSettings": "系統設定", + "vipRecharge": "高級會員充值", + "aiRecharge": "AI充值", + "translationRecharge": "翻譯充值", + "meetingAssistantRecharge": "會議充值", + "cloudSync": "雲端同步", + "memberService": '會員服務', + "bindRewardTitle": '獎勵', + "bindRewardSimpleDesc": '首次綁定設備獎勵已下發,點擊確定關閉即可', "joinDevice": "已連接設備:", "accountId": "帳號ID:", "systemSetting": "系統設定", @@ -231,8 +613,8 @@ const Map zhHK = { "lastBackup": "上次備份:", "privacySettings": "私隱設定", "privacySettingsInfo": "管理數據收集和權限", - "permissionManagement": "權限管理", // 權限管理 - "permissionManagementInfo": "管理應用權限設定", // 管理應用權限設定 + "permissionManagement": "權限管理", // 权限管理 + "permissionManagementInfo": "管理應用權限設定", // 管理应用权限设置 "aboutApplication": "關於應用", "versions": "版本", "checkUpdates": "檢查更新", @@ -258,31 +640,39 @@ const Map zhHK = { "deviceManagement": "設備管理", "manageConnectedDevices": "管理已綁定的藍牙設備", - //設定setting_controller - // 版本更新相關 + //设置setting_controller + // 版本更新相关 'currentLatestVersion': '當前已是最新版本 {version}', 'checkUpdateFailed': '檢查更新失敗', 'networkErrorRetry': '網絡錯誤,請稍後重試', -// 設備管理相關 - 'clearPairedDevices': '清除配對設備', - 'clearPairedDevicesConfirm': '確定要清除所有配對設備嗎?', - 'clearPairedDevicesSuccess': '清除配對設備成功', - 'clearPairedDevicesFailed': '清除配對設備失敗', +// 设备管理相关 + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', - // 設定頁面 - 實時語音對話 + // 设置页面 - 实时语音对话 "realtimeVoiceChat": "實時語音對話", "realtimeVoiceChatInfo": "體驗智能語音互動功能(功能預覽)", "loading": "載入中...", - //設備管理頁面 - "earphone": "耳機", - "voicerecorder": "錄音筆", - "notBound": "未綁定", - "deviceNotBoundYet": "尚未綁定設備", + //设备管理页面 + "deviceTypeUnknown": '未知設備', + "deviceTypeClassicBluetoothHeadset": '經典藍牙耳機', + "deviceTypeBleBluetoothHeadset": 'BLE藍牙耳機', + "deviceTypeSmartVoiceRecorder": '智能錄音筆', + "deviceTypeSmartEye": '智能眼鏡', "unbind": "解除綁定", + "noDevicesBound": '暫未綁定任何設備', + "pleaseBindDeviceFirst": '請先綁定設備後再進行管理', + "noMacAddress": '無MAC地址', + "licenseCode": '授權碼', + "confirmUnbind": '確認解除綁定', + "confirmUnbindMessage": '確定要解除綁定設備 "{deviceName}" 嗎?', + "confirmUnbindAction": '確認解除綁定', -//Agent 模塊 +//Agent 模块 // agent View "Lily": "Lily", "clearChatHistory": "清空聊天記錄", @@ -309,8 +699,20 @@ const Map zhHK = { "loadMoreMessages": "載入更多訊息...", "loadFailedClickRetry": "載入失敗,點擊重試", "swipeUpForMore": "向上滑動查看更多", - "callingTool": "正在帮您,请稍等!", // 正在帮您,请稍等! - "voice_interrupt": "语音打断", // 语音打断 + "callingTool": "正在幫您,請稍等!", // 正在帮您,请稍等! + "voice_interrupt": "語音打斷", // 语音打断 + + // 预设提示词 + "presetMusic": '來點音樂', // 来点音乐 + "presetNavigation": '導航到', // 导航 + "presetWeather": '今日天氣', // 今日天气 + "presetNews": '今日新聞', // 今日新闻 + "presetFood": '附近美食', // 美食 + "playSomeMusic": '播放一些流行音樂', // 播放一些流行音乐 + "navigationTo": '請幫我導航到', // 导航到 + "todayWeather": '今天天氣如何?', // 今日天气 + "todayNews": '今天有哪些新聞?', // 今日新闻 + "nearbyFood": '附近有哪些美食?', // 美食 // Agent controller 'welcomeMessage': '你好!我是**Lily**,我能幫你:\n\n' @@ -328,17 +730,18 @@ const Map zhHK = { 'startVoiceInput': '開始語音輸入', 'startPhoneCallMode': '開始打電話模式,開始語音輸入', - // Agent 全屏編輯器 - 'fullScreenEditorHint': '在這裡輸入你的訊息...', // 全屏編輯器輸入提示 - 'characterCount': '{count} 字元', // 字元計數顯示 + // Agent 全屏编辑器 + 'fullScreenEditorHint': '在這裡輸入你的訊息...', // 全屏编辑器输入提示 + 'characterCount': '{count} 字元', // 字符计数显示 - // 訊息長按操作 + // 消息长按操作 'copy': '複製', 'copySuccess': '複製成功', 'report': '舉報', 'submitSuccess': '提交成功', 'submitFailed': '提交失敗', 'reportSubmitted': '舉報已提交,我們會盡快處理', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': '有害/不安全', 'pornographicVulgar': '色情低俗', 'misleadingAttack': '誤導攻擊', @@ -347,31 +750,32 @@ const Map zhHK = { 'copyrightViolation': '侵犯我的著作權、名譽權等', 'other': '其他', 'reportDescriptionHint': '我們想知道你舉報的原因,你可以描述你遇到的問題。', + //'submit': '提交', //Message_bubble 'generatedByAi': '由AI生成', - //音樂卡片 music_card + //音乐卡片 music_card 'recommendedMusic': '以下是一些推薦的音樂:', 'playList': '播放清單', 'moreMusic': '更多音樂', - //導航卡片 navigation_card - 'kilometers': '公里', // 公里單位 - 'meters': '米', // 米單位 - 'hours': '小時', // 小時單位 - 'minutes': '分鐘', // 分鐘單位 - 'seconds': '秒', // 秒單位 - 'navigating': '導航中', // 導航狀態 - 'currentLocation': '目前位置', // 目前位置 - 'approximate': '約', // 大約 - 'enterRoad': '進入', // 進入道路 + //导航卡片 navigation_card + 'kilometers': '公里', // 公里单位 + 'meters': '米', // 米单位 + 'hours': '小時', // 小时单位 + 'minutes': '分鐘', // 分钟单位 + 'seconds': '秒', // 秒单位 + 'navigating': '導航中', // 导航状态 + 'currentLocation': '目前位置', // 当前位置 + 'approximate': '約', // 大约 + 'enterRoad': '進入', // 进入道路 "driving": "駕車", "walking": "步行", "bicycling": "騎行", "tsransit": "公共交通", - //天氣卡片 weather_card + //天气卡片 weather_card 'weatherQuery': '查詢天氣情況:', 'highest': '最高', 'lowest': '最低', @@ -392,7 +796,18 @@ const Map zhHK = { "friday": "週五", "saturday": "週六", "sunday": "週日", - // 天氣描述 + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": 'Welcome Reward', + "firstBindRewardDesc": 'You\'ve received binding rewards.', + "vipLevelLabel": 'VIP Level:', + "expiryLabel": '到期時間:', + "notActivated": '未啟用', + "aiChatCreditsLabel": 'AI Chat Credits:', + "translationCreditsLabel": 'Translation Credits:', + "meetingCreditsLabel": 'Meeting Credits:', + "ok": 'OK', + + // 天气描述 "sunny": "晴", "partlyCloudy": "少雲", "partlySunny": "晴間多雲", @@ -413,7 +828,7 @@ const Map zhHK = { "haze": "霾", "strongWind": "大風", - //編輯個人信息頁 + //编辑个人信息页 "editProfile": "編輯個人資訊", "avatar": "頭像", "nickname": "暱稱", @@ -426,8 +841,10 @@ const Map zhHK = { "logoutTips": "確定要登出目前帳號嗎?", 'deleteAccount': '註銷帳號', 'deleteAccountTips': '確定要永久刪除您的帳號嗎?此操作不可撤銷', + 'clean': '清除快取', + 'cleanTips': '確定要清除個人快取嗎?', - // Profile 錯誤信息 + // Profile 错误信息 'networkConnectionFailed': '網絡連接失敗,請檢查網絡設定後重試', 'serverTemporarilyUnavailable': '伺服器暫時無法響應,請稍後重試', 'loginExpiredPleaseRelogin': '登入已過期,請重新登入', @@ -440,7 +857,9 @@ const Map zhHK = { 'networkConnectionFailedCheckSettings': '網絡連接失敗,請檢查網絡設定', 'serverInternalErrorRetryLater': '伺服器內部錯誤,請稍後重試', -// Profile 用戶交互 +// Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': '圖片壓縮失敗', 'avatarUpdateFailed': '頭像更新失敗', 'usernameCannotBeEmpty': '用戶名不能為空', @@ -452,29 +871,39 @@ const Map zhHK = { 'accountPermanentlyDeleted': '帳號已被永久刪除', 'deleteAccountFailedRetry': '刪除帳號失敗,請重試', - // 帳號服務相關 - 'clearUserDataFailed': '清理用戶數據失敗', - 'deleteUserDataFailed': '刪除用戶數據失敗', - 'thirdPartyLogoutSuccess': '第三方登出成功', - 'thirdPartyLogoutFailed': '第三方登出失敗', - 'signOutProcessError': '登出過程發生錯誤', - 'deleteAccountProcessError': '刪除帳號過程發生錯誤', - 'userDataClearSuccess': '用戶數據清理成功', - 'allUserDataClearSuccess': '所有用戶數據清理成功', - 'accountServiceInitialized': 'AccountService 已初始化', - - // 權限管理頁面 + // 账号服务相关 + 'clearUserDataFailed': '清理用戶數據失敗', // 清理用户数据失败 + 'deleteUserDataFailed': '刪除用戶數據失敗', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': '第三方登出成功', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': '第三方登出失敗', // 第三方登录退出失败 + 'signOutProcessError': '登出過程發生錯誤', // 登出过程发生错误 + 'deleteAccountProcessError': '刪除帳號過程發生錯誤', // 删除账号过程发生错误 + 'userDataClearSuccess': '用戶數據清理成功', // 用户数据清理成功 + 'allUserDataClearSuccess': '所有用戶數據清理成功', // 所有用户数据清理成功 + 'accountServiceInitialized': 'AccountService 已初始化', // AccountService 已初始化 + + // 权限管理页面 'getPermissionStatusFailed': '獲取權限狀態失敗', 'communicationPermissions': '通訊權限', + 'bluetoothPermissions': '藍牙權限', + 'notificationPermissions': '通知權限', + 'storagePermissions': '儲存權限', + 'microphonePermissions': '麥克風權限', + 'alarmPermissions': '鬧鐘權限', 'calendarPermissions': '日曆權限', 'locationPermissions': '位置權限', 'phone': '電話', 'sms': '短訊', + 'contacts': '聯絡人', + //'bluetooth': '蓝牙', + 'notification': '通知', + 'alarm': '鬧鐘', 'calendarWrite': '日曆寫入', 'calendarFullAccess': '日曆完整存取', 'locationInfo': '位置資訊', 'phonePermissionDesc': '用於撥打電話功能', 'smsPermissionDesc': '用於發送短訊功能', + 'alarmPermissionDesc': '用於設定精確鬧鐘以確保提醒按時觸發', 'calendarWritePermissionDesc': '用於建立日曆事件和提醒', 'calendarFullAccessPermissionDesc': '用於讀取和管理日曆事件及提醒', 'locationPermissionDesc': '用於獲取目前位置資訊', @@ -488,23 +917,65 @@ const Map zhHK = { 'permissionRequestError': '請求權限時出錯', 'phonePermissionDetailDesc': '撥打電話功能需要電話權限', 'smsPermissionDetailDesc': '發送短訊功能需要短訊權限', + 'alarmPermissionDetailDesc': '設定精確鬧鐘需要此權限,以確保提醒按時觸發', 'calendarWritePermissionDetailDesc': '建立日曆事件需要日曆寫入權限', 'calendarFullAccessPermissionDetailDesc': '管理日曆事件需要完整日曆權限', 'locationPermissionDetailDesc': '獲取位置資訊需要位置權限', + 'contactsPermissionDesc': '用於存取聯絡人資訊', + 'contactsPermissionDetailDesc': '撥打電話和發送簡訊功能需要聯絡人權限以選擇聯絡人', + 'bluetoothPermissionDesc': '用於連接和管理藍牙設備', + 'bluetoothPermissionDetailDesc': '連接藍牙耳機等設備需要藍牙權限', + 'bluetoothScanPermissionDesc': '用於掃描附近的藍牙設備', + 'bluetoothScanPermissionDetailDesc': '掃描附近藍牙設備需要藍牙掃描權限', + 'bluetoothConnectPermissionDesc': '用於連接藍牙設備', + 'bluetoothConnectPermissionDetailDesc': '連接藍牙設備需要藍牙連接權限', + 'notificationPermissionDesc': '用於發送通知訊息', + 'notificationPermissionDetailDesc': '應用需要通知權限以向您發送重要提醒和訊息', 'appNeedsPermissionForFullFunction': '應用需要此權限以提供完整功能', 'permanentDenialText': '您已永久拒絕{permission}權限,請前往應用設定開啟', 'goToSettings': '去設定', - // 版本更新對話框 - 'newVersionFound': '發現新版本', // 版本更新對話框標題 - 'remindLater': '稍後提醒', // 稍後提醒按鈕 - 'updateNow': '立即更新', // 立即更新按鈕 - 'checkUpdate': '檢查更新', // 檢查更新按鈕 - 'updateFailed': '更新失敗', // 更新失敗提示 - 'cannotOpenAppStore': '無法打開應用商店,請手動前往應用商店更新', // 無法打開應用商店提示 - 'updateErrorRetry': '更新過程中發生錯誤,請稍後重試', // 更新錯誤重試提示 + // 权限申请 + 'bluetoothScan': '藍牙掃描', + 'bluetoothConnect': '藍牙連接', + 'bluetoothScanExplanation': '為了掃描附近的藍牙設備,應用需要取得藍牙掃描權限。', + 'bluetoothConnectExplanation': '為了連接藍牙設備,應用需要取得藍牙連接權限。', + 'locationForBluetoothExplanation': '為了掃描藍牙設備,應用需要取得位置資訊權限。', + 'bluetoothScanPermanentDenial': '藍牙掃描權限已被永久拒絕,請前往設定手動開啟。', + 'bluetoothConnectPermanentDenial': '藍牙連接權限已被永久拒絕,請前往設定手動開啟。', + 'locationPermanentDenial': '位置資訊權限已被永久拒絕,請前往設定手動開啟。', + 'notificationPermission': '通知', + 'locationPermission': '定位', + 'notificationPermissionExplanation': '需要通知權限來顯示音樂播放狀態。', + 'locationPermissionExplanation': '需要定位權限來取得當前位置。', + 'notificationPermissionPermanentDenial': '您已永久拒絕通知權限,請前往設定開啟權限。', + 'locationPermissionPermanentDenial': '您已永久拒絕定位權限,請前往設定開啟權限。', +//'microphonePermission': '录音', + 'storagePermission': '儲存', + 'microphonePermissionExplanation': '我們需要存取麥克風權限,以便您錄製音訊內容。', + 'storagePermissionExplanation': '我們需要存取儲存權限,以便您可以選擇並上傳音訊檔案。', + 'microphonePermissionPermanentDenial': + '檢測到您已永久拒絕錄音權限。如需繼續使用此功能,請前往應用設定中手動開啟麥克風權限。', + 'storagePermissionPermanentDenial': + '檢測到您已永久拒絕儲存權限。如需繼續使用此功能,請前往應用設定中手動開啟儲存權限。', - //國家列表 + //permission_util.dart + 'permissionUtilNeed': '需要', + 'permissionUtilPermission': '權限', + 'permissionUtilRestricted': '權限受限', + 'permissionUtilRestrictedMessage': '此功能在當前設備上不可用或受限,請檢查設備設定或系統限制', + 'permissionUtilConfirm': '確定', + + // 版本更新对话框 + 'newVersionFound': '發現新版本', // 版本更新对话框标题 + 'remindLater': '稍後提醒', // 稍后提醒按钮 + 'updateNow': '立即更新', // 立即更新按钮 + 'checkUpdate': '檢查更新', // 检查更新按钮 + 'updateFailed': '更新失敗', // 更新失败提示 + 'cannotOpenAppStore': '無法打開應用商店,請手動前往應用商店更新', // 无法打开应用商店提示 + 'updateErrorRetry': '更新過程中發生錯誤,請稍後重試', // 更新错误重试提示 + + //国家列表 "邮箱": "郵箱", "中国": "中國", "美国": "美國", @@ -611,9 +1082,24 @@ const Map zhHK = { "东帝汶": "東帝汶", "斐济": "斐濟", "所罗门群岛": "所羅門群島", + "刚果民主共和国": '剛果民主共和國', + "安哥拉": '安哥拉', + "苏丹": '蘇丹', + "马尔代夫": '馬爾代夫', + "不丹": '不丹', + "摩纳哥": '摩納哥', + "圣马力诺": '聖馬力諾', + "牙买加": '牙買加', + "巴哈马": '巴哈馬', + "巴布亚新几内亚": '巴布亞新幾內亞', + "萨摩亚": '薩摩亞', + + // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": '圖片翻譯', + "textTranslation": '文本翻譯', - // 翻譯模塊 - // 翻譯主頁 (translation_view.dart) + // 翻译主页 (translation_view.dart) "translationHistory": "翻譯歷史", "enableRecording": "是否開啟錄音", "viewAudioFiles": "查看錄音檔案", @@ -621,16 +1107,76 @@ const Map zhHK = { "phoneUser": "手機用戶", "selectSourceLanguage": "選擇來源語言", "selectTargetLanguage": "選擇目標語言", + "me": '我', + "counterPart": '對方', + "bluetoothCallStateError": '請確保藍牙耳機已連接到手機並處於通話狀態', - // 翻譯歷史頁 (translation_history_view.dart) + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": '自動檢測', // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": '語言檢測失敗', + "translationFailed": '翻譯失敗', + "pleaseInputText": '請輸入文本', + "textTooLong": '文本過長,最多5000字符', + + // 翻译历史页 "noTranslationHistory": "暫無歷史記錄", + "historyRecords": '歷史記錄', + "clearResults": '清空結果', "clearHistory": "清除歷史記錄", "clearHistoryConfirm": "確定要清除所有翻譯歷史記錄嗎?此操作無法撤銷。", "unknownLanguage": "未知語言", "deleteSessionRecord": "刪除對話記錄", "deleteSessionConfirm": "確定要刪除該對話的所有翻譯記錄嗎?此操作無法撤銷。", - // 翻譯錄音文件列表頁 (translation_list_view.dart) + // 图片翻译模块(Picture Translation) + "selectImageSource": '選擇圖片來源', + "imagePreview": '圖片預覽', + "translationResult": '翻譯結果', + "recognitionResult": '識別結果', + "translatedImagePreview": '翻譯後的圖片預覽', + "translatedImageLoadFailed": '翻譯圖片載入失敗', + "pleaseSelectImage": '請選擇圖片', + "imageLoadFailed": '圖片載入失敗', + "imageQuality": '圖片品質', + "maxSize": '最大尺寸', + "close": '關閉', + "setImageQuality": '設定圖片品質', + "currentQuality": '當前品質: @value%', + "setMaxSize": '設定最大尺寸', + "currentMaxSize": '當前: @pxpx', + "waitingForAction": '等待操作', + "pleaseSelectImageToStart": '請選擇圖片開始翻譯', + "chooseImage": '選擇圖片', + "openingCamera": '正在打開相機...', + "openingPhotoAlbum": '正在打開相簿...', + "cancelled": '已取消', + "userCancelledSelection": '用戶取消了選擇', + "translatingImage": '翻譯圖片', + "callingImageTranslateService": '正在調用圖片翻譯服務...', + "savingRecord": '保存記錄', + "savingTranslationResult": '正在保存翻譯結果...', + "translationCompleted": '翻譯完成', + "allStepsCompleted": '所有步驟已完成', + "processingFailed": '處理失敗', + "imageProcessingOrTranslationFailed": '圖片處理或翻譯失敗,請重試。n錯誤資訊: {error}', + "imageTooLarge": '圖片大小超過4MB限制', + "imageTooLargeHint": '圖片大小超過4MB限制,請降低品質或尺寸後重試', + "emptyTranslationResult": '圖片翻譯接口返回空結果', + "imageTranslationFailedTryLater": '圖片翻譯失敗,可能的原因:網路異常或接口限流,請稍後重試', + "imageTranslationApiException": '圖片翻譯接口調用異常,請檢查網路後重試', + "permissionRequired": '權限需求', + "cameraPermissionRequired": '需要相機權限才能拍照', + "photoAlbumPermissionRequired": '需要相簿權限才能選擇圖片', + "translationDetails": '翻譯詳情', + "originalImage": '原圖片', + "sourceLanguage": '源語言', + "targetLanguage": '目標語言', + "translationTime": '翻譯時間', + "shareInDevelopment": '分享功能開發中', + + // 翻译录音文件列表页 "translateAudioFiles": "翻譯錄音檔案", "noAudioFiles": "暫無音訊檔案", "calculating": "計算中...", @@ -642,7 +1188,7 @@ const Map zhHK = { "renameAudioFile": "重新命名音訊檔案", "enterNewFileName": "請輸入新的檔案名稱", - // 翻譯詳情頁 (translation_detail_view.dart) + // 翻译详情页 (translation_detail_view.dart) "originalRecord": "原始記錄", "recordSummary": "記錄摘要", "clickToGenerateSummary": "點擊下方按鈕生成對話摘要", @@ -663,8 +1209,8 @@ const Map zhHK = { "generateSummaryFirst": "請先生成摘要", "translationSessionRecord": "翻譯對話記錄", - // 配對模塊 - // 配對頁面 (pairing_view.dart & pairing_view_new.dart) + // 配对模块 + // 配对页面 (pairing_view.dart & pairing_view_new.dart) "devicePairing": "設備配對", "connectYourDeepSoundHeadset": "連接您的 Voitrans 耳機", "bind": "綁定", @@ -673,14 +1219,14 @@ const Map zhHK = { "autoInputCode": "自動輸入代碼", "skipBinding": "跳過綁定", "rescan": "重新掃描", - "skip": "跳過", + "verifyingDevice": "正在驗證設備...", "confirmBinding": "確認綁定", "associatingDevice": "正在關聯設備...", "goToBluetoothSettings": "前往藍牙設定", 'bluetooth': '藍牙', - // 配對狀態文本 + // 配对状态文本 "readyToPair": "準備開始配對", "preparingPairingEnvironment": "正在準備配對環境...", "connectDeepSoundViaSystemBluetooth": "請先透過系統藍牙連接Voitrans設備", @@ -689,7 +1235,7 @@ const Map zhHK = { "waitingCompletePairing": "請稍候,正在完成配對...", "pairingSuccessRedirecting": "配對成功!即將跳轉到首頁...", - // 配對錯誤狀態文本 + // 配对错误状态文本 "ensureConnectedDeepSoundDevice": "請確保連接的是Voitrans設備", "deviceAlreadyBoundToOtherAccount": "該設備已被其他帳號綁定", "deviceAssociationFailed": "設備關聯失敗,請重試", @@ -698,12 +1244,17 @@ const Map zhHK = { "authorizationFailedCheckCode": "授權失敗,請檢查授權碼是否正確", "pairingFailedRetry": "配對失敗,請重試", - // 配對控制器相關 + // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': '請開啟藍牙', 'deviceDisconnected': '設備已斷開', 'readyToStartPairing': '準備開始配對', 'checkingEnvironment': '正在檢查環境...', 'ensureHeadsetOnAndPairingMode': '請確保耳機已開啟並進入配對模式', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': '正在建立安全連接...', 'needManualBindingAuthCode': '需要手動綁定授權碼...', 'pairingSuccessful': '配對成功!', @@ -723,7 +1274,16 @@ const Map zhHK = { 'bleConnectionFailed': 'BLE連接失敗', 'deviceAuthorizationFailedCheckCode': '設備授權失敗,請檢查授權碼', - //用戶反饋頁 + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': '需要手動開啟藍牙', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': '請按照以下步驟操作:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': '開啟藍牙:設定 → 藍牙 → 開啟', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': '連接設備:在"我的設備"中找到您的設備並點擊連接', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': '返回應用繼續配對流程', // 返回应用继续配对流程 + 'bluetoothGuideTip': '提示:也可以從控制中心長按藍牙圖標快速進入藍牙設定', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': '我知道了', // 我知道了 + + //用户反馈页 "feedback": "用戶反饋", 'feedbackInfo': '提供反饋或建議', 'feedbackDescription': '請描述您遇到的問題或建議', @@ -735,7 +1295,7 @@ const Map zhHK = { 'feedbackSubmitSuccess': '反饋提交成功,感謝您的反饋!', 'feedbackSubmitFailed': '反饋提交失敗,請稍後重試', - // OTA升級模塊 + // OTA升级模块 "upgradeExitConfirm": "當前正在升級,退出將中斷升級進程,確定要退出嗎?", "deviceModel": "設備型號", "unknownDevice": "未知設備", @@ -748,20 +1308,24 @@ const Map zhHK = { "connectionFailed": "連接失敗", "retryConnection": "重試連接", "ota_updateNow": "立即更新", + "otaVersionInfoFailed": '獲取版本資訊失敗,請稍後重試', + "otaDeviceInfoUnavailable": '無法獲取設備資訊,請檢查連接後重試', + "otaProductInfoUnavailable": '無法識別當前設備,請重新連接後重試', + "otaFirmwareVersionInvalid": '設備韌體版本異常,請重新連接後重試', "keepConnectedDontClose": "請保持設備連接,不要關閉應用", "doNotDisconnect": "請勿斷開連接", "charging": "充電中", "updateContent": "更新內容", "removeEarbudsEnsureBattery": "取出雙耳機,並保證電量均為20%以上的狀態", - // 音樂列表頁面 - "noMusic": "暫無音樂", - "noPlayingMusic": "暫無播放音樂", - "unknownSong": "未知歌曲", - "unknownArtist": "未知歌手", - "playAll": "播放全部", + // 音乐列表页面 + "noMusic": "暫無音樂", // 暂无音乐 + "noPlayingMusic": "暫無播放音樂", // 暂无播放音乐 + "unknownSong": "未知歌曲", // 未知歌曲 + "unknownArtist": "未知歌手", // 未知歌手 + "playAll": "播放全部", // 播放全部 - // 語言名稱 + // 语言名称 "中文(简体)": "中文(簡體)", "中文(繁体)": "中文(繁體)", "中文(香港繁体)": "中文(香港繁體)", @@ -801,105 +1365,21 @@ const Map zhHK = { "乌尔都语": "烏爾都語", "波斯语": "波斯語", "斯瓦希里语": "斯瓦希里語", - // Guide overlay keys (placeholders in English) - "sayLilyHint": "Say \"Lily Lily\" to the mic", - "imHere": "I’m here~", - "guideWelcomeWakeAI": "Welcome to Voitrans! First, wake your AI “Lily”.", - "aiReplyCompleted": "Lily has finished the reply!", - "aiThinking": "Lily is thinking…", - "guideAwakenSuccess": "Great! Lily is awake—ask it to help.", - "confirmInput": "Confirm Input", - "guideClickSendPrefix": "Tap send, ", - "guideWeatherStart": "Tell Lily: “What’s the weather today?”", - "guideWeatherInput": "What’s the weather today?", - "guideWeatherSend": "Lily will report the weather in real time", - "guideWeatherEnd": "Lily can report weather live—try other commands", - "guideMusicStart": "Tell Lily: “Play some rock music”", - "guideMusicInput": "Play some rock music", - "guideMusicSend": "Lily will find music for you", - "guideMusicEnd": "Lily found music—try other commands", - "guideNavStart": "Tell Lily: “Navigate to Shenzhen Airport”", - "guideNavInput": "Navigate to Shenzhen Airport", - "guideNavSend": "Lily will plan the route", - "guideNavEnd": "Navigation set—try other commands", - "guideMeetingStart": - "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", - "guideMeetingInput": "Create a meeting reminder for 3pm tomorrow", - "guideMeetingSend": "Lily will create a meeting reminder", - "guideMeetingEnd": "Reminder created—try other commands", - "guidePhoneStart": "Tell Lily: “Call Mom”", - "guidePhoneInput": "Call Mom", - "guidePhoneSend": "Lily will make the call", - "guidePhoneEnd": "Call placed—try other commands", - "guideSmsStart": "Tell Lily: “Send Dad a text: I’ll be home for dinner”", - "guideSmsInput": "Text Dad: I’ll be home for dinner", - "guideSmsSend": "Lily will send the message", - "guideSmsEnd": "Message sent—voice control is convenient", - - // 商品页通用页脚 - 'appNameProvider': '應用名稱:Voitrans · 服務提供:Voitrans', - 'iapCustomerServiceQQLabel': '內购商品专属客服QQ:@qq', - 'copyrightVoitrans': '© 2025 Voitrans Technologies', - - // Meeting goods page (placeholders) - 'meetingHeaderDesc1': '錄音轉寫、關鍵詞檢索與自動總結,提升會議效率。', - 'meetingHeaderDesc2': '適用於商務會議、課堂筆記、訪談紀要等場景。', - 'meetingAutoRecording': '自動錄音與分段', - 'meetingSpeakerTagging': '講話人標注', - 'meetingLongAudioTranscription': '長音頻轉寫', - 'meetingKeyPointSummary': '關鍵要點提煉', - 'meetingTopicNameSearch': '按主題/人名檢索', - 'meetingTimelineJump': '時間線跳轉', - 'meetingExportSummary': '導出紀要', - 'meetingMultiPlatformShare': '多平台分享', - 'meetingDisclaimer': '建議在安靜環境使用,效果受麥克風與網絡影響,具體以實際表現為準。', - - // Translation goods page (placeholders) - 'transHeaderDesc1': '多語種實時同傳與文本翻譯,低延時語音播報。', - 'transHeaderDesc2': '適用於出行、商務、演講與教學等場景。', - 'translateZhEn': '中英互譯', - 'lowLatencyVoiceBroadcast': '低延時語音播報', - 'multiLangTextTranslation': '多語種文本翻譯', - 'termOptimizationContextPreserve': '術語優化與語境保持', - 'lexiconTourBusinessLife': '旅遊/商務/生活詞庫', - 'personalVocabularyMemory': '專屬詞彙記憶', - 'conversationSubtitleLargeText': '對話字幕/大字模式', - 'colorHighContrast': '顏色高對比度', - 'transDisclaimer': '翻譯效果受麥克風、網絡時延與環境噪聲影響,具體以實際表現為準。', - // AI 商品頁描述(佔位) - 'aiHeaderDesc1': '更長對話額度、更多工具調用、更強上下文長度支持。', - 'aiHeaderDesc2': '適用於智能體問答、總結分析、任務執行等場景。', - 'musicSearchPlaybackControl': '檢索曲庫、播放控制', - 'smartPlaylistAndSimilarRecommendations': '智能推薦歌單與相似歌曲', - 'routePlanningAndCongestionAvoidance': '路線規劃與擁堵規避', - 'voiceBroadcastAndWaypoints': '語音播報與途徑點設置', - 'realTimeWeatherForecast': '實時天氣與預報', - 'clothingAdviceAndTravelReminders': '穿衣建議與出行提醒', - 'poiSearchFoodGasParking': '餐飲/加油/停車等地點檢索', - 'ratingsHoursAndDirectRoutes': '評分、營業時間與路線直達', - 'hotNewsAndTopicOverview': '熱點快訊與專題速覽', - 'longArticleSummariesAndKeyPoints': '長文總結與要點提煉', - 'helpCallAndSMS': '幫忙撥打電話與發短信', - 'templatedMessagesAndScheduleReminders': '模板消息與日程提醒', - 'aiDisclaimer': '以上功能受設備權限、服務可用性與網絡狀況影響,具體以實際表現為準。', + // 时间相关 + "justNow": '剛剛', + "minutesAgo": '@minutes分鐘前', + "yesterday": '昨天', + // 时间扩展(图片翻译模块使用) + "daysAgo": '@days天前', + "hoursAgo": '@hours小時前', - // VIP goods page (placeholders) - 'benefitsOverview': '權益總覽', - 'higherQuota': '更高使用額度', - 'lowerUnitPrice': '更低單價', - 'priorityService': '優先服務', - 'exclusiveSupportChannel': '專屬客服通道', - 'fastResponse': '問題快速響應', - 'eventsAndDiscounts': '活動與折扣', - 'memberExclusiveEvents': '會員專屬活動', - 'longTermDiscountPlan': '長期優惠計劃', - 'generalPrivileges': '通用特權', - 'earlyAccessNewFeatures': '新功能優先體驗', - 'crossDeviceSync': '跨設備同步', - 'vipDisclaimer': '具體權益以實際套餐說明為準,可能隨版本迭代調整。', + //补充 + "insufficientIntegral": '積分不足', //余额不足弹窗 "insufficientBalanceDesc": "餘額不足,請前往對應充值界面進行充值", "recharge": "去充值", + // 会员到期提示 + "aiMemberExpiredDesc": 'AI會員已到期,請前往會員充值續費', }; diff --git a/lib/core/translations/language/zh_tw.dart b/lib/core/translations/language/zh_tw.dart new file mode 100644 index 000000000..c8692be3a --- /dev/null +++ b/lib/core/translations/language/zh_tw.dart @@ -0,0 +1,1385 @@ +const Map zhTW = { + // 通用 + 'continue': '繼續', + 'confirm': '確認', + 'cancel': '取消', + 'retry': '重試', + 'error': '錯誤', + 'success': '成功', + 'connected': '已連接', + 'connecting': '連接中...', + 'connectionFailure': '連接失敗', + 'unconnected': '未連接', + 'search': '搜尋', + "requestCancellation": "請求已取消", + "connectionTimeout": "連接逾時", + "requestTimeout": "請求逾時", + "responseTimeout": "回應逾時", + "unknownError": "未知錯誤", + + // 启动页 + "slogan": "連接世界,豈止聲音", + "sloganInfo": "AI語音專家 · 隨時隨地", + + // 底部导航 + "home": "首頁", + "explore": "發現", + "settings": "設定", + + // 语言 + "followingSystem": "跟隨系統", + "chinese": "中文", + "english": "英語", + "spanish": "西班牙語", + "portuguese": "葡萄牙語", + "traditionalChinese": "繁體中文", + "traditionalChineseHK": "繁體中文(香港)", + "japanese": "日語", + "korean": "韓語", + "french": "法語", + "german": "德語", + "russian": "俄語", + "vietnamese": "越南語", + "italian": "義大利語", + "hindi": "印地語", + "indonesian": "印尼語", + "thai": "泰語", + "malay": "馬來語", + "turkish": "土耳其語", + "polish": "波蘭語", + "filipino": "菲律賓語", + "dutch": "荷蘭語", + "swedish": "瑞典語", + "danish": "丹麥語", + "finnish": "芬蘭語", + "czech": "捷克語", + "hungarian": "匈牙利語", + "norwegian": "挪威語", + "romanian": "羅馬尼亞語", + "ukrainian": "烏克蘭語", + "greek": "希臘語", + "bulgarian": "保加利亞語", + "croatian": "克羅埃西亞語", + "slovak": "斯洛伐克語", + "slovenian": "斯洛文尼亞語", + "lithuanian": "立陶宛語", + "latvian": "拉脫維亞語", + "estonian": "愛沙尼亞語", + "serbian": "塞爾維亞語", + "icelandic": "冰島語", + "arabic": "阿拉伯語", + "persian": "波斯語", + + // 登录页 + "welcome": "歡迎使用", + "loginTips": "請使用手機號或電子郵件登入/註冊", + "accountNumber": "手機號碼或電子郵件", + "verificationCode": "驗證碼", + "getCode": "取得驗證碼", + "reacquireAfter": "秒後重新取得", + "otherWays": "或使用以下方式登入", + "expressConsent": "登入/註冊即表示你同意", + "and": " 和 ", + "userAgreement": "《使用者協議》", + "privacyPolicy": "《隱私政策》", + 'selectCountry': '選擇國家/地區', + "email": "電子郵件", + "phoneNumber": "手機號碼", + "pleaseEnterContactInfo": "請輸入手機號或電子郵件", + "invalidEmailFormat": "電子郵件格式不正確", + "invalidPhoneFormat": "手機號格式不正確", + "tip": "提示", + "pleaseEnterCompleteCode": "請輸入完整的驗證碼", + "loginFailed": "登入失敗,請重試", + 'pleaseAcceptPrivacyPolicy': '請先閱讀並同意隱私政策和使用者協議', + "enterVerificationCode": "輸入驗證碼", + "verificationCodeSentTo": "驗證碼已發送至", + "resendVerificationCode": "重新發送驗證碼", + "login": "登入", + "usePasswordLogin": "使用密碼登入", + + // 隐私政策弹窗 + "loginDeclaration": "Voitrans 聲明", // Voitrans 声明 + "welcomeToThisApp": "歡迎使用Voitrans,請充分閱讀", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 + "privacyPolicyText": + "點擊'同意並進入'表示您已充分閱讀並同意上述協議。點擊'不同意'將退出應用。", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "不同意", // 不同意 + "agreeAndEnter": "同意並進入", // 同意并进入 + + // 首页 + "deviceStatus": "設備狀態", + "reconnect": "重新連接", + "connectingDevice": "正在連接設備...", + "connectedTo": "已連接到", + "signal": "訊號", + "deviceId": "設備ID", + "firmwareVersion": "韌體版本", + "disconnectedDevice": "未連接設備,點擊下方按鈕連接", + "connectDevice": "連接設備", + "topAiExperiences": "熱門AI體驗", + "aiAssistant": "AI全能助手", + "aiAssistantInfo": "24小時專屬顧問,解答問題、提供建議", + "interpretation": "翻譯", + "simultaneousInterpretationInfo": "80+種語言實時翻譯,出國無憂", + "aiCompanion": "親子陪伴", + "aiCompanionInfo": "懂你心意,溫暖陪伴", + "homeSlogan": "連接世界,超越聲音", + "turnEarphones": "請打開耳機充電盒,將耳機放入您的耳朵", + "currentlyConnected": "當前已連接:", + "unsystemSetup": "前往系統設定", + "talkLater": "稍後再說", + "initializing": "正在初始化...", + "bluetoothInitializationFailure": "藍牙服務初始化失敗", + "checkingPermissions": "正在檢查權限...", + "lackPermissions": "開啟藍牙和位置權限,才能發現並連接附近的設備", + "searchingDevice": "正在搜尋設備...", + "findConnectedDevice": "找到已連接的設備", + "notFound": "未找到已連接的藍牙設備", + "initializationFailure": "初始化失敗", + "connectedDevice": "已連接到設備:", + "failedRefreshDevice": "刷新設備失敗", + "noDeviceFound": "未找到已連接的設備", + "failedDeviceInformation": "無法取得設備資訊", + "unknownEquipment": "未知設備", + "zeroSignal": "無訊號", + "good": "良好", + "fine": "很好", + "excellent": "極佳", + "unknown": "未知", + 'bluetoothTurnedOff': '藍牙已關閉,請開啟藍牙', + 'bluetoothOff': '藍牙已關閉', + 'leftEar': '左耳', + 'rightEar': '右耳', + 'chargingCase': '充電倉', + 'left': '左', + 'right': '右', + 'checkConnectionStatusFailed': '檢查連接狀態失敗', + +// 发现页 + "searchAi": "搜尋AI功能...", + "exploreSlogan": "智能耳機,無限可能", + "exploreSlogan1": "智能陪伴,無限可能", + "exploreSlogan2": "智能眼鏡,無限可能", + "exploreAi": "探索Voitrans提供的AI功能", + "aiFunction": "AI助手", + "allRoundAssistant": "全能助理", + "allRoundAssistantInfo": "幫你解決各類問題", + "simultaneousTranslation": "同聲翻譯", + "faceToFaceTranslation": "面對面翻譯", + 'audioVideoTranslation': '多媒體翻譯', + 'callTranslation': '通話翻譯', + "simultaneousTranslationInfo": "實時翻譯80+種語言", + "aiGirlfriend": "親子陪伴", + "aiGirlfriendInfo": "智能陪伴,隨時聊天", + "healthConsultant": "多功能AI聊天", + "healthConsultantInfo": "提供更多AI聊天功能", + "conferenceAssistant": "商務會議助手", + "conferenceAssistantInfo": "實時記錄會議紀要,多語言翻譯", + "usageStats": "用量統計", + "usageStatsInfo": "查看您的使用統計資料", + "scene": "場景", + // 用量统计模块 + "aiChat": 'AI聊天', + "translationStats": '翻譯統計', + "meetingStats": '會議統計', + "today": '今日', + "thisWeek": '本週', + "thisMonth": '本月', + "history": '歷史', + "currentSessionStats": '當前會話統計', + "translationCount": '翻譯次數', + "sessionDuration": '會話時長', + "characters": '字元數', + "recordingDuration": '錄音時長', + "totalApiCalls": '總呼叫次數', + "sessionCount": '會話數量', + "totalCharacters": '總字元數', + "apiCallStats": 'API呼叫統計', + "translationApi": '翻譯API', + "asr": '語音識別', + "tts": '語音合成', + //"aiSummary": "AI摘要", + "dataVolumeStats": '資料量統計', + "sourceTextCharacters": '來源文本字元', + "ttsTextCharacters": 'TTS文本字元', + "effectiveAudioDuration": '有效音訊時長', + "totalSessionDuration": '總會話時長', + "costStats": '成本統計', + "estimatedCost": '預估成本', + "dailyCostThreshold": '日成本預警閾值', + "monthlyCostThreshold": '月成本預警閾值', + "usageBehaviorStats": '使用行為統計', + "mostUsedLanguagePair": '最常用語言對', + "mostUsedMode": '最常用模式', + "asrApiCalls": 'ASR呼叫次數', + "totalAudioDuration": '音訊總時長', + "audioFileSize": '音訊檔案大小', + "transcriptBytes": '轉寫位元組', + // 通知文案 + "loadFailed": '載入失敗', + "statsLoadFailedTryLater": '統計資料載入失敗,請稍後重試', + "cleanupComplete": '清理完成', + "cleanedOldData": '已清理90天前的過期資料', + "exportFeature": '導出功能', + "exportInDevelopment": '資料匯出功能正在開發中', + + // 商品页面(AI/翻译/会议) + 'availablePackages': '可購買套餐', + 'remainingQuota': '剩餘額度', + 'totalQuota': '總額度', + 'remaining': '剩餘', + 'featureDescription': '功能說明', + // AI 功能卡片 + 'musicAndRecommendation': '聽歌與推薦', + 'navigationAndRoutes': '導航與路線', + 'nearbySearch': '附近搜尋', + 'newsInformation': '新聞資訊', + 'communicationAssistant': '通訊助手', + // 翻译功能卡片 + 'realtimeTranscription': '實時同傳', + // 'textTranslation' 已存在 + 'sceneLexicon': '場景詞庫', + 'subtitleDisplay': '字幕顯示', + // 会议功能卡片 + 'meetingRecording': '會議記錄', + 'transcriptionAndSummary': '轉寫與總結', + 'keywordSearch': '關鍵詞檢索', + 'collaborationSharing': '協同分享', + // 商品名称(按ID) + 'ai_001_name': 'AI基礎 100 次', + 'ai_002_name': 'AI基礎 500 次', + 'ai_003_name': 'AI基礎 1000 次', + 'meet_001_name': '會議基礎 100 次', + 'meet_002_name': '會議基礎 500 次', + 'meet_003_name': '會議基礎 1000 次', + 'trans_001_name': '翻譯基礎 100 次', + 'trans_002_name': '翻譯基礎 500 次', + 'trans_003_name': '翻譯基礎 1000 次', + + // 商品描述(按ID) + 'ai_001_desc': '含 100 次使用,涵蓋核心 AI 功能', + 'ai_002_desc': '含 500 次使用,涵蓋核心 AI 功能', + 'ai_003_desc': '含 1000 次使用,涵蓋核心 AI 功能', + 'meet_001_desc': '含 100 次會議錄音/轉寫', + 'meet_002_desc': '含 500 次會議錄音/轉寫', + 'meet_003_desc': '含 1000 次會議錄音/轉寫', + 'trans_001_desc': '含 100 次翻譯(語音/文本)', + 'trans_002_desc': '含 500 次翻譯(語音/文本)', + 'trans_003_desc': '含 1000 次翻譯(語音/文本)', + +// 商品页通用页脚 + 'appNameProvider': '應用名稱:Voitrans · 服務提供:Voitrans', + 'iapCustomerServiceQQLabel': '內購商品專屬客服QQ:@qq', + 'copyrightVoitrans': '© 2025 Voitrans Technologies', + + // 会议商品页描述 + 'meetingHeaderDesc1': '錄音轉寫、關鍵詞檢索與自動總結,提升會議效率。', + 'meetingHeaderDesc2': '適用於商務會議、課堂筆記、訪談紀要等場景。', + 'meetingAutoRecording': '自動錄音與分段', + 'meetingSpeakerTagging': '講話人標注', + 'meetingLongAudioTranscription': '長音訊轉寫', + 'meetingKeyPointSummary': '關鍵要點提煉', + 'meetingTopicNameSearch': '按主題/人名檢索', + 'meetingTimelineJump': '時間線跳轉', + 'meetingExportSummary': '導出紀要', + 'meetingMultiPlatformShare': '多平台分享', + 'meetingDisclaimer': '建議在安靜環境使用,效果受麥克風與網路影響,具體以實際表現為準。', + + // 同传/翻译商品页描述 + 'transHeaderDesc1': '多語種實時同傳與文本翻譯,低延時語音播報。', + 'transHeaderDesc2': '適用於出行、商務、演講與教學等場景。', + 'translateZhEn': '中英互譯', + 'lowLatencyVoiceBroadcast': '低延時語音播報', + 'multiLangTextTranslation': '多語種文本翻譯', + 'termOptimizationContextPreserve': '術語優化與語境保持', + 'lexiconTourBusinessLife': '旅遊/商務/生活詞庫', + 'personalVocabularyMemory': '專屬詞彙記憶', + 'conversationSubtitleLargeText': '對話字幕/大字模式', + 'colorHighContrast': '顏色高對比度', + 'transDisclaimer': '翻譯效果受麥克風、網路時延與環境噪聲影響,具體以實際表現為準。', + + // AI 商品页描述 + 'aiHeaderDesc1': '更長對話額度、更多工具呼叫、更強上下文長度支持。', + 'aiHeaderDesc2': '適用於智能體問答、總結分析、任務執行等場景。', + 'musicSearchPlaybackControl': '檢索曲庫、播放控制', + 'smartPlaylistAndSimilarRecommendations': '智能推薦歌單與相似歌曲', + 'routePlanningAndCongestionAvoidance': '路線規劃與擁堵規避', + 'voiceBroadcastAndWaypoints': '語音播報與途徑點設置', + 'realTimeWeatherForecast': '實時天氣與預報', + 'clothingAdviceAndTravelReminders': '穿衣建議與出行提醒', + 'poiSearchFoodGasParking': '餐飲/加油/停車等地點檢索', + 'ratingsHoursAndDirectRoutes': '評分、營業時間與路線直達', + 'hotNewsAndTopicOverview': '熱點快訊與專題速覽', + 'longArticleSummariesAndKeyPoints': '長文總結與要點提煉', + 'helpCallAndSMS': '幫忙撥打電話與發短信', + 'templatedMessagesAndScheduleReminders': '模板消息與日程提醒', + 'aiDisclaimer': '以上功能受設備權限、服務可用性與網路狀況影響,具體以實際表現為準。', + + // 会员商品页 + 'benefitsOverview': '權益總覽', + 'higherQuota': '更高使用額度', + 'lowerUnitPrice': '更低單價', + 'priorityService': '優先服務', + 'exclusiveSupportChannel': '專屬客服通道', + 'fastResponse': '問題快速回應', + 'eventsAndDiscounts': '活動與折扣', + 'memberExclusiveEvents': '會員專屬活動', + 'longTermDiscountPlan': '長期優惠計劃', + 'generalPrivileges': '通用特權', + 'earlyAccessNewFeatures': '新功能優先體驗', + 'crossDeviceSync': '跨設備同步', + 'vipDisclaimer': '具體權益以實際套餐說明為準,可能隨版本迭代調整。', + + // 新手引导 / Onboarding + 'skip': "跳過", + 'next': '下一步', + 'sayLilyHint': "Say \"Lily Lily\" to the mic", + 'imHere': "I’m here~", + 'guideWelcomeWakeAI': "Welcome to Voitrans! First, wake your AI “Lily”.", + 'aiReplyCompleted': "Lily has finished the reply!", + 'aiThinking': "Lily is thinking…", + 'guideAwakenSuccess': "Great! Lily is awake—ask it to help.", + 'confirmInput': "Confirm Input", + 'guideClickSendPrefix': "Tap send, ", + // AI 引导步骤 + 'guideWeatherStart': "Tell Lily: “What’s the weather today?”", + 'guideWeatherInput': "What’s the weather today?", + 'guideWeatherSend': "Lily will report the weather in real time", + 'guideWeatherEnd': "Lily can report weather live—try other commands", + 'guideMusicStart': "Tell Lily: “Play some rock music”", + 'guideMusicInput': "Play some rock music", + 'guideMusicSend': "Lily will find music for you", + 'guideMusicEnd': "Lily found music—try other commands", + 'guideNavStart': "Tell Lily: “Navigate to Shenzhen Airport”", + 'guideNavInput': "Navigate to Shenzhen Airport", + 'guideNavSend': "Lily will plan the route", + 'guideNavEnd': "Navigation set—try other commands", + 'guideMeetingStart': + "Tell Lily: “Create a meeting reminder for 3pm tomorrow”", + 'guideMeetingInput': "Create a meeting reminder for 3pm tomorrow", + 'guideMeetingSend': "Lily will create a meeting reminder", + 'guideMeetingEnd': "Reminder created—try other commands", + 'guidePhoneStart': "Tell Lily: “Call Mom”", + 'guidePhoneInput': "Call Mom", + 'guidePhoneSend': "Lily will make the call", + 'guidePhoneEnd': "Call placed—try other commands", + 'guideSmsStart': "Tell Lily: “Send Dad a text: I’ll be home for dinner”", + 'guideSmsInput': "Text Dad: I’ll be home for dinner", + 'guideSmsSend': "Lily will send the message", + 'guideSmsEnd': "Message sent—voice control is convenient", + + // 商务会议助手页 + "startMeeting": "開始會議", + 'edit': '編輯', + 'delete': '刪除', + 'noContent': '無內容', + 'editMeetingTitle': '修改會議標題(非必填)', + 'meetingTitle': '會議標題(非必填)', + 'maxCharacters': '最多50個字元', + 'meeting': '會議', + 'recordingDetails': '錄音詳情', + 'aiSummary': 'AI總結', + 'meetingTranscript': '會議原文', + + // Meeting模块 - 导航和基础功能 + 'files': '檔案', + 'mine': '我的', + 'connect': '連接', + 'allFiles': '全部檔案', + 'searchInAllFiles': '在所有檔案中搜尋', + 'from': '來自', + 'sortBy': '排序方式', + 'creationTime': '建立時間', + 'bluetoothConnection': '藍牙連接', + 'meetingReconnect': '重新連接', + 'searching': '搜尋中...', + 'searchFailed': '搜尋失敗,請檢查藍牙是否已開啟', + 'aiPenNotFound': '未搜尋到 AI PEN 設備', + 'connectedToAiPen': '已連接到 AI PEN 設備', + 'checkingNewFiles': '檢查是否有新檔案需要導入', + 'startingWifi': '正在開啟Wi-Fi...', + 'newFilesDetected': '檢查到有新檔案,正在準備導入', + 'noNewFiles': '沒有新檔案需要導入', + 'connectingWifi': '正在連接 Wi-Fi...', + 'wifiConnected': 'Wi-Fi 連接成功', + 'downloadingFiles': '正在下載檔案...', + 'downloadingFileProgress': '共{total}個檔案,正在下載第{current}個檔案', + 'downloadComplete': '下載完成', + 'downloadCompleteInfo': '下載完成,共{count}個檔案,2秒後自動返回', + + // Meeting模块 - 录音功能 + 'startRecording': '開始錄音', + 'liveRecording': '現場錄音', + 'audioVideoRecording': '音訊、影片錄音', + 'callRecording': '通話錄音', + 'importAudio': '導入音訊', + 'transcribing': '正在轉寫...', + 'summarizing': '正在總結...', + 'analyzing': '正在分析...', + 'summaryComplete': '總結完成', + //'generating': '正在生成...', + 'generate': '生成', + 'overview': '概覽', + 'transcription': '轉寫', + 'summary': '總結', + 'mindMap': '思維導圖', + 'editSpeaker': '編輯', + 'nameSpeaker': '命名發言者', + + // Meeting模块 - 我的页面 + 'transcriptionRecords': '轉寫記錄', + 'templateCommunity': '模板社區', + 'comingSoon': '敬請期待', + 'integration': '集成', + 'voitransPrivateCloud': 'VOITRANS PRIVATE CLOUD', + 'enabled': '開啟', + 'disabled': '關閉', + 'myVoitransDevice': '我的VOITRANS設備', + 'helpAndFeedback': '幫助與反饋', + 'aboutVoitrans': '關於VOITRANS', + 'meetingDays': '天', + 'meetingHours': '小時', + 'voitransAiMember': 'Voitrans AI會員', + 'unlockStarterMember': '解鎖 Starter 會員', + 'bindDeviceToActivate': '綁定 Voitrans 設備可啟用 Starter 會員', + 'unlockNow': '立即解鎖', + + // Meeting模块 - 会员功能 + 'comparison': '對比', + 'detailedInfo': '詳細資訊', + 'monthlyTranscriptionTime': '每月轉寫時長', + 'unlimited': '無限', + 'professionalTemplates': '專業模板', + 'limited': '有限', + 'fullTemplates': '全量模板', + 'professionalTerms': '專業術語', + 'customTemplates': '自訂模板', + 'visualMindMap': '可視化思維導圖', + 'speakerIdentification': '區分說話人', + 'aiVoiceEnhancement': 'AI 人聲增強', + 'audioImport': '音訊導入', + 'multipleExportFormats': '支援多種導出格式', + 'professionalSummaryTemplates': '專業總結模板', + 'professionalTemplateDesc': '專業模板設計,提高您的工作效率。根據行業需求量身定制。', + 'customTemplateDesc': '您可以根據需求自訂總結 Prompts,並用它們生成所需的總結。', + 'askAiDesc': '從錄音中智能挖掘更深入資訊,一鍵生成資料表格、關鍵討論結論、To Do、匯報郵件等格式內容。', + 'visualMindMapDesc': '超越總結-用思維導圖整理和可視化要點,更有效地理解全文。', + 'templateCommunityDesc': '發現、分享,並從使用者建立的模板庫中獲得靈感。', + 'speakerIdentificationDesc': '音訊轉寫將支援區分發言者,更直觀地還原會議或電話通話內容。同時總結將更加準確。', + 'privateCloudSyncDesc': '您的錄音和轉寫等資料將安全儲存在專屬的雲端伺服器中,無論是上傳還是下載,全程加密處理,確保隱私安全。', + 'aiVoiceEnhancementDesc': 'AI 人聲增強支援多檔降噪設定,智能消除背景噪音,增強語音清晰度,提升音訊回放效果。', + 'audioImportDesc': '可以輕鬆從本地或第三方應用導入音訊檔案,如語音備忘錄、Google雲端硬碟等。', + 'multipleExportFormatsDesc': '導出您的音訊錄音、轉寫文本和摘要為各種格式(TXT、PDF、JPEG),以滿足您的需求。', + + // Meeting模块 - 升级会员 + 'upgradeMembership': '升級您的會員', + 'yearlySubscription': '年訂閱', + 'monthlySubscription': '月訂閱', + 'proMonthly': 'Pro ¥60/月', + 'proMonthlyDesc': '7天免費試用,之後按¥800/年。試用期結束前可隨時取消。', + 'sevenDayTrial': '7天免費試用', + 'unlimitedMonthly': 'Unlimited ¥120/月', + 'unlimitedMonthlyDesc': '7天免費試用,之後按¥1600/年。試用期結束前可隨時取消。', + 'trialNote': '*免費試用7天,然後按年收費,隨時取消。', + 'proPrice': 'Pro ¥120', + 'proMonthlyPrice': '¥120/月', + 'subscribe': '訂閱', + 'unlimitedPrice': 'Unlimited ¥198', + 'unlimitedMonthlyPrice': '¥198/月', + 'upgradeNote': '*升級訂閱後,原訂閱的剩餘天數會自動折算差價並退還至您的支付帳戶', + 'buyMoreTranscriptionTime': '購買更多轉寫時長', + 'sixThousandMinutes': '6,000分鐘', + 'threeThousandMinutes': '3,000分鐘', + 'sixHundredMinutes': '600分鐘', + 'oneHundredTwentyMinutes': '120分鐘', + 'validityPeriod': '*有效期:', + 'validityNote': '購買後立即啟用,啟用後2年內有效。', + 'purchase': '購買', + + // Meeting模块 - 模版和生成 + 'selectSummaryTemplate': '選擇總結模板', + 'useThisTemplate': '就用這個模板', + 'lastUsed': '上次使用', + 'viewAll': '查看全部', + 'recordingLanguage': '錄音語言', + 'chineseSimplified': '中文普通話(簡體)', + 'meetingGenerateNow': '立即生成', + 'keyEventsAnalyzed': '分析出{count}個關鍵事件。', + 'aiAnalysisDesc': 'AI分析識別錄音中的關鍵事件,讓你選擇重要事件進行AI生成。', + + // Meeting模块 - 文件操作和状态 + 'importing': '正在導入...', + 'batchImporting': '正在批量導入...', + 'importingLocalRecordings': '正在導入本地錄音...', + 'importFailed': '導入檔案失敗: {filePath}, error: {error}', + 'importSuccess': '成功導入本地 {count} 條錄音', + 'importError': '導入失敗: {error}', + 'pleaseSelectAudioFile': '請選擇音訊檔案', + 'shareAudio': '分享會議音訊', + 'shareComplete': '分享完成!', + 'shareFailed': '分享失敗: {error}', + 'fileProcessingFailed': '檔案處理失敗: {filePath}, 錯誤: {error}', + + // 翻译模块 - Meeting相关 + 'meetingUnknownLanguage': '未知語言', + + // 权限相关 - Meeting相关 + 'meetingStoragePermission': '儲存', + 'meetingStoragePermissionExplanation': '我們需要存取儲存權限,以便您可以選擇並上傳音訊檔案。', + 'meetingStoragePermissionPermanentDenial': + '檢測到您已永久拒絕儲存權限。如需繼續使用此功能,請前往應用設定中手動開啟儲存權限。', + + // Meeting模块 - 思维导图相关 + 'shareMindMap': '分享思維導圖', + 'shareSuccess': '分享成功', + + // Meeting模块 - AI相关 + 'askAI': '問 AI ...', + 'askAIPrompt': '今天我能幫您做點什麼呢?', + 'continueAsk': '繼續提問', + 'todoList': '待辦事項', + 'extractConclusion': '提取結論', + 'generateKeyIndicators': '生成關鍵指標', + + // Meeting模块 - 更多操作相关 + 'reSummarize': '重新總結', + + // Meeting模块 - 录音语言相关 + 'recordLanguage': '錄音語言', + // 'chinese': '中文普通话(简体)', + 'cantonese': '粵語', + 'sichuan': '四川話', + 'shanghai': '上海話', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', + + // Meeting模块 - 分享相关 + 'shareLink': '分享連結', + 'copyTranscript': '複製轉寫', + 'copySummary': '複製總結', + 'exportAudio': '導出音訊', + 'exportTranscript': '導出轉寫', + 'shareMeetingAudio': '分享會議音訊', + 'exportSummary': '導出總結', + 'exportAs': '導出為', + 'exportingPDF': '正在導出PDF...', + + // Meeting模块 - 发言者相关 + 'nameCurrentSpeaker': '命名當前發言者', + 'recentlyUsedNames': '最近使用過的名稱', + 'applyToCurrentParagraph': '應用到當前段落', + 'totalTime': '總計', + 'summarySpeakerWillBeUpdatedAutomatically': '總結的發言者將自動更新', + + // Meeting模块 - 云端同步相关 + 'syncToCloud': '同步到雲端', + 'syncToCloudTip': + '自動將你的錄音同步到雲端,你可以通過任意VOITRANS APP或VOITRANS Web(web.voitrans.com)播放、管理和分享錄音。', + 'syncToVoitransApp': '同步VOITRANS APP', + 'transcriptionRecord': '轉寫記錄', + + // Meeting模块 - 总结页面相关 + 'dateAndTime': '日期時間', + 'location': '地點', + 'attendees': '與會人員', + 'inputLocation': '輸入地點', + 'inputAttendees': '輸入與會人員', + + // 设置页 + "systemSettings": "系統設定", + "vipRecharge": "高級會員充值", + "aiRecharge": "AI充值", + "translationRecharge": "翻譯充值", + "meetingAssistantRecharge": "會議充值", + "cloudSync": "雲端同步", + "memberService": '會員服務', + "bindRewardTitle": '獎勵', + "bindRewardSimpleDesc": '首次綁定設備獎勵已下發,點擊確定關閉即可', + "joinDevice": "已連接設備:", + "accountId": "帳號ID:", + "systemSetting": "系統設定", + "languageSetting": "語言設定", + "darkMode": "深色模式", + "darkModeInfo": "切換應用的明暗主題", + "backups": "備份與還原", + "backupsInfo": "備份設定和AI互動歷史", + "lastBackup": "上次備份:", + "privacySettings": "隱私設定", + "privacySettingsInfo": "管理資料收集和權限", + "permissionManagement": "權限管理", // 权限管理 + "permissionManagementInfo": "管理應用權限設定", // 管理应用权限设置 + "aboutApplication": "關於應用", + "versions": "版本", + "checkUpdates": "檢查更新", + "selectLanguage": "選擇語言", + "voiceService": "語音服務", + "voiceServiceInfo": "選擇語音識別和合成服務", + "selectVoiceService": "選擇語音服務", + "azureVoiceService": "Azure 語音服務", + "azureVoiceServiceInfo": "微軟雲端語音服務,支援高品質語音合成和識別", + "flutterVoiceService": "Flutter 本地語音服務", + "flutterVoiceServiceInfo": "設備本地語音服務,無需聯網即可使用", + 'timbreService': '音色服務', + 'timbreServiceInfo': '選擇音色語音合成服務', + 'defaultTimbre': '預設音色', + 'microsoftCloudTimbreService': '微軟雲端音色服務', + 'voiceClone': '聲音複刻', + 'AIsettings': 'AI設定', + 'selecttimbre': '選擇音色', + 'pleaseRead': '請朗讀', + 'completeRecording': '完成錄製', + "firmwareUpgrade": "韌體升級", + "bleHeadsetFirmwareUpgrade": "BLE耳機韌體版本升級", + "deviceManagement": "設備管理", + "manageConnectedDevices": "管理已綁定的藍牙設備", + + //设置setting_controller + // 版本更新相关 + 'currentLatestVersion': '當前已是最新版本 {version}', + 'checkUpdateFailed': '檢查更新失敗', + 'networkErrorRetry': '網路錯誤,請稍後重試', + +// 设备管理相关 + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', + + // 设置页面 - 实时语音对话 + "realtimeVoiceChat": "實時語音對話", + "realtimeVoiceChatInfo": "體驗智能語音互動功能(功能預覽)", + "loading": "載入中...", + + //设备管理页面 + "deviceTypeUnknown": '未知設備', + "deviceTypeClassicBluetoothHeadset": '經典藍牙耳機', + "deviceTypeBleBluetoothHeadset": 'BLE藍牙耳機', + "deviceTypeSmartVoiceRecorder": '智能錄音筆', + "deviceTypeSmartEye": '智能眼鏡', + "unbind": "解除綁定", + "noDevicesBound": '暫未綁定任何設備', + "pleaseBindDeviceFirst": '請先綁定設備後再進行管理', + "noMacAddress": '無MAC地址', + "licenseCode": '授權碼', + "confirmUnbind": '確認解除綁定', + "confirmUnbindMessage": '確定要解除綁定設備 "{deviceName}" 嗎?', + "confirmUnbindAction": '確認解除綁定', + +//Agent 模块 + // agent View + "Lily": "Lily", + "clearChatHistory": "清空聊天記錄", + "online": "在線", + "inputMessage": "輸入訊息...", + "imListening": "正在聆聽...", + "canStartTalking": "你可以開始說話", + "addQuestionAboutImage": "新增關於圖片的問題或描述...", + "summarizeImageContent": "總結圖片內容", + "extractImageText": "擷取圖片文字", + "translateImageText": "翻譯圖片文字", + "recording": "正在錄音...", + "holdToSpeak": "按住說話", + "takePhoto": "拍照", + "photoAlbum": "相簿", + "makeCall": "打電話", + "aiVoiceCall": "AI語音通話", + "inCall": "正在通話中...", + "aiReplying": "AI正在回覆...", + "waitingToStart": "等待開始...", + "clickToStartCall": "點擊開始通話", + "listeningToYou": "正在聽您說話...", + "processing": "正在處理...", + "loadMoreMessages": "載入更多訊息...", + "loadFailedClickRetry": "載入失敗,點擊重試", + "swipeUpForMore": "向上滑動查看更多", + "callingTool": "正在幫您,請稍等!", // 正在帮您,请稍等! + "voice_interrupt": "語音打斷", // 语音打断 + + // 预设提示词 + "presetMusic": '來點音樂', // 来点音乐 + "presetNavigation": '導航到', // 导航 + "presetWeather": '今日天氣', // 今日天气 + "presetNews": '今日新聞', // 今日新闻 + "presetFood": '附近美食', // 美食 + "playSomeMusic": '播放一些流行音樂', // 播放一些流行音乐 + "navigationTo": '請幫我導航到', // 导航到 + "todayWeather": '今天天氣如何?', // 今日天气 + "todayNews": '今天有哪些新聞?', // 今日新闻 + "nearbyFood": '附近有哪些美食?', // 美食 + + // Agent controller + 'welcomeMessage': '你好!我是**Lily**,我能幫你:\n\n' + '• 回答問題和提供資訊\n\n' + '• 實時語音翻譯\n\n' + '• 推薦音樂和播客\n\n' + '• 語音備忘錄和提醒\n\n' + '• 控制耳機功能\n\n' + '有什麼我可以幫你的嗎?', + 'microphonePermission': '麥克風', + 'voiceRecognitionPermissionText': '語音識別功能需要存取麥克風。', + 'voiceTranslationPermissionText': '語音識別與翻譯功能需要存取麥克風。', + 'phoneCallPermissionText': '打電話功能需要存取麥克風進行語音通話。', + 'permissionDeniedText': '您已永久拒絕麥克風權限,請前往系統設定開啟權限。', + 'startVoiceInput': '開始語音輸入', + 'startPhoneCallMode': '開始打電話模式,開始語音輸入', + + // Agent 全屏编辑器 + 'fullScreenEditorHint': '在這裡輸入你的訊息...', // 全屏编辑器输入提示 + 'characterCount': '{count} 字元', // 字符计数显示 + + // 消息长按操作 + 'copy': '複製', + 'copySuccess': '複製成功', + 'report': '舉報', + 'submitSuccess': '提交成功', + 'submitFailed': '提交失敗', + 'reportSubmitted': '舉報已提交,我們會盡快處理', + //'networkError': '网络错误,请稍后重试', + 'harmfulUnsafe': '有害/不安全', + 'pornographicVulgar': '色情低俗', + 'misleadingAttack': '誤導攻擊', + 'illegalCriminal': '違法犯罪', + 'privacyRelated': '隱私相關', + 'copyrightViolation': '侵犯我的著作權、名譽權等', + 'other': '其他', + 'reportDescriptionHint': '我們想知道你舉報的原因,你可以描述你遇到的問題。', + //'submit': '提交', + + //Message_bubble + 'generatedByAi': '由AI生成', + + //音乐卡片 music_card + 'recommendedMusic': '以下是一些推薦的音樂:', + 'playList': '播放清單', + 'moreMusic': '更多音樂', + + //导航卡片 navigation_card + 'kilometers': '公里', // 公里单位 + 'meters': '米', // 米单位 + 'hours': '小時', // 小时单位 + 'minutes': '分鐘', // 分钟单位 + 'seconds': '秒', // 秒单位 + 'navigating': '導航中', // 导航状态 + 'currentLocation': '目前位置', // 当前位置 + 'approximate': '約', // 大约 + 'enterRoad': '進入', // 进入道路 + "driving": "駕車", + "walking": "步行", + "bicycling": "騎行", + "tsransit": "公共交通", + + //天气卡片 weather_card + 'weatherQuery': '查詢天氣情況:', + 'highest': '最高', + 'lowest': '最低', + 'futureForecast': '未來預報', + 'hotWeatherTip': '今日高溫炎熱,請注意防暑降溫,多喝水避免中暑', + 'coldWeatherTip': '今日氣溫較低,外出請注意保暖,小心感冒', + 'rainyWeatherTip': '今日有雨,外出請攜帶雨具,注意出行安全', + 'snowyWeatherTip': '今日有雪,路面濕滑請注意安全,做好保暖措施', + 'foggyWeatherTip': '今日有霧霾,能見度較低,外出請佩戴口罩', + 'windyWeatherTip': '今日風力較大,外出請注意安全,固定好物品', + 'sunnyWeatherTip': '今日陽光充足紫外線較強,外出請做好防曬', + 'temperatureDifferenceTip': '今日晝夜溫差較大,請適時增減衣物', + 'comfortableWeatherTip': '今日天氣適宜,是外出活動的好時光', + "monday": "週一", + "tuesday": "週二", + "wednesday": "週三", + "thursday": "週四", + "friday": "週五", + "saturday": "週六", + "sunday": "週日", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": 'Welcome Reward', + "firstBindRewardDesc": 'You\'ve received binding rewards.', + "vipLevelLabel": 'VIP Level:', + "expiryLabel": '到期時間:', + "notActivated": '未啟用', + "aiChatCreditsLabel": 'AI Chat Credits:', + "translationCreditsLabel": 'Translation Credits:', + "meetingCreditsLabel": 'Meeting Credits:', + "ok": 'OK', + + // 天气描述 + "sunny": "晴", + "partlyCloudy": "少雲", + "partlySunny": "晴間多雲", + "cloudy": "多雲", + "overcast": "陰", + "shower": "陣雨", + "thundershower": "雷陣雨", + "lightRain": "小雨", + "moderateRain": "中雨", + "heavyRain": "大雨", + "rainstorm": "暴雨", + "snowShower": "陣雪", + "lightSnow": "小雪", + "moderateSnow": "中雪", + "heavySnow": "大雪", + "blizzard": "暴雪", + "fog": "霧", + "haze": "霾", + "strongWind": "大風", + + //编辑个人信息页 + "editProfile": "編輯個人資訊", + "avatar": "頭像", + "nickname": "暱稱", + "save": "儲存", + "about": "關於", + "enterNickname": "請輸入暱稱", + "notSet": "未設定", + "accountSetting": "帳號設定", + "logout": "登出", + "logoutTips": "確定要登出目前帳號嗎?", + 'deleteAccount': '註銷帳號', + 'deleteAccountTips': '確定要永久刪除您的帳號嗎?此操作不可撤銷', + 'clean': '清除快取', + 'cleanTips': '確定要清除個人快取嗎?', + + // Profile 错误信息 + 'networkConnectionFailed': '網路連接失敗,請檢查網路設定後重試', + 'serverTemporarilyUnavailable': '伺服器暫時無法回應,請稍後重試', + 'loginExpiredPleaseRelogin': '登入已過期,請重新登入', + 'noPermissionForThisOperation': '沒有權限執行此操作', + 'requestedResourceNotFound': '請求的資源不存在', + 'imageProcessingFailedPleaseReselect': '圖片處理失敗,請重新選擇圖片', + 'operationFailedPleaseRetry': '操作失敗,請重試', + 'serverReturnedError': '伺服器返回錯誤', + 'serverError': '伺服器錯誤', + 'networkConnectionFailedCheckSettings': '網路連接失敗,請檢查網路設定', + 'serverInternalErrorRetryLater': '伺服器內部錯誤,請稍後重試', + +// Profile 用户交互 +//'error': '错误', +//'success': '成功', + 'imageCompressionFailed': '圖片壓縮失敗', + 'avatarUpdateFailed': '頭像更新失敗', + 'usernameCannotBeEmpty': '使用者名稱不能為空', + 'saveSuccess': '儲存成功', + 'personalInfoUpdated': '個人資訊已更新', + 'saveFailed': '儲存失敗', + 'loggedOut': '已登出', + 'logoutFailedRetry': '登出失敗,請重試', + 'accountPermanentlyDeleted': '帳號已被永久刪除', + 'deleteAccountFailedRetry': '刪除帳號失敗,請重試', + + // 账号服务相关 + 'clearUserDataFailed': '清理使用者資料失敗', // 清理用户数据失败 + 'deleteUserDataFailed': '刪除使用者資料失敗', // 删除用户数据失败 + 'thirdPartyLogoutSuccess': '第三方登出成功', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': '第三方登出失敗', // 第三方登录退出失败 + 'signOutProcessError': '登出過程發生錯誤', // 登出过程发生错误 + 'deleteAccountProcessError': '刪除帳號過程發生錯誤', // 删除账号过程发生错误 + 'userDataClearSuccess': '使用者資料清理成功', // 用户数据清理成功 + 'allUserDataClearSuccess': '所有使用者資料清理成功', // 所有用户数据清理成功 + 'accountServiceInitialized': 'AccountService 已初始化', // AccountService 已初始化 + + // 权限管理页面 + 'getPermissionStatusFailed': '取得權限狀態失敗', + 'communicationPermissions': '通訊權限', + 'bluetoothPermissions': '藍牙權限', + 'notificationPermissions': '通知權限', + 'storagePermissions': '儲存權限', + 'microphonePermissions': '麥克風權限', + 'alarmPermissions': '鬧鐘權限', + 'calendarPermissions': '日曆權限', + 'locationPermissions': '位置權限', + 'phone': '電話', + 'sms': '簡訊', + 'contacts': '聯絡人', + //'bluetooth': '蓝牙', + 'notification': '通知', + 'alarm': '鬧鐘', + 'calendarWrite': '日曆寫入', + 'calendarFullAccess': '日曆完整存取', + 'locationInfo': '位置資訊', + 'phonePermissionDesc': '用於撥打電話功能', + 'smsPermissionDesc': '用於發送簡訊功能', + 'alarmPermissionDesc': '用於設定精確鬧鐘以確保提醒按時觸發', + 'calendarWritePermissionDesc': '用於建立日曆事件和提醒', + 'calendarFullAccessPermissionDesc': '用於讀取和管理日曆事件及提醒', + 'locationPermissionDesc': '用於取得目前位置資訊', + 'appFunctionNeeds': '應用功能需要', + 'authorized': '已授權', + 'unauthorized': '未授權', + 'needOpenInSystemSettings': '需要在系統設定中開啟', + 'partialAuthorization': '部分授權', + 'unknownStatus': '未知狀態', + 'permissionGranted': '權限已授予', + 'permissionRequestError': '請求權限時出錯', + 'phonePermissionDetailDesc': '撥打電話功能需要電話權限', + 'smsPermissionDetailDesc': '發送簡訊功能需要簡訊權限', + 'alarmPermissionDetailDesc': '設定精確鬧鐘需要此權限,以確保提醒按時觸發', + 'calendarWritePermissionDetailDesc': '建立日曆事件需要日曆寫入權限', + 'calendarFullAccessPermissionDetailDesc': '管理日曆事件需要完整日曆權限', + 'locationPermissionDetailDesc': '取得位置資訊需要位置權限', + 'contactsPermissionDesc': '用於存取聯絡人資訊', + 'contactsPermissionDetailDesc': '撥打電話和發送簡訊功能需要聯絡人權限以選擇聯絡人', + 'bluetoothPermissionDesc': '用於連接和管理藍牙設備', + 'bluetoothPermissionDetailDesc': '連接藍牙耳機等設備需要藍牙權限', + 'bluetoothScanPermissionDesc': '用於掃描附近的藍牙設備', + 'bluetoothScanPermissionDetailDesc': '掃描附近藍牙設備需要藍牙掃描權限', + 'bluetoothConnectPermissionDesc': '用於連接藍牙設備', + 'bluetoothConnectPermissionDetailDesc': '連接藍牙設備需要藍牙連接權限', + 'notificationPermissionDesc': '用於發送通知訊息', + 'notificationPermissionDetailDesc': '應用需要通知權限以向您發送重要提醒和訊息', + 'appNeedsPermissionForFullFunction': '應用需要此權限以提供完整功能', + 'permanentDenialText': '您已永久拒絕{permission}權限,請前往應用設定開啟', + 'goToSettings': '去設定', + + // 权限申请 + 'bluetoothScan': '藍牙掃描', + 'bluetoothConnect': '藍牙連接', + 'bluetoothScanExplanation': '為了掃描附近的藍牙設備,應用需要取得藍牙掃描權限。', + 'bluetoothConnectExplanation': '為了連接藍牙設備,應用需要取得藍牙連接權限。', + 'locationForBluetoothExplanation': '為了掃描藍牙設備,應用需要取得位置資訊權限。', + 'bluetoothScanPermanentDenial': '藍牙掃描權限已被永久拒絕,請前往設定手動開啟。', + 'bluetoothConnectPermanentDenial': '藍牙連接權限已被永久拒絕,請前往設定手動開啟。', + 'locationPermanentDenial': '位置資訊權限已被永久拒絕,請前往設定手動開啟。', + 'notificationPermission': '通知', + 'locationPermission': '定位', + 'notificationPermissionExplanation': '需要通知權限來顯示音樂播放狀態。', + 'locationPermissionExplanation': '需要定位權限來取得當前位置。', + 'notificationPermissionPermanentDenial': '您已永久拒絕通知權限,請前往設定開啟權限。', + 'locationPermissionPermanentDenial': '您已永久拒絕定位權限,請前往設定開啟權限。', +//'microphonePermission': '录音', + 'storagePermission': '儲存', + 'microphonePermissionExplanation': '我們需要存取麥克風權限,以便您錄製音訊內容。', + 'storagePermissionExplanation': '我們需要存取儲存權限,以便您可以選擇並上傳音訊檔案。', + 'microphonePermissionPermanentDenial': + '檢測到您已永久拒絕錄音權限。如需繼續使用此功能,請前往應用設定中手動開啟麥克風權限。', + 'storagePermissionPermanentDenial': + '檢測到您已永久拒絕儲存權限。如需繼續使用此功能,請前往應用設定中手動開啟儲存權限。', + + //permission_util.dart + 'permissionUtilNeed': '需要', + 'permissionUtilPermission': '權限', + 'permissionUtilRestricted': '權限受限', + 'permissionUtilRestrictedMessage': '此功能在當前設備上不可用或受限,請檢查設備設定或系統限制', + 'permissionUtilConfirm': '確定', + + // 版本更新对话框 + 'newVersionFound': '發現新版本', // 版本更新对话框标题 + 'remindLater': '稍後提醒', // 稍后提醒按钮 + 'updateNow': '立即更新', // 立即更新按钮 + 'checkUpdate': '檢查更新', // 检查更新按钮 + 'updateFailed': '更新失敗', // 更新失败提示 + 'cannotOpenAppStore': '無法打開應用商店,請手動前往應用商店更新', // 无法打开应用商店提示 + 'updateErrorRetry': '更新過程中發生錯誤,請稍後重試', // 更新错误重试提示 + + //国家列表 + "邮箱": "電子郵件", + "中国": "中國", + "美国": "美國", + "加拿大": "加拿大", + "俄罗斯": "俄羅斯", + "英国": "英國", + "德国": "德國", + "意大利": "義大利", + "法国": "法國", + "西班牙": "西班牙", + "南非": "南非", + "沙特阿拉伯": "沙特阿拉伯", + "土耳其": "土耳其", + "日本": "日本", + "韩国": "韓國", + "新加坡": "新加坡", + "马来西亚": "馬來西亞", + "泰国": "泰國", + "越南": "越南", + "印度": "印度", + "巴基斯坦": "巴基斯坦", + "菲律宾": "菲律賓", + "印度尼西亚": "印度尼西亞", + "阿联酋": "阿聯酋", + "墨西哥": "墨西哥", + "巴西": "巴西", + "阿根廷": "阿根廷", + "澳大利亚": "澳大利亞", + "新西兰": "新西蘭", + "中国香港": "中國香港", + "中国澳门": "中國澳門", + "中国台湾": "中國台灣", + "埃及": "埃及", + "希腊": "希臘", + "荷兰": "荷蘭", + "比利时": "比利時", + "匈牙利": "匈牙利", + "罗马尼亚": "羅馬尼亞", + "瑞士": "瑞士", + "奥地利": "奧地利", + "丹麦": "丹麥", + "瑞典": "瑞典", + "挪威": "挪威", + "波兰": "波蘭", + "秘鲁": "秘魯", + "智利": "智利", + "哥伦比亚": "哥倫比亞", + "委内瑞拉": "委內瑞拉", + "葡萄牙": "葡萄牙", + "卢森堡": "盧森堡", + "爱尔兰": "愛爾蘭", + "冰岛": "冰島", + "阿尔巴尼亚": "阿爾巴尼亞", + "马耳他": "馬耳他", + "塞浦路斯": "塞浦路斯", + "芬兰": "芬蘭", + "保加利亚": "保加利亞", + "立陶宛": "立陶宛", + "拉脱维亚": "拉脫維亞", + "爱沙尼亚": "愛沙尼亞", + "乌克兰": "烏克蘭", + "塞尔维亚": "塞爾維亞", + "克罗地亚": "克羅埃西亞", + "斯洛文尼亚": "斯洛文尼亞", + "捷克": "捷克", + "斯洛伐克": "斯洛伐克", + "危地马拉": "危地馬拉", + "萨尔瓦多": "薩爾瓦多", + "洪都拉斯": "洪都拉斯", + "尼加拉瓜": "尼加拉瓜", + "哥斯达黎加": "哥斯達黎加", + "巴拿马": "巴拿馬", + "海地": "海地", + "玻利维亚": "玻利維亞", + "厄瓜多尔": "厄瓜多爾", + "巴拉圭": "巴拉圭", + "乌拉圭": "烏拉圭", + "摩洛哥": "摩洛哥", + "阿尔及利亚": "阿爾及利亞", + "突尼斯": "突尼斯", + "尼日利亚": "尼日利亞", + "加纳": "加納", + "埃塞俄比亚": "埃塞俄比亞", + "肯尼亚": "肯尼亞", + "坦桑尼亚": "坦桑尼亞", + "乌干达": "烏干達", + "孟加拉国": "孟加拉國", + "以色列": "以色列", + "黎巴嫩": "黎巴嫩", + "约旦": "約旦", + "伊拉克": "伊拉克", + "科威特": "科威特", + "巴林": "巴林", + "卡塔尔": "卡塔爾", + "阿曼": "阿曼", + "阿富汗": "阿富汗", + "斯里兰卡": "斯里蘭卡", + "缅甸": "緬甸", + "尼泊尔": "尼泊爾", + "蒙古": "蒙古", + "柬埔寨": "柬埔寨", + "老挝": "老撾", + "文莱": "文萊", + "东帝汶": "東帝汶", + "斐济": "斐濟", + "所罗门群岛": "所羅門群島", + "刚果民主共和国": '剛果民主共和國', + "安哥拉": '安哥拉', + "苏丹": '蘇丹', + "马尔代夫": '馬爾代夫', + "不丹": '不丹', + "摩纳哥": '摩納哥', + "圣马力诺": '聖馬力諾', + "牙买加": '牙買加', + "巴哈马": '巴哈馬', + "巴布亚新几内亚": '巴布亞新幾內亞', + "萨摩亚": '薩摩亞', + + // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": '圖片翻譯', + "textTranslation": '文本翻譯', + + // 翻译主页 (translation_view.dart) + "translationHistory": "翻譯歷史", + "enableRecording": "是否開啟錄音", + "viewAudioFiles": "查看錄音檔案", + "headsetUser": "耳機使用者", + "phoneUser": "手機使用者", + "selectSourceLanguage": "選擇來源語言", + "selectTargetLanguage": "選擇目標語言", + "me": '我', + "counterPart": '對方', + "bluetoothCallStateError": '請確保藍牙耳機已連接到手機並處於通話狀態', + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "autoDetect": '自動檢測', // 自动检测 + // 文本翻译与语种检测 + "languageDetectionFailed": '語言檢測失敗', + "translationFailed": '翻譯失敗', + "pleaseInputText": '請輸入文本', + "textTooLong": '文本過長,最多5000字符', + + // 翻译历史页 + "noTranslationHistory": "暫無歷史記錄", + "historyRecords": '歷史記錄', + "clearResults": '清空結果', + "clearHistory": "清除歷史記錄", + "clearHistoryConfirm": "確定要清除所有翻譯歷史記錄嗎?此操作無法撤銷。", + "unknownLanguage": "未知語言", + "deleteSessionRecord": "刪除對話記錄", + "deleteSessionConfirm": "確定要刪除該對話的所有翻譯記錄嗎?此操作無法撤銷。", + + // 图片翻译模块(Picture Translation) + "selectImageSource": '選擇圖片來源', + "imagePreview": '圖片預覽', + "translationResult": '翻譯結果', + "recognitionResult": '識別結果', + "translatedImagePreview": '翻譯後的圖片預覽', + "translatedImageLoadFailed": '翻譯圖片載入失敗', + "pleaseSelectImage": '請選擇圖片', + "imageLoadFailed": '圖片載入失敗', + "imageQuality": '圖片品質', + "maxSize": '最大尺寸', + "close": '關閉', + "setImageQuality": '設定圖片品質', + "currentQuality": '當前品質: @value%', + "setMaxSize": '設定最大尺寸', + "currentMaxSize": '當前: @pxpx', + "waitingForAction": '等待操作', + "pleaseSelectImageToStart": '請選擇圖片開始翻譯', + "chooseImage": '選擇圖片', + "openingCamera": '正在打開相機...', + "openingPhotoAlbum": '正在打開相簿...', + "cancelled": '已取消', + "userCancelledSelection": '使用者取消了選擇', + "translatingImage": '翻譯圖片', + "callingImageTranslateService": '正在呼叫圖片翻譯服務...', + "savingRecord": '保存記錄', + "savingTranslationResult": '正在保存翻譯結果...', + "translationCompleted": '翻譯完成', + "allStepsCompleted": '所有步驟已完成', + "processingFailed": '處理失敗', + "imageProcessingOrTranslationFailed": '圖片處理或翻譯失敗,請重試。n錯誤資訊: {error}', + "imageTooLarge": '圖片大小超過4MB限制', + "imageTooLargeHint": '圖片大小超過4MB限制,請降低品質或尺寸後重試', + "emptyTranslationResult": '圖片翻譯介面返回空結果', + "imageTranslationFailedTryLater": '圖片翻譯失敗,可能的原因:網路異常或介面限流,請稍後重試', + "imageTranslationApiException": '圖片翻譯介面呼叫異常,請檢查網路後重試', + "permissionRequired": '權限需求', + "cameraPermissionRequired": '需要相機權限才能拍照', + "photoAlbumPermissionRequired": '需要相簿權限才能選擇圖片', + "translationDetails": '翻譯詳情', + "originalImage": '原圖片', + "sourceLanguage": '源語言', + "targetLanguage": '目標語言', + "translationTime": '翻譯時間', + "shareInDevelopment": '分享功能開發中', + + // 翻译录音文件列表页 + "translateAudioFiles": "翻譯錄音檔案", + "noAudioFiles": "暫無音訊檔案", + "calculating": "計算中...", + "playing": "播放中...", + "paused": "已暫停", + "clickToPlay": "點擊播放", + "rename": "重新命名", + "smartTranscription": "智能轉寫", + "renameAudioFile": "重新命名音訊檔案", + "enterNewFileName": "請輸入新的檔案名稱", + + // 翻译详情页 (translation_detail_view.dart) + "originalRecord": "原始記錄", + "recordSummary": "記錄摘要", + "clickToGenerateSummary": "點擊下方按鈕生成對話摘要", + "summaryContent": "摘要內容", + "copied": "已複製", + "summaryCopiledToClipboard": "摘要已複製到剪貼簿", + "extractSummary": "提取摘要", + "summaryGenerated": "已生成摘要", + "generating": "生成中...", + "regenerate": "重新生成", + "summaryTimeoutMessage": "生成摘要請求逾時,可能是網路問題或伺服器繁忙。", + "deleteTranslationRecord": "刪除翻譯記錄", + "deleteTranslationConfirm": "確定要刪除這條翻譯記錄嗎?此操作無法撤銷。", + "originalText": "原文", + "translatedText": "譯文", + "sessionSummary": "對話摘要", + "cannotShare": "無法分享", + "generateSummaryFirst": "請先生成摘要", + "translationSessionRecord": "翻譯對話記錄", + + // 配对模块 + // 配对页面 (pairing_view.dart & pairing_view_new.dart) + "devicePairing": "設備配對", + "connectYourDeepSoundHeadset": "連接您的 Voitrans 耳機", + "bind": "綁定", + "authorizeBind": "授權綁定", + "enterCode": "請輸入代碼", + "autoInputCode": "自動輸入代碼", + "skipBinding": "跳過綁定", + "rescan": "重新掃描", + + "verifyingDevice": "正在驗證設備...", + "confirmBinding": "確認綁定", + "associatingDevice": "正在關聯設備...", + "goToBluetoothSettings": "前往藍牙設定", + 'bluetooth': '藍牙', + + // 配对状态文本 + "readyToPair": "準備開始配對", + "preparingPairingEnvironment": "正在準備配對環境...", + "connectDeepSoundViaSystemBluetooth": "請先透過系統藍牙連接Voitrans設備", + "deviceBindingConfirm": "設備綁定確認...", + "establishingDeviceAssociation": "正在建立設備關聯...", + "waitingCompletePairing": "請稍候,正在完成配對...", + "pairingSuccessRedirecting": "配對成功!即將跳轉到首頁...", + + // 配对错误状态文本 + "ensureConnectedDeepSoundDevice": "請確保連接的是Voitrans設備", + "deviceAlreadyBoundToOtherAccount": "該設備已被其他帳號綁定", + "deviceAssociationFailed": "設備關聯失敗,請重試", + "scanTimeoutEnsureDeviceNearby": "掃描逾時,請確保設備在附近", + "networkError": "網路錯誤", + "authorizationFailedCheckCode": "授權失敗,請檢查授權碼是否正確", + "pairingFailedRetry": "配對失敗,請重試", + + // 配对控制器相关 + //'connectDevice': '连接设备', + 'pleaseEnableBluetooth': '請開啟藍牙', + 'deviceDisconnected': '設備已斷開', + 'readyToStartPairing': '準備開始配對', + 'checkingEnvironment': '正在檢查環境...', + 'ensureHeadsetOnAndPairingMode': '請確保耳機已開啟並進入配對模式', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', + 'establishingSecureConnection': '正在建立安全連接...', + 'needManualBindingAuthCode': '需要手動綁定授權碼...', + 'pairingSuccessful': '配對成功!', + 'enableBluetooth': '開啟藍牙', + 'grantPermissions': '授予權限', + 'retryAssociation': '重新關聯', + 'retryAuthorization': '重新授權', + 'pleaseGrantNecessaryPermissions': '請授予必要權限', + 'checkFailedRetry': '檢查失敗,請重試', + 'pleaseConnectDeepSoundDevice': '請連接 Voitrans 設備', + 'verificationFailedRetry': '驗證失敗,請重試', + 'invalidDeviceAddress': '設備地址無效', + 'bleDeviceAssociationFailed': 'BLE設備關聯失敗', + 'deviceAssociationFailedRetry': '設備關聯失敗,請重試', + 'bleConnectionTimeoutRetry': 'BLE連接逾時,請重試', + 'blePairingStartupFailed': 'BLE配對啟動失敗', + 'bleConnectionFailed': 'BLE連接失敗', + 'deviceAuthorizationFailedCheckCode': '設備授權失敗,請檢查授權碼', + + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': '需要手動開啟藍牙', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': '請按照以下步驟操作:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': '開啟藍牙:設定 → 藍牙 → 開啟', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': '連接設備:在"我的設備"中找到您的設備並點擊連接', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': '返回應用繼續配對流程', // 返回应用继续配对流程 + 'bluetoothGuideTip': '提示:也可以從控制中心長按藍牙圖標快速進入藍牙設定', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': '我知道了', // 我知道了 + + //用户反馈页 + "feedback": "使用者回饋", + 'feedbackInfo': '提供反饋或建議', + 'feedbackDescription': '請描述您遇到的問題或建議', + 'feedbackHint': '請輸入您的反饋內容...', + 'feedbackRequired': '請輸入反饋內容', + 'contactInfo': '聯絡方式', + 'contactHint': '電子郵件/手機號,方便我們聯絡您', + 'submit': '提交', + 'feedbackSubmitSuccess': '反饋提交成功,感謝您的反饋!', + 'feedbackSubmitFailed': '反饋提交失敗,請稍後重試', + + // OTA升级模块 + "upgradeExitConfirm": "當前正在升級,退出將中斷升級進程,確定要退出嗎?", + "deviceModel": "設備型號", + "unknownDevice": "未知設備", + "currentFirmwareVersion": "當前韌體版本", + "latestFirmwareVersion": "最新韌體版本", + "ota_newVersionFound": "發現新版本", + "latestVersion": "已是最新版本", + "gettingDeviceInfo": "正在取得設備資訊...", + "keepDeviceConnected": "請保持設備連接", + "connectionFailed": "連接失敗", + "retryConnection": "重試連接", + "ota_updateNow": "立即更新", + "otaVersionInfoFailed": '取得版本資訊失敗,請稍後重試', + "otaDeviceInfoUnavailable": '無法取得設備資訊,請檢查連接後重試', + "otaProductInfoUnavailable": '無法識別當前設備,請重新連接後重試', + "otaFirmwareVersionInvalid": '設備韌體版本異常,請重新連接後重試', + "keepConnectedDontClose": "請保持設備連接,不要關閉應用", + "doNotDisconnect": "請勿斷開連接", + "charging": "充電中", + "updateContent": "更新內容", + "removeEarbudsEnsureBattery": "取出雙耳機,並保證電量均為20%以上的狀態", + + // 音乐列表页面 + "noMusic": "暫無音樂", // 暂无音乐 + "noPlayingMusic": "暫無播放音樂", // 暂无播放音乐 + "unknownSong": "未知歌曲", // 未知歌曲 + "unknownArtist": "未知歌手", // 未知歌手 + "playAll": "播放全部", // 播放全部 + + // 语言名称 + "中文(简体)": "中文(簡體)", + "中文(繁体)": "中文(繁體)", + "中文(香港繁体)": "中文(香港繁體)", + "英语": "英語", + "日语": "日語", + "韩语": "韓語", + "法语": "法語", + "西班牙语": "西班牙語", + "葡萄牙语": "葡萄牙語", + "意大利语": "義大利語", + "德语": "德語", + "俄语": "俄語", + "波兰语": "波蘭語", + "荷兰语": "荷蘭語", + "瑞典语": "瑞典語", + "捷克语": "捷克語", + "现代希腊语": "現代希臘語", + "罗马尼亚语": "羅馬尼亞語", + "匈牙利语": "匈牙利語", + "乌克兰语": "烏克蘭語", + "丹麦语": "丹麥語", + "芬兰语": "芬蘭語", + "挪威语": "挪威語", + "克罗地亚语": "克羅埃西亞語", + "加泰隆语": "加泰羅尼亞語", + "阿拉伯语": "阿拉伯語", + "泰语": "泰語", + "越南语": "越南語", + "印尼语": "印尼語", + "印地语": "印地語", + "土耳其语": "土耳其語", + "马来语": "馬來語", + "孟加拉语": "孟加拉語", + "泰米尔语": "泰米爾語", + "泰卢固语": "泰盧固語", + "马拉提语": "馬拉提語", + "乌尔都语": "烏爾都語", + "波斯语": "波斯語", + "斯瓦希里语": "斯瓦希里語", + + // 时间相关 + "justNow": '剛剛', + "minutesAgo": '@minutes分鐘前', + "yesterday": '昨天', + // 时间扩展(图片翻译模块使用) + "daysAgo": '@days天前', + "hoursAgo": '@hours小時前', + + //补充 + "insufficientIntegral": '積分不足', + + //余额不足弹窗 + "insufficientBalanceDesc": "餘額不足,請前往對應充值界面進行充值", + "recharge": "去充值", + // 会员到期提示 + "aiMemberExpiredDesc": 'AI會員已到期,請前往會員充值續費', +}; diff --git a/lib/data/services/asr_service.dart b/lib/data/services/asr_service.dart index 35c263e34..8bb7892c6 100644 --- a/lib/data/services/asr_service.dart +++ b/lib/data/services/asr_service.dart @@ -112,6 +112,8 @@ class RecognitionEvent { /// 检测到的语言 final String detectedLanguage; + final String provider; + /// 角色 final String role; @@ -125,6 +127,7 @@ class RecognitionEvent { required this.type, this.text = '', this.detectedLanguage = '', + this.provider = '', this.role = '', this.audio, this.error = '', @@ -134,11 +137,13 @@ class RecognitionEvent { factory RecognitionEvent.finalResult({ required String text, String detectedLanguage = '', + String provider = '', }) { return RecognitionEvent( type: RecognitionEventType.finalResult, text: text, detectedLanguage: detectedLanguage, + provider: provider, ); } @@ -160,6 +165,6 @@ class RecognitionEvent { @override String toString() { - return 'RecognitionEvent{type: $type, text: $text, detectedLanguage: $detectedLanguage, error: $error}'; + return 'RecognitionEvent{type: $type, provider: $provider, text: $text, detectedLanguage: $detectedLanguage, error: $error}'; } } diff --git a/lib/data/services/ble_manager.dart b/lib/data/services/ble_manager.dart index 1d7df2f6e..c0afa44cf 100644 --- a/lib/data/services/ble_manager.dart +++ b/lib/data/services/ble_manager.dart @@ -875,6 +875,10 @@ class BleManager extends GetxService { } final navigationMode = AppConfig.env('APP_NAVIGATION_MODE') ?? 'external_auto'; + final xunfeiAppId = AppConfig.env('XUNFEI_ASR_APP_ID') ?? ''; + final xunfeiAccessKeyId = AppConfig.env('XUNFEI_ASR_ACCESS_KEY_ID') ?? ''; + final xunfeiAccessKeySecret = + AppConfig.env('XUNFEI_ASR_ACCESS_KEY_SECRET') ?? ''; // 从Flutter资源包中加载.mcp.json final jsonData = AppConfig.mcpConfig(); Logger.info('启动BLE服务,musicServiceType: ${musicServiceType}'); @@ -939,6 +943,9 @@ class BleManager extends GetxService { // 语音代理配置参数 'azureSpeechKey': azureSpeechKey, 'azureSpeechRegion': azureSpeechRegion, + 'xunfeiAppId': xunfeiAppId, + 'xunfeiAccessKeyId': xunfeiAccessKeyId, + 'xunfeiAccessKeySecret': xunfeiAccessKeySecret, 'openaiApiKey': openaiApiKey, 'openaiBaseUrl': openaiBaseUrl, 'openaiModel': openaiModel, @@ -958,8 +965,12 @@ class BleManager extends GetxService { "insufficientIntegralText": "insufficientIntegral".tr, }; - // 记录日志(不记录敏感信息) - Logger.info('启动BLE服务,配置参数键名: ${config}'); + Logger.info('启动BLE服务,配置参数键名: ${config.keys.toList()}'); + if (xunfeiAppId.isEmpty || + xunfeiAccessKeyId.isEmpty || + xunfeiAccessKeySecret.isEmpty) { + Logger.warning('XUNFEI_ASR_* 未完整配置,ASR 将不会切到讯飞'); + } if (azureSpeechKey.isEmpty || openaiApiKey.isEmpty) { Logger.warning('缺少必要的API密钥,请检查.env文件配置'); diff --git a/lib/data/services/speech_impl/azure_asr_service.dart b/lib/data/services/speech_impl/azure_asr_service.dart index 1eb84856b..e3d66e411 100644 --- a/lib/data/services/speech_impl/azure_asr_service.dart +++ b/lib/data/services/speech_impl/azure_asr_service.dart @@ -29,6 +29,9 @@ class AzureAsrService extends GetxService implements AsrService { bool _isInitialized = false; late final String _subscriptionKey; late final String _serviceRegion; + late final String _xunfeiAppId; + late final String _xunfeiAccessKeyId; + late final String _xunfeiAccessKeySecret; final List _defaultSupportedLanguages = ['zh-CN', 'en-US']; @override @@ -47,6 +50,9 @@ class AzureAsrService extends GetxService implements AsrService { String _latestDetectedLanguage = ''; String get latestDetectedLanguage => _latestDetectedLanguage; + String _latestAsrProvider = ''; + String get latestAsrProvider => _latestAsrProvider; + // 音频数据事件订阅 StreamSubscription? _audioDataEventSubscription; // 音频数据流控制器 @@ -69,6 +75,10 @@ class AzureAsrService extends GetxService implements AsrService { // final _env = _storage.read("ENV") as Map; _subscriptionKey = AppConfig.env('AZURE_SPEECH_KEY') ?? ''; _serviceRegion = AppConfig.env('AZURE_SPEECH_REGION') ?? ''; + _xunfeiAppId = AppConfig.env('XUNFEI_ASR_APP_ID') ?? ''; + _xunfeiAccessKeyId = AppConfig.env('XUNFEI_ASR_ACCESS_KEY_ID') ?? ''; + _xunfeiAccessKeySecret = + AppConfig.env('XUNFEI_ASR_ACCESS_KEY_SECRET') ?? ''; if (_subscriptionKey.isEmpty || _serviceRegion.isEmpty) { throw Exception( @@ -125,6 +135,9 @@ class AzureAsrService extends GetxService implements AsrService { 'supportedLanguages': languages, 'audioSourceType': _audioSourceType.toString().split('.').last, 'useEchoCancellation': useEchoCancellation, + 'xunfeiAppId': _xunfeiAppId, + 'xunfeiAccessKeyId': _xunfeiAccessKeyId, + 'xunfeiAccessKeySecret': _xunfeiAccessKeySecret, }); _setupEventChannel(); @@ -325,6 +338,17 @@ class AzureAsrService extends GetxService implements AsrService { final Map eventMap = event; final String eventType = eventMap['type'] as String? ?? ''; + final String provider = eventMap['provider'] as String? ?? ''; + if (provider.isNotEmpty) { + if (provider != _latestAsrProvider) { + _latestAsrProvider = provider; + Logger.info('ASR provider: $_latestAsrProvider'); + } + } else { + if (eventType == 'sessionStarted') { + Logger.warning('ASR provider missing in event'); + } + } // 添加日志帮助调试 @@ -339,6 +363,7 @@ class AzureAsrService extends GetxService implements AsrService { type: RecognitionEventType.finalResult, text: text, detectedLanguage: detectedLanguage, + provider: _latestAsrProvider, )); break; case 'result1': @@ -351,6 +376,7 @@ class AzureAsrService extends GetxService implements AsrService { type: RecognitionEventType.finalResult1, text: text, detectedLanguage: detectedLanguage, + provider: _latestAsrProvider, )); break; @@ -362,11 +388,13 @@ class AzureAsrService extends GetxService implements AsrService { type: RecognitionEventType.intermediateResult, text: text, detectedLanguage: detectedLanguage, + provider: _latestAsrProvider, )); break; case 'sessionStarted': _eventStreamController?.add(RecognitionEvent( type: RecognitionEventType.sessionStarted, + provider: _latestAsrProvider, )); break; @@ -374,6 +402,7 @@ class AzureAsrService extends GetxService implements AsrService { _isContinuousRecognitionActive = false; _eventStreamController?.add(RecognitionEvent( type: RecognitionEventType.sessionStopped, + provider: _latestAsrProvider, )); break; @@ -389,6 +418,7 @@ class AzureAsrService extends GetxService implements AsrService { _eventStreamController?.add(RecognitionEvent( type: RecognitionEventType.canceled, error: '$reason: $errorDetails', + provider: _latestAsrProvider, )); break; @@ -398,6 +428,7 @@ class AzureAsrService extends GetxService implements AsrService { _eventStreamController?.add(RecognitionEvent( type: RecognitionEventType.error, error: error, + provider: _latestAsrProvider, )); break; } diff --git a/lib/data/services/speech_impl/azure_ast_service.dart b/lib/data/services/speech_impl/azure_ast_service.dart index 97cb98335..a806adc6d 100644 --- a/lib/data/services/speech_impl/azure_ast_service.dart +++ b/lib/data/services/speech_impl/azure_ast_service.dart @@ -78,8 +78,6 @@ class AzureAstService extends GetxService implements AstService { final Map eventMap = event; final String eventType = eventMap['type'] as String? ?? ''; - // 添加日志帮助调试 - switch (eventType) { case 'result': final String text = eventMap['text'] as String? ?? ''; @@ -105,6 +103,7 @@ class AzureAstService extends GetxService implements AstService { )); break; case 'sessionStarted': + Logger.info('AST provider: azure'); _eventStreamController?.add(RecognitionEvent1( type: RecognitionEventType1.sessionStarted, )); @@ -309,6 +308,7 @@ class AzureAstService extends GetxService implements AstService { _isInitialized = result; _setupEventChannel(); Logger.info('Azure 语音识别服务初始化${result ? '成功' : '失败'}'); + if (result) Logger.info('AST provider: azure'); return result; } catch (e) { Logger.error('Azure 语音识别服务初始化失败: ${e.toString()}'); diff --git a/lib/data/services/speech_impl/xunfei_asr_service.dart b/lib/data/services/speech_impl/xunfei_asr_service.dart deleted file mode 100644 index 284e50519..000000000 --- a/lib/data/services/speech_impl/xunfei_asr_service.dart +++ /dev/null @@ -1,349 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; -import 'dart:typed_data'; -import 'package:crypto/crypto.dart'; -import 'package:record/record.dart'; -import 'package:web_socket_channel/web_socket_channel.dart'; -import '../../../core/utils/logger.dart'; -import 'package:get/get.dart'; -import '../asr_service.dart'; - -/// 讯飞 语音识别服务 -/// -class XunfeiAsrService extends GetxService implements AsrService { - final String baseUrl = 'wss://rtasr.xfyun.cn/v1/ws'; - final int _chunkSize = 1280; // 每次发送的数据大小 - - final String appId = '43d87d22'; - final String apiKey = '83f063755e8d342670002f50a4471d42'; - - AudioRecorder? recorder; - Timer? _timer; - - WebSocketChannel? _channel; - bool isConnected = false; //是否链接 - - bool _isInitialized = false; - - final List _defaultSupportedLanguages = ['zh-CN']; - String _languageStr = 'cn'; - - // 连续识别相关 - bool _isContinuousRecognitionActive = false; - StreamController? _eventStreamController; - - @override - List get supportedLanguages => _defaultSupportedLanguages; - - Uint8List _buff = Uint8List(0); //音频缓存区 - BytesBuilder _originaBytes = BytesBuilder(); //原始音频 - bool isRecording = false; - - @override - Future initialize({ - List? supportedLanguages, - }) async { - try { - final List languages = - supportedLanguages ?? _defaultSupportedLanguages; - - String languagetoStr = languages.first.split('-')[1].toLowerCase(); - _languageStr = languagetoStr; - - _isInitialized = true; - Logger.info('Azure 语音识别服务初始化成功'); - return true; - } catch (e) { - Logger.error('Azure 语音识别服务初始化失败: ${e.toString()}'); - _isInitialized = false; - rethrow; - } - } - - @override - Future recognizeOnce() async { - if (!_isInitialized) { - await initialize(); - } - - try { - throw Exception('无效的识别结果格式'); - } catch (e) { - Logger.error('语音识别失败: ${e.toString()}'); - return RecognitionEvent.error(e.toString()); - } - } - - // @override - // Future> startContinuousRecognition( - // bool audioSourceType) async { - // if (!_isInitialized) { - // await initialize(); - // } - - // try { - // _eventStreamController = StreamController.broadcast(); - - // await recorder?.dispose(); - // recorder = AudioRecorder(); - // Stream? stream = await recorder?.startStream( - // const RecordConfig( - // sampleRate: 16000, - // encoder: AudioEncoder.pcm16bits, - // numChannels: 1, - // ), - // ); - // isRecording = true; - // stream?.listen((data) { - // if (isRecording) { - // _buff = _appendToBuffer(data); - // _originaBytes.add(data); - // } - // }); - // await _tryConnecting(); - // _timer = Timer.periodic(const Duration(milliseconds: 40), (timer) async { - // //每40毫秒读取一次数据 - // var frame = _getAudioData(); - // if (frame.isNotEmpty) { - // _channel?.sink.add(frame); - // } - // }); - - // _isContinuousRecognitionActive = true; - // return _eventStreamController!.stream; - // } catch (e) { - // Logger.error('开始连续语音识别失败: ${e.toString()}'); - // rethrow; - // } - // } - - //写入音频数据到缓存区中 - Uint8List _appendToBuffer(Uint8List newData) { - var newBuffer = Uint8List(_buff.length + newData.length); - newBuffer.setAll(0, _buff); - newBuffer.setAll(_buff.length, newData); - return newBuffer; - } - - //读取缓存区中一帧数据 - Uint8List _getAudioData() { - if (_buff.length >= _chunkSize) { - // 从缓冲区中读取1280字节的数据 - var data = _buff.sublist(0, _chunkSize); - // 移除已读取的数据 - _buff = _buff.sublist(_chunkSize); - return data; - } else { - return _buff; - } - } - - //尝试连接 - Future _tryConnecting() async { - try { - final url = _geturl(); - _channel = WebSocketChannel.connect(Uri.parse(url)); - _channel?.stream.timeout(const Duration(seconds: 10)); //设置超时时间 - await _channel?.ready; - isConnected = true; - _channel?.stream.listen( - (message) { - _handle(message); - }, - onError: (error) { - isConnected = false; - Logger.error('连接失败: ${error.toString()}'); - }, - onDone: () { - isConnected = false; - Logger.error('WebSocket 连接已关闭!'); - }, - cancelOnError: true, - ); - } catch (e) { - Logger.error("初始化异常----------------${e.toString()}"); - } - } - - //处理数据 - void _handle(data) { - try { - final result = jsonDecode(data); - if (result['code'] == "0" && result['data'] != "") { - final data = jsonDecode(result['data']); - String msg = ""; - String role = ''; - - List rtList = data['cn']['st']['rt']; - for (var rt in rtList) { - for (var ws in rt['ws']) { - for (var ws in ws['cw']) { - msg += ws['w']; - if (ws['rl'] != "0") { - role = ws['rl']; - } - } - } - } - Logger.info( - "识别到的内容 type:${data['cn']['st']['type']} msg:$msg rl:$role"); - if (msg.isNotEmpty) { - if (data['cn']['st']['type'] == "0") { - _eventStreamController?.add(RecognitionEvent( - type: RecognitionEventType.finalResult, - text: msg, - role: role, - audio: _originaBytes.toBytes(), - )); - _originaBytes.clear(); - } else { - _eventStreamController?.add(RecognitionEvent( - type: RecognitionEventType.intermediateResult, - text: msg, - role: role, - )); - } - } - } - } catch (e) { - Logger.error("接受消息异常 ${e.toString()}"); - } - } - - ///获取链接地址 - String _geturl() { - // 生成时间戳 - String ts = (DateTime.now().millisecondsSinceEpoch ~/ 1000).toString(); - // 计算 baseString - String baseString = md5.convert(utf8.encode(appId + ts)).toString(); - // 计算 signa - var hmacSha1 = Hmac(sha1, utf8.encode(apiKey)); - var signa = hmacSha1.convert(utf8.encode(baseString)); - String signaBase64 = base64Encode(signa.bytes); - String url = ""; - // 构建 WebSocket URL - url = - '$baseUrl?appid=$appId&ts=$ts&lang=$_languageStr&roleType=2&signa=${Uri.encodeComponent(signaBase64)}'; - return url; - } - - @override - Future stopContinuousRecognition() async { - try { - await recorder?.stop(); - isRecording = false; - _timer?.cancel(); - _buff = Uint8List(0); - _originaBytes = BytesBuilder(); - if (isConnected) { - _channel?.sink.add(utf8.encode('{"end": true}')); //结束 - } - - _isContinuousRecognitionActive = false; - return true; - } catch (e) { - Logger.error('停止连续语音识别失败: ${e.toString()}'); - rethrow; - } - } - - @override - bool isContinuousRecognitionActive() { - return _isContinuousRecognitionActive; - } - - @override - Future dispose() async { - try { - await stopContinuousRecognition(); - recorder?.dispose(); - _channel?.sink.close(); - - _eventStreamController?.close(); - _eventStreamController = null; - - _isInitialized = false; - - Logger.info('Azure 语音识别资源已释放'); - } catch (e) { - Logger.error('释放语音识别资源失败: ${e.toString()}'); - _isInitialized = false; - } - } - - @override - Future enableRecord(bool audioSourceType, String filePath, - {bool acceptAudioData = false}) { - // TODO: implement enableRecord - throw UnimplementedError(); - } - - @override - Future stopRecord(bool isSave) { - // TODO: implement stopRecord - throw UnimplementedError(); - } - - @override - Future pauseRecord() { - // TODO: implement pauseRecord - throw UnimplementedError(); - } - - @override - Future moveFile(String sourcePath, String destPath) { - // TODO: implement moveFile - throw UnimplementedError(); - } - - @override - Future renameFile(String filePath, String newName) { - // TODO: implement renameFile - throw UnimplementedError(); - } - - @override - Future disableBluetoothAudio() { - // TODO: implement disableBluetoothAudio - throw UnimplementedError(); - } - - @override - Future restoreOriginalAudioState() { - // TODO: implement restoreOriginalAudioState - throw UnimplementedError(); - } - - @override - Future> recognizeCallback() { - // TODO: implement recognizeCallback - throw UnimplementedError(); - } - - @override - Future startContinuousRecognition( - bool audioSourceType, { - bool isRemoveFirstPunctuation = true, - }) { - // TODO: implement startContinuousRecognition - throw UnimplementedError(); - } - - @override - Future setAudioConfig({int sampleRate = 16000, int channels = 1}) { - // TODO: implement setAudioConfig - throw UnimplementedError(); - } - - @override - Future resumeRecord() { - // TODO: implement resumeRecord - throw UnimplementedError(); - } - - @override - Stream? getAudioDataStream() { - // TODO: implement getAudioDataStream - throw UnimplementedError(); - } -} diff --git a/lib/modules/FTFTranslation/README.md b/lib/modules/FTFTranslation/README.md deleted file mode 100644 index c41004a52..000000000 --- a/lib/modules/FTFTranslation/README.md +++ /dev/null @@ -1,160 +0,0 @@ -# Realtime 实时语音聊天模块 - -## ⚠️ 当前状态 - -**此模块为功能预览版本,提供完整的实时语音对话功能。** - -通过原生插件实现语音识别、AI对话和语音合成的完整语音交互体验。 - -## 概述 - -Realtime模块实现了类似ChatGPT app的实时语音对话功能,当前版本提供: - -- ✅ **完整语音交互** - 实时语音识别、AI对话和语音合成 -- ✅ **状态管理** - 聆听、思考、回答状态的可视化 -- ✅ **动画效果** - 基于Shader的流动云效果,支持音频振幅驱动 -- ✅ **字幕显示** - 可选择开启/关闭的字幕模式 -- ✅ **智能UI** - 根据连接状态自动调整按钮可用性 - -## 界面设计 - -### 布局结构 -- **顶部状态区域** - 显示当前状态和字幕模式切换按钮 -- **中间可视化区域** - 圆形Shader动画,根据音频振幅呈现呼吸效果 -- **底部控制区域** - 主控制按钮和状态指示器 - -### 状态指示 -- 🔵 **聆听状态** - 蓝色动画,接收用户语音输入 -- 🟠 **思考状态** - 橙色动画,AI处理中 -- 🟢 **回答状态** - 绿色动画,AI语音输出 -- ⚪ **空闲状态** - 灰色静态,等待交互 - -### 字幕模式 -- **默认关闭** - 初始状态下不显示任何字幕内容 -- **手动切换** - 通过右上角按钮手动开启/关闭字幕 -- **完整隐藏** - 关闭时字幕区域完全不显示,不占用界面空间 -- **智能布局** - 开启时圆形动画自动上移,字幕区域占据下半屏 - -### 交互控制 -- **录音按钮** - 仅在成功连接AI服务器且开始录音后可用 -- **连接状态** - 未连接时录音按钮显示不可用状态 -- **状态反馈** - 按钮颜色和可点击性根据连接状态动态调整 - -## 使用方法 - -### 路由导航 - -```dart -// 跳转到实时语音对话页面 -Get.toNamed(Routes.realtime); -``` - -### 交互流程 - -1. **自动连接** - 页面加载后自动尝试连接AI服务器 -2. **等待连接** - 录音按钮在连接成功前保持不可用状态 -3. **开始录音** - 连接成功后自动开始录音,录音按钮变为可用 -4. **语音对话** - 用户说话 → AI处理 → 语音回复 -5. **字幕控制** - 可随时通过右上角按钮切换字幕显示 - -## 技术架构 - -### 控制器 (RealtimeController) -- **连接管理**: WebSocket连接到AI服务器 -- **状态同步**: `isConnected`, `isListening`, `isSpeaking` -- **字幕控制**: `isSubtitleMode` 默认为false,用户手动控制 -- **消息管理**: 智能去重,避免流式响应重复显示 -- **音频处理**: 原生层计算RMS值,Flutter层接收并控制动画 - -### 视图组件 -- **RealtimeView** - 主视图容器,响应式布局 -- **ShaderMicFlow** - 基于GLSL Shader的流动云动画组件 -- **AutoScrollList** - 自动滚动的字幕列表 - -### 原生集成 -- **RealtimeService** - 原生音频处理和WebSocket通信 -- **音频格式** - 16kHz, 1声道, 16位PCM -- **实时传输** - 低延迟音频流处理 -- **RMS计算** - 原生层实时计算音频振幅 - -## 默认行为 - -### 字幕模式 -- **初始状态**: 关闭 (`isSubtitleMode.value = false`) -- **显示逻辑**: 仅在用户手动开启时显示字幕内容 -- **空间占用**: 关闭时字幕区域高度为0,不影响其他UI元素 -- **切换效果**: 平滑动画过渡,圆形动画位置和大小同步调整 - -### 按钮状态 -- **录音按钮**: 默认不可用,连接成功且开始录音后才可点击 -- **状态指示**: 通过颜色和图标变化反映当前可用性 -- **交互反馈**: 不可用时点击无效果,避免误操作 - -## 开发计划 - -### 已完成功能 ✅ -- [x] 完整语音交互流程 -- [x] 实时WebSocket通信 -- [x] Shader流动云动画 -- [x] RMS音频振幅计算 -- [x] 智能UI状态管理 -- [x] 字幕模式控制 -- [x] 消息去重优化 - -### 计划增强 ⏳ -- [ ] 多语言语音识别 -- [ ] 语音中断检测 -- [ ] 音频质量自适应 -- [ ] 离线降级处理 -- [ ] 语音情感识别 - -## 注意事项 - -1. **网络依赖** - 需要连接到AI服务器 (ws://192.168.1.11:8000/ws) -2. **麦克风权限** - 需要获取麦克风使用权限 -3. **音频会话** - 自动管理音频会话,支持蓝牙设备 -4. **资源管理** - 页面关闭时自动清理音频资源和网络连接 - -## 自定义配置 - -### 修改服务器地址 - -```dart -// 在RealtimeController中修改连接URL -await _realtimeService.initialize( - serverUrl: 'ws://your-server:port/ws', - // ... 其他参数 -); -``` - -### 调整UI布局 - -```dart -// 修改字幕模式下圆形动画位置 -alignment: controller.isSubtitleMode.value - ? const Alignment(0, -0.9) // 调整Y轴位置 - : const Alignment(0, -0.25), -``` - -### 音频参数调优 - -```dart -// 在初始化时调整音频参数 -sampleRate: 16000, // 采样率 -channels: 1, // 声道数 -bitsPerSample: 16, // 位深度 -``` - -## 技术栈 - -- **Flutter SDK**: >= 3.0.0 -- **GetX**: >= 4.6.5 (状态管理) -- **Flutter Shaders**: >= 0.0.6 (Shader动画) -- **原生插件**: Realtime服务 (音频处理) -- **WebSocket**: 实时通信协议 - -## 版本信息 - -- **当前版本**: v1.0.0 (Production) -- **最后更新**: 2024年 -- **状态**: 完整功能实现 \ No newline at end of file diff --git a/lib/modules/FTFTranslation/bindings/FTFTranslation_binding.dart b/lib/modules/FTFTranslation/bindings/FTFTranslation_binding.dart deleted file mode 100644 index 85e44791c..000000000 --- a/lib/modules/FTFTranslation/bindings/FTFTranslation_binding.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:get/get.dart'; -import '../controllers/FTFTranslation_controller.dart'; - -class FTFTranslationBinding extends Bindings { - @override - void dependencies() { - // 注册实时语音聊天控制器 - Get.lazyPut(() => FTFTranslationController()); - } -} diff --git a/lib/modules/FTFTranslation/controllers/FTFTranslation_controller.dart b/lib/modules/FTFTranslation/controllers/FTFTranslation_controller.dart deleted file mode 100644 index 9e55b7d18..000000000 --- a/lib/modules/FTFTranslation/controllers/FTFTranslation_controller.dart +++ /dev/null @@ -1,246 +0,0 @@ -import 'dart:async'; -import 'dart:typed_data'; - -import 'package:get/get.dart'; -import '../../../core/utils/logger.dart'; -import '../../../data/services/asr_service.dart'; -import '../../../data/services/speech_impl/xunfei_asr_service.dart'; -import '../../../data/services/tts_service.dart'; -import '../../../data/services/language_manager.dart'; -import '../../../data/services/volcano_translation_service.dart'; - -class FTFTranslationController extends GetxController - with GetSingleTickerProviderStateMixin { - final messages = [].obs; - final isChineseInput = true.obs; - final leftLanguage = '中文'.obs; - final rightLanguage = 'English'.obs; - final isLeftInput = true.obs; - - final supportedLanguages = const [ - '中文', - 'English', - '日本語', - '한국어', - 'Español', - ]; - - late final AsrService _asrService; - - StreamSubscription? _recognitionSubscription; - - RxString intermediateContent = ''.obs; - RxString finalContent = ''.obs; - BytesBuilder _originaBytes = BytesBuilder(); //原始音频 - - final VolcanoTranslationService _translationService = - Get.find(); - final LanguageManager _languageManager = Get.find(); - // 当前使用的TTS服务 - late TtsService _ttsService; - final isTranslating = false.obs; - final sourceLanguageCode = 'zh-CN'.obs; - final targetLanguageCode = 'en-US'.obs; - final isTtsEnabled = true.obs; - var _currsessionid = ''; - @override - void onInit() { - super.onInit(); - Get.put(XunfeiAsrService()); - final TtsService _ttsService = Get.find(); - _asrService = Get.find(); - _InfoRecorder(); - } - - @override - void onClose() { - _asrService.dispose(); - _recognitionSubscription?.cancel(); - super.onClose(); - } - -//开始录音 - Future _InfoRecorder() async { - final recognitionStream = await _asrService.recognizeCallback(); - _recognitionSubscription = recognitionStream.listen( - _handleRecognitionEvent, - ); - } - - //开始录音 - Future _startRecorder() async { - await _asrService.startContinuousRecognition(false); - } - - //结束录音 - Future _stopRecorder() async { - await _asrService.stopContinuousRecognition(); - } - - // 处理语音识别事件 - void _handleRecognitionEvent(RecognitionEvent event) { - switch (event.type) { - case RecognitionEventType.intermediateResult: - intermediateContent.value = event.text; - handleFinalResult(event.text); - break; - case RecognitionEventType.finalResult: - finalContent.value += _spliceText(event); - intermediateContent.value = ''; - _originaBytes.add(event.audio!); - handleIntermediateResult(event.text); - break; - default: - // 不做任何处理 - break; - } - } - - // 翻译文本 - Future translateText(String sourceText, - {bool isFinal = false}) async { - if (sourceText.isEmpty) return null; - - isTranslating.value = true; - String? translationResult; - - try { - // 根据检测到的语言确定源语言和目标语言 - final bool shouldSwap = - intermediateContent.value == sourceLanguageCode.value; - final detectedSourceLanguageCode = - shouldSwap ? sourceLanguageCode.value : targetLanguageCode.value; - final detectedTargetLanguageCode = - shouldSwap ? targetLanguageCode.value : sourceLanguageCode.value; - - // 调用翻译服务 - translationResult = await _translationService.translateText( - text: sourceText, - sourceLanguageCode: detectedSourceLanguageCode, - targetLanguageCode: detectedTargetLanguageCode, - ); - - if (translationResult != null) { - // 查找匹配的项目 - 优先使用timestamp查找 - int index = -1; - - // 播放TTS - 只在最终结果时播放 - if (isTtsEnabled.value && isFinal) { - // Logger.info('播放翻译文本: ${translationResult}'); - await playTranslatedText(translationResult); - } - } - } catch (e) { - Logger.error('翻译失败: ${e.toString()}'); - } finally { - isTranslating.value = false; - } - - return translationResult; - } - - // 处理中间识别结果 - void handleIntermediateResult(String text) { - if (text.isEmpty) return; - - translateText(text, isFinal: false); - } - - // 处理最终识别结果 - Future handleFinalResult(String text) async { - if (text.isEmpty) return; - - // 使用项目的时间戳进行翻译 - translateText(text, isFinal: true); - } - - // 播放翻译文本 - Future playTranslatedText(String text) async { - if (text.isEmpty) return; - - try { - final bool shouldSwap = - intermediateContent.value == targetLanguageCode.value; - final detectedTargetLanguageCode = - shouldSwap ? sourceLanguageCode.value : targetLanguageCode.value; - final voiceName = _languageManager - .getTtsVoiceNameByAsrCode(detectedTargetLanguageCode) ?? - 'en-US-AriaNeural'; - - await _ttsService.setVoice(voiceName); - await _ttsService.speakOnce(_currsessionid, text); - } catch (e) { - Logger.error('播放翻译失败: ${e.toString()}'); - } - } - - String _spliceText(RecognitionEvent event) { - String eventText = event.text; - String text = ''; - if (finalContent.value.isNotEmpty) { - if (event.role != '') { - final punctuations = { - ',', - '。', - '!', - '?', - ';', - ':', - ',', - '.', - ':', - ';', - '!', - '?' - }; - final firstChar = eventText[0]; - if (punctuations.contains(firstChar)) { - text += '$firstChar\n'; - eventText = eventText.substring(1); - } else { - text += '\n'; - } - text += '说话人${event.role}:'; - } - } else { - text += '说话人${event.role}:'; - } - text += eventText; - return text; - } - - void addMessage(String text) { - final fromLang = - isLeftInput.value ? leftLanguage.value : rightLanguage.value; - final toLang = isLeftInput.value ? rightLanguage.value : leftLanguage.value; - - messages.add( - FTFTranslationMessage( - original: text, - translated: '[$fromLang → $toLang] $text (翻译模拟)', - isChineseSpeaker: isLeftInput.value, - ), - ); - } - - void swapLanguages() { - final temp = leftLanguage.value; - leftLanguage.value = rightLanguage.value; - rightLanguage.value = temp; - isLeftInput.value = !isLeftInput.value; - } - - void toggleInputSide(bool isLeft) => isLeftInput.value = isLeft; -} - -class FTFTranslationMessage { - final String original; - final String translated; - final bool isChineseSpeaker; - - FTFTranslationMessage({ - required this.original, - required this.translated, - required this.isChineseSpeaker, - }); -} diff --git a/lib/modules/FTFTranslation/views/FTFTranslation_view.dart b/lib/modules/FTFTranslation/views/FTFTranslation_view.dart deleted file mode 100644 index 84d8c1c6a..000000000 --- a/lib/modules/FTFTranslation/views/FTFTranslation_view.dart +++ /dev/null @@ -1,212 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import '../controllers/FTFTranslation_controller.dart'; - -class FTFTranslationView extends GetView { - const FTFTranslationView({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - final TextEditingController inputController = TextEditingController(); - - return Scaffold( - backgroundColor: const Color(0xFF0E0F12), - appBar: AppBar( - backgroundColor: Colors.black, - title: const Text('面对面翻译'), - centerTitle: true, - ), - body: Column( - children: [ - Expanded( - child: Obx(() => ListView.builder( - padding: const EdgeInsets.all(16), - itemCount: controller.messages.length, - itemBuilder: (context, index) { - final msg = controller.messages[index]; - final isChinese = msg.isChineseSpeaker; - return Align( - alignment: isChinese - ? Alignment.centerLeft - : Alignment.centerRight, - child: Container( - margin: const EdgeInsets.symmetric(vertical: 6), - padding: const EdgeInsets.all(12), - decoration: BoxDecoration( - color: isChinese ? Colors.blue : Colors.grey[800], - borderRadius: BorderRadius.circular(12), - ), - constraints: const BoxConstraints(maxWidth: 300), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - msg.original, - style: const TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 4), - Text( - msg.translated, - style: TextStyle( - color: Colors.white.withOpacity(0.9), - fontSize: 14, - ), - ), - ], - ), - ), - ); - }, - )), - ), - _buildBottomInput(inputController), - ], - ), - ); - } - - Widget _buildBottomInput(TextEditingController inputController) { - return Obx(() { - final isLeftInput = controller.isLeftInput.value; - final inputLang = isLeftInput - ? controller.leftLanguage.value - : controller.rightLanguage.value; - - return Container( - color: Colors.black, - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), - child: Column( - children: [ - Row( - children: [ - Expanded( - child: TextField( - controller: inputController, - style: const TextStyle(color: Colors.white), - decoration: InputDecoration( - filled: true, - fillColor: Colors.grey[900], - hintText: '请输入 $inputLang 内容', - hintStyle: const TextStyle(color: Colors.grey), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - borderSide: BorderSide.none, - ), - contentPadding: - const EdgeInsets.symmetric(horizontal: 12), - ), - ), - ), - IconButton( - onPressed: () { - final text = inputController.text.trim(); - if (text.isNotEmpty) { - controller.addMessage(text); - inputController.clear(); - } - }, - icon: const Icon(Icons.send, color: Colors.white), - ), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - Expanded( - child: _buildLanguageDropdown( - selected: controller.leftLanguage.value, - items: controller.supportedLanguages, - onChanged: (value) { - if (value != null) controller.leftLanguage.value = value; - }, - icon: Icons.headphones, - isSelected: isLeftInput, - label: '左方语言', - onTapInputSide: () => controller.toggleInputSide(true), - ), - ), - const SizedBox(width: 12), - GestureDetector( - onTap: controller.swapLanguages, - child: Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.white10, - shape: BoxShape.circle, - ), - child: - const Icon(Icons.compare_arrows, color: Colors.white), - ), - ), - const SizedBox(width: 12), - Expanded( - child: _buildLanguageDropdown( - selected: controller.rightLanguage.value, - items: controller.supportedLanguages, - onChanged: (value) { - if (value != null) controller.rightLanguage.value = value; - }, - icon: Icons.smartphone, - isSelected: !isLeftInput, - label: '右方语言', - onTapInputSide: () => controller.toggleInputSide(false), - ), - ), - ], - ), - ], - ), - ); - }); - } - - Widget _buildLanguageDropdown({ - required String selected, - required List items, - required void Function(String?) onChanged, - required IconData icon, - required bool isSelected, - required String label, - required VoidCallback onTapInputSide, - }) { - return GestureDetector( - onTap: onTapInputSide, - child: Container( - padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 12), - decoration: BoxDecoration( - border: Border.all( - color: isSelected ? Colors.white : Colors.grey, - ), - borderRadius: BorderRadius.circular(24), - color: isSelected ? Colors.white10 : Colors.transparent, - ), - child: Row( - children: [ - Icon(icon, color: Colors.white), - const SizedBox(width: 8), - Expanded( - child: DropdownButton( - dropdownColor: Colors.grey[900], - value: selected, - isExpanded: true, - underline: const SizedBox(), - iconEnabledColor: Colors.white, - style: const TextStyle(color: Colors.white), - items: items.map((lang) { - return DropdownMenuItem( - value: lang, - child: Text(lang), - ); - }).toList(), - onChanged: onChanged, - ), - ), - ], - ), - ), - ); - } -} diff --git a/lib/modules/agent/controllers/agent_controller.dart b/lib/modules/agent/controllers/agent_controller.dart index 2de128daf..f4af0edf5 100644 --- a/lib/modules/agent/controllers/agent_controller.dart +++ b/lib/modules/agent/controllers/agent_controller.dart @@ -569,6 +569,8 @@ class AgentController extends GetxController with WidgetsBindingObserver { // 订阅代理服务事件 void _subscribeToEvents() { _eventSubscription = AgentService.events.listen((event) { + final String asrProvider = (event.data['provider'] ?? '').toString(); + if (asrProvider.isNotEmpty) Logger.i(TAG, 'ASR provider: $asrProvider'); switch (event.type) { case AgentServiceEventType.recognitionStarted: isListening.value = true; diff --git a/lib/modules/agent/views/agent_view.dart b/lib/modules/agent/views/agent_view.dart index cfe91e808..03b237d94 100644 --- a/lib/modules/agent/views/agent_view.dart +++ b/lib/modules/agent/views/agent_view.dart @@ -120,27 +120,35 @@ class _AgentViewState extends State with WidgetsBindingObserver { ), ), SizedBox(width: 4.w), - Obx(() { - final vipexptime = controller.vipExpiryTime.value; - DateTime? expiry; - if (vipexptime > 0) { - expiry = vipexptime > 1000000000000 - ? DateTime.fromMillisecondsSinceEpoch(vipexptime) - : DateTime.fromMillisecondsSinceEpoch( - vipexptime * 1000); - } - final text = expiry != null - ? '${'expiryLabel'.tr}${DateFormat('yyyy-MM-dd').format(expiry)}' - : 'notActivated'.tr; - return Text( - text, - style: TextStyle( - fontSize: 12.sp, - color: Colors.green, - fontWeight: FontWeight.w500, - ), - ); - }), + Text( + 'online'.tr, + style: TextStyle( + fontSize: 12.sp, + color: Colors.green, + fontWeight: FontWeight.w500, + ), + ), + // Obx(() { + // final vipexptime = controller.vipExpiryTime.value; + // DateTime? expiry; + // if (vipexptime > 0) { + // expiry = vipexptime > 1000000000000 + // ? DateTime.fromMillisecondsSinceEpoch(vipexptime) + // : DateTime.fromMillisecondsSinceEpoch( + // vipexptime * 1000); + // } + // final text = expiry != null + // ? '${'expiryLabel'.tr}${DateFormat('yyyy-MM-dd').format(expiry)}' + // : 'notActivated'.tr; + // return Text( + // text, + // style: TextStyle( + // fontSize: 12.sp, + // color: Colors.green, + // fontWeight: FontWeight.w500, + // ), + // ); + // }), ], ), ], diff --git a/lib/modules/ota_upgrade/controllers/ota_core_contropller.dart b/lib/modules/ota_upgrade/controllers/ota_core_contropller.dart index 146645d90..71936672e 100644 --- a/lib/modules/ota_upgrade/controllers/ota_core_contropller.dart +++ b/lib/modules/ota_upgrade/controllers/ota_core_contropller.dart @@ -6,6 +6,27 @@ import '../../../data/services/bluetooth_manager.dart'; // 添加蓝牙管理器 import '../../../data/models/appconfig.dart'; import '../../../data/models/appconfig_model.dart'; +enum OtaCoreErrorType { + deviceInfoUnavailable, + productInfoUnavailable, + firmwareVersionFormatInvalid, +} + +class OtaCoreException implements Exception { + final OtaCoreErrorType type; + final Map params; + final String debugMessage; + + OtaCoreException({ + required this.type, + this.params = const {}, + this.debugMessage = '', + }); + + @override + String toString() => debugMessage; +} + /// OTA核心服务 /// 整合设备检查、版本管理和状态管理功能 class OtaCoreService { @@ -450,7 +471,10 @@ class OtaCoreService { if (deviceInfo == null || deviceInfo.firmwareVersion.isEmpty || deviceInfo.firmwareProductId.isEmpty) { - throw "获取设备信息失败,请检查连接"; + throw OtaCoreException( + type: OtaCoreErrorType.deviceInfoUnavailable, + debugMessage: 'deviceInfoUnavailable', //获取设备信息失败,请检查连接 + ); } String deviceName = getDeviceName(); @@ -461,7 +485,11 @@ class OtaCoreService { // 如果根据设备名称找不到产品,尝试使用默认产品名称 product = AppConfig.getproduct("DeapSound"); if (product == null) { - throw "无法获取产品信息,设备名称: $deviceName"; + throw OtaCoreException( + type: OtaCoreErrorType.productInfoUnavailable, + params: {'deviceName': deviceName}, + debugMessage: 'productInfoUnavailable: $deviceName', //根据设备名称未找到产品信息 + ); } } @@ -471,7 +499,12 @@ class OtaCoreService { // 单端耳机:固件版本只有三位数(如:1.2.3) final firmwareParts = deviceInfo.firmwareVersion.split('.'); if (firmwareParts.length < 3) { - throw "单端耳机固件版本格式错误:${deviceInfo.firmwareVersion},应为三位数格式(如:1.2.3)"; + throw OtaCoreException( + type: OtaCoreErrorType.firmwareVersionFormatInvalid, + params: {'firmwareVersion': deviceInfo.firmwareVersion}, + debugMessage: + 'single firmwareVersion format invalid: ${deviceInfo.firmwareVersion}', //单端耳机固件版本格式无效 + ); } currentVersion = firmwareParts.sublist(0, 3).join('.'); Logger().d("单端耳机版本: $currentVersion"); @@ -480,7 +513,12 @@ class OtaCoreService { // 双端耳机:固件版本有六位数(如:1.2.3.1.2.3) final firmwareParts = deviceInfo.firmwareVersion.split('.'); if (firmwareParts.length < 6) { - throw "双端耳机固件版本格式错误:${deviceInfo.firmwareVersion},应为六位数格式(如:1.2.3.1.2.3)"; + throw OtaCoreException( + type: OtaCoreErrorType.firmwareVersionFormatInvalid, + params: {'firmwareVersion': deviceInfo.firmwareVersion}, + debugMessage: + 'double firmwareVersion length invalid: ${deviceInfo.firmwareVersion}', //双端耳机固件版本格式无效 + ); } final firstPart = firmwareParts.sublist(0, 3).join('.'); final secondPart = firmwareParts.sublist(3, 6).join('.'); @@ -488,7 +526,12 @@ class OtaCoreService { Logger().d("双端耳机版本 - firstPart: $firstPart, secondPart: $secondPart"); if (firstPart != secondPart) { - throw "双端耳机固件版本格式错误:${deviceInfo.firmwareVersion},前三位和后三位应该相同"; + throw OtaCoreException( + type: OtaCoreErrorType.firmwareVersionFormatInvalid, + params: {'firmwareVersion': deviceInfo.firmwareVersion}, + debugMessage: + 'double firmwareVersion mismatch: ${deviceInfo.firmwareVersion}', //双端耳机固件版本不一致,前三位和后三位不一样 + ); } currentVersion = firstPart; } else { diff --git a/lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart b/lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart index dae6049dd..4fd5b841d 100644 --- a/lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart +++ b/lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart @@ -112,7 +112,7 @@ class OtaUpgradeController extends GetxController { latestVersion.value, ); } catch (e) { - _handleError('获取版本信息失败', e.toString()); + _handleError('error'.tr, _getUserFriendlyErrorMessage(e)); } finally { isFetchingDeviceInfo.value = false; } @@ -314,4 +314,18 @@ class OtaUpgradeController extends GetxController { errorMessage.value = message; _uiService.showErrorSnackbar(title, message); } + + String _getUserFriendlyErrorMessage(Object error) { + if (error is OtaCoreException) { + switch (error.type) { + case OtaCoreErrorType.deviceInfoUnavailable: + return 'otaDeviceInfoUnavailable'.tr; + case OtaCoreErrorType.productInfoUnavailable: + return 'otaProductInfoUnavailable'.tr; + case OtaCoreErrorType.firmwareVersionFormatInvalid: + return 'otaFirmwareVersionInvalid'.tr; + } + } + return 'otaVersionInfoFailed'.tr; + } } diff --git a/lib/modules/settings/controllers/settings_controller.dart b/lib/modules/settings/controllers/settings_controller.dart index 4eff2d73e..3a5860cd8 100644 --- a/lib/modules/settings/controllers/settings_controller.dart +++ b/lib/modules/settings/controllers/settings_controller.dart @@ -27,7 +27,9 @@ class SettingsController extends GetxController { LanguageModel(name: 'english', alias: 'English', value: 'en_US'), // 英语.tr LanguageModel(name: 'chinese', alias: '中文', value: 'zh_CN'), // 中文.tr LanguageModel( - name: 'traditionalChinese', alias: '繁體中文', value: 'zh_HK'), // 添加繁体中文 + name: 'traditionalChinese', alias: '繁體中文', value: 'zh_TW'), // 添加繁体中文 + LanguageModel( + name: 'traditionalChineseHK', alias: '繁體中文(HK)', value: 'zh_HK'), // 添加香港繁体中文 LanguageModel( name: 'spanish', alias: 'Español', value: 'es_ES'), // 添加西班牙语选项 LanguageModel( diff --git a/lib/modules/settings/views/settings_view.dart b/lib/modules/settings/views/settings_view.dart index d0fb47299..cda1f4f10 100644 --- a/lib/modules/settings/views/settings_view.dart +++ b/lib/modules/settings/views/settings_view.dart @@ -634,28 +634,6 @@ class SettingsView extends GetView { // color: isDarkMode // ? Colors.white.withOpacity(0.1) // : Colors.grey[200]), - // 面对面翻译测试 - // _buildSimpleNavigationSetting( - // title: '面对面翻译测试', - // subtitle: '测试面对面翻译', - // icon: Icons.bluetooth_searching, - // iconBgColor: isDarkMode - // ? Colors.green[900]!.withOpacity(0.3) - // : Colors.green[100]!, - // iconColor: - // isDarkMode ? Colors.green[300]! : Colors.green[600]!, - // titleColor: isDarkMode ? Colors.white : null, - // subtitleColor: isDarkMode ? Colors.white70 : null, - // onTap: () { - // Get.toNamed(Routes.ftftranslation); - // }, - // isDarkMode: isDarkMode, - // ), - // Divider( - // height: 1, - // color: isDarkMode - // ? Colors.white.withOpacity(0.1) - // : Colors.grey[200]), // //BLE测试 // 支付测试 @@ -748,24 +726,24 @@ class SettingsView extends GetView { // color: isDarkMode // ? Colors.white.withOpacity(0.1) // : Colors.grey[200]), - // 测试ble耳机固件版本升级 - _buildSimpleNavigationSetting( - title: '唤醒词'.tr, // 固件升级 - subtitle: '唤醒词管理'.tr, // BLE耳机固件版本升级 - icon: Icons.voice_chat, - iconBgColor: isDarkMode - ? Colors.orange[900]!.withOpacity(0.3) - : Colors.orange[100]!, - iconColor: - isDarkMode ? Colors.orange[300]! : Colors.orange[600]!, - onTap: () => Get.toNamed(Routes.wakeupvoice), - isDarkMode: isDarkMode, - ), - Divider( - height: 1, - color: isDarkMode - ? Colors.white.withOpacity(0.1) - : Colors.grey[200]), + // 耳机唤醒词设置 + // _buildSimpleNavigationSetting( + // title: '唤醒词'.tr, // 唤醒词设置 + // subtitle: '唤醒词管理'.tr, // 唤醒词管理 + // icon: Icons.voice_chat, + // iconBgColor: isDarkMode + // ? Colors.orange[900]!.withOpacity(0.3) + // : Colors.orange[100]!, + // iconColor: + // isDarkMode ? Colors.orange[300]! : Colors.orange[600]!, + // onTap: () => Get.toNamed(Routes.wakeupvoice), + // isDarkMode: isDarkMode, + // ), + // Divider( + // height: 1, + // color: isDarkMode + // ? Colors.white.withOpacity(0.1) + // : Colors.grey[200]), _buildSimpleNavigationSetting( title: 'firmwareUpgrade'.tr, // 固件升级 subtitle: 'bleHeadsetFirmwareUpgrade'.tr, // BLE耳机固件版本升级 diff --git a/lib/modules/translation/controllers/translation_controller.dart b/lib/modules/translation/controllers/translation_controller.dart index 1b6a57edd..fad6dfda9 100644 --- a/lib/modules/translation/controllers/translation_controller.dart +++ b/lib/modules/translation/controllers/translation_controller.dart @@ -1034,6 +1034,8 @@ class TranslationController extends GetxController with WidgetsBindingObserver { /// [event] 识别事件 void _handleRecognitionEvent(RecognitionEvent event) { // Logger.info("处理识别事件:${event}"); + final String asrProvider = event.provider; + if (asrProvider.isNotEmpty) Logger.info('ASR provider: $asrProvider'); switch (event.type) { case RecognitionEventType.finalResult: if (event.text.isEmpty) break; diff --git a/lib/routes/app_pages.dart b/lib/routes/app_pages.dart index da70a66cb..c9b6ec60c 100644 --- a/lib/routes/app_pages.dart +++ b/lib/routes/app_pages.dart @@ -64,8 +64,6 @@ import '../modules/realtime/bindings/realtime_binding.dart'; import '../modules/realtime/views/realtime_view.dart'; import '../modules/music/views/music_playlist_view.dart'; import '../modules/music/bindings/music_playlist_binding.dart'; -import '../modules/FTFTranslation/bindings/FTFTranslation_binding.dart'; -import '../modules/FTFTranslation/views/FTFTranslation_view.dart'; import '../modules/payment/bindings/payment_binding.dart'; import '../modules/payment/views/payment_view.dart'; import '../modules/translation/middleware/views/translation_middleware_view.dart'; @@ -278,13 +276,6 @@ abstract class AppPages { transition: Transition.rightToLeft, transitionDuration: Duration(milliseconds: 250), ), - GetPage( - name: Routes.ftftranslation, - page: () => const FTFTranslationView(), - binding: FTFTranslationBinding(), - transition: Transition.noTransition, - transitionDuration: Duration(milliseconds: 250), - ), GetPage( name: Routes.opusTest, page: () => const OpusTestView(), diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart index e56f5208e..be5b03701 100644 --- a/lib/routes/app_routes.dart +++ b/lib/routes/app_routes.dart @@ -36,7 +36,6 @@ abstract class Routes { static const usageStats = '/usage/stats'; // 用量统计 static const speechDemo = '/speech_demo'; // 语音演示 static const translationList = '/translation/List'; // 翻译历史 - static const ftftranslation = '/ftftranslation'; // 面对面翻译 // 测试路由(生产环境建议移除) static const ttsTest = '/tts_test'; // 文字转语音测试 static const asrTest = '/asr_test'; // 语音识别测试 diff --git a/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt b/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt index fb10d82f8..41bd651bd 100644 --- a/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt +++ b/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentService.kt @@ -73,6 +73,9 @@ object AgentService : CoroutineScope { private var azureSpeechKey: String = "" private var azureSpeechRegion: String = "" + private var xunfeiAppId: String = "" + private var xunfeiAccessKeyId: String = "" + private var xunfeiAccessKeySecret: String = "" // 协程相关 private val job = SupervisorJob() @@ -238,6 +241,9 @@ object AgentService : CoroutineScope { //保存配置 this.azureSpeechKey = config["azureSpeechKey"]?.toString() ?: "" this.azureSpeechRegion = config["azureSpeechRegion"]?.toString() ?: "" + this.xunfeiAppId = config["xunfeiAppId"]?.toString() ?: "" + this.xunfeiAccessKeyId = config["xunfeiAccessKeyId"]?.toString() ?: "" + this.xunfeiAccessKeySecret = config["xunfeiAccessKeySecret"]?.toString() ?: "" if (!customSystemPrompt.isNullOrBlank()) { systemPrompt = customSystemPrompt } else { @@ -257,7 +263,10 @@ object AgentService : CoroutineScope { region = config["azureSpeechRegion"]?.toString() ?: "", supportedLanguages = supportedLanguages, audioSourceType = if (isExternalActive) AzureAsrHelper.AudioSourceType.EXTERNAL - else AzureAsrHelper.AudioSourceType.MICROPHONE + else AzureAsrHelper.AudioSourceType.MICROPHONE, + xunfeiAppId = config["xunfeiAppId"]?.toString() ?: "", + xunfeiAccessKeyId = config["xunfeiAccessKeyId"]?.toString() ?: "", + xunfeiAccessKeySecret = config["xunfeiAccessKeySecret"]?.toString() ?: "" ) if (asrInitSuccess) { @@ -306,6 +315,9 @@ object AgentService : CoroutineScope { vipExptime = config["vipexptime"]?.toString()?.toIntOrNull() ?: vipExptime; navigationMode = config["navigationMode"]?.toString() ?: navigationMode musicServiceType = config["musicServiceType"]?.toString() ?: "" + xunfeiAppId = config["xunfeiAppId"]?.toString() ?: xunfeiAppId + xunfeiAccessKeyId = config["xunfeiAccessKeyId"]?.toString() ?: xunfeiAccessKeyId + xunfeiAccessKeySecret = config["xunfeiAccessKeySecret"]?.toString() ?: xunfeiAccessKeySecret chatApiService.initialize( config["openaiApiKey"]?.toString() ?: "", config["openaiBaseUrl"]?.toString() ?: "", @@ -1407,7 +1419,10 @@ object AgentService : CoroutineScope { subscriptionKey = this.azureSpeechKey, region = this.azureSpeechRegion, supportedLanguages = languages.toTypedArray(), - audioSourceType = audioSourceType + audioSourceType = audioSourceType, + xunfeiAppId = this.xunfeiAppId, + xunfeiAccessKeyId = this.xunfeiAccessKeyId, + xunfeiAccessKeySecret = this.xunfeiAccessKeySecret ) ?: false if (asrSuccess) { recognizeCallback() @@ -1631,11 +1646,18 @@ object AgentService : CoroutineScope { * 发送事件 */ private fun sendEvent(eventName: String, data: Map) { + val shouldAttachAsrProvider = eventName == "recognizing" || eventName.startsWith("recognition_") + val finalData: Map = if (shouldAttachAsrProvider && !data.containsKey("provider")) { + val provider = azureAsrHelper?.getAsrProvider() ?: "unknown" + data.toMutableMap().apply { put("provider", provider) } + } else { + data + } // 切换到主线程执行监听器回调,避免 UI 更新问题 launch(Dispatchers.Main) { listeners.forEach { listener -> try { - listener.onEvent(eventName, data) + listener.onEvent(eventName, finalData) } catch (e: Exception) { Log.e(TAG, "向监听器发送事件失败", e) } diff --git a/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentServicePlugin.kt b/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentServicePlugin.kt index d53768ecd..e3b464226 100644 --- a/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentServicePlugin.kt +++ b/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentServicePlugin.kt @@ -80,6 +80,9 @@ class AgentServicePlugin : FlutterPlugin, MethodCallHandler, EventChannel.Stream config["isttsinterrupt"]?.toString()?.let { intent.putExtra("isttsinterrupt", it) } config["callingToolText"]?.toString()?.let { intent.putExtra("callingToolText", it) } config["insufficientIntegralText"]?.toString()?.let { intent.putExtra("insufficientIntegralText", it) } + config["xunfeiAppId"]?.toString()?.let { intent.putExtra("xunfeiAppId", it) } + config["xunfeiAccessKeyId"]?.toString()?.let { intent.putExtra("xunfeiAccessKeyId", it) } + config["xunfeiAccessKeySecret"]?.toString()?.let { intent.putExtra("xunfeiAccessKeySecret", it) } config["vipexptime"]?.toString()?.let { intent.putExtra("vipexptime", it) //打印日志 diff --git a/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/BleMediaService.kt b/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/BleMediaService.kt index 6c992fdd3..26e9cf2b9 100644 --- a/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/BleMediaService.kt +++ b/local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/BleMediaService.kt @@ -71,6 +71,9 @@ class BleMediaService : Service(), CoroutineScope { private const val APP_CALLING_TOOL_TEXT = "callingToolText" // 工具调用提示 private const val APP_INSUFFICIENT_INTEGRAL_TEXT = "insufficientIntegralText" // 积分不足提示 private const val KEY_VIP_EXPTIME = "vipexptime" // 会员到期时间 + private const val KEY_XUNFEI_APP_ID = "xunfeiAppId" // 讯飞AppID + private const val KEY_XUNFEI_ACCESS_KEY_ID = "xunfeiAccessKeyId" // 讯飞AccessKeyID + private const val KEY_XUNFEI_ACCESS_KEY_SECRET = "xunfeiAccessKeySecret" // 讯飞AccessKeySecret // 用于跟踪服务是否正在运行 private val isRunning = AtomicBoolean(false) @@ -591,6 +594,9 @@ private var companionManager: BleCompanionManager? = null it.getStringExtra(APP_INSUFFICIENT_INTEGRAL_TEXT)?.let { value -> config[APP_INSUFFICIENT_INTEGRAL_TEXT] = value } it.getStringExtra(KEY_VIP_EXPTIME)?.let { value -> config[KEY_VIP_EXPTIME] = value } it.getStringExtra("isttsinterrupt")?.let { value -> config["isttsinterrupt"] = value } + it.getStringExtra(KEY_XUNFEI_APP_ID)?.let { value -> config[KEY_XUNFEI_APP_ID] = value } + it.getStringExtra(KEY_XUNFEI_ACCESS_KEY_ID)?.let { value -> config[KEY_XUNFEI_ACCESS_KEY_ID] = value } + it.getStringExtra(KEY_XUNFEI_ACCESS_KEY_SECRET)?.let { value -> config[KEY_XUNFEI_ACCESS_KEY_SECRET] = value } Log.d(TAG, "liwei-------vipexptime 3-1 ${ config[KEY_VIP_EXPTIME]}") // 提取 supportedLanguages 参数 it.getStringArrayListExtra(KEY_SUPPORTED_LANGUAGES)?.let { languages -> @@ -655,6 +661,9 @@ private var companionManager: BleCompanionManager? = null config[APP_CALLING_TOOL_TEXT] = getConfigString(prefs, APP_CALLING_TOOL_TEXT, "") config[APP_INSUFFICIENT_INTEGRAL_TEXT] = getConfigString(prefs, APP_INSUFFICIENT_INTEGRAL_TEXT, "") config[KEY_VIP_EXPTIME] = getConfigString(prefs, KEY_VIP_EXPTIME, "") + config[KEY_XUNFEI_APP_ID] = getConfigString(prefs, KEY_XUNFEI_APP_ID, "") + config[KEY_XUNFEI_ACCESS_KEY_ID] = getConfigString(prefs, KEY_XUNFEI_ACCESS_KEY_ID, "") + config[KEY_XUNFEI_ACCESS_KEY_SECRET] = getConfigString(prefs, KEY_XUNFEI_ACCESS_KEY_SECRET, "") Log.d(TAG, "liwei-------vipexptime 3-0 ${ config[KEY_VIP_EXPTIME]}") // 添加 supportedLanguages 参数处理 val supportedLanguagesStr = getConfigString(prefs, KEY_SUPPORTED_LANGUAGES, "") diff --git a/local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServiceImpl.swift b/local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServiceImpl.swift index 506a596bd..c3cf9bae8 100644 --- a/local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServiceImpl.swift +++ b/local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServiceImpl.swift @@ -36,6 +36,9 @@ class AgentServiceImpl: NSObject { private var azureSpeechKey: String = "" private var azureSpeechRegion: String = "" + private var xunfeiAppId: String = "" + private var xunfeiAccessKeyId: String = "" + private var xunfeiAccessKeySecret: String = "" private var config: [String: Any] = [:] // 添加音乐播放状态记录 @@ -145,12 +148,17 @@ class AgentServiceImpl: NSObject { } internal func sendEvent(name eventName: String, data: [String: Any]) { + var eventData = data + let shouldAttachAsrProvider = eventName == "recognizing" || eventName.hasPrefix("recognition_") + if shouldAttachAsrProvider && eventData["provider"] == nil { + eventData["provider"] = azureAsrHelper?.asrProvider() ?? "unknown" + } listenersLock.lock() let currentListeners = self.listeners listenersLock.unlock() for listener in currentListeners { - listener.onEvent(eventName: eventName, data: data) + listener.onEvent(eventName: eventName, data: eventData) } } @@ -252,6 +260,16 @@ class AgentServiceImpl: NSObject { sendError("Azure语音区域缺失", code: "CONFIG_ERROR") return false } + + if let xunfeiAppId = config["xunfeiAppId"] as? String { + self.xunfeiAppId = xunfeiAppId + } + if let xunfeiAccessKeyId = config["xunfeiAccessKeyId"] as? String { + self.xunfeiAccessKeyId = xunfeiAccessKeyId + } + if let xunfeiAccessKeySecret = config["xunfeiAccessKeySecret"] as? String { + self.xunfeiAccessKeySecret = xunfeiAccessKeySecret + } //启动定位服务 NotificationCenter.default.post(name: .locationstartEvent, object: nil) @@ -298,7 +316,10 @@ class AgentServiceImpl: NSObject { subscriptionKey: azureSpeechKey, region: azureSpeechRegion, supportedLanguages: supportedLanguages, - audioSourceType: .microphone + audioSourceType: .microphone, + xunfeiAppId: xunfeiAppId, + xunfeiAccessKeyId: xunfeiAccessKeyId, + xunfeiAccessKeySecret: xunfeiAccessKeySecret ), asrSuccess else { sendError("初始化语音识别服务失败", code: "ASR_INIT_ERROR") return false @@ -1459,7 +1480,10 @@ private func jsonToString(_ json: [String: Any]) -> String? { subscriptionKey: azureSpeechKey, region: azureSpeechRegion, supportedLanguages: languages, - audioSourceType: .microphone + audioSourceType: .microphone, + xunfeiAppId: xunfeiAppId, + xunfeiAccessKeyId: xunfeiAccessKeyId, + xunfeiAccessKeySecret: xunfeiAccessKeySecret ), asrSuccess else { sendError("初始化语音识别服务失败", code: "ASR_INIT_ERROR") return false diff --git a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt index 343c5ca00..ee0cbd907 100644 --- a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt +++ b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt @@ -44,6 +44,13 @@ class AzureAsrHelper(private val context: Context) { private var useXunfei = false private var xunFeiAsrHelper: XunFeiAsrHelper? = null + private var xunfeiAppId: String = "" + private var xunfeiAccessKeyId: String = "" + private var xunfeiAccessKeySecret: String = "" + + fun getAsrProvider(): String { + return if (useXunfei) "xunfei" else "azure" + } // 音频源配置 var audioSourceType = AudioSourceType.MICROPHONE @@ -92,7 +99,10 @@ class AzureAsrHelper(private val context: Context) { subscriptionKey: String, region: String, supportedLanguages: Array = arrayOf("zh-CN", "en-US"), - audioSourceType: AudioSourceType = AudioSourceType.MICROPHONE + audioSourceType: AudioSourceType = AudioSourceType.MICROPHONE, + xunfeiAppId: String = "", + xunfeiAccessKeyId: String = "", + xunfeiAccessKeySecret: String = "" ): Boolean { try { // 检查配置是否为空 @@ -108,13 +118,19 @@ class AzureAsrHelper(private val context: Context) { this.subscriptionKey = subscriptionKey this.region = region this.audioSourceType = audioSourceType + this.xunfeiAppId = xunfeiAppId + this.xunfeiAccessKeyId = xunfeiAccessKeyId + this.xunfeiAccessKeySecret = xunfeiAccessKeySecret // 设置语言 if (supportedLanguages.isNotEmpty()) { this.supportedLanguages = supportedLanguages } - this.useXunfei = supportedLanguages.all { it == "zh-CN" || it == "en-US" } + val xunfeiConfigReady = this.xunfeiAppId.isNotBlank() && + this.xunfeiAccessKeyId.isNotBlank() && + this.xunfeiAccessKeySecret.isNotBlank() + this.useXunfei = supportedLanguages.all { it == "zh-CN" || it == "en-US" } && xunfeiConfigReady // 根据支持的语言数量决定是否启用自动语言检测 this.isAutoDetectLanguage = supportedLanguages.size >= 2 @@ -283,7 +299,18 @@ class AzureAsrHelper(private val context: Context) { } if (xunFeiAsrHelper == null) { - xunFeiAsrHelper = XunFeiAsrHelper(context) + xunFeiAsrHelper = XunFeiAsrHelper( + context = context, + appId = xunfeiAppId, + accessKeyId = xunfeiAccessKeyId, + accessKeySecret = xunfeiAccessKeySecret + ) + } else { + xunFeiAsrHelper?.updateConfig( + appId = xunfeiAppId, + accessKeyId = xunfeiAccessKeyId, + accessKeySecret = xunfeiAccessKeySecret + ) } try { @@ -904,4 +931,4 @@ class AzureAsrHelper(private val context: Context) { } - \ No newline at end of file + diff --git a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureSpeechPlugin.kt b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureSpeechPlugin.kt index eccd2e060..a2d922b2e 100644 --- a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureSpeechPlugin.kt +++ b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureSpeechPlugin.kt @@ -280,6 +280,7 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin { mapOf( "type" to "result", "sessionid" to sessionid, + "provider" to azureAsrHelper.getAsrProvider(), "text" to text, "detectedLanguage" to detectedLanguage ) @@ -297,6 +298,7 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin { mapOf( "type" to "recognizing", "sessionid" to sessionid, + "provider" to azureAsrHelper.getAsrProvider(), "text" to recognizing, "detectedLanguage" to detectedLanguage ) @@ -304,11 +306,11 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin { } override fun onSessionStarted(sessionid:String) { - sendAsrEvent(mapOf("type" to "sessionStarted","sessionid" to sessionid,)) + sendAsrEvent(mapOf("type" to "sessionStarted","sessionid" to sessionid, "provider" to azureAsrHelper.getAsrProvider())) } override fun onSessionStopped(sessionid:String) { - sendAsrEvent(mapOf("type" to "sessionStopped","sessionid" to sessionid,)) + sendAsrEvent(mapOf("type" to "sessionStopped","sessionid" to sessionid, "provider" to azureAsrHelper.getAsrProvider())) } @@ -318,6 +320,7 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin { mapOf( "type" to "canceled", "sessionid" to sessionid, + "provider" to azureAsrHelper.getAsrProvider(), "reason" to reason, "errorDetails" to errorDetails ) @@ -331,6 +334,7 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin { mapOf( "type" to "error", "sessionid" to sessionid, + "provider" to azureAsrHelper.getAsrProvider(), "code" to code, "message" to error ) @@ -413,6 +417,9 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin { val supportedLanguages = call.argument>("supportedLanguages") ?: listOf("zh-CN") val useExternalAudio = call.argument("useExternalAudio") ?: false + val xunfeiAppId = call.argument("xunfeiAppId") ?: "" + val xunfeiAccessKeyId = call.argument("xunfeiAccessKeyId") ?: "" + val xunfeiAccessKeySecret = call.argument("xunfeiAccessKeySecret") ?: "" try { FileLogger.d(tag, "选择音频源类型: ${useExternalAudio}") // @@ -428,6 +435,9 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin { region = region, supportedLanguages = supportedLanguages.toTypedArray(), audioSourceType = audioSourceType, + xunfeiAppId = xunfeiAppId, + xunfeiAccessKeyId = xunfeiAccessKeyId, + xunfeiAccessKeySecret = xunfeiAccessKeySecret, ) result.success(success) @@ -1212,4 +1222,4 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin { } } - \ No newline at end of file + diff --git a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/XunFeiAsrHelper.kt b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/XunFeiAsrHelper.kt index daee140d5..4ebd748ff 100644 --- a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/XunFeiAsrHelper.kt +++ b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/XunFeiAsrHelper.kt @@ -15,12 +15,16 @@ import java.util.UUID import javax.crypto.Mac import javax.crypto.spec.SecretKeySpec +// 讯飞语音识别助手 +//调用讯飞开放平台的实时语音转写大模型接口 +// 参考文档:https://www.xfyun.cn/doc/spark/asr_llm/rtasr_llm.html + class XunFeiAsrHelper(private val context: Context) { private val tag = "XunFeiAsrHelper" - private val appId = "43d87d22" - private val accessKeyId = "2bd01ce06ac35957fc0c082f9b6284ec" - private val accessKeySecret = "ODU3OTUyYjhjMjY5NDhkMmMxYWY2Zjlm" + private var appId: String = "" + private var accessKeyId: String = "" + private var accessKeySecret: String = "" private var webSocket: WebSocket? = null private val client = OkHttpClient() @@ -35,6 +39,25 @@ class XunFeiAsrHelper(private val context: Context) { // 是否第去除一个文字的标点符号 private var removeFirstPunctuation = true + constructor( + context: Context, + appId: String, + accessKeyId: String, + accessKeySecret: String + ) : this(context) { + updateConfig(appId = appId, accessKeyId = accessKeyId, accessKeySecret = accessKeySecret) + } + + fun updateConfig(appId: String, accessKeyId: String, accessKeySecret: String) { + this.appId = appId + this.accessKeyId = accessKeyId + this.accessKeySecret = accessKeySecret + } + + private fun isConfigValid(): Boolean { + return appId.isNotBlank() && accessKeyId.isNotBlank() && accessKeySecret.isNotBlank() + } + fun start(callback: AzureAsrHelper.ContinuousRecognizeCallback, language: String, isAutoDetect: Boolean, isRemoveFirstPunctuation: Boolean) { try { webSocket?.cancel() @@ -50,6 +73,11 @@ class XunFeiAsrHelper(private val context: Context) { isAutoDetectLanguage = isAutoDetect removeFirstPunctuation = isRemoveFirstPunctuation + if (!isConfigValid()) { + callback.onError(currentSessionId, 1007, "Xunfei config missing") + return + } + val url = getWebSocketUrl() val request = Request.Builder().url(url).build() diff --git a/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureAsrHelper.swift b/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureAsrHelper.swift index f6e66af2a..3b1017217 100644 --- a/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureAsrHelper.swift +++ b/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureAsrHelper.swift @@ -59,6 +59,9 @@ public class AzureAsrHelper: NSObject { private var useXunfei = false private var xunFeiAsrHelper: XunFeiAsrHelper? + private var xunfeiAppId: String = "" + private var xunfeiAccessKeyId: String = "" + private var xunfeiAccessKeySecret: String = "" // 音频源配置 public enum AudioSourceType { @@ -77,6 +80,10 @@ public class AzureAsrHelper: NSObject { // 音频处理 public var audioStream: SimpleAudioReceiver? + public func asrProvider() -> String { + return useXunfei ? "xunfei" : "azure" + } + /** * 初始化Azure语音服务 * @@ -94,7 +101,10 @@ public class AzureAsrHelper: NSObject { subscriptionKey: String, region: String, supportedLanguages: [String] = ["zh-CN", "en-US"], - audioSourceType: AudioSourceType = .microphone + audioSourceType: AudioSourceType = .microphone, + xunfeiAppId: String = "", + xunfeiAccessKeyId: String = "", + xunfeiAccessKeySecret: String = "" ) -> Bool { do { // 检查配置是否为空 @@ -109,6 +119,9 @@ public class AzureAsrHelper: NSObject { self.subscriptionKey = subscriptionKey self.region = region self.audioSourceType = audioSourceType + self.xunfeiAppId = xunfeiAppId + self.xunfeiAccessKeyId = xunfeiAccessKeyId + self.xunfeiAccessKeySecret = xunfeiAccessKeySecret // 设置语言 if !supportedLanguages.isEmpty { @@ -116,7 +129,10 @@ public class AzureAsrHelper: NSObject { } // 检查是否只包含中文或英文,如果是则使用讯飞 - self.useXunfei = supportedLanguages.allSatisfy { $0 == "zh-CN" || $0 == "en-US" } + let xunfeiConfigReady = !self.xunfeiAppId.isEmpty && + !self.xunfeiAccessKeyId.isEmpty && + !self.xunfeiAccessKeySecret.isEmpty + self.useXunfei = supportedLanguages.allSatisfy { $0 == "zh-CN" || $0 == "en-US" } && xunfeiConfigReady // 根据支持的语言数量决定是否启用自动语言检测 self.isAutoDetectLanguage = supportedLanguages.count >= 2 @@ -430,7 +446,17 @@ public class AzureAsrHelper: NSObject { } if xunFeiAsrHelper == nil { - xunFeiAsrHelper = XunFeiAsrHelper() + xunFeiAsrHelper = XunFeiAsrHelper( + appId: xunfeiAppId, + accessKeyId: xunfeiAccessKeyId, + accessKeySecret: xunfeiAccessKeySecret + ) + } else { + xunFeiAsrHelper?.updateConfig( + appId: xunfeiAppId, + accessKeyId: xunfeiAccessKeyId, + accessKeySecret: xunfeiAccessKeySecret + ) } // 启动讯飞识别 diff --git a/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureSpeechPlugin.swift b/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureSpeechPlugin.swift index 194208bd0..2484ab79e 100644 --- a/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureSpeechPlugin.swift +++ b/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureSpeechPlugin.swift @@ -224,6 +224,10 @@ internal func sendAsrEvent(_ event: [String: Any]) { sendEvent(event, type: .asr) } +internal func currentAsrProvider() -> String { + return azureAsrHelper.asrProvider() +} + private func sendTtsEvent(_ event: [String: Any]) { sendEvent(event, type: .tts) } @@ -336,13 +340,19 @@ private func sendAstEvent(_ event: [String: Any]) { } let supportedLanguages = args["supportedLanguages"] as? [String] ?? ["zh-CN"] + let xunfeiAppId = args["xunfeiAppId"] as? String ?? "" + let xunfeiAccessKeyId = args["xunfeiAccessKeyId"] as? String ?? "" + let xunfeiAccessKeySecret = args["xunfeiAccessKeySecret"] as? String ?? "" // 初始化ASR引擎 let success = azureAsrHelper.initialize( subscriptionKey: subscriptionKey, region: region, supportedLanguages: supportedLanguages, - audioSourceType: .microphone + audioSourceType: .microphone, + xunfeiAppId: xunfeiAppId, + xunfeiAccessKeyId: xunfeiAccessKeyId, + xunfeiAccessKeySecret: xunfeiAccessKeySecret ) result(success) @@ -1283,6 +1293,7 @@ private class AsrCallbackWrapper: AzureAsrHelper.ContinuousRecognizeCallback { plugin?.sendAsrEvent([ "type": "result", "sessionid": sessionid, + "provider": plugin?.currentAsrProvider() ?? "", "text": text, "detectedLanguage": detectedLanguage ]) @@ -1297,6 +1308,7 @@ private class AsrCallbackWrapper: AzureAsrHelper.ContinuousRecognizeCallback { plugin?.sendAsrEvent([ "type": "recognizing", "sessionid": sessionid, + "provider": plugin?.currentAsrProvider() ?? "", "text": text, "detectedLanguage": detectedLanguage ]) @@ -1308,7 +1320,8 @@ private class AsrCallbackWrapper: AzureAsrHelper.ContinuousRecognizeCallback { func onSessionStarted(sessionid:String) { plugin?.sendAsrEvent([ "type": "sessionStarted", - "sessionid": sessionid + "sessionid": sessionid, + "provider": plugin?.currentAsrProvider() ?? "" ]) } @@ -1318,7 +1331,8 @@ private class AsrCallbackWrapper: AzureAsrHelper.ContinuousRecognizeCallback { func onSessionStopped(sessionid:String) { plugin?.sendAsrEvent([ "type": "sessionStopped", - "sessionid": sessionid + "sessionid": sessionid, + "provider": plugin?.currentAsrProvider() ?? "" ]) } @@ -1331,6 +1345,7 @@ private class AsrCallbackWrapper: AzureAsrHelper.ContinuousRecognizeCallback { plugin?.sendAsrEvent([ "type": "canceled", "sessionid": sessionid, + "provider": plugin?.currentAsrProvider() ?? "", "reason": reason, "errorDetails": errorDetails ]) @@ -1345,6 +1360,7 @@ private class AsrCallbackWrapper: AzureAsrHelper.ContinuousRecognizeCallback { plugin?.sendAsrEvent([ "type": "error", "sessionid": sessionid, + "provider": plugin?.currentAsrProvider() ?? "", "code": errorCode, "message": error ]) diff --git a/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/XunFeiAsrHelper.swift b/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/XunFeiAsrHelper.swift index e2ddd5915..bc63bcaee 100644 --- a/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/XunFeiAsrHelper.swift +++ b/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/XunFeiAsrHelper.swift @@ -1,12 +1,16 @@ import Foundation import CryptoKit +// 讯飞语音识别助手 +//调用讯飞开放平台的实时语音转写大模型接口 +// 参考文档:https://www.xfyun.cn/doc/spark/asr_llm/rtasr_llm.html + class XunFeiAsrHelper: NSObject, URLSessionWebSocketDelegate { private let tag = "XunFeiAsrHelper" - private let appId = "43d87d22" - private let accessKeyId = "2bd01ce06ac35957fc0c082f9b6284ec" - private let accessKeySecret = "ODU3OTUyYjhjMjY5NDhkMmMxYWY2Zjlm" + private var appId: String + private var accessKeyId: String + private var accessKeySecret: String private var webSocketTask: URLSessionWebSocketTask? private lazy var session: URLSession = { @@ -26,6 +30,23 @@ class XunFeiAsrHelper: NSObject, URLSessionWebSocketDelegate { private var callback: AzureAsrHelper.ContinuousRecognizeCallback? + init(appId: String, accessKeyId: String, accessKeySecret: String) { + self.appId = appId + self.accessKeyId = accessKeyId + self.accessKeySecret = accessKeySecret + super.init() + } + + func updateConfig(appId: String, accessKeyId: String, accessKeySecret: String) { + self.appId = appId + self.accessKeyId = accessKeyId + self.accessKeySecret = accessKeySecret + } + + private func isConfigValid() -> Bool { + return !appId.isEmpty && !accessKeyId.isEmpty && !accessKeySecret.isEmpty + } + func start(callback: AzureAsrHelper.ContinuousRecognizeCallback, language: String, isAutoDetect: Bool, isRemoveFirstPunctuation: Bool) { stop() @@ -37,6 +58,11 @@ class XunFeiAsrHelper: NSObject, URLSessionWebSocketDelegate { self.lastIntermediateResult = "" self.sessionId = "" + if !isConfigValid() { + callback.onError(sessionid: self.currentSessionId, 1007, "Xunfei config missing") + return + } + let urlString = getWebSocketUrl() guard let url = URL(string: urlString) else { print("\(tag): Invalid URL")