From 6d37f01806cdd0a77f906e85d38cb4a5f30e496e Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Thu, 1 Jan 2026 19:23:05 +0800 Subject: [PATCH 01/27] =?UTF-8?q?docs(translations):=20=E6=9B=B4=E6=96=B0e?= =?UTF-8?q?n=5Fus=E5=92=8Czh=5Fhk=E8=AF=AD=E8=A8=80=E6=96=87=E4=BB=B6?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E7=BC=BA=E5=A4=B1=E7=9A=84=E7=BF=BB?= =?UTF-8?q?=E8=AF=91=E9=A1=B9=E5=B9=B6=E4=BF=AE=E6=AD=A3=E9=83=A8=E5=88=86?= =?UTF-8?q?=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/core/translations/language/en_us.dart | 35 +- lib/core/translations/language/zh_hk.dart | 867 +++++++++++++++++----- 2 files changed, 693 insertions(+), 209 deletions(-) diff --git a/lib/core/translations/language/en_us.dart b/lib/core/translations/language/en_us.dart index b7f26a356..38f23a45f 100644 --- a/lib/core/translations/language/en_us.dart +++ b/lib/core/translations/language/en_us.dart @@ -989,6 +989,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 +1011,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 +1030,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 +1198,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 +1220,7 @@ const Map enUS = { // 翻译历史页 "noTranslationHistory": "No translation history", + "historyRecords": "History Records", "clearResults": "Clear Results", "clearHistory": "Clear History", "clearHistoryConfirm": @@ -1429,9 +1431,12 @@ const Map enUS = { "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.", + "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/zh_hk.dart b/lib/core/translations/language/zh_hk.dart index 535bb5f11..cfaf1c0bf 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,16 +17,16 @@ const Map zhHK = { "responseTimeout": "響應超時", "unknownError": "未知錯誤", - // 啟動頁 + // 启动页 "slogan": "連接世界,豈止聲音", "sloganInfo": "AI語音專家 · 隨時隨地", - // 底部導航 + // 底部导航 "home": "首頁", "explore": "發現", "settings": "設定", - // 語言 + // 语言 "followingSystem": "跟隨系統", "chinese": "中文", "english": "英語", @@ -56,7 +55,7 @@ const Map zhHK = { "hungarian": "匈牙利語", "norwegian": "挪威語", "romanian": "羅馬尼亞語", - "ukrainian": "烏克兰語", + "ukrainian": "烏克蘭語", "greek": "希臘語", "bulgarian": "保加利亞語", "croatian": "克羅地亞語", @@ -70,7 +69,7 @@ const Map zhHK = { "arabic": "阿拉伯語", "persian": "波斯語", - // 登錄頁 + // 登录页 "welcome": "歡迎使用", "loginTips": "請使用手機號或郵箱登入/註冊", "accountNumber": "手機號碼或郵箱", @@ -98,15 +97,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 +156,7 @@ const Map zhHK = { 'right': '右', 'checkConnectionStatusFailed': '檢查連接狀態失敗', -// 發現頁 +// 发现页 "searchAi": "搜尋AI功能...", "exploreSlogan": "智能耳機,無限可能", "exploreSlogan1": "智能陪伴,無限可能", @@ -178,7 +179,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 +268,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 +382,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 +612,8 @@ const Map zhHK = { "lastBackup": "上次備份:", "privacySettings": "私隱設定", "privacySettingsInfo": "管理數據收集和權限", - "permissionManagement": "權限管理", // 權限管理 - "permissionManagementInfo": "管理應用權限設定", // 管理應用權限設定 + "permissionManagement": "權限管理", // 权限管理 + "permissionManagementInfo": "管理應用權限設定", // 管理应用权限设置 "aboutApplication": "關於應用", "versions": "版本", "checkUpdates": "檢查更新", @@ -258,31 +639,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": "清空聊天記錄", @@ -312,6 +701,18 @@ const Map zhHK = { "callingTool": "正在帮您,请稍等!", // 正在帮您,请稍等! "voice_interrupt": "语音打断", // 语音打断 + // 预设提示词 + "presetMusic": '來點音樂', // 来点音乐 + "presetNavigation": '導航到', // 导航 + "presetWeather": '今日天氣', // 今日天气 + "presetNews": '今日新聞', // 今日新闻 + "presetFood": '附近美食', // 美食 + "playSomeMusic": '播放一些流行音樂', // 播放一些流行音乐 + "navigationTo": '請幫我導航到', // 导航到 + "todayWeather": '今天天氣如何?', // 今日天气 + "todayNews": '今天有哪些新聞?', // 今日新闻 + "nearbyFood": '附近有哪些美食?', // 美食 + // Agent controller 'welcomeMessage': '你好!我是**Lily**,我能幫你:\n\n' '• 回答問題和提供資訊\n\n' @@ -328,17 +729,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 +749,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 +795,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 +827,7 @@ const Map zhHK = { "haze": "霾", "strongWind": "大風", - //編輯個人信息頁 + //编辑个人信息页 "editProfile": "編輯個人資訊", "avatar": "頭像", "nickname": "暱稱", @@ -426,8 +840,10 @@ const Map zhHK = { "logoutTips": "確定要登出目前帳號嗎?", 'deleteAccount': '註銷帳號', 'deleteAccountTips': '確定要永久刪除您的帳號嗎?此操作不可撤銷', + 'clean': '清除快取', + 'cleanTips': '確定要清除個人快取嗎?', - // Profile 錯誤信息 + // Profile 错误信息 'networkConnectionFailed': '網絡連接失敗,請檢查網絡設定後重試', 'serverTemporarilyUnavailable': '伺服器暫時無法響應,請稍後重試', 'loginExpiredPleaseRelogin': '登入已過期,請重新登入', @@ -440,7 +856,9 @@ const Map zhHK = { 'networkConnectionFailedCheckSettings': '網絡連接失敗,請檢查網絡設定', 'serverInternalErrorRetryLater': '伺服器內部錯誤,請稍後重試', -// Profile 用戶交互 +// Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': '圖片壓縮失敗', 'avatarUpdateFailed': '頭像更新失敗', 'usernameCannotBeEmpty': '用戶名不能為空', @@ -452,29 +870,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 +916,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 +1081,24 @@ const Map zhHK = { "东帝汶": "東帝汶", "斐济": "斐濟", "所罗门群岛": "所羅門群島", + "刚果民主共和国": '剛果民主共和國', + "安哥拉": '安哥拉', + "苏丹": '蘇丹', + "马尔代夫": '馬爾代夫', + "不丹": '不丹', + "摩纳哥": '摩納哥', + "圣马力诺": '聖馬力諾', + "牙买加": '牙買加', + "巴哈马": '巴哈馬', + "巴布亚新几内亚": '巴布亞新幾內亞', + "萨摩亚": '薩摩亞', + + // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": '圖片翻譯', + "textTranslation": '文本翻譯', - // 翻譯模塊 - // 翻譯主頁 (translation_view.dart) + // 翻译主页 (translation_view.dart) "translationHistory": "翻譯歷史", "enableRecording": "是否開啟錄音", "viewAudioFiles": "查看錄音檔案", @@ -621,16 +1106,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 +1187,7 @@ const Map zhHK = { "renameAudioFile": "重新命名音訊檔案", "enterNewFileName": "請輸入新的檔案名稱", - // 翻譯詳情頁 (translation_detail_view.dart) + // 翻译详情页 (translation_detail_view.dart) "originalRecord": "原始記錄", "recordSummary": "記錄摘要", "clickToGenerateSummary": "點擊下方按鈕生成對話摘要", @@ -663,8 +1208,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 +1218,14 @@ const Map zhHK = { "autoInputCode": "自動輸入代碼", "skipBinding": "跳過綁定", "rescan": "重新掃描", - "skip": "跳過", + "verifyingDevice": "正在驗證設備...", "confirmBinding": "確認綁定", "associatingDevice": "正在關聯設備...", "goToBluetoothSettings": "前往藍牙設定", 'bluetooth': '藍牙', - // 配對狀態文本 + // 配对状态文本 "readyToPair": "準備開始配對", "preparingPairingEnvironment": "正在準備配對環境...", "connectDeepSoundViaSystemBluetooth": "請先透過系統藍牙連接Voitrans設備", @@ -689,7 +1234,7 @@ const Map zhHK = { "waitingCompletePairing": "請稍候,正在完成配對...", "pairingSuccessRedirecting": "配對成功!即將跳轉到首頁...", - // 配對錯誤狀態文本 + // 配对错误状态文本 "ensureConnectedDeepSoundDevice": "請確保連接的是Voitrans設備", "deviceAlreadyBoundToOtherAccount": "該設備已被其他帳號綁定", "deviceAssociationFailed": "設備關聯失敗,請重試", @@ -698,12 +1243,17 @@ const Map zhHK = { "authorizationFailedCheckCode": "授權失敗,請檢查授權碼是否正確", "pairingFailedRetry": "配對失敗,請重試", - // 配對控制器相關 + // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': '請開啟藍牙', 'deviceDisconnected': '設備已斷開', 'readyToStartPairing': '準備開始配對', 'checkingEnvironment': '正在檢查環境...', 'ensureHeadsetOnAndPairingMode': '請確保耳機已開啟並進入配對模式', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': '正在建立安全連接...', 'needManualBindingAuthCode': '需要手動綁定授權碼...', 'pairingSuccessful': '配對成功!', @@ -723,7 +1273,16 @@ const Map zhHK = { 'bleConnectionFailed': 'BLE連接失敗', 'deviceAuthorizationFailedCheckCode': '設備授權失敗,請檢查授權碼', - //用戶反饋頁 + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': '需要手動開啟藍牙', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': '請按照以下步驟操作:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': '開啟藍牙:設定 → 藍牙 → 開啟', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': '連接設備:在"我的設備"中找到您的設備並點擊連接', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': '返回應用繼續配對流程', // 返回应用继续配对流程 + 'bluetoothGuideTip': '提示:也可以從控制中心長按藍牙圖標快速進入藍牙設定', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': '我知道了', // 我知道了 + + //用户反馈页 "feedback": "用戶反饋", 'feedbackInfo': '提供反饋或建議', 'feedbackDescription': '請描述您遇到的問題或建議', @@ -735,7 +1294,7 @@ const Map zhHK = { 'feedbackSubmitSuccess': '反饋提交成功,感謝您的反饋!', 'feedbackSubmitFailed': '反饋提交失敗,請稍後重試', - // OTA升級模塊 + // OTA升级模块 "upgradeExitConfirm": "當前正在升級,退出將中斷升級進程,確定要退出嗎?", "deviceModel": "設備型號", "unknownDevice": "未知設備", @@ -748,20 +1307,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 +1364,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': '建議在安靜環境使用,效果受麥克風與網絡影響,具體以實際表現為準。', + // 时间相关 + "justNow": '剛剛', + "minutesAgo": '@minutes分鐘前', + "yesterday": '昨天', + // 时间扩展(图片翻译模块使用) + "daysAgo": '@days天前', + "hoursAgo": '@hours小時前', - // 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': '以上功能受設備權限、服務可用性與網絡狀況影響,具體以實際表現為準。', - - // VIP goods page (placeholders) - 'benefitsOverview': '權益總覽', - 'higherQuota': '更高使用額度', - 'lowerUnitPrice': '更低單價', - 'priorityService': '優先服務', - 'exclusiveSupportChannel': '專屬客服通道', - 'fastResponse': '問題快速響應', - 'eventsAndDiscounts': '活動與折扣', - 'memberExclusiveEvents': '會員專屬活動', - 'longTermDiscountPlan': '長期優惠計劃', - 'generalPrivileges': '通用特權', - 'earlyAccessNewFeatures': '新功能優先體驗', - 'crossDeviceSync': '跨設備同步', - 'vipDisclaimer': '具體權益以實際套餐說明為準,可能隨版本迭代調整。', + //补充 + "insufficientIntegral": '積分不足', //余额不足弹窗 "insufficientBalanceDesc": "餘額不足,請前往對應充值界面進行充值", "recharge": "去充值", + // 会员到期提示 + "aiMemberExpiredDesc": 'AI會員已到期,請前往會員充值續費', }; From 7d99e0e8f228374034466c25651bf9e02def4bbc Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Fri, 2 Jan 2026 15:04:50 +0800 Subject: [PATCH 02/27] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=A4=9A=E8=AF=AD?= =?UTF-8?q?=E8=A8=80=E7=9A=84=E9=94=AE=E5=80=BC=E5=AF=B9=EF=BC=8C=E4=BB=A5?= =?UTF-8?q?zh=5Fcn.dart=E4=B8=BA=E5=9F=BA=E5=87=86=EF=BC=8C=E9=83=A8?= =?UTF-8?q?=E5=88=86=E8=AF=AD=E8=A8=80=E9=87=87=E7=94=A8=E8=8B=B1=E8=AF=AD?= =?UTF-8?q?=E5=8D=A0=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/core/translations/language/ar_sa.dart | 1019 ++++++++++++-------- lib/core/translations/language/bg_bg.dart | 746 ++++++++++++++- lib/core/translations/language/cs_cz.dart | 735 ++++++++++++++- lib/core/translations/language/da_dk.dart | 738 ++++++++++++++- lib/core/translations/language/de_de.dart | 845 ++++++++++++++--- lib/core/translations/language/el_gr.dart | 749 ++++++++++++++- lib/core/translations/language/es_es.dart | 920 +++++++++++++----- lib/core/translations/language/et_ee.dart | 813 +++++++++++++--- lib/core/translations/language/fa_ir.dart | 762 +++++++++------ lib/core/translations/language/fi_fi.dart | 886 ++++++++++++++---- lib/core/translations/language/fr_fr.dart | 953 ++++++++++++++----- lib/core/translations/language/hi_in.dart | 1000 ++++++++++++++------ lib/core/translations/language/hr_hr.dart | 911 ++++++++++++++---- lib/core/translations/language/hu_hu.dart | 913 ++++++++++++++---- lib/core/translations/language/id_id.dart | 889 ++++++++++++++---- lib/core/translations/language/is_is.dart | 898 ++++++++++++++---- lib/core/translations/language/it_it.dart | 1035 +++++++++++++++------ lib/core/translations/language/ja_jp.dart | 710 ++++++++++++-- lib/core/translations/language/ko_kr.dart | 798 +++++++++++++--- lib/core/translations/language/lt_lt.dart | 916 ++++++++++++++---- lib/core/translations/language/lv_lv.dart | 922 ++++++++++++++---- lib/core/translations/language/ms_my.dart | 894 ++++++++++++++---- lib/core/translations/language/nb_no.dart | 889 ++++++++++++++---- lib/core/translations/language/nl_nl.dart | 917 ++++++++++++++---- lib/core/translations/language/pl_pl.dart | 933 +++++++++++++++---- lib/core/translations/language/pt_pt.dart | 1006 ++++++++++++++------ lib/core/translations/language/ro_ro.dart | 933 +++++++++++++++---- lib/core/translations/language/ru_ru.dart | 992 ++++++++++++++------ lib/core/translations/language/sk_sk.dart | 902 ++++++++++++++---- lib/core/translations/language/sl_si.dart | 917 ++++++++++++++---- lib/core/translations/language/sr_rs.dart | 899 ++++++++++++++---- lib/core/translations/language/sv_se.dart | 886 ++++++++++++++---- lib/core/translations/language/th_th.dart | 849 ++++++++++++++--- lib/core/translations/language/tl_ph.dart | 946 ++++++++++++++----- lib/core/translations/language/tr_tr.dart | 892 ++++++++++++++---- lib/core/translations/language/uk_ua.dart | 912 ++++++++++++++---- lib/core/translations/language/vi_vn.dart | 871 +++++++++++++---- 37 files changed, 26047 insertions(+), 6749 deletions(-) diff --git a/lib/core/translations/language/ar_sa.dart b/lib/core/translations/language/ar_sa.dart index 5208c374b..2e3467118 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": "انتهت مهلة الاستجابة", @@ -67,7 +67,7 @@ const Map arSA = { "serbian": "الصربية", "icelandic": "الآيسلندية", "arabic": "العربية", - "persian": "الفارسی", + "persian": "الفارسية", // 登录页 "welcome": "أهلاً بك", @@ -76,13 +76,13 @@ const Map arSA = { "accountNumber": "رقم الهاتف أو البريد الإلكتروني", "verificationCode": "رمز التحقق", "getCode": "الحصول على الرمز", - "reacquireAfter": "إعادة الإرسال بعد s ثانية", + "reacquireAfter": "ثانية لإعادة الطلب", "otherWays": "أو سجل الدخول باستخدام الطرق التالية", "expressConsent": "تسجيل الدخول/التسجيل يعني موافقتك على", "and": " و ", "userAgreement": "《اتفاقية المستخدم》", "privacyPolicy": "《سياسة الخصوصية》", - 'selectCountry': 'اختر الدولة/المنطقة', + "selectCountry": "اختر الدولة/المنطقة", "email": "البريد الإلكتروني", "phoneNumber": "رقم الهاتف", "pleaseEnterContactInfo": "يرجى إدخال رقم الهاتف أو البريد الإلكتروني", @@ -91,8 +91,8 @@ const Map arSA = { "tip": "نصيحة", "pleaseEnterCompleteCode": "يرجى إدخال رمز التحقق بالكامل", "loginFailed": "فشل تسجيل الدخول، يرجى المحاولة مرة أخرى", - 'pleaseAcceptPrivacyPolicy': - 'يرجى قراءة والموافقة على سياسة الخصوصية واتفاقية المستخدم أولاً', + "pleaseAcceptPrivacyPolicy": + "يرجى قراءة والموافقة على سياسة الخصوصية واتفاقية المستخدم أولاً", "enterVerificationCode": "أدخل رمز التحقق", "verificationCodeSentTo": "تم إرسال رمز التحقق إلى", "resendVerificationCode": "إعادة إرسال رمز التحقق", @@ -100,12 +100,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 +124,7 @@ const Map arSA = { "aiAssistant": "مساعد الذكاء الاصطناعي الشامل", "aiAssistantInfo": "مستشار حصري على مدار 24 ساعة للإجابة على الأسئلة وتقديم الاقتراحات", - "interpretation": "الترجمة الفورية", + "interpretation": "الترجمة", "simultaneousInterpretationInfo": "ترجمة فورية لأكثر من 80 لغة، سفر خالٍ من القلق", "aiCompanion": "رفيق العائلة", @@ -135,7 +138,7 @@ const Map arSA = { "bluetoothInitializationFailure": "فشل تهيئة خدمة البلوتوث", "checkingPermissions": "جاري التحقق من الأذونات...", "lackPermissions": - "يرجى включить أذونات البلوتوث y الإمكانية الوصول إلى الموقع للبحث عن الأجهزة المحاورة", + "يرجى تفعيل أذونات البلوتوث والموقع لاكتشاف الأجهزة القريبة وتوصيلها", "searchingDevice": "جاري البحث عن الجهاز...", "findConnectedDevice": "تم العثور على جهاز متصل", "notFound": "لم يتم العثور على أجهزة بلوتوث متصلة", @@ -165,12 +168,12 @@ const Map arSA = { "exploreSlogan1": "رفقة ذكية، إمكانيات لا حصر لها", "exploreSlogan2": "نظارات ذكية، إمكانيات لا حصر لها", "exploreAi": "استكشف وظائف الذكاء الاصطناعي التي يقدمها Voitrans", - "aiFunction": "وظائف الذكاء الاصطناعي", + "aiFunction": "مساعد الذكاء الاصطناعي", "allRoundAssistant": "مساعد شامل", "allRoundAssistantInfo": "يساعدك على حل جميع أنواع المشاكل", "simultaneousTranslation": "الترجمة الفورية", "faceToFaceTranslation": "الترجمة وجهًا لوجه", - 'audioVideoTranslation': 'ترجمة الصوت والفيديو', + 'audioVideoTranslation': 'ترجمة الوسائط المتعددة', 'callTranslation': 'ترجمة المكالمات', "simultaneousTranslationInfo": "ترجمة فورية لأكثر من 80 لغة", "aiGirlfriend": "رفيق العائلة", @@ -180,9 +183,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 +395,7 @@ const Map arSA = { 'noContent': 'لا يوجد محتوى', 'editMeetingTitle': 'تعديل عنوان الاجتماع (اختياري)', 'meetingTitle': 'عنوان الاجتماع (اختياري)', - 'maxCharacters': '50 حرفًا كحد أقصى', + 'maxCharacters': 'الحد الأقصى 50 حرفًا', 'meeting': 'اجتماع', 'recordingDetails': 'تفاصيل التسجيل', 'aiSummary': 'ملخص الذكاء الاصطناعي', @@ -199,72 +403,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 +476,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 +514,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 +538,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 +562,17 @@ const Map arSA = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'تخزين', 'meetingStoragePermissionExplanation': - 'نحتاج إلى إذن الوصول إلى التخزين حتى تتمكن من تحديد وتحميل الملفات الصوتية.', + 'نحتاج إلى الوصول إلى إذن التخزين حتى تتمكن من اختيار وتحميل ملفات الصوت.', 'meetingStoragePermissionPermanentDenial': - 'تم اكتشاف أنك رفضت إذن التخزين بشكل دائم. للمتابعة في استخدام هذه الميزة، يرجى الانتقال إلى إعدادات التطبيق وتمكين إذن التخزين يدويًا.', + 'تم اكتشاف أنك رفضت إذن التخزين بشكل دائم. للمتابعة في استخدام هذه الميزة، يرجى الانتقال إلى إعدادات التطبيق لتمكين إذن التخزين يدويًا.', // Meeting模块 - 思维导图相关 'shareMindMap': 'مشاركة الخريطة الذهنية', 'shareSuccess': 'تمت المشاركة بنجاح', // Meeting模块 - AI相关 - 'askAI': 'اسأل الذكاء الاصطناعي...', - 'askAIPrompt': 'بماذا يمكنني مساعدتك اليوم؟', + 'askAI': 'اسأل AI ...', + 'askAIPrompt': 'ما الذي يمكنني مساعدتك به اليوم؟', 'continueAsk': 'متابعة السؤال', 'todoList': 'قائمة المهام', 'extractConclusion': 'استخلاص النتائج', @@ -379,9 +583,17 @@ const Map arSA = { // Meeting模块 - 录音语言相关 'recordLanguage': 'لغة التسجيل', + // 'chinese': '中文普通话(简体)', 'cantonese': 'الكانتونية', - 'sichuan': 'السيتشوانية', - 'shanghai': 'الشنغهاينية', + 'sichuan': 'لهجة سيتشوان', + 'shanghai': 'لهجة شنغهاي', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', // Meeting模块 - 分享相关 'shareLink': 'مشاركة الرابط', @@ -400,63 +612,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 +681,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 +702,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 +784,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 +806,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 +849,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 +927,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 +956,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 +1093,9 @@ const Map arSA = { "阿根廷": "الأرجنتين", "澳大利亚": "أستراليا", "新西兰": "نيوزيلندا", - "中国香港": "هونغ كونغ الصينية", - "中国澳门": "ماكاو الصينية", - "中国台湾": "تايوان الصينية", + "中国香港": "هونغ كونغ، الصين", + "中国澳门": "ماكاو، الصين", + "中国台湾": "تايوان، الصين", "埃及": "مصر", "希腊": "اليونان", "荷兰": "هولندا", @@ -869,7 +1104,7 @@ const Map arSA = { "罗马尼亚": "رومانيا", "瑞士": "سويسرا", "奥地利": "النمسا", - "丹麦": "الدنمارك", + "丹麦": "الدانمرك", "瑞典": "السويد", "挪威": "النرويج", "波兰": "بولندا", @@ -893,7 +1128,7 @@ const Map arSA = { "塞尔维亚": "صربيا", "克罗地亚": "كرواتيا", "斯洛文尼亚": "سلوفينيا", - "捷克": "التشيك", + "捷克": "جمهورية التشيك", "斯洛伐克": "سلوفاكيا", "危地马拉": "غواتيمالا", "萨尔瓦多": "السلفادور", @@ -935,19 +1170,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 +1221,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 +1316,7 @@ const Map arSA = { "autoInputCode": "إدخال الرمز تلقائيًا", "skipBinding": "تخطي الربط", "rescan": "إعادة المسح", - "skip": "تخطي", + "verifyingDevice": "جاري التحقق من الجهاز...", "confirmBinding": "تأكيد الربط", "associatingDevice": "جاري ربط الجهاز...", @@ -1020,7 +1335,8 @@ const Map arSA = { "نجح الاقتران! سيتم التوجيه إلى الصفحة الرئيسية قريبًا...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "يرجى التأكد من توصيل جهاز Voitrans", + "ensureConnectedDeepSoundDevice": + "الجهاز المستخدم حاليًا: %s، يرجى التأكد من توصيل جهاز يدعمه Voitrans", "deviceAlreadyBoundToOtherAccount": "هذا الجهاز مرتبط بالفعل بحساب آخر", "deviceAssociationFailed": "فشل ارتباط الجهاز، يرجى المحاولة مرة أخرى", "scanTimeoutEnsureDeviceNearby": @@ -1030,12 +1346,17 @@ const Map arSA = { "pairingFailedRetry": "فشل الاقتران، يرجى المحاولة مرة أخرى", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'يرجى تمكين البلوتوث', 'deviceDisconnected': 'تم فصل الجهاز', 'readyToStartPairing': 'جاهز لبدء الاقتران', 'checkingEnvironment': 'جاري فحص البيئة...', 'ensureHeadsetOnAndPairingMode': 'يرجى التأكد من تشغيل سماعة الرأس وفي وضع الاقتران', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'جاري إنشاء اتصال آمن...', 'needManualBindingAuthCode': 'مطلوب رمز تفويض الربط اليدوي...', 'pairingSuccessful': 'نجح الاقتران!', @@ -1057,16 +1378,18 @@ const Map arSA = { 'deviceAuthorizationFailedCheckCode': 'فشل تفويض الجهاز، يرجى التحقق من رمز التفويض', - // iOS蓝牙引导窗 - 'bluetoothGuideTitle': 'يجب تمكين البلوتوث يدويًا', - 'bluetoothGuideSteps': 'يرجى اتباع الخطوات التالية:', - 'bluetoothGuideStep1': 'تمكين البلوتوث: الإعدادات ← البلوتوث ← تشغيل', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'يجب تمكين البلوتوث يدويًا', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'يرجى اتباع الخطوات التالية:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'تمكين البلوتوث: الإعدادات ← البلوتوث ← تشغيل', // 开启蓝牙:设置 → 蓝牙 → 开启 'bluetoothGuideStep2': - 'توصيل الجهاز: ابحث عن جهازك في "أجهزتي" وانقر للاتصال', - 'bluetoothGuideStep3': 'العودة إلى التطبيق لمتابعة عملية الاقتران', + 'توصيل الجهاز: ابحث عن جهازك في "أجهزتي" وانقر للاتصال', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'العودة إلى التطبيق لمتابعة عملية الاقتران', // 返回应用继续配对流程 'bluetoothGuideTip': - 'نصيحة: يمكنك أيضًا الضغط لفترة طويلة على أيقونة البلوتوث في مركز التحكم للوصول بسرعة إلى إعدادات البلوتوث', - 'iKnow': 'حسنًا', + 'نصيحة: يمكنك أيضًا الضغط لفترة طويلة على أيقونة البلوتوث في مركز التحكم للوصول بسرعة إلى إعدادات البلوتوث', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'أنا أعرف', // 我知道了 //用户反馈页 "feedback": "ملاحظات المستخدم", @@ -1074,44 +1397,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 +1482,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..63445b48a 100644 --- a/lib/core/translations/language/bg_bg.dart +++ b/lib/core/translations/language/bg_bg.dart @@ -102,8 +102,8 @@ const Map bgBG = { "loginDeclaration": "Декларация на Voitrans", // Voitrans 声明 "welcomeToThisApp": "Добре дошли в Voitrans, моля прочетете внимателно", // 欢迎使用Voitrans,请充分阅读 - // "privacyPolicy": "Политика за поверителност", // 《隐私政策》 - 已存在,使用现有键 - // "userAgreement": "Потребителско споразумение", // 《用户协议》 - 已存在,使用现有键 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": ". Кликването на 'Съгласявам се и влизам' означава, че сте прочели напълно и се съгласявате с горните споразумения. Кликването на 'Не се съгласявам' ще затвори приложението.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 "disagree": "Не се съгласявам", // 不同意 @@ -186,6 +186,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 +409,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 +686,10 @@ const Map bgBG = { 'selecttimbre': 'Избери тембър', 'pleaseRead': 'Моля прочетете', 'completeRecording': 'Завърши записа', - "firmwareUpgrade": "Актуализация на фърмуера", // 固件升级 - "bleHeadsetFirmwareUpgrade": - "Актуализация на фърмуера на BLE слушалките", // BLE耳机固件版本升级 - "deviceManagement": "Управление на устройства", // 设备管理 - "manageConnectedDevices": - "Управление на свързани Bluetooth устройства", // 管理已绑定的蓝牙设备 + "firmwareUpgrade": "Актуализация на фърмуера", + "bleHeadsetFirmwareUpgrade": "Актуализация на фърмуера на BLE слушалките", + "deviceManagement": "Управление на устройства", + "manageConnectedDevices": "Управление на свързани Bluetooth устройства", //设置setting_controller // 版本更新相关 @@ -257,11 +698,10 @@ const Map bgBG = { 'networkErrorRetry': 'Мрежова грешка, моля опитайте отново по-късно', // 设备管理相关 - 'clearPairedDevices': 'Изчисти сдвоени устройства', - 'clearPairedDevicesConfirm': - 'Сигурни ли сте, че искате да изчистите всички сдвоени устройства?', - 'clearPairedDevicesSuccess': 'Успешно изчистване на сдвоени устройства', - 'clearPairedDevicesFailed': 'Неуспешно изчистване на сдвоени устройства', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Гласов разговор в реално време", @@ -270,11 +710,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 +752,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 +799,7 @@ const Map bgBG = { 'submitSuccess': 'Успешно изпращане', 'submitFailed': 'Неуспешно изпращане', 'reportSubmitted': 'Докладът е изпратен, ще го обработим възможно най-скоро', - //'networkError': 'Мрежова грешка, моля опитайте отново по-късно', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Вредно/небезопасно', 'pornographicVulgar': 'Порнографско/вулгарно', 'misleadingAttack': 'Подвеждаща атака', @@ -346,7 +809,7 @@ const Map bgBG = { 'other': 'Друго', 'reportDescriptionHint': 'Искаме да знаем причината за доклада ви, можете да опишете проблема, с който сте се сблъскали.', - //'submit': 'Изпрати', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Генерирано от AI', @@ -401,6 +864,17 @@ const Map bgBG = { "friday": "Петък", "saturday": "Събота", "sunday": "Неделя", + // 首次绑定奖励弹窗(英文文案,保持一致性) + "firstBindRewardTitle": "Награда за добре дошли", + "firstBindRewardDesc": "Получихте награди за свързване.", + "vipLevelLabel": "VIP ниво:", + "expiryLabel": "Изтичане:", + "notActivated": "Неактивирано", + "aiChatCreditsLabel": "AI чат кредити:", + "translationCreditsLabel": "Кредити за превод:", + "meetingCreditsLabel": "Кредити за срещи:", + "ok": "ОК", + // 天气描述 "sunny": "Слънчево", "partlyCloudy": "Малко облачно", @@ -436,6 +910,8 @@ const Map bgBG = { 'deleteAccount': 'Изтрий акаунт', 'deleteAccountTips': 'Сигурни ли сте, че искате да изтриете завинаги акаунта си? Тази операция не може да бъде отменена', + 'clean': 'Изчисти кеша', + 'cleanTips': 'Сигурни ли сте, че искате да изчистите личния кеш?', // Profile 错误信息 'networkConnectionFailed': @@ -456,8 +932,8 @@ const Map bgBG = { 'Вътрешна грешка в сървъра, моля опитайте отново по-късно', // Profile 用户交互 -//'error': 'Грешка', -//'success': 'Успех', +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Неуспешно компресиране на изображението', 'avatarUpdateFailed': 'Неуспешна актуализация на аватара', 'usernameCannotBeEmpty': 'Потребителското име не може да бъде празно', @@ -491,15 +967,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 +1005,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 +1200,23 @@ const Map bgBG = { "东帝汶": "Източен Тимор", "斐济": "Фиджи", "所罗门群岛": "Соломонови острови", + "刚果民主共和国": "Демократична република Конго", + "安哥拉": "Ангола", + "苏丹": "Судан", + "马尔代夫": "Малдиви", + "不丹": "Бутан", + "摩纳哥": "Монако", + "圣马力诺": "Сан Марино", + "牙买加": "Ямайка", + "巴哈马": "Бахами", + "巴布亚新几内亚": "Папуа Нова Гвинея", + "萨摩亚": "Самоа", // 翻译模块 + // 翻译中间层 (translation_middleware_view.dart) + "pictureTranslation": "Превод на снимки", + "textTranslation": "Текстов превод", + // 翻译主页 (translation_view.dart) "translationHistory": "История на преводите", "enableRecording": "Включи записването", @@ -658,9 +1225,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 +1251,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 +1351,7 @@ const Map bgBG = { "autoInputCode": "Автоматично въвеждане на код", "skipBinding": "Прескочи свързването", "rescan": "Сканирай отново", - "skip": "Прескочи", + "verifyingDevice": "Проверка на устройството...", "confirmBinding": "Потвърди свързването", "associatingDevice": "Асоцииране на устройството...", @@ -749,17 +1385,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 +1420,19 @@ const Map bgBG = { 'deviceAuthorizationFailedCheckCode': 'Неуспешно разрешение на устройството, моля проверете кода за разрешение', + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'Изисква се ръчно активиране на Bluetooth', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'Моля следвайте тези стъпки:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': + 'Включете Bluetooth: Настройки → Bluetooth → Включи', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'Свържете устройство: Намерете вашето устройство в "Моите устройства" и натиснете за свързване', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'Върнете се в приложението, за да продължите процеса на сдвояване', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'Съвет: Можете също да задържите иконата на Bluetooth в Центъра за управление за бърз достъп до настройките на Bluetooth', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'Разбрах', // 我知道了 + //用户反馈页 "feedback": "Потребителска обратна връзка", 'feedbackInfo': 'Предоставете обратна връзка или предложения', @@ -812,6 +1461,14 @@ const Map bgBG = { "connectionFailed": "Неуспешна връзка", "retryConnection": "Опитай връзката отново", "ota_updateNow": "Актуализирай сега", + "otaVersionInfoFailed": + "Неуспешно получаване на информация за версията. Моля опитайте отново по-късно.", + "otaDeviceInfoUnavailable": + "Не може да се получи информация за устройството. Моля проверете връзката и опитайте отново.", + "otaProductInfoUnavailable": + "Не може да се идентифицира устройството. Моля свържете се отново и опитайте отново.", + "otaFirmwareVersionInvalid": + "Версията на фърмуера е необичайна. Моля свържете се отново и опитайте отново.", "keepConnectedDontClose": "Моля поддържайте устройството свързано, не затваряйте приложението", "doNotDisconnect": "Моля не прекъсвайте връзката", @@ -867,4 +1524,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..b3a9a5227 100644 --- a/lib/core/translations/language/cs_cz.dart +++ b/lib/core/translations/language/cs_cz.dart @@ -103,8 +103,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 +185,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 +401,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 +677,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 +689,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 +701,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 +742,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 +788,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 +798,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 +853,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 +899,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 +921,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 +950,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 +987,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 +1181,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 +1206,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 +1232,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 +1330,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 +1363,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 +1397,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 +1437,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 +1500,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..cf5f4e32c 100644 --- a/lib/core/translations/language/da_dk.dart +++ b/lib/core/translations/language/da_dk.dart @@ -102,8 +102,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 +185,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 +404,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 +681,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 +693,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 +705,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 +747,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 +793,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 +803,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 +858,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 +904,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 +926,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 +955,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 +991,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 +1185,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 +1210,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 +1236,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 +1333,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 +1366,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 +1399,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 +1439,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 +1501,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..7c87543ef 100644 --- a/lib/core/translations/language/de_de.dart +++ b/lib/core/translations/language/de_de.dart @@ -104,8 +104,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 +190,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 +410,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 +689,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 +701,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 +756,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 +803,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 +814,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 +837,7 @@ const Map deDE = { "driving": "Fahren", "walking": "Gehen", "bicycling": "Radfahren", - "transit": "Öffentliche Verkehrsmittel", + "tsransit": "ÖPNV", //天气卡片 weather_card 'weatherQuery': 'Wetterabfrage:', @@ -405,6 +869,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 +916,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 +941,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 +974,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 +1011,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 +1207,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 +1232,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 +1258,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 +1356,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 +1389,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 +1427,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 +1468,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 +1530,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..2e8f7e507 100644 --- a/lib/core/translations/language/el_gr.dart +++ b/lib/core/translations/language/el_gr.dart @@ -102,8 +102,8 @@ const Map elGR = { "loginDeclaration": "Δήλωση Voitrans", // Voitrans 声明 "welcomeToThisApp": "Καλώς ήρθατε στο Voitrans, διαβάστε προσεκτικά", // 欢迎使用Voitrans,请充分阅读 - // "privacyPolicy": "Πολιτική απορρήτου", // 《隐私政策》 - 已存在,使用现有键 - // "userAgreement": "Συμφωνία χρήστη", // 《用户协议》 - 已存在,使用现有键 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": ". Κάνοντας κλικ στο 'Συμφωνώ και εισέρχομαι' δηλώνετε ότι έχετε διαβάσει πλήρως και συμφωνείτε με τις παραπάνω συμφωνίες. Κάνοντας κλικ στο 'Δεν συμφωνώ' θα κλείσει η εφαρμογή.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 "disagree": "Δεν συμφωνώ", // 不同意 @@ -187,6 +187,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 +417,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 +695,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 +707,10 @@ const Map elGR = { 'networkErrorRetry': 'Σφάλμα δικτύου, δοκιμάστε ξανά αργότερα', // 设备管理相关 - 'clearPairedDevices': 'Εκκαθάριση συζευγμένων συσκευών', - 'clearPairedDevicesConfirm': - 'Είστε βέβαιοι ότι θέλετε να εκκαθαρίσετε όλες τις συζευγμένες συσκευές;', - 'clearPairedDevicesSuccess': 'Επιτυχής εκκαθάριση συζευγμένων συσκευών', - 'clearPairedDevicesFailed': 'Αποτυχία εκκαθάρισης συζευγμένων συσκευών', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Φωνητική συνομιλία σε πραγματικό χρόνο", @@ -271,11 +719,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 +761,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 +809,7 @@ const Map elGR = { 'submitFailed': 'Αποτυχία υποβολής', 'reportSubmitted': 'Η αναφορά υποβλήθηκε, θα την επεξεργαστούμε το συντομότερο δυνατό', - //'networkError': 'Σφάλμα δικτύου, δοκιμάστε ξανά αργότερα', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Επιβλαβές/μη ασφαλές', 'pornographicVulgar': 'Πορνογραφικό/χυδαίο', 'misleadingAttack': 'Παραπλανητική επίθεση', @@ -348,7 +819,7 @@ const Map elGR = { 'other': 'Άλλο', 'reportDescriptionHint': 'Θέλουμε να γνωρίζουμε τον λόγο της αναφοράς σας, μπορείτε να περιγράψετε το πρόβλημα που αντιμετωπίσατε.', - 'submit': 'Υποβολή', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Δημιουργήθηκε από AI', @@ -403,6 +874,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 +921,8 @@ const Map elGR = { 'deleteAccount': 'Διαγραφή λογαριασμού', 'deleteAccountTips': 'Είστε βέβαιοι ότι θέλετε να διαγράψετε μόνιμα τον λογαριασμό σας; Αυτή η ενέργεια δεν μπορεί να αναιρεθεί', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': @@ -459,8 +943,8 @@ const Map elGR = { 'Εσωτερικό σφάλμα διακομιστή, δοκιμάστε ξανά αργότερα', // Profile 用户交互 -//'error': 'Σφάλμα', -//'success': 'Επιτυχία', +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Αποτυχία συμπίεσης εικόνας', 'avatarUpdateFailed': 'Αποτυχία ενημέρωσης avatar', 'usernameCannotBeEmpty': 'Το όνομα χρήστη δεν μπορεί να είναι κενό', @@ -489,16 +973,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 +1013,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 +1205,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 +1230,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 +1256,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 +1353,7 @@ const Map elGR = { "autoInputCode": "Αυτόματη εισαγωγή κωδικού", "skipBinding": "Παράλειψη σύνδεσης", "rescan": "Επανάληψη σάρωσης", - "skip": "Παράλειψη", + "verifyingDevice": "Επαλήθευση συσκευής...", "confirmBinding": "Επιβεβαίωση σύνδεσης", "associatingDevice": "Συσχέτιση συσκευής...", @@ -747,17 +1385,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 +1418,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 +1439,7 @@ const Map elGR = { 'feedbackRequired': 'Εισάγετε περιεχόμενο σχολίων', 'contactInfo': 'Στοιχεία επικοινωνίας', 'contactHint': 'Email/τηλέφωνο, για να μπορούμε να επικοινωνήσουμε μαζί σας', - //'submit': 'Υποβολή', // 已存在,使用现有键 + 'submit': 'Υποβολή', 'feedbackSubmitSuccess': 'Επιτυχής υποβολή σχολίων, ευχαριστούμε!', 'feedbackSubmitFailed': 'Αποτυχία υποβολής σχολίων, δοκιμάστε ξανά αργότερα', @@ -806,6 +1457,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 +1519,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/es_es.dart b/lib/core/translations/language/es_es.dart index 76bbcc07a..0b502f683 100644 --- a/lib/core/translations/language/es_es.dart +++ b/lib/core/translations/language/es_es.dart @@ -90,8 +90,7 @@ const Map esES = { "tip": "Consejo", "pleaseEnterCompleteCode": "Ingresa el código de verificación completo", "loginFailed": "Inicio de sesión fallido, inténtalo de nuevo", - 'pleaseAcceptPrivacyPolicy': - 'Lee y acepta primero la política de privacidad y el acuerdo de usuario', + 'pleaseAcceptPrivacyPolicy': 'Lee y acepta primero la política de privacidad y el acuerdo de usuario', "enterVerificationCode": "Ingresa código de verificación", "verificationCodeSentTo": "Código de verificación enviado a", "resendVerificationCode": "Reenviar código de verificación", @@ -100,10 +99,9 @@ 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", // 《用户协议》 - 已存在,使用现有键 + "welcomeToThisApp": "Bienvenido a Voitrans, lee cuidadosamente", // 欢迎使用Voitrans,请充分阅读 + // "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", // 不同意 @@ -117,29 +115,24 @@ const Map esES = { "signal": "Señal", "deviceId": "ID del dispositivo", "firmwareVersion": "Versión del firmware", - "disconnectedDevice": - "Ningún dispositivo conectado, haz clic en el botón de abajo", + "disconnectedDevice": "Ningún dispositivo conectado, haz clic en el botón de abajo", "connectDevice": "Conectar dispositivo", "topAiExperiences": "Mejores experiencias de IA", "aiAssistant": "Asistente de IA", "aiAssistantInfo": "Consejero personal 24 horas para preguntas y consejos", "interpretation": "Interpretación simultánea", - "simultaneousInterpretationInfo": - "Traducción en tiempo real para más de 80 idiomas", + "simultaneousInterpretationInfo": "Traducción en tiempo real para más de 80 idiomas", "aiCompanion": "Compañía parental", "aiCompanionInfo": "Te entiende y ofrece compañía cálida", "homeSlogan": "Conectando el mundo, más allá del sonido", - "turnEarphones": - "Abre el estuche de los auriculares y colócalos en tus oídos", + "turnEarphones": "Abre el estuche de los auriculares y colócalos en tus oídos", "currentlyConnected": "Actualmente conectado:", "unsystemSetup": "Ir a configuración del sistema", "talkLater": "Recordar más tarde", "initializing": "Inicializando...", - "bluetoothInitializationFailure": - "Fallo en la inicialización del servicio Bluetooth", + "bluetoothInitializationFailure": "Fallo en la inicialización del servicio Bluetooth", "checkingPermissions": "Verificando permisos...", - "lackPermissions": - "Habilita permisos de Bluetooth y ubicación para descubrir y conectar dispositivos cercanos", + "lackPermissions": "Habilita permisos de Bluetooth y ubicación para descubrir y conectar dispositivos cercanos", "searchingDevice": "Buscando dispositivos...", "findConnectedDevice": "Dispositivo conectado encontrado", "notFound": "No se encontraron dispositivos Bluetooth conectados", @@ -176,18 +169,204 @@ const Map esES = { "faceToFaceTranslation": "Traducción cara a cara", 'audioVideoTranslation': 'Traducción de audio/video', 'callTranslation': 'Traducción de llamadas', - "simultaneousTranslationInfo": - "Traducción instantánea para más de 80 idiomas", + "simultaneousTranslationInfo": "Traducción instantánea para más de 80 idiomas", "aiGirlfriend": "Compañía parental", "aiGirlfriendInfo": "Compañía inteligente, chat en cualquier momento", "healthConsultant": "Chat multifuncional de IA", "healthConsultantInfo": "Más funciones de chat de IA", "conferenceAssistant": "Asistente de reuniones de negocios", - "conferenceAssistantInfo": - "Grabación de actas en tiempo real y traducción multiidioma", + "conferenceAssistantInfo": "Grabación de actas en tiempo real y traducción multiidioma", "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 +381,225 @@ 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", @@ -221,22 +612,18 @@ const Map esES = { "privacySettings": "Configuración de privacidad", "privacySettingsInfo": "Gestionar recopilación de datos y permisos", "permissionManagement": "Gestión de permisos", // 权限管理 - "permissionManagementInfo": - "Gestionar configuración de permisos de la aplicación", // 管理应用权限设置 + "permissionManagementInfo": "Gestionar configuración de permisos de la aplicación", // 管理应用权限设置 "aboutApplication": "Acerca de", "versions": "Versión", "checkUpdates": "Verificar actualizaciones", "selectLanguage": "Seleccionar idioma", "voiceService": "Servicio de voz", - "voiceServiceInfo": - "Seleccionar servicio de reconocimiento y síntesis de voz", + "voiceServiceInfo": "Seleccionar servicio de reconocimiento y síntesis de voz", "selectVoiceService": "Seleccionar servicio de voz", "azureVoiceService": "Servicio de voz Azure", - "azureVoiceServiceInfo": - "Servicio en la nube de Microsoft que soporta síntesis y reconocimiento de voz de alta calidad", + "azureVoiceServiceInfo": "Servicio en la nube de Microsoft que soporta síntesis y reconocimiento de voz de alta calidad", "flutterVoiceService": "Servicio de voz local", - "flutterVoiceServiceInfo": - "Servicio de voz local del dispositivo sin necesidad de conexión a internet", + "flutterVoiceServiceInfo": "Servicio de voz local del dispositivo sin necesidad de conexión a internet", 'timbreService': 'Servicio de timbre de voz', 'timbreServiceInfo': 'Seleccionar servicio de síntesis de voz', 'defaultTimbre': 'Timbre predeterminado', @@ -246,12 +633,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,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Experimenta la función de interacción de voz inteligente (vista previa de función)", + "realtimeVoiceChatInfo": "Experimenta la función de interacción de voz inteligente (vista previa de función)", "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 +697,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' @@ -316,17 +721,12 @@ const Map esES = { '• Control de funciones de auriculares\n\n' '¿En qué puedo ayudarte?', 'microphonePermission': 'Micrófono', - 'voiceRecognitionPermissionText': - 'La función de reconocimiento de voz necesita acceso al micrófono.', - 'voiceTranslationPermissionText': - 'Las funciones de reconocimiento de voz y traducción necesitan acceso al micrófono.', - 'phoneCallPermissionText': - 'La función de llamadas telefónicas necesita acceso al micrófono para llamadas de voz.', - 'permissionDeniedText': - 'Has denegado permanentemente el permiso del micrófono, ve a la configuración del sistema para habilitarlo.', + 'voiceRecognitionPermissionText': 'La función de reconocimiento de voz necesita acceso al micrófono.', + 'voiceTranslationPermissionText': 'Las funciones de reconocimiento de voz y traducción necesitan acceso al micrófono.', + 'phoneCallPermissionText': 'La función de llamadas telefónicas necesita acceso al micrófono para llamadas de voz.', + 'permissionDeniedText': 'Has denegado permanentemente el permiso del micrófono, ve a la configuración del sistema para habilitarlo.', 'startVoiceInput': 'Iniciar entrada de voz', - 'startPhoneCallMode': - 'Iniciar modo de llamada telefónica, iniciar entrada de voz', + 'startPhoneCallMode': 'Iniciar modo de llamada telefónica, iniciar entrada de voz', // Agent 全屏编辑器 'fullScreenEditorHint': 'Ingresa tu mensaje aquí...', // 全屏编辑器输入提示 @@ -339,7 +739,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', @@ -347,9 +747,8 @@ const Map esES = { 'privacyRelated': 'Relacionado con privacidad', 'copyrightViolation': 'Violación de mis derechos de autor, reputación, etc.', 'other': 'Otro', - 'reportDescriptionHint': - 'Queremos conocer la razón de tu reporte, puedes describir el problema que encontraste.', - 'submit': 'Enviar', + 'reportDescriptionHint': 'Queremos conocer la razón de tu reporte, puedes describir el problema que encontraste.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Generado por IA', @@ -379,24 +778,15 @@ const Map esES = { 'highest': 'Máxima', 'lowest': 'Mínima', 'futureForecast': 'Pronóstico futuro', - 'hotWeatherTip': - 'Hoy hace calor, presta atención a la protección contra el calor, bebe más agua para evitar golpes de calor', - 'coldWeatherTip': - 'Hoy la temperatura es baja, abrígate bien cuando salgas, ten cuidado de no resfriarte', - 'rainyWeatherTip': - 'Hoy llueve, lleva paraguas cuando salgas, ten cuidado con la seguridad', - 'snowyWeatherTip': - 'Hoy nieva, la carretera está resbaladiza, ten cuidado con la seguridad, abrígate bien', - 'foggyWeatherTip': - 'Hoy hay niebla, la visibilidad es baja, usa mascarilla cuando salgas', - 'windyWeatherTip': - 'Hoy hay viento fuerte, ten cuidado con la seguridad cuando salgas, asegura bien las cosas', - 'sunnyWeatherTip': - 'Hoy el sol es fuerte y la radiación UV es intensa, protégete del sol cuando salgas', - 'temperatureDifferenceTip': - 'Hoy hay gran diferencia entre la temperatura diurna y nocturna, ajusta la ropa a tiempo', - 'comfortableWeatherTip': - 'Hoy el clima es cómodo, es buen momento para actividades al aire libre', + 'hotWeatherTip': 'Hoy hace calor, presta atención a la protección contra el calor, bebe más agua para evitar golpes de calor', + 'coldWeatherTip': 'Hoy la temperatura es baja, abrígate bien cuando salgas, ten cuidado de no resfriarte', + 'rainyWeatherTip': 'Hoy llueve, lleva paraguas cuando salgas, ten cuidado con la seguridad', + 'snowyWeatherTip': 'Hoy nieva, la carretera está resbaladiza, ten cuidado con la seguridad, abrígate bien', + 'foggyWeatherTip': 'Hoy hay niebla, la visibilidad es baja, usa mascarilla cuando salgas', + 'windyWeatherTip': 'Hoy hay viento fuerte, ten cuidado con la seguridad cuando salgas, asegura bien las cosas', + 'sunnyWeatherTip': 'Hoy el sol es fuerte y la radiación UV es intensa, protégete del sol cuando salgas', + 'temperatureDifferenceTip': 'Hoy hay gran diferencia entre la temperatura diurna y nocturna, ajusta la ropa a tiempo', + 'comfortableWeatherTip': 'Hoy el clima es cómodo, es buen momento para actividades al aire libre', "monday": "Lunes", "tuesday": "Martes", "wednesday": "Miércoles", @@ -404,6 +794,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", @@ -435,33 +836,28 @@ const Map esES = { "notSet": "No establecido", "accountSetting": "Configuración de cuenta", "logout": "Cerrar sesión", - "logoutTips": - "¿Estás seguro de que quieres cerrar sesión de la cuenta actual?", + "logoutTips": "¿Estás seguro de que quieres cerrar sesión de la cuenta actual?", 'deleteAccount': 'Eliminar cuenta', - 'deleteAccountTips': - '¿Estás seguro de que quieres eliminar permanentemente tu cuenta? Esta acción no se puede deshacer', + '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': - 'Fallo de conexión de red, verifica la configuración de red e inténtalo de nuevo', - 'serverTemporarilyUnavailable': - 'El servidor no puede responder temporalmente, inténtalo de nuevo más tarde', + 'networkConnectionFailed': 'Fallo de conexión de red, verifica la configuración de red e inténtalo de nuevo', + 'serverTemporarilyUnavailable': 'El servidor no puede responder temporalmente, inténtalo de nuevo más tarde', 'loginExpiredPleaseRelogin': 'Sesión expirada, inicia sesión de nuevo', 'noPermissionForThisOperation': 'Sin permiso para esta operación', 'requestedResourceNotFound': 'El recurso solicitado no existe', - 'imageProcessingFailedPleaseReselect': - 'Fallo en el procesamiento de imagen, selecciona imagen de nuevo', + 'imageProcessingFailedPleaseReselect': 'Fallo en el procesamiento de imagen, selecciona imagen de nuevo', 'operationFailedPleaseRetry': 'Operación fallida, inténtalo de nuevo', 'serverReturnedError': 'El servidor devolvió un error', 'serverError': 'Error del servidor', - 'networkConnectionFailedCheckSettings': - 'Fallo de conexión de red, verifica la configuración de red', - 'serverInternalErrorRetryLater': - 'Error interno del servidor, inténtalo de nuevo más tarde', + 'networkConnectionFailedCheckSettings': 'Fallo de conexión de red, verifica la configuración de red', + 'serverInternalErrorRetryLater': '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', @@ -476,72 +872,106 @@ const Map esES = { // 账号服务相关 'clearUserDataFailed': 'Fallo al limpiar datos de usuario', // 清理用户数据失败 'deleteUserDataFailed': 'Fallo al eliminar datos de usuario', // 删除用户数据失败 - 'thirdPartyLogoutSuccess': - 'Cierre de sesión de terceros exitoso', // 第三方登录退出成功 - 'thirdPartyLogoutFailed': - 'Fallo en el cierre de sesión de terceros', // 第三方登录退出失败 + 'thirdPartyLogoutSuccess': 'Cierre de sesión de terceros exitoso', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'Fallo en el cierre de sesión de terceros', // 第三方登录退出失败 'signOutProcessError': 'Error en el proceso de cierre de sesión', // 登出过程发生错误 - 'deleteAccountProcessError': - 'Error en el proceso de eliminación de cuenta', // 删除账号过程发生错误 + 'deleteAccountProcessError': 'Error en el proceso de eliminación de cuenta', // 删除账号过程发生错误 'userDataClearSuccess': 'Limpieza de datos de usuario exitosa', // 用户数据清理成功 - 'allUserDataClearSuccess': - 'Limpieza de todos los datos de usuario exitosa', // 所有用户数据清理成功 - 'accountServiceInitialized': - 'AccountService inicializado', // AccountService 已初始化 + 'allUserDataClearSuccess': 'Limpieza de todos los datos de usuario exitosa', // 所有用户数据清理成功 + 'accountServiceInitialized': 'AccountService inicializado', // AccountService 已初始化 // 权限管理页面 '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', - 'calendarWritePermissionDesc': - 'Se usa para crear eventos y recordatorios del calendario', - 'calendarFullAccessPermissionDesc': - 'Se usa para leer y gestionar eventos y recordatorios del calendario', - 'locationPermissionDesc': - 'Se usa para obtener información de ubicación actual', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Se usa para crear eventos y recordatorios del calendario', + 'calendarFullAccessPermissionDesc': 'Se usa para leer y gestionar eventos y recordatorios del calendario', + 'locationPermissionDesc': 'Se usa para obtener información de ubicación actual', 'appFunctionNeeds': 'La función de la aplicación necesita', 'authorized': 'Autorizado', 'unauthorized': 'No autorizado', - 'needOpenInSystemSettings': - 'Necesita habilitarse en configuración del sistema', + 'needOpenInSystemSettings': 'Necesita habilitarse en configuración del sistema', 'partialAuthorization': 'Autorización parcial', 'unknownStatus': 'Estado desconocido', 'permissionGranted': 'Permiso otorgado', 'permissionRequestError': 'Error en solicitud de permiso', - 'phonePermissionDetailDesc': - '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', - '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', - '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', + 'phonePermissionDetailDesc': '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', // 稍后提醒按钮 'updateNow': 'Actualizar ahora', // 立即更新按钮 'checkUpdate': 'Verificar actualizaciones', // 检查更新按钮 'updateFailed': 'Actualización fallida', // 更新失败提示 - 'cannotOpenAppStore': - 'No se puede abrir la tienda de aplicaciones, ve manualmente a la tienda para actualizar', // 无法打开应用商店提示 - 'updateErrorRetry': - 'Ocurrió un error durante la actualización, inténtalo de nuevo más tarde', // 更新错误重试提示 + 'cannotOpenAppStore': 'No se puede abrir la tienda de aplicaciones, ve manualmente a la tienda para actualizar', // 无法打开应用商店提示 + 'updateErrorRetry': 'Ocurrió un error durante la actualización, inténtalo de nuevo más tarde', // 更新错误重试提示 //国家列表 "邮箱": "Email", @@ -650,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "¿Estás seguro de que quieres limpiar todo el historial de traducción? Esta operación no se puede deshacer.", "unknownLanguage": "Idioma desconocido", "deleteSessionRecord": "Eliminar registro de sesión", - "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.", + "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.", + + // 图片翻译模块(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", - // 翻译录音文件列表页 (translation_list_view.dart) + // 翻译录音文件列表页 "translateAudioFiles": "Traducir archivos de audio", "noAudioFiles": "Sin archivos de audio", "calculating": "Calculando...", @@ -686,8 +1189,7 @@ const Map esES = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Registro original", "recordSummary": "Resumen del registro", - "clickToGenerateSummary": - "Haz clic en el botón de abajo para generar resumen de sesión", + "clickToGenerateSummary": "Haz clic en el botón de abajo para generar resumen de sesión", "summaryContent": "Contenido del resumen", "copied": "Copiado", "summaryCopiledToClipboard": "Resumen copiado al portapapeles", @@ -695,11 +1197,9 @@ const Map esES = { "summaryGenerated": "Resumen generado", "generating": "Generando...", "regenerate": "Regenerar", - "summaryTimeoutMessage": - "Solicitud de generación de resumen expirada, posiblemente debido a problema de red o sobrecarga del servidor.", + "summaryTimeoutMessage": "Solicitud de generación de resumen expirada, posiblemente debido a problema de red o sobrecarga del servidor.", "deleteTranslationRecord": "Eliminar registro de traducción", - "deleteTranslationConfirm": - "¿Estás seguro de que quieres eliminar este registro de traducción? Esta operación no se puede deshacer.", + "deleteTranslationConfirm": "¿Estás seguro de que quieres eliminar este registro de traducción? Esta operación no se puede deshacer.", "originalText": "Texto original", "translatedText": "Texto traducido", "sessionSummary": "Resumen de sesión", @@ -717,7 +1217,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...", @@ -727,43 +1227,34 @@ const Map esES = { // 配对状态文本 "readyToPair": "Listo para emparejar", "preparingPairingEnvironment": "Preparando entorno de emparejamiento...", - "connectDeepSoundViaSystemBluetooth": - "Conecta primero el dispositivo Voitrans a través del Bluetooth del sistema", + "connectDeepSoundViaSystemBluetooth": "Conecta primero el dispositivo Voitrans a través del Bluetooth del sistema", "deviceBindingConfirm": "Confirmación de vinculación de dispositivo...", "establishingDeviceAssociation": "Estableciendo asociación de dispositivo...", "waitingCompletePairing": "Espera por favor, completando emparejamiento...", - "pairingSuccessRedirecting": - "¡Emparejamiento exitoso! Redirigiendo a página principal...", + "pairingSuccessRedirecting": "¡Emparejamiento exitoso! Redirigiendo a página principal...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Asegúrate de que el dispositivo conectado sea Voitrans", - "deviceAlreadyBoundToOtherAccount": - "Este dispositivo ya está vinculado a otra cuenta", - "deviceAssociationFailed": - "Fallo en la asociación del dispositivo, inténtalo de nuevo", - "scanTimeoutEnsureDeviceNearby": - "Tiempo de escaneo agotado, asegúrate de que el dispositivo esté cerca", + "ensureConnectedDeepSoundDevice": "Asegúrate de que el dispositivo conectado sea Voitrans", + "deviceAlreadyBoundToOtherAccount": "Este dispositivo ya está vinculado a otra cuenta", + "deviceAssociationFailed": "Fallo en la asociación del dispositivo, inténtalo de nuevo", + "scanTimeoutEnsureDeviceNearby": "Tiempo de escaneo agotado, asegúrate de que el dispositivo esté cerca", "networkError": "Error de red", - "authorizationFailedCheckCode": - "Fallo en la autorización, verifica si el código de autorización es correcto", + "authorizationFailedCheckCode": "Fallo en la autorización, verifica si el código de autorización es correcto", "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...', + 'ensureHeadsetOnAndPairingMode': 'Asegúrate de que los auriculares estén encendidos y en modo de emparejamiento', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Estableciendo conexión segura...', - 'needManualBindingAuthCode': - 'Necesita código de autorización de vinculación manual...', + 'needManualBindingAuthCode': 'Necesita código de autorización de vinculación manual...', 'pairingSuccessful': '¡Emparejamiento exitoso!', 'enableBluetooth': 'Habilitar Bluetooth', 'grantPermissions': 'Otorgar permisos', @@ -775,14 +1266,20 @@ const Map esES = { 'verificationFailedRetry': 'Verificación fallida, inténtalo de nuevo', 'invalidDeviceAddress': 'Dirección de dispositivo inválida', 'bleDeviceAssociationFailed': 'Fallo en la asociación del dispositivo BLE', - 'deviceAssociationFailedRetry': - 'Fallo en la asociación del dispositivo, inténtalo de nuevo', - 'bleConnectionTimeoutRetry': - 'Tiempo de conexión BLE agotado, inténtalo de nuevo', + 'deviceAssociationFailedRetry': 'Fallo en la asociación del dispositivo, inténtalo de nuevo', + 'bleConnectionTimeoutRetry': 'Tiempo de conexión BLE agotado, inténtalo de nuevo', 'blePairingStartupFailed': 'Fallo en el inicio del emparejamiento BLE', 'bleConnectionFailed': 'Fallo en la conexión BLE', - 'deviceAuthorizationFailedCheckCode': - 'Fallo en la autorización del dispositivo, verifica el código de autorización', + '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", @@ -792,14 +1289,12 @@ 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', + 'feedbackSubmitFailed': 'Fallo al enviar comentarios, inténtalo de nuevo más tarde', // OTA升级模块 - "upgradeExitConfirm": - "Actualización en progreso, salir interrumpirá el proceso de actualización, ¿estás seguro de que quieres salir?", + "upgradeExitConfirm": "Actualización en progreso, salir interrumpirá el proceso de actualización, ¿estás seguro de que quieres salir?", "deviceModel": "Modelo del dispositivo", "unknownDevice": "Dispositivo desconocido", "currentFirmwareVersion": "Versión actual del firmware", @@ -811,13 +1306,15 @@ const Map esES = { "connectionFailed": "Fallo de conexión", "retryConnection": "Reintentar conexión", "ota_updateNow": "Actualizar ahora", - "keepConnectedDontClose": - "Mantén el dispositivo conectado, no cierres la aplicació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": "Mantén el dispositivo conectado, no cierres la aplicación", "doNotDisconnect": "No desconectes", "charging": "Cargando", "updateContent": "Contenido de actualización", - "removeEarbudsEnsureBattery": - "Retira ambos auriculares y asegúrate de que la batería de ambos esté por encima del 20%", + "removeEarbudsEnsureBattery": "Retira ambos auriculares y asegúrate de que la batería de ambos esté por encima del 20%", // 音乐列表页面 "noMusic": "Sin música", // 暂无音乐 @@ -866,38 +1363,21 @@ 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..754fbf688 100644 --- a/lib/core/translations/language/et_ee.dart +++ b/lib/core/translations/language/et_ee.dart @@ -90,8 +90,7 @@ const Map etEE = { "tip": "Nõuanne", "pleaseEnterCompleteCode": "Sisesta täielik kinnituskood", "loginFailed": "Sisselogimine ebaõnnestus, proovi uuesti", - 'pleaseAcceptPrivacyPolicy': - 'Loe ja nõustu esmalt privaatsuspoliitika ja kasutajalepinguga', + 'pleaseAcceptPrivacyPolicy': 'Loe ja nõustu esmalt privaatsuspoliitika ja kasutajalepinguga', "enterVerificationCode": "Sisesta kinnituskood", "verificationCodeSentTo": "Kinnituskood saadetud aadressile", "resendVerificationCode": "Saada kinnituskood uuesti", @@ -100,10 +99,9 @@ const Map etEE = { // 隐私政策弹窗 "loginDeclaration": "Voitrans avaldus", // Voitrans 声明 - "welcomeToThisApp": - "Tere tulemast Voitrans'i, loe hoolikalt", // 欢迎使用Voitrans,请充分阅读 - // "privacyPolicy": "Privaatsuspoliitika", // 《隐私政策》 - 已存在,使用现有键 - // "userAgreement": "Kasutajaleping", // 《用户协议》 - 已存在,使用现有键 + "welcomeToThisApp": "Tere tulemast Voitrans'i, loe hoolikalt", // 欢迎使用Voitrans,请充分阅读 + // "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", // 不同意 @@ -132,8 +130,7 @@ const Map etEE = { "unsystemSetup": "Mine süsteemi seadetesse", "talkLater": "Tuleta hiljem meelde", "initializing": "Lähtestamine...", - "bluetoothInitializationFailure": - "Bluetooth teenuse lähtestamine ebaõnnestus", + "bluetoothInitializationFailure": "Bluetooth teenuse lähtestamine ebaõnnestus", "checkingPermissions": "Lubade kontrollimine...", "lackPermissions": "Puuduvad Bluetooth lubad ja luba kasutamiseks loetakse", "searchingDevice": "Seadmete otsimine...", @@ -178,11 +175,198 @@ const Map etEE = { "healthConsultant": "Mitmefunktsionaalne AI vestlus", "healthConsultantInfo": "Rohkem AI vestluse funktsioone", "conferenceAssistant": "Ärikoosoleku assistent", - "conferenceAssistantInfo": - "Reaalajas protokolli salvestamine ja mitmekeelne tõlge", + "conferenceAssistantInfo": "Reaalajas protokolli salvestamine ja mitmekeelne tõlge", "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 +381,225 @@ 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", @@ -225,11 +621,9 @@ const Map etEE = { "voiceServiceInfo": "Vali häältuvastuse ja sünteesi teenus", "selectVoiceService": "Vali hääleteenused", "azureVoiceService": "Azure hääleteenused", - "azureVoiceServiceInfo": - "Microsofti pilveteenus, mis toetab kvaliteetset häälsünteesi ja -tuvastust", + "azureVoiceServiceInfo": "Microsofti pilveteenus, mis toetab kvaliteetset häälsünteesi ja -tuvastust", "flutterVoiceService": "Kohalik hääleteenused", - "flutterVoiceServiceInfo": - "Seadme kohalik hääleteenused ilma internetiühenduseta", + "flutterVoiceServiceInfo": "Seadme kohalik hääleteenused ilma internetiühenduseta", 'timbreService': 'Hääletämber teenus', 'timbreServiceInfo': 'Vali häälsünteesi teenus', 'defaultTimbre': 'Vaikimisi tämber', @@ -239,11 +633,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,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Koge nutika häälinteraktsiooni funktsiooni (funktsiooni eelvaade)", + "realtimeVoiceChatInfo": "Koge nutika häälinteraktsiooni funktsiooni (funktsiooni eelvaade)", "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 +697,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' @@ -308,14 +721,10 @@ const Map etEE = { '• Kõrvaklappide funktsioonide kontroll\n\n' 'Kuidas saan sind aidata?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': - 'Häältuvastuse funktsioon vajab mikrofoni ligipääsu.', - 'voiceTranslationPermissionText': - 'Häältuvastuse ja tõlke funktsioonid vajavad mikrofoni ligipääsu.', - 'phoneCallPermissionText': - 'Telefonikõnede funktsioon vajab mikrofoni ligipääsu häälkõnede jaoks.', - 'permissionDeniedText': - 'Oled püsivalt keeldunud mikrofoni loast, mine süsteemi seadetesse selle lubamiseks.', + 'voiceRecognitionPermissionText': 'Häältuvastuse funktsioon vajab mikrofoni ligipääsu.', + 'voiceTranslationPermissionText': 'Häältuvastuse ja tõlke funktsioonid vajavad mikrofoni ligipääsu.', + 'phoneCallPermissionText': 'Telefonikõnede funktsioon vajab mikrofoni ligipääsu häälkõnede jaoks.', + 'permissionDeniedText': 'Oled püsivalt keeldunud mikrofoni loast, mine süsteemi seadetesse selle lubamiseks.', 'startVoiceInput': 'Alusta häälsisestust', 'startPhoneCallMode': 'Alusta telefonikõne režiimi, alusta häälsisestust', @@ -330,7 +739,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', @@ -338,9 +747,8 @@ const Map etEE = { 'privacyRelated': 'Privaatsusega seotud', 'copyrightViolation': 'Minu autoriõiguste, maine jms rikkumine', 'other': 'Muu', - 'reportDescriptionHint': - 'Tahame teada teate põhjust, võid kirjeldada probleemi, millega kokku puutusid.', - 'submit': 'Esita', + 'reportDescriptionHint': 'Tahame teada teate põhjust, võid kirjeldada probleemi, millega kokku puutusid.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'AI poolt genereeritud', @@ -370,21 +778,14 @@ const Map etEE = { 'highest': 'Kõrgeim', 'lowest': 'Madalaim', 'futureForecast': 'Tuleviku prognoos', - 'hotWeatherTip': - 'Täna on kuum, pööra tähelepanu kuumakaitsele, joo rohkem vett kuumalöögi vältimiseks', - 'coldWeatherTip': - 'Täna on temperatuur madal, riietumine soojalt välja minnes, ettevaatust külmetusega', - 'rainyWeatherTip': - 'Täna sajab vihma, võta vihmavari kaasa välja minnes, ole ettevaatlik ohutusega', - 'snowyWeatherTip': - 'Täna sajab lund, tee on libe, ole ettevaatlik ohutusega, riietumine soojalt', + 'hotWeatherTip': 'Täna on kuum, pööra tähelepanu kuumakaitsele, joo rohkem vett kuumalöögi vältimiseks', + 'coldWeatherTip': 'Täna on temperatuur madal, riietumine soojalt välja minnes, ettevaatust külmetusega', + 'rainyWeatherTip': 'Täna sajab vihma, võta vihmavari kaasa välja minnes, ole ettevaatlik ohutusega', + 'snowyWeatherTip': 'Täna sajab lund, tee on libe, ole ettevaatlik ohutusega, riietumine soojalt', 'foggyWeatherTip': 'Täna on udu, nähtavus on halb, kanna maski välja minnes', - 'windyWeatherTip': - 'Täna on tugev tuul, ole ettevaatlik ohutusega välja minnes, kinnita asjad hästi', - 'sunnyWeatherTip': - 'Täna on päike tugev ja UV-kiirgus intensiivne, kaitse end päikese eest välja minnes', - 'temperatureDifferenceTip': - 'Täna on suur erinevus päeva- ja öise temperatuuri vahel, lisa või eemalda riideid õigeaegselt', + 'windyWeatherTip': 'Täna on tugev tuul, ole ettevaatlik ohutusega välja minnes, kinnita asjad hästi', + 'sunnyWeatherTip': 'Täna on päike tugev ja UV-kiirgus intensiivne, kaitse end päikese eest välja minnes', + 'temperatureDifferenceTip': 'Täna on suur erinevus päeva- ja öise temperatuuri vahel, lisa või eemalda riideid õigeaegselt', 'comfortableWeatherTip': 'Täna on ilm mugav, hea aeg õuetegevusteks', "monday": "Esmaspäev", "tuesday": "Teisipäev", @@ -393,6 +794,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", @@ -426,30 +838,26 @@ const Map etEE = { "logout": "Logi välja", "logoutTips": "Kas oled kindel, et tahad praegusest kontost välja logida?", 'deleteAccount': 'Kustuta konto', - 'deleteAccountTips': - 'Kas oled kindel, et tahad oma konto jäädavalt kustutada? Seda toimingut ei saa tagasi võtta', + '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': - 'Võrguühendus ebaõnnestus, kontrolli võrgu seadeid ja proovi uuesti', - 'serverTemporarilyUnavailable': - 'Server ei saa ajutiselt vastata, proovi hiljem uuesti', + 'networkConnectionFailed': 'Võrguühendus ebaõnnestus, kontrolli võrgu seadeid ja proovi uuesti', + 'serverTemporarilyUnavailable': 'Server ei saa ajutiselt vastata, proovi hiljem uuesti', 'loginExpiredPleaseRelogin': 'Sisselogimine aegunud, logi uuesti sisse', 'noPermissionForThisOperation': 'Pole luba selle toimingu jaoks', 'requestedResourceNotFound': 'Taotletud ressurss ei eksisteeri', - 'imageProcessingFailedPleaseReselect': - 'Pildi töötlemine ebaõnnestus, vali pilt uuesti', + 'imageProcessingFailedPleaseReselect': 'Pildi töötlemine ebaõnnestus, vali pilt uuesti', 'operationFailedPleaseRetry': 'Toiming ebaõnnestus, proovi uuesti', 'serverReturnedError': 'Server tagastas vea', 'serverError': 'Serveri viga', - 'networkConnectionFailedCheckSettings': - 'Võrguühendus ebaõnnestus, kontrolli võrgu seadeid', - 'serverInternalErrorRetryLater': - 'Serveri sisemine viga, proovi hiljem uuesti', + 'networkConnectionFailedCheckSettings': 'Võrguühendus ebaõnnestus, kontrolli võrgu seadeid', + 'serverInternalErrorRetryLater': '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', @@ -464,34 +872,38 @@ const Map etEE = { // 账号服务相关 'clearUserDataFailed': 'Kasutajaandmete tühjendamine ebaõnnestus', // 清理用户数据失败 'deleteUserDataFailed': 'Kasutajaandmete kustutamine ebaõnnestus', // 删除用户数据失败 - 'thirdPartyLogoutSuccess': - 'Kolmanda osapoole väljalogimine õnnestus', // 第三方登录退出成功 - 'thirdPartyLogoutFailed': - 'Kolmanda osapoole väljalogimine ebaõnnestus', // 第三方登录退出失败 + 'thirdPartyLogoutSuccess': 'Kolmanda osapoole väljalogimine õnnestus', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': 'Kolmanda osapoole väljalogimine ebaõnnestus', // 第三方登录退出失败 'signOutProcessError': 'Väljalogimine protsessi viga', // 登出过程发生错误 'deleteAccountProcessError': 'Konto kustutamise protsessi viga', // 删除账号过程发生错误 'userDataClearSuccess': 'Kasutajaandmete tühjendamine õnnestus', // 用户数据清理成功 - 'allUserDataClearSuccess': - 'Kõigi kasutajaandmete tühjendamine õnnestus', // 所有用户数据清理成功 - 'accountServiceInitialized': - 'AccountService lähtestatud', // AccountService 已初始化 + 'allUserDataClearSuccess': 'Kõigi kasutajaandmete tühjendamine õnnestus', // 所有用户数据清理成功 + 'accountServiceInitialized': 'AccountService lähtestatud', // AccountService 已初始化 // 权限管理页面 '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', - 'calendarWritePermissionDesc': - 'Kasutatakse kalendri sündmuste ja meeldetuletuste loomiseks', - 'calendarFullAccessPermissionDesc': - 'Kasutatakse kalendri sündmuste ja meeldetuletuste lugemiseks ja haldamiseks', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Kasutatakse kalendri sündmuste ja meeldetuletuste loomiseks', + 'calendarFullAccessPermissionDesc': 'Kasutatakse kalendri sündmuste ja meeldetuletuste lugemiseks ja haldamiseks', 'locationPermissionDesc': 'Kasutatakse praeguse asukoha info hankimiseks', 'appFunctionNeeds': 'Rakenduse funktsioon vajab', 'authorized': 'Autoriseeritud', @@ -503,27 +915,63 @@ const Map etEE = { 'permissionRequestError': 'Loa taotluse viga', 'phonePermissionDetailDesc': 'Telefonikõnede funktsioon vajab telefoni luba', 'smsPermissionDetailDesc': 'SMS saatmise funktsioon vajab SMS luba', - 'calendarWritePermissionDetailDesc': - 'Kalendri sündmuste loomine vajab kalendri kirjutamise luba', - 'calendarFullAccessPermissionDetailDesc': - 'Kalendri sündmuste haldamine vajab kalendri täielikku 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', - 'appNeedsPermissionForFullFunction': - 'Rakendus vajab seda luba täieliku funktsionaalsuse pakkumiseks', - 'permanentDenialText': - 'Oled püsivalt keeldunud {permission} loast, mine rakenduse seadetesse selle lubamiseks', + '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', // 稍后提醒按钮 'updateNow': 'Uuenda kohe', // 立即更新按钮 'checkUpdate': 'Kontrolli uuendusi', // 检查更新按钮 'updateFailed': 'Uuendamine ebaõnnestus', // 更新失败提示 - 'cannotOpenAppStore': - 'Ei saa rakenduste poodi avada, mine käsitsi poodi uuendamiseks', // 无法打开应用商店提示 - 'updateErrorRetry': - 'Uuendamisel tekkis viga, proovi hiljem uuesti', // 更新错误重试提示 + 'cannotOpenAppStore': 'Ei saa rakenduste poodi avada, mine käsitsi poodi uuendamiseks', // 无法打开应用商店提示 + 'updateErrorRetry': 'Uuendamisel tekkis viga, proovi hiljem uuesti', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -632,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Kas oled kindel, et tahad kogu tõlke ajaloo tühjendada? Seda toimingut ei saa tagasi võtta.", "unknownLanguage": "Tundmatu keel", "deleteSessionRecord": "Kustuta seansi kirje", - "deleteSessionConfirm": - "Kas oled kindel, et tahad kõik selle seansi tõlke kirjed kustutada? Seda toimingut ei saa tagasi võtta.", + "deleteSessionConfirm": "Kas oled kindel, et tahad kõik selle seansi tõlke kirjed kustutada? Seda toimingut ei saa tagasi võtta.", + + // 图片翻译模块(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", - // 翻译录音文件列表页 (translation_list_view.dart) + // 翻译录音文件列表页 "translateAudioFiles": "Tõlgi helifailid", "noAudioFiles": "Helifaile pole", "calculating": "Arvutamine...", @@ -668,8 +1189,7 @@ const Map etEE = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Algne kirje", "recordSummary": "Kirje kokkuvõte", - "clickToGenerateSummary": - "Klõpsa alloleval nupul seansi kokkuvõtte genereerimiseks", + "clickToGenerateSummary": "Klõpsa alloleval nupul seansi kokkuvõtte genereerimiseks", "summaryContent": "Kokkuvõtte sisu", "copied": "Kopeeritud", "summaryCopiledToClipboard": "Kokkuvõte kopeeritud lõikelauale", @@ -677,11 +1197,9 @@ const Map etEE = { "summaryGenerated": "Kokkuvõte genereeritud", "generating": "Genereerimine...", "regenerate": "Genereeri uuesti", - "summaryTimeoutMessage": - "Kokkuvõtte genereerimise taotlus aegus, võimalik võrguprobleem või serveri ülekoormatus.", + "summaryTimeoutMessage": "Kokkuvõtte genereerimise taotlus aegus, võimalik võrguprobleem või serveri ülekoormatus.", "deleteTranslationRecord": "Kustuta tõlke kirje", - "deleteTranslationConfirm": - "Kas oled kindel, et tahad selle tõlke kirje kustutada? Seda toimingut ei saa tagasi võtta.", + "deleteTranslationConfirm": "Kas oled kindel, et tahad selle tõlke kirje kustutada? Seda toimingut ei saa tagasi võtta.", "originalText": "Algne tekst", "translatedText": "Tõlgitud tekst", "sessionSummary": "Seansi kokkuvõte", @@ -699,7 +1217,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...", @@ -709,8 +1227,7 @@ const Map etEE = { // 配对状态文本 "readyToPair": "Valmis sidumiseks", "preparingPairingEnvironment": "Sidumiskeskkonna ettevalmistamine...", - "connectDeepSoundViaSystemBluetooth": - "Ühenda esmalt Voitrans seade süsteemi Bluetooth kaudu", + "connectDeepSoundViaSystemBluetooth": "Ühenda esmalt Voitrans seade süsteemi Bluetooth kaudu", "deviceBindingConfirm": "Seadme sidumise kinnitus...", "establishingDeviceAssociation": "Seadme seose loomine...", "waitingCompletePairing": "Palun oota, sidumise lõpetamine...", @@ -720,25 +1237,22 @@ const Map etEE = { "ensureConnectedDeepSoundDevice": "Veendu, et ühendatud seade on Voitrans", "deviceAlreadyBoundToOtherAccount": "See seade on juba seotud teise kontoga", "deviceAssociationFailed": "Seadme seostamine ebaõnnestus, proovi uuesti", - "scanTimeoutEnsureDeviceNearby": - "Skaneerimine aegus, veendu, et seade on lähedal", + "scanTimeoutEnsureDeviceNearby": "Skaneerimine aegus, veendu, et seade on lähedal", "networkError": "Võrgu viga", - "authorizationFailedCheckCode": - "Autoriseerimine ebaõnnestus, kontrolli, kas autoriseerimiskood on õige", + "authorizationFailedCheckCode": "Autoriseerimine ebaõnnestus, kontrolli, kas autoriseerimiskood on õige", "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...', + 'ensureHeadsetOnAndPairingMode': 'Veendu, et kõrvaklapid on sisse lülitatud ja sidumisrežiimis', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Turvalise ühenduse loomine...', 'needManualBindingAuthCode': 'Vajab käsitsi sidumise autoriseerimiskoodi...', 'pairingSuccessful': 'Sidumine õnnestus!', @@ -752,13 +1266,20 @@ const Map etEE = { 'verificationFailedRetry': 'Kontrollimine ebaõnnestus, proovi uuesti', 'invalidDeviceAddress': 'Vigane seadme aadress', 'bleDeviceAssociationFailed': 'BLE seadme seostamine ebaõnnestus', - 'deviceAssociationFailedRetry': - 'Seadme seostamine ebaõnnestus, proovi uuesti', + 'deviceAssociationFailedRetry': 'Seadme seostamine ebaõnnestus, proovi uuesti', 'bleConnectionTimeoutRetry': 'BLE ühenduse ajalõpp, proovi uuesti', 'blePairingStartupFailed': 'BLE sidumise käivitamine ebaõnnestus', 'bleConnectionFailed': 'BLE ühendus ebaõnnestus', - 'deviceAuthorizationFailedCheckCode': - 'Seadme autoriseerimine ebaõnnestus, kontrolli autoriseerimiskoodi', + '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", @@ -768,14 +1289,12 @@ 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', + 'feedbackSubmitFailed': 'Tagasiside esitamine ebaõnnestus, proovi hiljem uuesti', // OTA升级模块 - "upgradeExitConfirm": - "Uuendamine käib, väljumine katkestab uuendamise protsessi, kas oled kindel, et tahad väljuda?", + "upgradeExitConfirm": "Uuendamine käib, väljumine katkestab uuendamise protsessi, kas oled kindel, et tahad väljuda?", "deviceModel": "Seadme mudel", "unknownDevice": "Tundmatu seade", "currentFirmwareVersion": "Praegune püsivara versioon", @@ -787,12 +1306,15 @@ 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", "updateContent": "Uuenduse sisu", - "removeEarbudsEnsureBattery": - "Võta mõlemad kõrvaklapid välja ja veendu, et mõlema aku on üle 20%", + "removeEarbudsEnsureBattery": "Võta mõlemad kõrvaklapid välja ja veendu, et mõlema aku on üle 20%", // 音乐列表页面 "noMusic": "Muusikat pole", // 暂无音乐 @@ -841,4 +1363,21 @@ 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..41b355ef4 100644 --- a/lib/core/translations/language/fa_ir.dart +++ b/lib/core/translations/language/fa_ir.dart @@ -71,8 +71,7 @@ const Map faIR = { // 登录页 "welcome": "خوش آمدید", - "loginTips": - "لطفاً با شماره تلفن یا ایمیل خود وارد شوید یا حساب کاربری ایجاد کنید", + "loginTips": "لطفاً با شماره تلفن یا ایمیل خود وارد شوید یا حساب کاربری ایجاد کنید", "accountNumber": "شماره تلفن یا ایمیل", "verificationCode": "کد تأیید", "getCode": "دریافت کد", @@ -91,8 +90,7 @@ const Map faIR = { "tip": "نکته", "pleaseEnterCompleteCode": "لطفاً کد تأیید کامل را وارد کنید", "loginFailed": "ورود ناموفق بود، لطفاً دوباره تلاش کنید", - 'pleaseAcceptPrivacyPolicy': - 'لطفاً ابتدا سیاست حفظ حریم خصوصی و توافقنامه کاربری را بخوانید و بپذیرید', + 'pleaseAcceptPrivacyPolicy': 'لطفاً ابتدا سیاست حفظ حریم خصوصی و توافقنامه کاربری را بخوانید و بپذیرید', "enterVerificationCode": "کد تأیید را وارد کنید", "verificationCodeSentTo": "کد تأیید به", "resendVerificationCode": "ارسال مجدد کد تأیید", @@ -100,12 +98,14 @@ const Map faIR = { "usePasswordLogin": "ورود با رمز عبور", // 隐私政策弹窗 - "loginDeclaration": "بیانیه Voitrans", - "welcomeToThisApp": "به Voitrans خوش آمدید، لطفاً با دقت بخوانید ", + "loginDeclaration": "بیانیه Voitrans", // Voitrans 声明 + "welcomeToThisApp": "به Voitrans خوش آمدید، لطفاً با دقت بخوانید ", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ". با کلیک بر روی «موافقم و وارد می‌شوم»، شما تأیید می‌کنید که توافق‌نامه‌های فوق را به طور کامل مطالعه کرده و با آن‌ها موافقت نموده‌اید. کلیک بر روی «مخالفم» منجر به خروج از برنامه خواهد شد.", - "disagree": "مخالفم", - "agreeAndEnter": "موافقم و وارد می‌شوم", + ". با کلیک بر روی «موافقم و وارد می‌شوم»، شما تأیید می‌کنید که توافق‌نامه‌های فوق را به طور کامل مطالعه کرده و با آن‌ها موافقت نموده‌اید. کلیک بر روی «مخالفم» منجر به خروج از برنامه خواهد شد.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "مخالفم", // 不同意 + "agreeAndEnter": "موافقم و وارد می‌شوم", // 同意并进入 // 首页 "deviceStatus": "وضعیت دستگاه", @@ -125,16 +125,14 @@ const Map faIR = { "aiCompanion": "همراه والدین و فرزند", "aiCompanionInfo": "شما را درک می‌کند و همراهی گرمی را فراهم می‌کند", "homeSlogan": "دنیا را متصل کن، فراتر از صدا", - "turnEarphones": - "لطفاً کیس ایرفون را باز کنید و ایربادها را در گوش خود قرار دهید", + "turnEarphones": "لطفاً کیس ایرفون را باز کنید و ایربادها را در گوش خود قرار دهید", "currentlyConnected": "در حال حاضر متصل به:", "unsystemSetup": "رفتن به تنظیمات سیستم", "talkLater": "بعداً یادآوری کن", "initializing": "در حال آماده‌سازی...", "bluetoothInitializationFailure": "آماده‌سازی سرویس بلوتوث ناموفق بود", "checkingPermissions": "در حال بررسی مجوزها...", - "lackPermissions": - "مجوزهای بلوتوث مورد نیاز است و دسترسی به لوکیشن نیز لازم است", + "lackPermissions": "مجوزهای بلوتوث مورد نیاز است و دسترسی به لوکیشن نیز لازم است", "searchingDevice": "در حال جستجوی دستگاه‌ها...", "findConnectedDevice": "دستگاه متصل پیدا شد", "notFound": "دستگاه بلوتوث متصلی پیدا نشد", @@ -158,7 +156,7 @@ const Map faIR = { 'right': 'راست', 'checkConnectionStatusFailed': 'بررسی وضعیت اتصال ناموفق بود', - // 发现页 +// 发现页 "searchAi": "جستجوی ویژگی‌های هوش مصنوعی...", "exploreSlogan": "ایربادهای هوشمند، امکانات بی‌پایان", "exploreSlogan1": "همراه هوشمند، امکانات بی‌پایان", @@ -181,6 +179,194 @@ 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": "شروع جلسه", @@ -212,16 +398,14 @@ const Map faIR = { 'connectedToAiPen': 'متصل به دستگاه AI PEN', 'checkingNewFiles': 'در حال بررسی فایل‌های جدید برای وارد کردن', 'startingWifi': 'در حال راه‌اندازی Wi-Fi...', - 'newFilesDetected': - 'فایل‌های جدید شناسایی شد، در حال آماده‌سازی برای وارد کردن', + 'newFilesDetected': 'فایل‌های جدید شناسایی شد، در حال آماده‌سازی برای وارد کردن', 'noNewFiles': 'فایل جدیدی برای وارد کردن وجود ندارد', 'connectingWifi': 'در حال اتصال به Wi-Fi...', 'wifiConnected': 'اتصال Wi-Fi موفقیت‌آمیز بود', 'downloadingFiles': 'در حال دانلود فایل‌ها...', 'downloadingFileProgress': 'مجموع {total} فایل، در حال دانلود فایل {current}', 'downloadComplete': 'دانلود کامل شد', - 'downloadCompleteInfo': - 'دانلود کامل شد، مجموعاً {count} فایل، بازگشت خودکار تا ۲ ثانیه دیگر', + 'downloadCompleteInfo': 'دانلود کامل شد، مجموعاً {count} فایل، بازگشت خودکار تا ۲ ثانیه دیگر', // Meeting模块 - 录音功能 'startRecording': 'شروع ضبط', @@ -233,6 +417,7 @@ const Map faIR = { 'summarizing': 'در حال خلاصه‌سازی...', 'analyzing': 'در حال تجزیه و تحلیل...', 'summaryComplete': 'خلاصه‌سازی کامل شد', + //'generating': '正在生成...', 'generate': 'ایجاد', 'overview': 'نمای کلی', 'transcription': 'متن', @@ -256,8 +441,7 @@ const Map faIR = { 'meetingHours': 'ساعت', 'voitransAiMember': 'عضو هوش مصنوعی Voitrans', 'unlockStarterMember': 'باز کردن عضویت Starter', - 'bindDeviceToActivate': - 'دستگاه Voitrans را برای فعال‌سازی عضویت Starter متصل کنید', + 'bindDeviceToActivate': 'دستگاه Voitrans را برای فعال‌سازی عضویت Starter متصل کنید', 'unlockNow': 'اکنون باز کنید', // Meeting模块 - 会员功能 @@ -276,55 +460,40 @@ const Map faIR = { 'audioImport': 'وارد کردن صدا', 'multipleExportFormats': 'فرمت‌های خروجی متعدد', 'professionalSummaryTemplates': 'الگوهای خلاصه حرفه‌ای', - 'professionalTemplateDesc': - 'طراحی الگوی حرفه‌ای برای بهبود کارایی شما. سفارشی‌شده بر اساس نیازهای صنعت.', - 'customTemplateDesc': - 'شما می‌توانید اعلان‌های خلاصه را بر اساس نیازهای خود سفارشی کنید و از آن‌ها برای ایجاد خلاصه‌های مورد نیاز استفاده کنید.', - 'askAiDesc': - 'استخراج هوشمند اطلاعات عمیق‌تر از ضبط‌ها، ایجاد جداول داده، نتایج کلیدی بحث، لیست کارها، ایمیل‌های گزارش و سایر محتوای فرمت‌شده با یک کلیک.', - 'visualMindMapDesc': - 'فراتر از خلاصه‌ها - سازماندهی و بصری‌سازی نکات کلیدی با نقشه‌های ذهنی برای درک مؤثرتر متن کامل.', - 'templateCommunityDesc': - 'کشف کنید، به اشتراک بگذارید و از کتابخانه الگوهای ایجاد شده توسط کاربران الهام بگیرید.', - 'speakerIdentificationDesc': - 'تبدیل متن صوتی از شناسایی گوینده پشتیبانی می‌کند، محتوای جلسه یا تماس تلفنی را به طور شهودی‌تر بازیابی می‌کند. در عین حال، خلاصه دقیق‌تر خواهد بود.', - 'privateCloudSyncDesc': - 'ضبط‌ها و متن‌های شما به طور ایمن در سرورهای ابری اختصاصی ذخیره می‌شوند، با رمزگذاری کامل در هنگام آپلود و دانلود برای اطمینان از حریم خصوصی و امنیت.', - 'aiVoiceEnhancementDesc': - 'بهبود صدای هوش مصنوعی از تنظیمات کاهش نویز چندگانه پشتیبانی می‌کند، به طور هوشمند نویز پس‌زمینه را حذف می‌کند، وضوح صدا را افزایش می‌دهد و کیفیت پخش صدا را بهبود می‌بخشد.', - 'audioImportDesc': - 'به راحتی فایل‌های صوتی را از برنامه‌های محلی یا شخص ثالث مانند یادداشت‌های صوتی، Google Drive و غیره وارد کنید.', - 'multipleExportFormatsDesc': - 'ضبط‌های صوتی، متن تبدیل‌شده و خلاصه‌های خود را در فرمت‌های مختلف (TXT، PDF، JPEG) برای رفع نیازهای خود خروجی بگیرید.', + 'professionalTemplateDesc': 'طراحی الگوی حرفه‌ای برای بهبود کارایی شما. سفارشی‌شده بر اساس نیازهای صنعت.', + 'customTemplateDesc': 'شما می‌توانید اعلان‌های خلاصه را بر اساس نیازهای خود سفارشی کنید و از آن‌ها برای ایجاد خلاصه‌های مورد نیاز استفاده کنید.', + 'askAiDesc': 'استخراج هوشمند اطلاعات عمیق‌تر از ضبط‌ها، ایجاد جداول داده، نتایج کلیدی بحث، لیست کارها، ایمیل‌های گزارش و سایر محتوای فرمت‌شده با یک کلیک.', + 'visualMindMapDesc': 'فراتر از خلاصه‌ها - سازماندهی و بصری‌سازی نکات کلیدی با نقشه‌های ذهنی برای درک مؤثرتر متن کامل.', + 'templateCommunityDesc': 'کشف کنید، به اشتراک بگذارید و از کتابخانه الگوهای ایجاد شده توسط کاربران الهام بگیرید.', + 'speakerIdentificationDesc': 'تبدیل متن صوتی از شناسایی گوینده پشتیبانی می‌کند، محتوای جلسه یا تماس تلفنی را به طور شهودی‌تر بازیابی می‌کند. در عین حال، خلاصه دقیق‌تر خواهد بود.', + 'privateCloudSyncDesc': 'ضبط‌ها و متن‌های شما به طور ایمن در سرورهای ابری اختصاصی ذخیره می‌شوند، با رمزگذاری کامل در هنگام آپلود و دانلود برای اطمینان از حریم خصوصی و امنیت.', + 'aiVoiceEnhancementDesc': 'بهبود صدای هوش مصنوعی از تنظیمات کاهش نویز چندگانه پشتیبانی می‌کند، به طور هوشمند نویز پس‌زمینه را حذف می‌کند، وضوح صدا را افزایش می‌دهد و کیفیت پخش صدا را بهبود می‌بخشد.', + 'audioImportDesc': 'به راحتی فایل‌های صوتی را از برنامه‌های محلی یا شخص ثالث مانند یادداشت‌های صوتی، Google Drive و غیره وارد کنید.', + 'multipleExportFormatsDesc': 'ضبط‌های صوتی، متن تبدیل‌شده و خلاصه‌های خود را در فرمت‌های مختلف (TXT، PDF، JPEG) برای رفع نیازهای خود خروجی بگیرید.', // Meeting模块 - 升级会员 'upgradeMembership': 'عضویت خود را ارتقا دهید', 'yearlySubscription': 'اشتراک سالانه', 'monthlySubscription': 'اشتراک ماهانه', 'proMonthly': 'Pro ¥۶۰/ماه', - 'proMonthlyDesc': - '۷ روز استفاده آزمایشی رایگان، سپس ¥۸۰۰/سال. هر زمان قبل از پایان دوره آزمایشی لغو کنید.', + 'proMonthlyDesc': '۷ روز استفاده آزمایشی رایگان، سپس ¥۸۰۰/سال. هر زمان قبل از پایان دوره آزمایشی لغو کنید.', 'sevenDayTrial': '۷ روز استفاده آزمایشی رایگان', 'unlimitedMonthly': 'Unlimited ¥۱۲۰/ماه', - 'unlimitedMonthlyDesc': - '۷ روز استفاده آزمایشی رایگان، سپس ¥۱۶۰۰/سال. هر زمان قبل از پایان دوره آزمایشی لغو کنید.', - 'trialNote': - '*استفاده آزمایشی رایگان برای ۷ روز، سپس سالانه شارژ می‌شود، هر زمان لغو کنید.', + 'unlimitedMonthlyDesc': '۷ روز استفاده آزمایشی رایگان، سپس ¥۱۶۰۰/سال. هر زمان قبل از پایان دوره آزمایشی لغو کنید.', + 'trialNote': '*استفاده آزمایشی رایگان برای ۷ روز، سپس سالانه شارژ می‌شود، هر زمان لغو کنید.', 'proPrice': 'Pro ¥۱۲۰', 'proMonthlyPrice': '¥۱۲۰/ماه', 'subscribe': 'اشتراک', 'unlimitedPrice': 'Unlimited ¥۱۹۸', 'unlimitedMonthlyPrice': '¥۱۹۸/ماه', - 'upgradeNote': - '*پس از ارتقای اشتراک، روزهای باقیمانده اشتراک اصلی به طور خودکار محاسبه و به حساب پرداخت شما بازپرداخت می‌شود', + 'upgradeNote': '*پس از ارتقای اشتراک، روزهای باقیمانده اشتراک اصلی به طور خودکار محاسبه و به حساب پرداخت شما بازپرداخت می‌شود', 'buyMoreTranscriptionTime': 'خرید زمان تبدیل متن بیشتر', 'sixThousandMinutes': '۶,۰۰۰ دقیقه', 'threeThousandMinutes': '۳,۰۰۰ دقیقه', 'sixHundredMinutes': '۶۰۰ دقیقه', 'oneHundredTwentyMinutes': '۱۲۰ دقیقه', 'validityPeriod': '*دوره اعتبار: ', - 'validityNote': - 'بلافاصله پس از خرید فعال می‌شود، تا ۲ سال پس از فعال‌سازی معتبر است.', + 'validityNote': 'بلافاصله پس از خرید فعال می‌شود، تا ۲ سال پس از فعال‌سازی معتبر است.', 'purchase': 'خرید', // Meeting模块 - 模版和生成 @@ -336,8 +505,7 @@ const Map faIR = { 'chineseSimplified': 'چینی ماندارین (ساده‌شده)', 'meetingGenerateNow': 'اکنون ایجاد کن', 'keyEventsAnalyzed': '{count} رویداد کلیدی تجزیه و تحلیل شد.', - 'aiAnalysisDesc': - 'تجزیه و تحلیل هوش مصنوعی رویدادهای کلیدی را در ضبط‌ها شناسایی می‌کند، به شما امکان می‌دهد رویدادهای مهم را برای ایجاد توسط هوش مصنوعی انتخاب کنید.', + 'aiAnalysisDesc': 'تجزیه و تحلیل هوش مصنوعی رویدادهای کلیدی را در ضبط‌ها شناسایی می‌کند، به شما امکان می‌دهد رویدادهای مهم را برای ایجاد توسط هوش مصنوعی انتخاب کنید.', // Meeting模块 - 文件操作和状态 'importing': 'در حال وارد کردن...', @@ -357,8 +525,7 @@ const Map faIR = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'ذخیره‌سازی', - 'meetingStoragePermissionExplanation': - 'ما به مجوزهای ذخیره‌سازی نیاز داریم تا شما بتوانید فایل‌های صوتی را انتخاب و آپلود کنید.', + 'meetingStoragePermissionExplanation': 'ما به مجوزهای ذخیره‌سازی نیاز داریم تا شما بتوانید فایل‌های صوتی را انتخاب و آپلود کنید.', 'meetingStoragePermissionPermanentDenial': 'شناسایی شد که شما مجوز ذخیره‌سازی را برای همیشه رد کرده‌اید. برای ادامه استفاده از این ویژگی، لطفاً به تنظیمات برنامه بروید تا مجوز ذخیره‌سازی را به صورت دستی فعال کنید.', @@ -379,9 +546,17 @@ const Map faIR = { // Meeting模块 - 录音语言相关 'recordLanguage': 'زبان ضبط', + // 'chinese': '中文普通话(简体)', 'cantonese': 'کانتونی', 'sichuan': 'گویش سیچوان', 'shanghai': 'گویش شانگهایی', + // 'english': '英文', + // 'japanese': '日语', + // 'korean': '韩语', + // 'french': '法语', + // 'spanish': '西班牙语', + // 'portuguese': '葡萄牙语', + // 'indonesian': '印尼语', // Meeting模块 - 分享相关 'shareLink': 'اشتراک‌گذاری پیوند', @@ -399,8 +574,7 @@ const Map faIR = { 'recentlyUsedNames': 'نام‌های اخیراً استفاده‌شده', 'applyToCurrentParagraph': 'اعمال به پاراگراف فعلی', 'totalTime': 'زمان کل', - 'summarySpeakerWillBeUpdatedAutomatically': - 'گویندگان خلاصه به طور خودکار به‌روزرسانی خواهند شد', + 'summarySpeakerWillBeUpdatedAutomatically': 'گویندگان خلاصه به طور خودکار به‌روزرسانی خواهند شد', // Meeting模块 - 云端同步相关 'syncToCloud': 'همگام‌سازی با ابر', @@ -417,12 +591,15 @@ 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 +611,8 @@ const Map faIR = { "lastBackup": "آخرین پشتیبان‌گیری:", "privacySettings": "تنظیمات حریم خصوصی", "privacySettingsInfo": "مدیریت جمع‌آوری داده‌ها و مجوزها", - "permissionManagement": "مدیریت مجوزها", - "permissionManagementInfo": "مدیریت تنظیمات مجوزهای برنامه", + "permissionManagement": "مدیریت مجوزها", // 权限管理 + "permissionManagementInfo": "مدیریت تنظیمات مجوزهای برنامه", // 管理应用权限设置 "aboutApplication": "درباره", "versions": "نسخه", "checkUpdates": "بررسی به‌روزرسانی‌ها", @@ -444,8 +621,7 @@ const Map faIR = { "voiceServiceInfo": "انتخاب سرویس تشخیص و تولید گفتار", "selectVoiceService": "انتخاب سرویس صوتی", "azureVoiceService": "سرویس گفتار Azure", - "azureVoiceServiceInfo": - "سرویس مبتنی بر ابر مایکروسافت که از تولید و تشخیص گفتار با کیفیت بالا پشتیبانی می‌کند", + "azureVoiceServiceInfo": "سرویس مبتنی بر ابر مایکروسافت که از تولید و تشخیص گفتار با کیفیت بالا پشتیبانی می‌کند", "flutterVoiceService": "سرویس صوتی محلی", "flutterVoiceServiceInfo": "سرویس صوتی محلی دستگاه بدون نیاز به اینترنت", 'timbreService': 'سرویس طنین صدا', @@ -468,10 +644,16 @@ const Map faIR = { 'checkUpdateFailed': 'بررسی به‌روزرسانی ناموفق بود', 'networkErrorRetry': 'خطای شبکه، لطفاً بعداً دوباره تلاش کنید', +// 设备管理相关 + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', + // 设置页面 - 实时语音对话 - 'realtimeVoiceChat': 'چت صوتی همزمان', - 'realtimeVoiceChatInfo': 'تجربه ویژگی‌های تعامل صوتی هوشمند (پیش‌نمایش)', - 'loading': 'در حال بارگیری...', + "realtimeVoiceChat": 'چت صوتی همزمان', + "realtimeVoiceChatInfo": 'تجربه ویژگی‌های تعامل صوتی هوشمند (پیش‌نمایش)', + "loading": 'در حال بارگیری...', //设备管理页面 "deviceTypeUnknown": "دستگاه ناشناخته", @@ -485,12 +667,11 @@ const Map faIR = { "noMacAddress": "بدون آدرس MAC", "licenseCode": "کد مجوز", "confirmUnbind": "تأیید لغو اتصال", - "confirmUnbindMessage": - "آیا مطمئن هستید که می‌خواهید اتصال دستگاه «{deviceName}» را لغو کنید؟", + "confirmUnbindMessage": "آیا مطمئن هستید که می‌خواهید اتصال دستگاه «{deviceName}» را لغو کنید؟", "confirmUnbindAction": "تأیید لغو اتصال", - // Agent模块 - //Agent View +//Agent 模块 + // agent View "Lily": "Lily", "clearChatHistory": "پاک کردن تاریخچه چت", "online": "آنلاین", @@ -516,19 +697,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' @@ -540,18 +722,15 @@ const Map faIR = { 'چه کمکی می‌توانم به شما بکنم؟', 'microphonePermission': 'میکروفون', 'voiceRecognitionPermissionText': 'تشخیص صدا به دسترسی میکروفون نیاز دارد.', - 'voiceTranslationPermissionText': - 'تشخیص و ترجمه صدا به دسترسی میکروفون نیاز دارد.', - 'phoneCallPermissionText': - 'عملکرد تماس تلفنی برای تماس‌های صوتی به دسترسی میکروفون نیاز دارد.', - 'permissionDeniedText': - 'شما مجوز میکروفون را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات سیستم بروید.', + 'voiceTranslationPermissionText': 'تشخیص و ترجمه صدا به دسترسی میکروفون نیاز دارد.', + 'phoneCallPermissionText': 'عملکرد تماس تلفنی برای تماس‌های صوتی به دسترسی میکروفون نیاز دارد.', + 'permissionDeniedText': 'شما مجوز میکروفون را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات سیستم بروید.', 'startVoiceInput': 'شروع ورودی صوتی', 'startPhoneCallMode': 'شروع حالت تماس تلفنی، شروع ورودی صوتی', - //Agent 全屏编辑器 - 'fullScreenEditorHint': 'پیام خود را اینجا تایپ کنید...', - 'characterCount': '{count} کاراکتر', + // Agent 全屏编辑器 + 'fullScreenEditorHint': 'پیام خود را اینجا تایپ کنید...', // 全屏编辑器输入提示 + 'characterCount': '{count} کاراکتر', // 字符计数显示 // 消息长按操作 'copy': 'کپی', @@ -560,6 +739,7 @@ const Map faIR = { 'submitSuccess': 'ارسال موفقیت‌آمیز بود', 'submitFailed': 'ارسال ناموفق بود', 'reportSubmitted': 'گزارش ارسال شد، در اسرع وقت آن را پردازش خواهیم کرد', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'مضر/ناامن', 'pornographicVulgar': 'مستهجن/ مبتذل', 'misleadingAttack': 'گمراه‌کننده/تهاجمی', @@ -567,27 +747,27 @@ const Map faIR = { 'privacyRelated': 'مرتبط با حریم خصوصی', 'copyrightViolation': 'نقض حق کپی‌رایت، حقوق شهرت و غیره من.', 'other': 'دیگر', - 'reportDescriptionHint': - 'ما می‌خواهیم دلیل گزارش شما را بدانیم، می‌توانید مشکلی را که با آن مواجه شدید توصیف کنید.', + '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": "دوچرخه‌سواری", @@ -598,24 +778,15 @@ const Map faIR = { 'highest': 'حداکثر', 'lowest': 'حداقل', 'futureForecast': 'پیش‌بینی آینده', - 'hotWeatherTip': - 'امروز هوا گرم است، لطفاً به پیشگیری از گرما و خنک شدن توجه کنید، برای جلوگیری از گرمازدگی آب بیشتری بنوشید', - 'coldWeatherTip': - 'امروز دما پایین است، لطفاً هنگام بیرون رفتن گرم بپوشید و مراقب سرماخوردگی باشید', - 'rainyWeatherTip': - 'امروز بارانی است، لطفاً هنگام بیرون رفتن چتر همراه داشته باشید و به ایمنی سفر توجه کنید', - 'snowyWeatherTip': - 'امروز برفی است، جاده‌ها لغزنده هستند، لطفاً به ایمنی توجه کنید و گرم بپوشید', - 'foggyWeatherTip': - 'امروز مه و غبارآلود است، دید کم است، لطفاً هنگام بیرون رفتن ماسک بزنید', - 'windyWeatherTip': - 'امروز باد شدید است، لطفاً هنگام بیرون رفتن به ایمنی توجه کنید و وسایل را محکم کنید', - 'sunnyWeatherTip': - 'امروز آفتابی با اشعه ماوراء بنفش قوی است، لطفاً هنگام بیرون رفتن از خود در برابر آفتاب محافظت کنید', - 'temperatureDifferenceTip': - 'امروز اختلاف دمای شب و روز زیاد است، لطفاً لباس خود را متناسب با آن تنظیم کنید', - 'comfortableWeatherTip': - 'امروز هوا دلپذیر است، عالی برای فعالیت‌های بیرون از خانه', + 'hotWeatherTip': 'امروز هوا گرم است، لطفاً به پیشگیری از گرما و خنک شدن توجه کنید، برای جلوگیری از گرمازدگی آب بیشتری بنوشید', + 'coldWeatherTip': 'امروز دما پایین است، لطفاً هنگام بیرون رفتن گرم بپوشید و مراقب سرماخوردگی باشید', + 'rainyWeatherTip': 'امروز بارانی است، لطفاً هنگام بیرون رفتن چتر همراه داشته باشید و به ایمنی سفر توجه کنید', + 'snowyWeatherTip': 'امروز برفی است، جاده‌ها لغزنده هستند، لطفاً به ایمنی توجه کنید و گرم بپوشید', + 'foggyWeatherTip': 'امروز مه و غبارآلود است، دید کم است، لطفاً هنگام بیرون رفتن ماسک بزنید', + 'windyWeatherTip': 'امروز باد شدید است، لطفاً هنگام بیرون رفتن به ایمنی توجه کنید و وسایل را محکم کنید', + 'sunnyWeatherTip': 'امروز آفتابی با اشعه ماوراء بنفش قوی است، لطفاً هنگام بیرون رفتن از خود در برابر آفتاب محافظت کنید', + 'temperatureDifferenceTip': 'امروز اختلاف دمای شب و روز زیاد است، لطفاً لباس خود را متناسب با آن تنظیم کنید', + 'comfortableWeatherTip': 'امروز هوا دلپذیر است، عالی برای فعالیت‌های بیرون از خانه', "monday": "دوشنبه", "tuesday": "سه‌شنبه", "wednesday": "چهارشنبه", @@ -623,6 +794,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 +826,7 @@ const Map faIR = { "haze": "غبار", "strongWind": "باد شدید", - // 编辑个人信息页 + //编辑个人信息页 "editProfile": "ویرایش پروفایل", "avatar": "آواتار", "nickname": "نام مستعار", @@ -656,30 +838,26 @@ const Map faIR = { "logout": "خروج از حساب", "logoutTips": "آیا مطمئن هستید که می‌خواهید از حساب فعلی خارج شوید؟", 'deleteAccount': 'حذف حساب', - 'deleteAccountTips': - 'آیا مطمئن هستید که می‌خواهید حساب خود را برای همیشه حذف کنید؟ این عمل قابل بازگشت نیست.', + 'deleteAccountTips': 'آیا مطمئن هستید که می‌خواهید حساب خود را برای همیشه حذف کنید؟ این عمل قابل بازگشت نیست.', 'clean': 'پاک کردن حافظه پنهان', 'cleanTips': 'آیا مطمئن هستید که می‌خواهید حافظه پنهان شخصی را پاک کنید؟', - //Profile 错误信息 - 'networkConnectionFailed': - 'اتصال شبکه ناموفق بود، لطفاً تنظیمات شبکه را بررسی کرده و دوباره تلاش کنید', - 'serverTemporarilyUnavailable': - 'سرور به طور موقت در دسترس نیست، لطفاً بعداً دوباره تلاش کنید', + // Profile 错误信息 + 'networkConnectionFailed': 'اتصال شبکه ناموفق بود، لطفاً تنظیمات شبکه را بررسی کرده و دوباره تلاش کنید', + 'serverTemporarilyUnavailable': 'سرور به طور موقت در دسترس نیست، لطفاً بعداً دوباره تلاش کنید', 'loginExpiredPleaseRelogin': 'ورود منقضی شده است، لطفاً دوباره وارد شوید', 'noPermissionForThisOperation': 'مجوز انجام این عملیات وجود ندارد', 'requestedResourceNotFound': 'منبع درخواستی یافت نشد', - 'imageProcessingFailedPleaseReselect': - 'پردازش تصویر ناموفق بود، لطفاً تصویر را دوباره انتخاب کنید', + 'imageProcessingFailedPleaseReselect': 'پردازش تصویر ناموفق بود، لطفاً تصویر را دوباره انتخاب کنید', 'operationFailedPleaseRetry': 'عملیات ناموفق بود، لطفاً دوباره تلاش کنید', 'serverReturnedError': 'سرور خطا بازگرداند', 'serverError': 'خطای سرور', - 'networkConnectionFailedCheckSettings': - 'اتصال شبکه ناموفق بود، لطفاً تنظیمات شبکه را بررسی کنید', - 'serverInternalErrorRetryLater': - 'خطای داخلی سرور، لطفاً بعداً دوباره تلاش کنید', + 'networkConnectionFailedCheckSettings': 'اتصال شبکه ناموفق بود، لطفاً تنظیمات شبکه را بررسی کنید', + 'serverInternalErrorRetryLater': 'خطای داخلی سرور، لطفاً بعداً دوباره تلاش کنید', - //Profile 用户交互 +// Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'فشرده‌سازی تصویر ناموفق بود', 'avatarUpdateFailed': 'به‌روزرسانی آواتار ناموفق بود', 'usernameCannotBeEmpty': 'نام کاربری نمی‌تواند خالی باشد', @@ -692,15 +870,15 @@ 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 +893,7 @@ const Map faIR = { 'phone': 'تلفن', 'sms': 'پیامک', 'contacts': 'مخاطبین', + //'bluetooth': '蓝牙', 'notification': 'اعلان', 'alarm': 'زنگ هشدار', 'calendarWrite': 'نوشتن در تقویم', @@ -722,14 +901,10 @@ const Map faIR = { 'locationInfo': 'اطلاعات موقعیت مکانی', 'phonePermissionDesc': 'برای عملکرد تماس تلفنی استفاده می‌شود', 'smsPermissionDesc': 'برای عملکرد پیامک استفاده می‌شود', - 'alarmPermissionDesc': - 'برای تنظیم زنگ‌های هشدار دقیق استفاده می‌شود تا اطمینان حاصل شود یادآوری‌ها به موقع فعال می‌شوند', - 'calendarWritePermissionDesc': - 'برای ایجاد رویدادها و یادآوری‌های تقویم استفاده می‌شود', - 'calendarFullAccessPermissionDesc': - 'برای خواندن و مدیریت رویدادها و یادآوری‌های تقویم استفاده می‌شود', - 'locationPermissionDesc': - 'برای دریافت اطلاعات موقعیت مکانی فعلی استفاده می‌شود', + 'alarmPermissionDesc': 'برای تنظیم زنگ‌های هشدار دقیق استفاده می‌شود تا اطمینان حاصل شود یادآوری‌ها به موقع فعال می‌شوند', + 'calendarWritePermissionDesc': 'برای ایجاد رویدادها و یادآوری‌های تقویم استفاده می‌شود', + 'calendarFullAccessPermissionDesc': 'برای خواندن و مدیریت رویدادها و یادآوری‌های تقویم استفاده می‌شود', + 'locationPermissionDesc': 'برای دریافت اطلاعات موقعیت مکانی فعلی استفاده می‌شود', 'appFunctionNeeds': 'عملکرد برنامه نیاز دارد', 'authorized': 'مجاز', 'unauthorized': 'غیرمجاز', @@ -740,66 +915,43 @@ const Map faIR = { 'permissionRequestError': 'خطا در درخواست مجوز', 'phonePermissionDetailDesc': 'عملکرد تماس تلفنی به مجوز تلفن نیاز دارد', 'smsPermissionDetailDesc': 'عملکرد پیامک به مجوز پیامک نیاز دارد', - 'alarmPermissionDetailDesc': - 'این مجوز برای تنظیم زنگ‌های هشدار دقیق و اطمینان از فعال شدن یادآوری‌ها به موقع مورد نیاز است', + 'alarmPermissionDetailDesc': 'این مجوز برای تنظیم زنگ‌های هشدار دقیق و اطمینان از فعال شدن یادآوری‌ها به موقع مورد نیاز است', + 'calendarWritePermissionDetailDesc': 'ایجاد رویدادهای تقویم به مجوز نوشتن در تقویم نیاز دارد', + 'calendarFullAccessPermissionDetailDesc': 'مدیریت رویدادهای تقویم به مجوز دسترسی کامل به تقویم نیاز دارد', + 'locationPermissionDetailDesc': 'دریافت اطلاعات موقعیت مکانی به مجوز موقعیت مکانی نیاز دارد', 'contactsPermissionDesc': 'برای دسترسی به اطلاعات مخاطبین استفاده می‌شود', - 'contactsPermissionDetailDesc': - 'عملکرد تماس تلفنی و پیامک برای انتخاب مخاطبین به مجوز مخاطبین نیاز دارد', - 'bluetoothPermissionDesc': - 'برای اتصال و مدیریت دستگاه‌های بلوتوث استفاده می‌شود', - 'bluetoothPermissionDetailDesc': - 'اتصال به هدفون‌های بلوتوث و سایر دستگاه‌ها به مجوز بلوتوث نیاز دارد', - 'bluetoothScanPermissionDesc': - 'برای اسکن دستگاه‌های بلوتوث اطراف استفاده می‌شود', - 'bluetoothScanPermissionDetailDesc': - 'اسکن دستگاه‌های بلوتوث اطراف به مجوز اسکن بلوتوث نیاز دارد', - 'bluetoothConnectPermissionDesc': - 'برای اتصال به دستگاه‌های بلوتوث استفاده می‌شود', - 'bluetoothConnectPermissionDetailDesc': - 'اتصال به دستگاه‌های بلوتوث به مجوز اتصال بلوتوث نیاز دارد', + 'contactsPermissionDetailDesc': 'عملکرد تماس تلفنی و پیامک برای انتخاب مخاطبین به مجوز مخاطبین نیاز دارد', + 'bluetoothPermissionDesc': 'برای اتصال و مدیریت دستگاه‌های بلوتوث استفاده می‌شود', + 'bluetoothPermissionDetailDesc': 'اتصال به هدفون‌های بلوتوث و سایر دستگاه‌ها به مجوز بلوتوث نیاز دارد', + 'bluetoothScanPermissionDesc': 'برای اسکن دستگاه‌های بلوتوث اطراف استفاده می‌شود', + 'bluetoothScanPermissionDetailDesc': 'اسکن دستگاه‌های بلوتوث اطراف به مجوز اسکن بلوتوث نیاز دارد', + 'bluetoothConnectPermissionDesc': 'برای اتصال به دستگاه‌های بلوتوث استفاده می‌شود', + 'bluetoothConnectPermissionDetailDesc': 'اتصال به دستگاه‌های بلوتوث به مجوز اتصال بلوتوث نیاز دارد', 'notificationPermissionDesc': 'برای ارسال پیام‌های اعلان استفاده می‌شود', - 'notificationPermissionDetailDesc': - 'برنامه برای ارسال هشدارها و پیام‌های مهم به شما به مجوز اعلان نیاز دارد', - 'calendarWritePermissionDetailDesc': - 'ایجاد رویدادهای تقویم به مجوز نوشتن در تقویم نیاز دارد', - 'calendarFullAccessPermissionDetailDesc': - 'مدیریت رویدادهای تقویم به مجوز دسترسی کامل به تقویم نیاز دارد', - 'locationPermissionDetailDesc': - 'دریافت اطلاعات موقعیت مکانی به مجوز موقعیت مکانی نیاز دارد', - 'appNeedsPermissionForFullFunction': - 'برنامه برای ارائه عملکرد کامل به این مجوز نیاز دارد', - 'permanentDenialText': - 'شما مجوز {permission} را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات برنامه بروید', + 'notificationPermissionDetailDesc': 'برنامه برای ارسال هشدارها و پیام‌های مهم به شما به مجوز اعلان نیاز دارد', + 'appNeedsPermissionForFullFunction': 'برنامه برای ارائه عملکرد کامل به این مجوز نیاز دارد', + 'permanentDenialText': 'شما مجوز {permission} را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات برنامه بروید', 'goToSettings': 'رفتن به تنظیمات', // 权限申请 'bluetoothScan': 'اسکن بلوتوث', 'bluetoothConnect': 'اتصال بلوتوث', - 'bluetoothScanExplanation': - 'برنامه برای اسکن دستگاه‌های بلوتوث اطراف به مجوز اسکن بلوتوث نیاز دارد.', - 'bluetoothConnectExplanation': - 'برنامه برای اتصال به دستگاه‌های بلوتوث به مجوز اتصال بلوتوث نیاز دارد.', - 'locationForBluetoothExplanation': - 'برنامه برای اسکن دستگاه‌های بلوتوث به مجوز موقعیت مکانی نیاز دارد.', - 'bluetoothScanPermanentDenial': - 'مجوز اسکن بلوتوث برای همیشه رد شده است، لطفاً برای فعال کردن آن به صورت دستی به تنظیمات بروید.', - 'bluetoothConnectPermanentDenial': - 'مجوز اتصال بلوتوث برای همیشه رد شده است، لطفاً برای فعال کردن آن به صورت دستی به تنظیمات بروید.', + 'bluetoothScanExplanation': 'برنامه برای اسکن دستگاه‌های بلوتوث اطراف به مجوز اسکن بلوتوث نیاز دارد.', + 'bluetoothConnectExplanation': 'برنامه برای اتصال به دستگاه‌های بلوتوث به مجوز اتصال بلوتوث نیاز دارد.', + 'locationForBluetoothExplanation': 'برنامه برای اسکن دستگاه‌های بلوتوث به مجوز موقعیت مکانی نیاز دارد.', + 'bluetoothScanPermanentDenial': 'مجوز اسکن بلوتوث برای همیشه رد شده است، لطفاً برای فعال کردن آن به صورت دستی به تنظیمات بروید.', + 'bluetoothConnectPermanentDenial': 'مجوز اتصال بلوتوث برای همیشه رد شده است، لطفاً برای فعال کردن آن به صورت دستی به تنظیمات بروید.', + 'locationPermanentDenial': 'Location permission has been permanently denied, please go to settings to enable it manually.', 'notificationPermission': 'اعلان', 'locationPermission': 'موقعیت مکانی', - 'notificationPermissionExplanation': - 'مجوز اعلان برای نمایش وضعیت پخش موسیقی مورد نیاز است.', - 'locationPermissionExplanation': - 'مجوز موقعیت مکانی برای دریافت موقعیت مکانی فعلی مورد نیاز است.', - 'notificationPermissionPermanentDenial': - 'شما مجوز اعلان را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات بروید.', - 'locationPermissionPermanentDenial': - 'شما مجوز موقعیت مکانی را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات بروید.', + 'notificationPermissionExplanation': 'مجوز اعلان برای نمایش وضعیت پخش موسیقی مورد نیاز است.', + 'locationPermissionExplanation': 'مجوز موقعیت مکانی برای دریافت موقعیت مکانی فعلی مورد نیاز است.', + 'notificationPermissionPermanentDenial': 'شما مجوز اعلان را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات بروید.', + 'locationPermissionPermanentDenial': 'شما مجوز موقعیت مکانی را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات بروید.', +//'microphonePermission': '录音', 'storagePermission': 'ذخیره‌سازی', - 'microphonePermissionExplanation': - 'ما برای ضبط محتوای صوتی به مجوز میکروفون نیاز داریم.', - 'storagePermissionExplanation': - 'ما به مجوز ذخیره‌سازی نیاز داریم تا شما بتوانید فایل‌های صوتی را انتخاب و آپلود کنید.', + 'microphonePermissionExplanation': 'ما برای ضبط محتوای صوتی به مجوز میکروفون نیاز داریم.', + 'storagePermissionExplanation': 'ما به مجوز ذخیره‌سازی نیاز داریم تا شما بتوانید فایل‌های صوتی را انتخاب و آپلود کنید.', 'microphonePermissionPermanentDenial': 'مجوز میکروفون برای همیشه رد شده است. برای ادامه استفاده از این ویژگی، لطفاً به تنظیمات برنامه بروید تا مجوز میکروفون را به صورت دستی فعال کنید.', 'storagePermissionPermanentDenial': @@ -809,22 +961,19 @@ const Map faIR = { 'permissionUtilNeed': 'نیاز به مجوز ', 'permissionUtilPermission': ' ', 'permissionUtilRestricted': ' مجوز محدود شده است', - 'permissionUtilRestrictedMessage': - 'این ویژگی در دستگاه فعلی در دسترس نیست یا محدود شده است، لطفاً تنظیمات دستگاه یا محدودیت‌های سیستم را بررسی کنید', + 'permissionUtilRestrictedMessage': 'این ویژگی در دستگاه فعلی در دسترس نیست یا محدود شده است، لطفاً تنظیمات دستگاه یا محدودیت‌های سیستم را بررسی کنید', 'permissionUtilConfirm': 'تأیید', // 版本更新对话框 - 'newVersionFound': 'نسخه جدید یافت شد', - 'remindLater': 'بعداً یادآوری کن', - 'updateNow': 'اکنون به‌روزرسانی کن', - 'checkUpdate': 'بررسی به‌روزرسانی', - 'updateFailed': 'به‌روزرسانی ناموفق بود', - 'cannotOpenAppStore': - 'نمی‌توان فروشگاه برنامه را باز کرد، لطفاً به صورت دستی به‌روزرسانی کنید', - 'updateErrorRetry': - 'خطا در طول به‌روزرسانی رخ داد، لطفاً بعداً دوباره تلاش کنید', - - // 国家列表 + 'newVersionFound': 'نسخه جدید یافت شد', // 版本更新对话框标题 + 'remindLater': 'بعداً یادآوری کن', // 稍后提醒按钮 + 'updateNow': 'اکنون به‌روزرسانی کن', // 立即更新按钮 + 'checkUpdate': 'بررسی به‌روزرسانی', // 检查更新按钮 + 'updateFailed': 'به‌روزرسانی ناموفق بود', // 更新失败提示 + 'cannotOpenAppStore': 'نمی‌توان فروشگاه برنامه را باز کرد، لطفاً به صورت دستی به‌روزرسانی کنید', // 无法打开应用商店提示 + 'updateErrorRetry': 'خطا در طول به‌روزرسانی رخ داد، لطفاً بعداً دوباره تلاش کنید', // 更新错误重试提示 + + //国家列表 "邮箱": "ایمیل", "中国": "چین", "美国": "ایالات متحده", @@ -948,7 +1097,7 @@ const Map faIR = { "pictureTranslation": "ترجمه تصویر", "textTranslation": "ترجمه متن", - // 翻译主页 + // 翻译主页 (translation_view.dart) "translationHistory": "تاریخچه ترجمه", "enableRecording": "فعال کردن ضبط", "viewAudioFiles": "مشاهده فایل‌های صوتی", @@ -958,21 +1107,74 @@ 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": - "آیا مطمئن هستید که می‌خواهید تمام تاریخچه ترجمه را پاک کنید؟ این عمل قابل بازگشت نیست.", + "clearHistoryConfirm": "آیا مطمئن هستید که می‌خواهید تمام تاریخچه ترجمه را پاک کنید؟ این عمل قابل بازگشت نیست.", "unknownLanguage": "زبان ناشناخته", "deleteSessionRecord": "حذف سابقه جلسه", - "deleteSessionConfirm": - "آیا مطمئن هستید که می‌خواهید تمام سوابق ترجمه این جلسه را حذف کنید؟ این عمل قابل بازگشت نیست.", + "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 +1186,7 @@ const Map faIR = { "renameAudioFile": "تغییر نام فایل صوتی", "enterNewFileName": "لطفاً نام فایل جدید را وارد کنید", - // 翻译详情页(translation_detail_view.dart) + // 翻译详情页 (translation_detail_view.dart) "originalRecord": "سابقه اصلی", "recordSummary": "خلاصه سابقه", "clickToGenerateSummary": "برای ایجاد خلاصه جلسه، روی دکمه زیر کلیک کنید", @@ -995,11 +1197,9 @@ const Map faIR = { "summaryGenerated": "خلاصه ایجاد شد", "generating": "در حال ایجاد...", "regenerate": "ایجاد مجدد", - "summaryTimeoutMessage": - "درخواست ایجاد خلاصه به پایان رسید، احتمالاً به دلیل مشکلات شبکه یا مشغولی سرور.", + "summaryTimeoutMessage": "درخواست ایجاد خلاصه به پایان رسید، احتمالاً به دلیل مشکلات شبکه یا مشغولی سرور.", "deleteTranslationRecord": "حذف سابقه ترجمه", - "deleteTranslationConfirm": - "آیا مطمئن هستید که می‌خواهید این سابقه ترجمه را حذف کنید؟ این عمل قابل بازگشت نیست.", + "deleteTranslationConfirm": "آیا مطمئن هستید که می‌خواهید این سابقه ترجمه را حذف کنید؟ این عمل قابل بازگشت نیست.", "originalText": "متن اصلی", "translatedText": "متن ترجمه‌شده", "sessionSummary": "خلاصه جلسه", @@ -1008,7 +1208,7 @@ const Map faIR = { "translationSessionRecord": "سابقه جلسه ترجمه", // 配对模块 - // 配对页面 + // 配对页面 (pairing_view.dart & pairing_view_new.dart) "devicePairing": "جفت‌سازی دستگاه", "connectYourDeepSoundHeadset": "هدست Voitrans خود را متصل کنید", "bind": "اتصال", @@ -1017,7 +1217,7 @@ const Map faIR = { "autoInputCode": "ورود خودکار کد", "skipBinding": "رد کردن اتصال", "rescan": "اسکن مجدد", - "skip": "رد کردن", + "verifyingDevice": "در حال تأیید دستگاه...", "confirmBinding": "تأیید اتصال", "associatingDevice": "در حال مرتبط‌سازی دستگاه...", @@ -1027,34 +1227,32 @@ const Map faIR = { // 配对状态文本 "readyToPair": "آماده برای جفت‌سازی", "preparingPairingEnvironment": "در حال آماده‌سازی محیط جفت‌سازی...", - "connectDeepSoundViaSystemBluetooth": - "لطفاً ابتدا دستگاه Voitrans را از طریق بلوتوث سیستم متصل کنید", + "connectDeepSoundViaSystemBluetooth": "لطفاً ابتدا دستگاه Voitrans را از طریق بلوتوث سیستم متصل کنید", "deviceBindingConfirm": "تأیید اتصال دستگاه...", "establishingDeviceAssociation": "در حال برقراری ارتباط دستگاه...", "waitingCompletePairing": "لطفاً صبر کنید، در حال تکمیل جفت‌سازی...", - "pairingSuccessRedirecting": - "جفت‌سازی موفقیت‌آمیز بود! در حال هدایت به صفحه اصلی...", + "pairingSuccessRedirecting": "جفت‌سازی موفقیت‌آمیز بود! در حال هدایت به صفحه اصلی...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "لطفاً اطمینان حاصل کنید که دستگاه متصل Voitrans است", - "deviceAlreadyBoundToOtherAccount": - "این دستگاه قبلاً به حساب دیگری متصل شده است", + "ensureConnectedDeepSoundDevice": "لطفاً اطمینان حاصل کنید که دستگاه متصل Voitrans است", + "deviceAlreadyBoundToOtherAccount": "این دستگاه قبلاً به حساب دیگری متصل شده است", "deviceAssociationFailed": "ارتباط دستگاه ناموفق بود، لطفاً دوباره تلاش کنید", - "scanTimeoutEnsureDeviceNearby": - "پایان مهلت اسکن، لطفاً اطمینان حاصل کنید که دستگاه در نزدیکی است", + "scanTimeoutEnsureDeviceNearby": "پایان مهلت اسکن، لطفاً اطمینان حاصل کنید که دستگاه در نزدیکی است", "networkError": "خطای شبکه", - "authorizationFailedCheckCode": - "مجوز ناموفق بود، لطفاً کد مجوز را بررسی کنید", + "authorizationFailedCheckCode": "مجوز ناموفق بود، لطفاً کد مجوز را بررسی کنید", "pairingFailedRetry": "جفت‌سازی ناموفق بود، لطفاً دوباره تلاش کنید", - //配对控制器相关 + // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'لطفاً بلوتوث را فعال کنید', 'deviceDisconnected': 'دستگاه قطع شد', 'readyToStartPairing': 'آماده برای شروع جفت‌سازی', 'checkingEnvironment': 'در حال بررسی محیط...', - 'ensureHeadsetOnAndPairingMode': - 'لطفاً اطمینان حاصل کنید که هدست روشن و در حالت جفت‌سازی است', + 'ensureHeadsetOnAndPairingMode': 'لطفاً اطمینان حاصل کنید که هدست روشن و در حالت جفت‌سازی است', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'در حال برقراری اتصال امن...', 'needManualBindingAuthCode': 'کد مجوز اتصال دستی مورد نیاز است...', 'pairingSuccessful': 'جفت‌سازی موفقیت‌آمیز بود!', @@ -1068,27 +1266,22 @@ const Map faIR = { 'verificationFailedRetry': 'تأیید ناموفق بود، لطفاً دوباره تلاش کنید', 'invalidDeviceAddress': 'آدرس دستگاه نامعتبر است', 'bleDeviceAssociationFailed': 'ارتباط دستگاه BLE ناموفق بود', - 'deviceAssociationFailedRetry': - 'ارتباط دستگاه ناموفق بود، لطفاً دوباره تلاش کنید', - 'bleConnectionTimeoutRetry': - 'پایان مهلت اتصال BLE. لطفاً ایرفون را مجدداً راه‌اندازی کرده و دوباره تلاش کنید', + 'deviceAssociationFailedRetry': 'ارتباط دستگاه ناموفق بود، لطفاً دوباره تلاش کنید', + 'bleConnectionTimeoutRetry': 'پایان مهلت اتصال BLE. لطفاً ایرفون را مجدداً راه‌اندازی کرده و دوباره تلاش کنید', 'blePairingStartupFailed': 'شروع جفت‌سازی BLE ناموفق بود', 'bleConnectionFailed': 'اتصال BLE ناموفق بود', - 'deviceAuthorizationFailedCheckCode': - 'مجوز دستگاه ناموفق بود، لطفاً کد مجوز را بررسی کنید', - - // iOS蓝牙引导窗 - 'bluetoothGuideTitle': 'فعال‌سازی دستی بلوتوث مورد نیاز است', - 'bluetoothGuideSteps': 'لطفاً این مراحل را دنبال کنید:', - 'bluetoothGuideStep1': 'فعال کردن بلوتوث: تنظیمات ← بلوتوث ← روشن کردن', - 'bluetoothGuideStep2': - 'اتصال دستگاه: دستگاه خود را در «دستگاه‌های من» پیدا کنید و برای اتصال ضربه بزنید', - 'bluetoothGuideStep3': 'بازگشت به برنامه برای ادامه فرآیند جفت‌سازی', - 'bluetoothGuideTip': - 'نکته: می‌توانید آیکون بلوتوث را در مرکز کنترل به مدت طولانی فشار دهید تا به سرعت به تنظیمات بلوتوث دسترسی پیدا کنید', - 'iKnow': 'متوجه شدم', - - // 用户反馈页 + 'deviceAuthorizationFailedCheckCode': 'مجوز دستگاه ناموفق بود، لطفاً کد مجوز را بررسی کنید', + + ///iOS蓝牙引导窗 + 'bluetoothGuideTitle': 'فعال‌سازی دستی بلوتوث مورد نیاز است', // 需要手动开启蓝牙 + 'bluetoothGuideSteps': 'لطفاً این مراحل را دنبال کنید:', // 请按照以下步骤操作: + 'bluetoothGuideStep1': 'فعال کردن بلوتوث: تنظیمات ← بلوتوث ← روشن کردن', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': 'اتصال دستگاه: دستگاه خود را در «دستگاه‌های من» پیدا کنید و برای اتصال ضربه بزنید', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': 'بازگشت به برنامه برای ادامه فرآیند جفت‌سازی', // 返回应用继续配对流程 + 'bluetoothGuideTip': 'نکته: می‌توانید آیکون بلوتوث را در مرکز کنترل به مدت طولانی فشار دهید تا به سرعت به تنظیمات بلوتوث دسترسی پیدا کنید', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'iKnow': 'متوجه شدم', // 我知道了 + + //用户反馈页 "feedback": "بازخورد", 'feedbackInfo': 'ارائه بازخورد یا پیشنهادات', 'feedbackDescription': 'لطفاً مشکل یا پیشنهاد خود را توصیف کنید', @@ -1098,12 +1291,10 @@ const Map faIR = { 'contactHint': 'ایمیل/تلفن، تا بتوانیم با شما تماس بگیریم', 'submit': 'ارسال', 'feedbackSubmitSuccess': 'بازخورد با موفقیت ارسال شد، متشکریم!', - 'feedbackSubmitFailed': - 'ارسال بازخورد ناموفق بود، لطفاً بعداً دوباره تلاش کنید', + 'feedbackSubmitFailed': 'ارسال بازخورد ناموفق بود، لطفاً بعداً دوباره تلاش کنید', // OTA升级模块 - "upgradeExitConfirm": - "در حال ارتقا، خروج فرآیند ارتقا را قطع خواهد کرد. آیا مطمئن هستید که می‌خواهید خارج شوید؟", + "upgradeExitConfirm": "در حال ارتقا، خروج فرآیند ارتقا را قطع خواهد کرد. آیا مطمئن هستید که می‌خواهید خارج شوید؟", "deviceModel": "مدل دستگاه", "unknownDevice": "دستگاه ناشناخته", "currentFirmwareVersion": "نسخه سفت‌افزار فعلی", @@ -1115,19 +1306,22 @@ 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": "در حال شارژ", "updateContent": "محتوای به‌روزرسانی", - "removeEarbudsEnsureBattery": - "هر دو ایرباد را بردارید و اطمینان حاصل کنید که سطح باتری بالای ۲۰٪ است", + "removeEarbudsEnsureBattery": "هر دو ایرباد را بردارید و اطمینان حاصل کنید که سطح باتری بالای ۲۰٪ است", // 音乐列表页面 - "noMusic": "بدون موسیقی", - "noPlayingMusic": "موسیقی در حال پخش نیست", - "unknownSong": "آهنگ ناشناخته", - "unknownArtist": "هنرمند ناشناخته", - "playAll": "پخش همه", + "noMusic": "بدون موسیقی", // 暂无音乐 + "noPlayingMusic": "موسیقی در حال پخش نیست", // 暂无播放音乐 + "unknownSong": "آهنگ ناشناخته", // 未知歌曲 + "unknownArtist": "هنرمند ناشناخته", // 未知歌手 + "playAll": "پخش همه", // 播放全部 // 语言名称 "中文(简体)": "چینی (ساده‌شده)", @@ -1170,8 +1364,20 @@ 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..dabb4447a 100644 --- a/lib/core/translations/language/fi_fi.dart +++ b/lib/core/translations/language/fi_fi.dart @@ -71,8 +71,7 @@ const Map fiFI = { // 登录页 "welcome": "Tervetuloa", - "loginTips": - "Kirjaudu sisään tai rekisteröidy puhelinnumerollasi tai sähköpostillasi", + "loginTips": "Kirjaudu sisään tai rekisteröidy puhelinnumerollasi tai sähköpostillasi", "accountNumber": "Puhelinnumero tai sähköposti", "verificationCode": "Vahvistuskoodi", "getCode": "Hae koodi", @@ -91,8 +90,7 @@ const Map fiFI = { "tip": "Vinkki", "pleaseEnterCompleteCode": "Syötä koko vahvistuskoodi", "loginFailed": "Kirjautuminen epäonnistui, yritä uudelleen", - 'pleaseAcceptPrivacyPolicy': - 'Lue ja hyväksy ensin tietosuojakäytäntö ja käyttäjäsopimus', + 'pleaseAcceptPrivacyPolicy': 'Lue ja hyväksy ensin tietosuojakäytäntö ja käyttäjäsopimus', "enterVerificationCode": "Syötä vahvistuskoodi", "verificationCodeSentTo": "Vahvistuskoodi lähetetty osoitteeseen", "resendVerificationCode": "Lähetä vahvistuskoodi uudelleen", @@ -100,12 +98,14 @@ 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", @@ -115,29 +115,24 @@ const Map fiFI = { "signal": "Signaali", "deviceId": "Laitteen tunnus", "firmwareVersion": "Laiteohjelmiston versio", - "disconnectedDevice": - "Ei yhdistettyä laitetta, yhdistä napsauttamalla alla olevaa painiketta", + "disconnectedDevice": "Ei yhdistettyä laitetta, yhdistä napsauttamalla alla olevaa painiketta", "connectDevice": "Yhdistä laite", "topAiExperiences": "Suosituimmat AI-kokemukset", "aiAssistant": "Kattava AI-avustaja", - "aiAssistantInfo": - "Yksinomainen 24/7-konsultti, vastaa kysymyksiin, antaa ehdotuksia", + "aiAssistantInfo": "Yksinomainen 24/7-konsultti, vastaa kysymyksiin, antaa ehdotuksia", "interpretation": "Simultaanitulkkaus", - "simultaneousInterpretationInfo": - "Reaaliaikainen käännös yli 80 kielelle, huolettomat ulkomaanmatkat", + "simultaneousInterpretationInfo": "Reaaliaikainen käännös yli 80 kielelle, huolettomat ulkomaanmatkat", "aiCompanion": "Perheen seuralainen", "aiCompanionInfo": "Ymmärtää sinua, lämmin seura", "homeSlogan": "Maailman yhdistäminen, äänen ylittäminen", - "turnEarphones": - "Avaa kuulokkeiden latauskotelo ja aseta kuulokkeet korviisi", + "turnEarphones": "Avaa kuulokkeiden latauskotelo ja aseta kuulokkeet korviisi", "currentlyConnected": "Tällä hetkellä yhdistetty:", "unsystemSetup": "Siirry järjestelmäasetuksiin", "talkLater": "Myöhemmin", "initializing": "Alustetaan...", "bluetoothInitializationFailure": "Bluetooth-palvelun alustus epäonnistui", "checkingPermissions": "Tarkistetaan käyttöoikeuksia...", - "lackPermissions": - "Bluetooth-käyttöoikeudet puuttuvat ja lokaatioon pääsy on tarpeen", + "lackPermissions": "Bluetooth-käyttöoikeudet puuttuvat ja lokaatioon pääsy on tarpeen", "searchingDevice": "Etsitään laitteita...", "findConnectedDevice": "Yhdistetty laite löytyi", "notFound": "Yhdistettyä Bluetooth-laitetta ei löytynyt", @@ -180,11 +175,198 @@ const Map fiFI = { "healthConsultant": "Monitoiminen AI-keskustelu", "healthConsultantInfo": "Tarjoaa enemmän AI-keskustelutoimintoja", "conferenceAssistant": "Yrityskokousavustaja", - "conferenceAssistantInfo": - "Reaaliaikainen pöytäkirjan pito, monikielinen käännös", + "conferenceAssistantInfo": "Reaaliaikainen pöytäkirjan pito, monikielinen käännös", "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 +381,225 @@ 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 +611,8 @@ 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", @@ -227,11 +621,9 @@ const Map fiFI = { "voiceServiceInfo": "Valitse puheentunnistus- ja synteesipalvelu", "selectVoiceService": "Valitse äänipalvelu", "azureVoiceService": "Azure-äänipalvelu", - "azureVoiceServiceInfo": - "Microsoftin pilvipohjainen äänipalvelu, tukee korkealaatuista puhesynteesiä ja -tunnistusta", + "azureVoiceServiceInfo": "Microsoftin pilvipohjainen äänipalvelu, tukee korkealaatuista puhesynteesiä ja -tunnistusta", "flutterVoiceService": "Flutter paikallinen äänipalvelu", - "flutterVoiceServiceInfo": - "Laitteen paikallinen äänipalvelu, voidaan käyttää ilman internetyhteyttä", + "flutterVoiceServiceInfo": "Laitteen paikallinen äänipalvelu, voidaan käyttää ilman internetyhteyttä", 'timbreService': 'Äänensävypalvelu', 'timbreServiceInfo': 'Valitse äänensävyn puhesynteesipalvelu', 'defaultTimbre': 'Oletusäänensävy', @@ -242,8 +634,7 @@ const Map fiFI = { 'pleaseRead': 'Lue ääneen', 'completeRecording': 'Lopeta tallennus', "firmwareUpgrade": "Laiteohjelmiston päivitys", - "bleHeadsetFirmwareUpgrade": - "BLE-kuulokkeiden laiteohjelmiston version päivitys", + "bleHeadsetFirmwareUpgrade": "BLE-kuulokkeiden laiteohjelmiston version päivitys", "deviceManagement": "Laitehallinta", "manageConnectedDevices": "Hallitse yhdistettyjä Bluetooth-laitteita", @@ -254,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Koe älykäs puhevuorovaikutustoiminto (toiminnon esikatselu)", + "realtimeVoiceChatInfo": "Koe älykäs puhevuorovaikutustoiminto (toiminnon esikatselu)", "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 +697,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' @@ -310,20 +721,16 @@ const Map fiFI = { '• Hallitsemaan kuulokkeiden toimintoja\n\n' 'Miten voin auttaa sinua?', 'microphonePermission': 'Mikrofoni', - 'voiceRecognitionPermissionText': - 'Puheentunnistus vaatii mikrofonin käyttöoikeuden.', - 'voiceTranslationPermissionText': - 'Puheentunnistus ja -kääntäminen vaativat mikrofonin käyttöoikeuden.', - 'phoneCallPermissionText': - 'Soittaminen vaatii mikrofonin käyttöoikeuden äänipuheluita varten.', - 'permissionDeniedText': - 'Olet pysyvästi kieltänyt mikrofonin käyttöoikeuden, ota se käyttöön järjestelmäasetuksista.', + 'voiceRecognitionPermissionText': 'Puheentunnistus vaatii mikrofonin käyttöoikeuden.', + 'voiceTranslationPermissionText': 'Puheentunnistus ja -kääntäminen vaativat mikrofonin käyttöoikeuden.', + 'phoneCallPermissionText': 'Soittaminen vaatii mikrofonin käyttöoikeuden äänipuheluita varten.', + 'permissionDeniedText': 'Olet pysyvästi kieltänyt mikrofonin käyttöoikeuden, ota se käyttöön järjestelmäasetuksista.', 'startVoiceInput': 'Aloita puhesyöttö', '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 +739,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', @@ -339,8 +747,8 @@ const Map fiFI = { 'privacyRelated': 'Tietosuojaan liittyvä', 'copyrightViolation': 'Loukkaa tekijänoikeuksiani, mainettani jne.', 'other': 'Muu', - 'reportDescriptionHint': - 'Haluamme tietää, miksi ilmoitat, voit kuvailla kohtaamaasi ongelmaa.', + 'reportDescriptionHint': 'Haluamme tietää, miksi ilmoitat, voit kuvailla kohtaamaasi ongelmaa.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'AI:n luoma', @@ -351,15 +759,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ä', @@ -371,20 +779,13 @@ const Map fiFI = { 'lowest': 'Matalin', 'futureForecast': 'Tulevaisuuden ennuste', 'hotWeatherTip': 'Tänään on kuuma, varo lämpöhalvausta ja juo paljon vettä', - 'coldWeatherTip': - 'Tänään lämpötila on alhainen, pukeudu lämpimästi ulos mennessäsi, jotta et vilustu', - 'rainyWeatherTip': - 'Tänään sataa, ota sateenvarjo mukaan ulos mennessäsi ja ole varovainen', - 'snowyWeatherTip': - 'Tänään sataa lunta, tie on liukas, ole varovainen ja pukeudu lämpimästi', - 'foggyWeatherTip': - 'Tänään on sumuista, näkyvyys on huono, käytä maskia ulos mennessäsi', - 'windyWeatherTip': - 'Tänään on tuulista, ole varovainen ulos mennessäsi ja kiinnitä tavarasi', - 'sunnyWeatherTip': - 'Tänään on aurinkoista ja UV-säteily on voimakasta, käytä aurinkovoidetta ulos mennessäsi', - 'temperatureDifferenceTip': - 'Tänään on suuri lämpötilaero päivän ja yön välillä, säädä vaatetustasi', + 'coldWeatherTip': 'Tänään lämpötila on alhainen, pukeudu lämpimästi ulos mennessäsi, jotta et vilustu', + 'rainyWeatherTip': 'Tänään sataa, ota sateenvarjo mukaan ulos mennessäsi ja ole varovainen', + 'snowyWeatherTip': 'Tänään sataa lunta, tie on liukas, ole varovainen ja pukeudu lämpimästi', + 'foggyWeatherTip': 'Tänään on sumuista, näkyvyys on huono, käytä maskia ulos mennessäsi', + 'windyWeatherTip': 'Tänään on tuulista, ole varovainen ulos mennessäsi ja kiinnitä tavarasi', + 'sunnyWeatherTip': 'Tänään on aurinkoista ja UV-säteily on voimakasta, käytä aurinkovoidetta ulos mennessäsi', + 'temperatureDifferenceTip': 'Tänään on suuri lämpötilaero päivän ja yön välillä, säädä vaatetustasi', 'comfortableWeatherTip': 'Tänään sää on miellyttävä, hyvä aika ulkoiluun', "monday": "Ma", "tuesday": "Ti", @@ -393,6 +794,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", @@ -426,30 +838,26 @@ const Map fiFI = { "logout": "Kirjaudu ulos", "logoutTips": "Oletko varma, että haluat kirjautua ulos nykyisestä tilistä?", 'deleteAccount': 'Poista tili', - 'deleteAccountTips': - 'Oletko varma, että haluat poistaa tilisi pysyvästi? Tätä toimintoa ei voi kumota.', + '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': - 'Verkkoyhteys epäonnistui, tarkista verkkoyhteyden asetukset ja yritä uudelleen', - 'serverTemporarilyUnavailable': - 'Palvelin on väliaikaisesti poissa käytöstä, yritä myöhemmin uudelleen', - 'loginExpiredPleaseRelogin': - 'Istuntosi on vanhentunut, kirjaudu sisään uudelleen', - 'noPermissionForThisOperation': - 'Sinulla ei ole lupaa suorittaa tätä toimintoa', + 'networkConnectionFailed': 'Verkkoyhteys epäonnistui, tarkista verkkoyhteyden asetukset ja yritä uudelleen', + 'serverTemporarilyUnavailable': 'Palvelin on väliaikaisesti poissa käytöstä, yritä myöhemmin uudelleen', + 'loginExpiredPleaseRelogin': 'Istuntosi on vanhentunut, kirjaudu sisään uudelleen', + 'noPermissionForThisOperation': 'Sinulla ei ole lupaa suorittaa tätä toimintoa', 'requestedResourceNotFound': 'Pyydettyä resurssia ei löytynyt', - 'imageProcessingFailedPleaseReselect': - 'Kuvan käsittely epäonnistui, valitse toinen kuva', + 'imageProcessingFailedPleaseReselect': 'Kuvan käsittely epäonnistui, valitse toinen kuva', 'operationFailedPleaseRetry': 'Toiminto epäonnistui, yritä uudelleen', 'serverReturnedError': 'Palvelin palautti virheen', 'serverError': 'Palvelinvirhe', - 'networkConnectionFailedCheckSettings': - 'Verkkoyhteys epäonnistui, tarkista verkkoyhteyden asetukset', - 'serverInternalErrorRetryLater': - 'Sisäinen palvelinvirhe, yritä myöhemmin uudelleen', + 'networkConnectionFailedCheckSettings': 'Verkkoyhteys epäonnistui, tarkista verkkoyhteyden asetukset', + 'serverInternalErrorRetryLater': '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,32 +870,40 @@ 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', - 'calendarWritePermissionDesc': - 'Käytetään kalenteritapahtumien ja muistutusten luomiseen', - 'calendarFullAccessPermissionDesc': - 'Käytetään kalenteritapahtumien ja muistutusten lukemiseen ja hallintaan', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Käytetään kalenteritapahtumien ja muistutusten luomiseen', + 'calendarFullAccessPermissionDesc': 'Käytetään kalenteritapahtumien ja muistutusten lukemiseen ja hallintaan', 'locationPermissionDesc': 'Käytetään nykyisen sijaintitiedon hakemiseen', 'appFunctionNeeds': 'Sovelluksen toiminto vaatii', 'authorized': 'Hyväksytty', @@ -498,29 +914,64 @@ const Map fiFI = { 'permissionGranted': 'Lupa myönnetty', 'permissionRequestError': 'Virhe luvan pyytämisessä', 'phonePermissionDetailDesc': 'Soittotoiminto vaatii puhelinluvan', - 'smsPermissionDetailDesc': - 'Tekstiviestien lähetystoiminto vaatii tekstiviestiluvan', - 'calendarWritePermissionDetailDesc': - 'Kalenteritapahtumien luominen vaatii kalenterin kirjoitusluvan', - 'calendarFullAccessPermissionDetailDesc': - 'Kalenteritapahtumien hallinta vaatii täyden kalenteriluvan', + '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', - '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', + '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', - 'cannotOpenAppStore': - 'Sovelluskauppaa ei voi avata, siirry sovelluskauppaan manuaalisesti päivittääksesi', - 'updateErrorRetry': - 'Päivityksen aikana tapahtui virhe, yritä myöhemmin uudelleen', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Päivityksen aikana tapahtui virhe, yritä myöhemmin uudelleen', // 更新错误重试提示 //国家列表 "邮箱": "Sähköposti", @@ -629,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Oletko varma, että haluat tyhjentää kaiken käännöshistorian? Tätä toimintoa ei voi kumota.", "unknownLanguage": "Tuntematon kieli", "deleteSessionRecord": "Poista istunnon tallenne", - "deleteSessionConfirm": - "Oletko varma, että haluat poistaa kaikki tämän istunnon käännöstallenteet? Tätä toimintoa ei voi kumota.", + "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...", @@ -665,8 +1189,7 @@ const Map fiFI = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Alkuperäinen tallenne", "recordSummary": "Tallenteen yhteenveto", - "clickToGenerateSummary": - "Napsauta alla olevaa painiketta luodaksesi istunnon yhteenvedon", + "clickToGenerateSummary": "Napsauta alla olevaa painiketta luodaksesi istunnon yhteenvedon", "summaryContent": "Yhteenvedon sisältö", "copied": "Kopioitu", "summaryCopiledToClipboard": "Yhteenveto kopioitu leikepöydälle", @@ -674,11 +1197,9 @@ const Map fiFI = { "summaryGenerated": "Yhteenveto luotu", "generating": "Luodaan...", "regenerate": "Luo uudelleen", - "summaryTimeoutMessage": - "Yhteenvedon luontipyyntö aikakatkaistiin, syynä saattaa olla verkko-ongelma tai palvelimen ruuhkaisuus.", + "summaryTimeoutMessage": "Yhteenvedon luontipyyntö aikakatkaistiin, syynä saattaa olla verkko-ongelma tai palvelimen ruuhkaisuus.", "deleteTranslationRecord": "Poista käännöstallenne", - "deleteTranslationConfirm": - "Oletko varma, että haluat poistaa tämän käännöstallenteen? Tätä toimintoa ei voi kumota.", + "deleteTranslationConfirm": "Oletko varma, että haluat poistaa tämän käännöstallenteen? Tätä toimintoa ei voi kumota.", "originalText": "Alkuperäinen teksti", "translatedText": "Käännetty teksti", "sessionSummary": "Istunnon yhteenveto", @@ -696,7 +1217,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...", @@ -706,33 +1227,32 @@ const Map fiFI = { // 配对状态文本 "readyToPair": "Valmis paritukseen", "preparingPairingEnvironment": "Valmistellaan paritusympäristöä...", - "connectDeepSoundViaSystemBluetooth": - "Yhdistä ensin Voitrans-laitteeseen järjestelmän Bluetoothin kautta", + "connectDeepSoundViaSystemBluetooth": "Yhdistä ensin Voitrans-laitteeseen järjestelmän Bluetoothin kautta", "deviceBindingConfirm": "Laitteen sidonnan vahvistus...", "establishingDeviceAssociation": "Luodaan laiteyhteyttä...", "waitingCompletePairing": "Odota, paritus on valmis...", "pairingSuccessRedirecting": "Paritus onnistui! Siirrytään etusivulle...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Varmista, että olet yhteydessä Voitrans-laitteeseen", + "ensureConnectedDeepSoundDevice": "Varmista, että olet yhteydessä Voitrans-laitteeseen", "deviceAlreadyBoundToOtherAccount": "Tämä laite on jo sidottu toiseen tiliin", - "deviceAssociationFailed": - "Laiteyhteyden luominen epäonnistui, yritä uudelleen", - "scanTimeoutEnsureDeviceNearby": - "Skannaus aikakatkaistiin, varmista, että laite on lähellä", + "deviceAssociationFailed": "Laiteyhteyden luominen epäonnistui, yritä uudelleen", + "scanTimeoutEnsureDeviceNearby": "Skannaus aikakatkaistiin, varmista, että laite on lähellä", "networkError": "Verkkovirhe", - "authorizationFailedCheckCode": - "Valtuutus epäonnistui, tarkista, onko valtuutuskoodi oikein", + "authorizationFailedCheckCode": "Valtuutus epäonnistui, tarkista, onko valtuutuskoodi oikein", "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', + 'ensureHeadsetOnAndPairingMode': 'Varmista, että kuulokkeet ovat päällä ja paritustilassa', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Luodaan turvallista yhteyttä...', 'needManualBindingAuthCode': 'Manuaalinen sidontavaltuutuskoodi vaaditaan...', 'pairingSuccessful': 'Paritus onnistui!', @@ -746,13 +1266,20 @@ const Map fiFI = { 'verificationFailedRetry': 'Vahvistus epäonnistui, yritä uudelleen', 'invalidDeviceAddress': 'Virheellinen laiteosoite', 'bleDeviceAssociationFailed': 'BLE-laiteyhteyden luominen epäonnistui', - 'deviceAssociationFailedRetry': - 'Laiteyhteyden luominen epäonnistui, yritä uudelleen', + 'deviceAssociationFailedRetry': 'Laiteyhteyden luominen epäonnistui, yritä uudelleen', 'bleConnectionTimeoutRetry': 'BLE-yhteyden aikakatkaisu, yritä uudelleen', 'blePairingStartupFailed': 'BLE-parituksen aloitus epäonnistui', 'bleConnectionFailed': 'BLE-yhteys epäonnistui', - 'deviceAuthorizationFailedCheckCode': - 'Laitteen valtuutus epäonnistui, tarkista valtuutuskoodi', + '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", @@ -763,14 +1290,11 @@ const Map fiFI = { 'contactInfo': 'Yhteystiedot', 'contactHint': 'Sähköposti/puhelin, jotta voimme ottaa sinuun yhteyttä', 'submit': 'Lähetä', - 'feedbackSubmitSuccess': - 'Palaute lähetetty onnistuneesti, kiitos palautteestasi!', - 'feedbackSubmitFailed': - 'Palautteen lähettäminen epäonnistui, yritä myöhemmin uudelleen', + 'feedbackSubmitSuccess': 'Palaute lähetetty onnistuneesti, kiitos palautteestasi!', + 'feedbackSubmitFailed': 'Palautteen lähettäminen epäonnistui, yritä myöhemmin uudelleen', // OTA升级模块 - "upgradeExitConfirm": - "Päivitys on käynnissä, poistuminen keskeyttää prosessin, oletko varma, että haluat poistua?", + "upgradeExitConfirm": "Päivitys on käynnissä, poistuminen keskeyttää prosessin, oletko varma, että haluat poistua?", "deviceModel": "Laitteen malli", "unknownDevice": "Tuntematon laite", "currentFirmwareVersion": "Nykyinen laiteohjelmiston versio", @@ -782,19 +1306,22 @@ 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", "updateContent": "Päivityksen sisältö", - "removeEarbudsEnsureBattery": - "Poista molemmat kuulokkeet ja varmista, että molempien akun varaus on yli 20%", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..61216c373 100644 --- a/lib/core/translations/language/fr_fr.dart +++ b/lib/core/translations/language/fr_fr.dart @@ -71,8 +71,7 @@ const Map frFR = { // 登录页 "welcome": "Bienvenue", - "loginTips": - "Veuillez vous connecter ou vous inscrire avec votre numéro de téléphone ou votre e-mail", + "loginTips": "Veuillez vous connecter ou vous inscrire avec votre numéro de téléphone ou votre e-mail", "accountNumber": "Numéro de téléphone ou e-mail", "verificationCode": "Code de vérification", "getCode": "Obtenir le code", @@ -85,15 +84,13 @@ const Map frFR = { 'selectCountry': 'Sélectionner le pays/région', "email": "E-mail", "phoneNumber": "Numéro de téléphone", - "pleaseEnterContactInfo": - "Veuillez saisir le numéro de téléphone ou l'e-mail", + "pleaseEnterContactInfo": "Veuillez saisir le numéro de téléphone ou l'e-mail", "invalidEmailFormat": "Format d'e-mail invalide", "invalidPhoneFormat": "Format de numéro de téléphone invalide", "tip": "Conseil", "pleaseEnterCompleteCode": "Veuillez saisir le code de vérification complet", "loginFailed": "Échec de la connexion, veuillez réessayer", - 'pleaseAcceptPrivacyPolicy': - 'Veuillez d\'abord lire et accepter la politique de confidentialité et l\'accord d\'utilisateur', + 'pleaseAcceptPrivacyPolicy': 'Veuillez d\'abord lire et accepter la politique de confidentialité et l\'accord d\'utilisateur', "enterVerificationCode": "Saisir le code de vérification", "verificationCodeSentTo": "Code de vérification envoyé à", "resendVerificationCode": "Renvoyer le code de vérification", @@ -102,10 +99,9 @@ const Map frFR = { // 隐私政策弹窗 "loginDeclaration": "Déclaration Voitrans", // Voitrans 声明 - "welcomeToThisApp": - "Bienvenue sur Voitrans, veuillez lire attentivement", // 欢迎使用Voitrans,请充分阅读 - // "privacyPolicy": "Politique de confidentialité", // 《隐私政策》 - 已存在,使用现有键 - // "userAgreement": "Accord d'utilisateur", // 《用户协议》 - 已存在,使用现有键 + "welcomeToThisApp": "Bienvenue sur Voitrans, veuillez lire attentivement", // 欢迎使用Voitrans,请充分阅读 + // "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", // 不同意 @@ -119,8 +115,7 @@ const Map frFR = { "signal": "Signal", "deviceId": "ID de l'appareil", "firmwareVersion": "Version du firmware", - "disconnectedDevice": - "Aucun appareil connecté, cliquez sur le bouton ci-dessous", + "disconnectedDevice": "Aucun appareil connecté, cliquez sur le bouton ci-dessous", "connectDevice": "Connecter l'appareil", "topAiExperiences": "Meilleures expériences IA", "aiAssistant": "Assistant IA", @@ -130,17 +125,14 @@ const Map frFR = { "aiCompanion": "Accompagnement parent-enfant", "aiCompanionInfo": "Vous comprend et offre un accompagnement chaleureux", "homeSlogan": "Connecter le monde, au-delà du son", - "turnEarphones": - "Veuillez ouvrir l'étui des écouteurs et mettre les écouteurs dans vos oreilles", + "turnEarphones": "Veuillez ouvrir l'étui des écouteurs et mettre les écouteurs dans vos oreilles", "currentlyConnected": "Actuellement connecté :", "unsystemSetup": "Aller aux paramètres système", "talkLater": "Rappeler plus tard", "initializing": "Initialisation...", - "bluetoothInitializationFailure": - "Échec de l'initialisation du service Bluetooth", + "bluetoothInitializationFailure": "Échec de l'initialisation du service Bluetooth", "checkingPermissions": "Vérification des autorisations...", - "lackPermissions": - "Autorisations Bluetooth requises et accès à la localisation nécessaire", + "lackPermissions": "Autorisations Bluetooth requises et accès à la localisation nécessaire", "searchingDevice": "Recherche d'appareils...", "findConnectedDevice": "Appareil connecté trouvé", "notFound": "Aucun appareil Bluetooth connecté trouvé", @@ -148,8 +140,7 @@ const Map frFR = { "connectedDevice": "Connecté à l'appareil :", "failedRefreshDevice": "Échec de l'actualisation de l'appareil", "noDeviceFound": "Aucun appareil connecté trouvé", - "failedDeviceInformation": - "Impossible d'obtenir les informations de l'appareil", + "failedDeviceInformation": "Impossible d'obtenir les informations de l'appareil", "unknownEquipment": "Appareil inconnu", "zeroSignal": "Aucun signal", "good": "Bon", @@ -163,8 +154,7 @@ const Map frFR = { 'chargingCase': 'Étui de charge', 'left': 'Gauche', 'right': 'Droite', - 'checkConnectionStatusFailed': - 'Échec de la vérification de l\'état de la connexion', + 'checkConnectionStatusFailed': 'Échec de la vérification de l\'état de la connexion', // 发现页 "searchAi": "Rechercher des fonctions IA...", @@ -185,11 +175,198 @@ const Map frFR = { "healthConsultant": "Chat IA multifonction", "healthConsultantInfo": "Plus de fonctions de chat IA", "conferenceAssistant": "Assistant de réunion d'affaires", - "conferenceAssistantInfo": - "Enregistrement de procès-verbaux en temps réel et traduction multilingue", + "conferenceAssistantInfo": "Enregistrement de procès-verbaux en temps réel et traduction multilingue", "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 +381,225 @@ 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", @@ -223,22 +612,18 @@ const Map frFR = { "privacySettings": "Paramètres de confidentialité", "privacySettingsInfo": "Gérer la collecte de données et les autorisations", "permissionManagement": "Gestion des autorisations", // 权限管理 - "permissionManagementInfo": - "Gérer les paramètres d'autorisation de l'application", // 管理应用权限设置 + "permissionManagementInfo": "Gérer les paramètres d'autorisation de l'application", // 管理应用权限设置 "aboutApplication": "À propos", "versions": "Version", "checkUpdates": "Vérifier les mises à jour", "selectLanguage": "Sélectionner la langue", "voiceService": "Service vocal", - "voiceServiceInfo": - "Sélectionner le service de reconnaissance et de synthèse vocale", + "voiceServiceInfo": "Sélectionner le service de reconnaissance et de synthèse vocale", "selectVoiceService": "Sélectionner le service vocal", "azureVoiceService": "Service vocal Azure", - "azureVoiceServiceInfo": - "Service basé sur le cloud Microsoft prenant en charge la synthèse et la reconnaissance vocale de haute qualité", + "azureVoiceServiceInfo": "Service basé sur le cloud Microsoft prenant en charge la synthèse et la reconnaissance vocale de haute qualité", "flutterVoiceService": "Service vocal local", - "flutterVoiceServiceInfo": - "Service vocal local de l'appareil sans connexion Internet requise", + "flutterVoiceServiceInfo": "Service vocal local de l'appareil sans connexion Internet requise", 'timbreService': 'Service de timbre', 'timbreServiceInfo': 'Sélectionner le service de synthèse vocale', 'defaultTimbre': 'Timbre par défaut', @@ -248,12 +633,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 +645,30 @@ 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': - 'Découvrez les fonctions d\'interaction vocale intelligente (Aperçu)', - 'loading': 'Chargement...', - -//设备管理页面 - "earphone": "Écouteurs", // 耳机 - "voicerecorder": "Enregistreur vocal", // 录音笔 - "notBound": "Non lié", // 未绑定 - "deviceNotBoundYet": "Appareil pas encore lié", // 还未绑定设备 - "unbind": "Délier", // 解绑 + "realtimeVoiceChat": 'Conversation vocale en temps réel', + "realtimeVoiceChatInfo": 'Découvrez les fonctions d\'interaction vocale intelligente (Aperçu)', + "loading": 'Chargement...', + + //设备管理页面 + "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 @@ -289,8 +678,7 @@ const Map frFR = { "inputMessage": "Saisir un message...", "imListening": "J'écoute...", "canStartTalking": "Vous pouvez commencer à parler", - "addQuestionAboutImage": - "Ajouter des questions ou descriptions sur l'image...", + "addQuestionAboutImage": "Ajouter des questions ou descriptions sur l'image...", "summarizeImageContent": "Résumer le contenu de l'image", "extractImageText": "Extraire le texte de l'image", "translateImageText": "Traduire le texte de l'image", @@ -309,6 +697,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' @@ -319,14 +721,10 @@ const Map frFR = { '• Contrôler les fonctions des écouteurs\n\n' 'Comment puis-je vous aider ?', 'microphonePermission': 'Microphone', - 'voiceRecognitionPermissionText': - 'La fonction de reconnaissance vocale nécessite l\'accès au microphone.', - 'voiceTranslationPermissionText': - 'Les fonctions de reconnaissance vocale et de traduction nécessitent l\'accès au microphone.', - 'phoneCallPermissionText': - 'La fonction d\'appel nécessite l\'accès au microphone pour les appels vocaux.', - 'permissionDeniedText': - 'Vous avez refusé définitivement l\'autorisation du microphone, veuillez aller dans les paramètres système pour l\'activer.', + 'voiceRecognitionPermissionText': 'La fonction de reconnaissance vocale nécessite l\'accès au microphone.', + 'voiceTranslationPermissionText': 'Les fonctions de reconnaissance vocale et de traduction nécessitent l\'accès au microphone.', + 'phoneCallPermissionText': 'La fonction d\'appel nécessite l\'accès au microphone pour les appels vocaux.', + 'permissionDeniedText': 'Vous avez refusé définitivement l\'autorisation du microphone, veuillez aller dans les paramètres système pour l\'activer.', 'startVoiceInput': 'Démarrer la saisie vocale', 'startPhoneCallMode': 'Démarrer le mode appel, commencer la saisie vocale', @@ -341,18 +739,16 @@ 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', 'illegalCriminal': 'Illégal/Criminel', 'privacyRelated': 'Lié à la vie privée', - 'copyrightViolation': - 'Violation de mes droits d\'auteur, droits de la personnalité, etc.', + 'copyrightViolation': 'Violation de mes droits d\'auteur, droits de la personnalité, etc.', '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', + 'reportDescriptionHint': 'Nous aimerions connaître la raison de votre signalement, vous pouvez décrire le problème que vous avez rencontré.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Généré par IA', @@ -375,31 +771,22 @@ const Map frFR = { "driving": "Conduite", "walking": "Marche", "bicycling": "Vélo", - "transit": "Transport public", + "tsransit": "Transit", //天气卡片 weather_card 'weatherQuery': 'Requête météo :', 'highest': 'Maximum', 'lowest': 'Minimum', 'futureForecast': 'Prévisions futures', - 'hotWeatherTip': - 'Il fait chaud aujourd\'hui, veuillez faire attention à la protection contre la chaleur et au refroidissement, buvez plus d\'eau pour éviter les coups de chaleur', - 'coldWeatherTip': - 'Il fait froid aujourd\'hui, veuillez vous habiller chaudement en sortant et attention aux rhumes', - 'rainyWeatherTip': - 'Il pleut aujourd\'hui, veuillez emporter une protection contre la pluie et faire attention à la sécurité de voyage', - 'snowyWeatherTip': - 'Il neige aujourd\'hui, les routes sont glissantes, veuillez faire attention à la sécurité et rester au chaud', - 'foggyWeatherTip': - 'Il y a du brouillard et de la brume aujourd\'hui, la visibilité est mauvaise, veuillez porter un masque en sortant', - 'windyWeatherTip': - 'Il y a du vent aujourd\'hui, veuillez faire attention à la sécurité en sortant et sécuriser les objets', - 'sunnyWeatherTip': - 'Le soleil brille aujourd\'hui avec des rayons UV forts, veuillez vous protéger du soleil en sortant', - 'temperatureDifferenceTip': - 'La différence de température entre le jour et la nuit est importante aujourd\'hui, veuillez ajuster vos vêtements en conséquence', - 'comfortableWeatherTip': - 'Le temps est agréable aujourd\'hui, parfait pour les activités de plein air', + 'hotWeatherTip': 'Il fait chaud aujourd\'hui, veuillez faire attention à la protection contre la chaleur et au refroidissement, buvez plus d\'eau pour éviter les coups de chaleur', + 'coldWeatherTip': 'Il fait froid aujourd\'hui, veuillez vous habiller chaudement en sortant et attention aux rhumes', + 'rainyWeatherTip': 'Il pleut aujourd\'hui, veuillez emporter une protection contre la pluie et faire attention à la sécurité de voyage', + 'snowyWeatherTip': 'Il neige aujourd\'hui, les routes sont glissantes, veuillez faire attention à la sécurité et rester au chaud', + 'foggyWeatherTip': 'Il y a du brouillard et de la brume aujourd\'hui, la visibilité est mauvaise, veuillez porter un masque en sortant', + 'windyWeatherTip': 'Il y a du vent aujourd\'hui, veuillez faire attention à la sécurité en sortant et sécuriser les objets', + 'sunnyWeatherTip': 'Le soleil brille aujourd\'hui avec des rayons UV forts, veuillez vous protéger du soleil en sortant', + 'temperatureDifferenceTip': 'La différence de température entre le jour et la nuit est importante aujourd\'hui, veuillez ajuster vos vêtements en conséquence', + 'comfortableWeatherTip': 'Le temps est agréable aujourd\'hui, parfait pour les activités de plein air', "monday": "Lun", "tuesday": "Mar", "wednesday": "Mer", @@ -407,6 +794,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", @@ -440,30 +838,26 @@ const Map frFR = { "logout": "Se déconnecter", "logoutTips": "Êtes-vous sûr de vouloir vous déconnecter du compte actuel ?", 'deleteAccount': 'Supprimer le compte', - 'deleteAccountTips': - 'Êtes-vous sûr de vouloir supprimer définitivement votre compte ? Cette action ne peut pas être annulée.', + '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': - 'Échec de la connexion réseau, veuillez vérifier les paramètres réseau et réessayer', - 'serverTemporarilyUnavailable': - 'Serveur temporairement indisponible, veuillez réessayer plus tard', + 'networkConnectionFailed': 'Échec de la connexion réseau, veuillez vérifier les paramètres réseau et réessayer', + 'serverTemporarilyUnavailable': 'Serveur temporairement indisponible, veuillez réessayer plus tard', 'loginExpiredPleaseRelogin': 'Connexion expirée, veuillez vous reconnecter', 'noPermissionForThisOperation': 'Aucune autorisation pour cette opération', 'requestedResourceNotFound': 'Ressource demandée introuvable', - 'imageProcessingFailedPleaseReselect': - 'Échec du traitement de l\'image, veuillez resélectionner l\'image', + 'imageProcessingFailedPleaseReselect': 'Échec du traitement de l\'image, veuillez resélectionner l\'image', 'operationFailedPleaseRetry': 'Échec de l\'opération, veuillez réessayer', 'serverReturnedError': 'Le serveur a retourné une erreur', 'serverError': 'Erreur serveur', - 'networkConnectionFailedCheckSettings': - 'Échec de la connexion réseau, veuillez vérifier les paramètres réseau', - 'serverInternalErrorRetryLater': - 'Erreur interne du serveur, veuillez réessayer plus tard', + 'networkConnectionFailedCheckSettings': 'Échec de la connexion réseau, veuillez vérifier les paramètres réseau', + 'serverInternalErrorRetryLater': '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', @@ -473,46 +867,44 @@ const Map frFR = { 'loggedOut': 'Déconnecté', 'logoutFailedRetry': 'Échec de la déconnexion, veuillez réessayer', 'accountPermanentlyDeleted': 'Compte supprimé définitivement', - 'deleteAccountFailedRetry': - 'Échec de la suppression du compte, veuillez réessayer', + 'deleteAccountFailedRetry': 'Échec de la suppression du compte, veuillez réessayer', // 账号服务相关 - 'clearUserDataFailed': - 'Échec de l\'effacement des données utilisateur', // 清理用户数据失败 - 'deleteUserDataFailed': - 'Échec de la suppression des données utilisateur', // 删除用户数据失败 + 'clearUserDataFailed': 'Échec de l\'effacement des données utilisateur', // 清理用户数据失败 + 'deleteUserDataFailed': 'Échec de la suppression des données utilisateur', // 删除用户数据失败 'thirdPartyLogoutSuccess': 'Déconnexion tierce réussie', // 第三方登录退出成功 'thirdPartyLogoutFailed': 'Échec de la déconnexion tierce', // 第三方登录退出失败 - 'signOutProcessError': - 'Erreur survenue lors du processus de déconnexion', // 登出过程发生错误 - 'deleteAccountProcessError': - 'Erreur survenue lors du processus de suppression de compte', // 删除账号过程发生错误 - 'userDataClearSuccess': - 'Données utilisateur effacées avec succès', // 用户数据清理成功 - 'allUserDataClearSuccess': - 'Toutes les données utilisateur effacées avec succès', // 所有用户数据清理成功 - 'accountServiceInitialized': - 'AccountService initialisé', // AccountService 已初始化 + 'signOutProcessError': 'Erreur survenue lors du processus de déconnexion', // 登出过程发生错误 + 'deleteAccountProcessError': 'Erreur survenue lors du processus de suppression de compte', // 删除账号过程发生错误 + 'userDataClearSuccess': 'Données utilisateur effacées avec succès', // 用户数据清理成功 + 'allUserDataClearSuccess': 'Toutes les données utilisateur effacées avec succès', // 所有用户数据清理成功 + 'accountServiceInitialized': 'AccountService initialisé', // AccountService 已初始化 // 权限管理页面 - 'getPermissionStatusFailed': - 'Échec de l\'obtention du statut d\'autorisation', + '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', - 'calendarWritePermissionDesc': - 'Utilisé pour créer des événements de calendrier et des rappels', - 'calendarFullAccessPermissionDesc': - 'Utilisé pour lire et gérer les événements de calendrier et les rappels', - 'locationPermissionDesc': - 'Utilisé pour obtenir les informations de localisation actuelles', + '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': 'Utilisé pour lire et gérer les événements de calendrier et les rappels', + 'locationPermissionDesc': 'Utilisé pour obtenir les informations de localisation actuelles', 'appFunctionNeeds': 'Fonction d\'application nécessaire', 'authorized': 'Autorisé', 'unauthorized': 'Non autorisé', @@ -521,31 +913,65 @@ const Map frFR = { 'unknownStatus': 'Statut inconnu', 'permissionGranted': 'Autorisation accordée', 'permissionRequestError': 'Erreur lors de la demande d\'autorisation', - 'phonePermissionDetailDesc': - 'La fonction d\'appel nécessite l\'autorisation téléphone', + 'phonePermissionDetailDesc': 'La fonction d\'appel nécessite l\'autorisation téléphone', 'smsPermissionDetailDesc': 'La fonction SMS nécessite l\'autorisation SMS', - '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', - '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', + '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', // 稍后提醒按钮 'updateNow': 'Mettre à jour maintenant', // 立即更新按钮 'checkUpdate': 'Vérifier la mise à jour', // 检查更新按钮 'updateFailed': 'Échec de la mise à jour', // 更新失败提示 - 'cannotOpenAppStore': - 'Impossible d\'ouvrir l\'App Store, veuillez mettre à jour manuellement', // 无法打开应用商店提示 - 'updateErrorRetry': - 'Erreur survenue lors du processus de mise à jour, veuillez réessayer plus tard', // 更新错误重试提示 + 'cannotOpenAppStore': 'Impossible d\'ouvrir l\'App Store, veuillez mettre à jour manuellement', // 无法打开应用商店提示 + 'updateErrorRetry': 'Erreur survenue lors du processus de mise à jour, veuillez réessayer plus tard', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -654,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Êtes-vous sûr de vouloir effacer tout l'historique de traduction ? Cette action ne peut pas être annulée.", "unknownLanguage": "Langue inconnue", "deleteSessionRecord": "Supprimer l'enregistrement de session", - "deleteSessionConfirm": - "Êtes-vous sûr de vouloir supprimer tous les enregistrements de traduction pour cette session ? Cette action ne peut pas être annulée.", + "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...", @@ -690,8 +1189,7 @@ const Map frFR = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Enregistrement original", "recordSummary": "Résumé de l'enregistrement", - "clickToGenerateSummary": - "Cliquez sur le bouton ci-dessous pour générer un résumé de session", + "clickToGenerateSummary": "Cliquez sur le bouton ci-dessous pour générer un résumé de session", "summaryContent": "Contenu du résumé", "copied": "Copié", "summaryCopiledToClipboard": "Résumé copié dans le presse-papiers", @@ -699,11 +1197,9 @@ const Map frFR = { "summaryGenerated": "Résumé généré", "generating": "Génération en cours...", "regenerate": "Régénérer", - "summaryTimeoutMessage": - "La demande de génération de résumé a expiré, possiblement due à des problèmes de réseau ou à une surcharge du serveur.", + "summaryTimeoutMessage": "La demande de génération de résumé a expiré, possiblement due à des problèmes de réseau ou à une surcharge du serveur.", "deleteTranslationRecord": "Supprimer l'enregistrement de traduction", - "deleteTranslationConfirm": - "Êtes-vous sûr de vouloir supprimer cet enregistrement de traduction ? Cette action ne peut pas être annulée.", + "deleteTranslationConfirm": "Êtes-vous sûr de vouloir supprimer cet enregistrement de traduction ? Cette action ne peut pas être annulée.", "originalText": "Texte original", "translatedText": "Texte traduit", "sessionSummary": "Résumé de session", @@ -721,7 +1217,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...", @@ -730,66 +1226,60 @@ const Map frFR = { // 配对状态文本 "readyToPair": "Prêt à appairer", - "preparingPairingEnvironment": - "Préparation de l'environnement d'appairage...", - "connectDeepSoundViaSystemBluetooth": - "Veuillez d'abord connecter l'appareil Voitrans via le Bluetooth système", + "preparingPairingEnvironment": "Préparation de l'environnement d'appairage...", + "connectDeepSoundViaSystemBluetooth": "Veuillez d'abord connecter l'appareil Voitrans via le Bluetooth système", "deviceBindingConfirm": "Confirmation de liaison d'appareil...", - "establishingDeviceAssociation": - "Établissement de l'association d'appareil...", + "establishingDeviceAssociation": "Établissement de l'association d'appareil...", "waitingCompletePairing": "Veuillez patienter, appairage en cours...", - "pairingSuccessRedirecting": - "Appairage réussi ! Redirection vers la page d'accueil...", + "pairingSuccessRedirecting": "Appairage réussi ! Redirection vers la page d'accueil...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Veuillez vous assurer que l'appareil connecté est Voitrans", - "deviceAlreadyBoundToOtherAccount": - "Cet appareil est déjà lié à un autre compte", - "deviceAssociationFailed": - "Échec de l'association d'appareil, veuillez réessayer", - "scanTimeoutEnsureDeviceNearby": - "Délai de scan dépassé, veuillez vous assurer que l'appareil est à proximité", + "ensureConnectedDeepSoundDevice": "Veuillez vous assurer que l'appareil connecté est Voitrans", + "deviceAlreadyBoundToOtherAccount": "Cet appareil est déjà lié à un autre compte", + "deviceAssociationFailed": "Échec de l'association d'appareil, veuillez réessayer", + "scanTimeoutEnsureDeviceNearby": "Délai de scan dépassé, veuillez vous assurer que l'appareil est à proximité", "networkError": "Erreur réseau", - "authorizationFailedCheckCode": - "Échec de l'autorisation, veuillez vérifier le code d'autorisation", + "authorizationFailedCheckCode": "É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...', + 'ensureHeadsetOnAndPairingMode': 'Veuillez vous assurer que le casque est allumé et en mode appairage', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Établissement d\'une connexion sécurisée...', - 'needManualBindingAuthCode': - 'Liaison manuelle du code d\'autorisation nécessaire...', + 'needManualBindingAuthCode': 'Liaison manuelle du code d\'autorisation nécessaire...', 'pairingSuccessful': 'Appairage réussi !', 'enableBluetooth': 'Activer le Bluetooth', 'grantPermissions': 'Accorder les autorisations', 'retryAssociation': 'Réessayer l\'association', 'retryAuthorization': 'Réessayer l\'autorisation', - 'pleaseGrantNecessaryPermissions': - 'Veuillez accorder les autorisations nécessaires', + 'pleaseGrantNecessaryPermissions': 'Veuillez accorder les autorisations nécessaires', 'checkFailedRetry': 'Échec de la vérification, veuillez réessayer', 'pleaseConnectDeepSoundDevice': 'Veuillez connecter l\'appareil Voitrans', 'verificationFailedRetry': 'Échec de la vérification, veuillez réessayer', 'invalidDeviceAddress': 'Adresse d\'appareil invalide', 'bleDeviceAssociationFailed': 'Échec de l\'association d\'appareil BLE', - 'deviceAssociationFailedRetry': - 'Échec de l\'association d\'appareil, veuillez réessayer', - 'bleConnectionTimeoutRetry': - 'Délai de connexion BLE dépassé, veuillez réessayer', + 'deviceAssociationFailedRetry': 'Échec de l\'association d\'appareil, veuillez réessayer', + 'bleConnectionTimeoutRetry': 'Délai de connexion BLE dépassé, veuillez réessayer', 'blePairingStartupFailed': 'Échec du démarrage de l\'appairage BLE', 'bleConnectionFailed': 'Échec de la connexion BLE', - 'deviceAuthorizationFailedCheckCode': - 'Échec de l\'autorisation d\'appareil, veuillez vérifier le code d\'autorisation', + '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", @@ -801,12 +1291,10 @@ const Map frFR = { 'contactHint': 'E-mail/Téléphone pour que nous puissions vous contacter', 'submit': 'Soumettre', 'feedbackSubmitSuccess': 'Commentaires soumis avec succès, merci !', - 'feedbackSubmitFailed': - 'Échec de la soumission des commentaires, veuillez réessayer plus tard', + 'feedbackSubmitFailed': 'Échec de la soumission des commentaires, veuillez réessayer plus tard', // OTA升级模块 - "upgradeExitConfirm": - "Une mise à niveau est actuellement en cours, quitter interrompra le processus de mise à niveau. Êtes-vous sûr de vouloir quitter ?", + "upgradeExitConfirm": "Une mise à niveau est actuellement en cours, quitter interrompra le processus de mise à niveau. Êtes-vous sûr de vouloir quitter ?", "deviceModel": "Modèle d'appareil", "unknownDevice": "Appareil inconnu", "currentFirmwareVersion": "Version actuelle du firmware", @@ -818,13 +1306,15 @@ const Map frFR = { "connectionFailed": "Échec de la connexion", "retryConnection": "Réessayer la connexion", "ota_updateNow": "Mettre à jour maintenant", - "keepConnectedDontClose": - "Veuillez maintenir l'appareil connecté, ne fermez pas l'application", + "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", "charging": "En charge", "updateContent": "Contenu de la mise à jour", - "removeEarbudsEnsureBattery": - "Retirez les deux écouteurs et assurez-vous que le niveau de batterie est supérieur à 20%", + "removeEarbudsEnsureBattery": "Retirez les deux écouteurs et assurez-vous que le niveau de batterie est supérieur à 20%", // 音乐列表页面 "noMusic": "Aucune musique", // 暂无音乐 @@ -873,38 +1363,21 @@ 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..0a6b1c3fe 100644 --- a/lib/core/translations/language/hi_in.dart +++ b/lib/core/translations/language/hi_in.dart @@ -90,8 +90,7 @@ const Map hiIN = { "tip": "संकेत", "pleaseEnterCompleteCode": "कृपया पूरा सत्यापन कोड दर्ज करें", "loginFailed": "लॉगिन विफल, कृपया पुनः प्रयास करें", - 'pleaseAcceptPrivacyPolicy': - 'कृपया पहले गोपनीयता नीति और उपयोगकर्ता अनुबंध पढ़ें और सहमत हों', + 'pleaseAcceptPrivacyPolicy': 'कृपया पहले गोपनीयता नीति और उपयोगकर्ता अनुबंध पढ़ें और सहमत हों', "enterVerificationCode": "सत्यापन कोड दर्ज करें", "verificationCodeSentTo": "सत्यापन कोड भेजा गया है", "resendVerificationCode": "सत्यापन कोड पुनः भेजें", @@ -99,12 +98,14 @@ const Map hiIN = { "usePasswordLogin": "पासवर्ड से लॉगिन करें", // 隐私政策弹窗 - "loginDeclaration": "Voitrans घोषणा", - "welcomeToThisApp": "Voitrans में आपका स्वागत है, कृपया ध्यान से पढ़ें", + "loginDeclaration": "Voitrans घोषणा", // Voitrans 声明 + "welcomeToThisApp": "Voitrans में आपका स्वागत है, कृपया ध्यान से पढ़ें", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", 'सहमत हों और दर्ज करें' पर क्लिक करने का मतलब है कि आपने उपरोक्त समझौतों को पूरी तरह से पढ़ लिया है और उनसे सहमत हैं। 'असहमत' पर क्लिक करने से एप्लिकेशन से बाहर निकल जाएगा।", - "disagree": "असहमत", - "agreeAndEnter": "सहमत हों और दर्ज करें", + ", 'सहमत हों और दर्ज करें' पर क्लिक करने का मतलब है कि आपने उपरोक्त समझौतों को पूरी तरह से पढ़ लिया है और उनसे सहमत हैं। 'असहमत' पर क्लिक करने से एप्लिकेशन से बाहर निकल जाएगा।", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "असहमत", // 不同意 + "agreeAndEnter": "सहमत हों और दर्ज करें", // 同意并进入 // 首页 "deviceStatus": "डिवाइस की स्थिति", @@ -114,28 +115,24 @@ const Map hiIN = { "signal": "सिग्नल", "deviceId": "डिवाइस आईडी", "firmwareVersion": "फर्मवेयर संस्करण", - "disconnectedDevice": - "कोई डिवाइस कनेक्ट नहीं है, कनेक्ट करने के लिए नीचे दिए गए बटन पर क्लिक करें", + "disconnectedDevice": "कोई डिवाइस कनेक्ट नहीं है, कनेक्ट करने के लिए नीचे दिए गए बटन पर क्लिक करें", "connectDevice": "डिवाइस कनेक्ट करें", "topAiExperiences": "शीर्ष एआई अनुभव", "aiAssistant": "एआई ऑल-इन-वन असिस्टेंट", "aiAssistantInfo": "24/7 विशेष सलाहकार, सवालों के जवाब देना, सुझाव देना", "interpretation": "एक साथ व्याख्या", - "simultaneousInterpretationInfo": - "80+ भाषाओं में रीयल-टाइम अनुवाद, चिंता मुक्त विदेश यात्रा", + "simultaneousInterpretationInfo": "80+ भाषाओं में रीयल-टाइम अनुवाद, चिंता मुक्त विदेश यात्रा", "aiCompanion": "परिवार का साथी", "aiCompanionInfo": "आपको समझता है, गर्मजोशी से साथ देता है", "homeSlogan": "दुनिया को जोड़ना, ध्वनि को पार करना", - "turnEarphones": - "कृपया ईयरफोन चार्जिंग केस खोलें और ईयरफोन को अपने कानों में लगाएं", + "turnEarphones": "कृपया ईयरफोन चार्जिंग केस खोलें और ईयरफोन को अपने कानों में लगाएं", "currentlyConnected": "वर्तमान में जुड़ा हुआ है:", "unsystemSetup": "सिस्टम सेटिंग्स पर जाएं", "talkLater": "बाद में", "initializing": "प्रारंभ हो रहा है...", "bluetoothInitializationFailure": "ब्लूटूथ सेवा प्रारंभ करने में विफल", "checkingPermissions": "अनुमतियों की जाँच हो रही है...", - "lackPermissions": - "ब्लूटूथ अनुमतियों की कमी है और लोकेशन तक पहुंच नहीं सकता है", + "lackPermissions": "ब्लूटूथ अनुमतियों की कमी है और लोकेशन तक पहुंच नहीं सकता है", "searchingDevice": "डिवाइस खोज रहा है...", "findConnectedDevice": "कनेक्टेड डिवाइस मिला", "notFound": "कोई कनेक्टेड ब्लूटूथ डिवाइस नहीं मिला", @@ -178,11 +175,198 @@ const Map hiIN = { "healthConsultant": "बहु-कार्यात्मक एआई चैट", "healthConsultantInfo": "अधिक एआई चैट फ़ंक्शन प्रदान करता है", "conferenceAssistant": "बिजनेस मीटिंग असिस्टेंट", - "conferenceAssistantInfo": - "रीयल-टाइम मीटिंग मिनट रिकॉर्डिंग, बहु-भाषा अनुवाद", + "conferenceAssistantInfo": "रीयल-टाइम मीटिंग मिनट रिकॉर्डिंग, बहु-भाषा अनुवाद", "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 +381,225 @@ 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 +611,8 @@ const Map hiIN = { "lastBackup": "अंतिम बैकअप:", "privacySettings": "गोपनीयता सेटिंग्स", "privacySettingsInfo": "डेटा संग्रह और अनुमतियों का प्रबंधन करें", - "permissionManagement": "अनुमति प्रबंधन", - "permissionManagementInfo": "ऐप अनुमति सेटिंग्स का प्रबंधन करें", + "permissionManagement": "अनुमति प्रबंधन", // 权限管理 + "permissionManagementInfo": "ऐप अनुमति सेटिंग्स का प्रबंधन करें", // 管理应用权限设置 "aboutApplication": "ऐप के बारे में", "versions": "संस्करण", "checkUpdates": "अपडेट की जाँच करें", @@ -225,11 +621,9 @@ const Map hiIN = { "voiceServiceInfo": "वॉयस रिकग्निशन और सिंथेसिस सर्विस चुनें", "selectVoiceService": "वॉयस सर्विस चुनें", "azureVoiceService": "Azure वॉयस सर्विस", - "azureVoiceServiceInfo": - "Microsoft की क्लाउड वॉयस सर्विस, उच्च गुणवत्ता वाली वॉयस सिंथेसिस और रिकग्निशन का समर्थन करती है", + "azureVoiceServiceInfo": "Microsoft की क्लाउड वॉयस सर्विस, उच्च गुणवत्ता वाली वॉयस सिंथेसिस और रिकग्निशन का समर्थन करती है", "flutterVoiceService": "Flutter लोकल वॉयस सर्विस", - "flutterVoiceServiceInfo": - "डिवाइस की लोकल वॉयस सर्विस, बिना इंटरनेट कनेक्शन के इस्तेमाल की जा सकती है", + "flutterVoiceServiceInfo": "डिवाइस की लोकल वॉयस सर्विस, बिना इंटरनेट कनेक्शन के इस्तेमाल की जा सकती है", 'timbreService': 'टिम्बर सर्विस', 'timbreServiceInfo': 'टिम्बर वॉयस सिंथेसिस सर्विस चुनें', 'defaultTimbre': 'डिफ़ॉल्ट टिम्बर', @@ -251,24 +645,30 @@ const Map hiIN = { 'networkErrorRetry': 'नेटवर्क त्रुटि, कृपया बाद में पुनः प्रयास करें', // 设备管理相关 - 'clearPairedDevices': 'पेयर किए गए डिवाइस साफ़ करें', - 'clearPairedDevicesConfirm': - 'क्या आप वाकई सभी पेयर किए गए डिवाइस साफ़ करना चाहते हैं?', - 'clearPairedDevicesSuccess': 'पेयर किए गए डिवाइस सफलतापूर्वक साफ़ किए गए', - 'clearPairedDevicesFailed': 'पेयर किए गए डिवाइस साफ़ करने में विफल', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "रीयल-टाइम वॉयस चैट", - "realtimeVoiceChatInfo": - "बुद्धिमान वॉयस इंटरैक्शन फ़ंक्शन का अनुभव करें (फ़ंक्शन पूर्वावलोकन)", + "realtimeVoiceChatInfo": "बुद्धिमान वॉयस इंटरैक्शन फ़ंक्शन का अनुभव करें (फ़ंक्शन पूर्वावलोकन)", "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 @@ -295,9 +695,22 @@ const Map hiIN = { "listeningToYou": "आपको सुन रहा हूँ...", "processing": "संसाधित हो रहा है...", "loadMoreMessages": "और संदेश लोड करें...", - "loadFailedClickRetry": - "लोड करने में विफल, पुनः प्रयास करने के लिए क्लिक करें", + "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' @@ -308,20 +721,16 @@ const Map hiIN = { '• ईयरफोन फ़ंक्शन को नियंत्रित करना\n\n' 'मैं आपकी क्या मदद कर सकता हूँ?', 'microphonePermission': 'माइक्रोफोन', - 'voiceRecognitionPermissionText': - 'वॉयस रिकग्निशन फ़ंक्शन के लिए माइक्रोफोन एक्सेस की आवश्यकता होती है।', - 'voiceTranslationPermissionText': - 'वॉयस रिकग्निशन और अनुवाद फ़ंक्शन के लिए माइक्रोफोन एक्सेस की आवश्यकता होती है।', - 'phoneCallPermissionText': - 'कॉल करने के लिए वॉयस कॉल के लिए माइक्रोफोन एक्सेस की आवश्यकता होती है।', - 'permissionDeniedText': - 'आपने माइक्रोफोन की अनुमति को स्थायी रूप से अस्वीकार कर दिया है, कृपया इसे सक्षम करने के لیے सिस्टम सेटिंग्स पर जाएं।', + 'voiceRecognitionPermissionText': 'वॉयस रिकग्निशन फ़ंक्शन के लिए माइक्रोफोन एक्सेस की आवश्यकता होती है।', + 'voiceTranslationPermissionText': 'वॉयस रिकग्निशन और अनुवाद फ़ंक्शन के लिए माइक्रोफोन एक्सेस की आवश्यकता होती है।', + 'phoneCallPermissionText': 'कॉल करने के लिए वॉयस कॉल के लिए माइक्रोफोन एक्सेस की आवश्यकता होती है।', + 'permissionDeniedText': 'आपने माइक्रोफोन की अनुमति को स्थायी रूप से अस्वीकार कर दिया है, कृपया इसे सक्षम करने के لیے सिस्टम सेटिंग्स पर जाएं।', 'startVoiceInput': 'वॉयस इनपुट शुरू करें', 'startPhoneCallMode': 'कॉल मोड शुरू करें, वॉयस इनपुट शुरू करें', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'अपना संदेश यहां दर्ज करें...', - 'characterCount': '{count} अक्षर', + 'fullScreenEditorHint': 'अपना संदेश यहां दर्ज करें...', // 全屏编辑器输入提示 + 'characterCount': '{count} अक्षर', // 字符计数显示 // 消息长按操作 'copy': 'कॉपी करें', @@ -330,6 +739,7 @@ const Map hiIN = { 'submitSuccess': 'सफलतापूर्वक सबमिट किया गया', 'submitFailed': 'सबमिट करने में विफल', 'reportSubmitted': 'रिपोर्ट सबमिट कर दी गई है, हम इसे जल्द ही संसाधित करेंगे', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'हानिकारक/असुरक्षित', 'pornographicVulgar': 'अश्लील/अशिष्ट', 'misleadingAttack': 'भ्रामक/हमला', @@ -337,8 +747,8 @@ const Map hiIN = { 'privacyRelated': 'गोपनीयता से संबंधित', 'copyrightViolation': 'मेरे कॉपीराइट, प्रतिष्ठा आदि का उल्लंघन करता है।', 'other': 'अन्य', - 'reportDescriptionHint': - 'हम जानना चाहते हैं कि आप क्यों रिपोर्ट कर रहे हैं, आप जिस समस्या का सामना कर रहे हैं उसका वर्णन कर सकते हैं।', + 'reportDescriptionHint': 'हम जानना चाहते हैं कि आप क्यों रिपोर्ट कर रहे हैं, आप जिस समस्या का सामना कर रहे हैं उसका वर्णन कर सकते हैं।', + //'submit': '提交', //Message_bubble 'generatedByAi': 'एआई द्वारा उत्पन्न', @@ -349,15 +759,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": "साइकिल चलाना", @@ -369,22 +779,14 @@ const Map hiIN = { 'lowest': 'न्यूनतम', 'futureForecast': 'भविष्य का पूर्वानुमान', 'hotWeatherTip': 'आज गर्मी है, कृपया लू से बचें और खूब पानी पिएं', - 'coldWeatherTip': - 'आज तापमान कम है, कृपया बाहर जाते समय गर्म कपड़े पहनें ताकि जुकाम न लगे', - 'rainyWeatherTip': - 'आज बारिश हो रही है, कृपया बाहर जाते समय छाता ले जाएं और सावधान रहें', - 'snowyWeatherTip': - 'आज बर्फ पड़ रही है, सड़क फिसलन भरी है, कृपया सावधान रहें और गर्म कपड़े पहनें', - 'foggyWeatherTip': - 'आज कोहरा है, दृश्यता कम है, कृपया बाहर जाते समय मास्क पहनें', - 'windyWeatherTip': - 'आज हवा तेज है, कृपया बाहर जाते समय सावधान रहें और अपनी चीजों को सुरक्षित रखें', - 'sunnyWeatherTip': - 'आज धूप तेज है और यूवी किरणें मजबूत हैं, कृपया बाहर जाते समय सनस्क्रीन का उपयोग करें', - 'temperatureDifferenceTip': - 'आज दिन और रात के तापमान में बड़ा अंतर है, कृपया अपने कपड़े समायोजित करें', - 'comfortableWeatherTip': - 'आज मौसम सुहावना है, बाहरी गतिविधियों के लिए एक अच्छा समय है', + 'coldWeatherTip': 'आज तापमान कम है, कृपया बाहर जाते समय गर्म कपड़े पहनें ताकि जुकाम न लगे', + 'rainyWeatherTip': 'आज बारिश हो रही है, कृपया बाहर जाते समय छाता ले जाएं और सावधान रहें', + 'snowyWeatherTip': 'आज बर्फ पड़ रही है, सड़क फिसलन भरी है, कृपया सावधान रहें और गर्म कपड़े पहनें', + 'foggyWeatherTip': 'आज कोहरा है, दृश्यता कम है, कृपया बाहर जाते समय मास्क पहनें', + 'windyWeatherTip': 'आज हवा तेज है, कृपया बाहर जाते समय सावधान रहें और अपनी चीजों को सुरक्षित रखें', + 'sunnyWeatherTip': 'आज धूप तेज है और यूवी किरणें मजबूत हैं, कृपया बाहर जाते समय सनस्क्रीन का उपयोग करें', + 'temperatureDifferenceTip': 'आज दिन और रात के तापमान में बड़ा अंतर है, कृपया अपने कपड़े समायोजित करें', + 'comfortableWeatherTip': 'आज मौसम सुहावना है, बाहरी गतिविधियों के लिए एक अच्छा समय है', "monday": "सोम", "tuesday": "मंगल", "wednesday": "बुध", @@ -392,6 +794,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": "आंशिक रूप से बादल छाए हुए", @@ -425,30 +838,26 @@ const Map hiIN = { "logout": "लॉग आउट करें", "logoutTips": "क्या आप वाकई वर्तमान खाते से लॉग आउट करना चाहते हैं?", 'deleteAccount': 'खाता हटाएं', - 'deleteAccountTips': - 'क्या आप वाकई अपना खाता स्थायी रूप से हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।', + 'deleteAccountTips': 'क्या आप वाकई अपना खाता स्थायी रूप से हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 - 'networkConnectionFailed': - 'नेटवर्क कनेक्शन विफल, कृपया अपनी नेटवर्क सेटिंग्स जांचें और पुनः प्रयास करें', - 'serverTemporarilyUnavailable': - 'सर्वर अस्थायी रूप से अनुपलब्ध है, कृपया बाद में पुनः प्रयास करें', - 'loginExpiredPleaseRelogin': - 'आपका सत्र समाप्त हो गया है, कृपया पुनः लॉग इन करें', - 'noPermissionForThisOperation': - 'इस ऑपरेशन को करने की आपके पास अनुमति नहीं है', + 'networkConnectionFailed': 'नेटवर्क कनेक्शन विफल, कृपया अपनी नेटवर्क सेटिंग्स जांचें और पुनः प्रयास करें', + 'serverTemporarilyUnavailable': 'सर्वर अस्थायी रूप से अनुपलब्ध है, कृपया बाद में पुनः प्रयास करें', + 'loginExpiredPleaseRelogin': 'आपका सत्र समाप्त हो गया है, कृपया पुनः लॉग इन करें', + 'noPermissionForThisOperation': 'इस ऑपरेशन को करने की आपके पास अनुमति नहीं है', 'requestedResourceNotFound': 'अनुरोधित संसाधन नहीं मिला', - 'imageProcessingFailedPleaseReselect': - 'छवि प्रसंस्करण विफल, कृपया दूसरी छवि चुनें', + 'imageProcessingFailedPleaseReselect': 'छवि प्रसंस्करण विफल, कृपया दूसरी छवि चुनें', 'operationFailedPleaseRetry': 'ऑपरेशन विफल, कृपया पुनः प्रयास करें', 'serverReturnedError': 'सर्वर ने एक त्रुटि वापस की', 'serverError': 'सर्वर त्रुटि', - 'networkConnectionFailedCheckSettings': - 'नेटवर्क कनेक्शन विफल, कृपया अपनी नेटवर्क सेटिंग्स जांचें', - 'serverInternalErrorRetryLater': - 'सर्वर आंतरिक त्रुटि, कृपया बाद में पुनः प्रयास करें', + 'networkConnectionFailedCheckSettings': 'नेटवर्क कनेक्शन विफल, कृपया अपनी नेटवर्क सेटिंग्स जांचें', + 'serverInternalErrorRetryLater': 'सर्वर आंतरिक त्रुटि, कृपया बाद में पुनः प्रयास करें', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'छवि संपीड़न विफल', 'avatarUpdateFailed': 'अवतार अपडेट विफल', 'usernameCannotBeEmpty': 'उपयोगकर्ता नाम खाली नहीं हो सकता', @@ -461,34 +870,41 @@ 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': 'एसएमएस भेजने के लिए उपयोग किया जाता है', - 'calendarWritePermissionDesc': - 'कैलेंडर ईवेंट और रिमाइंडर बनाने के लिए उपयोग किया जाता है', - 'calendarFullAccessPermissionDesc': - 'कैलेंडर ईवेंट और रिमाइंडर पढ़ने और प्रबंधित करने के लिए उपयोग किया जाता है', - 'locationPermissionDesc': - 'वर्तमान स्थान की जानकारी प्राप्त करने के लिए उपयोग किया जाता है', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'कैलेंडर ईवेंट और रिमाइंडर बनाने के लिए उपयोग किया जाता है', + 'calendarFullAccessPermissionDesc': 'कैलेंडर ईवेंट और रिमाइंडर पढ़ने और प्रबंधित करने के लिए उपयोग किया जाता है', + 'locationPermissionDesc': 'वर्तमान स्थान की जानकारी प्राप्त करने के लिए उपयोग किया जाता है', 'appFunctionNeeds': 'ऐप फ़ंक्शन की आवश्यकता है', 'authorized': 'अधिकृत', 'unauthorized': 'अनधिकृत', @@ -497,32 +913,65 @@ const Map hiIN = { 'unknownStatus': 'अज्ञात स्थिति', 'permissionGranted': 'अनुमति दी गई', 'permissionRequestError': 'अनुमति का अनुरोध करते समय त्रुटि हुई', - 'phonePermissionDetailDesc': - 'कॉल फ़ंक्शन के लिए फ़ोन अनुमति की आवश्यकता होती है', - 'smsPermissionDetailDesc': - 'एसएमएस भेजने के लिए एसएमएस अनुमति की आवश्यकता होती है', - 'calendarWritePermissionDetailDesc': - 'कैलेंडर ईवेंट बनाने के लिए कैलेंडर में लिखने की अनुमति की आवश्यकता होती है', - 'calendarFullAccessPermissionDetailDesc': - 'कैलेंडर ईवेंट प्रबंधित करने के लिए पूर्ण कैलेंडर अनुमति की आवश्यकता होती है', - 'locationPermissionDetailDesc': - 'स्थान की जानकारी प्राप्त करने के लिए स्थान अनुमति की आवश्यकता होती है', - 'appNeedsPermissionForFullFunction': - 'ऐप को पूर्ण कार्यक्षमता के लिए इस अनुमति की आवश्यकता है', - 'permanentDenialText': - 'आपने {permission} अनुमति को स्थायी रूप से अस्वीकार कर दिया है, कृपया इसे सक्षम करने کے لیے ऐप सेटिंग्स पर जाएं', + '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': 'अपडेट के दौरान एक त्रुटि हुई, कृपया बाद में पुनः प्रयास करें', // 更新错误重试提示 //国家列表 "邮箱": "ईमेल", @@ -631,8 +1080,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,18 +1105,76 @@ 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": - "क्या आप वाकई सभी अनुवाद इतिहास साफ़ करना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।", + "clearHistoryConfirm": "क्या आप वाकई सभी अनुवाद इतिहास साफ़ करना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।", "unknownLanguage": "अज्ञात भाषा", "deleteSessionRecord": "सत्र रिकॉर्ड हटाएं", - "deleteSessionConfirm": - "क्या आप वाकई इस सत्र के सभी अनुवाद रिकॉर्ड हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।", + "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", - // 翻译录音文件列表页 (translation_list_view.dart) + // 翻译录音文件列表页 "translateAudioFiles": "ऑडियो फ़ाइलों का अनुवाद करें", "noAudioFiles": "अभी तक कोई ऑडियो फ़ाइल नहीं", "calculating": "गणना हो रही है...", @@ -667,8 +1189,7 @@ const Map hiIN = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "मूल रिकॉर्ड", "recordSummary": "रिकॉर्ड सारांश", - "clickToGenerateSummary": - "सत्र सारांश बनाने के लिए नीचे दिए गए बटन पर क्लिक करें", + "clickToGenerateSummary": "सत्र सारांश बनाने के लिए नीचे दिए गए बटन पर क्लिक करें", "summaryContent": "सारांश सामग्री", "copied": "कॉपी किया गया", "summaryCopiledToClipboard": "सारांश क्लिपबोर्ड पर कॉपी किया गया", @@ -676,11 +1197,9 @@ const Map hiIN = { "summaryGenerated": "सारांश बनाया गया", "generating": "बनाया जा रहा है...", "regenerate": "पुनः बनाएं", - "summaryTimeoutMessage": - "सारांश बनाने का अनुरोध समय समाप्त हो गया, शायद नेटवर्क समस्याओं या व्यस्त सर्वर के कारण।", + "summaryTimeoutMessage": "सारांश बनाने का अनुरोध समय समाप्त हो गया, शायद नेटवर्क समस्याओं या व्यस्त सर्वर के कारण।", "deleteTranslationRecord": "अनुवाद रिकॉर्ड हटाएं", - "deleteTranslationConfirm": - "क्या आप वाकई इस अनुवाद रिकॉर्ड को हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।", + "deleteTranslationConfirm": "क्या आप वाकई इस अनुवाद रिकॉर्ड को हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।", "originalText": "मूल पाठ", "translatedText": "अनुवादित पाठ", "sessionSummary": "सत्र सारांश", @@ -698,7 +1217,7 @@ const Map hiIN = { "autoInputCode": "कोड स्वतः दर्ज करें", "skipBinding": "बाँधना छोड़ें", "rescan": "पुनः स्कैन करें", - "skip": "छोड़ें", + "verifyingDevice": "डिवाइस सत्यापित हो रहा है...", "confirmBinding": "बाँधने की पुष्टि करें", "associatingDevice": "डिवाइस को संबद्ध किया जा रहा है...", @@ -708,37 +1227,34 @@ const Map hiIN = { // 配对状态文本 "readyToPair": "पेयर करने के लिए तैयार", "preparingPairingEnvironment": "पेयरिंग वातावरण तैयार हो रहा है...", - "connectDeepSoundViaSystemBluetooth": - "कृपया पहले सिस्टम ब्लूटूथ के माध्यम से Voitrans डिवाइस से कनेक्ट करें", + "connectDeepSoundViaSystemBluetooth": "कृपया पहले सिस्टम ब्लूटूथ के माध्यम से Voitrans डिवाइस से कनेक्ट करें", "deviceBindingConfirm": "डिवाइस बाइंडिंग की पुष्टि...", "establishingDeviceAssociation": "डिवाइस एसोसिएशन स्थापित हो रहा है...", "waitingCompletePairing": "कृपया प्रतीक्षा करें, पेयरिंग पूरी हो रही है...", - "pairingSuccessRedirecting": - "पेयरिंग सफल! होमपेज पर रीडायरेक्ट किया जा रहा है...", + "pairingSuccessRedirecting": "पेयरिंग सफल! होमपेज पर रीडायरेक्ट किया जा रहा है...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "कृपया सुनिश्चित करें कि आप Voitrans डिवाइस से जुड़े हैं", - "deviceAlreadyBoundToOtherAccount": - "यह डिवाइस पहले से ही दूसरे खाते से बंधा हुआ है", + "ensureConnectedDeepSoundDevice": "कृपया सुनिश्चित करें कि आप Voitrans डिवाइस से जुड़े हैं", + "deviceAlreadyBoundToOtherAccount": "यह डिवाइस पहले से ही दूसरे खाते से बंधा हुआ है", "deviceAssociationFailed": "डिवाइस एसोसिएशन विफल, कृपया पुनः प्रयास करें", - "scanTimeoutEnsureDeviceNearby": - "स्कैन टाइमआउट, कृपया सुनिश्चित करें कि डिवाइस पास में है", + "scanTimeoutEnsureDeviceNearby": "स्कैन टाइमआउट, कृपया सुनिश्चित करें कि डिवाइस पास में है", "networkError": "नेटवर्क त्रुटि", - "authorizationFailedCheckCode": - "प्राधिकरण विफल, कृपया जांचें कि प्राधिकरण कोड सही है या नहीं", + "authorizationFailedCheckCode": "प्राधिकरण विफल, कृपया जांचें कि प्राधिकरण कोड सही है या नहीं", "pairingFailedRetry": "पेयरिंग विफल, कृपया पुनः प्रयास करें", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'कृपया ब्लूटूथ सक्षम करें', 'deviceDisconnected': 'डिवाइस डिस्कनेक्ट हो गया', 'readyToStartPairing': 'पेयरिंग शुरू करने के लिए तैयार', 'checkingEnvironment': 'वातावरण की जाँच हो रही है...', - 'ensureHeadsetOnAndPairingMode': - 'कृपया सुनिश्चित करें कि हेडसेट चालू है और पेयरिंग मोड में है', + 'ensureHeadsetOnAndPairingMode': 'कृपया सुनिश्चित करें कि हेडसेट चालू है और पेयरिंग मोड में है', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'सुरक्षित कनेक्शन स्थापित हो रहा है...', - 'needManualBindingAuthCode': - 'मैनुअल बाइंडिंग प्राधिकरण कोड की आवश्यकता है...', + 'needManualBindingAuthCode': 'मैनुअल बाइंडिंग प्राधिकरण कोड की आवश्यकता है...', 'pairingSuccessful': 'पेयरिंग सफल!', 'enableBluetooth': 'ब्लूटूथ सक्षम करें', 'grantPermissions': 'अनुमतियाँ दें', @@ -750,32 +1266,35 @@ const Map hiIN = { 'verificationFailedRetry': 'सत्यापन विफल, कृपया पुनः प्रयास करें', 'invalidDeviceAddress': 'अमान्य डिवाइस पता', 'bleDeviceAssociationFailed': 'BLE डिवाइस एसोसिएशन विफल', - 'deviceAssociationFailedRetry': - 'डिवाइस एसोसिएशन विफल, कृपया पुनः प्रयास करें', + 'deviceAssociationFailedRetry': 'डिवाइस एसोसिएशन विफल, कृपया पुनः प्रयास करें', 'bleConnectionTimeoutRetry': 'BLE कनेक्शन टाइमआउट, कृपया पुनः प्रयास करें', 'blePairingStartupFailed': 'BLE पेयरिंग स्टार्टअप विफल', 'bleConnectionFailed': 'BLE कनेक्शन विफल', - 'deviceAuthorizationFailedCheckCode': - 'डिवाइस प्राधिकरण विफल, कृपया प्राधिकरण कोड जांचें', + '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': 'प्रतिक्रिया या सुझाव दें', - 'feedbackDescription': - 'कृपया आपके द्वारा सामना की गई समस्या या आपके सुझाव का वर्णन करें', + 'feedbackDescription': 'कृपया आपके द्वारा सामना की गई समस्या या आपके सुझाव का वर्णन करें', 'feedbackHint': 'कृपया अपनी प्रतिक्रिया दर्ज करें...', 'feedbackRequired': 'कृपया प्रतिक्रिया सामग्री दर्ज करें', 'contactInfo': 'संपर्क जानकारी', 'contactHint': 'ईमेल/फोन, ताकि हम आपसे संपर्क कर सकें', 'submit': 'सबमिट करें', - 'feedbackSubmitSuccess': - 'प्रतिक्रिया सफलतापूर्वक सबमिट की गई, आपकी प्रतिक्रिया के लिए धन्यवाद!', - 'feedbackSubmitFailed': - 'प्रतिक्रिया सबमिट करने में विफल, कृपया बाद में पुनः प्रयास करें', + 'feedbackSubmitSuccess': 'प्रतिक्रिया सफलतापूर्वक सबमिट की गई, आपकी प्रतिक्रिया के लिए धन्यवाद!', + 'feedbackSubmitFailed': 'प्रतिक्रिया सबमिट करने में विफल, कृपया बाद में पुनः प्रयास करें', // OTA升级模块 - "upgradeExitConfirm": - "अपग्रेड चल रहा है, बाहर निकलने से प्रक्रिया बाधित होगी, क्या आप वाकई बाहर निकलना चाहते हैं?", + "upgradeExitConfirm": "अपग्रेड चल रहा है, बाहर निकलने से प्रक्रिया बाधित होगी, क्या आप वाकई बाहर निकलना चाहते हैं?", "deviceModel": "डिवाइस मॉडल", "unknownDevice": "अज्ञात डिवाइस", "currentFirmwareVersion": "वर्तमान फर्मवेयर संस्करण", @@ -787,19 +1306,22 @@ 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": "चार्ज हो रहा है", "updateContent": "अपडेट सामग्री", - "removeEarbudsEnsureBattery": - "दोनों ईयरबड निकालें, और सुनिश्चित करें कि दोनों की बैटरी 20% से ऊपर है", + "removeEarbudsEnsureBattery": "दोनों ईयरबड निकालें, और सुनिश्चित करें कि दोनों की बैटरी 20% से ऊपर है", // 音乐列表页面 - "noMusic": "कोई संगीत नहीं", - "noPlayingMusic": "कोई संगीत नहीं चल रहा है", - "unknownSong": "अज्ञात गीत", - "unknownArtist": "अज्ञात कलाकार", - "playAll": "सभी चलाएं", + "noMusic": "कोई संगीत नहीं", // 暂无音乐 + "noPlayingMusic": "कोई संगीत नहीं चल रहा है", // 暂无播放音乐 + "unknownSong": "अज्ञात गीत", // 未知歌曲 + "unknownArtist": "अज्ञात कलाकार", // 未知歌手 + "playAll": "सभी चलाएं", // 播放全部 // 语言名称 "中文(简体)": "चीनी (सरलीकृत)", @@ -841,109 +1363,21 @@ 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..2a92d6faa 100644 --- a/lib/core/translations/language/hr_hr.dart +++ b/lib/core/translations/language/hr_hr.dart @@ -71,8 +71,7 @@ const Map hrHR = { // 登录页 "welcome": "Dobrodošli", - "loginTips": - "Prijavite se ili registrirajte pomoću svog telefonskog broja ili e-pošte", + "loginTips": "Prijavite se ili registrirajte pomoću svog telefonskog broja ili e-pošte", "accountNumber": "Telefonski broj ili e-pošta", "verificationCode": "Verifikacijski kod", "getCode": "Dohvati kod", @@ -91,8 +90,7 @@ const Map hrHR = { "tip": "Savjet", "pleaseEnterCompleteCode": "Unesite potpuni verifikacijski kod", "loginFailed": "Prijava nije uspjela, pokušajte ponovno", - 'pleaseAcceptPrivacyPolicy': - 'Molimo, prvo pročitajte i prihvatite Pravila o privatnosti i Korisnički ugovor', + 'pleaseAcceptPrivacyPolicy': 'Molimo, prvo pročitajte i prihvatite Pravila o privatnosti i Korisnički ugovor', "enterVerificationCode": "Unesite verifikacijski kod", "verificationCodeSentTo": "Verifikacijski kod poslan je na", "resendVerificationCode": "Ponovno pošalji verifikacijski kod", @@ -100,12 +98,14 @@ 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", @@ -115,30 +115,24 @@ const Map hrHR = { "signal": "Signal", "deviceId": "ID uređaja", "firmwareVersion": "Verzija firmvera", - "disconnectedDevice": - "Nijedan uređaj nije povezan, kliknite na gumb ispod za povezivanje", + "disconnectedDevice": "Nijedan uređaj nije povezan, kliknite na gumb ispod za povezivanje", "connectDevice": "Poveži uređaj", "topAiExperiences": "Vrhunska AI iskustva", "aiAssistant": "Sveobuhvatni AI asistent", - "aiAssistantInfo": - "Ekskluzivni konzultant 24/7, odgovara na pitanja, daje prijedloge", + "aiAssistantInfo": "Ekskluzivni konzultant 24/7, odgovara na pitanja, daje prijedloge", "interpretation": "Simultano prevođenje", - "simultaneousInterpretationInfo": - "Prijevod u stvarnom vremenu na više od 80 jezika, bezbrižna putovanja u inozemstvo", + "simultaneousInterpretationInfo": "Prijevod u stvarnom vremenu na više od 80 jezika, bezbrižna putovanja u inozemstvo", "aiCompanion": "Obiteljski pratilac", "aiCompanionInfo": "Razumije vas, toplo društvo", "homeSlogan": "Povezivanje svijeta, nadilazeći zvuk", - "turnEarphones": - "Otvorite kućište za punjenje slušalica i stavite slušalice u uši", + "turnEarphones": "Otvorite kućište za punjenje slušalica i stavite slušalice u uši", "currentlyConnected": "Trenutno povezano:", "unsystemSetup": "Idite na postavke sustava", "talkLater": "Kasnije", "initializing": "Inicijalizacija...", - "bluetoothInitializationFailure": - "Inicijalizacija Bluetooth usluge nije uspjela", + "bluetoothInitializationFailure": "Inicijalizacija Bluetooth usluge nije uspjela", "checkingPermissions": "Provjera dopuštenja...", - "lackPermissions": - "Nedostaju Bluetooth dopuštenja i pristup lokacijskom podacima je potrebno", + "lackPermissions": "Nedostaju Bluetooth dopuštenja i pristup lokacijskom podacima je potrebno", "searchingDevice": "Pretraživanje uređaja...", "findConnectedDevice": "Pronađen povezan uređaj", "notFound": "Nije pronađen povezan Bluetooth uređaj", @@ -175,18 +169,204 @@ const Map hrHR = { "faceToFaceTranslation": "Prijevod licem u lice", 'audioVideoTranslation': 'Prijevod zvuka i videa', 'callTranslation': 'Prijevod poziva', - "simultaneousTranslationInfo": - "Prijevod u stvarnom vremenu na više od 80 jezika", + "simultaneousTranslationInfo": "Prijevod u stvarnom vremenu na više od 80 jezika", "aiGirlfriend": "AI djevojka", "aiGirlfriendInfo": "Inteligentni pratilac, razgovarajte bilo kada", "healthConsultant": "Višenamjenski AI chat", "healthConsultantInfo": "Nudi više AI chat funkcija", "conferenceAssistant": "Asistent za poslovne sastanke", - "conferenceAssistantInfo": - "Bilježenje zapisnika u stvarnom vremenu, višejezični prijevod", + "conferenceAssistantInfo": "Bilježenje zapisnika u stvarnom vremenu, višejezični prijevod", "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 +381,225 @@ 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 +611,8 @@ 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", @@ -229,11 +621,9 @@ const Map hrHR = { "voiceServiceInfo": "Odabir usluge za prepoznavanje i sintezu govora", "selectVoiceService": "Odaberi glasovnu uslugu", "azureVoiceService": "Azure glasovna usluga", - "azureVoiceServiceInfo": - "Microsoftova glasovna usluga u oblaku, podržava visokokvalitetnu sintezu i prepoznavanje govora", + "azureVoiceServiceInfo": "Microsoftova glasovna usluga u oblaku, podržava visokokvalitetnu sintezu i prepoznavanje govora", "flutterVoiceService": "Flutter lokalna glasovna usluga", - "flutterVoiceServiceInfo": - "Lokalna glasovna usluga uređaja, može se koristiti bez internetske veze", + "flutterVoiceServiceInfo": "Lokalna glasovna usluga uređaja, može se koristiti bez internetske veze", 'timbreService': 'Usluga boje glasa', 'timbreServiceInfo': 'Odaberite uslugu sinteze govora s bojom glasa', 'defaultTimbre': 'Zadana boja glasa', @@ -255,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Iskusite funkciju inteligentne glasovne interakcije (pregled funkcije)", + "realtimeVoiceChatInfo": "Iskusite funkciju inteligentne glasovne interakcije (pregled funkcije)", "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 +697,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' @@ -311,20 +721,16 @@ const Map hrHR = { '• Kontrolirati funkcije slušalica\n\n' 'Kako vam mogu pomoći?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': - 'Funkcija prepoznavanja govora zahtijeva pristup mikrofonu.', - 'voiceTranslationPermissionText': - 'Funkcija prepoznavanja i prevođenja govora zahtijeva pristup mikrofonu.', - 'phoneCallPermissionText': - 'Funkcija pozivanja zahtijeva pristup mikrofonu za glasovne pozive.', - 'permissionDeniedText': - 'Trajno ste odbili dopuštenje za mikrofon, idite u postavke sustava da biste ga omogućili.', + 'voiceRecognitionPermissionText': 'Funkcija prepoznavanja govora zahtijeva pristup mikrofonu.', + 'voiceTranslationPermissionText': 'Funkcija prepoznavanja i prevođenja govora zahtijeva pristup mikrofonu.', + 'phoneCallPermissionText': 'Funkcija pozivanja zahtijeva pristup mikrofonu za glasovne pozive.', + 'permissionDeniedText': 'Trajno ste odbili dopuštenje za mikrofon, idite u postavke sustava da biste ga omogućili.', 'startVoiceInput': 'Započni unos glasom', '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 +739,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', @@ -340,8 +747,8 @@ const Map hrHR = { 'privacyRelated': 'Vezano za privatnost', 'copyrightViolation': 'Kršenje mog autorskog prava, ugleda, itd.', 'other': 'Ostalo', - 'reportDescriptionHint': - 'Želimo znati razlog vaše prijave, možete opisati problem s kojim ste se suočili.', + '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 +759,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", @@ -372,22 +779,14 @@ const Map hrHR = { 'lowest': 'Najniža', 'futureForecast': 'Buduća prognoza', 'hotWeatherTip': 'Danas je vruće, pazite na toplinski udar i pijte puno vode', - 'coldWeatherTip': - 'Danas je temperatura niska, obucite se toplo kada izlazite da se ne prehladite', - 'rainyWeatherTip': - 'Danas pada kiša, ponesite kišobran kada izlazite i pazite na putu', - 'snowyWeatherTip': - 'Danas pada snijeg, put je sklizak, pazite i obucite se toplo', - 'foggyWeatherTip': - 'Danas je magla, vidljivost je smanjena, nosite masku kada izlazite', - 'windyWeatherTip': - 'Danas puše jak vjetar, pazite kada izlazite i osigurajte svoje stvari', - 'sunnyWeatherTip': - 'Danas je sunčano i jako UV zračenje, koristite kremu za sunčanje kada izlazite', - 'temperatureDifferenceTip': - 'Danas je velika razlika u temperaturi između dana i noći, prilagodite odjeću', - 'comfortableWeatherTip': - 'Danas je vrijeme ugodno, odlično vrijeme za aktivnosti na otvorenom', + 'coldWeatherTip': 'Danas je temperatura niska, obucite se toplo kada izlazite da se ne prehladite', + 'rainyWeatherTip': 'Danas pada kiša, ponesite kišobran kada izlazite i pazite na putu', + 'snowyWeatherTip': 'Danas pada snijeg, put je sklizak, pazite i obucite se toplo', + 'foggyWeatherTip': 'Danas je magla, vidljivost je smanjena, nosite masku kada izlazite', + 'windyWeatherTip': 'Danas puše jak vjetar, pazite kada izlazite i osigurajte svoje stvari', + 'sunnyWeatherTip': 'Danas je sunčano i jako UV zračenje, koristite kremu za sunčanje kada izlazite', + 'temperatureDifferenceTip': 'Danas je velika razlika u temperaturi između dana i noći, prilagodite odjeću', + 'comfortableWeatherTip': 'Danas je vrijeme ugodno, odlično vrijeme za aktivnosti na otvorenom', "monday": "Pon", "tuesday": "Uto", "wednesday": "Sri", @@ -395,6 +794,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", @@ -428,28 +838,26 @@ const Map hrHR = { "logout": "Odjavi se", "logoutTips": "Jeste li sigurni da se želite odjaviti s trenutnog računa?", 'deleteAccount': 'Obriši račun', - 'deleteAccountTips': - 'Jeste li sigurni da želite trajno obrisati svoj račun? Ova se radnja ne može poništiti.', + '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': - 'Mrežna veza nije uspjela, provjerite postavke mreže i pokušajte ponovno', - 'serverTemporarilyUnavailable': - 'Poslužitelj je privremeno nedostupan, pokušajte ponovno kasnije', + 'networkConnectionFailed': 'Mrežna veza nije uspjela, provjerite postavke mreže i pokušajte ponovno', + 'serverTemporarilyUnavailable': 'Poslužitelj je privremeno nedostupan, pokušajte ponovno kasnije', 'loginExpiredPleaseRelogin': 'Vaša sesija je istekla, prijavite se ponovno', 'noPermissionForThisOperation': 'Nemate dopuštenje za ovu operaciju', 'requestedResourceNotFound': 'Traženi resurs nije pronađen', - 'imageProcessingFailedPleaseReselect': - 'Obrada slike nije uspjela, odaberite drugu sliku', + 'imageProcessingFailedPleaseReselect': 'Obrada slike nije uspjela, odaberite drugu sliku', 'operationFailedPleaseRetry': 'Operacija nije uspjela, pokušajte ponovno', 'serverReturnedError': 'Poslužitelj je vratio grešku', 'serverError': 'Greška na poslužitelju', - 'networkConnectionFailedCheckSettings': - 'Mrežna veza nije uspjela, provjerite postavke mreže', - 'serverInternalErrorRetryLater': - 'Interna greška na poslužitelju, pokušajte ponovno kasnije', + 'networkConnectionFailedCheckSettings': 'Mrežna veza nije uspjela, provjerite postavke mreže', + 'serverInternalErrorRetryLater': '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,35 +870,41 @@ 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', - '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', + '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', // 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', - 'calendarWritePermissionDesc': - 'Koristi se za stvaranje događaja i podsjetnika u kalendaru', - 'calendarFullAccessPermissionDesc': - 'Koristi se za čitanje i upravljanje događajima i podsjetnicima u kalendaru', - 'locationPermissionDesc': - 'Koristi se za dobivanje informacija o trenutnoj lokaciji', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Koristi se za stvaranje događaja i podsjetnika u kalendaru', + 'calendarFullAccessPermissionDesc': 'Koristi se za čitanje i upravljanje događajima i podsjetnicima u kalendaru', + 'locationPermissionDesc': 'Koristi se za dobivanje informacija o trenutnoj lokaciji', 'appFunctionNeeds': 'Funkcija aplikacije zahtijeva', 'authorized': 'Autorizirano', 'unauthorized': 'Neautorizirano', @@ -499,32 +913,65 @@ const Map hrHR = { 'unknownStatus': 'Nepoznat status', 'permissionGranted': 'Dopuštenje je odobreno', 'permissionRequestError': 'Greška prilikom traženja dopuštenja', - 'phonePermissionDetailDesc': - 'Funkcija pozivanja zahtijeva dopuštenje za telefon', - 'smsPermissionDetailDesc': - 'Funkcija slanja SMS-a zahtijeva dopuštenje za SMS', - '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', - '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', + 'phonePermissionDetailDesc': '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', - 'cannotOpenAppStore': - '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', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Došlo je do greške tijekom ažuriranja, pokušajte ponovno kasnije', // 更新错误重试提示 //国家列表 "邮箱": "E-pošta", @@ -633,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Jeste li sigurni da želite obrisati cijelu povijest prijevoda? Ova se radnja ne može poništiti.", "unknownLanguage": "Nepoznat jezik", "deleteSessionRecord": "Obriši zapis sesije", - "deleteSessionConfirm": - "Jeste li sigurni da želite obrisati sve zapise prijevoda za ovu sesiju? Ova se radnja ne može poništiti.", + "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...", @@ -669,8 +1189,7 @@ const Map hrHR = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Originalni zapis", "recordSummary": "Sažetak zapisa", - "clickToGenerateSummary": - "Kliknite na gumb ispod da biste generirali sažetak sesije", + "clickToGenerateSummary": "Kliknite na gumb ispod da biste generirali sažetak sesije", "summaryContent": "Sadržaj sažetka", "copied": "Kopirano", "summaryCopiledToClipboard": "Sažetak je kopiran u međuspremnik", @@ -678,11 +1197,9 @@ const Map hrHR = { "summaryGenerated": "Sažetak je generiran", "generating": "Generiranje...", "regenerate": "Ponovno generiraj", - "summaryTimeoutMessage": - "Isteklo je vrijeme za generiranje sažetka, možda zbog problema s mrežom ili zauzetosti poslužitelja.", + "summaryTimeoutMessage": "Isteklo je vrijeme za generiranje sažetka, možda zbog problema s mrežom ili zauzetosti poslužitelja.", "deleteTranslationRecord": "Obriši zapis prijevoda", - "deleteTranslationConfirm": - "Jeste li sigurni da želite obrisati ovaj zapis prijevoda? Ova se radnja ne može poništiti.", + "deleteTranslationConfirm": "Jeste li sigurni da želite obrisati ovaj zapis prijevoda? Ova se radnja ne može poništiti.", "originalText": "Originalni tekst", "translatedText": "Prevedeni tekst", "sessionSummary": "Sažetak sesije", @@ -700,7 +1217,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...", @@ -710,38 +1227,34 @@ const Map hrHR = { // 配对状态文本 "readyToPair": "Spremno za uparivanje", "preparingPairingEnvironment": "Priprema okruženja za uparivanje...", - "connectDeepSoundViaSystemBluetooth": - "Prvo se povežite s Voitrans uređajem putem sistemskog Bluetootha", + "connectDeepSoundViaSystemBluetooth": "Prvo se povežite s Voitrans uređajem putem sistemskog Bluetootha", "deviceBindingConfirm": "Potvrda povezivanja uređaja...", "establishingDeviceAssociation": "Uspostavljanje veze s uređajem...", "waitingCompletePairing": "Molimo pričekajte, uparivanje se završava...", - "pairingSuccessRedirecting": - "Uparivanje uspješno! Preusmjeravanje na početnu stranicu...", + "pairingSuccessRedirecting": "Uparivanje uspješno! Preusmjeravanje na početnu stranicu...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Provjerite jeste li povezani s Voitrans uređajem", - "deviceAlreadyBoundToOtherAccount": - "Ovaj je uređaj već povezan s drugim računom", - "deviceAssociationFailed": - "Povezivanje uređaja nije uspjelo, pokušajte ponovno", - "scanTimeoutEnsureDeviceNearby": - "Isteklo je vrijeme skeniranja, provjerite je li uređaj u blizini", + "ensureConnectedDeepSoundDevice": "Provjerite jeste li povezani s Voitrans uređajem", + "deviceAlreadyBoundToOtherAccount": "Ovaj je uređaj već povezan s drugim računom", + "deviceAssociationFailed": "Povezivanje uređaja nije uspjelo, pokušajte ponovno", + "scanTimeoutEnsureDeviceNearby": "Isteklo je vrijeme skeniranja, provjerite je li uređaj u blizini", "networkError": "Mrežna greška", - "authorizationFailedCheckCode": - "Autorizacija nije uspjela, provjerite je li autorizacijski kod točan", + "authorizationFailedCheckCode": "Autorizacija nije uspjela, provjerite je li autorizacijski kod točan", "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', + '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...', + 'needManualBindingAuthCode': 'Potreban je kod za autorizaciju ručnog povezivanja...', 'pairingSuccessful': 'Uparivanje uspješno!', 'enableBluetooth': 'Omogući Bluetooth', 'grantPermissions': 'Daj dopuštenja', @@ -753,33 +1266,35 @@ const Map hrHR = { 'verificationFailedRetry': 'Verifikacija nije uspjela, pokušajte ponovno', 'invalidDeviceAddress': 'Nevažeća adresa uređaja', 'bleDeviceAssociationFailed': 'Povezivanje BLE uređaja nije uspjelo', - 'deviceAssociationFailedRetry': - 'Povezivanje uređaja nije uspjelo, pokušajte ponovno', - 'bleConnectionTimeoutRetry': - 'Isteklo je vrijeme za BLE vezu, pokušajte ponovno', + 'deviceAssociationFailedRetry': 'Povezivanje uređaja nije uspjelo, pokušajte ponovno', + 'bleConnectionTimeoutRetry': 'Isteklo je vrijeme za BLE vezu, pokušajte ponovno', 'blePairingStartupFailed': 'Pokretanje BLE uparivanja nije uspjelo', 'bleConnectionFailed': 'BLE veza nije uspjela', - 'deviceAuthorizationFailedCheckCode': - 'Autorizacija uređaja nije uspjela, provjerite autorizacijski kod', + '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', - 'feedbackDescription': - 'Opišite problem s kojim ste se suočili ili svoj prijedlog', + 'feedbackDescription': 'Opišite problem s kojim ste se suočili ili svoj prijedlog', 'feedbackHint': 'Unesite svoje povratne informacije...', 'feedbackRequired': 'Unesite sadržaj povratnih informacija', 'contactInfo': 'Kontakt informacije', 'contactHint': 'E-pošta/Telefon, da bismo vas mogli kontaktirati', 'submit': 'Pošalji', - 'feedbackSubmitSuccess': - 'Povratne informacije su uspješno poslane, hvala vam!', - 'feedbackSubmitFailed': - 'Slanje povratnih informacija nije uspjelo, pokušajte ponovno kasnije', + 'feedbackSubmitSuccess': 'Povratne informacije su uspješno poslane, hvala vam!', + 'feedbackSubmitFailed': 'Slanje povratnih informacija nije uspjelo, pokušajte ponovno kasnije', // OTA升级模块 - "upgradeExitConfirm": - "Nadogradnja je u tijeku, izlazak će prekinuti proces, jeste li sigurni da želite izaći?", + "upgradeExitConfirm": "Nadogradnja je u tijeku, izlazak će prekinuti proces, jeste li sigurni da želite izaći?", "deviceModel": "Model uređaja", "unknownDevice": "Nepoznat uređaj", "currentFirmwareVersion": "Trenutna verzija firmvera", @@ -791,19 +1306,22 @@ 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", "updateContent": "Sadržaj ažuriranja", - "removeEarbudsEnsureBattery": - "Izvadite obje slušalice i provjerite je li baterija obje iznad 20%", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..7c9c0af6e 100644 --- a/lib/core/translations/language/hu_hu.dart +++ b/lib/core/translations/language/hu_hu.dart @@ -71,8 +71,7 @@ const Map huHU = { // 登录页 "welcome": "Üdvözöljük", - "loginTips": - "Jelentkezzen be vagy regisztráljon telefonszámával vagy e-mail címével", + "loginTips": "Jelentkezzen be vagy regisztráljon telefonszámával vagy e-mail címével", "accountNumber": "Telefonszám vagy e-mail", "verificationCode": "Megerősítő kód", "getCode": "Kód kérése", @@ -85,15 +84,13 @@ const Map huHU = { 'selectCountry': 'Válasszon országot/régiót', "email": "E-mail", "phoneNumber": "Telefonszám", - "pleaseEnterContactInfo": - "Kérjük, adja meg a telefonszámot vagy az e-mail címet", + "pleaseEnterContactInfo": "Kérjük, adja meg a telefonszámot vagy az e-mail címet", "invalidEmailFormat": "Érvénytelen e-mail formátum", "invalidPhoneFormat": "Érvénytelen telefonszám formátum", "tip": "Tipp", "pleaseEnterCompleteCode": "Kérjük, adja meg a teljes megerősítő kódot", "loginFailed": "Bejelentkezés sikertelen, próbálja újra", - 'pleaseAcceptPrivacyPolicy': - 'Kérjük, először olvassa el és fogadja el az Adatvédelmi Szabályzatot és a Felhasználói Szerződést', + 'pleaseAcceptPrivacyPolicy': 'Kérjük, először olvassa el és fogadja el az Adatvédelmi Szabályzatot és a Felhasználói Szerződést', "enterVerificationCode": "Írja be a megerősítő kódot", "verificationCodeSentTo": "A megerősítő kód elküldve a következő címre:", "resendVerificationCode": "Megerősítő kód újraküldése", @@ -101,13 +98,14 @@ const Map huHU = { "usePasswordLogin": "Bejelentkezés jelszóval", // 隐私政策弹窗 - "loginDeclaration": "Voitrans nyilatkozat", - "welcomeToThisApp": - "Üdvözöljük a Voitransban, kérjük, olvassa el figyelmesen", + "loginDeclaration": "Voitrans nyilatkozat", // Voitrans 声明 + "welcomeToThisApp": "Ü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", @@ -117,30 +115,24 @@ const Map huHU = { "signal": "Jel", "deviceId": "Eszköz azonosító", "firmwareVersion": "Firmware verzió", - "disconnectedDevice": - "Nincs csatlakoztatott eszköz, kattintson az alábbi gombra a csatlakozáshoz", + "disconnectedDevice": "Nincs csatlakoztatott eszköz, kattintson az alábbi gombra a csatlakozáshoz", "connectDevice": "Eszköz csatlakoztatása", "topAiExperiences": "Legjobb AI élmények", "aiAssistant": "Mindenre kiterjedő AI asszisztens", - "aiAssistantInfo": - "Exkluzív 24/7 tanácsadó, válaszol a kérdésekre, javaslatokat tesz", + "aiAssistantInfo": "Exkluzív 24/7 tanácsadó, válaszol a kérdésekre, javaslatokat tesz", "interpretation": "Szinkrontolmácsolás", - "simultaneousInterpretationInfo": - "Valós idejű fordítás több mint 80 nyelven, gondtalan külföldi utazások", + "simultaneousInterpretationInfo": "Valós idejű fordítás több mint 80 nyelven, gondtalan külföldi utazások", "aiCompanion": "Családi társ", "aiCompanionInfo": "Megérti Önt, meleg társaság", "homeSlogan": "A világ összekötése, a hangot felülmúlva", - "turnEarphones": - "Kérjük, nyissa ki a fülhallgató töltőtokját, és helyezze a fülhallgatót a fülébe", + "turnEarphones": "Kérjük, nyissa ki a fülhallgató töltőtokját, és helyezze a fülhallgatót a fülébe", "currentlyConnected": "Jelenleg csatlakoztatva:", "unsystemSetup": "Ugrás a rendszerbeállításokhoz", "talkLater": "Később", "initializing": "Inicializálás...", - "bluetoothInitializationFailure": - "A Bluetooth szolgáltatás inicializálása sikertelen", + "bluetoothInitializationFailure": "A Bluetooth szolgáltatás inicializálása sikertelen", "checkingPermissions": "Engedélyek ellenőrzése...", - "lackPermissions": - "Hiányoznak a Bluetooth engedélyek és a helyzetek elérése szükséges", + "lackPermissions": "Hiányoznak a Bluetooth engedélyek és a helyzetek elérése szükséges", "searchingDevice": "Eszközök keresése...", "findConnectedDevice": "Csatlakoztatott eszköz található", "notFound": "Nem található csatlakoztatott Bluetooth eszköz", @@ -162,8 +154,7 @@ const Map huHU = { 'chargingCase': 'Töltőtok', 'left': 'Bal', 'right': 'Jobb', - 'checkConnectionStatusFailed': - 'A kapcsolat állapotának ellenőrzése sikertelen', + 'checkConnectionStatusFailed': 'A kapcsolat állapotának ellenőrzése sikertelen', // 发现页 "searchAi": "AI funkciók keresése...", @@ -188,6 +179,194 @@ 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 +381,225 @@ 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,22 +611,19 @@ 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", "selectLanguage": "Nyelv kiválasztása", "voiceService": "Hangszolgáltatás", - "voiceServiceInfo": - "Hangfelismerő és -szintetizáló szolgáltatás kiválasztása", + "voiceServiceInfo": "Hangfelismerő és -szintetizáló szolgáltatás kiválasztása", "selectVoiceService": "Hangszolgáltatás kiválasztása", "azureVoiceService": "Azure Hangszolgáltatás", - "azureVoiceServiceInfo": - "Microsoft felhőalapú hangszolgáltatás, támogatja a magas minőségű hangszintézist és -felismerést", + "azureVoiceServiceInfo": "Microsoft felhőalapú hangszolgáltatás, támogatja a magas minőségű hangszintézist és -felismerést", "flutterVoiceService": "Flutter Helyi Hangszolgáltatás", - "flutterVoiceServiceInfo": - "Eszköz helyi hangszolgáltatása, internetkapcsolat nélkül is használható", + "flutterVoiceServiceInfo": "Eszköz helyi hangszolgáltatása, internetkapcsolat nélkül is használható", 'timbreService': 'Hangszínszolgáltatás', 'timbreServiceInfo': 'Hangszínszintetizáló szolgáltatás kiválasztása', 'defaultTimbre': 'Alapértelmezett hangszín', @@ -257,23 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Tapasztalja meg az intelligens hanginterakciós funkciót (funkció előnézet)", + "realtimeVoiceChatInfo": "Tapasztalja meg az intelligens hanginterakciós funkciót (funkció előnézet)", "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 @@ -300,9 +695,22 @@ const Map huHU = { "listeningToYou": "Hallgatom Önt...", "processing": "Feldolgozás...", "loadMoreMessages": "További üzenetek betöltése...", - "loadFailedClickRetry": - "Betöltés sikertelen, kattintson az újrapróbálkozáshoz", + "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' @@ -313,20 +721,16 @@ const Map huHU = { '• Fülhallgató funkciók vezérlésében\n\n' 'Miben segíthetek?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': - 'A hangfelismerő funkcióhoz mikrofon-hozzáférés szükséges.', - 'voiceTranslationPermissionText': - 'A hangfelismerő és -fordító funkcióhoz mikrofon-hozzáférés szükséges.', - 'phoneCallPermissionText': - 'A hívás funkcióhoz mikrofon-hozzáférés szükséges a hanghívásokhoz.', - 'permissionDeniedText': - 'Véglegesen letiltotta a mikrofon-hozzáférést, kérjük, engedélyezze a rendszerbeállításokban.', + 'voiceRecognitionPermissionText': 'A hangfelismerő funkcióhoz mikrofon-hozzáférés szükséges.', + 'voiceTranslationPermissionText': 'A hangfelismerő és -fordító funkcióhoz mikrofon-hozzáférés szükséges.', + 'phoneCallPermissionText': 'A hívás funkcióhoz mikrofon-hozzáférés szükséges a hanghívásokhoz.', + 'permissionDeniedText': 'Véglegesen letiltotta a mikrofon-hozzáférést, kérjük, engedélyezze a rendszerbeállításokban.', 'startVoiceInput': 'Hangbevitel indítása', '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 +739,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ó', @@ -342,8 +747,8 @@ const Map huHU = { 'privacyRelated': 'Adatvédelemmel kapcsolatos', 'copyrightViolation': 'Sérti a szerzői jogomat, hírnevemet stb.', 'other': 'Egyéb', - 'reportDescriptionHint': - 'Szeretnénk tudni a jelentés okát, leírhatja a tapasztalt problémát.', + '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 +759,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", @@ -374,22 +779,14 @@ const Map huHU = { 'lowest': 'Legalacsonyabb', 'futureForecast': 'Jövőbeli előrejelzés', 'hotWeatherTip': 'Ma meleg van, vigyázzon a hőgutára és igyon sok vizet', - 'coldWeatherTip': - 'Ma alacsony a hőmérséklet, öltözzön melegen, ha kimegy, hogy ne fázzon meg', - 'rainyWeatherTip': - 'Ma esik az eső, vigyen magával esernyőt, ha kimegy, és legyen óvatos', - 'snowyWeatherTip': - 'Ma havazik, az út csúszós, legyen óvatos és öltözzön melegen', - 'foggyWeatherTip': - 'Ma köd van, a látótávolság alacsony, viseljen maszkot, ha kimegy', - 'windyWeatherTip': - 'Ma szeles az idő, legyen óvatos, ha kimegy, és rögzítse a tárgyait', - 'sunnyWeatherTip': - 'Ma napos az idő és erős az UV-sugárzás, használjon naptejet, ha kimegy', - 'temperatureDifferenceTip': - 'Ma nagy a hőmérséklet-különbség a nappal és az éjszaka között, öltözzön rétegesen', - 'comfortableWeatherTip': - 'Ma kellemes az idő, remek alkalom a szabadtéri tevékenységekhez', + 'coldWeatherTip': 'Ma alacsony a hőmérséklet, öltözzön melegen, ha kimegy, hogy ne fázzon meg', + 'rainyWeatherTip': 'Ma esik az eső, vigyen magával esernyőt, ha kimegy, és legyen óvatos', + 'snowyWeatherTip': 'Ma havazik, az út csúszós, legyen óvatos és öltözzön melegen', + 'foggyWeatherTip': 'Ma köd van, a látótávolság alacsony, viseljen maszkot, ha kimegy', + 'windyWeatherTip': 'Ma szeles az idő, legyen óvatos, ha kimegy, és rögzítse a tárgyait', + 'sunnyWeatherTip': 'Ma napos az idő és erős az UV-sugárzás, használjon naptejet, ha kimegy', + 'temperatureDifferenceTip': 'Ma nagy a hőmérséklet-különbség a nappal és az éjszaka között, öltözzön rétegesen', + 'comfortableWeatherTip': 'Ma kellemes az idő, remek alkalom a szabadtéri tevékenységekhez', "monday": "Hé", "tuesday": "Ke", "wednesday": "Sze", @@ -397,6 +794,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", @@ -430,29 +838,26 @@ const Map huHU = { "logout": "Kijelentkezés", "logoutTips": "Biztosan ki szeretne jelentkezni a jelenlegi fiókból?", 'deleteAccount': 'Fiók törlése', - 'deleteAccountTips': - 'Biztosan véglegesen törli a fiókját? Ezt a műveletet nem lehet visszavonni.', + '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': - 'Hálózati kapcsolat sikertelen, ellenőrizze a hálózati beállításokat és próbálja újra', - 'serverTemporarilyUnavailable': - 'A szerver átmenetileg nem elérhető, próbálja újra később', - 'loginExpiredPleaseRelogin': - 'A munkamenet lejárt, kérjük, jelentkezzen be újra', - 'noPermissionForThisOperation': - 'Nincs jogosultsága végrehajtani ezt a műveletet', + 'networkConnectionFailed': 'Hálózati kapcsolat sikertelen, ellenőrizze a hálózati beállításokat és próbálja újra', + 'serverTemporarilyUnavailable': 'A szerver átmenetileg nem elérhető, próbálja újra később', + 'loginExpiredPleaseRelogin': 'A munkamenet lejárt, kérjük, jelentkezzen be újra', + 'noPermissionForThisOperation': 'Nincs jogosultsága végrehajtani ezt a műveletet', 'requestedResourceNotFound': 'A kért erőforrás nem található', - 'imageProcessingFailedPleaseReselect': - 'A képfeldolgozás sikertelen, válasszon másik képet', + 'imageProcessingFailedPleaseReselect': 'A képfeldolgozás sikertelen, válasszon másik képet', 'operationFailedPleaseRetry': 'A művelet sikertelen, próbálja újra', 'serverReturnedError': 'A szerver hibát adott vissza', 'serverError': 'Szerverhiba', - 'networkConnectionFailedCheckSettings': - 'Hálózati kapcsolat sikertelen, ellenőrizze a hálózati beállításokat', + 'networkConnectionFailedCheckSettings': 'Hálózati kapcsolat sikertelen, ellenőrizze a hálózati beállításokat', '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,35 +870,41 @@ 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', - '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', + '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', // 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', - 'calendarWritePermissionDesc': - 'Naptáresemények és emlékeztetők létrehozásához használatos', - 'calendarFullAccessPermissionDesc': - 'Naptáresemények és emlékeztetők olvasásához és kezeléséhez használatos', - 'locationPermissionDesc': - 'Az aktuális helyinformációk lekéréséhez 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': 'Naptáresemények és emlékeztetők olvasásához és kezeléséhez használatos', + 'locationPermissionDesc': 'Az aktuális helyinformációk lekéréséhez használatos', 'appFunctionNeeds': 'Az alkalmazás funkciójához szükséges', 'authorized': 'Engedélyezve', 'unauthorized': 'Nincs engedélyezve', @@ -504,27 +915,63 @@ 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', - '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', - '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', + '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', - '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', + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -633,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Biztosan törli az összes fordítási előzményt? Ezt a műveletet nem lehet visszavonni.", "unknownLanguage": "Ismeretlen nyelv", "deleteSessionRecord": "Munkamenet-rekord törlése", - "deleteSessionConfirm": - "Biztosan törli az összes fordítási rekordot ehhez a munkamenethez? Ezt a műveletet nem lehet visszavonni.", + "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...", @@ -669,8 +1189,7 @@ const Map huHU = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Eredeti felvétel", "recordSummary": "Felvétel összefoglalója", - "clickToGenerateSummary": - "Kattintson az alábbi gombra a munkamenet összefoglalójának generálásához", + "clickToGenerateSummary": "Kattintson az alábbi gombra a munkamenet összefoglalójának generálásához", "summaryContent": "Összefoglaló tartalma", "copied": "Másolva", "summaryCopiledToClipboard": "Az összefoglaló a vágólapra másolva", @@ -678,11 +1197,9 @@ const Map huHU = { "summaryGenerated": "Összefoglaló generálva", "generating": "Generálás...", "regenerate": "Újragenerálás", - "summaryTimeoutMessage": - "Az összefoglaló generálási kérelme időtúllépést okozott, lehetséges hálózati probléma vagy szerverterhelés miatt.", + "summaryTimeoutMessage": "Az összefoglaló generálási kérelme időtúllépést okozott, lehetséges hálózati probléma vagy szerverterhelés miatt.", "deleteTranslationRecord": "Fordítási rekord törlése", - "deleteTranslationConfirm": - "Biztosan törli ezt a fordítási rekordot? Ezt a műveletet nem lehet visszavonni.", + "deleteTranslationConfirm": "Biztosan törli ezt a fordítási rekordot? Ezt a műveletet nem lehet visszavonni.", "originalText": "Eredeti szöveg", "translatedText": "Fordított szöveg", "sessionSummary": "Munkamenet összefoglalója", @@ -700,7 +1217,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...", @@ -710,34 +1227,32 @@ const Map huHU = { // 配对状态文本 "readyToPair": "Készen áll a párosításra", "preparingPairingEnvironment": "Párosítási környezet előkészítése...", - "connectDeepSoundViaSystemBluetooth": - "Kérjük, először csatlakozzon a Voitrans eszközhöz a rendszer Bluetooth-on keresztül", + "connectDeepSoundViaSystemBluetooth": "Kérjük, először csatlakozzon a Voitrans eszközhöz a rendszer Bluetooth-on keresztül", "deviceBindingConfirm": "Eszközpárosítás megerősítése...", "establishingDeviceAssociation": "Eszköztársítás létrehozása...", "waitingCompletePairing": "Kérjük, várjon, a párosítás befejeződik...", - "pairingSuccessRedirecting": - "A párosítás sikeres! Átirányítás a főoldalra...", + "pairingSuccessRedirecting": "A párosítás sikeres! Átirányítás a főoldalra...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Győződjön meg róla, hogy a Voitrans eszközhöz csatlakozik", - "deviceAlreadyBoundToOtherAccount": - "Ez az eszköz már egy másik fiókhoz van párosítva", + "ensureConnectedDeepSoundDevice": "Győződjön meg róla, hogy a Voitrans eszközhöz csatlakozik", + "deviceAlreadyBoundToOtherAccount": "Ez az eszköz már egy másik fiókhoz van párosítva", "deviceAssociationFailed": "Az eszköztársítás sikertelen, próbálja újra", - "scanTimeoutEnsureDeviceNearby": - "A szkennelés időtúllépést okozott, győződjön meg róla, hogy az eszköz a közelben van", + "scanTimeoutEnsureDeviceNearby": "A szkennelés időtúllépést okozott, győződjön meg róla, hogy az eszköz a közelben van", "networkError": "Hálózati hiba", - "authorizationFailedCheckCode": - "Az engedélyezés sikertelen, ellenőrizze, hogy az engedélyezési kód helyes-e", + "authorizationFailedCheckCode": "Az engedélyezés sikertelen, ellenőrizze, hogy az engedélyezési kód helyes-e", "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', + '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!', @@ -745,40 +1260,41 @@ const Map huHU = { 'grantPermissions': 'Engedélyek megadása', 'retryAssociation': 'Társítás újrapróbálása', 'retryAuthorization': 'Engedélyezés újrapróbálása', - 'pleaseGrantNecessaryPermissions': - 'Kérjük, adja meg a szükséges engedélyeket', + 'pleaseGrantNecessaryPermissions': 'Kérjük, adja meg a szükséges engedélyeket', 'checkFailedRetry': 'Az ellenőrzés sikertelen, próbálja újra', - 'pleaseConnectDeepSoundDevice': - 'Kérjük, csatlakoztasson egy Voitrans eszközt', + 'pleaseConnectDeepSoundDevice': 'Kérjük, csatlakoztasson egy Voitrans eszközt', 'verificationFailedRetry': 'Az ellenőrzés sikertelen, próbálja újra', 'invalidDeviceAddress': 'Érvénytelen eszközcím', 'bleDeviceAssociationFailed': 'A BLE eszköztársítás sikertelen', 'deviceAssociationFailedRetry': 'Az eszköztársítás sikertelen, próbálja újra', - 'bleConnectionTimeoutRetry': - 'A BLE kapcsolat időtúllépést okozott, próbálja újra', + 'bleConnectionTimeoutRetry': 'A BLE kapcsolat időtúllépést okozott, próbálja újra', 'blePairingStartupFailed': 'A BLE párosítás indítása sikertelen', 'bleConnectionFailed': 'A BLE kapcsolat sikertelen', - 'deviceAuthorizationFailedCheckCode': - 'Az eszközengedélyezés sikertelen, ellenőrizze az engedélyezési kódot', + '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', - 'feedbackDescription': - 'Kérjük, írja le a tapasztalt problémát vagy javaslatát', + 'feedbackDescription': 'Kérjük, írja le a tapasztalt problémát vagy javaslatát', 'feedbackHint': 'Kérjük, írja be a visszajelzését...', 'feedbackRequired': 'Kérjük, írja be a visszajelzés tartalmát', 'contactInfo': 'Elérhetőség', 'contactHint': 'E-mail/Telefon, hogy felvehessük Önnel a kapcsolatot', 'submit': 'Küldés', - 'feedbackSubmitSuccess': - 'A visszajelzés sikeresen elküldve, köszönjük a visszajelzését!', - 'feedbackSubmitFailed': - 'A visszajelzés küldése sikertelen, próbálja újra később', + 'feedbackSubmitSuccess': 'A visszajelzés sikeresen elküldve, köszönjük a visszajelzését!', + 'feedbackSubmitFailed': 'A visszajelzés küldése sikertelen, próbálja újra később', // OTA升级模块 - "upgradeExitConfirm": - "Frissítés folyamatban van, a kilépés megszakítja a folyamatot, biztosan kilép?", + "upgradeExitConfirm": "Frissítés folyamatban van, a kilépés megszakítja a folyamatot, biztosan kilép?", "deviceModel": "Eszközmodell", "unknownDevice": "Ismeretlen eszköz", "currentFirmwareVersion": "Jelenlegi firmware verzió", @@ -790,20 +1306,22 @@ const Map huHU = { "connectionFailed": "A kapcsolat sikertelen", "retryConnection": "Kapcsolat újrapróbálása", "ota_updateNow": "Frissítés most", - "keepConnectedDontClose": - "Tartsa csatlakoztatva az eszközt, ne zárja be az alkalmazást", + "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", "charging": "Töltés", "updateContent": "Frissítés tartalma", - "removeEarbudsEnsureBattery": - "Vegye ki mindkét fülhallgatót, és győződjön meg róla, hogy mindkettő akkumulátora 20% felett van", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..992e2d375 100644 --- a/lib/core/translations/language/id_id.dart +++ b/lib/core/translations/language/id_id.dart @@ -90,8 +90,7 @@ const Map idID = { "tip": "Tip", "pleaseEnterCompleteCode": "Silakan masukkan kode verifikasi lengkap", "loginFailed": "Gagal masuk, silakan coba lagi", - 'pleaseAcceptPrivacyPolicy': - 'Harap baca dan setujui Kebijakan Privasi dan Perjanjian Pengguna terlebih dahulu', + 'pleaseAcceptPrivacyPolicy': 'Harap baca dan setujui Kebijakan Privasi dan Perjanjian Pengguna terlebih dahulu', "enterVerificationCode": "Masukkan Kode Verifikasi", "verificationCodeSentTo": "Kode verifikasi telah dikirim ke", "resendVerificationCode": "Kirim ulang kode verifikasi", @@ -99,12 +98,14 @@ 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", @@ -114,21 +115,17 @@ const Map idID = { "signal": "Sinyal", "deviceId": "ID Perangkat", "firmwareVersion": "Versi Firmware", - "disconnectedDevice": - "Tidak ada perangkat yang terhubung, klik tombol di bawah untuk menyambungkan", + "disconnectedDevice": "Tidak ada perangkat yang terhubung, klik tombol di bawah untuk menyambungkan", "connectDevice": "Sambungkan Perangkat", "topAiExperiences": "Pengalaman AI Teratas", "aiAssistant": "Asisten AI Serba Guna", - "aiAssistantInfo": - "Konsultan eksklusif 24/7, menjawab pertanyaan, memberikan saran", + "aiAssistantInfo": "Konsultan eksklusif 24/7, menjawab pertanyaan, memberikan saran", "interpretation": "Interpretasi Simultan", - "simultaneousInterpretationInfo": - "Terjemahan waktu nyata untuk 80+ bahasa, perjalanan ke luar negeri tanpa khawatir", + "simultaneousInterpretationInfo": "Terjemahan waktu nyata untuk 80+ bahasa, perjalanan ke luar negeri tanpa khawatir", "aiCompanion": "Teman Keluarga", "aiCompanionInfo": "Memahami Anda, teman yang hangat", "homeSlogan": "Menghubungkan dunia, melampaui suara", - "turnEarphones": - "Silakan buka casing pengisi daya earphone dan masukkan earphone ke telinga Anda", + "turnEarphones": "Silakan buka casing pengisi daya earphone dan masukkan earphone ke telinga Anda", "currentlyConnected": "Saat ini terhubung:", "unsystemSetup": "Buka pengaturan sistem", "talkLater": "Nanti", @@ -178,11 +175,198 @@ const Map idID = { "healthConsultant": "Obrolan AI Multifungsi", "healthConsultantInfo": "Menyediakan lebih banyak fitur obrolan AI", "conferenceAssistant": "Asisten Rapat Bisnis", - "conferenceAssistantInfo": - "Catatan rapat waktu nyata, terjemahan multibahasa", + "conferenceAssistantInfo": "Catatan rapat waktu nyata, terjemahan multibahasa", "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 +381,225 @@ 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 +611,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", @@ -225,11 +621,9 @@ const Map idID = { "voiceServiceInfo": "Pilih layanan pengenalan dan sintesis suara", "selectVoiceService": "Pilih Layanan Suara", "azureVoiceService": "Layanan Suara Azure", - "azureVoiceServiceInfo": - "Layanan suara cloud Microsoft, mendukung sintesis dan pengenalan suara berkualitas tinggi", + "azureVoiceServiceInfo": "Layanan suara cloud Microsoft, mendukung sintesis dan pengenalan suara berkualitas tinggi", "flutterVoiceService": "Layanan Suara Lokal Flutter", - "flutterVoiceServiceInfo": - "Layanan suara lokal perangkat, dapat digunakan tanpa koneksi internet", + "flutterVoiceServiceInfo": "Layanan suara lokal perangkat, dapat digunakan tanpa koneksi internet", 'timbreService': 'Layanan Timbre', 'timbreServiceInfo': 'Pilih layanan sintesis suara timbre', 'defaultTimbre': 'Timbre Standar', @@ -251,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Rasakan fungsi interaksi suara cerdas (pratinjau fitur)", + "realtimeVoiceChatInfo": "Rasakan fungsi interaksi suara cerdas (pratinjau fitur)", "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 @@ -278,8 +678,7 @@ const Map idID = { "inputMessage": "Masukkan pesan...", "imListening": "Mendengarkan...", "canStartTalking": "Anda bisa mulai berbicara", - "addQuestionAboutImage": - "Tambahkan pertanyaan atau deskripsi tentang gambar...", + "addQuestionAboutImage": "Tambahkan pertanyaan atau deskripsi tentang gambar...", "summarizeImageContent": "Ringkas konten gambar", "extractImageText": "Ekstrak teks gambar", "translateImageText": "Terjemahkan teks gambar", @@ -298,6 +697,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' @@ -308,20 +721,16 @@ const Map idID = { '• Mengontrol fungsi earphone\n\n' 'Apa yang bisa saya bantu?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': - 'Pengenalan suara memerlukan akses mikrofon.', - 'voiceTranslationPermissionText': - 'Pengenalan dan terjemahan suara memerlukan akses mikrofon.', - 'phoneCallPermissionText': - 'Melakukan panggilan memerlukan akses mikrofon untuk panggilan suara.', - 'permissionDeniedText': - 'Anda telah menolak izin mikrofon secara permanen, silakan buka pengaturan sistem untuk mengaktifkannya.', + 'voiceRecognitionPermissionText': 'Pengenalan suara memerlukan akses mikrofon.', + 'voiceTranslationPermissionText': 'Pengenalan dan terjemahan suara memerlukan akses mikrofon.', + 'phoneCallPermissionText': 'Melakukan panggilan memerlukan akses mikrofon untuk panggilan suara.', + 'permissionDeniedText': 'Anda telah menolak izin mikrofon secara permanen, silakan buka pengaturan sistem untuk mengaktifkannya.', 'startVoiceInput': 'Mulai input suara', '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', @@ -329,8 +738,8 @@ const Map idID = { 'report': 'Lapor', 'submitSuccess': 'Berhasil dikirim', 'submitFailed': 'Gagal dikirim', - 'reportSubmitted': - 'Laporan telah dikirim, kami akan memprosesnya sesegera mungkin', + 'reportSubmitted': 'Laporan telah dikirim, kami akan memprosesnya sesegera mungkin', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Berbahaya/Tidak Aman', 'pornographicVulgar': 'Pornografi/Vulgär', 'misleadingAttack': 'Menyesatkan/Serangan', @@ -338,8 +747,8 @@ const Map idID = { 'privacyRelated': 'Terkait Privasi', 'copyrightViolation': 'Melanggar hak cipta, nama baik saya, dll.', 'other': 'Lainnya', - 'reportDescriptionHint': - 'Kami ingin tahu alasan Anda melaporkan, Anda dapat menjelaskan masalah yang Anda hadapi.', + 'reportDescriptionHint': 'Kami ingin tahu alasan Anda melaporkan, Anda dapat menjelaskan masalah yang Anda hadapi.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Dihasilkan oleh AI', @@ -350,15 +759,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", @@ -369,24 +778,15 @@ const Map idID = { 'highest': 'Tertinggi', 'lowest': 'Terendah', 'futureForecast': 'Prakiraan Masa Depan', - 'hotWeatherTip': - 'Hari ini panas, harap berhati-hati terhadap sengatan panas dan minum banyak air', - 'coldWeatherTip': - 'Suhu hari ini rendah, harap kenakan pakaian hangat saat keluar untuk menghindari pilek', - 'rainyWeatherTip': - 'Hari ini hujan, harap bawa payung saat keluar dan berhati-hati saat bepergian', - 'snowyWeatherTip': - 'Hari ini salju, jalan licin harap berhati-hati, ambil tindakan pencegahan agar tetap hangat', - 'foggyWeatherTip': - 'Hari ini berkabut, jarak pandang rendah, harap pakai masker saat keluar', - 'windyWeatherTip': - 'Hari ini berangin, harap berhati-hati saat keluar, pastikan barang-barang Anda aman', - 'sunnyWeatherTip': - 'Hari ini cerah dengan sinar UV yang kuat, harap gunakan tabir surya saat keluar', - 'temperatureDifferenceTip': - 'Ada perbedaan suhu yang besar antara siang dan malam hari ini, harap sesuaikan pakaian Anda', - 'comfortableWeatherTip': - 'Cuaca hari ini menyenangkan, waktu yang tepat untuk aktivitas di luar ruangan', + 'hotWeatherTip': 'Hari ini panas, harap berhati-hati terhadap sengatan panas dan minum banyak air', + 'coldWeatherTip': 'Suhu hari ini rendah, harap kenakan pakaian hangat saat keluar untuk menghindari pilek', + 'rainyWeatherTip': 'Hari ini hujan, harap bawa payung saat keluar dan berhati-hati saat bepergian', + 'snowyWeatherTip': 'Hari ini salju, jalan licin harap berhati-hati, ambil tindakan pencegahan agar tetap hangat', + 'foggyWeatherTip': 'Hari ini berkabut, jarak pandang rendah, harap pakai masker saat keluar', + 'windyWeatherTip': 'Hari ini berangin, harap berhati-hati saat keluar, pastikan barang-barang Anda aman', + 'sunnyWeatherTip': 'Hari ini cerah dengan sinar UV yang kuat, harap gunakan tabir surya saat keluar', + 'temperatureDifferenceTip': 'Ada perbedaan suhu yang besar antara siang dan malam hari ini, harap sesuaikan pakaian Anda', + 'comfortableWeatherTip': 'Cuaca hari ini menyenangkan, waktu yang tepat untuk aktivitas di luar ruangan', "monday": "Senin", "tuesday": "Selasa", "wednesday": "Rabu", @@ -394,6 +794,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", @@ -427,29 +838,26 @@ const Map idID = { "logout": "Keluar", "logoutTips": "Apakah Anda yakin ingin keluar dari akun saat ini?", 'deleteAccount': 'Hapus Akun', - 'deleteAccountTips': - 'Apakah Anda yakin ingin menghapus akun Anda secara permanen? Tindakan ini tidak dapat dibatalkan', + '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': - 'Koneksi jaringan gagal, silakan periksa pengaturan jaringan Anda dan coba lagi', - 'serverTemporarilyUnavailable': - 'Server tidak tersedia untuk sementara, silakan coba lagi nanti', + 'networkConnectionFailed': 'Koneksi jaringan gagal, silakan periksa pengaturan jaringan Anda dan coba lagi', + 'serverTemporarilyUnavailable': 'Server tidak tersedia untuk sementara, silakan coba lagi nanti', 'loginExpiredPleaseRelogin': 'Sesi Anda telah berakhir, silakan masuk lagi', - 'noPermissionForThisOperation': - 'Anda tidak memiliki izin untuk melakukan operasi ini', + 'noPermissionForThisOperation': 'Anda tidak memiliki izin untuk melakukan operasi ini', 'requestedResourceNotFound': 'Sumber daya yang diminta tidak ditemukan', - 'imageProcessingFailedPleaseReselect': - 'Pemrosesan gambar gagal, silakan pilih gambar lain', + 'imageProcessingFailedPleaseReselect': 'Pemrosesan gambar gagal, silakan pilih gambar lain', 'operationFailedPleaseRetry': 'Operasi gagal, silakan coba lagi', 'serverReturnedError': 'Server mengembalikan kesalahan', 'serverError': 'Kesalahan Server', - 'networkConnectionFailedCheckSettings': - 'Koneksi jaringan gagal, silakan periksa pengaturan jaringan Anda', - 'serverInternalErrorRetryLater': - 'Kesalahan internal server, silakan coba lagi nanti', + 'networkConnectionFailedCheckSettings': 'Koneksi jaringan gagal, silakan periksa pengaturan jaringan Anda', + 'serverInternalErrorRetryLater': '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,34 +870,41 @@ 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', - 'calendarWritePermissionDesc': - 'Digunakan untuk membuat acara kalender dan pengingat', - 'calendarFullAccessPermissionDesc': - 'Digunakan untuk membaca dan mengelola acara kalender dan pengingat', - 'locationPermissionDesc': - 'Digunakan untuk mendapatkan informasi lokasi saat ini', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Digunakan untuk membuat acara kalender dan pengingat', + 'calendarFullAccessPermissionDesc': 'Digunakan untuk membaca dan mengelola acara kalender dan pengingat', + 'locationPermissionDesc': 'Digunakan untuk mendapatkan informasi lokasi saat ini', 'appFunctionNeeds': 'Fungsi aplikasi membutuhkan', 'authorized': 'Diizinkan', 'unauthorized': 'Tidak Diizinkan', @@ -500,28 +915,63 @@ const Map idID = { 'permissionRequestError': 'Kesalahan saat meminta izin', 'phonePermissionDetailDesc': 'Fungsi panggilan memerlukan izin telepon', 'smsPermissionDetailDesc': 'Fungsi mengirim SMS memerlukan izin SMS', - 'calendarWritePermissionDetailDesc': - 'Membuat acara kalender memerlukan izin menulis kalender', - 'calendarFullAccessPermissionDetailDesc': - 'Mengelola acara kalender memerlukan izin penuh kalender', - 'locationPermissionDetailDesc': - 'Mendapatkan informasi lokasi memerlukan izin lokasi', - 'appNeedsPermissionForFullFunction': - 'Aplikasi memerlukan izin ini untuk fungsionalitas penuh', - 'permanentDenialText': - 'Anda telah menolak izin {permission} secara permanen, silakan buka pengaturan aplikasi untuk mengaktifkannya', + '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', - 'cannotOpenAppStore': - 'Tidak dapat membuka toko aplikasi, silakan buka toko aplikasi secara manual untuk memperbarui', - 'updateErrorRetry': - 'Terjadi kesalahan saat pembaruan, silakan coba lagi nanti', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Terjadi kesalahan saat pembaruan, silakan coba lagi nanti', // 更新错误重试提示 //国家列表 "邮箱": "Email", @@ -630,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Apakah Anda yakin ingin menghapus semua riwayat terjemahan? Tindakan ini tidak dapat dibatalkan.", "unknownLanguage": "Bahasa Tidak Dikenal", "deleteSessionRecord": "Hapus Rekaman Sesi", - "deleteSessionConfirm": - "Apakah Anda yakin ingin menghapus semua rekaman terjemahan untuk sesi ini? Tindakan ini tidak dapat dibatalkan.", + "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...", @@ -674,11 +1197,9 @@ const Map idID = { "summaryGenerated": "Ringkasan telah dibuat", "generating": "Membuat...", "regenerate": "Buat Ulang", - "summaryTimeoutMessage": - "Permintaan pembuatan ringkasan habis waktu, mungkin karena masalah jaringan atau server sibuk.", + "summaryTimeoutMessage": "Permintaan pembuatan ringkasan habis waktu, mungkin karena masalah jaringan atau server sibuk.", "deleteTranslationRecord": "Hapus Rekaman Terjemahan", - "deleteTranslationConfirm": - "Apakah Anda yakin ingin menghapus rekaman terjemahan ini? Tindakan ini tidak dapat dibatalkan.", + "deleteTranslationConfirm": "Apakah Anda yakin ingin menghapus rekaman terjemahan ini? Tindakan ini tidak dapat dibatalkan.", "originalText": "Teks Asli", "translatedText": "Teks Terjemahan", "sessionSummary": "Ringkasan Sesi", @@ -696,7 +1217,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...", @@ -706,34 +1227,32 @@ const Map idID = { // 配对状态文本 "readyToPair": "Siap untuk dipasangkan", "preparingPairingEnvironment": "Mempersiapkan lingkungan pemasangan...", - "connectDeepSoundViaSystemBluetooth": - "Harap hubungkan ke perangkat Voitrans melalui Bluetooth sistem terlebih dahulu", + "connectDeepSoundViaSystemBluetooth": "Harap hubungkan ke perangkat Voitrans melalui Bluetooth sistem terlebih dahulu", "deviceBindingConfirm": "Konfirmasi pengikatan perangkat...", "establishingDeviceAssociation": "Membangun asosiasi perangkat...", "waitingCompletePairing": "Harap tunggu, pemasangan sedang diselesaikan...", - "pairingSuccessRedirecting": - "Pemasangan berhasil! Mengalihkan ke halaman utama...", + "pairingSuccessRedirecting": "Pemasangan berhasil! Mengalihkan ke halaman utama...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Harap pastikan Anda terhubung ke perangkat Voitrans", - "deviceAlreadyBoundToOtherAccount": - "Perangkat ini sudah terikat ke akun lain", + "ensureConnectedDeepSoundDevice": "Harap pastikan Anda terhubung ke perangkat Voitrans", + "deviceAlreadyBoundToOtherAccount": "Perangkat ini sudah terikat ke akun lain", "deviceAssociationFailed": "Asosiasi perangkat gagal, silakan coba lagi", - "scanTimeoutEnsureDeviceNearby": - "Waktu pemindaian habis, harap pastikan perangkat berada di dekat", + "scanTimeoutEnsureDeviceNearby": "Waktu pemindaian habis, harap pastikan perangkat berada di dekat", "networkError": "Kesalahan Jaringan", - "authorizationFailedCheckCode": - "Otorisasi gagal, harap periksa apakah kode otorisasi benar", + "authorizationFailedCheckCode": "Otorisasi gagal, harap periksa apakah kode otorisasi benar", "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', + '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!', @@ -751,26 +1270,31 @@ const Map idID = { 'bleConnectionTimeoutRetry': 'Waktu koneksi BLE habis, silakan coba lagi', 'blePairingStartupFailed': 'Gagal memulai pemasangan BLE', 'bleConnectionFailed': 'Koneksi BLE gagal', - 'deviceAuthorizationFailedCheckCode': - 'Otorisasi perangkat gagal, harap periksa kode otorisasi', + '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', - 'feedbackDescription': - 'Harap jelaskan masalah yang Anda hadapi atau saran Anda', + 'feedbackDescription': 'Harap jelaskan masalah yang Anda hadapi atau saran Anda', 'feedbackHint': 'Silakan masukkan umpan balik Anda...', 'feedbackRequired': 'Harap masukkan konten umpan balik', 'contactInfo': 'Informasi Kontak', 'contactHint': 'Email/Telepon, agar kami dapat menghubungi Anda', 'submit': 'Kirim', - 'feedbackSubmitSuccess': - 'Umpan balik berhasil dikirim, terima kasih atas umpan balik Anda!', + 'feedbackSubmitSuccess': 'Umpan balik berhasil dikirim, terima kasih atas umpan balik Anda!', 'feedbackSubmitFailed': 'Gagal mengirim umpan balik, silakan coba lagi nanti', // OTA升级模块 - "upgradeExitConfirm": - "Pembaruan sedang berlangsung, keluar akan mengganggu proses, apakah Anda yakin ingin keluar?", + "upgradeExitConfirm": "Pembaruan sedang berlangsung, keluar akan mengganggu proses, apakah Anda yakin ingin keluar?", "deviceModel": "Model Perangkat", "unknownDevice": "Perangkat Tidak Dikenal", "currentFirmwareVersion": "Versi Firmware Saat Ini", @@ -782,20 +1306,22 @@ const Map idID = { "connectionFailed": "Koneksi Gagal", "retryConnection": "Coba Sambungkan Kembali", "ota_updateNow": "Perbarui Sekarang", - "keepConnectedDontClose": - "Jaga agar perangkat tetap terhubung, jangan tutup aplikasi", + "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", "charging": "Mengisi daya", "updateContent": "Konten Pembaruan", - "removeEarbudsEnsureBattery": - "Keluarkan kedua earbud, dan pastikan baterai keduanya di atas 20%", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..58aeea02b 100644 --- a/lib/core/translations/language/is_is.dart +++ b/lib/core/translations/language/is_is.dart @@ -90,8 +90,7 @@ const Map isIS = { "tip": "Ábending", "pleaseEnterCompleteCode": "Vinsamlegast sláðu inn allan staðfestingarkóðann", "loginFailed": "Innskráning mistókst, vinsamlegast reyndu aftur", - 'pleaseAcceptPrivacyPolicy': - 'Vinsamlegast lestu og samþykktu persónuverndarstefnuna og notendasamninginn fyrst', + 'pleaseAcceptPrivacyPolicy': 'Vinsamlegast lestu og samþykktu persónuverndarstefnuna og notendasamninginn fyrst', "enterVerificationCode": "Sláðu inn staðfestingarkóða", "verificationCodeSentTo": "Staðfestingarkóði sendur til", "resendVerificationCode": "Senda staðfestingarkóða aftur", @@ -99,12 +98,14 @@ 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", @@ -114,29 +115,24 @@ const Map isIS = { "signal": "Merki", "deviceId": "Auðkenni tækis", "firmwareVersion": "Fastbúnaðarútgáfa", - "disconnectedDevice": - "Ekkert tæki tengt, smelltu á hnappinn hér að neðan til að tengjast", + "disconnectedDevice": "Ekkert tæki tengt, smelltu á hnappinn hér að neðan til að tengjast", "connectDevice": "Tengja tæki", "topAiExperiences": "Helstu gervigreindarupplifanir", "aiAssistant": "Alhliða gervigreindar-aðstoðarmaður", - "aiAssistantInfo": - "Einkaþjónusta allan sólarhringinn, svarar spurningum, gefur tillögur", + "aiAssistantInfo": "Einkaþjónusta allan sólarhringinn, svarar spurningum, gefur tillögur", "interpretation": "Samtímatúlkun", - "simultaneousInterpretationInfo": - "Rauntímaþýðing fyrir yfir 80 tungumál, áhyggjulausar utanlandsferðir", + "simultaneousInterpretationInfo": "Rauntímaþýðing fyrir yfir 80 tungumál, áhyggjulausar utanlandsferðir", "aiCompanion": "Fjölskyldufélagi", "aiCompanionInfo": "Skilur þig, hlýlegur félagsskapur", "homeSlogan": "Að tengja heiminn, umfram hljóð", - "turnEarphones": - "Vinsamlegast opnaðu hleðsluhulstrið á heyrnartólunum og settu þau í eyrun", + "turnEarphones": "Vinsamlegast opnaðu hleðsluhulstrið á heyrnartólunum og settu þau í eyrun", "currentlyConnected": "Nú tengt:", "unsystemSetup": "Fara í kerfisstillingar", "talkLater": "Seinna", "initializing": "Frumstilli...", "bluetoothInitializationFailure": "Frumstilling Bluetooth-þjónustu mistókst", "checkingPermissions": "Athuga heimildir...", - "lackPermissions": - "Skortir Bluetooth-heimildir og lokatæknið er þó ekki tilgengilegt", + "lackPermissions": "Skortir Bluetooth-heimildir og lokatæknið er þó ekki tilgengilegt", "searchingDevice": "Leita að tækjum...", "findConnectedDevice": "Fann tengt tæki", "notFound": "Ekkert tengt Bluetooth-tæki fannst", @@ -151,8 +147,7 @@ const Map isIS = { "fine": "Mjög gott", "excellent": "Framúrskarandi", "unknown": "Óþekkt", - 'bluetoothTurnedOff': - 'Slökkt er á Bluetooth, vinsamlegast kveiktu á Bluetooth', + 'bluetoothTurnedOff': 'Slökkt er á Bluetooth, vinsamlegast kveiktu á Bluetooth', 'bluetoothOff': 'Slökkt á Bluetooth', 'leftEar': 'Vinstra eyra', 'rightEar': 'Hægra eyra', @@ -184,6 +179,194 @@ 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 +381,225 @@ 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 +611,8 @@ 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", @@ -226,11 +621,9 @@ const Map isIS = { "voiceServiceInfo": "Veldu raddgreiningar- og myndunarþjónustu", "selectVoiceService": "Veldu raddþjónustu", "azureVoiceService": "Azure raddþjónusta", - "azureVoiceServiceInfo": - "Microsoft skýjaraddþjónusta, styður hágæða raddmyndun og -greiningu", + "azureVoiceServiceInfo": "Microsoft skýjaraddþjónusta, styður hágæða raddmyndun og -greiningu", "flutterVoiceService": "Flutter staðbundin raddþjónusta", - "flutterVoiceServiceInfo": - "Staðbundin raddþjónusta tækisins, hægt að nota án nettengingar", + "flutterVoiceServiceInfo": "Staðbundin raddþjónusta tækisins, hægt að nota án nettengingar", 'timbreService': 'Raddblæþjónusta', 'timbreServiceInfo': 'Veldu raddblæmyndunarþjónustu', 'defaultTimbre': 'Sjálfgefinn raddblær', @@ -252,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Upplifðu greinda raddsamskiptaaðgerð (forskoðun aðgerðar)", + "realtimeVoiceChatInfo": "Upplifðu greinda raddsamskiptaaðgerð (forskoðun aðgerðar)", "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 +697,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' @@ -309,18 +722,15 @@ const Map isIS = { 'Hvernig get ég aðstoðað þig?', 'microphonePermission': 'Hljóðnemi', 'voiceRecognitionPermissionText': 'Raddgreining krefst aðgangs að hljóðnema.', - 'voiceTranslationPermissionText': - 'Raddgreining og þýðing krefjast aðgangs að hljóðnema.', - 'phoneCallPermissionText': - 'Að hringja krefst aðgangs að hljóðnema fyrir raddsamtöl.', - 'permissionDeniedText': - 'Þú hefur varanlega hafnað heimild fyrir hljóðnema, vinsamlegast farðu í kerfisstillingar til að virkja heimildina.', + 'voiceTranslationPermissionText': 'Raddgreining og þýðing krefjast aðgangs að hljóðnema.', + 'phoneCallPermissionText': 'Að hringja krefst aðgangs að hljóðnema fyrir raddsamtöl.', + 'permissionDeniedText': 'Þú hefur varanlega hafnað heimild fyrir hljóðnema, vinsamlegast farðu í kerfisstillingar til að virkja heimildina.', 'startVoiceInput': 'Hefja raddinnslátt', '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', @@ -328,8 +738,8 @@ const Map isIS = { 'report': 'Tilkynna', 'submitSuccess': 'Sent', 'submitFailed': 'Sending mistókst', - 'reportSubmitted': - 'Tilkynning send, við munum afgreiða hana eins fljótt og auðið er', + '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', @@ -337,8 +747,8 @@ const Map isIS = { 'privacyRelated': 'Tengt persónuvernd', 'copyrightViolation': 'Brot á höfundarrétti mínum, mannorði o.s.frv.', 'other': 'Annað', - 'reportDescriptionHint': - 'Við viljum vita hvers vegna þú ert að tilkynna, þú getur lýst vandamálinu sem þú lendir í.', + '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 +759,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', @@ -368,24 +778,15 @@ const Map isIS = { 'highest': 'Hæst', 'lowest': 'Lægst', 'futureForecast': 'Framtíðarspá', - 'hotWeatherTip': - 'Í dag er heitt, gætið að hitaslagi og drekkið mikið af vatni', - 'coldWeatherTip': - 'Í dag er lágt hitastig, klæðið ykkur vel þegar þið farið út til að forðast kvef', - 'rainyWeatherTip': - 'Í dag rignir, takið með ykkur regnhlíf þegar þið farið út og farið varlega', - 'snowyWeatherTip': - 'Í dag snjóar, vegurinn er háll, farið varlega og klæðið ykkur vel', - 'foggyWeatherTip': - 'Í dag er þoka, skyggni er slæmt, notið grímu þegar þið farið út', - 'windyWeatherTip': - 'Í dag er mikill vindur, farið varlega þegar þið farið út og festið eigur ykkar', - 'sunnyWeatherTip': - 'Í dag er sólskin og sterk UV-geislun, notið sólarvörn þegar þið farið út', - 'temperatureDifferenceTip': - 'Í dag er mikill hitamunur á degi og nóttu, klæðið ykkur í samræmi við það', - 'comfortableWeatherTip': - 'Í dag er veðrið notalegt, frábær tími fyrir útivist', + 'hotWeatherTip': 'Í dag er heitt, gætið að hitaslagi og drekkið mikið af vatni', + 'coldWeatherTip': 'Í dag er lágt hitastig, klæðið ykkur vel þegar þið farið út til að forðast kvef', + 'rainyWeatherTip': 'Í dag rignir, takið með ykkur regnhlíf þegar þið farið út og farið varlega', + 'snowyWeatherTip': 'Í dag snjóar, vegurinn er háll, farið varlega og klæðið ykkur vel', + 'foggyWeatherTip': 'Í dag er þoka, skyggni er slæmt, notið grímu þegar þið farið út', + 'windyWeatherTip': 'Í dag er mikill vindur, farið varlega þegar þið farið út og festið eigur ykkar', + 'sunnyWeatherTip': 'Í dag er sólskin og sterk UV-geislun, notið sólarvörn þegar þið farið út', + 'temperatureDifferenceTip': 'Í dag er mikill hitamunur á degi og nóttu, klæðið ykkur í samræmi við það', + 'comfortableWeatherTip': 'Í dag er veðrið notalegt, frábær tími fyrir útivist', "monday": "Mán", "tuesday": "Þri", "wednesday": "Mið", @@ -393,6 +794,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", @@ -426,30 +838,26 @@ const Map isIS = { "logout": "Útskráning", "logoutTips": "Ertu viss um að þú viljir skrá þig út af núverandi reikningi?", 'deleteAccount': 'Eyða reikningi', - 'deleteAccountTips': - 'Ertu viss um að þú viljir eyða reikningnum þínum varanlega? Ekki er hægt að afturkalla þessa aðgerð.', + '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': - 'Netkerfistenging mistókst, vinsamlegast athugaðu netkerfisstillingar og reyndu aftur', - 'serverTemporarilyUnavailable': - 'Netþjónn er tímabundið ófáanlegur, vinsamlegast reyndu aftur síðar', - 'loginExpiredPleaseRelogin': - 'Innskráningin þín er útrunnin, vinsamlegast skráðu þig inn aftur', - 'noPermissionForThisOperation': - 'Þú hefur ekki heimild til að framkvæma þessa aðgerð', + 'networkConnectionFailed': 'Netkerfistenging mistókst, vinsamlegast athugaðu netkerfisstillingar og reyndu aftur', + 'serverTemporarilyUnavailable': 'Netþjónn er tímabundið ófáanlegur, vinsamlegast reyndu aftur síðar', + 'loginExpiredPleaseRelogin': 'Innskráningin þín er útrunnin, vinsamlegast skráðu þig inn aftur', + 'noPermissionForThisOperation': 'Þú hefur ekki heimild til að framkvæma þessa aðgerð', 'requestedResourceNotFound': 'Umbeðin auðlind fannst ekki', - 'imageProcessingFailedPleaseReselect': - 'Myndvinnsla mistókst, vinsamlegast veldu aðra mynd', + 'imageProcessingFailedPleaseReselect': 'Myndvinnsla mistókst, vinsamlegast veldu aðra mynd', 'operationFailedPleaseRetry': 'Aðgerð mistókst, vinsamlegast reyndu aftur', 'serverReturnedError': 'Netþjónn skilaði villu', 'serverError': 'Netþjónsvilla', - 'networkConnectionFailedCheckSettings': - 'Netkerfistenging mistókst, vinsamlegast athugaðu netkerfisstillingar', - 'serverInternalErrorRetryLater': - 'Innri netþjónsvilla, vinsamlegast reyndu aftur síðar', + 'networkConnectionFailedCheckSettings': 'Netkerfistenging mistókst, vinsamlegast athugaðu netkerfisstillingar', + 'serverInternalErrorRetryLater': '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', @@ -459,38 +867,44 @@ const Map isIS = { 'loggedOut': 'Útskráð(ur)', 'logoutFailedRetry': 'Útskráning mistókst, vinsamlegast reyndu aftur', 'accountPermanentlyDeleted': 'Reikningi hefur verið eytt varanlega', - 'deleteAccountFailedRetry': - 'Eyðing reiknings mistókst, vinsamlegast reyndu aftur', + 'deleteAccountFailedRetry': '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ð', - 'calendarWritePermissionDesc': - 'Notað til að búa til dagbókarviðburði og áminningar', - 'calendarFullAccessPermissionDesc': - 'Notað til að lesa og stjórna dagbókarviðburðum og áminningum', - 'locationPermissionDesc': - 'Notað til að fá upplýsingar um núverandi staðsetningu', + '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': 'Notað til að lesa og stjórna dagbókarviðburðum og áminningum', + 'locationPermissionDesc': 'Notað til að fá upplýsingar um núverandi staðsetningu', 'appFunctionNeeds': 'Forritsaðgerð þarf', 'authorized': 'Heimilað', 'unauthorized': 'Óheimilað', @@ -501,28 +915,63 @@ const Map isIS = { 'permissionRequestError': 'Villa við beiðni um heimild', 'phonePermissionDetailDesc': 'Símtalsaðgerð krefst símaheimildar', 'smsPermissionDetailDesc': 'SMS sendingaraðgerð krefst SMS heimildar', - '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', - 'appNeedsPermissionForFullFunction': - 'Forritið þarf þessa heimild til að veita fulla virkni', - 'permanentDenialText': - 'Þú hefur varanlega hafnað {permission}-heimild, vinsamlegast farðu í forritastillingar til að virkja hana', + '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', - 'cannotOpenAppStore': - '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', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Villa kom upp við uppfærslu, vinsamlegast reyndu aftur síðar', // 更新错误重试提示 //国家列表 "邮箱": "Tölvupóstur", @@ -631,8 +1080,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,18 +1105,76 @@ 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ð.", + "clearHistoryConfirm": "Ertu viss um að þú viljir hreinsa alla þýðingasögu? Ekki er hægt að afturkalla þessa aðgerð.", "unknownLanguage": "Óþekkt tungumál", "deleteSessionRecord": "Eyða lotuupptöku", - "deleteSessionConfirm": - "Ertu viss um að þú viljir eyða öllum þýðingarupptökum fyrir þessa lotu? Ekki er hægt að afturkalla þessa aðgerð.", + "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...", @@ -667,8 +1189,7 @@ const Map isIS = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Upprunaleg upptaka", "recordSummary": "Samantekt upptöku", - "clickToGenerateSummary": - "Smelltu á hnappinn hér að neðan til að búa til samantekt lotu", + "clickToGenerateSummary": "Smelltu á hnappinn hér að neðan til að búa til samantekt lotu", "summaryContent": "Innihald samantektar", "copied": "Afritað", "summaryCopiledToClipboard": "Samantekt afrituð á klippiborð", @@ -676,11 +1197,9 @@ const Map isIS = { "summaryGenerated": "Samantekt búin til", "generating": "Býr til...", "regenerate": "Búa til aftur", - "summaryTimeoutMessage": - "Tími beiðni um samantektargenerun rann út, gæti verið vegna netvandamála eða upptekins netþjóns.", + "summaryTimeoutMessage": "Tími beiðni um samantektargenerun rann út, gæti verið vegna netvandamála eða upptekins netþjóns.", "deleteTranslationRecord": "Eyða þýðingarupptöku", - "deleteTranslationConfirm": - "Ertu viss um að þú viljir eyða þessari þýðingarupptöku? Ekki er hægt að afturkalla þessa aðgerð.", + "deleteTranslationConfirm": "Ertu viss um að þú viljir eyða þessari þýðingarupptöku? Ekki er hægt að afturkalla þessa aðgerð.", "originalText": "Upprunalegur texti", "translatedText": "Þýddur texti", "sessionSummary": "Samantekt lotu", @@ -698,7 +1217,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...", @@ -708,56 +1227,59 @@ const Map isIS = { // 配对状态文本 "readyToPair": "Tilbúið til pörunar", "preparingPairingEnvironment": "Undirbýr pörunarumhverfi...", - "connectDeepSoundViaSystemBluetooth": - "Tengstu fyrst við Voitrans tækið í gegnum kerfis-Bluetooth", + "connectDeepSoundViaSystemBluetooth": "Tengstu fyrst við Voitrans tækið í gegnum kerfis-Bluetooth", "deviceBindingConfirm": "Staðfesting á tækisbindingu...", "establishingDeviceAssociation": "Stofna tækjasamband...", "waitingCompletePairing": "Vinsamlegast bíddu, lýkur pörun...", "pairingSuccessRedirecting": "Pörun tókst! Vísar á aðalsíðu...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Gakktu úr skugga um að þú sért tengd(ur) við Voitrans tæki", - "deviceAlreadyBoundToOtherAccount": - "Þetta tæki er þegar bundið við annan reikning", + "ensureConnectedDeepSoundDevice": "Gakktu úr skugga um að þú sért tengd(ur) við Voitrans tæki", + "deviceAlreadyBoundToOtherAccount": "Þetta tæki er þegar bundið við annan reikning", "deviceAssociationFailed": "Tækjasamband mistókst, vinsamlegast reyndu aftur", - "scanTimeoutEnsureDeviceNearby": - "Tími skönnunar rann út, gakktu úr skugga um að tækið sé nálægt", + "scanTimeoutEnsureDeviceNearby": "Tími skönnunar rann út, gakktu úr skugga um að tækið sé nálægt", "networkError": "Netvilla", - "authorizationFailedCheckCode": - "Heimildun mistókst, athugaðu hvort heimildarkóðinn sé réttur", + "authorizationFailedCheckCode": "Heimildun mistókst, athugaðu hvort heimildarkóðinn sé réttur", "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', + '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...', + 'needManualBindingAuthCode': 'Handvirkur bindingarheimildarkóði er nauðsynlegur...', 'pairingSuccessful': 'Pörun tókst!', 'enableBluetooth': 'Virkja Bluetooth', 'grantPermissions': 'Veita heimildir', 'retryAssociation': 'Reyna samband aftur', 'retryAuthorization': 'Reyna heimildun aftur', - 'pleaseGrantNecessaryPermissions': - 'Vinsamlegast veittu nauðsynlegar heimildir', + 'pleaseGrantNecessaryPermissions': 'Vinsamlegast veittu nauðsynlegar heimildir', 'checkFailedRetry': 'Athugun mistókst, vinsamlegast reyndu aftur', 'pleaseConnectDeepSoundDevice': 'Vinsamlegast tengdu Voitrans tæki', 'verificationFailedRetry': 'Staðfesting mistókst, vinsamlegast reyndu aftur', 'invalidDeviceAddress': 'Ógilt tækisnetfang', 'bleDeviceAssociationFailed': 'BLE tækjasamband mistókst', - 'deviceAssociationFailedRetry': - 'Tækjasamband mistókst, vinsamlegast reyndu aftur', - 'bleConnectionTimeoutRetry': - 'BLE tengingartími rann út, vinsamlegast reyndu aftur', + 'deviceAssociationFailedRetry': 'Tækjasamband mistókst, vinsamlegast reyndu aftur', + 'bleConnectionTimeoutRetry': 'BLE tengingartími rann út, vinsamlegast reyndu aftur', 'blePairingStartupFailed': 'BLE pörunarstart mistókst', 'bleConnectionFailed': 'BLE tenging mistókst', - 'deviceAuthorizationFailedCheckCode': - 'Tækisheimildun mistókst, athugaðu heimildarkóðann', + '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", @@ -769,12 +1291,10 @@ const Map isIS = { 'contactHint': 'Tölvupóstur/Sími, svo við getum haft samband við þig', 'submit': 'Senda', 'feedbackSubmitSuccess': 'Endurgjöf send, takk fyrir endurgjöfina!', - 'feedbackSubmitFailed': - 'Sending endurgjafar mistókst, vinsamlegast reyndu aftur síðar', + 'feedbackSubmitFailed': 'Sending endurgjafar mistókst, vinsamlegast reyndu aftur síðar', // OTA升级模块 - "upgradeExitConfirm": - "Uppfærsla er í gangi, að hætta mun trufla ferlið, ertu viss um að þú viljir hætta?", + "upgradeExitConfirm": "Uppfærsla er í gangi, að hætta mun trufla ferlið, ertu viss um að þú viljir hætta?", "deviceModel": "Gerð tækis", "unknownDevice": "Óþekkt tæki", "currentFirmwareVersion": "Núverandi fastbúnaðarútgáfa", @@ -786,19 +1306,22 @@ 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", "updateContent": "Innihald uppfærslu", - "removeEarbudsEnsureBattery": - "Taktu báðar heyrnartólin úr og gakktu úr skugga um að rafhlaðan á báðum sé yfir 20%", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..071384191 100644 --- a/lib/core/translations/language/it_it.dart +++ b/lib/core/translations/language/it_it.dart @@ -91,8 +91,7 @@ const Map itIT = { "tip": "Suggerimento", "pleaseEnterCompleteCode": "Inserisci il codice di verifica completo", "loginFailed": "Accesso fallito, riprova", - 'pleaseAcceptPrivacyPolicy': - 'Per favore, leggi e accetta prima l\'Informativa sulla privacy e il Contratto utente', + 'pleaseAcceptPrivacyPolicy': 'Per favore, leggi e accetta prima l\'Informativa sulla privacy e il Contratto utente', "enterVerificationCode": "Inserisci codice di verifica", "verificationCodeSentTo": "Codice di verifica inviato a", "resendVerificationCode": "Invia nuovamente il codice di verifica", @@ -100,12 +99,14 @@ 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", @@ -115,30 +116,24 @@ const Map itIT = { "signal": "Segnale", "deviceId": "ID dispositivo", "firmwareVersion": "Versione firmware", - "disconnectedDevice": - "Nessun dispositivo connesso, clicca il pulsante qui sotto per connettere", + "disconnectedDevice": "Nessun dispositivo connesso, clicca il pulsante qui sotto per connettere", "connectDevice": "Connetti dispositivo", "topAiExperiences": "Esperienze AI principali", "aiAssistant": "Assistente AI completo", - "aiAssistantInfo": - "Consulente esclusivo 24/7, risponde a domande, fornisce suggerimenti", + "aiAssistantInfo": "Consulente esclusivo 24/7, risponde a domande, fornisce suggerimenti", "interpretation": "Interpretazione simultanea", - "simultaneousInterpretationInfo": - "Traduzione in tempo reale in oltre 80 lingue, viaggi all'estero senza preoccupazioni", + "simultaneousInterpretationInfo": "Traduzione in tempo reale in oltre 80 lingue, viaggi all'estero senza preoccupazioni", "aiCompanion": "Compagno di famiglia", "aiCompanionInfo": "Ti capisce, compagnia calorosa", "homeSlogan": "Connettere il mondo, trascendere il suono", - "turnEarphones": - "Apri la custodia di ricarica degli auricolari e inseriscili nelle orecchie", + "turnEarphones": "Apri la custodia di ricarica degli auricolari e inseriscili nelle orecchie", "currentlyConnected": "Attualmente connesso:", "unsystemSetup": "Vai alle impostazioni di sistema", "talkLater": "Più tardi", "initializing": "Inizializzazione...", - "bluetoothInitializationFailure": - "Inizializzazione del servizio Bluetooth fallita", + "bluetoothInitializationFailure": "Inizializzazione del servizio Bluetooth fallita", "checkingPermissions": "Verifica autorizzazioni...", - "lackPermissions": - "Mancano le autorizzazioni Bluetooth e l'accesso alla posizione è necessario", + "lackPermissions": "Mancano le autorizzazioni Bluetooth e l'accesso alla posizione è necessario", "searchingDevice": "Ricerca dispositivi...", "findConnectedDevice": "Dispositivo connesso trovato", "notFound": "Nessun dispositivo Bluetooth connesso trovato", @@ -146,24 +141,21 @@ const Map itIT = { "connectedDevice": "Connesso al dispositivo:", "failedRefreshDevice": "Aggiornamento del dispositivo fallito", "noDeviceFound": "Nessun dispositivo connesso trovato", - "failedDeviceInformation": - "Impossibile ottenere informazioni sul dispositivo", + "failedDeviceInformation": "Impossibile ottenere informazioni sul dispositivo", "unknownEquipment": "Dispositivo sconosciuto", "zeroSignal": "Nessun segnale", "good": "Buono", "fine": "Ottimo", "excellent": "Eccellente", "unknown": "Sconosciuto", - 'bluetoothTurnedOff': - 'Bluetooth disattivato, si prega di attivare il Bluetooth', + 'bluetoothTurnedOff': 'Bluetooth disattivato, si prega di attivare il Bluetooth', 'bluetoothOff': 'Bluetooth disattivato', 'leftEar': 'Orecchio sinistro', 'rightEar': 'Orecchio destro', 'chargingCase': 'Custodia di ricarica', 'left': 'Sinistra', 'right': 'Destra', - 'checkConnectionStatusFailed': - 'Verifica dello stato della connessione fallita', + 'checkConnectionStatusFailed': 'Verifica dello stato della connessione fallita', // 发现页 "searchAi": "Cerca funzioni AI...", @@ -184,11 +176,198 @@ const Map itIT = { "healthConsultant": "Chat AI multifunzionale", "healthConsultantInfo": "Offre più funzioni di chat AI", "conferenceAssistant": "Assistente per riunioni di lavoro", - "conferenceAssistantInfo": - "Registrazione di verbali in tempo reale, traduzione multilingue", + "conferenceAssistantInfo": "Registrazione di verbali in tempo reale, traduzione multilingue", "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 +382,225 @@ 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", @@ -217,28 +608,23 @@ const Map itIT = { "darkMode": "Modalità scura", "darkModeInfo": "Passa tra i temi chiaro e scuro dell'app", "backups": "Backup e ripristino", - "backupsInfo": - "Backup delle impostazioni e della cronologia delle interazioni AI", + "backupsInfo": "Backup delle impostazioni e della cronologia delle interazioni AI", "lastBackup": "Ultimo backup:", "privacySettings": "Impostazioni privacy", "privacySettingsInfo": "Gestisci la raccolta dei dati e le autorizzazioni", - "permissionManagement": "Gestione autorizzazioni", - "permissionManagementInfo": - "Gestisci le impostazioni delle autorizzazioni dell'app", + "permissionManagement": "Gestione autorizzazioni", // 权限管理 + "permissionManagementInfo": "Gestisci le impostazioni delle autorizzazioni dell'app", // 管理应用权限设置 "aboutApplication": "Informazioni sull'app", "versions": "Versione", "checkUpdates": "Controlla aggiornamenti", "selectLanguage": "Seleziona lingua", "voiceService": "Servizio vocale", - "voiceServiceInfo": - "Seleziona il servizio di riconoscimento e sintesi vocale", + "voiceServiceInfo": "Seleziona il servizio di riconoscimento e sintesi vocale", "selectVoiceService": "Seleziona servizio vocale", "azureVoiceService": "Servizio vocale Azure", - "azureVoiceServiceInfo": - "Servizio vocale cloud di Microsoft, supporta sintesi e riconoscimento vocale di alta qualità", + "azureVoiceServiceInfo": "Servizio vocale cloud di Microsoft, supporta sintesi e riconoscimento vocale di alta qualità", "flutterVoiceService": "Servizio vocale locale Flutter", - "flutterVoiceServiceInfo": - "Servizio vocale locale del dispositivo, utilizzabile senza connessione a Internet", + "flutterVoiceServiceInfo": "Servizio vocale locale del dispositivo, utilizzabile senza connessione a Internet", 'timbreService': 'Servizio timbro', 'timbreServiceInfo': 'Seleziona il servizio di sintesi vocale del timbro', 'defaultTimbre': 'Timbro predefinito', @@ -249,8 +635,7 @@ const Map itIT = { 'pleaseRead': 'Leggi ad alta voce', 'completeRecording': 'Completa la registrazione', "firmwareUpgrade": "Aggiornamento firmware", - "bleHeadsetFirmwareUpgrade": - "Aggiornamento della versione del firmware delle cuffie BLE", + "bleHeadsetFirmwareUpgrade": "Aggiornamento della versione del firmware delle cuffie BLE", "deviceManagement": "Gestione dispositivi", "manageConnectedDevices": "Gestisci i dispositivi Bluetooth associati", @@ -261,24 +646,30 @@ 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", - "realtimeVoiceChatInfo": - "Sperimenta la funzione di interazione vocale intelligente (anteprima della funzione)", + "realtimeVoiceChatInfo": "Sperimenta la funzione di interazione vocale intelligente (anteprima della funzione)", "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 @@ -288,8 +679,7 @@ const Map itIT = { "inputMessage": "Inserisci messaggio...", "imListening": "Sto ascoltando...", "canStartTalking": "Puoi iniziare a parlare", - "addQuestionAboutImage": - "Aggiungi una domanda o una descrizione sull'immagine...", + "addQuestionAboutImage": "Aggiungi una domanda o una descrizione sull'immagine...", "summarizeImageContent": "Riassumi il contenuto dell'immagine", "extractImageText": "Estrai il testo dall'immagine", "translateImageText": "Traduci il testo nell'immagine", @@ -308,6 +698,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' @@ -318,20 +722,16 @@ const Map itIT = { '• Controllare le funzioni degli auricolari\n\n' 'Come posso aiutarti?', 'microphonePermission': 'Microfono', - 'voiceRecognitionPermissionText': - 'Il riconoscimento vocale richiede l\'accesso al microfono.', - 'voiceTranslationPermissionText': - 'Il riconoscimento e la traduzione vocale richiedono l\'accesso al microfono.', - 'phoneCallPermissionText': - 'Effettuare chiamate richiede l\'accesso al microfono per le chiamate vocali.', - 'permissionDeniedText': - 'Hai negato permanentemente l\'autorizzazione al microfono, vai alle impostazioni di sistema per attivarla.', + 'voiceRecognitionPermissionText': 'Il riconoscimento vocale richiede l\'accesso al microfono.', + 'voiceTranslationPermissionText': 'Il riconoscimento e la traduzione vocale richiedono l\'accesso al microfono.', + 'phoneCallPermissionText': 'Effettuare chiamate richiede l\'accesso al microfono per le chiamate vocali.', + 'permissionDeniedText': 'Hai negato permanentemente l\'autorizzazione al microfono, vai alle impostazioni di sistema per attivarla.', 'startVoiceInput': 'Avvia input vocale', '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,16 +740,16 @@ 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', 'illegalCriminal': 'Illegale/Criminale', 'privacyRelated': 'Relativo alla privacy', - 'copyrightViolation': - 'Violazione del mio diritto d\'autore, della mia reputazione, ecc.', + 'copyrightViolation': 'Violazione del mio diritto d\'autore, della mia reputazione, ecc.', 'other': 'Altro', - 'reportDescriptionHint': - 'Vogliamo sapere perché stai segnalando, puoi descrivere il problema che hai riscontrato.', + 'reportDescriptionHint': 'Vogliamo sapere perché stai segnalando, puoi descrivere il problema che hai riscontrato.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Generato da AI', @@ -360,15 +760,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", @@ -379,24 +779,15 @@ const Map itIT = { 'highest': 'Massima', 'lowest': 'Minima', 'futureForecast': 'Previsioni future', - 'hotWeatherTip': - 'Oggi fa caldo, fai attenzione al colpo di calore e bevi molta acqua', - 'coldWeatherTip': - 'Oggi la temperatura è bassa, vestiti pesante quando esci per non prendere il raffreddore', - 'rainyWeatherTip': - 'Oggi piove, porta un ombrello quando esci e fai attenzione', - 'snowyWeatherTip': - 'Oggi nevica, la strada è scivolosa, fai attenzione e vestiti pesante', - 'foggyWeatherTip': - 'Oggi c\'è nebbia, la visibilità è scarsa, indossa una mascherina quando esci', - 'windyWeatherTip': - 'Oggi c\'è molto vento, fai attenzione quando esci e fissa bene le tue cose', - 'sunnyWeatherTip': - 'Oggi c\'è il sole e i raggi UV sono forti, usa la protezione solare quando esci', - 'temperatureDifferenceTip': - 'Oggi c\'è una grande differenza di temperatura tra il giorno e la notte, adatta i vestiti', - 'comfortableWeatherTip': - 'Oggi il tempo è piacevole, un ottimo momento per le attività all\'aperto', + 'hotWeatherTip': 'Oggi fa caldo, fai attenzione al colpo di calore e bevi molta acqua', + 'coldWeatherTip': 'Oggi la temperatura è bassa, vestiti pesante quando esci per non prendere il raffreddore', + 'rainyWeatherTip': 'Oggi piove, porta un ombrello quando esci e fai attenzione', + 'snowyWeatherTip': 'Oggi nevica, la strada è scivolosa, fai attenzione e vestiti pesante', + 'foggyWeatherTip': 'Oggi c\'è nebbia, la visibilità è scarsa, indossa una mascherina quando esci', + 'windyWeatherTip': 'Oggi c\'è molto vento, fai attenzione quando esci e fissa bene le tue cose', + 'sunnyWeatherTip': 'Oggi c\'è il sole e i raggi UV sono forti, usa la protezione solare quando esci', + 'temperatureDifferenceTip': 'Oggi c\'è una grande differenza di temperatura tra il giorno e la notte, adatta i vestiti', + 'comfortableWeatherTip': 'Oggi il tempo è piacevole, un ottimo momento per le attività all\'aperto', "monday": "Lun", "tuesday": "Mar", "wednesday": "Mer", @@ -404,6 +795,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", @@ -437,30 +839,26 @@ const Map itIT = { "logout": "Esci", "logoutTips": "Sei sicuro di voler uscire dall'account corrente?", 'deleteAccount': 'Elimina account', - 'deleteAccountTips': - 'Sei sicuro di voler eliminare permanentemente il tuo account? Questa azione non può essere annullata.', + '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': - 'Connessione di rete fallita, controlla le impostazioni di rete e riprova', - 'serverTemporarilyUnavailable': - 'Il server è temporaneamente non disponibile, riprova più tardi', - 'loginExpiredPleaseRelogin': - 'La tua sessione è scaduta, effettua nuovamente l\'accesso', - 'noPermissionForThisOperation': - 'Non hai il permesso di eseguire questa operazione', + 'networkConnectionFailed': 'Connessione di rete fallita, controlla le impostazioni di rete e riprova', + 'serverTemporarilyUnavailable': 'Il server è temporaneamente non disponibile, riprova più tardi', + 'loginExpiredPleaseRelogin': 'La tua sessione è scaduta, effettua nuovamente l\'accesso', + 'noPermissionForThisOperation': 'Non hai il permesso di eseguire questa operazione', 'requestedResourceNotFound': 'La risorsa richiesta non è stata trovata', - 'imageProcessingFailedPleaseReselect': - 'Elaborazione dell\'immagine fallita, seleziona un\'altra immagine', + 'imageProcessingFailedPleaseReselect': 'Elaborazione dell\'immagine fallita, seleziona un\'altra immagine', 'operationFailedPleaseRetry': 'Operazione fallita, riprova', 'serverReturnedError': 'Il server ha restituito un errore', 'serverError': 'Errore del server', - 'networkConnectionFailedCheckSettings': - 'Connessione di rete fallita, controlla le impostazioni di rete', - 'serverInternalErrorRetryLater': - 'Errore interno del server, riprova più tardi', + 'networkConnectionFailedCheckSettings': 'Connessione di rete fallita, controlla le impostazioni di rete', + 'serverInternalErrorRetryLater': '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,73 +871,108 @@ 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', - 'signOutProcessError': - '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', - 'allUserDataClearSuccess': - 'Tutti i dati utente sono stati cancellati con successo', - 'accountServiceInitialized': 'Servizio account inizializzato', + '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', // 登出过程发生错误 + 'deleteAccountProcessError': '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', // AccountService 已初始化 // 权限管理页面 - 'getPermissionStatusFailed': - 'Ottenimento dello stato delle autorizzazioni fallito', + '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', - 'calendarWritePermissionDesc': - 'Utilizzato per creare eventi e promemoria nel calendario', - 'calendarFullAccessPermissionDesc': - 'Utilizzato per leggere e gestire eventi e promemoria del calendario', - 'locationPermissionDesc': - 'Utilizzato per ottenere informazioni sulla posizione corrente', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Utilizzato per creare eventi e promemoria nel calendario', + 'calendarFullAccessPermissionDesc': 'Utilizzato per leggere e gestire eventi e promemoria del calendario', + 'locationPermissionDesc': 'Utilizzato per ottenere informazioni sulla posizione corrente', 'appFunctionNeeds': 'La funzione dell\'app necessita di', 'authorized': 'Autorizzato', 'unauthorized': 'Non autorizzato', - 'needOpenInSystemSettings': - 'Deve essere attivato nelle impostazioni di sistema', + 'needOpenInSystemSettings': 'Deve essere attivato nelle impostazioni di sistema', 'partialAuthorization': 'Autorizzazione parziale', 'unknownStatus': 'Stato sconosciuto', 'permissionGranted': 'Autorizzazione concessa', 'permissionRequestError': 'Errore durante la richiesta di autorizzazione', - 'phonePermissionDetailDesc': - 'La funzione di chiamata richiede l\'autorizzazione del telefono', - 'smsPermissionDetailDesc': - 'La funzione di invio SMS richiede l\'autorizzazione SMS', - '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', - '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', + 'phonePermissionDetailDesc': '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', - 'cannotOpenAppStore': - 'Impossibile aprire l\'app store, vai manualmente all\'app store per aggiornare', - 'updateErrorRetry': - 'Si è verificato un errore durante l\'aggiornamento, riprova più tardi', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Si è verificato un errore durante l\'aggiornamento, riprova più tardi', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -648,8 +1081,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,18 +1106,76 @@ 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", + + // 通用对话按钮与选项(用于统一语言选择弹窗等) + // 以下翻译键的中文文本内容如注释所示 + "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": "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.", + "clearHistoryConfirm": "Sei sicuro di voler cancellare tutta la cronologia delle traduzioni? Questa azione non può essere annullata.", "unknownLanguage": "Lingua sconosciuta", "deleteSessionRecord": "Elimina registrazione sessione", - "deleteSessionConfirm": - "Sei sicuro di voler eliminare tutte le registrazioni di traduzione per questa sessione? Questa azione non può essere annullata.", + "deleteSessionConfirm": "Sei sicuro di voler eliminare tutte le registrazioni di traduzione per questa sessione? Questa azione non può essere annullata.", + + // 图片翻译模块(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", - // 翻译录音文件列表页 (translation_list_view.dart) + // 翻译录音文件列表页 "translateAudioFiles": "Traduci file audio", "noAudioFiles": "Nessun file audio", "calculating": "Calcolo...", @@ -684,8 +1190,7 @@ const Map itIT = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Registrazione originale", "recordSummary": "Riepilogo registrazione", - "clickToGenerateSummary": - "Clicca il pulsante qui sotto per generare un riepilogo della sessione", + "clickToGenerateSummary": "Clicca il pulsante qui sotto per generare un riepilogo della sessione", "summaryContent": "Contenuto del riepilogo", "copied": "Copiato", "summaryCopiledToClipboard": "Riepilogo copiato negli appunti", @@ -693,11 +1198,9 @@ const Map itIT = { "summaryGenerated": "Riepilogo generato", "generating": "Generazione...", "regenerate": "Rigenera", - "summaryTimeoutMessage": - "La richiesta di generazione del riepilogo è scaduta, potrebbe essere a causa di problemi di rete o di un server occupato.", + "summaryTimeoutMessage": "La richiesta di generazione del riepilogo è scaduta, potrebbe essere a causa di problemi di rete o di un server occupato.", "deleteTranslationRecord": "Elimina registrazione traduzione", - "deleteTranslationConfirm": - "Sei sicuro di voler eliminare questa registrazione di traduzione? Questa azione non può essere annullata.", + "deleteTranslationConfirm": "Sei sicuro di voler eliminare questa registrazione di traduzione? Questa azione non può essere annullata.", "originalText": "Testo originale", "translatedText": "Testo tradotto", "sessionSummary": "Riepilogo sessione", @@ -715,7 +1218,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...", @@ -724,40 +1227,35 @@ const Map itIT = { // 配对状态文本 "readyToPair": "Pronto per l'associazione", - "preparingPairingEnvironment": - "Preparazione dell'ambiente di associazione...", - "connectDeepSoundViaSystemBluetooth": - "Connettiti prima al dispositivo Voitrans tramite il Bluetooth di sistema", + "preparingPairingEnvironment": "Preparazione dell'ambiente di associazione...", + "connectDeepSoundViaSystemBluetooth": "Connettiti prima al dispositivo Voitrans tramite il Bluetooth di sistema", "deviceBindingConfirm": "Conferma associazione dispositivo...", - "establishingDeviceAssociation": - "Creazione dell'associazione del dispositivo...", + "establishingDeviceAssociation": "Creazione dell'associazione del dispositivo...", "waitingCompletePairing": "Attendi, completamento dell'associazione...", - "pairingSuccessRedirecting": - "Associazione riuscita! Reindirizzamento alla pagina principale...", + "pairingSuccessRedirecting": "Associazione riuscita! Reindirizzamento alla pagina principale...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Assicurati di essere connesso a un dispositivo Voitrans", - "deviceAlreadyBoundToOtherAccount": - "Questo dispositivo è già associato a un altro account", + "ensureConnectedDeepSoundDevice": "Assicurati di essere connesso a un dispositivo Voitrans", + "deviceAlreadyBoundToOtherAccount": "Questo dispositivo è già associato a un altro account", "deviceAssociationFailed": "Associazione del dispositivo fallita, riprova", - "scanTimeoutEnsureDeviceNearby": - "Timeout della scansione, assicurati che il dispositivo sia nelle vicinanze", + "scanTimeoutEnsureDeviceNearby": "Timeout della scansione, assicurati che il dispositivo sia nelle vicinanze", "networkError": "Errore di rete", - "authorizationFailedCheckCode": - "Autorizzazione fallita, controlla che il codice di autorizzazione sia corretto", + "authorizationFailedCheckCode": "Autorizzazione fallita, controlla che il codice di autorizzazione sia corretto", "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', + '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...", + 'needManualBindingAuthCode': "È necessario un codice di autorizzazione per l'associazione manuale...", 'pairingSuccessful': 'Associazione riuscita!', 'enableBluetooth': 'Abilita Bluetooth', 'grantPermissions': 'Concedi autorizzazioni', @@ -769,31 +1267,35 @@ const Map itIT = { 'verificationFailedRetry': 'Verifica fallita, riprova', 'invalidDeviceAddress': 'Indirizzo del dispositivo non valido', 'bleDeviceAssociationFailed': 'Associazione del dispositivo BLE fallita', - 'deviceAssociationFailedRetry': - 'Associazione del dispositivo fallita, riprova', + 'deviceAssociationFailedRetry': 'Associazione del dispositivo fallita, riprova', 'bleConnectionTimeoutRetry': 'Timeout della connessione BLE, riprova', 'blePairingStartupFailed': "Avvio dell'associazione BLE fallito", 'bleConnectionFailed': 'Connessione BLE fallita', - 'deviceAuthorizationFailedCheckCode': - 'Autorizzazione del dispositivo fallita, controlla il codice di autorizzazione', + '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', - 'feedbackDescription': - 'Descrivi il problema riscontrato o il tuo suggerimento', + 'feedbackDescription': 'Descrivi il problema riscontrato o il tuo suggerimento', 'feedbackHint': 'Inserisci il tuo feedback...', 'feedbackRequired': 'Inserisci il contenuto del feedback', 'contactInfo': 'Informazioni di contatto', 'contactHint': 'E-mail/Telefono, per poterti contattare', 'submit': 'Invia', - 'feedbackSubmitSuccess': - 'Feedback inviato con successo, grazie per il tuo feedback!', + 'feedbackSubmitSuccess': 'Feedback inviato con successo, grazie per il tuo feedback!', 'feedbackSubmitFailed': 'Invio del feedback fallito, riprova più tardi', // OTA升级模块 - "upgradeExitConfirm": - "Aggiornamento in corso, l'uscita interromperà il processo, sei sicuro di voler uscire?", + "upgradeExitConfirm": "Aggiornamento in corso, l'uscita interromperà il processo, sei sicuro di voler uscire?", "deviceModel": "Modello del dispositivo", "unknownDevice": "Dispositivo sconosciuto", "currentFirmwareVersion": "Versione firmware attuale", @@ -805,20 +1307,22 @@ const Map itIT = { "connectionFailed": "Connessione fallita", "retryConnection": "Riprova connessione", "ota_updateNow": "Aggiorna ora", - "keepConnectedDontClose": - "Mantieni il dispositivo connesso, non chiudere l'app", + "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", "charging": "In carica", "updateContent": "Contenuto dell'aggiornamento", - "removeEarbudsEnsureBattery": - "Rimuovi entrambi gli auricolari e assicurati che la batteria di entrambi sia superiore al 20%", + "removeEarbudsEnsureBattery": "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 +1364,21 @@ 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.', + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", - // 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', - - '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..24b51888b 100644 --- a/lib/core/translations/language/ja_jp.dart +++ b/lib/core/translations/language/ja_jp.dart @@ -100,8 +100,8 @@ const Map jaJP = { // 隐私政策弹窗 "loginDeclaration": "Voitrans 声明", // Voitrans 声明 "welcomeToThisApp": "Voitransへようこそ、十分にお読みください", // 欢迎使用Voitrans,请充分阅读 - // "privacyPolicy": "プライバシーポリシー", // 《隐私政策》 - 已存在,使用现有键 - // "userAgreement": "利用規約", // 《用户协议》 - 已存在,使用现有键 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": "。「同意して進む」をクリックすると、上記の規約を十分に読み、同意したことを示します。「同意しない」をクリックするとアプリケーションが終了します。", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 "disagree": "同意しない", // 不同意 @@ -179,6 +179,194 @@ 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 +379,227 @@ 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 +633,10 @@ const Map jaJP = { 'selecttimbre': '音色を選択', 'pleaseRead': 'お読みください', 'completeRecording': '録音を完了', - "firmwareUpgrade": "ファームウェアアップグレード", // 固件升级 - "bleHeadsetFirmwareUpgrade": "BLEイヤホンファームウェアアップグレード", // BLE耳机固件版本升级 - "deviceManagement": "デバイス管理", // 设备管理 - "manageConnectedDevices": "接続されたBluetoothデバイスを管理", // 管理已绑定的蓝牙设备 + "firmwareUpgrade": "ファームウェアアップグレード", + "bleHeadsetFirmwareUpgrade": "BLEイヤホンファームウェアアップグレード", + "deviceManagement": "デバイス管理", + "manageConnectedDevices": "接続されたBluetoothデバイスを管理", //设置setting_controller // 版本更新相关 @@ -245,22 +645,30 @@ 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 +697,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 +739,7 @@ const Map jaJP = { 'submitSuccess': '送信に成功', 'submitFailed': '送信に失敗', 'reportSubmitted': '報告を送信しました。できるだけ早く処理いたします', - //'networkError': 'ネットワークエラー、後でもう一度お試しください', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': '有害/危険', 'pornographicVulgar': 'ポルノ/下品', 'misleadingAttack': '誤解を招く/攻撃', @@ -326,7 +748,7 @@ const Map jaJP = { 'copyrightViolation': '私の著作権、人格権などの侵害', 'other': 'その他', 'reportDescriptionHint': '報告の理由を知りたいと思います。遭遇した問題を説明してください。', - //'submit': '送信', + //'submit': '提交', //Message_bubble 'generatedByAi': 'AIによって生成', @@ -349,7 +771,7 @@ const Map jaJP = { "driving": "運転", "walking": "徒歩", "bicycling": "自転車", - "transit": "公共交通機関", + "tsransit": "Transit", //天气卡片 weather_card 'weatherQuery': '天気照会:', @@ -372,6 +794,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 +839,8 @@ const Map jaJP = { "logoutTips": "現在のアカウントからログアウトしてもよろしいですか?", 'deleteAccount': 'アカウント削除', 'deleteAccountTips': 'アカウントを永続的に削除してもよろしいですか?この操作は元に戻せません。', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': 'ネットワーク接続に失敗しました。ネットワーク設定を確認して再試行してください', @@ -421,7 +856,7 @@ const Map jaJP = { 'serverInternalErrorRetryLater': 'サーバー内部エラー、後でもう一度お試しください', // Profile 用户交互 -//'error': 'エラー', +//'error': '错误', //'success': '成功', 'imageCompressionFailed': '画像圧縮に失敗', 'avatarUpdateFailed': 'アバター更新に失敗', @@ -448,15 +883,25 @@ 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 +915,55 @@ 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 +1080,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 +1105,76 @@ 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": "計算中...", @@ -635,8 +1197,7 @@ const Map jaJP = { "summaryGenerated": "要約が生成されました", "generating": "生成中...", "regenerate": "再生成", - "summaryTimeoutMessage": - "要約生成リクエストがタイムアウトしました。ネットワークの問題またはサーバーの過負荷が原因の可能性があります。", + "summaryTimeoutMessage": "要約生成リクエストがタイムアウトしました。ネットワークの問題またはサーバーの過負荷が原因の可能性があります。", "deleteTranslationRecord": "翻訳記録を削除", "deleteTranslationConfirm": "この翻訳記録を削除してもよろしいですか?この操作は元に戻せません。", "originalText": "元のテキスト", @@ -656,7 +1217,7 @@ const Map jaJP = { "autoInputCode": "コードを自動入力", "skipBinding": "バインドをスキップ", "rescan": "再スキャン", - "skip": "スキップ", + "verifyingDevice": "デバイスを確認中...", "confirmBinding": "バインドを確認", "associatingDevice": "デバイスを関連付け中...", @@ -666,8 +1227,7 @@ const Map jaJP = { // 配对状态文本 "readyToPair": "ペアリング準備完了", "preparingPairingEnvironment": "ペアリング環境を準備中...", - "connectDeepSoundViaSystemBluetooth": - "まずシステムBluetoothでDeepSoundデバイスを接続してください", + "connectDeepSoundViaSystemBluetooth": "まずシステムBluetoothでDeepSoundデバイスを接続してください", "deviceBindingConfirm": "デバイスバインド確認中...", "establishingDeviceAssociation": "デバイス関連付けを確立中...", "waitingCompletePairing": "お待ちください、ペアリングを完了中...", @@ -682,17 +1242,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 +1272,15 @@ 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 +1306,10 @@ 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 +1363,21 @@ 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..d22bb1acf 100644 --- a/lib/core/translations/language/ko_kr.dart +++ b/lib/core/translations/language/ko_kr.dart @@ -98,12 +98,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 +179,194 @@ 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 +381,225 @@ 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 +611,8 @@ const Map koKR = { "lastBackup": "마지막 백업:", "privacySettings": "개인정보 설정", "privacySettingsInfo": "데이터 수집 및 권한 관리", - "permissionManagement": "권한 관리", - "permissionManagementInfo": "앱 권한 설정 관리", + "permissionManagement": "권한 관리", // 权限管理 + "permissionManagementInfo": "앱 권한 설정 관리", // 管理应用权限设置 "aboutApplication": "앱 정보", "versions": "버전", "checkUpdates": "업데이트 확인", @@ -243,10 +645,10 @@ const Map koKR = { 'networkErrorRetry': '네트워크 오류, 잠시 후 다시 시도하세요', // 设备管理相关 - 'clearPairedDevices': '페어링된 기기 지우기', - 'clearPairedDevicesConfirm': '모든 페어링된 기기를 지우시겠습니까?', - 'clearPairedDevicesSuccess': '페어링된 기기 지우기 성공', - 'clearPairedDevicesFailed': '페어링된 기기 지우기 실패', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "실시간 음성 대화", @@ -254,11 +656,19 @@ 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 +697,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 +729,8 @@ const Map koKR = { 'startPhoneCallMode': '전화 걸기 모드 시작, 음성 입력 시작', // Agent 全屏编辑器 - 'fullScreenEditorHint': '여기에 메시지를 입력하세요...', - 'characterCount': '{count}자', + 'fullScreenEditorHint': '여기에 메시지를 입력하세요...', // 全屏编辑器输入提示 + 'characterCount': '{count}자', // 字符计数显示 // 消息长按操作 'copy': '복사', @@ -315,6 +739,7 @@ const Map koKR = { 'submitSuccess': '제출 성공', 'submitFailed': '제출 실패', 'reportSubmitted': '신고가 제출되었습니다. 최대한 빨리 처리하겠습니다.', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': '유해/안전하지 않음', 'pornographicVulgar': '음란/저속함', 'misleadingAttack': '오해의 소지가 있는 공격', @@ -323,6 +748,7 @@ const Map koKR = { 'copyrightViolation': '내 저작권, 명예 등을 침해', 'other': '기타', 'reportDescriptionHint': '신고 사유를 알고 싶습니다. 겪으신 문제를 설명해주세요.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'AI가 생성함', @@ -333,15 +759,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 +794,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 +839,8 @@ const Map koKR = { "logoutTips": "현재 계정에서 로그아웃하시겠습니까?", 'deleteAccount': '계정 삭제', 'deleteAccountTips': '계정을 영구적으로 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 'networkConnectionFailed': '네트워크 연결 실패, 네트워크 설정을 확인하고 다시 시도하세요', @@ -417,6 +856,8 @@ const Map koKR = { 'serverInternalErrorRetryLater': '서버 내부 오류, 잠시 후 다시 시도하세요', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': '이미지 압축 실패', 'avatarUpdateFailed': '아바타 업데이트 실패', 'usernameCannotBeEmpty': '사용자 이름은 비워둘 수 없습니다', @@ -429,28 +870,38 @@ 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 +915,63 @@ 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 +1080,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 +1105,76 @@ 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", - // 翻译历史页 (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": "모든 번역 기록을 지우시겠습니까? 이 작업은 되돌릴 수 없습니다.", "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 +1217,7 @@ const Map koKR = { "autoInputCode": "코드 자동 입력", "skipBinding": "연결 건너뛰기", "rescan": "다시 스캔", - "skip": "건너뛰기", + "verifyingDevice": "기기 확인 중...", "confirmBinding": "연결 확인", "associatingDevice": "기기 연결 중...", @@ -675,11 +1243,16 @@ const Map koKR = { "pairingFailedRetry": "페어링 실패, 다시 시도하세요", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': '블루투스를 활성화해주세요', 'deviceDisconnected': '기기 연결 해제됨', 'readyToStartPairing': '페어링 시작 준비 완료', 'checkingEnvironment': '환경 확인 중...', 'ensureHeadsetOnAndPairingMode': '헤드셋이 켜져 있고 페어링 모드인지 확인하세요', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': '보안 연결 설정 중...', 'needManualBindingAuthCode': '수동 연결 인증 코드가 필요합니다...', 'pairingSuccessful': '페어링 성공!', @@ -699,6 +1272,15 @@ 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 +1306,10 @@ 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 +1317,11 @@ const Map koKR = { "removeEarbudsEnsureBattery": "양쪽 이어버드를 꺼내고 배터리가 모두 20% 이상인지 확인하세요", // 音乐列表页面 - "noMusic": "음악 없음", - "noPlayingMusic": "재생 중인 음악 없음", - "unknownSong": "알 수 없는 노래", - "unknownArtist": "알 수 없는 아티스트", - "playAll": "모두 재생", + "noMusic": "음악 없음", // 暂无音乐 + "noPlayingMusic": "재생 중인 음악 없음", // 暂无播放音乐 + "unknownSong": "알 수 없는 노래", // 未知歌曲 + "unknownArtist": "알 수 없는 아티스트", // 未知歌手 + "playAll": "모두 재생", // 播放全部 // 语言名称 "中文(简体)": "중국어(간체)", @@ -777,93 +1363,21 @@ 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.', - - // 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', + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", - '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..6406a54ed 100644 --- a/lib/core/translations/language/lt_lt.dart +++ b/lib/core/translations/language/lt_lt.dart @@ -72,8 +72,7 @@ const Map ltLT = { // 登录页 "welcome": "Sveiki atvykę", - "loginTips": - "Prisijunkite arba užsiregistruokite naudodami savo telefono numerį arba el. paštą", + "loginTips": "Prisijunkite arba užsiregistruokite naudodami savo telefono numerį arba el. paštą", "accountNumber": "Telefono numeris arba el. paštas", "verificationCode": "Patvirtinimo kodas", "getCode": "Gauti kodą", @@ -92,8 +91,7 @@ const Map ltLT = { "tip": "Patarimas", "pleaseEnterCompleteCode": "Įveskite visą patvirtinimo kodą", "loginFailed": "Prisijungimas nepavyko, bandykite dar kartą", - 'pleaseAcceptPrivacyPolicy': - 'Pirmiausia perskaitykite ir sutikite su Privatumo politika ir Vartotojo sutartimi', + 'pleaseAcceptPrivacyPolicy': 'Pirmiausia perskaitykite ir sutikite su Privatumo politika ir Vartotojo sutartimi', "enterVerificationCode": "Įveskite patvirtinimo kodą", "verificationCodeSentTo": "Patvirtinimo kodas išsiųstas į", "resendVerificationCode": "Išsiųsti patvirtinimo kodą iš naujo", @@ -101,12 +99,14 @@ 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", @@ -116,29 +116,24 @@ const Map ltLT = { "signal": "Signalas", "deviceId": "Įrenginio ID", "firmwareVersion": "Programinės įrangos versija", - "disconnectedDevice": - "Nėra prijungto įrenginio, spustelėkite mygtuką žemiau, kad prisijungtumėte", + "disconnectedDevice": "Nėra prijungto įrenginio, spustelėkite mygtuką žemiau, kad prisijungtumėte", "connectDevice": "Prijungti įrenginį", "topAiExperiences": "Populiariausios AI patirtys", "aiAssistant": "Visapusiškas AI asistentas", - "aiAssistantInfo": - "Išskirtinis 24/7 konsultantas, atsako į klausimus, teikia pasiūlymus", + "aiAssistantInfo": "Išskirtinis 24/7 konsultantas, atsako į klausimus, teikia pasiūlymus", "interpretation": "Sinchroninis vertimas", - "simultaneousInterpretationInfo": - "Vertimas realiuoju laiku į daugiau nei 80 kalbų, nerūpestingos kelionės į užsienį", + "simultaneousInterpretationInfo": "Vertimas realiuoju laiku į daugiau nei 80 kalbų, nerūpestingos kelionės į užsienį", "aiCompanion": "Šeimos draugas", "aiCompanionInfo": "Supranta jus, šilta draugija", "homeSlogan": "Jungiantis pasaulį, pranokstantis garsą", - "turnEarphones": - "Atidarykite ausinių įkrovimo dėklą ir įsidėkite ausines į ausis", + "turnEarphones": "Atidarykite ausinių įkrovimo dėklą ir įsidėkite ausines į ausis", "currentlyConnected": "Šiuo metu prijungta:", "unsystemSetup": "Eiti į sistemos nustatymus", "talkLater": "Vėliau", "initializing": "Inicijuojama...", "bluetoothInitializationFailure": "Bluetooth paslaugos inicijavimas nepavyko", "checkingPermissions": "Tikrinami leidimai...", - "lackPermissions": - "Trūksta Bluetooth leidimų ir yra reikalinga lokacijos prieiga", + "lackPermissions": "Trūksta Bluetooth leidimų ir yra reikalinga lokacijos prieiga", "searchingDevice": "Ieškoma įrenginių...", "findConnectedDevice": "Rastas prijungtas įrenginys", "notFound": "Nerasta prijungto Bluetooth įrenginio", @@ -175,18 +170,204 @@ const Map ltLT = { "faceToFaceTranslation": "Vertimas akis į akį", 'audioVideoTranslation': 'Garso ir vaizdo vertimas', 'callTranslation': 'Skambučių vertimas', - "simultaneousTranslationInfo": - "Vertimas realiuoju laiku į daugiau nei 80 kalbų", + "simultaneousTranslationInfo": "Vertimas realiuoju laiku į daugiau nei 80 kalbų", "aiGirlfriend": "AI mergina", "aiGirlfriendInfo": "Intelektualus draugas, bendraukite bet kada", "healthConsultant": "Daugiafunkcis AI pokalbis", "healthConsultantInfo": "Siūlo daugiau AI pokalbių funkcijų", "conferenceAssistant": "Verslo susitikimų asistentas", - "conferenceAssistantInfo": - "Susitikimų protokolo įrašymas realiuoju laiku, daugiakalbis vertimas", + "conferenceAssistantInfo": "Susitikimų protokolo įrašymas realiuoju laiku, daugiakalbis vertimas", "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 +382,225 @@ 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 +612,8 @@ 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", @@ -229,11 +622,9 @@ const Map ltLT = { "voiceServiceInfo": "Pasirinkti kalbos atpažinimo ir sintezės paslaugą", "selectVoiceService": "Pasirinkti balso paslaugą", "azureVoiceService": "Azure balso paslauga", - "azureVoiceServiceInfo": - "Microsoft debesies balso paslauga, palaiko aukštos kokybės balso sintezę ir atpažinimą", + "azureVoiceServiceInfo": "Microsoft debesies balso paslauga, palaiko aukštos kokybės balso sintezę ir atpažinimą", "flutterVoiceService": "Flutter vietinė balso paslauga", - "flutterVoiceServiceInfo": - "Įrenginio vietinė balso paslauga, galima naudoti be interneto ryšio", + "flutterVoiceServiceInfo": "Įrenginio vietinė balso paslauga, galima naudoti be interneto ryšio", 'timbreService': 'Tembro paslauga', 'timbreServiceInfo': 'Pasirinkite tembro balso sintezės paslaugą', 'defaultTimbre': 'Numatytasis tembras', @@ -244,8 +635,7 @@ const Map ltLT = { 'pleaseRead': 'Perskaitykite garsiai', 'completeRecording': 'Užbaigti įrašymą', "firmwareUpgrade": "Programinės įrangos atnaujinimas", - "bleHeadsetFirmwareUpgrade": - "BLE ausinių programinės įrangos versijos atnaujinimas", + "bleHeadsetFirmwareUpgrade": "BLE ausinių programinės įrangos versijos atnaujinimas", "deviceManagement": "Įrenginių valdymas", "manageConnectedDevices": "Valdyti prijungtus Bluetooth įrenginius", @@ -256,24 +646,30 @@ 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", - "realtimeVoiceChatInfo": - "Išbandykite išmaniosios balso sąveikos funkciją (funkcijos peržiūra)", + "realtimeVoiceChatInfo": "Išbandykite išmaniosios balso sąveikos funkciją (funkcijos peržiūra)", "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 @@ -300,9 +696,22 @@ const Map ltLT = { "listeningToYou": "Klausausi jūsų...", "processing": "Apdorojama...", "loadMoreMessages": "Įkelti daugiau žinučių...", - "loadFailedClickRetry": - "Įkėlimas nepavyko, spustelėkite, kad bandytumėte dar kartą", + "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' @@ -313,20 +722,16 @@ const Map ltLT = { '• Valdyti ausinių funkcijas\n\n' 'Kuo galiu jums padėti?', 'microphonePermission': 'Mikrofonas', - 'voiceRecognitionPermissionText': - 'Balso atpažinimo funkcijai reikalingas priėjimas prie mikrofono.', - 'voiceTranslationPermissionText': - 'Balso atpažinimo ir vertimo funkcijai reikalingas priėjimas prie mikrofono.', - 'phoneCallPermissionText': - 'Skambinimo funkcijai reikalingas priėjimas prie mikrofono balso skambučiams.', - 'permissionDeniedText': - 'Jūs visam laikui atmetėte mikrofono leidimą, eikite į sistemos nustatymus, kad jį įjungtumėte.', + 'voiceRecognitionPermissionText': 'Balso atpažinimo funkcijai reikalingas priėjimas prie mikrofono.', + 'voiceTranslationPermissionText': 'Balso atpažinimo ir vertimo funkcijai reikalingas priėjimas prie mikrofono.', + 'phoneCallPermissionText': 'Skambinimo funkcijai reikalingas priėjimas prie mikrofono balso skambučiams.', + 'permissionDeniedText': 'Jūs visam laikui atmetėte mikrofono leidimą, eikite į sistemos nustatymus, kad jį įjungtumėte.', 'startVoiceInput': 'Pradėti balso įvestį', '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 +740,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', @@ -342,8 +748,8 @@ const Map ltLT = { 'privacyRelated': 'Susijęs su privatumu', 'copyrightViolation': 'Pažeidžia mano autorių teises, reputaciją ir pan.', 'other': 'Kita', - 'reportDescriptionHint': - 'Norėtume sužinoti, kodėl pranešate, galite aprašyti problemą, su kuria susidūrėte.', + '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 +760,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", @@ -373,24 +779,15 @@ const Map ltLT = { 'highest': 'Aukščiausia', 'lowest': 'Žemiausia', 'futureForecast': 'Ateities prognozė', - 'hotWeatherTip': - 'Šiandien karšta, saugokitės karščio smūgio ir gerkite daug vandens', - 'coldWeatherTip': - 'Šiandien temperatūra žema, šiltai apsirenkite eidami į lauką, kad neperšaltumėte', - 'rainyWeatherTip': - 'Šiandien lietus, pasiimkite skėtį eidami į lauką ir būkite atsargūs', - 'snowyWeatherTip': - 'Šiandien sninga, kelias slidus, būkite atsargūs ir šiltai apsirenkite', - 'foggyWeatherTip': - 'Šiandien rūkas, matomumas prastas, dėvėkite kaukę eidami į lauką', - 'windyWeatherTip': - 'Šiandien vėjuota, būkite atsargūs eidami į lauką ir pritvirtinkite savo daiktus', - 'sunnyWeatherTip': - 'Šiandien saulėta ir stiprūs UV spinduliai, naudokite apsaugos nuo saulės kremą eidami į lauką', - 'temperatureDifferenceTip': - 'Šiandien didelis temperatūros skirtumas tarp dienos ir nakties, pritaikykite drabužius', - 'comfortableWeatherTip': - 'Šiandien oras malonus, puikus laikas lauko veikloms', + 'hotWeatherTip': 'Šiandien karšta, saugokitės karščio smūgio ir gerkite daug vandens', + 'coldWeatherTip': 'Šiandien temperatūra žema, šiltai apsirenkite eidami į lauką, kad neperšaltumėte', + 'rainyWeatherTip': 'Šiandien lietus, pasiimkite skėtį eidami į lauką ir būkite atsargūs', + 'snowyWeatherTip': 'Šiandien sninga, kelias slidus, būkite atsargūs ir šiltai apsirenkite', + 'foggyWeatherTip': 'Šiandien rūkas, matomumas prastas, dėvėkite kaukę eidami į lauką', + 'windyWeatherTip': 'Šiandien vėjuota, būkite atsargūs eidami į lauką ir pritvirtinkite savo daiktus', + 'sunnyWeatherTip': 'Šiandien saulėta ir stiprūs UV spinduliai, naudokite apsaugos nuo saulės kremą eidami į lauką', + 'temperatureDifferenceTip': 'Šiandien didelis temperatūros skirtumas tarp dienos ir nakties, pritaikykite drabužius', + 'comfortableWeatherTip': 'Šiandien oras malonus, puikus laikas lauko veikloms', "monday": "Pirm", "tuesday": "Antr", "wednesday": "Treč", @@ -398,6 +795,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", @@ -431,29 +839,26 @@ const Map ltLT = { "logout": "Atsijungti", "logoutTips": "Ar tikrai norite atsijungti nuo dabartinės paskyros?", 'deleteAccount': 'Ištrinti paskyrą', - 'deleteAccountTips': - 'Ar tikrai norite visam laikui ištrinti savo paskyrą? Šio veiksmo negalima atšaukti.', + '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': - 'Tinklo ryšio klaida, patikrinkite tinklo nustatymus ir bandykite dar kartą', - 'serverTemporarilyUnavailable': - 'Serveris laikinai nepasiekiamas, bandykite dar kartą vėliau', + 'networkConnectionFailed': 'Tinklo ryšio klaida, patikrinkite tinklo nustatymus ir bandykite dar kartą', + 'serverTemporarilyUnavailable': 'Serveris laikinai nepasiekiamas, bandykite dar kartą vėliau', 'loginExpiredPleaseRelogin': 'Jūsų sesija baigėsi, prisijunkite iš naujo', - 'noPermissionForThisOperation': - 'Jūs neturite leidimo atlikti šios operacijos', + 'noPermissionForThisOperation': 'Jūs neturite leidimo atlikti šios operacijos', 'requestedResourceNotFound': 'Prašomas resursas nerastas', - 'imageProcessingFailedPleaseReselect': - 'Vaizdo apdorojimas nepavyko, pasirinkite kitą vaizdą', + 'imageProcessingFailedPleaseReselect': 'Vaizdo apdorojimas nepavyko, pasirinkite kitą vaizdą', 'operationFailedPleaseRetry': 'Operacija nepavyko, bandykite dar kartą', 'serverReturnedError': 'Serveris grąžino klaidą', 'serverError': 'Serverio klaida', - 'networkConnectionFailedCheckSettings': - 'Tinklo ryšio klaida, patikrinkite tinklo nustatymus', - 'serverInternalErrorRetryLater': - 'Vidinė serverio klaida, bandykite dar kartą vėliau', + 'networkConnectionFailedCheckSettings': 'Tinklo ryšio klaida, patikrinkite tinklo nustatymus', + 'serverInternalErrorRetryLater': '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', @@ -463,36 +868,43 @@ const Map ltLT = { 'loggedOut': 'Sėkmingai atsijungta', 'logoutFailedRetry': 'Atsijungimas nepavyko, bandykite dar kartą', 'accountPermanentlyDeleted': 'Paskyra visam laikui ištrinta', - 'deleteAccountFailedRetry': - 'Paskyros ištrynimas nepavyko, bandykite dar kartą', + 'deleteAccountFailedRetry': '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', - 'calendarWritePermissionDesc': - 'Naudojama kuriant kalendoriaus įvykius ir priminimus', - 'calendarFullAccessPermissionDesc': - 'Naudojama skaitant ir valdant kalendoriaus įvykius ir priminimus', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Naudojama kuriant kalendoriaus įvykius ir priminimus', + 'calendarFullAccessPermissionDesc': 'Naudojama skaitant ir valdant kalendoriaus įvykius ir priminimus', 'locationPermissionDesc': 'Naudojama gaunant dabartinės vietovės informaciją', 'appFunctionNeeds': 'Programos funkcijai reikia', 'authorized': 'Leista', @@ -502,31 +914,65 @@ const Map ltLT = { 'unknownStatus': 'Nežinoma būsena', 'permissionGranted': 'Leidimas suteiktas', 'permissionRequestError': 'Klaida prašant leidimo', - 'phonePermissionDetailDesc': - 'Skambinimo funkcijai reikalingas telefono leidimas', + 'phonePermissionDetailDesc': 'Skambinimo funkcijai reikalingas telefono leidimas', 'smsPermissionDetailDesc': 'SMS siuntimo funkcijai reikalingas SMS leidimas', - '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', - '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', + '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', - 'cannotOpenAppStore': - 'Negalima atidaryti programų parduotuvės, eikite į parduotuvę rankiniu būdu, kad atnaujintumėte', - 'updateErrorRetry': - 'Atnaujinimo metu įvyko klaida, bandykite dar kartą vėliau', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Atnaujinimo metu įvyko klaida, bandykite dar kartą vėliau', // 更新错误重试提示 //国家列表 "邮箱": "El. paštas", @@ -635,8 +1081,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,18 +1106,76 @@ 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.", + "clearHistoryConfirm": "Ar tikrai norite išvalyti visą vertimų istoriją? Šio veiksmo negalima atšaukti.", "unknownLanguage": "Nežinoma kalba", "deleteSessionRecord": "Ištrinti sesijos įrašą", - "deleteSessionConfirm": - "Ar tikrai norite ištrinti visus šios sesijos vertimų įrašus? Šio veiksmo negalima atšaukti.", + "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...", @@ -671,8 +1190,7 @@ const Map ltLT = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Originalus įrašas", "recordSummary": "Įrašo santrauka", - "clickToGenerateSummary": - "Spustelėkite mygtuką žemiau, kad sugeneruotumėte sesijos santrauką", + "clickToGenerateSummary": "Spustelėkite mygtuką žemiau, kad sugeneruotumėte sesijos santrauką", "summaryContent": "Santraukos turinys", "copied": "Nukopijuota", "summaryCopiledToClipboard": "Santrauka nukopijuota į iškarpinę", @@ -680,11 +1198,9 @@ const Map ltLT = { "summaryGenerated": "Santrauka sugeneruota", "generating": "Generuojama...", "regenerate": "Generuoti iš naujo", - "summaryTimeoutMessage": - "Santraukos generavimo užklausa baigėsi, galbūt dėl tinklo problemų ar užimto serverio.", + "summaryTimeoutMessage": "Santraukos generavimo užklausa baigėsi, galbūt dėl tinklo problemų ar užimto serverio.", "deleteTranslationRecord": "Ištrinti vertimo įrašą", - "deleteTranslationConfirm": - "Ar tikrai norite ištrinti šį vertimo įrašą? Šio veiksmo negalima atšaukti.", + "deleteTranslationConfirm": "Ar tikrai norite ištrinti šį vertimo įrašą? Šio veiksmo negalima atšaukti.", "originalText": "Originalus tekstas", "translatedText": "Išverstas tekstas", "sessionSummary": "Sesijos santrauka", @@ -702,7 +1218,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...", @@ -712,38 +1228,34 @@ const Map ltLT = { // 配对状态文本 "readyToPair": "Pasiruošta susiejimui", "preparingPairingEnvironment": "Ruošiama susiejimo aplinka...", - "connectDeepSoundViaSystemBluetooth": - "Pirmiausia prisijunkite prie Voitrans įrenginio per sistemos Bluetooth", + "connectDeepSoundViaSystemBluetooth": "Pirmiausia prisijunkite prie Voitrans įrenginio per sistemos Bluetooth", "deviceBindingConfirm": "Įrenginio susiejimo patvirtinimas...", "establishingDeviceAssociation": "Kuriama įrenginio asociacija...", "waitingCompletePairing": "Prašome palaukti, baigiamas susiejimas...", - "pairingSuccessRedirecting": - "Susiejimas sėkmingas! Nukreipiama į pagrindinį puslapį...", + "pairingSuccessRedirecting": "Susiejimas sėkmingas! Nukreipiama į pagrindinį puslapį...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Įsitikinkite, kad esate prisijungę prie Voitrans įrenginio", - "deviceAlreadyBoundToOtherAccount": - "Šis įrenginys jau susietas su kita paskyra", - "deviceAssociationFailed": - "Įrenginio asociacija nepavyko, bandykite dar kartą", - "scanTimeoutEnsureDeviceNearby": - "Skenavimo laikas baigėsi, įsitikinkite, kad įrenginys yra netoliese", + "ensureConnectedDeepSoundDevice": "Įsitikinkite, kad esate prisijungę prie Voitrans įrenginio", + "deviceAlreadyBoundToOtherAccount": "Šis įrenginys jau susietas su kita paskyra", + "deviceAssociationFailed": "Įrenginio asociacija nepavyko, bandykite dar kartą", + "scanTimeoutEnsureDeviceNearby": "Skenavimo laikas baigėsi, įsitikinkite, kad įrenginys yra netoliese", "networkError": "Tinklo klaida", - "authorizationFailedCheckCode": - "Autorizacija nepavyko, patikrinkite, ar autorizacijos kodas yra teisingas", + "authorizationFailedCheckCode": "Autorizacija nepavyko, patikrinkite, ar autorizacijos kodas yra teisingas", "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', + '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...', + 'needManualBindingAuthCode': 'Reikalingas rankinio susiejimo autorizacijos kodas...', 'pairingSuccessful': 'Susiejimas sėkmingas!', 'enableBluetooth': 'Įjungti Bluetooth', 'grantPermissions': 'Suteikti leidimus', @@ -755,32 +1267,35 @@ const Map ltLT = { 'verificationFailedRetry': 'Patvirtinimas nepavyko, bandykite dar kartą', 'invalidDeviceAddress': 'Neteisingas įrenginio adresas', 'bleDeviceAssociationFailed': 'BLE įrenginio asociacija nepavyko', - 'deviceAssociationFailedRetry': - 'Įrenginio asociacija nepavyko, bandykite dar kartą', + 'deviceAssociationFailedRetry': 'Įrenginio asociacija nepavyko, bandykite dar kartą', 'bleConnectionTimeoutRetry': 'BLE ryšio laikas baigėsi, bandykite dar kartą', 'blePairingStartupFailed': 'BLE susiejimo paleidimas nepavyko', 'bleConnectionFailed': 'BLE ryšys nepavyko', - 'deviceAuthorizationFailedCheckCode': - 'Įrenginio autorizacija nepavyko, patikrinkite autorizacijos kodą', + '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ą', - 'feedbackDescription': - 'Aprašykite problemą, su kuria susidūrėte, arba savo pasiūlymą', + 'feedbackDescription': 'Aprašykite problemą, su kuria susidūrėte, arba savo pasiūlymą', 'feedbackHint': 'Įveskite savo atsiliepimą...', 'feedbackRequired': 'Įveskite atsiliepimo turinį', 'contactInfo': 'Kontaktinė informacija', 'contactHint': 'El. paštas/Telefonas, kad galėtume su jumis susisiekti', 'submit': 'Pateikti', - 'feedbackSubmitSuccess': - 'Atsiliepimas sėkmingai pateiktas, dėkojame už jūsų atsiliepimą!', - 'feedbackSubmitFailed': - 'Atsiliepimo pateikimas nepavyko, bandykite dar kartą vėliau', + 'feedbackSubmitSuccess': 'Atsiliepimas sėkmingai pateiktas, dėkojame už jūsų atsiliepimą!', + 'feedbackSubmitFailed': 'Atsiliepimo pateikimas nepavyko, bandykite dar kartą vėliau', // OTA升级模块 - "upgradeExitConfirm": - "Vyksta atnaujinimas, išėjus procesas bus nutrauktas, ar tikrai norite išeiti?", + "upgradeExitConfirm": "Vyksta atnaujinimas, išėjus procesas bus nutrauktas, ar tikrai norite išeiti?", "deviceModel": "Įrenginio modelis", "unknownDevice": "Nežinomas įrenginys", "currentFirmwareVersion": "Dabartinė programinės įrangos versija", @@ -792,20 +1307,22 @@ const Map ltLT = { "connectionFailed": "Ryšys nepavyko", "retryConnection": "Bandyti prisijungti dar kartą", "ota_updateNow": "Atnaujinti dabar", - "keepConnectedDontClose": - "Laikykite įrenginį prijungtą, neuždarykite programos", + "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", "charging": "Kraunama", "updateContent": "Atnaujinimo turinys", - "removeEarbudsEnsureBattery": - "Išimkite abi ausines ir įsitikinkite, kad abiejų baterijos lygis yra didesnis nei 20%", + "removeEarbudsEnsureBattery": "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 +1364,21 @@ 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..e0d6e12c3 100644 --- a/lib/core/translations/language/lv_lv.dart +++ b/lib/core/translations/language/lv_lv.dart @@ -71,8 +71,7 @@ const Map lvLV = { // 登录页 "welcome": "Laipni lūdzam", - "loginTips": - "Piesakieties vai reģistrējieties ar savu tālruņa numuru vai e-pastu", + "loginTips": "Piesakieties vai reģistrējieties ar savu tālruņa numuru vai e-pastu", "accountNumber": "Tālruņa numurs vai e-pasts", "verificationCode": "Verifikācijas kods", "getCode": "Saņemt kodu", @@ -91,8 +90,7 @@ const Map lvLV = { "tip": "Padoms", "pleaseEnterCompleteCode": "Lūdzu, ievadiet pilnu verifikācijas kodu", "loginFailed": "Pieteikšanās neizdevās, lūdzu, mēģiniet vēlreiz", - 'pleaseAcceptPrivacyPolicy': - 'Lūdzu, vispirms izlasiet un piekrītiet Privātuma politikai un Lietotāja līgumam', + 'pleaseAcceptPrivacyPolicy': 'Lūdzu, vispirms izlasiet un piekrītiet Privātuma politikai un Lietotāja līgumam', "enterVerificationCode": "Ievadiet verifikācijas kodu", "verificationCodeSentTo": "Verifikācijas kods nosūtīts uz", "resendVerificationCode": "Nosūtīt verifikācijas kodu vēlreiz", @@ -100,12 +98,14 @@ 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", @@ -115,30 +115,24 @@ const Map lvLV = { "signal": "Signāls", "deviceId": "Ierīces ID", "firmwareVersion": "Programmaparatūras versija", - "disconnectedDevice": - "Neviena ierīce nav savienota, noklikšķiniet uz pogas zemāk, lai savienotu", + "disconnectedDevice": "Neviena ierīce nav savienota, noklikšķiniet uz pogas zemāk, lai savienotu", "connectDevice": "Savienot ierīci", "topAiExperiences": "Populārākās AI pieredzes", "aiAssistant": "Visaptverošs AI palīgs", - "aiAssistantInfo": - "Ekskluzīvs konsultants 24/7, atbild uz jautājumiem, sniedz ieteikumus", + "aiAssistantInfo": "Ekskluzīvs konsultants 24/7, atbild uz jautājumiem, sniedz ieteikumus", "interpretation": "Sinhronā tulkošana", - "simultaneousInterpretationInfo": - "Reāllaika tulkošana vairāk nekā 80 valodās, bezrūpīgi ceļojumi uz ārzemēm", + "simultaneousInterpretationInfo": "Reāllaika tulkošana vairāk nekā 80 valodās, bezrūpīgi ceļojumi uz ārzemēm", "aiCompanion": "Ģimenes pavadonis", "aiCompanionInfo": "Saprot jūs, silta sabiedrība", "homeSlogan": "Pasaules savienošana, pārsniedzot skaņu", - "turnEarphones": - "Lūdzu, atveriet austiņu uzlādes futrāli un ievietojiet austiņas ausīs", + "turnEarphones": "Lūdzu, atveriet austiņu uzlādes futrāli un ievietojiet austiņas ausīs", "currentlyConnected": "Pašlaik savienots:", "unsystemSetup": "Doties uz sistēmas iestatījumiem", "talkLater": "Vēlāk", "initializing": "Inicializē...", - "bluetoothInitializationFailure": - "Bluetooth pakalpojuma inicializācija neizdevās", + "bluetoothInitializationFailure": "Bluetooth pakalpojuma inicializācija neizdevās", "checkingPermissions": "Pārbauda atļaujas...", - "lackPermissions": - "Trūkst Bluetooth atļauju un ir nepieciešams piekļūt lokācijai", + "lackPermissions": "Trūkst Bluetooth atļauju un ir nepieciešams piekļūt lokācijai", "searchingDevice": "Meklē ierīces...", "findConnectedDevice": "Atrasta savienota ierīce", "notFound": "Neviena savienota Bluetooth ierīce nav atrasta", @@ -181,11 +175,198 @@ const Map lvLV = { "healthConsultant": "Daudzfunkcionāls AI čats", "healthConsultantInfo": "Piedāvā vairāk AI čata funkciju", "conferenceAssistant": "Biznesa sanāksmju palīgs", - "conferenceAssistantInfo": - "Reāllaika protokolu ierakstīšana, daudzvalodu tulkošana", + "conferenceAssistantInfo": "Reāllaika protokolu ierakstīšana, daudzvalodu tulkošana", "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 +381,225 @@ 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 +611,8 @@ 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", @@ -228,11 +621,9 @@ const Map lvLV = { "voiceServiceInfo": "Izvēlieties balss atpazīšanas un sintēzes pakalpojumu", "selectVoiceService": "Izvēlēties balss pakalpojumu", "azureVoiceService": "Azure balss pakalpojums", - "azureVoiceServiceInfo": - "Microsoft mākoņa balss pakalpojums, atbalsta augstas kvalitātes balss sintēzi un atpazīšanu", + "azureVoiceServiceInfo": "Microsoft mākoņa balss pakalpojums, atbalsta augstas kvalitātes balss sintēzi un atpazīšanu", "flutterVoiceService": "Flutter lokālais balss pakalpojums", - "flutterVoiceServiceInfo": - "Ierīces lokālais balss pakalpojums, var izmantot bez interneta savienojuma", + "flutterVoiceServiceInfo": "Ierīces lokālais balss pakalpojums, var izmantot bez interneta savienojuma", 'timbreService': 'Tembru pakalpojums', 'timbreServiceInfo': 'Izvēlieties tembru balss sintēzes pakalpojumu', 'defaultTimbre': 'Noklusējuma tembrs', @@ -243,8 +634,7 @@ const Map lvLV = { 'pleaseRead': 'Lūdzu, lasiet skaļi', 'completeRecording': 'Pabeigt ierakstīšanu', "firmwareUpgrade": "Programmaparatūras jaunināšana", - "bleHeadsetFirmwareUpgrade": - "BLE austiņu programmaparatūras versijas jaunināšana", + "bleHeadsetFirmwareUpgrade": "BLE austiņu programmaparatūras versijas jaunināšana", "deviceManagement": "Ierīču pārvaldība", "manageConnectedDevices": "Pārvaldīt savienotās Bluetooth ierīces", @@ -255,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Izbaudiet inteliģentās balss mijiedarbības funkciju (funkcijas priekšskatījums)", + "realtimeVoiceChatInfo": "Izbaudiet inteliģentās balss mijiedarbības funkciju (funkcijas priekšskatījums)", "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 @@ -299,9 +695,22 @@ const Map lvLV = { "listeningToYou": "Klausos jūs...", "processing": "Apstrādā...", "loadMoreMessages": "Ielādēt vairāk ziņu...", - "loadFailedClickRetry": - "Ielāde neizdevās, noklikšķiniet, lai mēģinātu vēlreiz", + "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' @@ -312,20 +721,16 @@ const Map lvLV = { '• Kontrolēt austiņu funkcijas\n\n' 'Kā es varu jums palīdzēt?', 'microphonePermission': 'Mikrofons', - 'voiceRecognitionPermissionText': - 'Balss atpazīšanas funkcijai nepieciešama piekļuve mikrofonam.', - 'voiceTranslationPermissionText': - 'Balss atpazīšanas un tulkošanas funkcijai nepieciešama piekļuve mikrofonam.', - 'phoneCallPermissionText': - 'Zvanīšanas funkcijai nepieciešama piekļuve mikrofonam balss zvaniem.', - 'permissionDeniedText': - 'Jūs esat neatgriezeniski atteicis mikrofona atļauju, lūdzu, dodieties uz sistēmas iestatījumiem, lai to iespējotu.', + 'voiceRecognitionPermissionText': 'Balss atpazīšanas funkcijai nepieciešama piekļuve mikrofonam.', + 'voiceTranslationPermissionText': 'Balss atpazīšanas un tulkošanas funkcijai nepieciešama piekļuve mikrofonam.', + 'phoneCallPermissionText': 'Zvanīšanas funkcijai nepieciešama piekļuve mikrofonam balss zvaniem.', + 'permissionDeniedText': 'Jūs esat neatgriezeniski atteicis mikrofona atļauju, lūdzu, dodieties uz sistēmas iestatījumiem, lai to iespējotu.', 'startVoiceInput': 'Sākt balss ievadi', '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', @@ -333,8 +738,8 @@ const Map lvLV = { 'report': 'Ziņot', 'submitSuccess': 'Veiksmīgi iesniegts', 'submitFailed': 'Iesniegšana neizdevās', - 'reportSubmitted': - 'Ziņojums iesniegts, mēs to apstrādāsim pēc iespējas ātrāk', + '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', @@ -342,8 +747,8 @@ const Map lvLV = { 'privacyRelated': 'Saistīts ar privātumu', 'copyrightViolation': 'Pārkāpj manas autortiesības, reputāciju utt.', '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.', + '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 +759,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", @@ -373,24 +778,15 @@ const Map lvLV = { 'highest': 'Augstākā', 'lowest': 'Zemākā', 'futureForecast': 'Nākotnes prognoze', - 'hotWeatherTip': - 'Šodien ir karsts, lūdzu, uzmanieties no karstuma dūriena un dzeriet daudz ūdens', - 'coldWeatherTip': - 'Šodien temperatūra ir zema, lūdzu, silti ģērbieties, ejot ārā, lai nesaaukstētos', - 'rainyWeatherTip': - 'Šodien līst, lūdzu, ņemiet līdzi lietussargu, ejot ārā, un esiet uzmanīgi', - 'snowyWeatherTip': - 'Šodien snieg, ceļš ir slidens, lūdzu, esiet uzmanīgi un silti ģērbieties', - 'foggyWeatherTip': - 'Šodien ir migla, redzamība ir slikta, lūdzu, nēsājiet masku, ejot ārā', - 'windyWeatherTip': - 'Šodien ir stiprs vējš, lūdzu, esiet uzmanīgi, ejot ārā, un nostipriniet savas mantas', - 'sunnyWeatherTip': - 'Šodien ir saulains un spēcīgs UV starojums, lūdzu, lietojiet saules aizsargkrēmu, ejot ārā', - 'temperatureDifferenceTip': - 'Šodien ir liela temperatūras atšķirība starp dienu un nakti, lūdzu, pielāgojiet apģērbu', - 'comfortableWeatherTip': - 'Šodien ir patīkams laiks, lielisks laiks āra aktivitātēm', + 'hotWeatherTip': 'Šodien ir karsts, lūdzu, uzmanieties no karstuma dūriena un dzeriet daudz ūdens', + 'coldWeatherTip': 'Šodien temperatūra ir zema, lūdzu, silti ģērbieties, ejot ārā, lai nesaaukstētos', + 'rainyWeatherTip': 'Šodien līst, lūdzu, ņemiet līdzi lietussargu, ejot ārā, un esiet uzmanīgi', + 'snowyWeatherTip': 'Šodien snieg, ceļš ir slidens, lūdzu, esiet uzmanīgi un silti ģērbieties', + 'foggyWeatherTip': 'Šodien ir migla, redzamība ir slikta, lūdzu, nēsājiet masku, ejot ārā', + 'windyWeatherTip': 'Šodien ir stiprs vējš, lūdzu, esiet uzmanīgi, ejot ārā, un nostipriniet savas mantas', + 'sunnyWeatherTip': 'Šodien ir saulains un spēcīgs UV starojums, lūdzu, lietojiet saules aizsargkrēmu, ejot ārā', + 'temperatureDifferenceTip': 'Šodien ir liela temperatūras atšķirība starp dienu un nakti, lūdzu, pielāgojiet apģērbu', + 'comfortableWeatherTip': 'Šodien ir patīkams laiks, lielisks laiks āra aktivitātēm', "monday": "Pirm.", "tuesday": "Otr.", "wednesday": "Treš.", @@ -398,6 +794,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", @@ -429,32 +836,28 @@ const Map lvLV = { "notSet": "Nav iestatīts", "accountSetting": "Konta iestatījumi", "logout": "Izrakstīties", - "logoutTips": - "Vai esat pārliecināts, ka vēlaties izrakstīties no pašreizējā konta?", + "logoutTips": "Vai esat pārliecināts, ka vēlaties izrakstīties no pašreizējā konta?", 'deleteAccount': 'Dzēst kontu', - 'deleteAccountTips': - 'Vai esat pārliecināts, ka vēlaties neatgriezeniski dzēst savu kontu? Šī darbība nav atgriezeniska.', + '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': - 'Tīkla savienojuma kļūda, lūdzu, pārbaudiet tīkla iestatījumus un mēģiniet vēlreiz', - 'serverTemporarilyUnavailable': - 'Serveris uz laiku nav pieejams, lūdzu, mēģiniet vēlreiz vēlāk', - 'loginExpiredPleaseRelogin': - 'Jūsu sesija ir beigusies, lūdzu, piesakieties vēlreiz', + 'networkConnectionFailed': 'Tīkla savienojuma kļūda, lūdzu, pārbaudiet tīkla iestatījumus un mēģiniet vēlreiz', + 'serverTemporarilyUnavailable': 'Serveris uz laiku nav pieejams, lūdzu, mēģiniet vēlreiz vēlāk', + 'loginExpiredPleaseRelogin': 'Jūsu sesija ir beigusies, lūdzu, piesakieties vēlreiz', 'noPermissionForThisOperation': 'Jums nav atļaujas veikt šo darbību', 'requestedResourceNotFound': 'Pieprasītais resurss nav atrasts', - 'imageProcessingFailedPleaseReselect': - 'Attēla apstrāde neizdevās, lūdzu, izvēlieties citu attēlu', + 'imageProcessingFailedPleaseReselect': 'Attēla apstrāde neizdevās, lūdzu, izvēlieties citu attēlu', 'operationFailedPleaseRetry': 'Darbība neizdevās, lūdzu, mēģiniet vēlreiz', 'serverReturnedError': 'Serveris atgrieza kļūdu', 'serverError': 'Servera kļūda', - 'networkConnectionFailedCheckSettings': - 'Tīkla savienojuma kļūda, lūdzu, pārbaudiet tīkla iestatījumus', - 'serverInternalErrorRetryLater': - 'Iekšēja servera kļūda, lūdzu, mēģiniet vēlreiz vēlāk', + 'networkConnectionFailedCheckSettings': 'Tīkla savienojuma kļūda, lūdzu, pārbaudiet tīkla iestatījumus', + 'serverInternalErrorRetryLater': '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', @@ -464,38 +867,44 @@ const Map lvLV = { 'loggedOut': 'Veiksmīgi izrakstījāties', 'logoutFailedRetry': 'Izrakstīšanās neizdevās, lūdzu, mēģiniet vēlreiz', 'accountPermanentlyDeleted': 'Konts ir neatgriezeniski dzēsts', - 'deleteAccountFailedRetry': - 'Konta dzēšana neizdevās, lūdzu, mēģiniet vēlreiz', + 'deleteAccountFailedRetry': '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', - 'calendarWritePermissionDesc': - 'Izmanto kalendāra notikumu un atgādinājumu izveidei', - 'calendarFullAccessPermissionDesc': - 'Izmanto kalendāra notikumu un atgādinājumu lasīšanai un pārvaldībai', - 'locationPermissionDesc': - 'Izmanto pašreizējās atrašanās vietas informācijas iegūšanai', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Izmanto kalendāra notikumu un atgādinājumu izveidei', + 'calendarFullAccessPermissionDesc': 'Izmanto kalendāra notikumu un atgādinājumu lasīšanai un pārvaldībai', + 'locationPermissionDesc': 'Izmanto pašreizējās atrašanās vietas informācijas iegūšanai', 'appFunctionNeeds': 'Lietotnes funkcijai nepieciešams', 'authorized': 'Autorizēts', 'unauthorized': 'Neautorizēts', @@ -504,31 +913,65 @@ const Map lvLV = { 'unknownStatus': 'Nezināms statuss', 'permissionGranted': 'Atļauja piešķirta', 'permissionRequestError': 'Kļūda, pieprasot atļauju', - 'phonePermissionDetailDesc': - 'Zvanīšanas funkcijai nepieciešama tālruņa atļauja', + 'phonePermissionDetailDesc': 'Zvanīšanas funkcijai nepieciešama tālruņa atļauja', 'smsPermissionDetailDesc': 'SMS sūtīšanas funkcijai nepieciešama SMS atļauja', - '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', - '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', + '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', - 'cannotOpenAppStore': - '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', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Atjaunināšanas laikā radās kļūda, lūdzu, mēģiniet vēlreiz vēlāk', // 更新错误重试提示 //国家列表 "邮箱": "E-pasts", @@ -637,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Vai esat pārliecināts, ka vēlaties notīrīt visu tulkošanas vēsturi? Šī darbība nav atgriezeniska.", "unknownLanguage": "Nezināma valoda", "deleteSessionRecord": "Dzēst sesijas ierakstu", - "deleteSessionConfirm": - "Vai esat pārliecināts, ka vēlaties dzēst visus šīs sesijas tulkošanas ierakstus? Šī darbība nav atgriezeniska.", + "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...", @@ -673,8 +1189,7 @@ const Map lvLV = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Oriģinālais ieraksts", "recordSummary": "Ieraksta kopsavilkums", - "clickToGenerateSummary": - "Noklikšķiniet uz pogas zemāk, lai ģenerētu sesijas kopsavilkumu", + "clickToGenerateSummary": "Noklikšķiniet uz pogas zemāk, lai ģenerētu sesijas kopsavilkumu", "summaryContent": "Kopsavilkuma saturs", "copied": "Nokopēts", "summaryCopiledToClipboard": "Kopsavilkums nokopēts starpliktuvē", @@ -682,11 +1197,9 @@ const Map lvLV = { "summaryGenerated": "Kopsavilkums ģenerēts", "generating": "Ģenerē...", "regenerate": "Ģenerēt no jauna", - "summaryTimeoutMessage": - "Kopsavilkuma ģenerēšanas pieprasījums ir beidzies, iespējams, tīkla problēmu vai aizņemta servera dēļ.", + "summaryTimeoutMessage": "Kopsavilkuma ģenerēšanas pieprasījums ir beidzies, iespējams, tīkla problēmu vai aizņemta servera dēļ.", "deleteTranslationRecord": "Dzēst tulkošanas ierakstu", - "deleteTranslationConfirm": - "Vai esat pārliecināts, ka vēlaties dzēst šo tulkošanas ierakstu? Šī darbība nav atgriezeniska.", + "deleteTranslationConfirm": "Vai esat pārliecināts, ka vēlaties dzēst šo tulkošanas ierakstu? Šī darbība nav atgriezeniska.", "originalText": "Oriģinālais teksts", "translatedText": "Tulkotais teksts", "sessionSummary": "Sesijas kopsavilkums", @@ -704,7 +1217,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...", @@ -714,37 +1227,34 @@ const Map lvLV = { // 配对状态文本 "readyToPair": "Gatavs savienošanai pārī", "preparingPairingEnvironment": "Sagatavo vidi savienošanai pārī...", - "connectDeepSoundViaSystemBluetooth": - "Lūdzu, vispirms izveidojiet savienojumu ar Voitrans ierīci, izmantojot sistēmas Bluetooth", + "connectDeepSoundViaSystemBluetooth": "Lūdzu, vispirms izveidojiet savienojumu ar Voitrans ierīci, izmantojot sistēmas Bluetooth", "deviceBindingConfirm": "Ierīces saistīšanas apstiprinājums...", "establishingDeviceAssociation": "Izveido ierīces asociāciju...", "waitingCompletePairing": "Lūdzu, uzgaidiet, pabeidz savienošanu pārī...", - "pairingSuccessRedirecting": - "Savienošana pārī veiksmīga! Pāradresē uz sākumlapu...", + "pairingSuccessRedirecting": "Savienošana pārī veiksmīga! Pāradresē uz sākumlapu...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Lūdzu, pārliecinieties, ka esat savienots ar Voitrans ierīci", + "ensureConnectedDeepSoundDevice": "Lūdzu, pārliecinieties, ka esat savienots ar Voitrans ierīci", "deviceAlreadyBoundToOtherAccount": "Šī ierīce jau ir saistīta ar citu kontu", - "deviceAssociationFailed": - "Ierīces asociācija neizdevās, lūdzu, mēģiniet vēlreiz", - "scanTimeoutEnsureDeviceNearby": - "Skenēšanas taimauts, lūdzu, pārliecinieties, ka ierīce ir tuvumā", + "deviceAssociationFailed": "Ierīces asociācija neizdevās, lūdzu, mēģiniet vēlreiz", + "scanTimeoutEnsureDeviceNearby": "Skenēšanas taimauts, lūdzu, pārliecinieties, ka ierīce ir tuvumā", "networkError": "Tīkla kļūda", - "authorizationFailedCheckCode": - "Autorizācija neizdevās, lūdzu, pārbaudiet, vai autorizācijas kods ir pareizs", + "authorizationFailedCheckCode": "Autorizācija neizdevās, lūdzu, pārbaudiet, vai autorizācijas kods ir pareizs", "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ā', + '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...', + 'needManualBindingAuthCode': 'Nepieciešams manuālas saistīšanas autorizācijas kods...', 'pairingSuccessful': 'Savienošana pārī veiksmīga!', 'enableBluetooth': 'Iespējot Bluetooth', 'grantPermissions': 'Piešķirt atļaujas', @@ -756,33 +1266,35 @@ const Map lvLV = { 'verificationFailedRetry': 'Verifikācija neizdevās, lūdzu, mēģiniet vēlreiz', 'invalidDeviceAddress': 'Nederīga ierīces adrese', 'bleDeviceAssociationFailed': 'BLE ierīces asociācija neizdevās', - 'deviceAssociationFailedRetry': - 'Ierīces asociācija neizdevās, lūdzu, mēģiniet vēlreiz', - 'bleConnectionTimeoutRetry': - 'BLE savienojuma taimauts, lūdzu, mēģiniet vēlreiz', + 'deviceAssociationFailedRetry': 'Ierīces asociācija neizdevās, lūdzu, mēģiniet vēlreiz', + 'bleConnectionTimeoutRetry': 'BLE savienojuma taimauts, lūdzu, mēģiniet vēlreiz', 'blePairingStartupFailed': 'BLE savienošanas pārī sākšana neizdevās', 'bleConnectionFailed': 'BLE savienojums neizdevās', - 'deviceAuthorizationFailedCheckCode': - 'Ierīces autorizācija neizdevās, lūdzu, pārbaudiet autorizācijas kodu', + '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', - 'feedbackDescription': - 'Lūdzu, aprakstiet problēmu, ar kuru saskārāties, vai savu ieteikumu', + 'feedbackDescription': 'Lūdzu, aprakstiet problēmu, ar kuru saskārāties, vai savu ieteikumu', 'feedbackHint': 'Lūdzu, ievadiet savas atsauksmes...', 'feedbackRequired': 'Lūdzu, ievadiet atsauksmju saturu', 'contactInfo': 'Kontaktinformācija', 'contactHint': 'E-pasts/Tālrunis, lai mēs varētu ar jums sazināties', 'submit': 'Iesniegt', - 'feedbackSubmitSuccess': - 'Atsauksmes veiksmīgi iesniegtas, paldies par jūsu atsauksmēm!', - 'feedbackSubmitFailed': - 'Atsauksmju iesniegšana neizdevās, lūdzu, mēģiniet vēlreiz vēlāk', + 'feedbackSubmitSuccess': 'Atsauksmes veiksmīgi iesniegtas, paldies par jūsu atsauksmēm!', + 'feedbackSubmitFailed': 'Atsauksmju iesniegšana neizdevās, lūdzu, mēģiniet vēlreiz vēlāk', // OTA升级模块 - "upgradeExitConfirm": - "Notiek jaunināšana, izejot process tiks pārtraukts, vai esat pārliecināts, ka vēlaties iziet?", + "upgradeExitConfirm": "Notiek jaunināšana, izejot process tiks pārtraukts, vai esat pārliecināts, ka vēlaties iziet?", "deviceModel": "Ierīces modelis", "unknownDevice": "Nezināma ierīce", "currentFirmwareVersion": "Pašreizējā programmaparatūras versija", @@ -794,19 +1306,22 @@ 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", "updateContent": "Atjauninājuma saturs", - "removeEarbudsEnsureBattery": - "Izņemiet abas austiņas un pārliecinieties, ka abu baterijas līmenis ir virs 20%", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..1260cf3a3 100644 --- a/lib/core/translations/language/ms_my.dart +++ b/lib/core/translations/language/ms_my.dart @@ -71,8 +71,7 @@ const Map msMY = { // 登录页 "welcome": "Selamat Datang", - "loginTips": - "Sila log masuk atau daftar dengan nombor telefon atau e-mel anda", + "loginTips": "Sila log masuk atau daftar dengan nombor telefon atau e-mel anda", "accountNumber": "Nombor Telefon atau E-mel", "verificationCode": "Kod Pengesahan", "getCode": "Dapatkan Kod", @@ -91,8 +90,7 @@ const Map msMY = { "tip": "Petua", "pleaseEnterCompleteCode": "Sila masukkan kod pengesahan yang lengkap", "loginFailed": "Log masuk gagal, sila cuba lagi", - 'pleaseAcceptPrivacyPolicy': - 'Sila baca dan setujui Dasar Privasi dan Perjanjian Pengguna terlebih dahulu', + 'pleaseAcceptPrivacyPolicy': 'Sila baca dan setujui Dasar Privasi dan Perjanjian Pengguna terlebih dahulu', "enterVerificationCode": "Masukkan Kod Pengesahan", "verificationCodeSentTo": "Kod pengesahan telah dihantar ke", "resendVerificationCode": "Hantar semula kod pengesahan", @@ -100,12 +98,14 @@ 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", @@ -115,29 +115,24 @@ const Map msMY = { "signal": "Isyarat", "deviceId": "ID Peranti", "firmwareVersion": "Versi Firmware", - "disconnectedDevice": - "Tiada peranti disambungkan, klik butang di bawah untuk menyambung", + "disconnectedDevice": "Tiada peranti disambungkan, klik butang di bawah untuk menyambung", "connectDevice": "Sambungkan Peranti", "topAiExperiences": "Pengalaman AI Teratas", "aiAssistant": "Pembantu AI Serba Boleh", - "aiAssistantInfo": - "Perunding eksklusif 24/7, menjawab soalan, memberi cadangan", + "aiAssistantInfo": "Perunding eksklusif 24/7, menjawab soalan, memberi cadangan", "interpretation": "Penterjemahan Serentak", - "simultaneousInterpretationInfo": - "Terjemahan masa nyata untuk 80+ bahasa, perjalanan ke luar negara tanpa bimbang", + "simultaneousInterpretationInfo": "Terjemahan masa nyata untuk 80+ bahasa, perjalanan ke luar negara tanpa bimbang", "aiCompanion": "Teman Keluarga", "aiCompanionInfo": "Memahami anda, teman yang mesra", "homeSlogan": "Menghubungkan dunia, melangkaui suara", - "turnEarphones": - "Sila buka bekas pengecas fon telinga dan letakkan fon telinga di telinga anda", + "turnEarphones": "Sila buka bekas pengecas fon telinga dan letakkan fon telinga di telinga anda", "currentlyConnected": "Sedang bersambung:", "unsystemSetup": "Pergi ke tetapan sistem", "talkLater": "Nanti", "initializing": "Memulakan...", "bluetoothInitializationFailure": "Inisialisasi perkhidmatan Bluetooth gagal", "checkingPermissions": "Menyemak kebenaran...", - "lackPermissions": - "Kebenaran Bluetooth tiada dan perlu mengaktifkan lokasi peranti", + "lackPermissions": "Kebenaran Bluetooth tiada dan perlu mengaktifkan lokasi peranti", "searchingDevice": "Mencari peranti...", "findConnectedDevice": "Peranti yang disambungkan ditemui", "notFound": "Tiada peranti Bluetooth yang disambungkan ditemui", @@ -180,11 +175,198 @@ const Map msMY = { "healthConsultant": "Sembang AI Pelbagai Fungsi", "healthConsultantInfo": "Menyediakan lebih banyak fungsi sembang AI", "conferenceAssistant": "Pembantu Mesyuarat Perniagaan", - "conferenceAssistantInfo": - "Minit mesyuarat masa nyata, terjemahan pelbagai bahasa", + "conferenceAssistantInfo": "Minit mesyuarat masa nyata, terjemahan pelbagai bahasa", "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 +381,225 @@ 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 +611,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", @@ -227,11 +621,9 @@ const Map msMY = { "voiceServiceInfo": "Pilih perkhidmatan pengecaman dan sintesis suara", "selectVoiceService": "Pilih Perkhidmatan Suara", "azureVoiceService": "Perkhidmatan Suara Azure", - "azureVoiceServiceInfo": - "Perkhidmatan suara awan Microsoft, menyokong sintesis dan pengecaman suara berkualiti tinggi", + "azureVoiceServiceInfo": "Perkhidmatan suara awan Microsoft, menyokong sintesis dan pengecaman suara berkualiti tinggi", "flutterVoiceService": "Perkhidmatan Suara Tempatan Flutter", - "flutterVoiceServiceInfo": - "Perkhidmatan suara tempatan peranti, boleh digunakan tanpa sambungan internet", + "flutterVoiceServiceInfo": "Perkhidmatan suara tempatan peranti, boleh digunakan tanpa sambungan internet", 'timbreService': 'Perkhidmatan Timbre', 'timbreServiceInfo': 'Pilih perkhidmatan sintesis suara timbre', 'defaultTimbre': 'Timbre Lalai', @@ -253,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Alami fungsi interaksi suara pintar (pratonton fungsi)", + "realtimeVoiceChatInfo": "Alami fungsi interaksi suara pintar (pratonton fungsi)", "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 +697,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' @@ -309,20 +721,16 @@ const Map msMY = { '• Kawal fungsi fon telinga\n\n' 'Apa yang boleh saya bantu?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': - 'Pengecaman suara memerlukan akses mikrofon.', - 'voiceTranslationPermissionText': - 'Pengecaman dan terjemahan suara memerlukan akses mikrofon.', - 'phoneCallPermissionText': - 'Membuat panggilan memerlukan akses mikrofon untuk panggilan suara.', - 'permissionDeniedText': - 'Anda telah menafikan kebenaran mikrofon secara kekal, sila pergi ke tetapan sistem untuk mendayakannya.', + 'voiceRecognitionPermissionText': 'Pengecaman suara memerlukan akses mikrofon.', + 'voiceTranslationPermissionText': 'Pengecaman dan terjemahan suara memerlukan akses mikrofon.', + 'phoneCallPermissionText': 'Membuat panggilan memerlukan akses mikrofon untuk panggilan suara.', + 'permissionDeniedText': 'Anda telah menafikan kebenaran mikrofon secara kekal, sila pergi ke tetapan sistem untuk mendayakannya.', 'startVoiceInput': 'Mula input suara', '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', @@ -330,8 +738,8 @@ const Map msMY = { 'report': 'Lapor', 'submitSuccess': 'Berjaya dihantar', 'submitFailed': 'Gagal dihantar', - 'reportSubmitted': - 'Laporan telah dihantar, kami akan memprosesnya secepat mungkin', + 'reportSubmitted': 'Laporan telah dihantar, kami akan memprosesnya secepat mungkin', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Berbahaya/Tidak Selamat', 'pornographicVulgar': 'Pornografi/Lucah', 'misleadingAttack': 'Mengelirukan/Serangan', @@ -339,8 +747,8 @@ const Map msMY = { 'privacyRelated': 'Berkaitan Privasi', 'copyrightViolation': 'Melanggar hak cipta, nama baik saya, dsb.', 'other': 'Lain-lain', - 'reportDescriptionHint': - 'Kami ingin tahu sebab anda melaporkan, anda boleh menerangkan masalah yang anda hadapi.', + 'reportDescriptionHint': 'Kami ingin tahu sebab anda melaporkan, anda boleh menerangkan masalah yang anda hadapi.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Dihasilkan oleh AI', @@ -351,15 +759,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", @@ -370,24 +778,15 @@ const Map msMY = { 'highest': 'Tertinggi', 'lowest': 'Terendah', 'futureForecast': 'Ramalan Masa Depan', - 'hotWeatherTip': - 'Hari ini panas, sila berhati-hati dengan strok haba dan minum banyak air', - 'coldWeatherTip': - 'Suhu hari ini rendah, sila pakai pakaian hangat apabila keluar untuk mengelakkan selesema', - 'rainyWeatherTip': - 'Hari ini hujan, sila bawa payung apabila keluar dan berhati-hati semasa perjalanan', - 'snowyWeatherTip': - 'Hari ini salji, jalan licin sila berhati-hati, ambil langkah berjaga-jaga untuk kekal hangat', - 'foggyWeatherTip': - 'Hari ini berkabus, penglihatan rendah, sila pakai topeng apabila keluar', - 'windyWeatherTip': - 'Hari ini berangin, sila berhati-hati apabila keluar, pastikan barang-barang anda selamat', - 'sunnyWeatherTip': - 'Hari ini cerah dengan sinaran UV yang kuat, sila gunakan pelindung matahari apabila keluar', - 'temperatureDifferenceTip': - 'Terdapat perbezaan suhu yang besar antara siang dan malam hari ini, sila laraskan pakaian anda', - 'comfortableWeatherTip': - 'Cuaca hari ini menyenangkan, masa yang sesuai untuk aktiviti luar', + 'hotWeatherTip': 'Hari ini panas, sila berhati-hati dengan strok haba dan minum banyak air', + 'coldWeatherTip': 'Suhu hari ini rendah, sila pakai pakaian hangat apabila keluar untuk mengelakkan selesema', + 'rainyWeatherTip': 'Hari ini hujan, sila bawa payung apabila keluar dan berhati-hati semasa perjalanan', + 'snowyWeatherTip': 'Hari ini salji, jalan licin sila berhati-hati, ambil langkah berjaga-jaga untuk kekal hangat', + 'foggyWeatherTip': 'Hari ini berkabus, penglihatan rendah, sila pakai topeng apabila keluar', + 'windyWeatherTip': 'Hari ini berangin, sila berhati-hati apabila keluar, pastikan barang-barang anda selamat', + 'sunnyWeatherTip': 'Hari ini cerah dengan sinaran UV yang kuat, sila gunakan pelindung matahari apabila keluar', + 'temperatureDifferenceTip': 'Terdapat perbezaan suhu yang besar antara siang dan malam hari ini, sila laraskan pakaian anda', + 'comfortableWeatherTip': 'Cuaca hari ini menyenangkan, masa yang sesuai untuk aktiviti luar', "monday": "Isnin", "tuesday": "Selasa", "wednesday": "Rabu", @@ -395,6 +794,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", @@ -428,30 +838,26 @@ const Map msMY = { "logout": "Log Keluar", "logoutTips": "Adakah anda pasti mahu log keluar dari akaun semasa?", 'deleteAccount': 'Padam Akaun', - 'deleteAccountTips': - 'Adakah anda pasti mahu memadam akaun anda secara kekal? Tindakan ini tidak boleh dibatalkan', + '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': - 'Sambungan rangkaian gagal, sila semak tetapan rangkaian anda dan cuba lagi', - 'serverTemporarilyUnavailable': - 'Pelayan tidak tersedia buat sementara waktu, sila cuba lagi nanti', - 'loginExpiredPleaseRelogin': - 'Sesi anda telah tamat tempoh, sila log masuk semula', - 'noPermissionForThisOperation': - 'Anda tidak mempunyai kebenaran untuk melakukan operasi ini', + 'networkConnectionFailed': 'Sambungan rangkaian gagal, sila semak tetapan rangkaian anda dan cuba lagi', + 'serverTemporarilyUnavailable': 'Pelayan tidak tersedia buat sementara waktu, sila cuba lagi nanti', + 'loginExpiredPleaseRelogin': 'Sesi anda telah tamat tempoh, sila log masuk semula', + 'noPermissionForThisOperation': 'Anda tidak mempunyai kebenaran untuk melakukan operasi ini', 'requestedResourceNotFound': 'Sumber yang diminta tidak ditemui', - 'imageProcessingFailedPleaseReselect': - 'Pemprosesan imej gagal, sila pilih imej lain', + 'imageProcessingFailedPleaseReselect': 'Pemprosesan imej gagal, sila pilih imej lain', 'operationFailedPleaseRetry': 'Operasi gagal, sila cuba lagi', 'serverReturnedError': 'Pelayan mengembalikan ralat', 'serverError': 'Ralat Pelayan', - 'networkConnectionFailedCheckSettings': - 'Sambungan rangkaian gagal, sila semak tetapan rangkaian anda', - 'serverInternalErrorRetryLater': - 'Ralat dalaman pelayan, sila cuba lagi nanti', + 'networkConnectionFailedCheckSettings': 'Sambungan rangkaian gagal, sila semak tetapan rangkaian anda', + 'serverInternalErrorRetryLater': '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,34 +870,41 @@ 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', - 'calendarWritePermissionDesc': - 'Digunakan untuk membuat acara kalendar dan peringatan', - 'calendarFullAccessPermissionDesc': - 'Digunakan untuk membaca dan mengurus acara kalendar dan peringatan', - 'locationPermissionDesc': - 'Digunakan untuk mendapatkan maklumat lokasi semasa', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Digunakan untuk membuat acara kalendar dan peringatan', + 'calendarFullAccessPermissionDesc': 'Digunakan untuk membaca dan mengurus acara kalendar dan peringatan', + 'locationPermissionDesc': 'Digunakan untuk mendapatkan maklumat lokasi semasa', 'appFunctionNeeds': 'Fungsi aplikasi memerlukan', 'authorized': 'Dibenarkan', 'unauthorized': 'Tidak Dibenarkan', @@ -502,27 +915,63 @@ const Map msMY = { 'permissionRequestError': 'Ralat semasa meminta kebenaran', 'phonePermissionDetailDesc': 'Fungsi panggilan memerlukan kebenaran telefon', 'smsPermissionDetailDesc': 'Fungsi menghantar SMS memerlukan kebenaran SMS', - 'calendarWritePermissionDetailDesc': - 'Membuat acara kalendar memerlukan kebenaran menulis kalendar', - 'calendarFullAccessPermissionDetailDesc': - 'Mengurus acara kalendar memerlukan kebenaran penuh kalendar', - 'locationPermissionDetailDesc': - 'Mendapatkan maklumat lokasi memerlukan kebenaran lokasi', - 'appNeedsPermissionForFullFunction': - 'Aplikasi memerlukan kebenaran ini untuk fungsi penuh', - 'permanentDenialText': - 'Anda telah menafikan kebenaran {permission} secara kekal, sila pergi ke tetapan aplikasi untuk mendayakannya', + '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', - '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', + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-mel", @@ -631,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Adakah anda pasti mahu mengosongkan semua sejarah terjemahan? Tindakan ini tidak boleh dibatalkan.", "unknownLanguage": "Bahasa Tidak Diketahui", "deleteSessionRecord": "Padam Rekod Sesi", - "deleteSessionConfirm": - "Adakah anda pasti mahu memadam semua rekod terjemahan untuk sesi ini? Tindakan ini tidak boleh dibatalkan.", + "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...", @@ -675,11 +1197,9 @@ const Map msMY = { "summaryGenerated": "Ringkasan telah dijana", "generating": "Menjana...", "regenerate": "Jana semula", - "summaryTimeoutMessage": - "Permintaan menjana ringkasan telah tamat masa, mungkin disebabkan oleh masalah rangkaian atau pelayan sibuk.", + "summaryTimeoutMessage": "Permintaan menjana ringkasan telah tamat masa, mungkin disebabkan oleh masalah rangkaian atau pelayan sibuk.", "deleteTranslationRecord": "Padam Rekod Terjemahan", - "deleteTranslationConfirm": - "Adakah anda pasti mahu memadam rekod terjemahan ini? Tindakan ini tidak boleh dibatalkan.", + "deleteTranslationConfirm": "Adakah anda pasti mahu memadam rekod terjemahan ini? Tindakan ini tidak boleh dibatalkan.", "originalText": "Teks Asal", "translatedText": "Teks Terjemahan", "sessionSummary": "Ringkasan Sesi", @@ -697,7 +1217,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...", @@ -707,34 +1227,32 @@ const Map msMY = { // 配对状态文本 "readyToPair": "Sedia untuk dipasangkan", "preparingPairingEnvironment": "Menyediakan persekitaran pemasangan...", - "connectDeepSoundViaSystemBluetooth": - "Sila sambung ke peranti Voitrans melalui Bluetooth sistem terlebih dahulu", + "connectDeepSoundViaSystemBluetooth": "Sila sambung ke peranti Voitrans melalui Bluetooth sistem terlebih dahulu", "deviceBindingConfirm": "Pengesahan pengikatan peranti...", "establishingDeviceAssociation": "Mewujudkan perkaitan peranti...", "waitingCompletePairing": "Sila tunggu, melengkapkan pemasangan...", - "pairingSuccessRedirecting": - "Pemasangan berjaya! Mengalihkan ke halaman utama...", + "pairingSuccessRedirecting": "Pemasangan berjaya! Mengalihkan ke halaman utama...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Sila pastikan anda disambungkan ke peranti Voitrans", - "deviceAlreadyBoundToOtherAccount": - "Peranti ini telah diikat pada akaun lain", + "ensureConnectedDeepSoundDevice": "Sila pastikan anda disambungkan ke peranti Voitrans", + "deviceAlreadyBoundToOtherAccount": "Peranti ini telah diikat pada akaun lain", "deviceAssociationFailed": "Perkaitan peranti gagal, sila cuba lagi", - "scanTimeoutEnsureDeviceNearby": - "Imbasan tamat masa, sila pastikan peranti berada berdekatan", + "scanTimeoutEnsureDeviceNearby": "Imbasan tamat masa, sila pastikan peranti berada berdekatan", "networkError": "Ralat Rangkaian", - "authorizationFailedCheckCode": - "Kebenaran gagal, sila semak sama ada kod kebenaran betul", + "authorizationFailedCheckCode": "Kebenaran gagal, sila semak sama ada kod kebenaran betul", "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', + '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!', @@ -752,26 +1270,31 @@ const Map msMY = { 'bleConnectionTimeoutRetry': 'Tamat masa sambungan BLE, sila cuba lagi', 'blePairingStartupFailed': 'Permulaan pemasangan BLE gagal', 'bleConnectionFailed': 'Sambungan BLE gagal', - 'deviceAuthorizationFailedCheckCode': - 'Kebenaran peranti gagal, sila semak kod kebenaran', + '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', - 'feedbackDescription': - 'Sila terangkan masalah yang anda hadapi atau cadangan anda', + 'feedbackDescription': 'Sila terangkan masalah yang anda hadapi atau cadangan anda', 'feedbackHint': 'Sila masukkan maklum balas anda...', 'feedbackRequired': 'Sila masukkan kandungan maklum balas', 'contactInfo': 'Maklumat Hubungan', 'contactHint': 'E-mel/Telefon, supaya kami boleh menghubungi anda', 'submit': 'Hantar', - 'feedbackSubmitSuccess': - 'Maklum balas berjaya dihantar, terima kasih atas maklum balas anda!', + 'feedbackSubmitSuccess': 'Maklum balas berjaya dihantar, terima kasih atas maklum balas anda!', 'feedbackSubmitFailed': 'Gagal menghantar maklum balas, sila cuba lagi nanti', // OTA升级模块 - "upgradeExitConfirm": - "Naik taraf sedang berjalan, keluar akan mengganggu proses, adakah anda pasti mahu keluar?", + "upgradeExitConfirm": "Naik taraf sedang berjalan, keluar akan mengganggu proses, adakah anda pasti mahu keluar?", "deviceModel": "Model Peranti", "unknownDevice": "Peranti Tidak Diketahui", "currentFirmwareVersion": "Versi Firmware Semasa", @@ -783,20 +1306,22 @@ const Map msMY = { "connectionFailed": "Sambungan Gagal", "retryConnection": "Cuba Sambung Semula", "ota_updateNow": "Kemas Kini Sekarang", - "keepConnectedDontClose": - "Pastikan peranti sentiasa bersambung, jangan tutup aplikasi", + "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", "charging": "Mengecas", "updateContent": "Kandungan Kemas Kini", - "removeEarbudsEnsureBattery": - "Keluarkan kedua-dua fon telinga, dan pastikan bateri kedua-duanya melebihi 20%", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..dc6d148ff 100644 --- a/lib/core/translations/language/nb_no.dart +++ b/lib/core/translations/language/nb_no.dart @@ -90,8 +90,7 @@ const Map nbNO = { "tip": "Tips", "pleaseEnterCompleteCode": "Vennligst skriv inn hele verifiseringskoden", "loginFailed": "Innlogging mislyktes, prøv igjen", - 'pleaseAcceptPrivacyPolicy': - 'Vennligst les og godta personvernerklæringen og brukeravtalen først', + 'pleaseAcceptPrivacyPolicy': 'Vennligst les og godta personvernerklæringen og brukeravtalen først', "enterVerificationCode": "Skriv inn verifiseringskode", "verificationCodeSentTo": "Verifiseringskode sendt til", "resendVerificationCode": "Send verifiseringskode på nytt", @@ -99,12 +98,14 @@ 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", @@ -114,30 +115,24 @@ const Map nbNO = { "signal": "Signal", "deviceId": "Enhets-ID", "firmwareVersion": "Firmware-versjon", - "disconnectedDevice": - "Ingen enhet tilkoblet, klikk på knappen nedenfor for å koble til", + "disconnectedDevice": "Ingen enhet tilkoblet, klikk på knappen nedenfor for å koble til", "connectDevice": "Koble til enhet", "topAiExperiences": "Topp AI-opplevelser", "aiAssistant": "Allsidig AI-assistent", - "aiAssistantInfo": - "Eksklusiv 24/7-konsulent, svarer på spørsmål, gir forslag", + "aiAssistantInfo": "Eksklusiv 24/7-konsulent, svarer på spørsmål, gir forslag", "interpretation": "Simultantolking", - "simultaneousInterpretationInfo": - "Sanntidsoversettelse for over 80 språk, bekymringsfrie utenlandsreiser", + "simultaneousInterpretationInfo": "Sanntidsoversettelse for over 80 språk, bekymringsfrie utenlandsreiser", "aiCompanion": "Familievenn", "aiCompanionInfo": "Forstår deg, varmt selskap", "homeSlogan": "Kobler sammen verden, overgår lyden", - "turnEarphones": - "Åpne ladeetuiet til øreproppene og sett øreproppene i ørene", + "turnEarphones": "Åpne ladeetuiet til øreproppene og sett øreproppene i ørene", "currentlyConnected": "For øyeblikket tilkoblet:", "unsystemSetup": "Gå til systeminnstillinger", "talkLater": "Senere", "initializing": "Initialiserer...", - "bluetoothInitializationFailure": - "Initialisering av Bluetooth-tjenesten mislyktes", + "bluetoothInitializationFailure": "Initialisering av Bluetooth-tjenesten mislyktes", "checkingPermissions": "Sjekker tillatelser...", - "lackPermissions": - "Mangler Bluetooth-tillatelser og er nødvendig å aktivere lokasjons-tillatelser", + "lackPermissions": "Mangler Bluetooth-tillatelser og er nødvendig å aktivere lokasjons-tillatelser", "searchingDevice": "Søker etter enheter...", "findConnectedDevice": "Fant tilkoblet enhet", "notFound": "Ingen tilkoblet Bluetooth-enhet funnet", @@ -180,11 +175,198 @@ const Map nbNO = { "healthConsultant": "Multifunksjonell AI-chat", "healthConsultantInfo": "Tilbyr flere AI-chatfunksjoner", "conferenceAssistant": "Assistent for forretningsmøter", - "conferenceAssistantInfo": - "Sanntids protokollføring, flerspråklig oversettelse", + "conferenceAssistantInfo": "Sanntids protokollføring, flerspråklig oversettelse", "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 +381,225 @@ 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 +611,8 @@ 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", @@ -227,11 +621,9 @@ const Map nbNO = { "voiceServiceInfo": "Velg tjeneste for talegjenkjenning og syntese", "selectVoiceService": "Velg stemmetjeneste", "azureVoiceService": "Azure stemmetjeneste", - "azureVoiceServiceInfo": - "Microsofts skybaserte stemmetjeneste, støtter høykvalitets talesyntese og gjenkjenning", + "azureVoiceServiceInfo": "Microsofts skybaserte stemmetjeneste, støtter høykvalitets talesyntese og gjenkjenning", "flutterVoiceService": "Flutter lokal stemmetjeneste", - "flutterVoiceServiceInfo": - "Lokal stemmetjeneste på enheten, kan brukes uten internettforbindelse", + "flutterVoiceServiceInfo": "Lokal stemmetjeneste på enheten, kan brukes uten internettforbindelse", 'timbreService': 'Timbre-tjeneste', 'timbreServiceInfo': 'Velg tjeneste for talesyntese med timbre', 'defaultTimbre': 'Standard timbre', @@ -242,8 +634,7 @@ const Map nbNO = { 'pleaseRead': 'Vennligst les høyt', 'completeRecording': 'Fullfør opptak', "firmwareUpgrade": "Firmware-oppgradering", - "bleHeadsetFirmwareUpgrade": - "Oppgradering av firmware-versjon for BLE-hodesett", + "bleHeadsetFirmwareUpgrade": "Oppgradering av firmware-versjon for BLE-hodesett", "deviceManagement": "Enhetsadministrasjon", "manageConnectedDevices": "Administrer tilkoblede Bluetooth-enheter", @@ -254,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Opplev intelligent taleinteraksjonsfunksjon (funksjonsforhåndsvisning)", + "realtimeVoiceChatInfo": "Opplev intelligent taleinteraksjonsfunksjon (funksjonsforhåndsvisning)", "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 @@ -281,8 +678,7 @@ const Map nbNO = { "inputMessage": "Skriv melding...", "imListening": "Lytter...", "canStartTalking": "Du kan begynne å snakke", - "addQuestionAboutImage": - "Legg til et spørsmål eller en beskrivelse av bildet...", + "addQuestionAboutImage": "Legg til et spørsmål eller en beskrivelse av bildet...", "summarizeImageContent": "Oppsummer bildets innhold", "extractImageText": "Trekk ut tekst fra bildet", "translateImageText": "Oversett tekst i bildet", @@ -301,6 +697,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' @@ -311,20 +721,16 @@ const Map nbNO = { '• Å kontrollere øreproppfunksjoner\n\n' 'Hvordan kan jeg hjelpe deg?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': - 'Talegjenkjenning krever tilgang til mikrofon.', - 'voiceTranslationPermissionText': - 'Talegjenkjenning og oversettelse krever tilgang til mikrofon.', - 'phoneCallPermissionText': - 'Å ringe krever tilgang til mikrofon for taleanrop.', - 'permissionDeniedText': - 'Du har permanent nektet mikrofontillatelse, gå til systeminnstillingene for å aktivere den.', + 'voiceRecognitionPermissionText': 'Talegjenkjenning krever tilgang til mikrofon.', + 'voiceTranslationPermissionText': 'Talegjenkjenning og oversettelse krever tilgang til mikrofon.', + 'phoneCallPermissionText': 'Å ringe krever tilgang til mikrofon for taleanrop.', + 'permissionDeniedText': 'Du har permanent nektet mikrofontillatelse, gå til systeminnstillingene for å aktivere den.', 'startVoiceInput': 'Start taleinndata', '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 +739,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', @@ -340,8 +747,8 @@ const Map nbNO = { 'privacyRelated': 'Personvernrelatert', 'copyrightViolation': 'Krenkelse av min opphavsrett, omdømme, etc.', 'other': 'Annet', - 'reportDescriptionHint': - 'Vi vil gjerne vite hvorfor du rapporterer, du kan beskrive problemet du opplevde.', + 'reportDescriptionHint': 'Vi vil gjerne vite hvorfor du rapporterer, du kan beskrive problemet du opplevde.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Generert av AI', @@ -352,15 +759,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', @@ -371,24 +778,15 @@ const Map nbNO = { 'highest': 'Høyeste', 'lowest': 'Laveste', 'futureForecast': 'Fremtidig varsel', - 'hotWeatherTip': - 'I dag er det varmt, vær forsiktig med heteslag og drikk rikelig med vann', - 'coldWeatherTip': - 'I dag er temperaturen lav, kle deg varmt når du går ut for å unngå forkjølelse', - 'rainyWeatherTip': - 'I dag regner det, ta med en paraply når du går ut og vær forsiktig', - 'snowyWeatherTip': - 'I dag snør det, veien er glatt, vær forsiktig og kle deg varmt', - 'foggyWeatherTip': - 'I dag er det tåke, sikten er dårlig, bruk en maske når du går ut', - 'windyWeatherTip': - 'I dag er det mye vind, vær forsiktig når du går ut og sikre eiendelene dine', - 'sunnyWeatherTip': - 'I dag er det sol og sterk UV-stråling, bruk solkrem når du går ut', - 'temperatureDifferenceTip': - 'I dag er det stor temperaturforskjell mellom dag og natt, tilpass klærne', - 'comfortableWeatherTip': - 'I dag er været behagelig, en flott tid for utendørsaktiviteter', + 'hotWeatherTip': 'I dag er det varmt, vær forsiktig med heteslag og drikk rikelig med vann', + 'coldWeatherTip': 'I dag er temperaturen lav, kle deg varmt når du går ut for å unngå forkjølelse', + 'rainyWeatherTip': 'I dag regner det, ta med en paraply når du går ut og vær forsiktig', + 'snowyWeatherTip': 'I dag snør det, veien er glatt, vær forsiktig og kle deg varmt', + 'foggyWeatherTip': 'I dag er det tåke, sikten er dårlig, bruk en maske når du går ut', + 'windyWeatherTip': 'I dag er det mye vind, vær forsiktig når du går ut og sikre eiendelene dine', + 'sunnyWeatherTip': 'I dag er det sol og sterk UV-stråling, bruk solkrem når du går ut', + 'temperatureDifferenceTip': 'I dag er det stor temperaturforskjell mellom dag og natt, tilpass klærne', + 'comfortableWeatherTip': 'I dag er været behagelig, en flott tid for utendørsaktiviteter', "monday": "Man", "tuesday": "Tir", "wednesday": "Ons", @@ -396,6 +794,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", @@ -429,29 +838,26 @@ const Map nbNO = { "logout": "Logg ut", "logoutTips": "Er du sikker på at du vil logge ut av den nåværende kontoen?", 'deleteAccount': 'Slett konto', - 'deleteAccountTips': - 'Er du sikker på at du vil slette kontoen din permanent? Denne handlingen kan ikke angres.', + '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': - 'Nettverkstilkobling mislyktes, sjekk nettverksinnstillingene og prøv igjen', - 'serverTemporarilyUnavailable': - 'Serveren er midlertidig utilgjengelig, prøv igjen senere', - 'loginExpiredPleaseRelogin': - 'Sesjonen din er utløpt, vennligst logg inn på nytt', - 'noPermissionForThisOperation': - 'Du har ikke tillatelse til å utføre denne operasjonen', + 'networkConnectionFailed': 'Nettverkstilkobling mislyktes, sjekk nettverksinnstillingene og prøv igjen', + 'serverTemporarilyUnavailable': 'Serveren er midlertidig utilgjengelig, prøv igjen senere', + 'loginExpiredPleaseRelogin': 'Sesjonen din er utløpt, vennligst logg inn på nytt', + 'noPermissionForThisOperation': 'Du har ikke tillatelse til å utføre denne operasjonen', 'requestedResourceNotFound': 'Den forespurte ressursen ble ikke funnet', - 'imageProcessingFailedPleaseReselect': - 'Bildebehandling mislyktes, velg et annet bilde', + 'imageProcessingFailedPleaseReselect': 'Bildebehandling mislyktes, velg et annet bilde', 'operationFailedPleaseRetry': 'Operasjonen mislyktes, prøv igjen', 'serverReturnedError': 'Serveren returnerte en feil', 'serverError': 'Serverfeil', - 'networkConnectionFailedCheckSettings': - 'Nettverkstilkobling mislyktes, sjekk nettverksinnstillingene', + 'networkConnectionFailedCheckSettings': 'Nettverkstilkobling mislyktes, sjekk nettverksinnstillingene', '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,32 +870,40 @@ 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', - 'calendarWritePermissionDesc': - 'Brukes for å opprette kalenderhendelser og påminnelser', - 'calendarFullAccessPermissionDesc': - 'Brukes for å lese og administrere kalenderhendelser og påminnelser', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Brukes for å opprette kalenderhendelser og påminnelser', + 'calendarFullAccessPermissionDesc': 'Brukes for å lese og administrere kalenderhendelser og påminnelser', 'locationPermissionDesc': 'Brukes for å hente nåværende posisjonsinformasjon', 'appFunctionNeeds': 'Appfunksjonen trenger', 'authorized': 'Autorisert', @@ -501,28 +915,63 @@ const Map nbNO = { 'permissionRequestError': 'Feil ved forespørsel om tillatelse', 'phonePermissionDetailDesc': 'Ringefunksjonen krever telefontillatelse', 'smsPermissionDetailDesc': 'Send SMS-funksjonen krever SMS-tillatelse', - 'calendarWritePermissionDetailDesc': - 'Å opprette kalenderhendelser krever skrivetilgang til kalenderen', - 'calendarFullAccessPermissionDetailDesc': - 'Å administrere kalenderhendelser krever full tilgang til kalenderen', - 'locationPermissionDetailDesc': - 'Å hente posisjonsinformasjon krever posisjonstillatelse', - 'appNeedsPermissionForFullFunction': - 'Appen trenger denne tillatelsen for full funksjonalitet', - 'permanentDenialText': - 'Du har permanent nektet {permission}-tillatelse, gå til appinnstillingene for å aktivere den', + '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', - 'cannotOpenAppStore': - 'Kan ikke åpne appbutikken, gå til appbutikken manuelt for å oppdatere', - 'updateErrorRetry': - 'Det oppstod en feil under oppdateringen, prøv igjen senere', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Det oppstod en feil under oppdateringen, prøv igjen senere', // 更新错误重试提示 //国家列表 "邮箱": "E-post", @@ -631,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Er du sikker på at du vil tømme all oversettelseshistorikk? Denne handlingen kan ikke angres.", "unknownLanguage": "Ukjent språk", "deleteSessionRecord": "Slett sesjonsopptak", - "deleteSessionConfirm": - "Er du sikker på at du vil slette alle oversettelsesopptak for denne sesjonen? Denne handlingen kan ikke angres.", + "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...", @@ -667,8 +1189,7 @@ const Map nbNO = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Originalt opptak", "recordSummary": "Opptakssammendrag", - "clickToGenerateSummary": - "Klikk på knappen nedenfor for å generere et sesjonssammendrag", + "clickToGenerateSummary": "Klikk på knappen nedenfor for å generere et sesjonssammendrag", "summaryContent": "Sammendragsinnhold", "copied": "Kopiert", "summaryCopiledToClipboard": "Sammendraget er kopiert til utklippstavlen", @@ -676,11 +1197,9 @@ const Map nbNO = { "summaryGenerated": "Sammendrag generert", "generating": "Genererer...", "regenerate": "Generer på nytt", - "summaryTimeoutMessage": - "Forespørselen om å generere sammendrag utløp, muligens på grunn av nettverksproblemer eller travel server.", + "summaryTimeoutMessage": "Forespørselen om å generere sammendrag utløp, muligens på grunn av nettverksproblemer eller travel server.", "deleteTranslationRecord": "Slett oversettelsesopptak", - "deleteTranslationConfirm": - "Er du sikker på at du vil slette dette oversettelsesopptaket? Denne handlingen kan ikke angres.", + "deleteTranslationConfirm": "Er du sikker på at du vil slette dette oversettelsesopptaket? Denne handlingen kan ikke angres.", "originalText": "Originaltekst", "translatedText": "Oversatt tekst", "sessionSummary": "Sesjonssammendrag", @@ -698,7 +1217,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...", @@ -708,34 +1227,32 @@ const Map nbNO = { // 配对状态文本 "readyToPair": "Klar til å pare", "preparingPairingEnvironment": "Forbereder paringsmiljø...", - "connectDeepSoundViaSystemBluetooth": - "Koble først til Voitrans-enheten via systemets Bluetooth", + "connectDeepSoundViaSystemBluetooth": "Koble først til Voitrans-enheten via systemets Bluetooth", "deviceBindingConfirm": "Bekreftelse av enhetsbinding...", "establishingDeviceAssociation": "Oppretter enhetsassosiasjon...", "waitingCompletePairing": "Vennligst vent, fullfører paring...", - "pairingSuccessRedirecting": - "Paring vellykket! Omdirigerer til startsiden...", + "pairingSuccessRedirecting": "Paring vellykket! Omdirigerer til startsiden...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Sørg for at du er koblet til en Voitrans-enhet", - "deviceAlreadyBoundToOtherAccount": - "Denne enheten er allerede bundet til en annen konto", + "ensureConnectedDeepSoundDevice": "Sørg for at du er koblet til en Voitrans-enhet", + "deviceAlreadyBoundToOtherAccount": "Denne enheten er allerede bundet til en annen konto", "deviceAssociationFailed": "Enhetsassosiasjon mislyktes, prøv igjen", - "scanTimeoutEnsureDeviceNearby": - "Skanne-tidsavbrudd, sørg for at enheten er i nærheten", + "scanTimeoutEnsureDeviceNearby": "Skanne-tidsavbrudd, sørg for at enheten er i nærheten", "networkError": "Nettverksfeil", - "authorizationFailedCheckCode": - "Autorisasjon mislyktes, sjekk om autorisasjonskoden er riktig", + "authorizationFailedCheckCode": "Autorisasjon mislyktes, sjekk om autorisasjonskoden er riktig", "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', + '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!', @@ -753,8 +1270,16 @@ const Map nbNO = { 'bleConnectionTimeoutRetry': 'BLE-tilkoblingstidsavbrudd, prøv igjen', 'blePairingStartupFailed': 'Start av BLE-paring mislyktes', 'bleConnectionFailed': 'BLE-tilkobling mislyktes', - 'deviceAuthorizationFailedCheckCode': - 'Enhetsautorisasjon mislyktes, sjekk autorisasjonskoden', + '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", @@ -766,12 +1291,10 @@ const Map nbNO = { 'contactHint': 'E-post/telefon, slik at vi kan kontakte deg', 'submit': 'Send inn', 'feedbackSubmitSuccess': 'Tilbakemelding sendt, takk for din tilbakemelding!', - 'feedbackSubmitFailed': - 'Innsending av tilbakemelding mislyktes, prøv igjen senere', + 'feedbackSubmitFailed': 'Innsending av tilbakemelding mislyktes, prøv igjen senere', // OTA升级模块 - "upgradeExitConfirm": - "Oppgradering pågår, å avslutte vil avbryte prosessen, er du sikker på at du vil avslutte?", + "upgradeExitConfirm": "Oppgradering pågår, å avslutte vil avbryte prosessen, er du sikker på at du vil avslutte?", "deviceModel": "Enhetsmodell", "unknownDevice": "Ukjent enhet", "currentFirmwareVersion": "Nåværende firmware-versjon", @@ -783,19 +1306,22 @@ 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", "updateContent": "Oppdateringsinnhold", - "removeEarbudsEnsureBattery": - "Ta ut begge øreproppene og sørg for at batterinivået på begge er over 20 %", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..9f077e584 100644 --- a/lib/core/translations/language/nl_nl.dart +++ b/lib/core/translations/language/nl_nl.dart @@ -90,8 +90,7 @@ const Map nlNL = { "tip": "Tip", "pleaseEnterCompleteCode": "Voer de volledige verificatiecode in", "loginFailed": "Inloggen mislukt, probeer het opnieuw", - 'pleaseAcceptPrivacyPolicy': - 'Lees en accepteer eerst het Privacybeleid en de Gebruikersovereenkomst', + 'pleaseAcceptPrivacyPolicy': 'Lees en accepteer eerst het Privacybeleid en de Gebruikersovereenkomst', "enterVerificationCode": "Voer verificatiecode in", "verificationCodeSentTo": "Verificatiecode verzonden naar", "resendVerificationCode": "Verificatiecode opnieuw verzenden", @@ -99,12 +98,14 @@ 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", @@ -114,30 +115,24 @@ const Map nlNL = { "signal": "Signaal", "deviceId": "Apparaat-ID", "firmwareVersion": "Firmwareversie", - "disconnectedDevice": - "Geen apparaat verbonden, klik op de onderstaande knop om te verbinden", + "disconnectedDevice": "Geen apparaat verbonden, klik op de onderstaande knop om te verbinden", "connectDevice": "Apparaat verbinden", "topAiExperiences": "Top AI-ervaringen", "aiAssistant": "Alles-in-één AI-assistent", - "aiAssistantInfo": - "Exclusieve 24/7 consultant, beantwoordt vragen, geeft suggesties", + "aiAssistantInfo": "Exclusieve 24/7 consultant, beantwoordt vragen, geeft suggesties", "interpretation": "Simultaanvertolking", - "simultaneousInterpretationInfo": - "Realtime vertaling in meer dan 80 talen, zorgeloos reizen naar het buitenland", + "simultaneousInterpretationInfo": "Realtime vertaling in meer dan 80 talen, zorgeloos reizen naar het buitenland", "aiCompanion": "Familiebegeleider", "aiCompanionInfo": "Begrijpt u, warm gezelschap", "homeSlogan": "De wereld verbinden, het geluid overstijgen", - "turnEarphones": - "Open de oplaadcase van de oortjes en plaats de oortjes in uw oren", + "turnEarphones": "Open de oplaadcase van de oortjes en plaats de oortjes in uw oren", "currentlyConnected": "Momenteel verbonden:", "unsystemSetup": "Ga naar systeeminstellingen", "talkLater": "Later", "initializing": "Initialiseren...", - "bluetoothInitializationFailure": - "Initialisatie van Bluetooth-service mislukt", + "bluetoothInitializationFailure": "Initialisatie van Bluetooth-service mislukt", "checkingPermissions": "Toestemmingen controleren...", - "lackPermissions": - "Bluetooth-toestemmingen ontbreken en zijn nodig om locatie toegang te krijgen", + "lackPermissions": "Bluetooth-toestemmingen ontbreken en zijn nodig om locatie toegang te krijgen", "searchingDevice": "Apparaten zoeken...", "findConnectedDevice": "Verbonden apparaat gevonden", "notFound": "Geen verbonden Bluetooth-apparaat gevonden", @@ -169,8 +164,7 @@ const Map nlNL = { "exploreAi": "Ontdek de AI-functies die door Voitrans worden aangeboden", "aiFunction": "AI-functies", "allRoundAssistant": "Alles-in-één assistent", - "allRoundAssistantInfo": - "Helpt u bij het oplossen van verschillende problemen", + "allRoundAssistantInfo": "Helpt u bij het oplossen van verschillende problemen", "simultaneousTranslation": "Simultaanvertolking", "faceToFaceTranslation": "Face-to-face vertaling", 'audioVideoTranslation': 'Audio- en videovertaling', @@ -181,11 +175,198 @@ const Map nlNL = { "healthConsultant": "Multifunctionele AI-chat", "healthConsultantInfo": "Biedt meer AI-chatfuncties", "conferenceAssistant": "Assistent voor zakelijke bijeenkomsten", - "conferenceAssistantInfo": - "Realtime notuleren van vergaderingen, meertalige vertaling", + "conferenceAssistantInfo": "Realtime notuleren van vergaderingen, meertalige vertaling", "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 +381,225 @@ 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 +611,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", @@ -228,11 +621,9 @@ const Map nlNL = { "voiceServiceInfo": "Selecteer spraakherkenning- en synthese-service", "selectVoiceService": "Selecteer stemdienst", "azureVoiceService": "Azure Stemdienst", - "azureVoiceServiceInfo": - "Microsoft's cloud-stemdienst, ondersteunt hoogwaardige spraaksynthese en -herkenning", + "azureVoiceServiceInfo": "Microsoft's cloud-stemdienst, ondersteunt hoogwaardige spraaksynthese en -herkenning", "flutterVoiceService": "Flutter Lokale Stemdienst", - "flutterVoiceServiceInfo": - "Lokale stemdienst van het apparaat, kan zonder internetverbinding worden gebruikt", + "flutterVoiceServiceInfo": "Lokale stemdienst van het apparaat, kan zonder internetverbinding worden gebruikt", 'timbreService': 'Timbre-dienst', 'timbreServiceInfo': 'Selecteer timbre-spraak-synthese-service', 'defaultTimbre': 'Standaard Timbre', @@ -254,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Ervaar de intelligente spraakinteractiefunctie (functievoorbeeld)", + "realtimeVoiceChatInfo": "Ervaar de intelligente spraakinteractiefunctie (functievoorbeeld)", "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 @@ -281,8 +678,7 @@ const Map nlNL = { "inputMessage": "Voer bericht in...", "imListening": "Ik luister...", "canStartTalking": "U kunt beginnen met praten", - "addQuestionAboutImage": - "Voeg een vraag of beschrijving over de afbeelding toe...", + "addQuestionAboutImage": "Voeg een vraag of beschrijving over de afbeelding toe...", "summarizeImageContent": "Vat de inhoud van de afbeelding samen", "extractImageText": "Extraheer tekst uit de afbeelding", "translateImageText": "Vertaal tekst in de afbeelding", @@ -301,6 +697,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' @@ -311,20 +721,16 @@ const Map nlNL = { '• Oortjesfuncties bedienen\n\n' 'Hoe kan ik u helpen?', 'microphonePermission': 'Microfoon', - 'voiceRecognitionPermissionText': - 'Spraakherkenning vereist microfoontoegang.', - 'voiceTranslationPermissionText': - 'Spraakherkenning en -vertaling vereisen microfoontoegang.', - 'phoneCallPermissionText': - 'Bellen vereist microfoontoegang voor spraakoproepen.', - 'permissionDeniedText': - 'U hebt de microfoontoestemming permanent geweigerd, ga naar de systeeminstellingen om deze in te schakelen.', + 'voiceRecognitionPermissionText': 'Spraakherkenning vereist microfoontoegang.', + 'voiceTranslationPermissionText': 'Spraakherkenning en -vertaling vereisen microfoontoegang.', + 'phoneCallPermissionText': 'Bellen vereist microfoontoegang voor spraakoproepen.', + 'permissionDeniedText': 'U hebt de microfoontoestemming permanent geweigerd, ga naar de systeeminstellingen om deze in te schakelen.', 'startVoiceInput': 'Start spraakinvoer', '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', @@ -332,8 +738,8 @@ const Map nlNL = { 'report': 'Rapporteren', 'submitSuccess': 'Succesvol ingediend', 'submitFailed': 'Indienen mislukt', - 'reportSubmitted': - 'Rapport ingediend, we zullen het zo snel mogelijk verwerken', + 'reportSubmitted': 'Rapport ingediend, we zullen het zo snel mogelijk verwerken', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Schadelijk/Onveilig', 'pornographicVulgar': 'Pornografisch/Vulgair', 'misleadingAttack': 'Misleidend/Aanval', @@ -341,8 +747,8 @@ const Map nlNL = { 'privacyRelated': 'Privacygerelateerd', 'copyrightViolation': 'Schendt mijn auteursrecht, reputatie, enz.', 'other': 'Overig', - 'reportDescriptionHint': - 'We willen weten waarom u rapporteert, u kunt het probleem dat u tegenkwam beschrijven.', + 'reportDescriptionHint': 'We willen weten waarom u rapporteert, u kunt het probleem dat u tegenkwam beschrijven.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Gegenereerd door AI', @@ -353,15 +759,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', @@ -373,22 +779,14 @@ const Map nlNL = { 'lowest': 'Laagste', 'futureForecast': 'Toekomstige voorspelling', 'hotWeatherTip': 'Vandaag is het heet, let op zonnesteek en drink veel water', - 'coldWeatherTip': - 'Vandaag is de temperatuur laag, kleed u warm aan als u naar buiten gaat om verkoudheid te voorkomen', - 'rainyWeatherTip': - 'Vandaag regent het, neem een paraplu mee als u naar buiten gaat en wees voorzichtig', - 'snowyWeatherTip': - 'Vandaag sneeuwt het, de weg is glad, wees voorzichtig en kleed u warm aan', - 'foggyWeatherTip': - 'Vandaag is het mistig, het zicht is slecht, draag een masker als u naar buiten gaat', - 'windyWeatherTip': - 'Vandaag is het winderig, wees voorzichtig als u naar buiten gaat en zet uw spullen vast', - 'sunnyWeatherTip': - 'Vandaag is het zonnig en de UV-straling is sterk, gebruik zonnebrandcrème als u naar buiten gaat', - 'temperatureDifferenceTip': - 'Vandaag is er een groot temperatuurverschil tussen dag en nacht, pas uw kleding aan', - 'comfortableWeatherTip': - 'Vandaag is het aangenaam weer, een goede tijd voor buitenactiviteiten', + 'coldWeatherTip': 'Vandaag is de temperatuur laag, kleed u warm aan als u naar buiten gaat om verkoudheid te voorkomen', + 'rainyWeatherTip': 'Vandaag regent het, neem een paraplu mee als u naar buiten gaat en wees voorzichtig', + 'snowyWeatherTip': 'Vandaag sneeuwt het, de weg is glad, wees voorzichtig en kleed u warm aan', + 'foggyWeatherTip': 'Vandaag is het mistig, het zicht is slecht, draag een masker als u naar buiten gaat', + 'windyWeatherTip': 'Vandaag is het winderig, wees voorzichtig als u naar buiten gaat en zet uw spullen vast', + 'sunnyWeatherTip': 'Vandaag is het zonnig en de UV-straling is sterk, gebruik zonnebrandcrème als u naar buiten gaat', + 'temperatureDifferenceTip': 'Vandaag is er een groot temperatuurverschil tussen dag en nacht, pas uw kleding aan', + 'comfortableWeatherTip': 'Vandaag is het aangenaam weer, een goede tijd voor buitenactiviteiten', "monday": "Ma", "tuesday": "Di", "wednesday": "Wo", @@ -396,6 +794,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", @@ -429,29 +838,26 @@ const Map nlNL = { "logout": "Uitloggen", "logoutTips": "Weet u zeker dat u wilt uitloggen bij het huidige account?", 'deleteAccount': 'Account verwijderen', - 'deleteAccountTips': - 'Weet u zeker dat u uw account permanent wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.', + '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': - 'Netwerkverbinding mislukt, controleer uw netwerkinstellingen en probeer het opnieuw', - 'serverTemporarilyUnavailable': - 'De server is tijdelijk niet beschikbaar, probeer het later opnieuw', + 'networkConnectionFailed': 'Netwerkverbinding mislukt, controleer uw netwerkinstellingen en probeer het opnieuw', + 'serverTemporarilyUnavailable': 'De server is tijdelijk niet beschikbaar, probeer het later opnieuw', 'loginExpiredPleaseRelogin': 'Uw sessie is verlopen, log opnieuw in', - 'noPermissionForThisOperation': - 'U hebt geen toestemming om deze bewerking uit te voeren', + 'noPermissionForThisOperation': 'U hebt geen toestemming om deze bewerking uit te voeren', 'requestedResourceNotFound': 'De gevraagde bron is niet gevonden', - 'imageProcessingFailedPleaseReselect': - 'Beeldverwerking mislukt, selecteer een andere afbeelding', + 'imageProcessingFailedPleaseReselect': 'Beeldverwerking mislukt, selecteer een andere afbeelding', 'operationFailedPleaseRetry': 'Bewerking mislukt, probeer het opnieuw', 'serverReturnedError': 'De server heeft een fout geretourneerd', 'serverError': 'Serverfout', - 'networkConnectionFailedCheckSettings': - 'Netwerkverbinding mislukt, controleer uw netwerkinstellingen', - 'serverInternalErrorRetryLater': - 'Interne serverfout, probeer het later opnieuw', + 'networkConnectionFailedCheckSettings': 'Netwerkverbinding mislukt, controleer uw netwerkinstellingen', + 'serverInternalErrorRetryLater': 'Interne serverfout, probeer het later opnieuw', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Beeldcompressie mislukt', 'avatarUpdateFailed': 'Avatar-update mislukt', 'usernameCannotBeEmpty': 'Gebruikersnaam mag niet leeg zijn', @@ -461,74 +867,111 @@ const Map nlNL = { 'loggedOut': 'Succesvol uitgelogd', 'logoutFailedRetry': 'Uitloggen mislukt, probeer het opnieuw', 'accountPermanentlyDeleted': 'Account is permanent verwijderd', - 'deleteAccountFailedRetry': - 'Verwijderen van account mislukt, probeer het opnieuw', + 'deleteAccountFailedRetry': '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', - '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', + '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', // 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', - 'calendarWritePermissionDesc': - 'Gebruikt voor het maken van kalenderafspraken en herinneringen', - 'calendarFullAccessPermissionDesc': - 'Gebruikt voor het lezen en beheren van kalenderafspraken en herinneringen', - 'locationPermissionDesc': - 'Gebruikt voor het ophalen van de huidige locatie-informatie', + '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': 'Gebruikt voor het lezen en beheren van kalenderafspraken en herinneringen', + 'locationPermissionDesc': 'Gebruikt voor het ophalen van de huidige locatie-informatie', 'appFunctionNeeds': 'App-functie vereist', 'authorized': 'Geautoriseerd', 'unauthorized': 'Niet geautoriseerd', - 'needOpenInSystemSettings': - 'Moet worden ingeschakeld in de systeeminstellingen', + 'needOpenInSystemSettings': 'Moet worden ingeschakeld in de systeeminstellingen', 'partialAuthorization': 'Gedeeltelijke autorisatie', 'unknownStatus': 'Onbekende status', 'permissionGranted': 'Toestemming verleend', 'permissionRequestError': 'Fout bij het aanvragen van toestemming', 'phonePermissionDetailDesc': 'De belfunctie vereist telefoontoestemming', - 'smsPermissionDetailDesc': - 'De functie voor het verzenden van sms-berichten vereist sms-toestemming', - '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', - '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', + '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', - 'cannotOpenAppStore': - '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', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Er is een fout opgetreden tijdens het bijwerken, probeer het later opnieuw', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -637,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Weet u zeker dat u alle vertaalgeschiedenis wilt wissen? Deze actie kan niet ongedaan worden gemaakt.", "unknownLanguage": "Onbekende taal", "deleteSessionRecord": "Sessie-opname verwijderen", - "deleteSessionConfirm": - "Weet u zeker dat u alle vertaalopnamen voor deze sessie wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.", + "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...", @@ -673,8 +1189,7 @@ const Map nlNL = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Originele opname", "recordSummary": "Opnamesamenvatting", - "clickToGenerateSummary": - "Klik op de onderstaande knop om een sessiesamenvatting te genereren", + "clickToGenerateSummary": "Klik op de onderstaande knop om een sessiesamenvatting te genereren", "summaryContent": "Samenvattingsinhoud", "copied": "Gekopieerd", "summaryCopiledToClipboard": "Samenvatting gekopieerd naar klembord", @@ -682,11 +1197,9 @@ const Map nlNL = { "summaryGenerated": "Samenvatting gegenereerd", "generating": "Genereren...", "regenerate": "Opnieuw genereren", - "summaryTimeoutMessage": - "Het genereren van de samenvatting is verlopen, mogelijk vanwege netwerkproblemen of een drukke server.", + "summaryTimeoutMessage": "Het genereren van de samenvatting is verlopen, mogelijk vanwege netwerkproblemen of een drukke server.", "deleteTranslationRecord": "Vertaalopname verwijderen", - "deleteTranslationConfirm": - "Weet u zeker dat u deze vertaalopname wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.", + "deleteTranslationConfirm": "Weet u zeker dat u deze vertaalopname wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.", "originalText": "Originele tekst", "translatedText": "Vertaalde tekst", "sessionSummary": "Sessiesamenvatting", @@ -704,7 +1217,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...", @@ -714,37 +1227,34 @@ const Map nlNL = { // 配对状态文本 "readyToPair": "Klaar om te koppelen", "preparingPairingEnvironment": "Koppelingsomgeving voorbereiden...", - "connectDeepSoundViaSystemBluetooth": - "Verbind eerst met het Voitrans-apparaat via systeem-Bluetooth", + "connectDeepSoundViaSystemBluetooth": "Verbind eerst met het Voitrans-apparaat via systeem-Bluetooth", "deviceBindingConfirm": "Bevestiging apparaatkoppeling...", "establishingDeviceAssociation": "Apparaatassociatie tot stand brengen...", "waitingCompletePairing": "Even geduld, koppeling wordt voltooid...", - "pairingSuccessRedirecting": - "Koppelen geslaagd! Wordt doorgestuurd naar de startpagina...", + "pairingSuccessRedirecting": "Koppelen geslaagd! Wordt doorgestuurd naar de startpagina...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Zorg ervoor dat u bent verbonden met een Voitrans-apparaat", - "deviceAlreadyBoundToOtherAccount": - "Dit apparaat is al gekoppeld aan een ander account", + "ensureConnectedDeepSoundDevice": "Zorg ervoor dat u bent verbonden met een Voitrans-apparaat", + "deviceAlreadyBoundToOtherAccount": "Dit apparaat is al gekoppeld aan een ander account", "deviceAssociationFailed": "Apparaatassociatie mislukt, probeer het opnieuw", - "scanTimeoutEnsureDeviceNearby": - "Scannen is verlopen, zorg ervoor dat het apparaat in de buurt is", + "scanTimeoutEnsureDeviceNearby": "Scannen is verlopen, zorg ervoor dat het apparaat in de buurt is", "networkError": "Netwerkfout", - "authorizationFailedCheckCode": - "Autorisatie mislukt, controleer of de autorisatiecode correct is", + "authorizationFailedCheckCode": "Autorisatie mislukt, controleer of de autorisatiecode correct is", "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', + '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...', + 'needManualBindingAuthCode': 'Handmatige koppelingsautorisatiecode vereist...', 'pairingSuccessful': 'Koppelen geslaagd!', 'enableBluetooth': 'Bluetooth inschakelen', 'grantPermissions': 'Toestemmingen verlenen', @@ -756,32 +1266,35 @@ const Map nlNL = { 'verificationFailedRetry': 'Verificatie mislukt, probeer het opnieuw', 'invalidDeviceAddress': 'Ongeldig apparaatadres', 'bleDeviceAssociationFailed': 'Associatie van BLE-apparaat mislukt', - 'deviceAssociationFailedRetry': - 'Apparaatassociatie mislukt, probeer het opnieuw', + 'deviceAssociationFailedRetry': 'Apparaatassociatie mislukt, probeer het opnieuw', 'bleConnectionTimeoutRetry': 'BLE-verbindingstime-out, probeer het opnieuw', 'blePairingStartupFailed': 'Starten van BLE-koppeling mislukt', 'bleConnectionFailed': 'BLE-verbinding mislukt', - 'deviceAuthorizationFailedCheckCode': - 'Apparaatautorisatie mislukt, controleer de autorisatiecode', + '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', - 'feedbackDescription': - 'Beschrijf het probleem dat u tegenkwam of uw suggestie', + 'feedbackDescription': 'Beschrijf het probleem dat u tegenkwam of uw suggestie', 'feedbackHint': 'Voer uw feedback in...', 'feedbackRequired': 'Voer de inhoud van de feedback in', 'contactInfo': 'Contactgegevens', 'contactHint': 'E-mail/telefoon, zodat we contact met u kunnen opnemen', 'submit': 'Indienen', - 'feedbackSubmitSuccess': - 'Feedback succesvol ingediend, bedankt voor uw feedback!', - 'feedbackSubmitFailed': - 'Indienen van feedback mislukt, probeer het later opnieuw', + 'feedbackSubmitSuccess': 'Feedback succesvol ingediend, bedankt voor uw feedback!', + 'feedbackSubmitFailed': 'Indienen van feedback mislukt, probeer het later opnieuw', // OTA升级模块 - "upgradeExitConfirm": - "Upgrade wordt uitgevoerd, afsluiten zal het proces onderbreken, weet u zeker dat u wilt afsluiten?", + "upgradeExitConfirm": "Upgrade wordt uitgevoerd, afsluiten zal het proces onderbreken, weet u zeker dat u wilt afsluiten?", "deviceModel": "Apparaatmodel", "unknownDevice": "Onbekend apparaat", "currentFirmwareVersion": "Huidige firmwareversie", @@ -793,19 +1306,22 @@ 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", "updateContent": "Update-inhoud", - "removeEarbudsEnsureBattery": - "Haal beide oortjes eruit en zorg ervoor dat de batterij van beide meer dan 20% is", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..c7b2d4768 100644 --- a/lib/core/translations/language/pl_pl.dart +++ b/lib/core/translations/language/pl_pl.dart @@ -71,8 +71,7 @@ const Map plPL = { // 登录页 "welcome": "Witaj", - "loginTips": - "Zaloguj się lub zarejestruj za pomocą numeru telefonu lub adresu e-mail", + "loginTips": "Zaloguj się lub zarejestruj za pomocą numeru telefonu lub adresu e-mail", "accountNumber": "Numer telefonu lub e-mail", "verificationCode": "Kod weryfikacyjny", "getCode": "Pobierz kod", @@ -91,8 +90,7 @@ const Map plPL = { "tip": "Wskazówka", "pleaseEnterCompleteCode": "Wprowadź pełny kod weryfikacyjny", "loginFailed": "Logowanie nie powiodło się, spróbuj ponownie", - 'pleaseAcceptPrivacyPolicy': - 'Najpierw przeczytaj i zaakceptuj Politykę prywatności oraz Umowę użytkownika', + 'pleaseAcceptPrivacyPolicy': 'Najpierw przeczytaj i zaakceptuj Politykę prywatności oraz Umowę użytkownika', "enterVerificationCode": "Wprowadź kod weryfikacyjny", "verificationCodeSentTo": "Kod weryfikacyjny został wysłany na", "resendVerificationCode": "Wyślij kod weryfikacyjny ponownie", @@ -100,12 +98,14 @@ 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", @@ -115,16 +115,13 @@ const Map plPL = { "signal": "Sygnał", "deviceId": "ID urządzenia", "firmwareVersion": "Wersja oprogramowania układowego", - "disconnectedDevice": - "Brak podłączonego urządzenia, kliknij przycisk poniżej, aby połączyć", + "disconnectedDevice": "Brak podłączonego urządzenia, kliknij przycisk poniżej, aby połączyć", "connectDevice": "Połącz urządzenie", "topAiExperiences": "Najlepsze doświadczenia z AI", "aiAssistant": "Wszechstronny asystent AI", - "aiAssistantInfo": - "Ekskluzywny konsultant 24/7, odpowiada na pytania, udziela sugestii", + "aiAssistantInfo": "Ekskluzywny konsultant 24/7, odpowiada na pytania, udziela sugestii", "interpretation": "Tłumaczenie symultaniczne", - "simultaneousInterpretationInfo": - "Tłumaczenie w czasie rzeczywistym na ponad 80 języków, bezproblemowe podróże zagraniczne", + "simultaneousInterpretationInfo": "Tłumaczenie w czasie rzeczywistym na ponad 80 języków, bezproblemowe podróże zagraniczne", "aiCompanion": "Towarzysz rodzinny", "aiCompanionInfo": "Rozumie Cię, ciepłe towarzystwo", "homeSlogan": "Łącząc świat, przekraczając dźwięk", @@ -133,11 +130,9 @@ const Map plPL = { "unsystemSetup": "Przejdź do ustawień systemowych", "talkLater": "Później", "initializing": "Inicjalizacja...", - "bluetoothInitializationFailure": - "Inicjalizacja usługi Bluetooth nie powiodła się", + "bluetoothInitializationFailure": "Inicjalizacja usługi Bluetooth nie powiodła się", "checkingPermissions": "Sprawdzanie uprawnień...", - "lackPermissions": - "Brak uprawnień Bluetooth i jest wymagana prawo dostępu do lokalizacji", + "lackPermissions": "Brak uprawnień Bluetooth i jest wymagana prawo dostępu do lokalizacji", "searchingDevice": "Wyszukiwanie urządzeń...", "findConnectedDevice": "Znaleziono podłączone urządzenie", "notFound": "Nie znaleziono podłączonego urządzenia Bluetooth", @@ -159,8 +154,7 @@ const Map plPL = { 'chargingCase': 'Etui ładujące', 'left': 'Lewo', 'right': 'Prawo', - 'checkConnectionStatusFailed': - 'Sprawdzenie stanu połączenia nie powiodło się', + 'checkConnectionStatusFailed': 'Sprawdzenie stanu połączenia nie powiodło się', // 发现页 "searchAi": "Szukaj funkcji AI...", @@ -175,18 +169,204 @@ const Map plPL = { "faceToFaceTranslation": "Tłumaczenie twarzą w twarz", 'audioVideoTranslation': 'Tłumaczenie audio i wideo', 'callTranslation': 'Tłumaczenie rozmów', - "simultaneousTranslationInfo": - "Tłumaczenie w czasie rzeczywistym na ponad 80 języków", + "simultaneousTranslationInfo": "Tłumaczenie w czasie rzeczywistym na ponad 80 języków", "aiGirlfriend": "Dziewczyna AI", "aiGirlfriendInfo": "Inteligentny towarzysz, rozmawiaj w dowolnym momencie", "healthConsultant": "Wielofunkcyjny czat AI", "healthConsultantInfo": "Oferuje więcej funkcji czatu AI", "conferenceAssistant": "Asystent spotkań biznesowych", - "conferenceAssistantInfo": - "Zapisywanie protokołów w czasie rzeczywistym, tłumaczenie wielojęzyczne", + "conferenceAssistantInfo": "Zapisywanie protokołów w czasie rzeczywistym, tłumaczenie wielojęzyczne", "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 +381,225 @@ 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 +611,8 @@ 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", @@ -229,11 +621,9 @@ const Map plPL = { "voiceServiceInfo": "Wybierz usługę rozpoznawania i syntezy mowy", "selectVoiceService": "Wybierz usługę głosową", "azureVoiceService": "Usługa głosowa Azure", - "azureVoiceServiceInfo": - "Usługa głosowa w chmurze Microsoftu, obsługuje wysokiej jakości syntezę i rozpoznawanie mowy", + "azureVoiceServiceInfo": "Usługa głosowa w chmurze Microsoftu, obsługuje wysokiej jakości syntezę i rozpoznawanie mowy", "flutterVoiceService": "Lokalna usługa głosowa Flutter", - "flutterVoiceServiceInfo": - "Lokalna usługa głosowa urządzenia, można używać bez połączenia z internetem", + "flutterVoiceServiceInfo": "Lokalna usługa głosowa urządzenia, można używać bez połączenia z internetem", 'timbreService': 'Usługa barwy głosu', 'timbreServiceInfo': 'Wybierz usługę syntezy mowy z barwą głosu', 'defaultTimbre': 'Domyślna barwa głosu', @@ -244,8 +634,7 @@ const Map plPL = { 'pleaseRead': 'Przeczytaj na głos', 'completeRecording': 'Zakończ nagrywanie', "firmwareUpgrade": "Aktualizacja oprogramowania układowego", - "bleHeadsetFirmwareUpgrade": - "Aktualizacja wersji oprogramowania układowego słuchawek BLE", + "bleHeadsetFirmwareUpgrade": "Aktualizacja wersji oprogramowania układowego słuchawek BLE", "deviceManagement": "Zarządzanie urządzeniami", "manageConnectedDevices": "Zarządzaj sparowanymi urządzeniami Bluetooth", @@ -256,25 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Doświadcz funkcji inteligentnej interakcji głosowej (podgląd funkcji)", + "realtimeVoiceChatInfo": "Doświadcz funkcji inteligentnej interakcji głosowej (podgląd funkcji)", "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 @@ -301,9 +695,22 @@ const Map plPL = { "listeningToYou": "Słucham Cię...", "processing": "Przetwarzanie...", "loadMoreMessages": "Załaduj więcej wiadomości...", - "loadFailedClickRetry": - "Ładowanie nie powiodło się, kliknij, aby spróbować ponownie", + "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' @@ -314,21 +721,16 @@ const Map plPL = { '• Sterować funkcjami słuchawek\n\n' 'W czym mogę Ci pomóc?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': - 'Funkcja rozpoznawania mowy wymaga dostępu do mikrofonu.', - 'voiceTranslationPermissionText': - 'Funkcja rozpoznawania i tłumaczenia mowy wymaga dostępu do mikrofonu.', - 'phoneCallPermissionText': - 'Funkcja dzwonienia wymaga dostępu do mikrofonu do rozmów głosowych.', - 'permissionDeniedText': - 'Trwale odmówiłeś dostępu do mikrofonu, przejdź do ustawień systemowych, aby go włączyć.', + 'voiceRecognitionPermissionText': 'Funkcja rozpoznawania mowy wymaga dostępu do mikrofonu.', + 'voiceTranslationPermissionText': 'Funkcja rozpoznawania i tłumaczenia mowy wymaga dostępu do mikrofonu.', + 'phoneCallPermissionText': 'Funkcja dzwonienia wymaga dostępu do mikrofonu do rozmów głosowych.', + 'permissionDeniedText': 'Trwale odmówiłeś dostępu do mikrofonu, przejdź do ustawień systemowych, aby go włączyć.', 'startVoiceInput': 'Rozpocznij wprowadzanie głosowe', - 'startPhoneCallMode': - 'Rozpocznij tryb dzwonienia, rozpocznij wprowadzanie głosowe', + 'startPhoneCallMode': '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', @@ -336,18 +738,17 @@ const Map plPL = { 'report': 'Zgłoś', 'submitSuccess': 'Przesłano pomyślnie', 'submitFailed': 'Przesyłanie nie powiodło się', - 'reportSubmitted': - 'Zgłoszenie zostało przesłane, zajmiemy się nim jak najszybciej', + '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', 'illegalCriminal': 'Niezgodne z prawem/Przestępcze', 'privacyRelated': 'Związane z prywatnością', - 'copyrightViolation': - 'Naruszenie moich praw autorskich, dobrego imienia itp.', + 'copyrightViolation': 'Naruszenie moich praw autorskich, dobrego imienia itp.', 'other': 'Inne', - 'reportDescriptionHint': - 'Chcielibyśmy wiedzieć, dlaczego zgłaszasz, możesz opisać problem, z którym się spotkałeś.', + '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 +759,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', @@ -377,24 +778,15 @@ const Map plPL = { 'highest': 'Najwyższa', 'lowest': 'Najniższa', 'futureForecast': 'Prognoza na przyszłość', - 'hotWeatherTip': - 'Dzisiaj jest gorąco, uważaj na udar cieplny i pij dużo wody', - 'coldWeatherTip': - 'Dzisiaj jest niska temperatura, ubierz się ciepło, wychodząc, aby się nie przeziębić', - 'rainyWeatherTip': - 'Dzisiaj pada deszcz, weź ze sobą parasol, wychodząc, i uważaj na drodze', - 'snowyWeatherTip': - 'Dzisiaj pada śnieg, droga jest śliska, uważaj i ubierz się ciepło', - 'foggyWeatherTip': - 'Dzisiaj jest mgła, widoczność jest ograniczona, noś maseczkę, wychodząc', - 'windyWeatherTip': - 'Dzisiaj wieje silny wiatr, uważaj, wychodząc, i zabezpiecz swoje rzeczy', - 'sunnyWeatherTip': - 'Dzisiaj jest słonecznie i silne promieniowanie UV, używaj kremu z filtrem, wychodząc', - 'temperatureDifferenceTip': - 'Dzisiaj jest duża różnica temperatur między dniem a nocą, dostosuj ubranie', - 'comfortableWeatherTip': - 'Dzisiaj jest przyjemna pogoda, świetny czas na aktywności na świeżym powietrzu', + 'hotWeatherTip': 'Dzisiaj jest gorąco, uważaj na udar cieplny i pij dużo wody', + 'coldWeatherTip': 'Dzisiaj jest niska temperatura, ubierz się ciepło, wychodząc, aby się nie przeziębić', + 'rainyWeatherTip': 'Dzisiaj pada deszcz, weź ze sobą parasol, wychodząc, i uważaj na drodze', + 'snowyWeatherTip': 'Dzisiaj pada śnieg, droga jest śliska, uważaj i ubierz się ciepło', + 'foggyWeatherTip': 'Dzisiaj jest mgła, widoczność jest ograniczona, noś maseczkę, wychodząc', + 'windyWeatherTip': 'Dzisiaj wieje silny wiatr, uważaj, wychodząc, i zabezpiecz swoje rzeczy', + 'sunnyWeatherTip': 'Dzisiaj jest słonecznie i silne promieniowanie UV, używaj kremu z filtrem, wychodząc', + 'temperatureDifferenceTip': 'Dzisiaj jest duża różnica temperatur między dniem a nocą, dostosuj ubranie', + 'comfortableWeatherTip': 'Dzisiaj jest przyjemna pogoda, świetny czas na aktywności na świeżym powietrzu', "monday": "Pon", "tuesday": "Wt", "wednesday": "Śr", @@ -402,6 +794,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", @@ -435,29 +838,26 @@ const Map plPL = { "logout": "Wyloguj się", "logoutTips": "Czy na pewno chcesz wylogować się z obecnego konta?", 'deleteAccount': 'Usuń konto', - 'deleteAccountTips': - 'Czy na pewno chcesz trwale usunąć swoje konto? Tej operacji nie można cofnąć.', + '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': - 'Błąd połączenia sieciowego, sprawdź ustawienia sieci i spróbuj ponownie', - 'serverTemporarilyUnavailable': - 'Serwer jest tymczasowo niedostępny, spróbuj ponownie później', + 'networkConnectionFailed': 'Błąd połączenia sieciowego, sprawdź ustawienia sieci i spróbuj ponownie', + 'serverTemporarilyUnavailable': 'Serwer jest tymczasowo niedostępny, spróbuj ponownie później', 'loginExpiredPleaseRelogin': 'Twoja sesja wygasła, zaloguj się ponownie', - 'noPermissionForThisOperation': - 'Nie masz uprawnień do wykonania tej operacji', + 'noPermissionForThisOperation': 'Nie masz uprawnień do wykonania tej operacji', 'requestedResourceNotFound': 'Żądany zasób nie został znaleziony', - 'imageProcessingFailedPleaseReselect': - 'Przetwarzanie obrazu nie powiodło się, wybierz inny obraz', + 'imageProcessingFailedPleaseReselect': 'Przetwarzanie obrazu nie powiodło się, wybierz inny obraz', 'operationFailedPleaseRetry': 'Operacja nie powiodła się, spróbuj ponownie', 'serverReturnedError': 'Serwer zwrócił błąd', 'serverError': 'Błąd serwera', - 'networkConnectionFailedCheckSettings': - 'Błąd połączenia sieciowego, sprawdź ustawienia sieci', - 'serverInternalErrorRetryLater': - 'Wewnętrzny błąd serwera, spróbuj ponownie później', + 'networkConnectionFailedCheckSettings': 'Błąd połączenia sieciowego, sprawdź ustawienia sieci', + 'serverInternalErrorRetryLater': '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', @@ -467,39 +867,44 @@ const Map plPL = { 'loggedOut': 'Wylogowano', 'logoutFailedRetry': 'Wylogowanie nie powiodło się, spróbuj ponownie', 'accountPermanentlyDeleted': 'Konto zostało trwale usunięte', - 'deleteAccountFailedRetry': - 'Usuwanie konta nie powiodło się, spróbuj ponownie', + 'deleteAccountFailedRetry': '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', - 'allUserDataClearSuccess': - 'Wszystkie dane użytkownika zostały pomyślnie wyczyszczone', - 'accountServiceInitialized': 'Usługa konta została zainicjowana', + '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', // 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', - 'calendarWritePermissionDesc': - 'Używane do tworzenia wydarzeń i przypomnień w kalendarzu', - 'calendarFullAccessPermissionDesc': - 'Używane do odczytu i zarządzania wydarzeniami i przypomnieniami w kalendarzu', - 'locationPermissionDesc': - 'Używane do uzyskiwania informacji o bieżącej lokalizacji', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Używane do tworzenia wydarzeń i przypomnień w kalendarzu', + 'calendarFullAccessPermissionDesc': 'Używane do odczytu i zarządzania wydarzeniami i przypomnieniami w kalendarzu', + 'locationPermissionDesc': 'Używane do uzyskiwania informacji o bieżącej lokalizacji', 'appFunctionNeeds': 'Funkcja aplikacji wymaga', 'authorized': 'Autoryzowano', 'unauthorized': 'Nieautoryzowano', @@ -508,31 +913,65 @@ const Map plPL = { 'unknownStatus': 'Nieznany stan', 'permissionGranted': 'Uprawnienie przyznane', 'permissionRequestError': 'Błąd podczas żądania uprawnienia', - 'phonePermissionDetailDesc': - 'Funkcja dzwonienia wymaga uprawnień telefonicznych', + 'phonePermissionDetailDesc': 'Funkcja dzwonienia wymaga uprawnień telefonicznych', 'smsPermissionDetailDesc': 'Funkcja wysyłania SMS-ów wymaga uprawnień SMS', - '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', - '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ć', + '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ę', - 'cannotOpenAppStore': - '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', + '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ć', // 无法打开应用商店提示 + 'updateErrorRetry': 'Wystąpił błąd podczas aktualizacji, spróbuj ponownie później', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -641,8 +1080,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,18 +1105,76 @@ 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ąć.", + "clearHistoryConfirm": "Czy na pewno chcesz wyczyścić całą historię tłumaczeń? Tej operacji nie można cofnąć.", "unknownLanguage": "Nieznany język", "deleteSessionRecord": "Usuń zapis sesji", - "deleteSessionConfirm": - "Czy na pewno chcesz usunąć wszystkie zapisy tłumaczeń dla tej sesji? Tej operacji nie można cofnąć.", + "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...", @@ -677,8 +1189,7 @@ const Map plPL = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Oryginalny zapis", "recordSummary": "Podsumowanie zapisu", - "clickToGenerateSummary": - "Kliknij przycisk poniżej, aby wygenerować podsumowanie sesji", + "clickToGenerateSummary": "Kliknij przycisk poniżej, aby wygenerować podsumowanie sesji", "summaryContent": "Treść podsumowania", "copied": "Skopiowano", "summaryCopiledToClipboard": "Podsumowanie skopiowano do schowka", @@ -686,11 +1197,9 @@ const Map plPL = { "summaryGenerated": "Wygenerowano podsumowanie", "generating": "Generowanie...", "regenerate": "Wygeneruj ponownie", - "summaryTimeoutMessage": - "Przekroczono czas oczekiwania na żądanie wygenerowania podsumowania, może to być spowodowane problemami z siecią lub zajętym serwerem.", + "summaryTimeoutMessage": "Przekroczono czas oczekiwania na żądanie wygenerowania podsumowania, może to być spowodowane problemami z siecią lub zajętym serwerem.", "deleteTranslationRecord": "Usuń zapis tłumaczenia", - "deleteTranslationConfirm": - "Czy na pewno chcesz usunąć ten zapis tłumaczenia? Tej operacji nie można cofnąć.", + "deleteTranslationConfirm": "Czy na pewno chcesz usunąć ten zapis tłumaczenia? Tej operacji nie można cofnąć.", "originalText": "Tekst oryginalny", "translatedText": "Tekst przetłumaczony", "sessionSummary": "Podsumowanie sesji", @@ -708,7 +1217,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...", @@ -718,38 +1227,34 @@ const Map plPL = { // 配对状态文本 "readyToPair": "Gotowy do parowania", "preparingPairingEnvironment": "Przygotowywanie środowiska do parowania...", - "connectDeepSoundViaSystemBluetooth": - "Najpierw połącz się z urządzeniem Voitrans przez systemowy Bluetooth", + "connectDeepSoundViaSystemBluetooth": "Najpierw połącz się z urządzeniem Voitrans przez systemowy Bluetooth", "deviceBindingConfirm": "Potwierdzenie powiązania urządzenia...", "establishingDeviceAssociation": "Ustanawianie skojarzenia urządzenia...", "waitingCompletePairing": "Poczekaj, kończenie parowania...", - "pairingSuccessRedirecting": - "Parowanie zakończone sukcesem! Przekierowywanie na stronę główną...", + "pairingSuccessRedirecting": "Parowanie zakończone sukcesem! Przekierowywanie na stronę główną...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Upewnij się, że jesteś połączony z urządzeniem Voitrans", - "deviceAlreadyBoundToOtherAccount": - "To urządzenie jest już powiązane z innym kontem", - "deviceAssociationFailed": - "Skojarzenie urządzenia nie powiodło się, spróbuj ponownie", - "scanTimeoutEnsureDeviceNearby": - "Przekroczono czas skanowania, upewnij się, że urządzenie jest w pobliżu", + "ensureConnectedDeepSoundDevice": "Upewnij się, że jesteś połączony z urządzeniem Voitrans", + "deviceAlreadyBoundToOtherAccount": "To urządzenie jest już powiązane z innym kontem", + "deviceAssociationFailed": "Skojarzenie urządzenia nie powiodło się, spróbuj ponownie", + "scanTimeoutEnsureDeviceNearby": "Przekroczono czas skanowania, upewnij się, że urządzenie jest w pobliżu", "networkError": "Błąd sieci", - "authorizationFailedCheckCode": - "Autoryzacja nie powiodła się, sprawdź, czy kod autoryzacji jest poprawny", + "authorizationFailedCheckCode": "Autoryzacja nie powiodła się, sprawdź, czy kod autoryzacji jest poprawny", "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', + '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...', + 'needManualBindingAuthCode': 'Wymagany jest kod autoryzacji do ręcznego powiązania...', 'pairingSuccessful': 'Parowanie zakończone sukcesem!', 'enableBluetooth': 'Włącz Bluetooth', 'grantPermissions': 'Udziel uprawnień', @@ -761,14 +1266,20 @@ const Map plPL = { 'verificationFailedRetry': 'Weryfikacja nie powiodła się, spróbuj ponownie', 'invalidDeviceAddress': 'Nieprawidłowy adres urządzenia', 'bleDeviceAssociationFailed': 'Skojarzenie urządzenia BLE nie powiodło się', - 'deviceAssociationFailedRetry': - 'Skojarzenie urządzenia nie powiodło się, spróbuj ponownie', - 'bleConnectionTimeoutRetry': - 'Przekroczono czas oczekiwania na połączenie BLE, spróbuj ponownie', + 'deviceAssociationFailedRetry': 'Skojarzenie urządzenia nie powiodło się, spróbuj ponownie', + 'bleConnectionTimeoutRetry': 'Przekroczono czas oczekiwania na połączenie BLE, spróbuj ponownie', 'blePairingStartupFailed': 'Uruchomienie parowania BLE nie powiodło się', 'bleConnectionFailed': 'Połączenie BLE nie powiodło się', - 'deviceAuthorizationFailedCheckCode': - 'Autoryzacja urządzenia nie powiodła się, sprawdź kod autoryzacji', + '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", @@ -779,14 +1290,11 @@ const Map plPL = { 'contactInfo': 'Dane kontaktowe', 'contactHint': 'E-mail/Telefon, abyśmy mogli się z Tobą skontaktować', 'submit': 'Prześlij', - 'feedbackSubmitSuccess': - 'Opinia przesłana pomyślnie, dziękujemy za Twoją opinię!', - 'feedbackSubmitFailed': - 'Przesyłanie opinii nie powiodło się, spróbuj ponownie później', + 'feedbackSubmitSuccess': 'Opinia przesłana pomyślnie, dziękujemy za Twoją opinię!', + 'feedbackSubmitFailed': 'Przesyłanie opinii nie powiodło się, spróbuj ponownie później', // OTA升级模块 - "upgradeExitConfirm": - "Trwa aktualizacja, wyjście przerwie proces, czy na pewno chcesz wyjść?", + "upgradeExitConfirm": "Trwa aktualizacja, wyjście przerwie proces, czy na pewno chcesz wyjść?", "deviceModel": "Model urządzenia", "unknownDevice": "Nieznane urządzenie", "currentFirmwareVersion": "Bieżąca wersja oprogramowania układowego", @@ -798,20 +1306,22 @@ const Map plPL = { "connectionFailed": "Połączenie nie powiodło się", "retryConnection": "Spróbuj połączyć ponownie", "ota_updateNow": "Zaktualizuj teraz", - "keepConnectedDontClose": - "Utrzymuj urządzenie w stanie połączenia, nie zamykaj aplikacji", + "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", "charging": "Ładowanie", "updateContent": "Treść aktualizacji", - "removeEarbudsEnsureBattery": - "Wyjmij obie słuchawki i upewnij się, że poziom naładowania baterii obu wynosi ponad 20%", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..7a70308cc 100644 --- a/lib/core/translations/language/pt_pt.dart +++ b/lib/core/translations/language/pt_pt.dart @@ -71,8 +71,7 @@ const Map ptPT = { // 登录页 "welcome": "Bem-vindo", - "loginTips": - "Faça login ou registe-se com o seu número de telemóvel ou e-mail", + "loginTips": "Faça login ou registe-se com o seu número de telemóvel ou e-mail", "accountNumber": "Número de Telemóvel ou E-mail", "verificationCode": "Código de Verificação", "getCode": "Obter Código", @@ -91,8 +90,7 @@ const Map ptPT = { "tip": "Dica", "pleaseEnterCompleteCode": "Introduza o código de verificação completo", "loginFailed": "Falha no login, tente novamente", - 'pleaseAcceptPrivacyPolicy': - 'Por favor, leia e aceite primeiro a Política de Privacidade e o Contrato do Utilizador', + 'pleaseAcceptPrivacyPolicy': 'Por favor, leia e aceite primeiro a Política de Privacidade e o Contrato do Utilizador', "enterVerificationCode": "Introduza o Código de Verificação", "verificationCodeSentTo": "Código de verificação enviado para", "resendVerificationCode": "Reenviar código de verificação", @@ -100,12 +98,14 @@ 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", @@ -115,30 +115,24 @@ const Map ptPT = { "signal": "Sinal", "deviceId": "ID do Dispositivo", "firmwareVersion": "Versão do Firmware", - "disconnectedDevice": - "Nenhum dispositivo conectado, clique no botão abaixo para conectar", + "disconnectedDevice": "Nenhum dispositivo conectado, clique no botão abaixo para conectar", "connectDevice": "Conectar Dispositivo", "topAiExperiences": "Melhores Experiências de IA", "aiAssistant": "Assistente IA Completo", - "aiAssistantInfo": - "Consultor exclusivo 24/7, responde a perguntas, dá sugestões", + "aiAssistantInfo": "Consultor exclusivo 24/7, responde a perguntas, dá sugestões", "interpretation": "Interpretação Simultânea", - "simultaneousInterpretationInfo": - "Tradução em tempo real para mais de 80 idiomas, viagens ao estrangeiro sem preocupações", + "simultaneousInterpretationInfo": "Tradução em tempo real para mais de 80 idiomas, viagens ao estrangeiro sem preocupações", "aiCompanion": "Companheiro Familiar", "aiCompanionInfo": "Entende-o, companhia calorosa", "homeSlogan": "Conectando o mundo, transcendendo o som", - "turnEarphones": - "Por favor, abra a caixa de carregamento dos auriculares e coloque os auriculares nos seus ouvidos", + "turnEarphones": "Por favor, abra a caixa de carregamento dos auriculares e coloque os auriculares nos seus ouvidos", "currentlyConnected": "Atualmente conectado:", "unsystemSetup": "Ir para as definições do sistema", "talkLater": "Mais Tarde", "initializing": "A inicializar...", - "bluetoothInitializationFailure": - "Falha na inicialização do serviço Bluetooth", + "bluetoothInitializationFailure": "Falha na inicialização do serviço Bluetooth", "checkingPermissions": "A verificar permissões...", - "lackPermissions": - "Faltam permissões de Bluetooth e é necessário permitir o acesso à localização", + "lackPermissions": "Faltam permissões de Bluetooth e é necessário permitir o acesso à localização", "searchingDevice": "A procurar dispositivos...", "findConnectedDevice": "Dispositivo conectado encontrado", "notFound": "Nenhum dispositivo Bluetooth conectado encontrado", @@ -146,16 +140,14 @@ const Map ptPT = { "connectedDevice": "Conectado ao dispositivo:", "failedRefreshDevice": "Falha ao atualizar o dispositivo", "noDeviceFound": "Nenhum dispositivo conectado encontrado", - "failedDeviceInformation": - "Não foi possível obter informações do dispositivo", + "failedDeviceInformation": "Não foi possível obter informações do dispositivo", "unknownEquipment": "Equipamento Desconhecido", "zeroSignal": "Sem Sinal", "good": "Bom", "fine": "Muito Bom", "excellent": "Excelente", "unknown": "Desconhecido", - 'bluetoothTurnedOff': - 'O Bluetooth está desligado, por favor, ligue o Bluetooth', + 'bluetoothTurnedOff': 'O Bluetooth está desligado, por favor, ligue o Bluetooth', 'bluetoothOff': 'Bluetooth Desligado', 'leftEar': 'Auricular Esquerdo', 'rightEar': 'Auricular Direito', @@ -177,27 +169,205 @@ const Map ptPT = { "faceToFaceTranslation": "Tradução Cara a Cara", 'audioVideoTranslation': 'Tradução de Áudio e Vídeo', 'callTranslation': 'Tradução de Chamadas', - "simultaneousTranslationInfo": - "Tradução em tempo real para mais de 80 idiomas", + "simultaneousTranslationInfo": "Tradução em tempo real para mais de 80 idiomas", "aiGirlfriend": "Namorada IA", "aiGirlfriendInfo": "Companhia inteligente, converse a qualquer momento", "healthConsultant": "Chat IA Multifuncional", "healthConsultantInfo": "Oferece mais funções de chat IA", "conferenceAssistant": "Assistente de Reunião de Negócios", - "conferenceAssistantInfo": - "Gravação de atas em tempo real, tradução multilingue", + "conferenceAssistantInfo": "Gravação de atas em tempo real, tradução multilingue", "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 +381,225 @@ 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", @@ -225,13 +607,12 @@ const Map ptPT = { "darkMode": "Modo Escuro", "darkModeInfo": "Alternar entre os temas claro e escuro da aplicação", "backups": "Cópia de Segurança e Restauro", - "backupsInfo": - "Cópia de segurança das definições e histórico de interação com IA", + "backupsInfo": "Cópia de segurança das definições e histórico de interação com IA", "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", @@ -240,11 +621,9 @@ const Map ptPT = { "voiceServiceInfo": "Selecionar serviço de reconhecimento e síntese de voz", "selectVoiceService": "Selecionar Serviço de Voz", "azureVoiceService": "Serviço de Voz Azure", - "azureVoiceServiceInfo": - "Serviço de voz na nuvem da Microsoft, suporta síntese e reconhecimento de voz de alta qualidade", + "azureVoiceServiceInfo": "Serviço de voz na nuvem da Microsoft, suporta síntese e reconhecimento de voz de alta qualidade", "flutterVoiceService": "Serviço de Voz Local Flutter", - "flutterVoiceServiceInfo": - "Serviço de voz local do dispositivo, pode ser usado sem ligação à internet", + "flutterVoiceServiceInfo": "Serviço de voz local do dispositivo, pode ser usado sem ligação à internet", 'timbreService': 'Serviço de Timbre', 'timbreServiceInfo': 'Selecionar serviço de síntese de voz com timbre', 'defaultTimbre': 'Timbre Padrão', @@ -255,8 +634,7 @@ const Map ptPT = { 'pleaseRead': 'Leia em voz alta', 'completeRecording': 'Concluir Gravação', "firmwareUpgrade": "Atualização de Firmware", - "bleHeadsetFirmwareUpgrade": - "Atualização da Versão do Firmware dos Auriculares BLE", + "bleHeadsetFirmwareUpgrade": "Atualização da Versão do Firmware dos Auriculares BLE", "deviceManagement": "Gestão de Dispositivos", "manageConnectedDevices": "Gerir dispositivos Bluetooth emparelhados", @@ -267,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Experimente a função de interação de voz inteligente (pré-visualização da função)", + "realtimeVoiceChatInfo": "Experimente a função de interação de voz inteligente (pré-visualização da função)", "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 @@ -294,8 +678,7 @@ const Map ptPT = { "inputMessage": "Introduzir mensagem...", "imListening": "A ouvir...", "canStartTalking": "Pode começar a falar", - "addQuestionAboutImage": - "Adicione uma pergunta ou descrição sobre a imagem...", + "addQuestionAboutImage": "Adicione uma pergunta ou descrição sobre a imagem...", "summarizeImageContent": "Resumir conteúdo da imagem", "extractImageText": "Extrair texto da imagem", "translateImageText": "Traduzir texto na imagem", @@ -314,6 +697,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' @@ -324,20 +721,16 @@ const Map ptPT = { '• Controlar as funções dos auriculares\n\n' 'Em que posso ajudá-lo(a)?', 'microphonePermission': 'Microfone', - 'voiceRecognitionPermissionText': - 'O reconhecimento de voz requer acesso ao microfone.', - 'voiceTranslationPermissionText': - 'O reconhecimento e tradução de voz requerem acesso ao microfone.', - 'phoneCallPermissionText': - 'Fazer chamadas requer acesso ao microfone para chamadas de voz.', - 'permissionDeniedText': - 'Negou permanentemente a permissão do microfone, por favor, vá às definições do sistema para a ativar.', + 'voiceRecognitionPermissionText': 'O reconhecimento de voz requer acesso ao microfone.', + 'voiceTranslationPermissionText': 'O reconhecimento e tradução de voz requerem acesso ao microfone.', + 'phoneCallPermissionText': 'Fazer chamadas requer acesso ao microfone para chamadas de voz.', + 'permissionDeniedText': 'Negou permanentemente a permissão do microfone, por favor, vá às definições do sistema para a ativar.', 'startVoiceInput': 'Iniciar entrada de voz', '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 +739,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', @@ -353,8 +747,8 @@ const Map ptPT = { 'privacyRelated': 'Relacionado com a Privacidade', 'copyrightViolation': 'Violação dos meus direitos de autor, reputação, etc.', 'other': 'Outro', - 'reportDescriptionHint': - 'Gostaríamos de saber o motivo da sua denúncia, pode descrever o problema que encontrou.', + '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 +759,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", @@ -384,24 +778,15 @@ const Map ptPT = { 'highest': 'Máxima', 'lowest': 'Mínima', 'futureForecast': 'Previsão Futura', - 'hotWeatherTip': - 'Hoje está calor, por favor, tenha cuidado com o golpe de calor e beba muita água', - 'coldWeatherTip': - 'Hoje a temperatura está baixa, por favor, agasalhe-se bem ao sair para evitar constipações', - 'rainyWeatherTip': - 'Hoje vai chover, por favor, leve um guarda-chuva ao sair e tenha cuidado', - 'snowyWeatherTip': - 'Hoje vai nevar, o piso está escorregadio, por favor, tenha cuidado e agasalhe-se bem', - 'foggyWeatherTip': - 'Hoje há nevoeiro, a visibilidade é reduzida, por favor, use uma máscara ao sair', - 'windyWeatherTip': - 'Hoje o vento está forte, por favor, tenha cuidado ao sair e prenda bem os seus pertences', - 'sunnyWeatherTip': - 'Hoje o sol está forte e os raios UV são intensos, por favor, use protetor solar ao sair', - 'temperatureDifferenceTip': - 'Hoje há uma grande diferença de temperatura entre o dia e a noite, por favor, ajuste a sua roupa', - 'comfortableWeatherTip': - 'Hoje o tempo está agradável, é uma ótima altura para atividades ao ar livre', + 'hotWeatherTip': 'Hoje está calor, por favor, tenha cuidado com o golpe de calor e beba muita água', + 'coldWeatherTip': 'Hoje a temperatura está baixa, por favor, agasalhe-se bem ao sair para evitar constipações', + 'rainyWeatherTip': 'Hoje vai chover, por favor, leve um guarda-chuva ao sair e tenha cuidado', + 'snowyWeatherTip': 'Hoje vai nevar, o piso está escorregadio, por favor, tenha cuidado e agasalhe-se bem', + 'foggyWeatherTip': 'Hoje há nevoeiro, a visibilidade é reduzida, por favor, use uma máscara ao sair', + 'windyWeatherTip': 'Hoje o vento está forte, por favor, tenha cuidado ao sair e prenda bem os seus pertences', + 'sunnyWeatherTip': 'Hoje o sol está forte e os raios UV são intensos, por favor, use protetor solar ao sair', + 'temperatureDifferenceTip': 'Hoje há uma grande diferença de temperatura entre o dia e a noite, por favor, ajuste a sua roupa', + 'comfortableWeatherTip': 'Hoje o tempo está agradável, é uma ótima altura para atividades ao ar livre', "monday": "Seg", "tuesday": "Ter", "wednesday": "Qua", @@ -409,6 +794,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", @@ -442,30 +838,26 @@ const Map ptPT = { "logout": "Terminar Sessão", "logoutTips": "Tem a certeza que quer terminar a sessão da conta atual?", 'deleteAccount': 'Eliminar Conta', - 'deleteAccountTips': - 'Tem a certeza que quer eliminar permanentemente a sua conta? Esta ação não pode ser revertida.', + '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': - 'Falha na ligação à rede, verifique as definições de rede e tente novamente', - 'serverTemporarilyUnavailable': - 'O servidor está temporariamente indisponível, tente novamente mais tarde', - 'loginExpiredPleaseRelogin': - 'A sua sessão expirou, por favor, inicie sessão novamente', - 'noPermissionForThisOperation': - 'Não tem permissão para realizar esta operação', + 'networkConnectionFailed': 'Falha na ligação à rede, verifique as definições de rede e tente novamente', + 'serverTemporarilyUnavailable': 'O servidor está temporariamente indisponível, tente novamente mais tarde', + 'loginExpiredPleaseRelogin': 'A sua sessão expirou, por favor, inicie sessão novamente', + 'noPermissionForThisOperation': 'Não tem permissão para realizar esta operação', 'requestedResourceNotFound': 'O recurso solicitado não foi encontrado', - 'imageProcessingFailedPleaseReselect': - 'Falha no processamento da imagem, por favor, selecione outra imagem', + 'imageProcessingFailedPleaseReselect': 'Falha no processamento da imagem, por favor, selecione outra imagem', 'operationFailedPleaseRetry': 'Operação falhou, tente novamente', 'serverReturnedError': 'O servidor retornou um erro', 'serverError': 'Erro do Servidor', - 'networkConnectionFailedCheckSettings': - 'Falha na ligação à rede, verifique as definições de rede', - 'serverInternalErrorRetryLater': - 'Erro interno do servidor, tente novamente mais tarde', + 'networkConnectionFailedCheckSettings': 'Falha na ligação à rede, verifique as definições de rede', + 'serverInternalErrorRetryLater': '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,70 +870,108 @@ 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', - 'signOutProcessError': - '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', - 'allUserDataClearSuccess': - 'Todos os dados do utilizador foram limpos com sucesso', - 'accountServiceInitialized': 'Serviço de Conta inicializado', + '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', // 登出过程发生错误 + 'deleteAccountProcessError': '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', // 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', - 'calendarWritePermissionDesc': - 'Usado para criar eventos e lembretes no calendário', - 'calendarFullAccessPermissionDesc': - 'Usado para ler e gerir eventos e lembretes do calendário', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Usado para criar eventos e lembretes no calendário', + 'calendarFullAccessPermissionDesc': 'Usado para ler e gerir eventos e lembretes do calendário', 'locationPermissionDesc': 'Usado para obter informações da localização atual', 'appFunctionNeeds': 'A função da aplicação precisa', 'authorized': 'Autorizado', 'unauthorized': 'Não Autorizado', - 'needOpenInSystemSettings': - 'Precisa de ser ativado nas definições do sistema', + 'needOpenInSystemSettings': 'Precisa de ser ativado nas definições do sistema', 'partialAuthorization': 'Autorização Parcial', 'unknownStatus': 'Estado Desconhecido', 'permissionGranted': 'Permissão concedida', 'permissionRequestError': 'Erro ao solicitar permissão', - 'phonePermissionDetailDesc': - 'A função de chamada requer permissão de telefone', + 'phonePermissionDetailDesc': 'A função de chamada requer permissão de telefone', 'smsPermissionDetailDesc': 'A função de envio de SMS requer permissão de SMS', - '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', - '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', + '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', - 'cannotOpenAppStore': - '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', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Ocorreu um erro durante a atualização, por favor, tente novamente mais tarde', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -650,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Tem a certeza que quer limpar todo o histórico de traduções? Esta ação não pode ser revertida.", "unknownLanguage": "Idioma Desconhecido", "deleteSessionRecord": "Eliminar Registo da Sessão", - "deleteSessionConfirm": - "Tem a certeza que quer eliminar todos os registos de tradução desta sessão? Esta ação não pode ser revertida.", + "deleteSessionConfirm": "Tem a certeza que quer eliminar todos os registos de tradução desta sessão? Esta ação não pode ser revertida.", + + // 图片翻译模块(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", - // 翻译录音文件列表页 (translation_list_view.dart) + // 翻译录音文件列表页 "translateAudioFiles": "Traduzir Ficheiros de Áudio", "noAudioFiles": "Ainda não há ficheiros de áudio", "calculating": "A calcular...", @@ -686,8 +1189,7 @@ const Map ptPT = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Registo Original", "recordSummary": "Resumo do Registo", - "clickToGenerateSummary": - "Clique no botão abaixo para gerar um resumo da sessão", + "clickToGenerateSummary": "Clique no botão abaixo para gerar um resumo da sessão", "summaryContent": "Conteúdo do Resumo", "copied": "Copiado", "summaryCopiledToClipboard": "Resumo copiado para a área de transferência", @@ -695,11 +1197,9 @@ const Map ptPT = { "summaryGenerated": "Resumo gerado", "generating": "A gerar...", "regenerate": "Regenerar", - "summaryTimeoutMessage": - "O pedido de geração de resumo expirou, pode ser devido a problemas de rede ou servidor ocupado.", + "summaryTimeoutMessage": "O pedido de geração de resumo expirou, pode ser devido a problemas de rede ou servidor ocupado.", "deleteTranslationRecord": "Eliminar Registo de Tradução", - "deleteTranslationConfirm": - "Tem a certeza que quer eliminar este registo de tradução? Esta ação não pode ser revertida.", + "deleteTranslationConfirm": "Tem a certeza que quer eliminar este registo de tradução? Esta ação não pode ser revertida.", "originalText": "Texto Original", "translatedText": "Texto Traduzido", "sessionSummary": "Resumo da Sessão", @@ -717,7 +1217,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...", @@ -727,57 +1227,59 @@ const Map ptPT = { // 配对状态文本 "readyToPair": "Pronto para emparelhar", "preparingPairingEnvironment": "A preparar ambiente de emparelhamento...", - "connectDeepSoundViaSystemBluetooth": - "Por favor, conecte-se primeiro ao dispositivo Voitrans através do Bluetooth do sistema", + "connectDeepSoundViaSystemBluetooth": "Por favor, conecte-se primeiro ao dispositivo Voitrans através do Bluetooth do sistema", "deviceBindingConfirm": "Confirmação de vinculação do dispositivo...", "establishingDeviceAssociation": "A estabelecer associação do dispositivo...", "waitingCompletePairing": "Aguarde, a concluir o emparelhamento...", - "pairingSuccessRedirecting": - "Emparelhamento bem-sucedido! A redirecionar para a página inicial...", + "pairingSuccessRedirecting": "Emparelhamento bem-sucedido! A redirecionar para a página inicial...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Certifique-se de que está conectado a um dispositivo Voitrans", - "deviceAlreadyBoundToOtherAccount": - "Este dispositivo já está vinculado a outra conta", - "deviceAssociationFailed": - "Falha na associação do dispositivo, tente novamente", - "scanTimeoutEnsureDeviceNearby": - "Tempo de digitalização esgotado, certifique-se de que o dispositivo está por perto", + "ensureConnectedDeepSoundDevice": "Certifique-se de que está conectado a um dispositivo Voitrans", + "deviceAlreadyBoundToOtherAccount": "Este dispositivo já está vinculado a outra conta", + "deviceAssociationFailed": "Falha na associação do dispositivo, tente novamente", + "scanTimeoutEnsureDeviceNearby": "Tempo de digitalização esgotado, certifique-se de que o dispositivo está por perto", "networkError": "Erro de Rede", - "authorizationFailedCheckCode": - "Falha na autorização, verifique se o código de autorização está correto", + "authorizationFailedCheckCode": "Falha na autorização, verifique se o código de autorização está correto", "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', + '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...', + 'needManualBindingAuthCode': 'É necessário um código de autorização de vinculação manual...', 'pairingSuccessful': 'Emparelhamento bem-sucedido!', 'enableBluetooth': 'Ativar Bluetooth', 'grantPermissions': 'Conceder Permissões', 'retryAssociation': 'Tentar Associação Novamente', 'retryAuthorization': 'Tentar Autorização Novamente', - 'pleaseGrantNecessaryPermissions': - 'Por favor, conceda as permissões necessárias', + 'pleaseGrantNecessaryPermissions': 'Por favor, conceda as permissões necessárias', 'checkFailedRetry': 'Verificação falhou, tente novamente', 'pleaseConnectDeepSoundDevice': 'Por favor, conecte um dispositivo Voitrans', 'verificationFailedRetry': 'Verificação falhou, tente novamente', 'invalidDeviceAddress': 'Endereço de dispositivo inválido', 'bleDeviceAssociationFailed': 'Falha na associação do dispositivo BLE', - 'deviceAssociationFailedRetry': - 'Falha na associação do dispositivo, tente novamente', + 'deviceAssociationFailedRetry': 'Falha na associação do dispositivo, tente novamente', 'bleConnectionTimeoutRetry': 'Tempo de conexão BLE esgotado, tente novamente', 'blePairingStartupFailed': 'Falha no início do emparelhamento BLE', 'bleConnectionFailed': 'Falha na conexão BLE', - 'deviceAuthorizationFailedCheckCode': - 'Falha na autorização do dispositivo, verifique o código de autorização', + '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", @@ -788,14 +1290,11 @@ const Map ptPT = { 'contactInfo': 'Informações de Contacto', 'contactHint': 'E-mail/Telemóvel, para que o possamos contactar', 'submit': 'Enviar', - 'feedbackSubmitSuccess': - 'Feedback enviado com sucesso, obrigado pelo seu feedback!', - 'feedbackSubmitFailed': - 'Falha ao enviar o feedback, tente novamente mais tarde', + 'feedbackSubmitSuccess': 'Feedback enviado com sucesso, obrigado pelo seu feedback!', + 'feedbackSubmitFailed': 'Falha ao enviar o feedback, tente novamente mais tarde', // OTA升级模块 - "upgradeExitConfirm": - "Atualização em andamento, sair irá interromper o processo, tem a certeza que quer sair?", + "upgradeExitConfirm": "Atualização em andamento, sair irá interromper o processo, tem a certeza que quer sair?", "deviceModel": "Modelo do Dispositivo", "unknownDevice": "Dispositivo Desconhecido", "currentFirmwareVersion": "Versão Atual do Firmware", @@ -807,20 +1306,22 @@ const Map ptPT = { "connectionFailed": "Falha na Conexão", "retryConnection": "Tentar Conectar Novamente", "ota_updateNow": "Atualizar Agora", - "keepConnectedDontClose": - "Mantenha o dispositivo conectado, não feche a aplicação", + "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", "charging": "A carregar", "updateContent": "Conteúdo da Atualização", - "removeEarbudsEnsureBattery": - "Retire ambos os auriculares e certifique-se de que a bateria de ambos está acima de 20%", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..458244596 100644 --- a/lib/core/translations/language/ro_ro.dart +++ b/lib/core/translations/language/ro_ro.dart @@ -71,8 +71,7 @@ const Map roRO = { // 登录页 "welcome": "Bun venit", - "loginTips": - "Autentificați-vă sau înregistrați-vă cu numărul de telefon sau e-mail", + "loginTips": "Autentificați-vă sau înregistrați-vă cu numărul de telefon sau e-mail", "accountNumber": "Număr de telefon sau e-mail", "verificationCode": "Cod de verificare", "getCode": "Obține codul", @@ -91,8 +90,7 @@ const Map roRO = { "tip": "Sfat", "pleaseEnterCompleteCode": "Introduceți codul de verificare complet", "loginFailed": "Autentificare eșuată, reîncercați", - 'pleaseAcceptPrivacyPolicy': - 'Citiți și acceptați mai întâi Politica de confidențialitate și Acordul de utilizare', + 'pleaseAcceptPrivacyPolicy': 'Citiți și acceptați mai întâi Politica de confidențialitate și Acordul de utilizare', "enterVerificationCode": "Introduceți codul de verificare", "verificationCodeSentTo": "Codul de verificare a fost trimis la", "resendVerificationCode": "Retrimite codul de verificare", @@ -100,12 +98,14 @@ 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", @@ -115,30 +115,24 @@ const Map roRO = { "signal": "Semnal", "deviceId": "ID dispozitiv", "firmwareVersion": "Versiune firmware", - "disconnectedDevice": - "Niciun dispozitiv conectat, faceți clic pe butonul de mai jos pentru a conecta", + "disconnectedDevice": "Niciun dispozitiv conectat, faceți clic pe butonul de mai jos pentru a conecta", "connectDevice": "Conectare dispozitiv", "topAiExperiences": "Experiențe de top cu AI", "aiAssistant": "Asistent AI multifuncțional", - "aiAssistantInfo": - "Consultant exclusiv 24/7, răspunde la întrebări, oferă sugestii", + "aiAssistantInfo": "Consultant exclusiv 24/7, răspunde la întrebări, oferă sugestii", "interpretation": "Interpretare simultană", - "simultaneousInterpretationInfo": - "Traducere în timp real în peste 80 de limbi, călătorii fără griji în străinătate", + "simultaneousInterpretationInfo": "Traducere în timp real în peste 80 de limbi, călătorii fără griji în străinătate", "aiCompanion": "Companion de familie", "aiCompanionInfo": "Vă înțelege, companie caldă", "homeSlogan": "Conectând lumea, dincolo de sunet", - "turnEarphones": - "Deschideți carcasa de încărcare a căștilor și introduceți căștile în urechi", + "turnEarphones": "Deschideți carcasa de încărcare a căștilor și introduceți căștile în urechi", "currentlyConnected": "Conectat în prezent:", "unsystemSetup": "Mergeți la setările de sistem", "talkLater": "Mai târziu", "initializing": "Se inițializează...", - "bluetoothInitializationFailure": - "Inițializarea serviciului Bluetooth a eșuat", + "bluetoothInitializationFailure": "Inițializarea serviciului Bluetooth a eșuat", "checkingPermissions": "Se verifică permisiunile...", - "lackPermissions": - "Lipsesc permisiunile Bluetooth și este necesar să permiteți accesul la localizare", + "lackPermissions": "Lipsesc permisiunile Bluetooth și este necesar să permiteți accesul la localizare", "searchingDevice": "Se caută dispozitive...", "findConnectedDevice": "Dispozitiv conectat găsit", "notFound": "Niciun dispozitiv Bluetooth conectat nu a fost găsit", @@ -146,16 +140,14 @@ const Map roRO = { "connectedDevice": "Conectat la dispozitiv:", "failedRefreshDevice": "Reîmprospătarea dispozitivului a eșuat", "noDeviceFound": "Niciun dispozitiv conectat nu a fost găsit", - "failedDeviceInformation": - "Nu s-au putut obține informații despre dispozitiv", + "failedDeviceInformation": "Nu s-au putut obține informații despre dispozitiv", "unknownEquipment": "Echipament necunoscut", "zeroSignal": "Fără semnal", "good": "Bun", "fine": "Foarte bun", "excellent": "Excelent", "unknown": "Necunoscut", - 'bluetoothTurnedOff': - 'Bluetooth este dezactivat, vă rugăm să activați Bluetooth', + 'bluetoothTurnedOff': 'Bluetooth este dezactivat, vă rugăm să activați Bluetooth', 'bluetoothOff': 'Bluetooth dezactivat', 'leftEar': 'Urechea stângă', 'rightEar': 'Urechea dreaptă', @@ -183,11 +175,198 @@ const Map roRO = { "healthConsultant": "Chat AI multifuncțional", "healthConsultantInfo": "Oferă mai multe funcții de chat AI", "conferenceAssistant": "Asistent pentru ședințe de afaceri", - "conferenceAssistantInfo": - "Înregistrare în timp real a proceselor-verbale, traducere multilingvă", + "conferenceAssistantInfo": "Înregistrare în timp real a proceselor-verbale, traducere multilingvă", "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 +381,225 @@ 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 +611,8 @@ const Map roRO = { "lastBackup": "Ultimul backup:", "privacySettings": "Setări de confidențialitate", "privacySettingsInfo": "Gestionați colectarea datelor și permisiunile", - "permissionManagement": "Gestionarea permisiunilor", - "permissionManagementInfo": - "Gestionați setările de permisiuni ale aplicației", + "permissionManagement": "Gestionarea permisiunilor", // 权限管理 + "permissionManagementInfo": "Gestionați setările de permisiuni ale aplicației", // 管理应用权限设置 "aboutApplication": "Despre aplicație", "versions": "Versiune", "checkUpdates": "Verifică actualizări", @@ -231,11 +621,9 @@ const Map roRO = { "voiceServiceInfo": "Selectați serviciul de recunoaștere și sinteză vocală", "selectVoiceService": "Selectează serviciu vocal", "azureVoiceService": "Serviciu vocal Azure", - "azureVoiceServiceInfo": - "Serviciu vocal în cloud Microsoft, suportă sinteză și recunoaștere vocală de înaltă calitate", + "azureVoiceServiceInfo": "Serviciu vocal în cloud Microsoft, suportă sinteză și recunoaștere vocală de înaltă calitate", "flutterVoiceService": "Serviciu vocal local Flutter", - "flutterVoiceServiceInfo": - "Serviciu vocal local al dispozitivului, poate fi utilizat fără conexiune la internet", + "flutterVoiceServiceInfo": "Serviciu vocal local al dispozitivului, poate fi utilizat fără conexiune la internet", 'timbreService': 'Serviciu timbru', 'timbreServiceInfo': 'Selectați serviciul de sinteză vocală a timbrului', 'defaultTimbre': 'Timbru implicit', @@ -257,25 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Experimentați funcția de interacțiune vocală inteligentă (previzualizare funcție)", + "realtimeVoiceChatInfo": "Experimentați funcția de interacțiune vocală inteligentă (previzualizare funcție)", "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 @@ -285,8 +678,7 @@ const Map roRO = { "inputMessage": "Introduceți mesaj...", "imListening": "Ascult...", "canStartTalking": "Puteți începe să vorbiți", - "addQuestionAboutImage": - "Adăugați o întrebare sau o descriere despre imagine...", + "addQuestionAboutImage": "Adăugați o întrebare sau o descriere despre imagine...", "summarizeImageContent": "Rezumați conținutul imaginii", "extractImageText": "Extrageți text din imagine", "translateImageText": "Traduceți textul din imagine", @@ -305,6 +697,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' @@ -315,20 +721,16 @@ const Map roRO = { '• Controlul funcțiilor căștilor\n\n' 'Cu ce vă pot ajuta?', 'microphonePermission': 'Microfon', - 'voiceRecognitionPermissionText': - 'Recunoașterea vocală necesită acces la microfon.', - 'voiceTranslationPermissionText': - 'Recunoașterea și traducerea vocală necesită acces la microfon.', - 'phoneCallPermissionText': - 'Efectuarea apelurilor necesită acces la microfon pentru apeluri vocale.', - 'permissionDeniedText': - 'Ați refuzat permanent permisiunea pentru microfon, vă rugăm să mergeți la setările de sistem pentru a o activa.', + 'voiceRecognitionPermissionText': 'Recunoașterea vocală necesită acces la microfon.', + 'voiceTranslationPermissionText': 'Recunoașterea și traducerea vocală necesită acces la microfon.', + 'phoneCallPermissionText': 'Efectuarea apelurilor necesită acces la microfon pentru apeluri vocale.', + 'permissionDeniedText': 'Ați refuzat permanent permisiunea pentru microfon, vă rugăm să mergeți la setările de sistem pentru a o activa.', 'startVoiceInput': 'Începe intrarea vocală', '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,16 +739,16 @@ 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', 'illegalCriminal': 'Ilegal/Criminal', 'privacyRelated': 'Legat de confidențialitate', - 'copyrightViolation': - 'Încălcarea drepturilor mele de autor, a reputației etc.', + 'copyrightViolation': 'Încălcarea drepturilor mele de autor, a reputației etc.', 'other': 'Altele', - 'reportDescriptionHint': - 'Dorim să știm de ce raportați, puteți descrie problema pe care ați întâmpinat-o.', + '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 +759,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", @@ -376,24 +778,15 @@ const Map roRO = { 'highest': 'Maximă', 'lowest': 'Minimă', 'futureForecast': 'Prognoza viitoare', - 'hotWeatherTip': - 'Astăzi este cald, aveți grijă la insolație și beți multă apă', - 'coldWeatherTip': - 'Astăzi temperatura este scăzută, îmbrăcați-vă gros când ieșiți pentru a nu răci', - 'rainyWeatherTip': - 'Astăzi plouă, luați o umbrelă când ieșiți și aveți grijă la drum', - 'snowyWeatherTip': - 'Astăzi ninge, drumul este alunecos, aveți grijă și îmbrăcați-vă gros', - 'foggyWeatherTip': - 'Astăzi este ceață, vizibilitatea este redusă, purtați o mască când ieșiți', - 'windyWeatherTip': - 'Astăzi vântul este puternic, aveți grijă când ieșiți și asigurați-vă bunurile', - 'sunnyWeatherTip': - 'Astăzi este soare și razele UV sunt puternice, folosiți protecție solară când ieșiți', - 'temperatureDifferenceTip': - 'Astăzi este o diferență mare de temperatură între zi și noapte, adaptați-vă îmbrăcămintea', - 'comfortableWeatherTip': - 'Astăzi vremea este plăcută, un moment bun pentru activități în aer liber', + 'hotWeatherTip': 'Astăzi este cald, aveți grijă la insolație și beți multă apă', + 'coldWeatherTip': 'Astăzi temperatura este scăzută, îmbrăcați-vă gros când ieșiți pentru a nu răci', + 'rainyWeatherTip': 'Astăzi plouă, luați o umbrelă când ieșiți și aveți grijă la drum', + 'snowyWeatherTip': 'Astăzi ninge, drumul este alunecos, aveți grijă și îmbrăcați-vă gros', + 'foggyWeatherTip': 'Astăzi este ceață, vizibilitatea este redusă, purtați o mască când ieșiți', + 'windyWeatherTip': 'Astăzi vântul este puternic, aveți grijă când ieșiți și asigurați-vă bunurile', + 'sunnyWeatherTip': 'Astăzi este soare și razele UV sunt puternice, folosiți protecție solară când ieșiți', + 'temperatureDifferenceTip': 'Astăzi este o diferență mare de temperatură între zi și noapte, adaptați-vă îmbrăcămintea', + 'comfortableWeatherTip': 'Astăzi vremea este plăcută, un moment bun pentru activități în aer liber', "monday": "Lu", "tuesday": "Ma", "wednesday": "Mi", @@ -401,6 +794,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", @@ -432,33 +836,28 @@ const Map roRO = { "notSet": "Nesetat", "accountSetting": "Setări cont", "logout": "Deconectare", - "logoutTips": - "Sunteți sigur că doriți să vă deconectați de la contul curent?", + "logoutTips": "Sunteți sigur că doriți să vă deconectați de la contul curent?", 'deleteAccount': 'Șterge contul', - 'deleteAccountTips': - 'Sunteți sigur că doriți să ștergeți permanent contul? Această acțiune nu poate fi anulată.', + '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': - 'Conexiunea la rețea a eșuat, verificați setările de rețea și reîncercați', - 'serverTemporarilyUnavailable': - 'Serverul este temporar indisponibil, reîncercați mai târziu', - 'loginExpiredPleaseRelogin': - 'Sesiunea dvs. a expirat, vă rugăm să vă autentificați din nou', - 'noPermissionForThisOperation': - 'Nu aveți permisiunea de a efectua această operație', + 'networkConnectionFailed': 'Conexiunea la rețea a eșuat, verificați setările de rețea și reîncercați', + 'serverTemporarilyUnavailable': 'Serverul este temporar indisponibil, reîncercați mai târziu', + 'loginExpiredPleaseRelogin': 'Sesiunea dvs. a expirat, vă rugăm să vă autentificați din nou', + 'noPermissionForThisOperation': 'Nu aveți permisiunea de a efectua această operație', 'requestedResourceNotFound': 'Resursa solicitată nu a fost găsită', - 'imageProcessingFailedPleaseReselect': - 'Procesarea imaginii a eșuat, vă rugăm să selectați o altă imagine', + 'imageProcessingFailedPleaseReselect': 'Procesarea imaginii a eșuat, vă rugăm să selectați o altă imagine', 'operationFailedPleaseRetry': 'Operațiunea a eșuat, reîncercați', 'serverReturnedError': 'Serverul a returnat o eroare', 'serverError': 'Eroare de server', - 'networkConnectionFailedCheckSettings': - 'Conexiunea la rețea a eșuat, verificați setările de rețea', - 'serverInternalErrorRetryLater': - 'Eroare internă de server, reîncercați mai târziu', + 'networkConnectionFailedCheckSettings': 'Conexiunea la rețea a eșuat, verificați setările de rețea', + 'serverInternalErrorRetryLater': '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,37 +870,41 @@ 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', - 'signOutProcessError': - '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', - 'allUserDataClearSuccess': - 'Toate datele de utilizator au fost șterse cu succes', - 'accountServiceInitialized': 'Serviciul de cont a fost inițializat', + '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', // 登出过程发生错误 + 'deleteAccountProcessError': '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', // 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', - 'calendarWritePermissionDesc': - 'Utilizat pentru crearea de evenimente și memento-uri în calendar', - 'calendarFullAccessPermissionDesc': - 'Utilizat pentru citirea și gestionarea evenimentelor și mementourilor din calendar', - 'locationPermissionDesc': - 'Utilizat pentru obținerea informațiilor despre locația curentă', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Utilizat pentru crearea de evenimente și memento-uri în calendar', + 'calendarFullAccessPermissionDesc': 'Utilizat pentru citirea și gestionarea evenimentelor și mementourilor din calendar', + 'locationPermissionDesc': 'Utilizat pentru obținerea informațiilor despre locația curentă', 'appFunctionNeeds': 'Funcția aplicației necesită', 'authorized': 'Autorizat', 'unauthorized': 'Neautorizat', @@ -510,32 +913,65 @@ const Map roRO = { 'unknownStatus': 'Stare necunoscută', 'permissionGranted': 'Permisiune acordată', 'permissionRequestError': 'Eroare la solicitarea permisiunii', - 'phonePermissionDetailDesc': - 'Funcția de apelare necesită permisiunea pentru telefon', - 'smsPermissionDetailDesc': - 'Funcția de trimitere SMS necesită permisiunea pentru SMS', - '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', - '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', + 'phonePermissionDetailDesc': '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ă', - 'cannotOpenAppStore': - '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', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'A apărut o eroare în timpul actualizării, reîncercați mai târziu', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -644,8 +1080,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,18 +1105,76 @@ 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ă.", + "clearHistoryConfirm": "Sunteți sigur că doriți să ștergeți tot istoricul traducerilor? Această acțiune nu poate fi anulată.", "unknownLanguage": "Limbă necunoscută", "deleteSessionRecord": "Șterge înregistrarea sesiunii", - "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ă.", + "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ă...", @@ -680,8 +1189,7 @@ const Map roRO = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Înregistrare originală", "recordSummary": "Rezumat înregistrare", - "clickToGenerateSummary": - "Faceți clic pe butonul de mai jos pentru a genera un rezumat al sesiunii", + "clickToGenerateSummary": "Faceți clic pe butonul de mai jos pentru a genera un rezumat al sesiunii", "summaryContent": "Conținut rezumat", "copied": "Copiat", "summaryCopiledToClipboard": "Rezumatul a fost copiat în clipboard", @@ -689,11 +1197,9 @@ const Map roRO = { "summaryGenerated": "Rezumat generat", "generating": "Se generează...", "regenerate": "Regenerează", - "summaryTimeoutMessage": - "Cererea de generare a rezumatului a expirat, posibil din cauza problemelor de rețea sau a unui server ocupat.", + "summaryTimeoutMessage": "Cererea de generare a rezumatului a expirat, posibil din cauza problemelor de rețea sau a unui server ocupat.", "deleteTranslationRecord": "Șterge înregistrarea traducerii", - "deleteTranslationConfirm": - "Sunteți sigur că doriți să ștergeți această înregistrare de traducere? Această acțiune nu poate fi anulată.", + "deleteTranslationConfirm": "Sunteți sigur că doriți să ștergeți această înregistrare de traducere? Această acțiune nu poate fi anulată.", "originalText": "Text original", "translatedText": "Text tradus", "sessionSummary": "Rezumat sesiune", @@ -711,7 +1217,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...", @@ -721,37 +1227,34 @@ const Map roRO = { // 配对状态文本 "readyToPair": "Gata de asociere", "preparingPairingEnvironment": "Se pregătește mediul de asociere...", - "connectDeepSoundViaSystemBluetooth": - "Conectați-vă mai întâi la dispozitivul Voitrans prin Bluetooth-ul de sistem", + "connectDeepSoundViaSystemBluetooth": "Conectați-vă mai întâi la dispozitivul Voitrans prin Bluetooth-ul de sistem", "deviceBindingConfirm": "Confirmare legare dispozitiv...", "establishingDeviceAssociation": "Se stabilește asocierea dispozitivului...", "waitingCompletePairing": "Vă rugăm așteptați, se finalizează asocierea...", - "pairingSuccessRedirecting": - "Asociere reușită! Se redirecționează către pagina principală...", + "pairingSuccessRedirecting": "Asociere reușită! Se redirecționează către pagina principală...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Asigurați-vă că sunteți conectat la un dispozitiv Voitrans", - "deviceAlreadyBoundToOtherAccount": - "Acest dispozitiv este deja legat de un alt cont", + "ensureConnectedDeepSoundDevice": "Asigurați-vă că sunteți conectat la un dispozitiv Voitrans", + "deviceAlreadyBoundToOtherAccount": "Acest dispozitiv este deja legat de un alt cont", "deviceAssociationFailed": "Asocierea dispozitivului a eșuat, reîncercați", - "scanTimeoutEnsureDeviceNearby": - "Scanarea a expirat, asigurați-vă că dispozitivul este în apropiere", + "scanTimeoutEnsureDeviceNearby": "Scanarea a expirat, asigurați-vă că dispozitivul este în apropiere", "networkError": "Eroare de rețea", - "authorizationFailedCheckCode": - "Autorizare eșuată, verificați dacă codul de autorizare este corect", + "authorizationFailedCheckCode": "Autorizare eșuată, verificați dacă codul de autorizare este corect", "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', + '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ă...', + 'needManualBindingAuthCode': 'Este necesar un cod de autorizare pentru legarea manuală...', 'pairingSuccessful': 'Asociere reușită!', 'enableBluetooth': 'Activează Bluetooth', 'grantPermissions': 'Acordă permisiuni', @@ -763,32 +1266,35 @@ const Map roRO = { 'verificationFailedRetry': 'Verificare eșuată, reîncercați', 'invalidDeviceAddress': 'Adresă de dispozitiv invalidă', 'bleDeviceAssociationFailed': 'Asocierea dispozitivului BLE a eșuat', - 'deviceAssociationFailedRetry': - 'Asocierea dispozitivului a eșuat, reîncercați', + 'deviceAssociationFailedRetry': 'Asocierea dispozitivului a eșuat, reîncercați', 'bleConnectionTimeoutRetry': 'Conexiunea BLE a expirat, reîncercați', 'blePairingStartupFailed': 'Pornirea asocierii BLE a eșuat', 'bleConnectionFailed': 'Conexiunea BLE a eșuat', - 'deviceAuthorizationFailedCheckCode': - 'Autorizarea dispozitivului a eșuat, verificați codul de autorizare', + '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', - 'feedbackDescription': - 'Vă rugăm să descrieți problema întâmpinată sau sugestia dvs.', + 'feedbackDescription': 'Vă rugăm să descrieți problema întâmpinată sau sugestia dvs.', 'feedbackHint': 'Introduceți feedback-ul dvs....', 'feedbackRequired': 'Introduceți conținutul feedback-ului', 'contactInfo': 'Informații de contact', 'contactHint': 'E-mail/Telefon, pentru a vă putea contacta', 'submit': 'Trimite', - 'feedbackSubmitSuccess': - 'Feedback trimis cu succes, vă mulțumim pentru feedback!', - 'feedbackSubmitFailed': - 'Trimiterea feedback-ului a eșuat, reîncercați mai târziu', + 'feedbackSubmitSuccess': 'Feedback trimis cu succes, vă mulțumim pentru feedback!', + 'feedbackSubmitFailed': 'Trimiterea feedback-ului a eșuat, reîncercați mai târziu', // OTA升级模块 - "upgradeExitConfirm": - "Actualizarea este în curs, ieșirea va întrerupe procesul, sunteți sigur că doriți să ieșiți?", + "upgradeExitConfirm": "Actualizarea este în curs, ieșirea va întrerupe procesul, sunteți sigur că doriți să ieșiți?", "deviceModel": "Model dispozitiv", "unknownDevice": "Dispozitiv necunoscut", "currentFirmwareVersion": "Versiune firmware curentă", @@ -800,20 +1306,22 @@ const Map roRO = { "connectionFailed": "Conexiune eșuată", "retryConnection": "Reîncearcă conexiunea", "ota_updateNow": "Actualizează acum", - "keepConnectedDontClose": - "Mențineți dispozitivul conectat, nu închideți aplicația", + "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", "charging": "Se încarcă", "updateContent": "Conținut actualizare", - "removeEarbudsEnsureBattery": - "Scoateți ambele căști și asigurați-vă că bateria ambelor este peste 20%", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..e9ffb87e6 100644 --- a/lib/core/translations/language/ru_ru.dart +++ b/lib/core/translations/language/ru_ru.dart @@ -71,8 +71,7 @@ const Map ruRU = { // 登录页 "welcome": "Добро пожаловать", - "loginTips": - "Войдите или зарегистрируйтесь, используя номер телефона или электронную почту", + "loginTips": "Войдите или зарегистрируйтесь, используя номер телефона или электронную почту", "accountNumber": "Номер телефона или e-mail", "verificationCode": "Код подтверждения", "getCode": "Получить код", @@ -91,8 +90,7 @@ const Map ruRU = { "tip": "Подсказка", "pleaseEnterCompleteCode": "Пожалуйста, введите полный код подтверждения", "loginFailed": "Ошибка входа, попробуйте еще раз", - 'pleaseAcceptPrivacyPolicy': - 'Пожалуйста, сначала прочтите и согласитесь с Политикой конфиденциальности и Пользовательским соглашением', + 'pleaseAcceptPrivacyPolicy': 'Пожалуйста, сначала прочтите и согласитесь с Политикой конфиденциальности и Пользовательским соглашением', "enterVerificationCode": "Введите код подтверждения", "verificationCodeSentTo": "Код подтверждения отправлен на", "resendVerificationCode": "Отправить код еще раз", @@ -100,13 +98,14 @@ const Map ruRU = { "usePasswordLogin": "Войти с паролем", // 隐私政策弹窗 - "loginDeclaration": "Заявление Voitrans", - "welcomeToThisApp": - "Добро пожаловать в Voitrans, пожалуйста, внимательно прочтите", + "loginDeclaration": "Заявление Voitrans", // Voitrans 声明 + "welcomeToThisApp": "Добро пожаловать в Voitrans, пожалуйста, внимательно прочтите", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", нажатие «Согласен и войти» означает, что вы полностью прочли и согласны с вышеуказанными соглашениями. Нажатие «Не согласен» приведет к выходу из приложения.", - "disagree": "Не согласен", - "agreeAndEnter": "Согласен и войти", + ", нажатие «Согласен и войти» означает, что вы полностью прочли и согласны с вышеуказанными соглашениями. Нажатие «Не согласен» приведет к выходу из приложения.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Не согласен", // 不同意 + "agreeAndEnter": "Согласен и войти", // 同意并进入 // 首页 "deviceStatus": "Статус устройства", @@ -116,29 +115,24 @@ const Map ruRU = { "signal": "Сигнал", "deviceId": "ID устройства", "firmwareVersion": "Версия прошивки", - "disconnectedDevice": - "Устройство не подключено, нажмите кнопку ниже для подключения", + "disconnectedDevice": "Устройство не подключено, нажмите кнопку ниже для подключения", "connectDevice": "Подключить устройство", "topAiExperiences": "Лучшие AI-впечатления", "aiAssistant": "Всемогущий AI-помощник", - "aiAssistantInfo": - "Эксклюзивный консультант 24/7, отвечает на вопросы, дает советы", + "aiAssistantInfo": "Эксклюзивный консультант 24/7, отвечает на вопросы, дает советы", "interpretation": "Синхронный перевод", - "simultaneousInterpretationInfo": - "Перевод в реальном времени на более чем 80 языков, беззаботные поездки за границу", + "simultaneousInterpretationInfo": "Перевод в реальном времени на более чем 80 языков, беззаботные поездки за границу", "aiCompanion": "Семейный компаньон", "aiCompanionInfo": "Понимает вас, теплое общение", "homeSlogan": "Соединяя мир, превосходя звук", - "turnEarphones": - "Откройте зарядный чехол для наушников и вставьте наушники в уши", + "turnEarphones": "Откройте зарядный чехол для наушников и вставьте наушники в уши", "currentlyConnected": "В настоящее время подключено:", "unsystemSetup": "Перейти в настройки системы", "talkLater": "Позже", "initializing": "Инициализация...", "bluetoothInitializationFailure": "Ошибка инициализации службы Bluetooth", "checkingPermissions": "Проверка разрешений...", - "lackPermissions": - "Отсутствуют разрешения Bluetooth и необходимо разрешить доступ к местоположению", + "lackPermissions": "Отсутствуют разрешения Bluetooth и необходимо разрешить доступ к местоположению", "searchingDevice": "Поиск устройств...", "findConnectedDevice": "Найдено подключенное устройство", "notFound": "Подключенное устройство Bluetooth не найдено", @@ -175,27 +169,205 @@ const Map ruRU = { "faceToFaceTranslation": "Перевод лицом к лицу", 'audioVideoTranslation': 'Перевод аудио и видео', 'callTranslation': 'Перевод звонков', - "simultaneousTranslationInfo": - "Перевод в реальном времени на более чем 80 языков", + "simultaneousTranslationInfo": "Перевод в реальном времени на более чем 80 языков", "aiGirlfriend": "AI-подруга", "aiGirlfriendInfo": "Интеллектуальный компаньон, общайтесь в любое время", "healthConsultant": "Многофункциональный AI-чат", "healthConsultantInfo": "Предлагает больше функций AI-чата", "conferenceAssistant": "Помощник для деловых встреч", - "conferenceAssistantInfo": - "Запись протоколов в реальном времени, многоязычный перевод", + "conferenceAssistantInfo": "Запись протоколов в реальном времени, многоязычный перевод", "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 +381,225 @@ 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 +611,8 @@ const Map ruRU = { "lastBackup": "Последнее резервное копирование:", "privacySettings": "Настройки конфиденциальности", "privacySettingsInfo": "Управление сбором данных и разрешениями", - "permissionManagement": "Управление разрешениями", - "permissionManagementInfo": "Управление настройками разрешений приложения", + "permissionManagement": "Управление разрешениями", // 权限管理 + "permissionManagementInfo": "Управление настройками разрешений приложения", // 管理应用权限设置 "aboutApplication": "О приложении", "versions": "Версия", "checkUpdates": "Проверить обновления", @@ -237,11 +621,9 @@ const Map ruRU = { "voiceServiceInfo": "Выбор службы распознавания и синтеза речи", "selectVoiceService": "Выберите голосовую службу", "azureVoiceService": "Голосовая служба Azure", - "azureVoiceServiceInfo": - "Облачная голосовая служба Microsoft, поддерживающая высококачественный синтез и распознавание речи", + "azureVoiceServiceInfo": "Облачная голосовая служба Microsoft, поддерживающая высококачественный синтез и распознавание речи", "flutterVoiceService": "Локальная голосовая служба Flutter", - "flutterVoiceServiceInfo": - "Локальная голосовая служба устройства, можно использовать без подключения к Интернету", + "flutterVoiceServiceInfo": "Локальная голосовая служба устройства, можно использовать без подключения к Интернету", 'timbreService': 'Служба тембров', 'timbreServiceInfo': 'Выберите службу синтеза речи с тембрами', 'defaultTimbre': 'Стандартный тембр', @@ -263,24 +645,30 @@ const Map ruRU = { 'networkErrorRetry': 'Ошибка сети, попробуйте еще раз позже', // 设备管理相关 - 'clearPairedDevices': 'Очистить сопряженные устройства', - 'clearPairedDevicesConfirm': - 'Вы уверены, что хотите очистить все сопряженные устройства?', - 'clearPairedDevicesSuccess': 'Сопряженные устройства успешно очищены', - 'clearPairedDevicesFailed': 'Не удалось очистить сопряженные устройства', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Голосовой чат в реальном времени", - "realtimeVoiceChatInfo": - "Испытайте функцию интеллектуального голосового взаимодействия (предварительный просмотр)", + "realtimeVoiceChatInfo": "Испытайте функцию интеллектуального голосового взаимодействия (предварительный просмотр)", "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 +697,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' @@ -319,20 +721,16 @@ const Map ruRU = { '• Управлять функциями наушников\n\n' 'Чем я могу вам помочь?', 'microphonePermission': 'Микрофон', - 'voiceRecognitionPermissionText': - 'Для распознавания речи требуется доступ к микрофону.', - 'voiceTranslationPermissionText': - 'Для распознавания и перевода речи требуется доступ к микрофону.', - 'phoneCallPermissionText': - 'Для совершения звонков требуется доступ к микрофону для голосовых вызовов.', - 'permissionDeniedText': - 'Вы навсегда отказали в доступе к микрофону, пожалуйста, включите разрешение в настройках системы.', + 'voiceRecognitionPermissionText': 'Для распознавания речи требуется доступ к микрофону.', + 'voiceTranslationPermissionText': 'Для распознавания и перевода речи требуется доступ к микрофону.', + 'phoneCallPermissionText': 'Для совершения звонков требуется доступ к микрофону для голосовых вызовов.', + 'permissionDeniedText': 'Вы навсегда отказали в доступе к микрофону, пожалуйста, включите разрешение в настройках системы.', 'startVoiceInput': 'Начать голосовой ввод', 'startPhoneCallMode': 'Начать режим звонка, начать голосовой ввод', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Введите ваше сообщение здесь...', - 'characterCount': '{count} символов', + 'fullScreenEditorHint': 'Введите ваше сообщение здесь...', // 全屏编辑器输入提示 + 'characterCount': '{count} символов', // 字符计数显示 // 消息长按操作 'copy': 'Копировать', @@ -341,6 +739,7 @@ const Map ruRU = { 'submitSuccess': 'Успешно отправлено', 'submitFailed': 'Ошибка отправки', 'reportSubmitted': 'Жалоба отправлена, мы ее рассмотрим в ближайшее время', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Вредный/Небезопасный', 'pornographicVulgar': 'Порнографический/Вульгарный', 'misleadingAttack': 'Вводящий в заблуждение/Атака', @@ -348,8 +747,8 @@ const Map ruRU = { 'privacyRelated': "Связано с конфиденциальностью", 'copyrightViolation': "Нарушение моих авторских прав, репутации и т.д.", 'other': 'Другое', - 'reportDescriptionHint': - 'Мы хотим знать причину вашей жалобы, вы можете описать проблему, с которой столкнулись.', + 'reportDescriptionHint': 'Мы хотим знать причину вашей жалобы, вы можете описать проблему, с которой столкнулись.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Сгенерировано AI', @@ -360,15 +759,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": "На велосипеде", @@ -379,24 +778,15 @@ const Map ruRU = { 'highest': 'Макс.', 'lowest': 'Мин.', 'futureForecast': 'Прогноз на будущее', - 'hotWeatherTip': - 'Сегодня жарко, пожалуйста, избегайте перегрева и пейте больше воды, чтобы избежать теплового удара', - 'coldWeatherTip': - 'Сегодня температура низкая, пожалуйста, тепло одевайтесь, выходя на улицу, чтобы не простудиться', - 'rainyWeatherTip': - 'Сегодня дождь, пожалуйста, возьмите с собой зонт и будьте осторожны во время поездок', - 'snowyWeatherTip': - 'Сегодня снег, дороги скользкие, будьте осторожны и тепло одевайтесь', - 'foggyWeatherTip': - 'Сегодня туман, видимость ограничена, пожалуйста, надевайте маску, выходя на улицу', - 'windyWeatherTip': - 'Сегодня сильный ветер, пожалуйста, будьте осторожны и закрепите свои вещи, выходя на улицу', - 'sunnyWeatherTip': - 'Сегодня солнечно и сильное ультрафиолетовое излучение, пожалуйста, используйте солнцезащитный крем, выходя на улицу', - 'temperatureDifferenceTip': - 'Сегодня большая разница температур между днем и ночью, пожалуйста, одевайтесь соответственно', - 'comfortableWeatherTip': - 'Сегодня приятная погода, прекрасное время для активного отдыха на свежем воздухе', + 'hotWeatherTip': 'Сегодня жарко, пожалуйста, избегайте перегрева и пейте больше воды, чтобы избежать теплового удара', + 'coldWeatherTip': 'Сегодня температура низкая, пожалуйста, тепло одевайтесь, выходя на улицу, чтобы не простудиться', + 'rainyWeatherTip': 'Сегодня дождь, пожалуйста, возьмите с собой зонт и будьте осторожны во время поездок', + 'snowyWeatherTip': 'Сегодня снег, дороги скользкие, будьте осторожны и тепло одевайтесь', + 'foggyWeatherTip': 'Сегодня туман, видимость ограничена, пожалуйста, надевайте маску, выходя на улицу', + 'windyWeatherTip': 'Сегодня сильный ветер, пожалуйста, будьте осторожны и закрепите свои вещи, выходя на улицу', + 'sunnyWeatherTip': 'Сегодня солнечно и сильное ультрафиолетовое излучение, пожалуйста, используйте солнцезащитный крем, выходя на улицу', + 'temperatureDifferenceTip': 'Сегодня большая разница температур между днем и ночью, пожалуйста, одевайтесь соответственно', + 'comfortableWeatherTip': 'Сегодня приятная погода, прекрасное время для активного отдыха на свежем воздухе', "monday": "Пн", "tuesday": "Вт", "wednesday": "Ср", @@ -404,6 +794,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": "Переменная облачность", @@ -437,30 +838,26 @@ const Map ruRU = { "logout": "Выйти", "logoutTips": "Вы уверены, что хотите выйти из текущего аккаунта?", 'deleteAccount': 'Удалить аккаунт', - 'deleteAccountTips': - 'Вы уверены, что хотите навсегда удалить свой аккаунт? Это действие необратимо.', + 'deleteAccountTips': 'Вы уверены, что хотите навсегда удалить свой аккаунт? Это действие необратимо.', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 - 'networkConnectionFailed': - 'Ошибка сетевого подключения, проверьте настройки сети и попробуйте еще раз', - 'serverTemporarilyUnavailable': - 'Сервер временно недоступен, попробуйте еще раз позже', - 'loginExpiredPleaseRelogin': - 'Срок действия сессии истек, пожалуйста, войдите снова', - 'noPermissionForThisOperation': - 'У вас нет разрешения на выполнение этой операции', + 'networkConnectionFailed': 'Ошибка сетевого подключения, проверьте настройки сети и попробуйте еще раз', + 'serverTemporarilyUnavailable': 'Сервер временно недоступен, попробуйте еще раз позже', + 'loginExpiredPleaseRelogin': 'Срок действия сессии истек, пожалуйста, войдите снова', + 'noPermissionForThisOperation': 'У вас нет разрешения на выполнение этой операции', 'requestedResourceNotFound': 'Запрошенный ресурс не найден', - 'imageProcessingFailedPleaseReselect': - 'Не удалось обработать изображение, пожалуйста, выберите другое изображение', + 'imageProcessingFailedPleaseReselect': 'Не удалось обработать изображение, пожалуйста, выберите другое изображение', 'operationFailedPleaseRetry': 'Операция не удалась, попробуйте еще раз', 'serverReturnedError': 'Сервер вернул ошибку', 'serverError': 'Ошибка сервера', - 'networkConnectionFailedCheckSettings': - 'Ошибка сетевого подключения, проверьте настройки сети', - 'serverInternalErrorRetryLater': - 'Внутренняя ошибка сервера, попробуйте еще раз позже', + 'networkConnectionFailedCheckSettings': 'Ошибка сетевого подключения, проверьте настройки сети', + 'serverInternalErrorRetryLater': 'Внутренняя ошибка сервера, попробуйте еще раз позже', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Не удалось сжать изображение', 'avatarUpdateFailed': 'Не удалось обновить аватар', 'usernameCannotBeEmpty': "Имя пользователя не может быть пустым", @@ -473,34 +870,41 @@ 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', - 'calendarWritePermissionDesc': - 'Используется для создания событий и напоминаний в календаре', - 'calendarFullAccessPermissionDesc': - 'Используется для чтения и управления событиями и напоминаниями в календаре', - 'locationPermissionDesc': - 'Используется для получения информации о текущем местоположении', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Используется для создания событий и напоминаний в календаре', + 'calendarFullAccessPermissionDesc': 'Используется для чтения и управления событиями и напоминаниями в календаре', + 'locationPermissionDesc': 'Используется для получения информации о текущем местоположении', 'appFunctionNeeds': 'Функции приложения требуют', 'authorized': 'Разрешено', 'unauthorized': 'Не разрешено', @@ -509,32 +913,65 @@ const Map ruRU = { 'unknownStatus': 'Неизвестный статус', 'permissionGranted': 'Разрешение предоставлено', 'permissionRequestError': 'Ошибка при запросе разрешения', - 'phonePermissionDetailDesc': - 'Для функции звонков требуется разрешение на доступ к телефону', - 'smsPermissionDetailDesc': - 'Для функции отправки SMS требуется разрешение на доступ к SMS', - 'calendarWritePermissionDetailDesc': - 'Для создания событий в календаре требуется разрешение на запись в календарь', - 'calendarFullAccessPermissionDetailDesc': - 'Для управления событиями в календаре требуется полный доступ к календарю', - 'locationPermissionDetailDesc': - 'Для получения информации о местоположении требуется разрешение на доступ к местоположению', - 'appNeedsPermissionForFullFunction': - 'Приложению требуется это разрешение для предоставления полной функциональности', - 'permanentDenialText': - 'Вы навсегда отказали в доступе к {permission}, пожалуйста, перейдите в настройки приложения, чтобы включить его', + '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': 'Не удалось обновить', - 'cannotOpenAppStore': - 'Не удается открыть App Store, пожалуйста, перейдите в App Store вручную, чтобы обновить', - 'updateErrorRetry': - 'Произошла ошибка во время обновления, попробуйте еще раз позже', + 'newVersionFound': 'Найдена новая версия', // 版本更新对话框标题 + 'remindLater': 'Напомнить позже', // 稍后提醒按钮 + 'updateNow': 'Обновить сейчас', // 立即更新按钮 + 'checkUpdate': 'Проверить обновления', // 检查更新按钮 + 'updateFailed': 'Не удалось обновить', // 更新失败提示 + 'cannotOpenAppStore': 'Не удается открыть App Store, пожалуйста, перейдите в App Store вручную, чтобы обновить', // 无法打开应用商店提示 + 'updateErrorRetry': 'Произошла ошибка во время обновления, попробуйте еще раз позже', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -643,8 +1080,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,18 +1105,76 @@ 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": - "Вы уверены, что хотите очистить всю историю переводов? Это действие необратимо.", + "clearHistoryConfirm": "Вы уверены, что хотите очистить всю историю переводов? Это действие необратимо.", "unknownLanguage": "Неизвестный язык", "deleteSessionRecord": "Удалить запись сессии", - "deleteSessionConfirm": - "Вы уверены, что хотите удалить все записи переводов этой сессии? Это действие необратимо.", + "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", - // 翻译录音文件列表页 (translation_list_view.dart) + // 翻译录音文件列表页 "translateAudioFiles": "Перевести аудиофайлы", "noAudioFiles": "Аудиофайлы отсутствуют", "calculating": "Вычисление...", @@ -679,8 +1189,7 @@ const Map ruRU = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Оригинальная запись", "recordSummary": "Резюме записи", - "clickToGenerateSummary": - "Нажмите кнопку ниже, чтобы сгенерировать резюме сессии", + "clickToGenerateSummary": "Нажмите кнопку ниже, чтобы сгенерировать резюме сессии", "summaryContent": "Содержание резюме", "copied": "Скопировано", "summaryCopiledToClipboard": "Резюме скопировано в буфер обмена", @@ -688,11 +1197,9 @@ const Map ruRU = { "summaryGenerated": "Резюме сгенерировано", "generating": "Генерация...", "regenerate": "Сгенерировать заново", - "summaryTimeoutMessage": - "Тайм-аут запроса на генерацию резюме, возможно, из-за проблем с сетью или загруженности сервера.", + "summaryTimeoutMessage": "Тайм-аут запроса на генерацию резюме, возможно, из-за проблем с сетью или загруженности сервера.", "deleteTranslationRecord": "Удалить запись перевода", - "deleteTranslationConfirm": - "Вы уверены, что хотите удалить эту запись перевода? Это действие необратимо.", + "deleteTranslationConfirm": "Вы уверены, что хотите удалить эту запись перевода? Это действие необратимо.", "originalText": "Оригинальный текст", "translatedText": "Переведенный текст", "sessionSummary": "Резюме сессии", @@ -710,7 +1217,7 @@ const Map ruRU = { "autoInputCode": "Автоматический ввод кода", "skipBinding": "Пропустить привязку", "rescan": "Повторное сканирование", - "skip": "Пропустить", + "verifyingDevice": "Проверка устройства...", "confirmBinding": "Подтвердить привязку", "associatingDevice": "Связывание устройства...", @@ -720,75 +1227,74 @@ const Map ruRU = { // 配对状态文本 "readyToPair": "Готово к сопряжению", "preparingPairingEnvironment": "Подготовка среды для сопряжения...", - "connectDeepSoundViaSystemBluetooth": - "Пожалуйста, сначала подключитесь к устройству Voitrans через системный Bluetooth", + "connectDeepSoundViaSystemBluetooth": "Пожалуйста, сначала подключитесь к устройству Voitrans через системный Bluetooth", "deviceBindingConfirm": "Подтверждение привязки устройства...", "establishingDeviceAssociation": "Установление связи с устройством...", "waitingCompletePairing": "Пожалуйста, подождите, завершается сопряжение...", - "pairingSuccessRedirecting": - "Сопряжение успешно! Перенаправление на главную страницу...", + "pairingSuccessRedirecting": "Сопряжение успешно! Перенаправление на главную страницу...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Убедитесь, что вы подключены к устройству Voitrans", - "deviceAlreadyBoundToOtherAccount": - "Это устройство уже привязано к другому аккаунту", - "deviceAssociationFailed": - "Не удалось связать устройство, попробуйте еще раз", - "scanTimeoutEnsureDeviceNearby": - "Тайм-аут сканирования, убедитесь, что устройство находится поблизости", + "ensureConnectedDeepSoundDevice": "Убедитесь, что вы подключены к устройству Voitrans", + "deviceAlreadyBoundToOtherAccount": "Это устройство уже привязано к другому аккаунту", + "deviceAssociationFailed": "Не удалось связать устройство, попробуйте еще раз", + "scanTimeoutEnsureDeviceNearby": "Тайм-аут сканирования, убедитесь, что устройство находится поблизости", "networkError": "Ошибка сети", - "authorizationFailedCheckCode": - "Ошибка авторизации, проверьте правильность кода авторизации", + "authorizationFailedCheckCode": "Ошибка авторизации, проверьте правильность кода авторизации", "pairingFailedRetry": "Не удалось выполнить сопряжение, попробуйте еще раз", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Пожалуйста, включите Bluetooth', 'deviceDisconnected': 'Устройство отключено', 'readyToStartPairing': 'Готово к началу сопряжения', 'checkingEnvironment': 'Проверка среды...', - 'ensureHeadsetOnAndPairingMode': - 'Убедитесь, что наушники включены и находятся в режиме сопряжения', + 'ensureHeadsetOnAndPairingMode': 'Убедитесь, что наушники включены и находятся в режиме сопряжения', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Установление безопасного соединения...', - 'needManualBindingAuthCode': - 'Требуется код авторизации для ручной привязки...', + 'needManualBindingAuthCode': 'Требуется код авторизации для ручной привязки...', 'pairingSuccessful': 'Сопряжение успешно!', 'enableBluetooth': 'Включить Bluetooth', 'grantPermissions': 'Предоставить разрешения', 'retryAssociation': 'Повторить связывание', 'retryAuthorization': 'Повторить авторизацию', - 'pleaseGrantNecessaryPermissions': - 'Пожалуйста, предоставьте необходимые разрешения', + 'pleaseGrantNecessaryPermissions': 'Пожалуйста, предоставьте необходимые разрешения', 'checkFailedRetry': 'Проверка не удалась, попробуйте еще раз', 'pleaseConnectDeepSoundDevice': 'Пожалуйста, подключите устройство Voitrans', 'verificationFailedRetry': 'Проверка не удалась, попробуйте еще раз', 'invalidDeviceAddress': 'Неверный адрес устройства', 'bleDeviceAssociationFailed': 'Не удалось связать устройство BLE', - 'deviceAssociationFailedRetry': - 'Не удалось связать устройство, попробуйте еще раз', + 'deviceAssociationFailedRetry': 'Не удалось связать устройство, попробуйте еще раз', 'bleConnectionTimeoutRetry': 'Тайм-аут подключения BLE, попробуйте еще раз', 'blePairingStartupFailed': 'Не удалось запустить сопряжение BLE', 'bleConnectionFailed': 'Не удалось подключиться через BLE', - 'deviceAuthorizationFailedCheckCode': - 'Ошибка авторизации устройства, проверьте код авторизации', + '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': 'Оставить отзыв или предложение', - 'feedbackDescription': - 'Пожалуйста, опишите проблему, с которой вы столкнулись, или ваше предложение', + 'feedbackDescription': 'Пожалуйста, опишите проблему, с которой вы столкнулись, или ваше предложение', 'feedbackHint': 'Пожалуйста, введите ваш отзыв...', 'feedbackRequired': 'Пожалуйста, введите содержание отзыва', 'contactInfo': 'Контактная информация', 'contactHint': 'E-mail/Телефон, чтобы мы могли с вами связаться', 'submit': 'Отправить', 'feedbackSubmitSuccess': 'Отзыв успешно отправлен, спасибо за ваш отзыв!', - 'feedbackSubmitFailed': - 'Не удалось отправить отзыв, попробуйте еще раз позже', + 'feedbackSubmitFailed': 'Не удалось отправить отзыв, попробуйте еще раз позже', // OTA升级模块 - "upgradeExitConfirm": - "Идет обновление, выход прервет процесс обновления, вы уверены, что хотите выйти?", + "upgradeExitConfirm": "Идет обновление, выход прервет процесс обновления, вы уверены, что хотите выйти?", "deviceModel": "Модель устройства", "unknownDevice": "Неизвестное устройство", "currentFirmwareVersion": "Текущая версия прошивки", @@ -800,20 +1306,22 @@ const Map ruRU = { "connectionFailed": "Ошибка подключения", "retryConnection": "Повторить подключение", "ota_updateNow": "Обновить сейчас", - "keepConnectedDontClose": - "Пожалуйста, держите устройство подключенным, не закрывайте приложение", + "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": "Зарядка", "updateContent": "Содержание обновления", - "removeEarbudsEnsureBattery": - "Извлеките оба наушника и убедитесь, что уровень заряда батареи в обоих превышает 20%", + "removeEarbudsEnsureBattery": "Извлеките оба наушника и убедитесь, что уровень заряда батареи в обоих превышает 20%", // 音乐列表页面 - "noMusic": "Нет музыки", - "noPlayingMusic": "Нет воспроизводимой музыки", - "unknownSong": "Неизвестная песня", - "unknownArtist": "Неизвестный исполнитель", - "playAll": "Воспроизвести все", + "noMusic": "Нет музыки", // 暂无音乐 + "noPlayingMusic": "Нет воспроизводимой музыки", // 暂无播放音乐 + "unknownSong": "Неизвестная песня", // 未知歌曲 + "unknownArtist": "Неизвестный исполнитель", // 未知歌手 + "playAll": "Воспроизвести все", // 播放全部 // 语言名称 "中文(简体)": "Китайский (упрощенный)", @@ -855,91 +1363,21 @@ 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.', - - // Translation goods page (placeholders) - 'transHeaderDesc1': - 'Синхронный перевод и перевод текста в реальном времени с низкой задержкой голосового озвучивания.', - 'transHeaderDesc2': - 'Подходит для путешествий, бизнеса, выступлений и обучения.', - 'translateZhEn': 'Китайско-английский перевод', - 'lowLatencyVoiceBroadcast': 'Голосовое вещание с низкой задержкой', - 'multiLangTextTranslation': 'Многоязычный перевод текста', - 'termOptimizationContextPreserve': - 'Оптимизация терминологии и сохранение контекста', - 'lexiconTourBusinessLife': - 'Лексика для путешествий/бизнеса/повседневной жизни', - 'personalVocabularyMemory': 'Память персонального словаря', - 'conversationSubtitleLargeText': 'Субтитры беседы / режим крупных шрифтов', - 'colorHighContrast': 'Высокая контрастность цветов', - 'transDisclaimer': - 'Качество перевода зависит от микрофона, сетевой задержки и фонового шума.', + // 时间相关 + "justNow": "Just now", + "minutesAgo": "@minutes minutes ago", + "yesterday": "Yesterday", + // 时间扩展(图片翻译模块使用) + "daysAgo": "@days days ago", + "hoursAgo": "@hours hours ago", - // VIP goods page (placeholders) - 'benefitsOverview': 'Обзор преимуществ', - 'higherQuota': 'Более высокая квота использования', - 'lowerUnitPrice': 'Низкая цена за единицу', - 'priorityService': 'Приоритетное обслуживание', - 'exclusiveSupportChannel': 'Выделенный канал поддержки', - 'fastResponse': 'Быстрый отклик на проблемы', - 'eventsAndDiscounts': 'События и скидки', - 'memberExclusiveEvents': 'Эксклюзивные мероприятия для участников', - 'longTermDiscountPlan': 'Долгосрочный план скидок', - 'generalPrivileges': 'Общие привилегии', - 'earlyAccessNewFeatures': 'Ранний доступ к новым функциям', - 'crossDeviceSync': 'Синхронизация между устройствами', - 'vipDisclaimer': - 'Фактические преимущества зависят от деталей пакета и могут меняться с версиями.', + //补充 + "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/sk_sk.dart b/lib/core/translations/language/sk_sk.dart index 2e33a37ad..464490f26 100644 --- a/lib/core/translations/language/sk_sk.dart +++ b/lib/core/translations/language/sk_sk.dart @@ -71,8 +71,7 @@ const Map skSK = { // 登录页 "welcome": "Vitajte", - "loginTips": - "Prihláste sa alebo sa zaregistrujte pomocou telefónneho čísla alebo e-mailu", + "loginTips": "Prihláste sa alebo sa zaregistrujte pomocou telefónneho čísla alebo e-mailu", "accountNumber": "Telefónne číslo alebo e-mail", "verificationCode": "Overovací kód", "getCode": "Získať kód", @@ -91,8 +90,7 @@ const Map skSK = { "tip": "Tip", "pleaseEnterCompleteCode": "Zadajte kompletný overovací kód", "loginFailed": "Prihlásenie zlyhalo, skúste to znova", - 'pleaseAcceptPrivacyPolicy': - 'Najprv si prečítajte a súhlaste so Zásadami ochrany osobných údajov a Používateľskou zmluvou', + 'pleaseAcceptPrivacyPolicy': 'Najprv si prečítajte a súhlaste so Zásadami ochrany osobných údajov a Používateľskou zmluvou', "enterVerificationCode": "Zadajte overovací kód", "verificationCodeSentTo": "Overovací kód bol odoslaný na", "resendVerificationCode": "Znova odoslať overovací kód", @@ -100,12 +98,14 @@ 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", @@ -115,29 +115,24 @@ const Map skSK = { "signal": "Signál", "deviceId": "ID zariadenia", "firmwareVersion": "Verzia firmvéru", - "disconnectedDevice": - "Žiadne zariadenie nie je pripojené, kliknite na tlačidlo nižšie pre pripojenie", + "disconnectedDevice": "Žiadne zariadenie nie je pripojené, kliknite na tlačidlo nižšie pre pripojenie", "connectDevice": "Pripojiť zariadenie", "topAiExperiences": "Najlepšie AI zážitky", "aiAssistant": "Všestranný AI asistent", - "aiAssistantInfo": - "Exkluzívny konzultant 24/7, odpovedá na otázky, poskytuje návrhy", + "aiAssistantInfo": "Exkluzívny konzultant 24/7, odpovedá na otázky, poskytuje návrhy", "interpretation": "Simultánne tlmočenie", - "simultaneousInterpretationInfo": - "Preklad v reálnom čase vo viac ako 80 jazykoch, bezstarostné cestovanie do zahraničia", + "simultaneousInterpretationInfo": "Preklad v reálnom čase vo viac ako 80 jazykoch, bezstarostné cestovanie do zahraničia", "aiCompanion": "Rodinný spoločník", "aiCompanionInfo": "Rozumie vám, teplé spoločenstvo", "homeSlogan": "Pripájanie sveta, presahujúce zvuk", - "turnEarphones": - "Otvorte nabíjacie puzdro slúchadiel a vložte si slúchadlá do uší", + "turnEarphones": "Otvorte nabíjacie puzdro slúchadiel a vložte si slúchadlá do uší", "currentlyConnected": "Momentálne pripojené:", "unsystemSetup": "Prejsť do systémových nastavení", "talkLater": "Neskôr", "initializing": "Inicializácia...", "bluetoothInitializationFailure": "Inicializácia služby Bluetooth zlyhala", "checkingPermissions": "Kontrola povolení...", - "lackPermissions": - "Chýbajú povolenia Bluetooth a je potrebné povoliť prístup k lokáli", + "lackPermissions": "Chýbajú povolenia Bluetooth a je potrebné povoliť prístup k lokáli", "searchingDevice": "Vyhľadávanie zariadení...", "findConnectedDevice": "Nájdené pripojené zariadenie", "notFound": "Nenájdené žiadne pripojené Bluetooth zariadenie", @@ -174,18 +169,204 @@ const Map skSK = { "faceToFaceTranslation": "Preklad tvárou v tvár", 'audioVideoTranslation': 'Preklad zvuku a videa', 'callTranslation': 'Preklad hovorov', - "simultaneousTranslationInfo": - "Preklad v reálnom čase vo viac ako 80 jazykoch", + "simultaneousTranslationInfo": "Preklad v reálnom čase vo viac ako 80 jazykoch", "aiGirlfriend": "AI priateľka", "aiGirlfriendInfo": "Inteligentný spoločník, chatujte kedykoľvek", "healthConsultant": "Multifunkčný AI chat", "healthConsultantInfo": "Ponúka viac funkcií AI chatu", "conferenceAssistant": "Asistent pre obchodné stretnutia", - "conferenceAssistantInfo": - "Záznam zápisnice v reálnom čase, viacjazyčný preklad", + "conferenceAssistantInfo": "Záznam zápisnice v reálnom čase, viacjazyčný preklad", "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 +381,225 @@ 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 +611,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", @@ -228,11 +621,9 @@ const Map skSK = { "voiceServiceInfo": "Výber služby rozpoznávania a syntézy reči", "selectVoiceService": "Vyberte hlasovú službu", "azureVoiceService": "Hlasová služba Azure", - "azureVoiceServiceInfo": - "Cloudová hlasová služba spoločnosti Microsoft, podporuje vysokokvalitnú syntézu a rozpoznávanie reči", + "azureVoiceServiceInfo": "Cloudová hlasová služba spoločnosti Microsoft, podporuje vysokokvalitnú syntézu a rozpoznávanie reči", "flutterVoiceService": "Lokálna hlasová služba Flutter", - "flutterVoiceServiceInfo": - "Lokálna hlasová služba zariadenia, možno použiť bez pripojenia na internet", + "flutterVoiceServiceInfo": "Lokálna hlasová služba zariadenia, možno použiť bez pripojenia na internet", 'timbreService': 'Služba zafarbenia hlasu', 'timbreServiceInfo': 'Vyberte službu syntézy reči so zafarbením hlasu', 'defaultTimbre': 'Predvolené zafarbenie hlasu', @@ -254,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Vyskúšajte funkciu inteligentnej hlasovej interakcie (ukážka funkcie)", + "realtimeVoiceChatInfo": "Vyskúšajte funkciu inteligentnej hlasovej interakcie (ukážka funkcie)", "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 +697,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' @@ -310,20 +721,16 @@ const Map skSK = { '• Ovládať funkcie slúchadiel\n\n' 'Ako vám môžem pomôcť?', 'microphonePermission': 'Mikrofón', - 'voiceRecognitionPermissionText': - 'Funkcia rozpoznávania reči vyžaduje prístup k mikrofónu.', - 'voiceTranslationPermissionText': - 'Funkcia rozpoznávania a prekladu reči vyžaduje prístup k mikrofónu.', - 'phoneCallPermissionText': - 'Funkcia volania vyžaduje prístup k mikrofónu pre hlasové hovory.', - 'permissionDeniedText': - 'Trvalo ste odmietli povolenie pre mikrofón, prejdite do systémových nastavení, aby ste ho povolili.', + 'voiceRecognitionPermissionText': 'Funkcia rozpoznávania reči vyžaduje prístup k mikrofónu.', + 'voiceTranslationPermissionText': 'Funkcia rozpoznávania a prekladu reči vyžaduje prístup k mikrofónu.', + 'phoneCallPermissionText': 'Funkcia volania vyžaduje prístup k mikrofónu pre hlasové hovory.', + 'permissionDeniedText': 'Trvalo ste odmietli povolenie pre mikrofón, prejdite do systémových nastavení, aby ste ho povolili.', 'startVoiceInput': 'Začať hlasový vstup', '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 +739,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', @@ -339,8 +747,8 @@ const Map skSK = { 'privacyRelated': 'Súvisiace s ochranou osobných údajov', 'copyrightViolation': 'Porušenie mojich autorských práv, dobrého mena atď.', 'other': 'Iné', - 'reportDescriptionHint': - 'Chceme vedieť dôvod vášho hlásenia, môžete opísať problém, s ktorým ste sa stretli.', + '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 +759,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", @@ -371,22 +779,14 @@ const Map skSK = { 'lowest': 'Najnižšia', 'futureForecast': 'Budúca predpoveď', 'hotWeatherTip': 'Dnes je horúco, dávajte si pozor na úpal a pite veľa vody', - 'coldWeatherTip': - 'Dnes je nízka teplota, oblečte sa teplo, keď idete von, aby ste neprechladli', - 'rainyWeatherTip': - 'Dnes prší, vezmite si dáždnik, keď idete von, a dávajte si pozor na cestách', - 'snowyWeatherTip': - 'Dnes sneží, cesta je klzká, dávajte si pozor a teplo sa oblečte', - 'foggyWeatherTip': - 'Dnes je hmla, viditeľnosť je nízka, noste rúško, keď idete von', - 'windyWeatherTip': - 'Dnes fúka silný vietor, dávajte si pozor, keď idete von, a zaistite si veci', - 'sunnyWeatherTip': - 'Dnes je slnečno a silné UV žiarenie, používajte opaľovací krém, keď idete von', - 'temperatureDifferenceTip': - 'Dnes je veľký rozdiel teplôt medzi dňom a nocou, prispôsobte si oblečenie', - 'comfortableWeatherTip': - 'Dnes je príjemné počasie, skvelý čas na vonkajšie aktivity', + 'coldWeatherTip': 'Dnes je nízka teplota, oblečte sa teplo, keď idete von, aby ste neprechladli', + 'rainyWeatherTip': 'Dnes prší, vezmite si dáždnik, keď idete von, a dávajte si pozor na cestách', + 'snowyWeatherTip': 'Dnes sneží, cesta je klzká, dávajte si pozor a teplo sa oblečte', + 'foggyWeatherTip': 'Dnes je hmla, viditeľnosť je nízka, noste rúško, keď idete von', + 'windyWeatherTip': 'Dnes fúka silný vietor, dávajte si pozor, keď idete von, a zaistite si veci', + 'sunnyWeatherTip': 'Dnes je slnečno a silné UV žiarenie, používajte opaľovací krém, keď idete von', + 'temperatureDifferenceTip': 'Dnes je veľký rozdiel teplôt medzi dňom a nocou, prispôsobte si oblečenie', + 'comfortableWeatherTip': 'Dnes je príjemné počasie, skvelý čas na vonkajšie aktivity', "monday": "Po", "tuesday": "Ut", "wednesday": "St", @@ -394,6 +794,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", @@ -427,28 +838,26 @@ const Map skSK = { "logout": "Odhlásiť sa", "logoutTips": "Ste si istí, že sa chcete odhlásiť z aktuálneho účtu?", '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äť.', + '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': - 'Sieťové pripojenie zlyhalo, skontrolujte nastavenia siete a skúste to znova', - 'serverTemporarilyUnavailable': - 'Server je dočasne nedostupný, skúste to znova neskôr', + 'networkConnectionFailed': 'Sieťové pripojenie zlyhalo, skontrolujte nastavenia siete a skúste to znova', + 'serverTemporarilyUnavailable': 'Server je dočasne nedostupný, skúste to znova neskôr', 'loginExpiredPleaseRelogin': 'Vaša relácia vypršala, prihláste sa znova', 'noPermissionForThisOperation': 'Nemáte povolenie na túto operáciu', 'requestedResourceNotFound': 'Požadovaný zdroj sa nenašiel', - 'imageProcessingFailedPleaseReselect': - 'Spracovanie obrázka zlyhalo, vyberte iný obrázok', + 'imageProcessingFailedPleaseReselect': 'Spracovanie obrázka zlyhalo, vyberte iný obrázok', 'operationFailedPleaseRetry': 'Operácia zlyhala, skúste to znova', 'serverReturnedError': 'Server vrátil chybu', 'serverError': 'Chyba servera', - 'networkConnectionFailedCheckSettings': - 'Sieťové pripojenie zlyhalo, skontrolujte nastavenia siete', - 'serverInternalErrorRetryLater': - 'Interná chyba servera, skúste to znova neskôr', + 'networkConnectionFailedCheckSettings': 'Sieťové pripojenie zlyhalo, skontrolujte nastavenia siete', + 'serverInternalErrorRetryLater': '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,35 +870,41 @@ 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', - '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á', + '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á', // 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', - 'calendarWritePermissionDesc': - 'Používa sa na vytváranie udalostí a pripomienok v kalendári', - 'calendarFullAccessPermissionDesc': - 'Používa sa na čítanie a správu udalostí a pripomienok v kalendári', - 'locationPermissionDesc': - 'Používa sa na získanie informácií o aktuálnej polohe', + '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': 'Používa sa na čítanie a správu udalostí a pripomienok v kalendári', + 'locationPermissionDesc': 'Používa sa na získanie informácií o aktuálnej polohe', 'appFunctionNeeds': 'Funkcia aplikácie vyžaduje', 'authorized': 'Autorizované', 'unauthorized': 'Neautorizované', @@ -499,30 +914,64 @@ const Map skSK = { 'permissionGranted': 'Povolenie udelené', 'permissionRequestError': 'Chyba pri žiadaní o povolenie', 'phonePermissionDetailDesc': 'Funkcia volania vyžaduje povolenie pre telefón', - 'smsPermissionDetailDesc': - 'Funkcia odosielania SMS vyžaduje povolenie pre SMS', - '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', - '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', + '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', - 'cannotOpenAppStore': - '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', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Počas aktualizácie sa vyskytla chyba, skúste to znova neskôr', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -631,8 +1080,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,18 +1105,76 @@ 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äť.", + "clearHistoryConfirm": "Ste si istí, že chcete vymazať celú históriu prekladov? Túto akciu nie je možné vrátiť späť.", "unknownLanguage": "Neznámy jazyk", "deleteSessionRecord": "Odstrániť záznam relácie", - "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äť.", + "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...", @@ -667,8 +1189,7 @@ const Map skSK = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Pôvodný záznam", "recordSummary": "Zhrnutie záznamu", - "clickToGenerateSummary": - "Kliknite na tlačidlo nižšie pre vygenerovanie zhrnutia relácie", + "clickToGenerateSummary": "Kliknite na tlačidlo nižšie pre vygenerovanie zhrnutia relácie", "summaryContent": "Obsah zhrnutia", "copied": "Skopírované", "summaryCopiledToClipboard": "Zhrnutie skopírované do schránky", @@ -676,11 +1197,9 @@ const Map skSK = { "summaryGenerated": "Zhrnutie vygenerované", "generating": "Generuje sa...", "regenerate": "Znova vygenerovať", - "summaryTimeoutMessage": - "Požiadavka na generovanie zhrnutia vypršala, môže to byť spôsobené problémami so sieťou alebo zaneprázdneným serverom.", + "summaryTimeoutMessage": "Požiadavka na generovanie zhrnutia vypršala, môže to byť spôsobené problémami so sieťou alebo zaneprázdneným serverom.", "deleteTranslationRecord": "Odstrániť záznam prekladu", - "deleteTranslationConfirm": - "Ste si istí, že chcete odstrániť tento záznam prekladu? Túto akciu nie je možné vrátiť späť.", + "deleteTranslationConfirm": "Ste si istí, že chcete odstrániť tento záznam prekladu? Túto akciu nie je možné vrátiť späť.", "originalText": "Pôvodný text", "translatedText": "Preložený text", "sessionSummary": "Zhrnutie relácie", @@ -698,7 +1217,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...", @@ -708,37 +1227,34 @@ const Map skSK = { // 配对状态文本 "readyToPair": "Pripravené na párovanie", "preparingPairingEnvironment": "Príprava prostredia na párovanie...", - "connectDeepSoundViaSystemBluetooth": - "Najprv sa pripojte k zariadeniu Voitrans cez systémový Bluetooth", + "connectDeepSoundViaSystemBluetooth": "Najprv sa pripojte k zariadeniu Voitrans cez systémový Bluetooth", "deviceBindingConfirm": "Potvrdenie prepojenia zariadenia...", "establishingDeviceAssociation": "Vytvára sa priradenie zariadenia...", "waitingCompletePairing": "Počkajte, prosím, párovanie sa dokončuje...", - "pairingSuccessRedirecting": - "Párovanie úspešné! Presmerováva sa na domovskú stránku...", + "pairingSuccessRedirecting": "Párovanie úspešné! Presmerováva sa na domovskú stránku...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Uistite sa, že ste pripojení k zariadeniu Voitrans", - "deviceAlreadyBoundToOtherAccount": - "Toto zariadenie je už prepojené s iným účtom", + "ensureConnectedDeepSoundDevice": "Uistite sa, že ste pripojení k zariadeniu Voitrans", + "deviceAlreadyBoundToOtherAccount": "Toto zariadenie je už prepojené s iným účtom", "deviceAssociationFailed": "Priradenie zariadenia zlyhalo, skúste to znova", - "scanTimeoutEnsureDeviceNearby": - "Skenovanie vypršalo, uistite sa, že je zariadenie v blízkosti", + "scanTimeoutEnsureDeviceNearby": "Skenovanie vypršalo, uistite sa, že je zariadenie v blízkosti", "networkError": "Chyba siete", - "authorizationFailedCheckCode": - "Autorizácia zlyhala, skontrolujte, či je autorizačný kód správny", + "authorizationFailedCheckCode": "Autorizácia zlyhala, skontrolujte, či je autorizačný kód správny", "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', + '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...', + 'needManualBindingAuthCode': 'Vyžaduje sa kód pre autorizáciu manuálneho prepojenia...', 'pairingSuccessful': 'Párovanie úspešné!', 'enableBluetooth': 'Zapnúť Bluetooth', 'grantPermissions': 'Udeliť povolenia', @@ -750,32 +1266,35 @@ const Map skSK = { 'verificationFailedRetry': 'Overenie zlyhalo, skúste to znova', 'invalidDeviceAddress': 'Neplatná adresa zariadenia', 'bleDeviceAssociationFailed': 'Priradenie zariadenia BLE zlyhalo', - 'deviceAssociationFailedRetry': - 'Priradenie zariadenia zlyhalo, skúste to znova', + 'deviceAssociationFailedRetry': 'Priradenie zariadenia zlyhalo, skúste to znova', 'bleConnectionTimeoutRetry': 'Časový limit pripojenia BLE, skúste to znova', 'blePairingStartupFailed': 'Spustenie párovania BLE zlyhalo', 'bleConnectionFailed': 'Pripojenie BLE zlyhalo', - 'deviceAuthorizationFailedCheckCode': - 'Autorizácia zariadenia zlyhala, skontrolujte autorizačný kód', + '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', - 'feedbackDescription': - 'Opíšte problém, s ktorým ste sa stretli, alebo váš návrh', + 'feedbackDescription': 'Opíšte problém, s ktorým ste sa stretli, alebo váš návrh', 'feedbackHint': 'Zadajte svoju spätnú väzbu...', 'feedbackRequired': 'Zadajte obsah spätnej väzby', 'contactInfo': 'Kontaktné informácie', 'contactHint': 'E-mail/Telefón, aby sme vás mohli kontaktovať', 'submit': 'Odoslať', - 'feedbackSubmitSuccess': - 'Spätná väzba úspešne odoslaná, ďakujeme za vašu spätnú väzbu!', - 'feedbackSubmitFailed': - 'Odoslanie spätnej väzby zlyhalo, skúste to znova neskôr', + 'feedbackSubmitSuccess': 'Spätná väzba úspešne odoslaná, ďakujeme za vašu spätnú väzbu!', + 'feedbackSubmitFailed': 'Odoslanie spätnej väzby zlyhalo, skúste to znova neskôr', // OTA升级模块 - "upgradeExitConfirm": - "Prebieha aktualizácia, odchodom sa proces preruší, ste si istí, že chcete odísť?", + "upgradeExitConfirm": "Prebieha aktualizácia, odchodom sa proces preruší, ste si istí, že chcete odísť?", "deviceModel": "Model zariadenia", "unknownDevice": "Neznáme zariadenie", "currentFirmwareVersion": "Aktuálna verzia firmvéru", @@ -787,20 +1306,22 @@ const Map skSK = { "connectionFailed": "Pripojenie zlyhalo", "retryConnection": "Znova pripojiť", "ota_updateNow": "Aktualizovať teraz", - "keepConnectedDontClose": - "Udržujte zariadenie pripojené, nezatvárajte aplikáciu", + "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", "charging": "Nabíja sa", "updateContent": "Obsah aktualizácie", - "removeEarbudsEnsureBattery": - "Vyberte obe slúchadlá a uistite sa, že batéria oboch je nad 20%", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..740e2950a 100644 --- a/lib/core/translations/language/sl_si.dart +++ b/lib/core/translations/language/sl_si.dart @@ -71,8 +71,7 @@ const Map slSI = { // 登录页 "welcome": "Dobrodošli", - "loginTips": - "Prijavite se ali registrirajte s svojo telefonsko številko ali e-pošto", + "loginTips": "Prijavite se ali registrirajte s svojo telefonsko številko ali e-pošto", "accountNumber": "Telefonska številka ali e-pošta", "verificationCode": "Verifikacijska koda", "getCode": "Pridobi kodo", @@ -91,8 +90,7 @@ const Map slSI = { "tip": "Namig", "pleaseEnterCompleteCode": "Vnesite celotno verifikacijsko kodo", "loginFailed": "Prijava ni uspela, poskusite znova", - 'pleaseAcceptPrivacyPolicy': - 'Najprej preberite in se strinjajte s Politiko zasebnosti in Uporabniškim sporazumom', + 'pleaseAcceptPrivacyPolicy': 'Najprej preberite in se strinjajte s Politiko zasebnosti in Uporabniškim sporazumom', "enterVerificationCode": "Vnesite verifikacijsko kodo", "verificationCodeSentTo": "Verifikacijska koda je bila poslana na", "resendVerificationCode": "Ponovno pošlji verifikacijsko kodo", @@ -100,12 +98,14 @@ 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", @@ -115,16 +115,13 @@ const Map slSI = { "signal": "Signal", "deviceId": "ID naprave", "firmwareVersion": "Različica vdelane programske opreme", - "disconnectedDevice": - "Nobena naprava ni povezana, kliknite spodnji gumb za povezavo", + "disconnectedDevice": "Nobena naprava ni povezana, kliknite spodnji gumb za povezavo", "connectDevice": "Poveži napravo", "topAiExperiences": "Vrhunske izkušnje z AI", "aiAssistant": "Vsestranski pomočnik AI", - "aiAssistantInfo": - "Ekskluzivni svetovalec 24/7, odgovarja na vprašanja, daje predloge", + "aiAssistantInfo": "Ekskluzivni svetovalec 24/7, odgovarja na vprašanja, daje predloge", "interpretation": "Simultano tolmačenje", - "simultaneousInterpretationInfo": - "Prevajanje v realnem času v več kot 80 jezikov, brezskrbna potovanja v tujino", + "simultaneousInterpretationInfo": "Prevajanje v realnem času v več kot 80 jezikov, brezskrbna potovanja v tujino", "aiCompanion": "Družinski spremljevalec", "aiCompanionInfo": "Razume vas, topla družba", "homeSlogan": "Povezovanje sveta, preseganje zvoka", @@ -133,11 +130,9 @@ const Map slSI = { "unsystemSetup": "Pojdi na sistemske nastavitve", "talkLater": "Kasneje", "initializing": "Inicializacija...", - "bluetoothInitializationFailure": - "Inicializacija storitve Bluetooth ni uspela", + "bluetoothInitializationFailure": "Inicializacija storitve Bluetooth ni uspela", "checkingPermissions": "Preverjanje dovoljenj...", - "lackPermissions": - "Manjkajo dovoljenja za Bluetooth in je potrebno omogočiti dostop do lokacije", + "lackPermissions": "Manjkajo dovoljenja za Bluetooth in je potrebno omogočiti dostop do lokacije", "searchingDevice": "Iskanje naprav...", "findConnectedDevice": "Najdena povezana naprava", "notFound": "Nobena povezana naprava Bluetooth ni bila najdena", @@ -174,18 +169,204 @@ const Map slSI = { "faceToFaceTranslation": "Prevajanje iz oči v oči", 'audioVideoTranslation': 'Prevajanje avdia in videa', 'callTranslation': 'Prevajanje klicev', - "simultaneousTranslationInfo": - "Prevajanje v realnem času v več kot 80 jezikov", + "simultaneousTranslationInfo": "Prevajanje v realnem času v več kot 80 jezikov", "aiGirlfriend": "AI dekle", "aiGirlfriendInfo": "Inteligentni spremljevalec, klepetajte kadarkoli", "healthConsultant": "Večnamenski AI klepet", "healthConsultantInfo": "Ponuja več funkcij AI klepeta", "conferenceAssistant": "Pomočnik za poslovne sestanke", - "conferenceAssistantInfo": - "Zapisovanje zapisnikov v realnem času, večjezično prevajanje", + "conferenceAssistantInfo": "Zapisovanje zapisnikov v realnem času, večjezično prevajanje", "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 +381,225 @@ 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 +611,8 @@ 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", @@ -228,11 +621,9 @@ const Map slSI = { "voiceServiceInfo": "Izbira storitve za prepoznavanje in sintezo govora", "selectVoiceService": "Izberi glasovno storitev", "azureVoiceService": "Azure glasovna storitev", - "azureVoiceServiceInfo": - "Microsoftova glasovna storitev v oblaku, podpira visokokakovostno sintezo in prepoznavanje govora", + "azureVoiceServiceInfo": "Microsoftova glasovna storitev v oblaku, podpira visokokakovostno sintezo in prepoznavanje govora", "flutterVoiceService": "Lokalna glasovna storitev Flutter", - "flutterVoiceServiceInfo": - "Lokalna glasovna storitev naprave, uporaba brez internetne povezave", + "flutterVoiceServiceInfo": "Lokalna glasovna storitev naprave, uporaba brez internetne povezave", 'timbreService': 'Storitev barve glasu', 'timbreServiceInfo': 'Izberite storitev sinteze govora z barvo glasu', 'defaultTimbre': 'Privzeta barva glasu', @@ -243,8 +634,7 @@ const Map slSI = { 'pleaseRead': 'Preberite na glas', 'completeRecording': 'Dokončaj snemanje', "firmwareUpgrade": "Nadgradnja vdelane programske opreme", - "bleHeadsetFirmwareUpgrade": - "Nadgradnja različice vdelane programske opreme slušalk BLE", + "bleHeadsetFirmwareUpgrade": "Nadgradnja različice vdelane programske opreme slušalk BLE", "deviceManagement": "Upravljanje naprav", "manageConnectedDevices": "Upravljanje povezanih naprav Bluetooth", @@ -255,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Izkusite funkcijo inteligentne glasovne interakcije (predogled funkcije)", + "realtimeVoiceChatInfo": "Izkusite funkcijo inteligentne glasovne interakcije (predogled funkcije)", "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 +697,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' @@ -311,20 +721,16 @@ const Map slSI = { '• Upravljam funkcije slušalk\n\n' 'Kako vam lahko pomagam?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': - 'Funkcija prepoznavanja govora zahteva dostop do mikrofona.', - 'voiceTranslationPermissionText': - 'Funkcija prepoznavanja in prevajanja govora zahteva dostop do mikrofona.', - 'phoneCallPermissionText': - 'Funkcija klicanja zahteva dostop do mikrofona za glasovne klice.', - 'permissionDeniedText': - 'Trajno ste zavrnili dovoljenje za mikrofon, prosimo, pojdite v sistemske nastavitve, da ga omogočite.', + 'voiceRecognitionPermissionText': 'Funkcija prepoznavanja govora zahteva dostop do mikrofona.', + 'voiceTranslationPermissionText': 'Funkcija prepoznavanja in prevajanja govora zahteva dostop do mikrofona.', + 'phoneCallPermissionText': 'Funkcija klicanja zahteva dostop do mikrofona za glasovne klice.', + 'permissionDeniedText': 'Trajno ste zavrnili dovoljenje za mikrofon, prosimo, pojdite v sistemske nastavitve, da ga omogočite.', 'startVoiceInput': 'Začni glasovni vnos', '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', @@ -332,8 +738,8 @@ const Map slSI = { 'report': 'Prijavi', 'submitSuccess': 'Uspešno poslano', 'submitFailed': 'Pošiljanje ni uspelo', - 'reportSubmitted': - 'Prijava je bila poslana, obdelali jo bomo v najkrajšem možnem času', + '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', @@ -341,8 +747,8 @@ const Map slSI = { 'privacyRelated': 'Povezano z zasebnostjo', 'copyrightViolation': 'Kršitev mojih avtorskih pravic, ugleda itd.', 'other': 'Drugo', - 'reportDescriptionHint': - 'Želimo vedeti, zakaj prijavljate, lahko opišete težavo, s katero ste se soočili.', + '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 +759,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', @@ -372,24 +778,15 @@ const Map slSI = { 'highest': 'Najvišja', 'lowest': 'Najnižja', 'futureForecast': 'Prihodnja napoved', - 'hotWeatherTip': - 'Danes je vroče, pazite na vročinsko kap in pijte veliko vode', - 'coldWeatherTip': - 'Danes je temperatura nizka, oblecite se toplo, ko greste ven, da se ne prehladite', - 'rainyWeatherTip': - 'Danes dežuje, vzemite s seboj dežnik, ko greste ven, in pazite na poti', - 'snowyWeatherTip': - 'Danes sneži, cesta je spolzka, pazite in se toplo oblecite', - 'foggyWeatherTip': - 'Danes je megla, vidljivost je zmanjšana, nosite masko, ko greste ven', - 'windyWeatherTip': - 'Danes piha močan veter, pazite, ko greste ven, in zavarujte svoje stvari', - 'sunnyWeatherTip': - 'Danes je sončno in močno UV sevanje, uporabite sončno kremo, ko greste ven', - 'temperatureDifferenceTip': - 'Danes je velika razlika v temperaturi med dnevom in nočjo, prilagodite oblačila', - 'comfortableWeatherTip': - 'Danes je vreme prijetno, odličen čas za dejavnosti na prostem', + 'hotWeatherTip': 'Danes je vroče, pazite na vročinsko kap in pijte veliko vode', + 'coldWeatherTip': 'Danes je temperatura nizka, oblecite se toplo, ko greste ven, da se ne prehladite', + 'rainyWeatherTip': 'Danes dežuje, vzemite s seboj dežnik, ko greste ven, in pazite na poti', + 'snowyWeatherTip': 'Danes sneži, cesta je spolzka, pazite in se toplo oblecite', + 'foggyWeatherTip': 'Danes je megla, vidljivost je zmanjšana, nosite masko, ko greste ven', + 'windyWeatherTip': 'Danes piha močan veter, pazite, ko greste ven, in zavarujte svoje stvari', + 'sunnyWeatherTip': 'Danes je sončno in močno UV sevanje, uporabite sončno kremo, ko greste ven', + 'temperatureDifferenceTip': 'Danes je velika razlika v temperaturi med dnevom in nočjo, prilagodite oblačila', + 'comfortableWeatherTip': 'Danes je vreme prijetno, odličen čas za dejavnosti na prostem', "monday": "Pon", "tuesday": "Tor", "wednesday": "Sre", @@ -397,6 +794,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", @@ -428,31 +836,28 @@ const Map slSI = { "notSet": "Ni nastavljeno", "accountSetting": "Nastavitve računa", "logout": "Odjava", - "logoutTips": - "Ali ste prepričani, da se želite odjaviti iz trenutnega računa?", + "logoutTips": "Ali ste prepričani, da se želite odjaviti iz trenutnega računa?", 'deleteAccount': 'Izbriši račun', - 'deleteAccountTips': - 'Ali ste prepričani, da želite trajno izbrisati svoj račun? Tega dejanja ni mogoče razveljaviti', + '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': - 'Napaka v omrežni povezavi, preverite nastavitve omrežja in poskusite znova', - 'serverTemporarilyUnavailable': - 'Strežnik je začasno nedosegljiv, poskusite znova kasneje', + 'networkConnectionFailed': 'Napaka v omrežni povezavi, preverite nastavitve omrežja in poskusite znova', + 'serverTemporarilyUnavailable': 'Strežnik je začasno nedosegljiv, poskusite znova kasneje', 'loginExpiredPleaseRelogin': 'Vaša seja je potekla, prijavite se znova', 'noPermissionForThisOperation': 'Nimate dovoljenja za to operacijo', 'requestedResourceNotFound': 'Zahtevan vir ni bil najden', - 'imageProcessingFailedPleaseReselect': - 'Obdelava slike ni uspela, izberite drugo sliko', + 'imageProcessingFailedPleaseReselect': 'Obdelava slike ni uspela, izberite drugo sliko', 'operationFailedPleaseRetry': 'Operacija ni uspela, poskusite znova', 'serverReturnedError': 'Strežnik je vrnil napako', 'serverError': 'Napaka strežnika', - 'networkConnectionFailedCheckSettings': - 'Napaka v omrežni povezavi, preverite nastavitve omrežja', - 'serverInternalErrorRetryLater': - 'Notranja napaka strežnika, poskusite znova kasneje', + 'networkConnectionFailedCheckSettings': 'Napaka v omrežni povezavi, preverite nastavitve omrežja', + 'serverInternalErrorRetryLater': '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,35 +870,41 @@ 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', - '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', + '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', // 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', - 'calendarWritePermissionDesc': - 'Uporablja se za ustvarjanje dogodkov in opomnikov v koledarju', - 'calendarFullAccessPermissionDesc': - 'Uporablja se za branje in upravljanje dogodkov in opomnikov v koledarju', - 'locationPermissionDesc': - 'Uporablja se za pridobivanje informacij o trenutni lokaciji', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Uporablja se za ustvarjanje dogodkov in opomnikov v koledarju', + 'calendarFullAccessPermissionDesc': 'Uporablja se za branje in upravljanje dogodkov in opomnikov v koledarju', + 'locationPermissionDesc': 'Uporablja se za pridobivanje informacij o trenutni lokaciji', 'appFunctionNeeds': 'Funkcija aplikacije zahteva', 'authorized': 'Avtorizirano', 'unauthorized': 'Neavtorizirano', @@ -502,32 +913,65 @@ const Map slSI = { 'unknownStatus': 'Neznano stanje', 'permissionGranted': 'Dovoljenje je bilo odobreno', 'permissionRequestError': 'Napaka pri zahtevanju dovoljenja', - 'phonePermissionDetailDesc': - 'Funkcija klicanja zahteva dovoljenje za telefon', - 'smsPermissionDetailDesc': - 'Funkcija pošiljanja SMS zahteva dovoljenje za SMS', - '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', - 'appNeedsPermissionForFullFunction': - 'Aplikacija zahteva to dovoljenje za polno funkcionalnost', - 'permanentDenialText': - 'Trajno ste zavrnili dovoljenje za {permission}, pojdite v nastavitve aplikacije, da ga omogočite', + 'phonePermissionDetailDesc': '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', - 'cannotOpenAppStore': - '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', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Prišlo je do napake med posodabljanjem, poskusite znova kasneje', // 更新错误重试提示 //国家列表 "邮箱": "E-pošta", @@ -636,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Ali ste prepričani, da želite počistiti vso zgodovino prevodov? Tega dejanja ni mogoče razveljaviti.", "unknownLanguage": "Neznan jezik", "deleteSessionRecord": "Izbriši zapis seje", - "deleteSessionConfirm": - "Ali ste prepričani, da želite izbrisati vse zapise prevodov za to sejo? Tega dejanja ni mogoče razveljaviti.", + "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...", @@ -672,8 +1189,7 @@ const Map slSI = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Originalni zapis", "recordSummary": "Povzetek zapisa", - "clickToGenerateSummary": - "Kliknite spodnji gumb za generiranje povzetka seje", + "clickToGenerateSummary": "Kliknite spodnji gumb za generiranje povzetka seje", "summaryContent": "Vsebina povzetka", "copied": "Kopirano", "summaryCopiledToClipboard": "Povzetek je bil kopiran v odložišče", @@ -681,11 +1197,9 @@ const Map slSI = { "summaryGenerated": "Povzetek je bil generiran", "generating": "Generiranje...", "regenerate": "Ponovno generiraj", - "summaryTimeoutMessage": - "Čas za generiranje povzetka je potekel, morda zaradi težav z omrežjem ali zasedenosti strežnika.", + "summaryTimeoutMessage": "Čas za generiranje povzetka je potekel, morda zaradi težav z omrežjem ali zasedenosti strežnika.", "deleteTranslationRecord": "Izbriši zapis prevoda", - "deleteTranslationConfirm": - "Ali ste prepričani, da želite izbrisati ta zapis prevoda? Tega dejanja ni mogoče razveljaviti.", + "deleteTranslationConfirm": "Ali ste prepričani, da želite izbrisati ta zapis prevoda? Tega dejanja ni mogoče razveljaviti.", "originalText": "Originalno besedilo", "translatedText": "Prevedeno besedilo", "sessionSummary": "Povzetek seje", @@ -703,7 +1217,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...", @@ -713,37 +1227,34 @@ const Map slSI = { // 配对状态文本 "readyToPair": "Pripravljen za seznanjanje", "preparingPairingEnvironment": "Priprava okolja za seznanjanje...", - "connectDeepSoundViaSystemBluetooth": - "Najprej se povežite z napravo Voitrans prek sistemskega Bluetootha", + "connectDeepSoundViaSystemBluetooth": "Najprej se povežite z napravo Voitrans prek sistemskega Bluetootha", "deviceBindingConfirm": "Potrditev povezave naprave...", "establishingDeviceAssociation": "Vzpostavljanje povezave z napravo...", "waitingCompletePairing": "Počakajte, seznanjanje se zaključuje...", - "pairingSuccessRedirecting": - "Seznanjanje uspelo! Preusmerjanje na domačo stran...", + "pairingSuccessRedirecting": "Seznanjanje uspelo! Preusmerjanje na domačo stran...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Prepričajte se, da ste povezani z napravo Voitrans", - "deviceAlreadyBoundToOtherAccount": - "Ta naprava je že povezana z drugim računom", + "ensureConnectedDeepSoundDevice": "Prepričajte se, da ste povezani z napravo Voitrans", + "deviceAlreadyBoundToOtherAccount": "Ta naprava je že povezana z drugim računom", "deviceAssociationFailed": "Povezovanje naprave ni uspelo, poskusite znova", - "scanTimeoutEnsureDeviceNearby": - "Čas skeniranja je potekel, prepričajte se, da je naprava v bližini", + "scanTimeoutEnsureDeviceNearby": "Čas skeniranja je potekel, prepričajte se, da je naprava v bližini", "networkError": "Napaka v omrežju", - "authorizationFailedCheckCode": - "Avtorizacija ni uspela, preverite, ali je avtorizacijska koda pravilna", + "authorizationFailedCheckCode": "Avtorizacija ni uspela, preverite, ali je avtorizacijska koda pravilna", "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', + '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...', + 'needManualBindingAuthCode': 'Potrebna je koda za avtorizacijo ročne povezave...', 'pairingSuccessful': 'Seznanjanje uspelo!', 'enableBluetooth': 'Omogoči Bluetooth', 'grantPermissions': 'Podeli dovoljenja', @@ -755,32 +1266,35 @@ const Map slSI = { 'verificationFailedRetry': 'Preverjanje ni uspelo, poskusite znova', 'invalidDeviceAddress': 'Neveljaven naslov naprave', 'bleDeviceAssociationFailed': 'Povezovanje naprave BLE ni uspelo', - 'deviceAssociationFailedRetry': - 'Povezovanje naprave ni uspelo, poskusite znova', - 'bleConnectionTimeoutRetry': - 'Čas za povezavo BLE je potekel, poskusite znova', + 'deviceAssociationFailedRetry': 'Povezovanje naprave ni uspelo, poskusite znova', + 'bleConnectionTimeoutRetry': 'Čas za povezavo BLE je potekel, poskusite znova', 'blePairingStartupFailed': 'Zagon seznanjanja BLE ni uspel', 'bleConnectionFailed': 'Povezava BLE ni uspela', - 'deviceAuthorizationFailedCheckCode': - 'Avtorizacija naprave ni uspela, preverite avtorizacijsko kodo', + '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', - 'feedbackDescription': - 'Opišite težavo, s katero ste se soočili, ali svoj predlog', + 'feedbackDescription': 'Opišite težavo, s katero ste se soočili, ali svoj predlog', 'feedbackHint': 'Vnesite svoje povratne informacije...', 'feedbackRequired': 'Vnesite vsebino povratnih informacij', 'contactInfo': 'Kontaktni podatki', 'contactHint': 'E-pošta/Telefon, da vas lahko kontaktiramo', 'submit': 'Pošlji', 'feedbackSubmitSuccess': 'Povratne informacije uspešno poslane, hvala vam!', - 'feedbackSubmitFailed': - 'Pošiljanje povratnih informacij ni uspelo, poskusite znova kasneje', + 'feedbackSubmitFailed': 'Pošiljanje povratnih informacij ni uspelo, poskusite znova kasneje', // OTA升级模块 - "upgradeExitConfirm": - "Nadgradnja poteka, izhod bo prekinil postopek, ste prepričani, da želite izstopiti?", + "upgradeExitConfirm": "Nadgradnja poteka, izhod bo prekinil postopek, ste prepričani, da želite izstopiti?", "deviceModel": "Model naprave", "unknownDevice": "Neznana naprava", "currentFirmwareVersion": "Trenutna različica vdelane programske opreme", @@ -792,20 +1306,22 @@ const Map slSI = { "connectionFailed": "Povezava ni uspela", "retryConnection": "Ponovno poskusi povezati", "ota_updateNow": "Posodobi zdaj", - "keepConnectedDontClose": - "Ohranite napravo povezano, ne zapirajte aplikacije", + "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", "charging": "Polnjenje", "updateContent": "Vsebina posodobitve", - "removeEarbudsEnsureBattery": - "Odstranite obe slušalki in se prepričajte, da je baterija obeh nad 20%", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..a48d0b8fd 100644 --- a/lib/core/translations/language/sr_rs.dart +++ b/lib/core/translations/language/sr_rs.dart @@ -90,8 +90,7 @@ const Map srRS = { "tip": "Savet", "pleaseEnterCompleteCode": "Unesite kompletan verifikacioni kod", "loginFailed": "Neuspešno prijavljivanje, pokušajte ponovo", - 'pleaseAcceptPrivacyPolicy': - 'Prvo pročitajte i prihvatite Politiku privatnosti i Korisnički ugovor', + 'pleaseAcceptPrivacyPolicy': 'Prvo pročitajte i prihvatite Politiku privatnosti i Korisnički ugovor', "enterVerificationCode": "Unesite verifikacioni kod", "verificationCodeSentTo": "Verifikacioni kod je poslat na", "resendVerificationCode": "Ponovo pošalji verifikacioni kod", @@ -99,12 +98,14 @@ 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", @@ -114,30 +115,24 @@ const Map srRS = { "signal": "Signal", "deviceId": "ID uređaja", "firmwareVersion": "Verzija firmvera", - "disconnectedDevice": - "Nijedan uređaj nije povezan, kliknite na dugme ispod da biste se povezali", + "disconnectedDevice": "Nijedan uređaj nije povezan, kliknite na dugme ispod da biste se povezali", "connectDevice": "Poveži uređaj", "topAiExperiences": "Vrhunska AI iskustva", "aiAssistant": "AI sveobuhvatni asistent", - "aiAssistantInfo": - "Ekskluzivni konsultant 24/7, odgovara na pitanja, daje predloge", + "aiAssistantInfo": "Ekskluzivni konsultant 24/7, odgovara na pitanja, daje predloge", "interpretation": "Simultano prevođenje", - "simultaneousInterpretationInfo": - "Prevođenje u realnom vremenu na 80+ jezika, bezbrižna putovanja u inostranstvo", + "simultaneousInterpretationInfo": "Prevođenje u realnom vremenu na 80+ jezika, bezbrižna putovanja u inostranstvo", "aiCompanion": "Porodični pratilac", "aiCompanionInfo": "Razume vas, toplo društvo", "homeSlogan": "Povezivanje sveta, izvan zvuka", - "turnEarphones": - "Otvorite futrolu za punjenje slušalica i stavite slušalice u uši", + "turnEarphones": "Otvorite futrolu za punjenje slušalica i stavite slušalice u uši", "currentlyConnected": "Trenutno povezano:", "unsystemSetup": "Idite na sistemska podešavanja", "talkLater": "Kasnije", "initializing": "Inicijalizacija...", - "bluetoothInitializationFailure": - "Neuspešna inicijalizacija Bluetooth servisa", + "bluetoothInitializationFailure": "Neuspešna inicijalizacija Bluetooth servisa", "checkingPermissions": "Provera dozvola...", - "lackPermissions": - "Nedostaju Bluetooth dozvole i je potrebno omogućiti pristup lokaciji", + "lackPermissions": "Nedostaju Bluetooth dozvole i je potrebno omogućiti pristup lokaciji", "searchingDevice": "Pretraga uređaja...", "findConnectedDevice": "Pronađen povezan uređaj", "notFound": "Nije pronađen povezan Bluetooth uređaj", @@ -180,11 +175,198 @@ const Map srRS = { "healthConsultant": "Višenamenski AI ćaskanje", "healthConsultantInfo": "Nudi više funkcija AI ćaskanja", "conferenceAssistant": "Asistent za poslovne sastanke", - "conferenceAssistantInfo": - "Beleženje zapisnika u realnom vremenu, višejezično prevođenje", + "conferenceAssistantInfo": "Beleženje zapisnika u realnom vremenu, višejezično prevođenje", "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 +381,225 @@ 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 +611,8 @@ 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", @@ -227,11 +621,9 @@ const Map srRS = { "voiceServiceInfo": "Izbor servisa za prepoznavanje i sintezu govora", "selectVoiceService": "Izaberi govorni servis", "azureVoiceService": "Azure govorni servis", - "azureVoiceServiceInfo": - "Microsoftov govorni servis u oblaku, podržava visokokvalitetnu sintezu i prepoznavanje govora", + "azureVoiceServiceInfo": "Microsoftov govorni servis u oblaku, podržava visokokvalitetnu sintezu i prepoznavanje govora", "flutterVoiceService": "Flutter lokalni govorni servis", - "flutterVoiceServiceInfo": - "Lokalni govorni servis uređaja, može se koristiti bez internet konekcije", + "flutterVoiceServiceInfo": "Lokalni govorni servis uređaja, može se koristiti bez internet konekcije", 'timbreService': 'Servis za boju glasa', 'timbreServiceInfo': 'Izaberite servis za sintezu govora sa bojom glasa', 'defaultTimbre': 'Podrazumevana boja glasa', @@ -253,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Iskusite funkciju inteligentne glasovne interakcije (pregled funkcije)", + "realtimeVoiceChatInfo": "Iskusite funkciju inteligentne glasovne interakcije (pregled funkcije)", "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 +697,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' @@ -309,20 +721,16 @@ const Map srRS = { '• Da kontrolišem funkcije slušalica\n\n' 'Kako vam mogu pomoći?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': - 'Funkcija prepoznavanja govora zahteva pristup mikrofonu.', - 'voiceTranslationPermissionText': - 'Funkcija prepoznavanja i prevođenja govora zahteva pristup mikrofonu.', - 'phoneCallPermissionText': - 'Funkcija pozivanja zahteva pristup mikrofonu za glasovne pozive.', - 'permissionDeniedText': - 'Trajno ste odbili dozvolu za mikrofon, idite u sistemska podešavanja da biste je omogućili.', + 'voiceRecognitionPermissionText': 'Funkcija prepoznavanja govora zahteva pristup mikrofonu.', + 'voiceTranslationPermissionText': 'Funkcija prepoznavanja i prevođenja govora zahteva pristup mikrofonu.', + 'phoneCallPermissionText': 'Funkcija pozivanja zahteva pristup mikrofonu za glasovne pozive.', + 'permissionDeniedText': 'Trajno ste odbili dozvolu za mikrofon, idite u sistemska podešavanja da biste je omogućili.', 'startVoiceInput': 'Započni unos glasom', '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 +739,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', @@ -338,8 +747,8 @@ const Map srRS = { 'privacyRelated': 'Vezano za privatnost', 'copyrightViolation': 'Kršenje mog autorskog prava, ugleda, itd.', 'other': 'Ostalo', - 'reportDescriptionHint': - 'Želimo da znamo razlog vaše prijave, možete opisati problem sa kojim ste se suočili.', + '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 +759,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", @@ -370,22 +779,14 @@ const Map srRS = { 'lowest': 'Najniža', 'futureForecast': 'Buduća prognoza', 'hotWeatherTip': 'Danas je vruće, pazite na toplotni udar i pijte puno vode', - 'coldWeatherTip': - 'Danas je temperatura niska, obucite se toplo kada izlazite da se ne prehladite', - 'rainyWeatherTip': - 'Danas pada kiša, ponesite kišobran kada izlazite i pazite na putu', - 'snowyWeatherTip': - 'Danas pada sneg, put je klizav, pazite i obucite se toplo', - 'foggyWeatherTip': - 'Danas je magla, vidljivost je smanjena, nosite masku kada izlazite', - 'windyWeatherTip': - 'Danas duva jak vetar, pazite kada izlazite i osigurajte svoje stvari', - 'sunnyWeatherTip': - 'Danas je sunčano i jako UV zračenje, koristite kremu za sunčanje kada izlazite', - 'temperatureDifferenceTip': - 'Danas je velika razlika u temperaturi između dana i noći, prilagodite odeću', - 'comfortableWeatherTip': - 'Danas je vreme prijatno, odlično vreme za aktivnosti na otvorenom', + 'coldWeatherTip': 'Danas je temperatura niska, obucite se toplo kada izlazite da se ne prehladite', + 'rainyWeatherTip': 'Danas pada kiša, ponesite kišobran kada izlazite i pazite na putu', + 'snowyWeatherTip': 'Danas pada sneg, put je klizav, pazite i obucite se toplo', + 'foggyWeatherTip': 'Danas je magla, vidljivost je smanjena, nosite masku kada izlazite', + 'windyWeatherTip': 'Danas duva jak vetar, pazite kada izlazite i osigurajte svoje stvari', + 'sunnyWeatherTip': 'Danas je sunčano i jako UV zračenje, koristite kremu za sunčanje kada izlazite', + 'temperatureDifferenceTip': 'Danas je velika razlika u temperaturi između dana i noći, prilagodite odeću', + 'comfortableWeatherTip': 'Danas je vreme prijatno, odlično vreme za aktivnosti na otvorenom', "monday": "Pon", "tuesday": "Uto", "wednesday": "Sre", @@ -393,6 +794,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", @@ -424,31 +836,28 @@ const Map srRS = { "notSet": "Nije podešeno", "accountSetting": "Podešavanja naloga", "logout": "Odjavi se", - "logoutTips": - "Da li ste sigurni da želite da se odjavite sa trenutnog naloga?", + "logoutTips": "Da li ste sigurni da želite da se odjavite sa trenutnog naloga?", 'deleteAccount': 'Obriši nalog', - 'deleteAccountTips': - 'Da li ste sigurni da želite trajno da obrišete svoj nalog? Ova radnja se ne može opozvati', + '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': - 'Neuspešna mrežna veza, proverite podešavanja mreže i pokušajte ponovo', - 'serverTemporarilyUnavailable': - 'Server je trenutno nedostupan, pokušajte ponovo kasnije', + 'networkConnectionFailed': 'Neuspešna mrežna veza, proverite podešavanja mreže i pokušajte ponovo', + 'serverTemporarilyUnavailable': 'Server je trenutno nedostupan, pokušajte ponovo kasnije', 'loginExpiredPleaseRelogin': 'Vaša sesija je istekla, prijavite se ponovo', 'noPermissionForThisOperation': 'Nemate dozvolu za ovu operaciju', 'requestedResourceNotFound': 'Traženi resurs nije pronađen', - 'imageProcessingFailedPleaseReselect': - 'Neuspešna obrada slike, izaberite drugu sliku', + 'imageProcessingFailedPleaseReselect': 'Neuspešna obrada slike, izaberite drugu sliku', 'operationFailedPleaseRetry': 'Operacija nije uspela, pokušajte ponovo', 'serverReturnedError': 'Server je vratio grešku', 'serverError': 'Greška na serveru', - 'networkConnectionFailedCheckSettings': - 'Neuspešna mrežna veza, proverite podešavanja mreže', - 'serverInternalErrorRetryLater': - 'Interna greška na serveru, pokušajte ponovo kasnije', + 'networkConnectionFailedCheckSettings': 'Neuspešna mrežna veza, proverite podešavanja mreže', + 'serverInternalErrorRetryLater': '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,68 +870,108 @@ 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', - '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', + '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', // 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', - 'calendarWritePermissionDesc': - 'Koristi se za kreiranje događaja i podsetnika u kalendaru', - 'calendarFullAccessPermissionDesc': - 'Koristi se za čitanje i upravljanje događajima i podsetnicima u kalendaru', - 'locationPermissionDesc': - 'Koristi se za dobijanje informacija o trenutnoj lokaciji', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Koristi se za kreiranje događaja i podsetnika u kalendaru', + 'calendarFullAccessPermissionDesc': 'Koristi se za čitanje i upravljanje događajima i podsetnicima u kalendaru', + 'locationPermissionDesc': 'Koristi se za dobijanje informacija o trenutnoj lokaciji', 'appFunctionNeeds': 'Funkcija aplikacije zahteva', 'authorized': 'Autorizovano', 'unauthorized': 'Neautorizovano', - 'needOpenInSystemSettings': - 'Potrebno je omogućiti u sistemskim podešavanjima', + 'needOpenInSystemSettings': 'Potrebno je omogućiti u sistemskim podešavanjima', 'partialAuthorization': 'Delimična autorizacija', 'unknownStatus': 'Nepoznat status', 'permissionGranted': 'Dozvola je odobrena', 'permissionRequestError': 'Greška prilikom traženja dozvole', 'phonePermissionDetailDesc': 'Funkcija pozivanja zahteva dozvolu za telefon', 'smsPermissionDetailDesc': 'Funkcija slanja SMS-a zahteva dozvolu za SMS', - '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', - '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', + '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', - 'cannotOpenAppStore': - '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', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Došlo je do greške tokom ažuriranja, pokušajte ponovo kasnije', // 更新错误重试提示 //国家列表 "邮箱": "E-pošta", @@ -631,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Da li ste sigurni da želite da obrišete celu istoriju prevođenja? Ova radnja se ne može opozvati.", "unknownLanguage": "Nepoznat jezik", "deleteSessionRecord": "Obriši zapis sesije", - "deleteSessionConfirm": - "Da li ste sigurni da želite da obrišete sve zapise prevođenja za ovu sesiju? Ova radnja se ne može opozvati.", + "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...", @@ -667,8 +1189,7 @@ const Map srRS = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Originalni zapis", "recordSummary": "Sažetak zapisa", - "clickToGenerateSummary": - "Kliknite na dugme ispod da biste generisali sažetak sesije", + "clickToGenerateSummary": "Kliknite na dugme ispod da biste generisali sažetak sesije", "summaryContent": "Sadržaj sažetka", "copied": "Kopirano", "summaryCopiledToClipboard": "Sažetak je kopiran u međuspremnik", @@ -676,11 +1197,9 @@ const Map srRS = { "summaryGenerated": "Sažetak je generisan", "generating": "Generisanje...", "regenerate": "Ponovo generiši", - "summaryTimeoutMessage": - "Isteklo je vreme za generisanje sažetka, možda zbog problema sa mrežom ili zauzetosti servera.", + "summaryTimeoutMessage": "Isteklo je vreme za generisanje sažetka, možda zbog problema sa mrežom ili zauzetosti servera.", "deleteTranslationRecord": "Obriši zapis prevođenja", - "deleteTranslationConfirm": - "Da li ste sigurni da želite da obrišete ovaj zapis prevođenja? Ova radnja se ne može opozvati.", + "deleteTranslationConfirm": "Da li ste sigurni da želite da obrišete ovaj zapis prevođenja? Ova radnja se ne može opozvati.", "originalText": "Originalni tekst", "translatedText": "Prevedeni tekst", "sessionSummary": "Sažetak sesije", @@ -698,7 +1217,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...", @@ -708,37 +1227,34 @@ const Map srRS = { // 配对状态文本 "readyToPair": "Spremno za uparivanje", "preparingPairingEnvironment": "Priprema okruženja za uparivanje...", - "connectDeepSoundViaSystemBluetooth": - "Prvo se povežite sa Voitrans uređajem preko sistemskog Bluetooth-a", + "connectDeepSoundViaSystemBluetooth": "Prvo se povežite sa Voitrans uređajem preko sistemskog Bluetooth-a", "deviceBindingConfirm": "Potvrda povezivanja uređaja...", "establishingDeviceAssociation": "Uspostavljanje veze sa uređajem...", "waitingCompletePairing": "Molimo sačekajte, uparivanje se završava...", - "pairingSuccessRedirecting": - "Uparivanje uspešno! Preusmeravanje na početnu stranicu...", + "pairingSuccessRedirecting": "Uparivanje uspešno! Preusmeravanje na početnu stranicu...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Uverite se da ste povezani sa Voitrans uređajem", - "deviceAlreadyBoundToOtherAccount": - "Ovaj uređaj je već povezan sa drugim nalogom", + "ensureConnectedDeepSoundDevice": "Uverite se da ste povezani sa Voitrans uređajem", + "deviceAlreadyBoundToOtherAccount": "Ovaj uređaj je već povezan sa drugim nalogom", "deviceAssociationFailed": "Neuspešno povezivanje uređaja, pokušajte ponovo", - "scanTimeoutEnsureDeviceNearby": - "Isteklo vreme skeniranja, uverite se da je uređaj u blizini", + "scanTimeoutEnsureDeviceNearby": "Isteklo vreme skeniranja, uverite se da je uređaj u blizini", "networkError": "Mrežna greška", - "authorizationFailedCheckCode": - "Neuspešna autorizacija, proverite da li je autorizacioni kod tačan", + "authorizationFailedCheckCode": "Neuspešna autorizacija, proverite da li je autorizacioni kod tačan", "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', + '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...', + 'needManualBindingAuthCode': 'Potreban je kod za autorizaciju ručnog povezivanja...', 'pairingSuccessful': 'Uparivanje uspešno!', 'enableBluetooth': 'Omogući Bluetooth', 'grantPermissions': 'Daj dozvole', @@ -750,32 +1266,35 @@ const Map srRS = { 'verificationFailedRetry': 'Neuspešna verifikacija, pokušajte ponovo', 'invalidDeviceAddress': 'Nevažeća adresa uređaja', 'bleDeviceAssociationFailed': 'Neuspešno povezivanje BLE uređaja', - 'deviceAssociationFailedRetry': - 'Neuspešno povezivanje uređaja, pokušajte ponovo', + 'deviceAssociationFailedRetry': 'Neuspešno povezivanje uređaja, pokušajte ponovo', 'bleConnectionTimeoutRetry': 'Isteklo vreme za BLE vezu, pokušajte ponovo', 'blePairingStartupFailed': 'Neuspešno pokretanje BLE uparivanja', 'bleConnectionFailed': 'Neuspešna BLE veza', - 'deviceAuthorizationFailedCheckCode': - 'Neuspešna autorizacija uređaja, proverite autorizacioni kod', + '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', - 'feedbackDescription': - 'Opišite problem sa kojim ste se suočili ili svoj predlog', + 'feedbackDescription': 'Opišite problem sa kojim ste se suočili ili svoj predlog', 'feedbackHint': 'Unesite svoje povratne informacije...', 'feedbackRequired': 'Unesite sadržaj povratnih informacija', 'contactInfo': 'Kontakt informacije', 'contactHint': 'E-pošta/Telefon, da bismo vas mogli kontaktirati', 'submit': 'Pošalji', - 'feedbackSubmitSuccess': - 'Povratne informacije su uspešno poslate, hvala vam!', - 'feedbackSubmitFailed': - 'Neuspešno slanje povratnih informacija, pokušajte ponovo kasnije', + 'feedbackSubmitSuccess': 'Povratne informacije su uspešno poslate, hvala vam!', + 'feedbackSubmitFailed': 'Neuspešno slanje povratnih informacija, pokušajte ponovo kasnije', // OTA升级模块 - "upgradeExitConfirm": - "Nadogradnja je u toku, izlazak će prekinuti proces, da li ste sigurni da želite da izađete?", + "upgradeExitConfirm": "Nadogradnja je u toku, izlazak će prekinuti proces, da li ste sigurni da želite da izađete?", "deviceModel": "Model uređaja", "unknownDevice": "Nepoznat uređaj", "currentFirmwareVersion": "Trenutna verzija firmvera", @@ -787,19 +1306,22 @@ 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", "updateContent": "Sadržaj ažuriranja", - "removeEarbudsEnsureBattery": - "Izvadite obe slušalice i uverite se da je baterija obe iznad 20%", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..6874a58c4 100644 --- a/lib/core/translations/language/sv_se.dart +++ b/lib/core/translations/language/sv_se.dart @@ -71,8 +71,7 @@ const Map svSE = { // 登录页 "welcome": "Välkommen", - "loginTips": - "Logga in eller registrera dig med ditt telefonnummer eller din e-postadress", + "loginTips": "Logga in eller registrera dig med ditt telefonnummer eller din e-postadress", "accountNumber": "Telefonnummer eller e-post", "verificationCode": "Verifieringskod", "getCode": "Hämta kod", @@ -91,8 +90,7 @@ const Map svSE = { "tip": "Tips", "pleaseEnterCompleteCode": "Ange hela verifieringskoden", "loginFailed": "Inloggning misslyckades, försök igen", - 'pleaseAcceptPrivacyPolicy': - 'Läs och godkänn integritetspolicyn och användaravtalet först', + 'pleaseAcceptPrivacyPolicy': 'Läs och godkänn integritetspolicyn och användaravtalet först', "enterVerificationCode": "Ange verifieringskod", "verificationCodeSentTo": "Verifieringskod har skickats till", "resendVerificationCode": "Skicka verifieringskod igen", @@ -100,12 +98,14 @@ 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", @@ -115,29 +115,24 @@ const Map svSE = { "signal": "Signal", "deviceId": "Enhets-ID", "firmwareVersion": "Firmware-version", - "disconnectedDevice": - "Ingen enhet ansluten, klicka på knappen nedan för att ansluta", + "disconnectedDevice": "Ingen enhet ansluten, klicka på knappen nedan för att ansluta", "connectDevice": "Anslut enhet", "topAiExperiences": "Topp AI-upplevelser", "aiAssistant": "AI Allround-assistent", "aiAssistantInfo": "Exklusiv konsult dygnet runt, svarar på frågor, ger råd", "interpretation": "Simultantolkning", - "simultaneousInterpretationInfo": - "Realtidsöversättning för över 80 språk, bekymmersfria utlandsresor", + "simultaneousInterpretationInfo": "Realtidsöversättning för över 80 språk, bekymmersfria utlandsresor", "aiCompanion": "Familjekamrat", "aiCompanionInfo": "Förstår dig, varmt sällskap", "homeSlogan": "Anslut världen, bortom ljudet", - "turnEarphones": - "Öppna laddningsfodralet för hörlurarna och placera hörlurarna i dina öron", + "turnEarphones": "Öppna laddningsfodralet för hörlurarna och placera hörlurarna i dina öron", "currentlyConnected": "För närvarande ansluten:", "unsystemSetup": "Gå till systeminställningar", "talkLater": "Senare", "initializing": "Initierar...", - "bluetoothInitializationFailure": - "Initiering av Bluetooth-tjänst misslyckades", + "bluetoothInitializationFailure": "Initiering av Bluetooth-tjänst misslyckades", "checkingPermissions": "Kontrollerar behörigheter...", - "lackPermissions": - "Saknar Bluetooth-behörigheter och kräver att du tillåter åtkomst till plats", + "lackPermissions": "Saknar Bluetooth-behörigheter och kräver att du tillåter åtkomst till plats", "searchingDevice": "Söker efter enheter...", "findConnectedDevice": "Hittade ansluten enhet", "notFound": "Ingen ansluten Bluetooth-enhet hittades", @@ -180,11 +175,198 @@ const Map svSE = { "healthConsultant": "Mångfunktionell AI-chatt", "healthConsultantInfo": "Erbjuder fler AI-chattfunktioner", "conferenceAssistant": "Affärsmötesassistent", - "conferenceAssistantInfo": - "Realtidsinspelning av mötesprotokoll, flerspråkig översättning", + "conferenceAssistantInfo": "Realtidsinspelning av mötesprotokoll, flerspråkig översättning", "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 +381,225 @@ 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 +611,8 @@ 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", @@ -227,11 +621,9 @@ const Map svSE = { "voiceServiceInfo": "Välj röstigenkännings- och syntestjänst", "selectVoiceService": "Välj rösttjänst", "azureVoiceService": "Azure Rösttjänst", - "azureVoiceServiceInfo": - "Microsofts molnbaserade rösttjänst, stöder högkvalitativ röstsyntes och igenkänning", + "azureVoiceServiceInfo": "Microsofts molnbaserade rösttjänst, stöder högkvalitativ röstsyntes och igenkänning", "flutterVoiceService": "Flutter Lokal Rösttjänst", - "flutterVoiceServiceInfo": - "Enhetens lokala rösttjänst, kan användas utan internetanslutning", + "flutterVoiceServiceInfo": "Enhetens lokala rösttjänst, kan användas utan internetanslutning", 'timbreService': 'Klangtjänst', 'timbreServiceInfo': 'Välj klangtjänst för röstsyntes', 'defaultTimbre': 'Standardklang', @@ -253,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Upplev intelligent röstinteraktionsfunktion (funktionsförhandsvisning)", + "realtimeVoiceChatInfo": "Upplev intelligent röstinteraktionsfunktion (funktionsförhandsvisning)", "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 +697,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' @@ -309,20 +721,16 @@ const Map svSE = { '• Kontrollera hörlursfunktioner\n\n' 'Hur kan jag hjälpa dig?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': - 'Röstigenkänning kräver åtkomst till mikrofonen.', - 'voiceTranslationPermissionText': - 'Röstigenkänning och översättning kräver åtkomst till mikrofonen.', - 'phoneCallPermissionText': - 'Att ringa samtal kräver åtkomst till mikrofonen för röstsamtal.', - 'permissionDeniedText': - 'Du har permanent nekat åtkomst till mikrofonen, vänligen gå till systeminställningarna för att aktivera behörigheten.', + 'voiceRecognitionPermissionText': 'Röstigenkänning kräver åtkomst till mikrofonen.', + 'voiceTranslationPermissionText': 'Röstigenkänning och översättning kräver åtkomst till mikrofonen.', + 'phoneCallPermissionText': 'Att ringa samtal kräver åtkomst till mikrofonen för röstsamtal.', + 'permissionDeniedText': 'Du har permanent nekat åtkomst till mikrofonen, vänligen gå till systeminställningarna för att aktivera behörigheten.', 'startVoiceInput': 'Starta röstinmatning', '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 +739,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', @@ -338,8 +747,8 @@ const Map svSE = { 'privacyRelated': 'Integritetsrelaterat', 'copyrightViolation': 'Inkräktar på min upphovsrätt, anseende, etc.', 'other': 'Annat', - 'reportDescriptionHint': - 'Vi vill veta varför du anmäler, du kan beskriva problemet du stött på.', + '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 +759,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", @@ -369,24 +778,15 @@ const Map svSE = { 'highest': 'Högsta', 'lowest': 'Lägsta', 'futureForecast': 'Framtida prognos', - 'hotWeatherTip': - 'Idag är det varmt, var försiktig med värmeslag och drick mycket vatten', - 'coldWeatherTip': - 'Idag är temperaturen låg, klä dig varmt när du går ut för att undvika förkylning', - 'rainyWeatherTip': - 'Idag regnar det, ta med ett paraply när du går ut och var försiktig', - 'snowyWeatherTip': - 'Idag snöar det, vägen är hal, var försiktig och klä dig varmt', - 'foggyWeatherTip': - 'Idag är det dimmigt, sikten är låg, använd en mask när du går ut', - 'windyWeatherTip': - 'Idag blåser det mycket, var försiktig när du går ut och säkra dina tillhörigheter', - 'sunnyWeatherTip': - 'Idag är det soligt och stark UV-strålning, använd solskydd när du går ut', - 'temperatureDifferenceTip': - 'Idag är det stor temperaturskillnad mellan dag och natt, anpassa kläderna därefter', - 'comfortableWeatherTip': - 'Idag är vädret behagligt, en bra tid för utomhusaktiviteter', + 'hotWeatherTip': 'Idag är det varmt, var försiktig med värmeslag och drick mycket vatten', + 'coldWeatherTip': 'Idag är temperaturen låg, klä dig varmt när du går ut för att undvika förkylning', + 'rainyWeatherTip': 'Idag regnar det, ta med ett paraply när du går ut och var försiktig', + 'snowyWeatherTip': 'Idag snöar det, vägen är hal, var försiktig och klä dig varmt', + 'foggyWeatherTip': 'Idag är det dimmigt, sikten är låg, använd en mask när du går ut', + 'windyWeatherTip': 'Idag blåser det mycket, var försiktig när du går ut och säkra dina tillhörigheter', + 'sunnyWeatherTip': 'Idag är det soligt och stark UV-strålning, använd solskydd när du går ut', + 'temperatureDifferenceTip': 'Idag är det stor temperaturskillnad mellan dag och natt, anpassa kläderna därefter', + 'comfortableWeatherTip': 'Idag är vädret behagligt, en bra tid för utomhusaktiviteter', "monday": "Mån", "tuesday": "Tis", "wednesday": "Ons", @@ -394,6 +794,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", @@ -425,32 +836,28 @@ const Map svSE = { "notSet": "Inte inställt", "accountSetting": "Kontoinställningar", "logout": "Logga ut", - "logoutTips": - "Är du säker på att du vill logga ut från det nuvarande kontot?", + "logoutTips": "Är du säker på att du vill logga ut från det nuvarande kontot?", 'deleteAccount': 'Ta bort konto', - 'deleteAccountTips': - 'Är du säker på att du vill ta bort ditt konto permanent? Denna åtgärd kan inte ångras', + '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': - 'Nätverksanslutning misslyckades, kontrollera dina nätverksinställningar och försök igen', - 'serverTemporarilyUnavailable': - 'Servern är tillfälligt otillgänglig, försök igen senare', - 'loginExpiredPleaseRelogin': - 'Din session har gått ut, vänligen logga in igen', - 'noPermissionForThisOperation': - 'Du har inte behörighet att utföra denna åtgärd', + 'networkConnectionFailed': 'Nätverksanslutning misslyckades, kontrollera dina nätverksinställningar och försök igen', + 'serverTemporarilyUnavailable': 'Servern är tillfälligt otillgänglig, försök igen senare', + 'loginExpiredPleaseRelogin': 'Din session har gått ut, vänligen logga in igen', + 'noPermissionForThisOperation': 'Du har inte behörighet att utföra denna åtgärd', 'requestedResourceNotFound': 'Den begärda resursen hittades inte', - 'imageProcessingFailedPleaseReselect': - 'Bildbehandling misslyckades, välj en annan bild', + 'imageProcessingFailedPleaseReselect': 'Bildbehandling misslyckades, välj en annan bild', 'operationFailedPleaseRetry': 'Åtgärden misslyckades, försök igen', 'serverReturnedError': 'Servern returnerade ett fel', 'serverError': 'Serverfel', - 'networkConnectionFailedCheckSettings': - 'Nätverksanslutning misslyckades, kontrollera dina nätverksinställningar', + 'networkConnectionFailedCheckSettings': 'Nätverksanslutning misslyckades, kontrollera dina nätverksinställningar', '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,33 +870,40 @@ 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', - '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', + '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', // 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', - 'calendarWritePermissionDesc': - 'Används för att skapa kalenderhändelser och påminnelser', - 'calendarFullAccessPermissionDesc': - 'Används för att läsa och hantera kalenderhändelser och påminnelser', + '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': 'Används för att läsa och hantera kalenderhändelser och påminnelser', 'locationPermissionDesc': 'Används för att hämta aktuell platsinformation', 'appFunctionNeeds': 'Appfunktionen behöver', 'authorized': 'Beviljad', @@ -501,27 +915,63 @@ 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', - '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', - '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', + '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', - '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', + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-post", @@ -630,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Är du säker på att du vill rensa all översättningshistorik? Denna åtgärd kan inte ångras.", "unknownLanguage": "Okänt språk", "deleteSessionRecord": "Ta bort sessionsinspelning", - "deleteSessionConfirm": - "Är du säker på att du vill ta bort alla översättningsinspelningar för denna session? Denna åtgärd kan inte ångras.", + "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...", @@ -666,8 +1189,7 @@ const Map svSE = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Originalinspelning", "recordSummary": "Inspelningssammanfattning", - "clickToGenerateSummary": - "Klicka på knappen nedan för att generera en sessionssammanfattning", + "clickToGenerateSummary": "Klicka på knappen nedan för att generera en sessionssammanfattning", "summaryContent": "Sammanfattningsinnehåll", "copied": "Kopierad", "summaryCopiledToClipboard": "Sammanfattning kopierad till urklipp", @@ -675,11 +1197,9 @@ const Map svSE = { "summaryGenerated": "Sammanfattning genererad", "generating": "Genererar...", "regenerate": "Generera igen", - "summaryTimeoutMessage": - "Begäran om att generera sammanfattning nådde tidsgräns, det kan bero på nätverksproblem eller upptagen server.", + "summaryTimeoutMessage": "Begäran om att generera sammanfattning nådde tidsgräns, det kan bero på nätverksproblem eller upptagen server.", "deleteTranslationRecord": "Ta bort översättningsinspelning", - "deleteTranslationConfirm": - "Är du säker på att du vill ta bort denna översättningsinspelning? Denna åtgärd kan inte ångras.", + "deleteTranslationConfirm": "Är du säker på att du vill ta bort denna översättningsinspelning? Denna åtgärd kan inte ångras.", "originalText": "Originaltext", "translatedText": "Översatt text", "sessionSummary": "Sessionssammanfattning", @@ -697,7 +1217,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...", @@ -707,34 +1227,32 @@ const Map svSE = { // 配对状态文本 "readyToPair": "Redo att parkoppla", "preparingPairingEnvironment": "Förbereder parkopplingsmiljö...", - "connectDeepSoundViaSystemBluetooth": - "Anslut först till Voitrans-enheten via systemets Bluetooth", + "connectDeepSoundViaSystemBluetooth": "Anslut först till Voitrans-enheten via systemets Bluetooth", "deviceBindingConfirm": "Bekräftelse av enhetsbindning...", "establishingDeviceAssociation": "Upprättar enhetsassociation...", "waitingCompletePairing": "Vänta, slutför parkoppling...", - "pairingSuccessRedirecting": - "Parkoppling lyckades! Omdirigerar till startsidan...", + "pairingSuccessRedirecting": "Parkoppling lyckades! Omdirigerar till startsidan...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Se till att du är ansluten till en Voitrans-enhet", - "deviceAlreadyBoundToOtherAccount": - "Denna enhet är redan bunden till ett annat konto", + "ensureConnectedDeepSoundDevice": "Se till att du är ansluten till en Voitrans-enhet", + "deviceAlreadyBoundToOtherAccount": "Denna enhet är redan bunden till ett annat konto", "deviceAssociationFailed": "Enhetsassociation misslyckades, försök igen", - "scanTimeoutEnsureDeviceNearby": - "Skanningen nådde tidsgräns, se till att enheten är i närheten", + "scanTimeoutEnsureDeviceNearby": "Skanningen nådde tidsgräns, se till att enheten är i närheten", "networkError": "Nätverksfel", - "authorizationFailedCheckCode": - "Auktorisering misslyckades, kontrollera att auktoriseringskoden är korrekt", + "authorizationFailedCheckCode": "Auktorisering misslyckades, kontrollera att auktoriseringskoden är korrekt", "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', + '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!', @@ -752,8 +1270,16 @@ const Map svSE = { 'bleConnectionTimeoutRetry': 'BLE-anslutningen nådde tidsgräns, försök igen', 'blePairingStartupFailed': 'Start av BLE-parkoppling misslyckades', 'bleConnectionFailed': 'BLE-anslutning misslyckades', - 'deviceAuthorizationFailedCheckCode': - 'Enhetsauktorisering misslyckades, kontrollera auktoriseringskoden', + '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", @@ -765,12 +1291,10 @@ const Map svSE = { 'contactHint': 'E-post/Telefon, så att vi kan kontakta dig', 'submit': 'Skicka', 'feedbackSubmitSuccess': 'Feedback inskickad, tack för din feedback!', - 'feedbackSubmitFailed': - 'Inskickning av feedback misslyckades, försök igen senare', + 'feedbackSubmitFailed': 'Inskickning av feedback misslyckades, försök igen senare', // OTA升级模块 - "upgradeExitConfirm": - "Uppgradering pågår, att avsluta kommer att avbryta uppgraderingsprocessen, är du säker på att du vill avsluta?", + "upgradeExitConfirm": "Uppgradering pågår, att avsluta kommer att avbryta uppgraderingsprocessen, är du säker på att du vill avsluta?", "deviceModel": "Enhetsmodell", "unknownDevice": "Okänd enhet", "currentFirmwareVersion": "Nuvarande firmware-version", @@ -782,19 +1306,22 @@ 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", "updateContent": "Uppdateringsinnehåll", - "removeEarbudsEnsureBattery": - "Ta ut båda hörlurarna och se till att batterinivån är över 20 % på båda", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..112854a30 100644 --- a/lib/core/translations/language/th_th.dart +++ b/lib/core/translations/language/th_th.dart @@ -90,8 +90,7 @@ const Map thTH = { "tip": "เคล็ดลับ", "pleaseEnterCompleteCode": "กรุณากรอกรหัสยืนยันให้ครบถ้วน", "loginFailed": "เข้าสู่ระบบล้มเหลว กรุณาลองใหม่", - 'pleaseAcceptPrivacyPolicy': - 'กรุณาอ่านและยอมรับนโยบายความเป็นส่วนตัวและข้อตกลงผู้ใช้ก่อน', + 'pleaseAcceptPrivacyPolicy': 'กรุณาอ่านและยอมรับนโยบายความเป็นส่วนตัวและข้อตกลงผู้ใช้ก่อน', "enterVerificationCode": "กรอกรหัสยืนยัน", "verificationCodeSentTo": "รหัสยืนยันถูกส่งไปยัง", "resendVerificationCode": "ส่งรหัสยืนยันอีกครั้ง", @@ -99,12 +98,14 @@ const Map thTH = { "usePasswordLogin": "เข้าสู่ระบบด้วยรหัสผ่าน", // 隐私政策弹窗 - "loginDeclaration": "คำประกาศของ Voitrans", - "welcomeToThisApp": "ยินดีต้อนรับสู่ Voitrans กรุณาอ่านอย่างละเอียด", + "loginDeclaration": "คำประกาศของ Voitrans", // Voitrans 声明 + "welcomeToThisApp": "ยินดีต้อนรับสู่ Voitrans กรุณาอ่านอย่างละเอียด", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - " การคลิก 'ยอมรับและเข้าสู่' หมายความว่าคุณได้อ่านและยอมรับข้อตกลงข้างต้นแล้ว การคลิก 'ไม่ยอมรับ' จะเป็นการออกจากแอปพลิเคชัน", - "disagree": "ไม่ยอมรับ", - "agreeAndEnter": "ยอมรับและเข้าสู่", + " การคลิก 'ยอมรับและเข้าสู่' หมายความว่าคุณได้อ่านและยอมรับข้อตกลงข้างต้นแล้ว การคลิก 'ไม่ยอมรับ' จะเป็นการออกจากแอปพลิเคชัน", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "ไม่ยอมรับ", // 不同意 + "agreeAndEnter": "ยอมรับและเข้าสู่", // 同意并进入 // 首页 "deviceStatus": "สถานะอุปกรณ์", @@ -120,8 +121,7 @@ const Map thTH = { "aiAssistant": "ผู้ช่วย AI รอบด้าน", "aiAssistantInfo": "ที่ปรึกษาส่วนตัว 24 ชั่วโมง ตอบคำถาม ให้คำแนะนำ", "interpretation": "การแปลภาษาพร้อมกัน", - "simultaneousInterpretationInfo": - "แปลภาษากว่า 80 ภาษาแบบเรียลไทม์ เดินทางต่างประเทศไร้กังวล", + "simultaneousInterpretationInfo": "แปลภาษากว่า 80 ภาษาแบบเรียลไทม์ เดินทางต่างประเทศไร้กังวล", "aiCompanion": "เพื่อนคู่คิดสำหรับครอบครัว", "aiCompanionInfo": "เข้าใจคุณ อยู่เคียงข้างอย่างอบอุ่น", "homeSlogan": "เชื่อมต่อโลก เหนือกว่าเสียง", @@ -179,6 +179,194 @@ 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 +381,225 @@ 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 +611,8 @@ const Map thTH = { "lastBackup": "การสำรองข้อมูลล่าสุด:", "privacySettings": "การตั้งค่าความเป็นส่วนตัว", "privacySettingsInfo": "จัดการการรวบรวมข้อมูลและสิทธิ์", - "permissionManagement": "การจัดการสิทธิ์", - "permissionManagementInfo": "จัดการการตั้งค่าสิทธิ์ของแอปพลิเคชัน", + "permissionManagement": "การจัดการสิทธิ์", // 权限管理 + "permissionManagementInfo": "จัดการการตั้งค่าสิทธิ์ของแอปพลิเคชัน", // 管理应用权限设置 "aboutApplication": "เกี่ยวกับแอปพลิเคชัน", "versions": "เวอร์ชัน", "checkUpdates": "ตรวจสอบการอัปเดต", @@ -221,11 +621,9 @@ const Map thTH = { "voiceServiceInfo": "เลือกบริการรู้จำและสังเคราะห์เสียง", "selectVoiceService": "เลือกบริการเสียง", "azureVoiceService": "บริการเสียง Azure", - "azureVoiceServiceInfo": - "บริการเสียงบนคลาวด์ของ Microsoft รองรับการสังเคราะห์และรู้จำเสียงคุณภาพสูง", + "azureVoiceServiceInfo": "บริการเสียงบนคลาวด์ของ Microsoft รองรับการสังเคราะห์และรู้จำเสียงคุณภาพสูง", "flutterVoiceService": "บริการเสียงในเครื่อง Flutter", - "flutterVoiceServiceInfo": - "บริการเสียงในเครื่องของอุปกรณ์ สามารถใช้งานได้โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต", + "flutterVoiceServiceInfo": "บริการเสียงในเครื่องของอุปกรณ์ สามารถใช้งานได้โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต", 'timbreService': 'บริการโทนเสียง', 'timbreServiceInfo': 'เลือกบริการสังเคราะห์เสียงด้วยโทนเสียง', 'defaultTimbre': 'โทนเสียงเริ่มต้น', @@ -247,24 +645,30 @@ const Map thTH = { 'networkErrorRetry': 'ข้อผิดพลาดเครือข่าย กรุณาลองใหม่ในภายหลัง', // 设备管理相关 - 'clearPairedDevices': 'ล้างอุปกรณ์ที่จับคู่แล้ว', - 'clearPairedDevicesConfirm': - 'คุณแน่ใจหรือไม่ว่าต้องการล้างอุปกรณ์ที่จับคู่แล้วทั้งหมด', - 'clearPairedDevicesSuccess': 'ล้างอุปกรณ์ที่จับคู่แล้วสำเร็จ', - 'clearPairedDevicesFailed': 'ล้างอุปกรณ์ที่จับคู่แล้วล้มเหลว', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "แชทเสียงแบบเรียลไทม์", - "realtimeVoiceChatInfo": - "สัมผัสประสบการณ์การโต้ตอบด้วยเสียงอัจฉริยะ (ตัวอย่างฟังก์ชัน)", + "realtimeVoiceChatInfo": "สัมผัสประสบการณ์การโต้ตอบด้วยเสียงอัจฉริยะ (ตัวอย่างฟังก์ชัน)", "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 +697,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' @@ -303,20 +721,16 @@ const Map thTH = { '• ควบคุมฟังก์ชันของหูฟัง\n\n' 'มีอะไรให้ฉันช่วยไหม', 'microphonePermission': 'ไมโครโฟน', - 'voiceRecognitionPermissionText': - 'ฟังก์ชันรู้จำเสียงต้องการการเข้าถึงไมโครโฟน', - 'voiceTranslationPermissionText': - 'ฟังก์ชันรู้จำและแปลเสียงต้องการการเข้าถึงไมโครโฟน', - 'phoneCallPermissionText': - 'ฟังก์ชันโทรออกต้องการการเข้าถึงไมโครโฟนสำหรับการโทรด้วยเสียง', - 'permissionDeniedText': - 'คุณได้ปฏิเสธการอนุญาตใช้ไมโครโฟนอย่างถาวร โปรดไปที่การตั้งค่าระบบเพื่อเปิดใช้งาน', + 'voiceRecognitionPermissionText': 'ฟังก์ชันรู้จำเสียงต้องการการเข้าถึงไมโครโฟน', + 'voiceTranslationPermissionText': 'ฟังก์ชันรู้จำและแปลเสียงต้องการการเข้าถึงไมโครโฟน', + 'phoneCallPermissionText': 'ฟังก์ชันโทรออกต้องการการเข้าถึงไมโครโฟนสำหรับการโทรด้วยเสียง', + 'permissionDeniedText': 'คุณได้ปฏิเสธการอนุญาตใช้ไมโครโฟนอย่างถาวร โปรดไปที่การตั้งค่าระบบเพื่อเปิดใช้งาน', 'startVoiceInput': 'เริ่มการป้อนข้อมูลด้วยเสียง', 'startPhoneCallMode': 'เริ่มโหมดโทรศัพท์ เริ่มการป้อนข้อมูลด้วยเสียง', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'ป้อนข้อความของคุณที่นี่...', - 'characterCount': '{count} ตัวอักษร', + 'fullScreenEditorHint': 'ป้อนข้อความของคุณที่นี่...', // 全屏编辑器输入提示 + 'characterCount': '{count} ตัวอักษร', // 字符计数显示 // 消息长按操作 'copy': 'คัดลอก', @@ -325,6 +739,7 @@ const Map thTH = { 'submitSuccess': 'ส่งสำเร็จ', 'submitFailed': 'ส่งล้มเหลว', 'reportSubmitted': 'รายงานถูกส่งแล้ว เราจะดำเนินการโดยเร็วที่สุด', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'เป็นอันตราย/ไม่ปลอดภัย', 'pornographicVulgar': 'ลามกอนาจาร', 'misleadingAttack': 'ทำให้เข้าใจผิด/โจมตี', @@ -332,8 +747,8 @@ const Map thTH = { 'privacyRelated': 'เกี่ยวกับความเป็นส่วนตัว', 'copyrightViolation': 'ละเมิดลิขสิทธิ์ ชื่อเสียง ฯลฯ ของฉัน', 'other': 'อื่นๆ', - 'reportDescriptionHint': - 'เราต้องการทราบเหตุผลที่คุณรายงาน คุณสามารถอธิบายปัญหาที่คุณพบได้', + 'reportDescriptionHint': 'เราต้องการทราบเหตุผลที่คุณรายงาน คุณสามารถอธิบายปัญหาที่คุณพบได้', + //'submit': '提交', //Message_bubble 'generatedByAi': 'สร้างโดย AI', @@ -344,15 +759,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": "ขี่จักรยาน", @@ -364,20 +779,13 @@ const Map thTH = { 'lowest': 'ต่ำสุด', 'futureForecast': 'พยากรณ์อากาศล่วงหน้า', 'hotWeatherTip': 'วันนี้อากาศร้อน โปรดระวังโรคลมแดด ดื่มน้ำมากๆ', - 'coldWeatherTip': - 'วันนี้อากาศเย็น โปรดใส่ใจเรื่องความอบอุ่นเมื่อออกไปข้างนอก ระวังเป็นหวัด', - 'rainyWeatherTip': - 'วันนี้มีฝน โปรดพกร่มเมื่อออกไปข้างนอก ระมัดระวังในการเดินทาง', - 'snowyWeatherTip': - 'วันนี้มีหิมะ ถนนลื่นโปรดระวังความปลอดภัย เตรียมมาตรการป้องกันความหนาว', - 'foggyWeatherTip': - 'วันนี้มีหมอก ทัศนวิสัยต่ำ โปรดสวมหน้ากากเมื่อออกไปข้างนอก', - 'windyWeatherTip': - 'วันนี้ลมแรง โปรดระวังความปลอดภัยเมื่อออกไปข้างนอก ยึดของให้แน่น', - 'sunnyWeatherTip': - 'วันนี้แดดจัด รังสียูวีแรง โปรดป้องกันแสงแดดเมื่อออกไปข้างนอก', - 'temperatureDifferenceTip': - 'วันนี้อุณหภูมิต่างกันมากระหว่างกลางวันและกลางคืน โปรดเพิ่มหรือลดเสื้อผ้าให้เหมาะสม', + 'coldWeatherTip': 'วันนี้อากาศเย็น โปรดใส่ใจเรื่องความอบอุ่นเมื่อออกไปข้างนอก ระวังเป็นหวัด', + 'rainyWeatherTip': 'วันนี้มีฝน โปรดพกร่มเมื่อออกไปข้างนอก ระมัดระวังในการเดินทาง', + 'snowyWeatherTip': 'วันนี้มีหิมะ ถนนลื่นโปรดระวังความปลอดภัย เตรียมมาตรการป้องกันความหนาว', + 'foggyWeatherTip': 'วันนี้มีหมอก ทัศนวิสัยต่ำ โปรดสวมหน้ากากเมื่อออกไปข้างนอก', + 'windyWeatherTip': 'วันนี้ลมแรง โปรดระวังความปลอดภัยเมื่อออกไปข้างนอก ยึดของให้แน่น', + 'sunnyWeatherTip': 'วันนี้แดดจัด รังสียูวีแรง โปรดป้องกันแสงแดดเมื่อออกไปข้างนอก', + 'temperatureDifferenceTip': 'วันนี้อุณหภูมิต่างกันมากระหว่างกลางวันและกลางคืน โปรดเพิ่มหรือลดเสื้อผ้าให้เหมาะสม', 'comfortableWeatherTip': 'วันนี้อากาศดี เป็นเวลาที่ดีสำหรับกิจกรรมกลางแจ้ง', "monday": "จ.", "tuesday": "อ.", @@ -386,6 +794,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": "มีเมฆบางส่วน", @@ -419,29 +838,26 @@ const Map thTH = { "logout": "ออกจากระบบ", "logoutTips": "คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบบัญชีปัจจุบัน", 'deleteAccount': 'ลบบัญชี', - 'deleteAccountTips': - 'คุณแน่ใจหรือไม่ว่าต้องการลบบัญชีของคุณอย่างถาวร การกระทำนี้ไม่สามารถย้อนกลับได้', + 'deleteAccountTips': 'คุณแน่ใจหรือไม่ว่าต้องการลบบัญชีของคุณอย่างถาวร การกระทำนี้ไม่สามารถย้อนกลับได้', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 - 'networkConnectionFailed': - 'การเชื่อมต่อเครือข่ายล้มเหลว โปรดตรวจสอบการตั้งค่าเครือข่ายแล้วลองใหม่', - 'serverTemporarilyUnavailable': - 'เซิร์ฟเวอร์ไม่สามารถตอบสนองได้ชั่วคราว โปรดลองใหม่ในภายหลัง', - 'loginExpiredPleaseRelogin': - 'การเข้าสู่ระบบหมดอายุแล้ว โปรดเข้าสู่ระบบอีกครั้ง', + 'networkConnectionFailed': 'การเชื่อมต่อเครือข่ายล้มเหลว โปรดตรวจสอบการตั้งค่าเครือข่ายแล้วลองใหม่', + 'serverTemporarilyUnavailable': 'เซิร์ฟเวอร์ไม่สามารถตอบสนองได้ชั่วคราว โปรดลองใหม่ในภายหลัง', + 'loginExpiredPleaseRelogin': 'การเข้าสู่ระบบหมดอายุแล้ว โปรดเข้าสู่ระบบอีกครั้ง', 'noPermissionForThisOperation': 'ไม่มีสิทธิ์ดำเนินการนี้', 'requestedResourceNotFound': 'ไม่พบทรัพยากรที่ร้องขอ', - 'imageProcessingFailedPleaseReselect': - 'การประมวลผลรูปภาพล้มเหลว โปรดเลือกรูปภาพอีกครั้ง', + 'imageProcessingFailedPleaseReselect': 'การประมวลผลรูปภาพล้มเหลว โปรดเลือกรูปภาพอีกครั้ง', 'operationFailedPleaseRetry': 'การดำเนินการล้มเหลว โปรดลองใหม่', 'serverReturnedError': 'เซิร์ฟเวอร์ส่งคืนข้อผิดพลาด', 'serverError': 'ข้อผิดพลาดของเซิร์ฟเวอร์', - 'networkConnectionFailedCheckSettings': - 'การเชื่อมต่อเครือข่ายล้มเหลว โปรดตรวจสอบการตั้งค่าเครือข่าย', - 'serverInternalErrorRetryLater': - 'ข้อผิดพลาดภายในเซิร์ฟเวอร์ โปรดลองใหม่ในภายหลัง', + 'networkConnectionFailedCheckSettings': 'การเชื่อมต่อเครือข่ายล้มเหลว โปรดตรวจสอบการตั้งค่าเครือข่าย', + 'serverInternalErrorRetryLater': 'ข้อผิดพลาดภายในเซิร์ฟเวอร์ โปรดลองใหม่ในภายหลัง', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'การบีบอัดรูปภาพล้มเหลว', 'avatarUpdateFailed': 'อัปเดตอวาตาร์ล้มเหลว', 'usernameCannotBeEmpty': 'ชื่อผู้ใช้ต้องไม่ว่างเปล่า', @@ -454,31 +870,40 @@ 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': - 'ใช้สำหรับอ่านและจัดการกิจกรรมและการแจ้งเตือนในปฏิทิน', + 'calendarFullAccessPermissionDesc': 'ใช้สำหรับอ่านและจัดการกิจกรรมและการแจ้งเตือนในปฏิทิน', 'locationPermissionDesc': 'ใช้สำหรับรับข้อมูลตำแหน่งปัจจุบัน', 'appFunctionNeeds': 'ฟังก์ชันแอปพลิเคชันต้องการ', 'authorized': 'ได้รับอนุญาต', @@ -490,26 +915,63 @@ const Map thTH = { 'permissionRequestError': 'เกิดข้อผิดพลาดขณะขอสิทธิ์', 'phonePermissionDetailDesc': 'ฟังก์ชันโทรออกต้องการสิทธิ์โทรศัพท์', 'smsPermissionDetailDesc': 'ฟังก์ชันส่ง SMS ต้องการสิทธิ์ SMS', - 'calendarWritePermissionDetailDesc': - 'การสร้างกิจกรรมในปฏิทินต้องการสิทธิ์เขียนปฏิทิน', - 'calendarFullAccessPermissionDetailDesc': - 'การจัดการกิจกรรมในปฏิทินต้องการสิทธิ์เข้าถึงปฏิทินเต็มรูปแบบ', + 'alarmPermissionDetailDesc': 'This permission is required to set exact alarms and ensure reminders trigger on time', + 'calendarWritePermissionDetailDesc': 'การสร้างกิจกรรมในปฏิทินต้องการสิทธิ์เขียนปฏิทิน', + 'calendarFullAccessPermissionDetailDesc': 'การจัดการกิจกรรมในปฏิทินต้องการสิทธิ์เข้าถึงปฏิทินเต็มรูปแบบ', 'locationPermissionDetailDesc': 'การรับข้อมูลตำแหน่งต้องการสิทธิ์ตำแหน่ง', - 'appNeedsPermissionForFullFunction': - 'แอปพลิเคชันต้องการสิทธิ์นี้เพื่อให้บริการเต็มรูปแบบ', - 'permanentDenialText': - 'คุณได้ปฏิเสธสิทธิ์ {permission} อย่างถาวร โปรดไปที่การตั้งค่าแอปเพื่อเปิดใช้งาน', + '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': - 'ไม่สามารถเปิด App Store ได้ โปรดไปที่ App Store เพื่ออัปเดตด้วยตนเอง', - 'updateErrorRetry': 'เกิดข้อผิดพลาดระหว่างการอัปเดต โปรดลองใหม่ในภายหลัง', + 'newVersionFound': 'พบเวอร์ชันใหม่', // 版本更新对话框标题 + 'remindLater': 'เตือนภายหลัง', // 稍后提醒按钮 + 'updateNow': 'อัปเดตทันที', // 立即更新按钮 + 'checkUpdate': 'ตรวจสอบการอัปเดต', // 检查更新按钮 + 'updateFailed': 'อัปเดตล้มเหลว', // 更新失败提示 + 'cannotOpenAppStore': 'ไม่สามารถเปิด App Store ได้ โปรดไปที่ App Store เพื่ออัปเดตด้วยตนเอง', // 无法打开应用商店提示 + 'updateErrorRetry': 'เกิดข้อผิดพลาดระหว่างการอัปเดต โปรดลองใหม่ในภายหลัง', // 更新错误重试提示 //国家列表 "邮箱": "อีเมล", @@ -618,8 +1080,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,18 +1105,76 @@ 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": - "คุณแน่ใจหรือไม่ว่าต้องการล้างประวัติการแปลทั้งหมด การกระทำนี้ไม่สามารถย้อนกลับได้", + "clearHistoryConfirm": "คุณแน่ใจหรือไม่ว่าต้องการล้างประวัติการแปลทั้งหมด การกระทำนี้ไม่สามารถย้อนกลับได้", "unknownLanguage": "ภาษาที่ไม่รู้จัก", "deleteSessionRecord": "ลบบันทึกเซสชัน", - "deleteSessionConfirm": - "คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกการแปลทั้งหมดของเซสชันนี้ การกระทำนี้ไม่สามารถย้อนกลับได้", + "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": "กำลังคำนวณ...", @@ -662,11 +1197,9 @@ const Map thTH = { "summaryGenerated": "สร้างสรุปแล้ว", "generating": "กำลังสร้าง...", "regenerate": "สร้างใหม่", - "summaryTimeoutMessage": - "คำขอสร้างสรุปหมดเวลา อาจเป็นเพราะปัญหาเครือข่ายหรือเซิร์ฟเวอร์ไม่ว่าง", + "summaryTimeoutMessage": "คำขอสร้างสรุปหมดเวลา อาจเป็นเพราะปัญหาเครือข่ายหรือเซิร์ฟเวอร์ไม่ว่าง", "deleteTranslationRecord": "ลบบันทึกการแปล", - "deleteTranslationConfirm": - "คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกการแปลนี้ การกระทำนี้ไม่สามารถย้อนกลับได้", + "deleteTranslationConfirm": "คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกการแปลนี้ การกระทำนี้ไม่สามารถย้อนกลับได้", "originalText": "ข้อความต้นฉบับ", "translatedText": "ข้อความที่แปลแล้ว", "sessionSummary": "สรุปเซสชัน", @@ -684,7 +1217,7 @@ const Map thTH = { "autoInputCode": "ป้อนรหัสอัตโนมัติ", "skipBinding": "ข้ามการผูก", "rescan": "สแกนอีกครั้ง", - "skip": "ข้าม", + "verifyingDevice": "กำลังตรวจสอบอุปกรณ์...", "confirmBinding": "ยืนยันการผูก", "associatingDevice": "กำลังเชื่อมโยงอุปกรณ์...", @@ -694,33 +1227,32 @@ const Map thTH = { // 配对状态文本 "readyToPair": "พร้อมที่จะจับคู่", "preparingPairingEnvironment": "กำลังเตรียมสภาพแวดล้อมการจับคู่...", - "connectDeepSoundViaSystemBluetooth": - "กรุณาเชื่อมต่อกับอุปกรณ์ Voitrans ผ่านบลูทูธของระบบก่อน", + "connectDeepSoundViaSystemBluetooth": "กรุณาเชื่อมต่อกับอุปกรณ์ Voitrans ผ่านบลูทูธของระบบก่อน", "deviceBindingConfirm": "ยืนยันการผูกอุปกรณ์...", "establishingDeviceAssociation": "กำลังสร้างการเชื่อมโยงอุปกรณ์...", "waitingCompletePairing": "กรุณารอสักครู่ กำลังทำการจับคู่ให้เสร็จสิ้น...", - "pairingSuccessRedirecting": - "การจับคู่สำเร็จ! กำลังเปลี่ยนเส้นทางไปยังหน้าหลัก...", + "pairingSuccessRedirecting": "การจับคู่สำเร็จ! กำลังเปลี่ยนเส้นทางไปยังหน้าหลัก...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "โปรดตรวจสอบให้แน่ใจว่าคุณเชื่อมต่อกับอุปกรณ์ Voitrans", + "ensureConnectedDeepSoundDevice": "โปรดตรวจสอบให้แน่ใจว่าคุณเชื่อมต่อกับอุปกรณ์ Voitrans", "deviceAlreadyBoundToOtherAccount": "อุปกรณ์นี้ถูกผูกไว้กับบัญชีอื่นแล้ว", "deviceAssociationFailed": "การเชื่อมโยงอุปกรณ์ล้มเหลว โปรดลองอีกครั้ง", - "scanTimeoutEnsureDeviceNearby": - "การสแกนหมดเวลา โปรดตรวจสอบให้แน่ใจว่าอุปกรณ์อยู่ใกล้ๆ", + "scanTimeoutEnsureDeviceNearby": "การสแกนหมดเวลา โปรดตรวจสอบให้แน่ใจว่าอุปกรณ์อยู่ใกล้ๆ", "networkError": "ข้อผิดพลาดเครือข่าย", - "authorizationFailedCheckCode": - "การอนุญาตล้มเหลว โปรดตรวจสอบว่ารหัสอนุญาตถูกต้องหรือไม่", + "authorizationFailedCheckCode": "การอนุญาตล้มเหลว โปรดตรวจสอบว่ารหัสอนุญาตถูกต้องหรือไม่", "pairingFailedRetry": "การจับคู่ล้มเหลว โปรดลองอีกครั้ง", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'กรุณาเปิดใช้งานบลูทูธ', 'deviceDisconnected': 'อุปกรณ์ตัดการเชื่อมต่อแล้ว', 'readyToStartPairing': 'พร้อมที่จะเริ่มการจับคู่', 'checkingEnvironment': 'กำลังตรวจสอบสภาพแวดล้อม...', - 'ensureHeadsetOnAndPairingMode': - 'โปรดตรวจสอบให้แน่ใจว่าหูฟังเปิดอยู่และอยู่ในโหมดจับคู่', + 'ensureHeadsetOnAndPairingMode': 'โปรดตรวจสอบให้แน่ใจว่าหูฟังเปิดอยู่และอยู่ในโหมดจับคู่', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'กำลังสร้างการเชื่อมต่อที่ปลอดภัย...', 'needManualBindingAuthCode': 'ต้องใช้รหัสอนุญาตการผูกด้วยตนเอง...', 'pairingSuccessful': 'การจับคู่สำเร็จ!', @@ -738,8 +1270,16 @@ const Map thTH = { 'bleConnectionTimeoutRetry': 'การเชื่อมต่อ BLE หมดเวลา โปรดลองอีกครั้ง', 'blePairingStartupFailed': 'การเริ่มต้นการจับคู่ BLE ล้มเหลว', 'bleConnectionFailed': 'การเชื่อมต่อ BLE ล้มเหลว', - 'deviceAuthorizationFailedCheckCode': - 'การอนุญาตอุปกรณ์ล้มเหลว โปรดตรวจสอบรหัสอนุญาต', + '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": "ความคิดเห็นของผู้ใช้", @@ -750,13 +1290,11 @@ const Map thTH = { 'contactInfo': 'ข้อมูลติดต่อ', 'contactHint': 'อีเมล/หมายเลขโทรศัพท์ เพื่อให้เราสามารถติดต่อคุณได้', 'submit': 'ส่ง', - 'feedbackSubmitSuccess': - 'ส่งความคิดเห็นสำเร็จ ขอบคุณสำหรับความคิดเห็นของคุณ!', + 'feedbackSubmitSuccess': 'ส่งความคิดเห็นสำเร็จ ขอบคุณสำหรับความคิดเห็นของคุณ!', 'feedbackSubmitFailed': 'ส่งความคิดเห็นล้มเหลว โปรดลองใหม่ในภายหลัง', // OTA升级模块 - "upgradeExitConfirm": - "กำลังอัปเกรด การออกจะขัดจังหวะกระบวนการอัปเกรด คุณแน่ใจหรือไม่ว่าต้องการออก", + "upgradeExitConfirm": "กำลังอัปเกรด การออกจะขัดจังหวะกระบวนการอัปเกรด คุณแน่ใจหรือไม่ว่าต้องการออก", "deviceModel": "รุ่นอุปกรณ์", "unknownDevice": "อุปกรณ์ที่ไม่รู้จัก", "currentFirmwareVersion": "เวอร์ชันเฟิร์มแวร์ปัจจุบัน", @@ -768,20 +1306,22 @@ const Map thTH = { "connectionFailed": "การเชื่อมต่อล้มเหลว", "retryConnection": "ลองเชื่อมต่อใหม่", "ota_updateNow": "อัปเดตทันที", - "keepConnectedDontClose": - "โปรดให้อุปกรณ์เชื่อมต่ออยู่เสมอ อย่าปิดแอปพลิเคชัน", + "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": "กำลังชาร์จ", "updateContent": "เนื้อหาการอัปเดต", - "removeEarbudsEnsureBattery": - "ถอดหูฟังทั้งสองข้างออก และตรวจสอบให้แน่ใจว่าแบตเตอรี่ทั้งสองข้างมีพลังงานมากกว่า 20%", + "removeEarbudsEnsureBattery": "ถอดหูฟังทั้งสองข้างออก และตรวจสอบให้แน่ใจว่าแบตเตอรี่ทั้งสองข้างมีพลังงานมากกว่า 20%", // 音乐列表页面 - "noMusic": "ไม่มีเพลง", - "noPlayingMusic": "ไม่มีเพลงที่กำลังเล่น", - "unknownSong": "เพลงที่ไม่รู้จัก", - "unknownArtist": "ศิลปินที่ไม่รู้จัก", - "playAll": "เล่นทั้งหมด", + "noMusic": "ไม่มีเพลง", // 暂无音乐 + "noPlayingMusic": "ไม่มีเพลงที่กำลังเล่น", // 暂无播放音乐 + "unknownSong": "เพลงที่ไม่รู้จัก", // 未知歌曲 + "unknownArtist": "ศิลปินที่ไม่รู้จัก", // 未知歌手 + "playAll": "เล่นทั้งหมด", // 播放全部 // 语言名称 "中文(简体)": "ภาษาจีน (ตัวย่อ)", @@ -823,4 +1363,21 @@ 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..393860b45 100644 --- a/lib/core/translations/language/tl_ph.dart +++ b/lib/core/translations/language/tl_ph.dart @@ -71,8 +71,7 @@ const Map tlPH = { // 登录页 "welcome": "Maligayang pagdating", - "loginTips": - "Mangyaring mag-login o mag-signup gamit ang iyong numero ng telepono o email", + "loginTips": "Mangyaring mag-login o mag-signup gamit ang iyong numero ng telepono o email", "accountNumber": "Numero ng Telepono o Email", "verificationCode": "Verification Code", "getCode": "Kunin ang Code", @@ -91,8 +90,7 @@ const Map tlPH = { "tip": "Paalala", "pleaseEnterCompleteCode": "Pakilagay ang kumpletong verification code", "loginFailed": "Nabigo ang pag-login, pakisubukang muli", - 'pleaseAcceptPrivacyPolicy': - 'Pakibasa at sumang-ayon muna sa Patakaran sa Privacy at Kasunduan ng User', + 'pleaseAcceptPrivacyPolicy': 'Pakibasa at sumang-ayon muna sa Patakaran sa Privacy at Kasunduan ng User', "enterVerificationCode": "Ilagay ang Verification Code", "verificationCodeSentTo": "Ang verification code ay ipinadala sa", "resendVerificationCode": "Ipadala muli ang verification code", @@ -100,13 +98,14 @@ const Map tlPH = { "usePasswordLogin": "Gamitin ang password para mag-login", // 隐私政策弹窗 - "loginDeclaration": "Pahayag ng Voitrans", - "welcomeToThisApp": - "Maligayang pagdating sa Voitrans, mangyaring basahin nang mabuti", + "loginDeclaration": "Pahayag ng Voitrans", // Voitrans 声明 + "welcomeToThisApp": "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", @@ -116,30 +115,24 @@ const Map tlPH = { "signal": "Signal", "deviceId": "Device ID", "firmwareVersion": "Bersyon ng Firmware", - "disconnectedDevice": - "Walang device na konektado, i-click ang button sa ibaba para kumonekta", + "disconnectedDevice": "Walang device na konektado, i-click ang button sa ibaba para kumonekta", "connectDevice": "Ikonekta ang Device", "topAiExperiences": "Mga Nangungunang Karanasan sa AI", "aiAssistant": "AI All-in-One Assistant", - "aiAssistantInfo": - "24/7 na eksklusibong consultant, sumasagot sa mga tanong, nagbibigay ng payo", + "aiAssistantInfo": "24/7 na eksklusibong consultant, sumasagot sa mga tanong, nagbibigay ng payo", "interpretation": "Sabayang Pagsasalin", - "simultaneousInterpretationInfo": - "Real-time na pagsasalin sa 80+ na wika, walang alalahanin sa paglalakbay sa ibang bansa", + "simultaneousInterpretationInfo": "Real-time na pagsasalin sa 80+ na wika, walang alalahanin sa paglalakbay sa ibang bansa", "aiCompanion": "Kasama ng Pamilya", "aiCompanionInfo": "Nakakaintindi sa iyo, mainit na samahan", "homeSlogan": "Ikonekta ang mundo, lampas sa tunog", - "turnEarphones": - "Pakibuksan ang charging case ng earphones, at ilagay ang earphones sa iyong mga tainga", + "turnEarphones": "Pakibuksan ang charging case ng earphones, at ilagay ang earphones sa iyong mga tainga", "currentlyConnected": "Kasalukuyang konektado:", "unsystemSetup": "Pumunta sa Mga Setting ng System", "talkLater": "Mamaya na", "initializing": "Nag-i-initialize...", - "bluetoothInitializationFailure": - "Nabigo ang pag-initialize ng serbisyo ng Bluetooth", + "bluetoothInitializationFailure": "Nabigo ang pag-initialize ng serbisyo ng Bluetooth", "checkingPermissions": "Sinusuri ang mga pahintulot...", - "lackPermissions": - "Kulang sa mga pahintulot ng Bluetooth at sumasang-ayon ka sa lokasyon", + "lackPermissions": "Kulang sa mga pahintulot ng Bluetooth at sumasang-ayon ka sa lokasyon", "searchingDevice": "Naghahanap ng mga device...", "findConnectedDevice": "Natagpuan ang konektadong device", "notFound": "Walang natagpuang konektadong Bluetooth device", @@ -171,8 +164,7 @@ const Map tlPH = { "exploreAi": "Galugarin ang mga function ng AI na inaalok ng Voitrans", "aiFunction": "Mga Function ng AI", "allRoundAssistant": "All-in-One Assistant", - "allRoundAssistantInfo": - "Tumutulong sa iyong malutas ang iba't ibang problema", + "allRoundAssistantInfo": "Tumutulong sa iyong malutas ang iba't ibang problema", "simultaneousTranslation": "Sabayang Pagsasalin", "faceToFaceTranslation": "Pagsasalin ng Harapan", 'audioVideoTranslation': 'Pagsasalin ng Audio at Video', @@ -183,11 +175,198 @@ const Map tlPH = { "healthConsultant": "Multi-functional na AI Chat", "healthConsultantInfo": "Nagbibigay ng mas maraming function ng AI chat", "conferenceAssistant": "Business Meeting Assistant", - "conferenceAssistantInfo": - "Real-time na pagtatala ng mga minuto ng pulong, pagsasalin sa maraming wika", + "conferenceAssistantInfo": "Real-time na pagtatala ng mga minuto ng pulong, pagsasalin sa maraming wika", "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 +381,225 @@ 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,22 +611,19 @@ 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", "selectLanguage": "Pumili ng Wika", "voiceService": "Serbisyo ng Boses", - "voiceServiceInfo": - "Pumili ng serbisyo para sa pagkilala at pag-synthesize ng boses", + "voiceServiceInfo": "Pumili ng serbisyo para sa pagkilala at pag-synthesize ng boses", "selectVoiceService": "Pumili ng Serbisyo ng Boses", "azureVoiceService": "Azure Voice Service", - "azureVoiceServiceInfo": - "Serbisyo ng boses sa cloud ng Microsoft, sumusuporta sa mataas na kalidad na voice synthesis at recognition", + "azureVoiceServiceInfo": "Serbisyo ng boses sa cloud ng Microsoft, sumusuporta sa mataas na kalidad na voice synthesis at recognition", "flutterVoiceService": "Flutter Local Voice Service", - "flutterVoiceServiceInfo": - "Lokal na serbisyo ng boses sa device, maaaring gamitin nang walang koneksyon sa internet", + "flutterVoiceServiceInfo": "Lokal na serbisyo ng boses sa device, maaaring gamitin nang walang koneksyon sa internet", 'timbreService': 'Serbisyo ng Timbre', 'timbreServiceInfo': 'Pumili ng serbisyo ng voice synthesis na may timbre', 'defaultTimbre': 'Default na Timbre', @@ -246,8 +634,7 @@ const Map tlPH = { 'pleaseRead': 'Pakibasa nang malakas', 'completeRecording': 'Kumpletuhin ang Pag-record', "firmwareUpgrade": "Pag-upgrade ng Firmware", - "bleHeadsetFirmwareUpgrade": - "Pag-upgrade ng Bersyon ng Firmware ng BLE Headset", + "bleHeadsetFirmwareUpgrade": "Pag-upgrade ng Bersyon ng Firmware ng BLE Headset", "deviceManagement": "Pamamahala ng Device", "manageConnectedDevices": "Pamahalaan ang mga naka-pair na Bluetooth device", @@ -258,25 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Damhin ang matalinong voice interaction function (feature preview)", + "realtimeVoiceChatInfo": "Damhin ang matalinong voice interaction function (feature preview)", "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 @@ -286,8 +678,7 @@ const Map tlPH = { "inputMessage": "Mag-type ng mensahe...", "imListening": "Nakikinig...", "canStartTalking": "Maaari ka nang magsalita", - "addQuestionAboutImage": - "Magdagdag ng tanong o paglalarawan tungkol sa larawan...", + "addQuestionAboutImage": "Magdagdag ng tanong o paglalarawan tungkol sa larawan...", "summarizeImageContent": "Ibuod ang nilalaman ng larawan", "extractImageText": "I-extract ang teksto sa imahe", "translateImageText": "Isalin ang teksto sa imahe", @@ -306,6 +697,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' @@ -316,20 +721,16 @@ const Map tlPH = { '• Pagkontrol sa mga function ng earphone\n\n' 'Paano kita matutulungan?', 'microphonePermission': 'Mikropono', - 'voiceRecognitionPermissionText': - 'Ang pagkilala sa boses ay nangangailangan ng access sa mikropono.', - 'voiceTranslationPermissionText': - 'Ang pagkilala at pagsasalin ng boses ay nangangailangan ng access sa mikropono.', - 'phoneCallPermissionText': - 'Ang pagtawag ay nangangailangan ng access sa mikropono para sa mga voice call.', - 'permissionDeniedText': - 'Permanenteng tinanggihan mo ang pahintulot sa mikropono, mangyaring pumunta sa mga setting ng system para paganahin ito.', + 'voiceRecognitionPermissionText': 'Ang pagkilala sa boses ay nangangailangan ng access sa mikropono.', + 'voiceTranslationPermissionText': 'Ang pagkilala at pagsasalin ng boses ay nangangailangan ng access sa mikropono.', + 'phoneCallPermissionText': 'Ang pagtawag ay nangangailangan ng access sa mikropono para sa mga voice call.', + 'permissionDeniedText': 'Permanenteng tinanggihan mo ang pahintulot sa mikropono, mangyaring pumunta sa mga setting ng system para paganahin ito.', 'startVoiceInput': 'Simulan ang voice input', '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', @@ -337,8 +738,8 @@ const Map tlPH = { 'report': 'I-report', 'submitSuccess': 'Matagumpay na naisumite', 'submitFailed': 'Nabigo ang pagsusumite', - 'reportSubmitted': - 'Naisumite na ang report, ipoproseso namin ito sa lalong madaling panahon', + 'reportSubmitted': 'Naisumite na ang report, ipoproseso namin ito sa lalong madaling panahon', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Nakapipinsala/Hindi Ligtas', 'pornographicVulgar': 'Pornograpiko/Bastos', 'misleadingAttack': 'Mapanlinlang/Pag-atake', @@ -346,8 +747,8 @@ const Map tlPH = { 'privacyRelated': 'May kaugnayan sa Privacy', 'copyrightViolation': 'Lumabag sa aking copyright, reputasyon, atbp.', 'other': 'Iba pa', - 'reportDescriptionHint': - 'Gusto naming malaman kung bakit ka nagre-report, maaari mong ilarawan ang problemang iyong naranasan.', + '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 +759,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", @@ -377,24 +778,15 @@ const Map tlPH = { 'highest': 'Pinakamataas', 'lowest': 'Pinakamababa', 'futureForecast': 'Pagtataya sa Hinaharap', - 'hotWeatherTip': - 'Mainit ngayon, mag-ingat sa heatstroke, uminom ng maraming tubig', - 'coldWeatherTip': - 'Malamig ang temperatura ngayon, magsuot ng mainit na damit kapag lalabas para maiwasan ang sipon', - 'rainyWeatherTip': - 'May ulan ngayon, magdala ng payong kapag lalabas, mag-ingat sa paglalakbay', - 'snowyWeatherTip': - 'May snow ngayon, madulas ang daan, mag-ingat at magsuot ng panlamig', - 'foggyWeatherTip': - 'May hamog ngayon, mababa ang visibility, magsuot ng mask kapag lalabas', - 'windyWeatherTip': - 'Mahangin ngayon, mag-ingat kapag lalabas, i-secure ang mga gamit', - 'sunnyWeatherTip': - 'Maaraw at malakas ang UV rays ngayon, maglagay ng sunscreen kapag lalabas', - 'temperatureDifferenceTip': - 'Malaki ang pagkakaiba ng temperatura sa araw at gabi, magsuot ng damit na angkop', - 'comfortableWeatherTip': - 'Maganda ang panahon ngayon, magandang oras para sa mga aktibidad sa labas', + 'hotWeatherTip': 'Mainit ngayon, mag-ingat sa heatstroke, uminom ng maraming tubig', + 'coldWeatherTip': 'Malamig ang temperatura ngayon, magsuot ng mainit na damit kapag lalabas para maiwasan ang sipon', + 'rainyWeatherTip': 'May ulan ngayon, magdala ng payong kapag lalabas, mag-ingat sa paglalakbay', + 'snowyWeatherTip': 'May snow ngayon, madulas ang daan, mag-ingat at magsuot ng panlamig', + 'foggyWeatherTip': 'May hamog ngayon, mababa ang visibility, magsuot ng mask kapag lalabas', + 'windyWeatherTip': 'Mahangin ngayon, mag-ingat kapag lalabas, i-secure ang mga gamit', + 'sunnyWeatherTip': 'Maaraw at malakas ang UV rays ngayon, maglagay ng sunscreen kapag lalabas', + 'temperatureDifferenceTip': 'Malaki ang pagkakaiba ng temperatura sa araw at gabi, magsuot ng damit na angkop', + 'comfortableWeatherTip': 'Maganda ang panahon ngayon, magandang oras para sa mga aktibidad sa labas', "monday": "Lunes", "tuesday": "Martes", "wednesday": "Miyerkules", @@ -402,6 +794,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", @@ -433,33 +836,28 @@ const Map tlPH = { "notSet": "Hindi Naitakda", "accountSetting": "Setting ng Account", "logout": "Mag-logout", - "logoutTips": - "Sigurado ka bang gusto mong mag-logout sa kasalukuyang account?", + "logoutTips": "Sigurado ka bang gusto mong mag-logout sa kasalukuyang account?", 'deleteAccount': 'Burahin ang Account', - 'deleteAccountTips': - 'Sigurado ka bang gusto mong permanenteng burahin ang iyong account? Hindi na ito maibabalik.', + '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': - 'Nabigo ang koneksyon sa network, pakisuri ang iyong mga setting ng network at subukang muli', - 'serverTemporarilyUnavailable': - 'Pansamantalang hindi available ang server, pakisubukang muli mamaya', - 'loginExpiredPleaseRelogin': - 'Nag-expire na ang iyong pag-login, mangyaring mag-login muli', - 'noPermissionForThisOperation': - 'Walang pahintulot na gawin ang operasyong ito', + 'networkConnectionFailed': 'Nabigo ang koneksyon sa network, pakisuri ang iyong mga setting ng network at subukang muli', + 'serverTemporarilyUnavailable': 'Pansamantalang hindi available ang server, pakisubukang muli mamaya', + 'loginExpiredPleaseRelogin': 'Nag-expire na ang iyong pag-login, mangyaring mag-login muli', + 'noPermissionForThisOperation': 'Walang pahintulot na gawin ang operasyong ito', 'requestedResourceNotFound': 'Hindi natagpuan ang hiniling na mapagkukunan', - 'imageProcessingFailedPleaseReselect': - 'Nabigo ang pagproseso ng imahe, mangyaring pumili muli ng imahe', + 'imageProcessingFailedPleaseReselect': 'Nabigo ang pagproseso ng imahe, mangyaring pumili muli ng imahe', 'operationFailedPleaseRetry': 'Nabigo ang operasyon, pakisubukang muli', 'serverReturnedError': 'Nagbalik ng error ang server', 'serverError': 'Error sa Server', - 'networkConnectionFailedCheckSettings': - 'Nabigo ang koneksyon sa network, pakisuri ang iyong mga setting ng network', - 'serverInternalErrorRetryLater': - 'Internal na error sa server, pakisubukang muli mamaya', + 'networkConnectionFailedCheckSettings': 'Nabigo ang koneksyon sa network, pakisuri ang iyong mga setting ng network', + 'serverInternalErrorRetryLater': '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,35 +870,41 @@ 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', - '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', + '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', // 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', - 'calendarWritePermissionDesc': - 'Ginagamit para sa paglikha ng mga kaganapan at paalala sa kalendaryo', - 'calendarFullAccessPermissionDesc': - 'Ginagamit para sa pagbabasa at pamamahala ng mga kaganapan at paalala sa kalendaryo', - 'locationPermissionDesc': - 'Ginagamit para sa pagkuha ng kasalukuyang impormasyon sa lokasyon', + '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': 'Ginagamit para sa pagbabasa at pamamahala ng mga kaganapan at paalala sa kalendaryo', + 'locationPermissionDesc': 'Ginagamit para sa pagkuha ng kasalukuyang impormasyon sa lokasyon', 'appFunctionNeeds': 'Kailangan ng function ng app', 'authorized': 'Pinahintulutan', 'unauthorized': 'Hindi Pinahintulutan', @@ -509,32 +913,65 @@ const Map tlPH = { 'unknownStatus': 'Hindi Malamang Katayuan', 'permissionGranted': 'Naibigay na ang pahintulot', 'permissionRequestError': 'Error sa paghiling ng pahintulot', - 'phonePermissionDetailDesc': - 'Ang function ng pagtawag ay nangangailangan ng pahintulot sa telepono', - 'smsPermissionDetailDesc': - 'Ang function ng pagpapadala ng SMS ay nangangailangan ng pahintulot sa SMS', - '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', - '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', + 'phonePermissionDetailDesc': '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', - 'cannotOpenAppStore': - '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', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Nagkaroon ng error habang nag-a-update, pakisubukang muli mamaya', // 更新错误重试提示 //国家列表 "邮箱": "Email", @@ -643,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Sigurado ka bang gusto mong burahin ang lahat ng kasaysayan ng pagsasalin? Hindi na ito maibabalik.", "unknownLanguage": "Hindi Kilalang Wika", "deleteSessionRecord": "Burahin ang Record ng Session", - "deleteSessionConfirm": - "Sigurado ka bang gusto mong burahin ang lahat ng record ng pagsasalin para sa session na ito? Hindi na ito maibabalik.", + "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...", @@ -679,8 +1189,7 @@ const Map tlPH = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Orihinal na Record", "recordSummary": "Buod ng Record", - "clickToGenerateSummary": - "I-click ang button sa ibaba para bumuo ng buod ng session", + "clickToGenerateSummary": "I-click ang button sa ibaba para bumuo ng buod ng session", "summaryContent": "Nilalaman ng Buod", "copied": "Nakopya", "summaryCopiledToClipboard": "Nakopya ang buod sa clipboard", @@ -688,11 +1197,9 @@ const Map tlPH = { "summaryGenerated": "Nabuong buod", "generating": "Gumagawa...", "regenerate": "Muling buuin", - "summaryTimeoutMessage": - "Nag-time out ang kahilingan sa pagbuo ng buod, maaaring dahil sa problema sa network o abala ang server.", + "summaryTimeoutMessage": "Nag-time out ang kahilingan sa pagbuo ng buod, maaaring dahil sa problema sa network o abala ang server.", "deleteTranslationRecord": "Burahin ang Record ng Pagsasalin", - "deleteTranslationConfirm": - "Sigurado ka bang gusto mong burahin ang record ng pagsasalin na ito? Hindi na ito maibabalik.", + "deleteTranslationConfirm": "Sigurado ka bang gusto mong burahin ang record ng pagsasalin na ito? Hindi na ito maibabalik.", "originalText": "Orihinal na Teksto", "translatedText": "Isinaling Teksto", "sessionSummary": "Buod ng Session", @@ -710,7 +1217,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...", @@ -719,79 +1226,75 @@ const Map tlPH = { // 配对状态文本 "readyToPair": "Handa nang i-pair", - "preparingPairingEnvironment": - "Inihahanda ang kapaligiran para sa pag-pair...", - "connectDeepSoundViaSystemBluetooth": - "Mangyaring kumonekta muna sa Voitrans device sa pamamagitan ng system Bluetooth", + "preparingPairingEnvironment": "Inihahanda ang kapaligiran para sa pag-pair...", + "connectDeepSoundViaSystemBluetooth": "Mangyaring kumonekta muna sa Voitrans device sa pamamagitan ng system Bluetooth", "deviceBindingConfirm": "Kumpirmasyon sa pag-bind ng device...", "establishingDeviceAssociation": "Itinatatag ang ugnayan ng device...", "waitingCompletePairing": "Pakihintay, kinukumpleto ang pag-pair...", - "pairingSuccessRedirecting": - "Matagumpay ang pag-pair! Papunta na sa home page...", + "pairingSuccessRedirecting": "Matagumpay ang pag-pair! Papunta na sa home page...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Pakitiyak na konektado ka sa isang Voitrans device", - "deviceAlreadyBoundToOtherAccount": - "Ang device na ito ay naka-bind na sa ibang account", - "deviceAssociationFailed": - "Nabigo ang pag-uugnay ng device, pakisubukang muli", - "scanTimeoutEnsureDeviceNearby": - "Nag-time out ang pag-scan, pakitiyak na malapit ang device", + "ensureConnectedDeepSoundDevice": "Pakitiyak na konektado ka sa isang Voitrans device", + "deviceAlreadyBoundToOtherAccount": "Ang device na ito ay naka-bind na sa ibang account", + "deviceAssociationFailed": "Nabigo ang pag-uugnay ng device, pakisubukang muli", + "scanTimeoutEnsureDeviceNearby": "Nag-time out ang pag-scan, pakitiyak na malapit ang device", "networkError": "Error sa Network", - "authorizationFailedCheckCode": - "Nabigo ang awtorisasyon, pakisuri kung tama ang authorization code", + "authorizationFailedCheckCode": "Nabigo ang awtorisasyon, pakisuri kung tama ang authorization code", "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', + '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...', + 'needManualBindingAuthCode': 'Kailangan ng manual binding authorization code...', 'pairingSuccessful': 'Matagumpay ang pag-pair!', 'enableBluetooth': 'Paganahin ang Bluetooth', 'grantPermissions': 'Magbigay ng mga Pahintulot', 'retryAssociation': 'Muling iugnay', 'retryAuthorization': 'Muling pahintulutan', - 'pleaseGrantNecessaryPermissions': - 'Pakibigay ang mga kinakailangang pahintulot', + 'pleaseGrantNecessaryPermissions': 'Pakibigay ang mga kinakailangang pahintulot', 'checkFailedRetry': 'Nabigo ang pagsuri, pakisubukang muli', 'pleaseConnectDeepSoundDevice': 'Pakikonekta ang isang Voitrans device', 'verificationFailedRetry': 'Nabigo ang pag-verify, pakisubukang muli', 'invalidDeviceAddress': 'Hindi wastong address ng device', 'bleDeviceAssociationFailed': 'Nabigo ang pag-uugnay ng BLE device', - 'deviceAssociationFailedRetry': - 'Nabigo ang pag-uugnay ng device, pakisubukang muli', - 'bleConnectionTimeoutRetry': - 'Nag-time out ang koneksyon ng BLE, pakisubukang muli', + 'deviceAssociationFailedRetry': 'Nabigo ang pag-uugnay ng device, pakisubukang muli', + 'bleConnectionTimeoutRetry': 'Nag-time out ang koneksyon ng BLE, pakisubukang muli', 'blePairingStartupFailed': 'Nabigo ang pagsisimula ng BLE pairing', 'bleConnectionFailed': 'Nabigo ang koneksyon ng BLE', - 'deviceAuthorizationFailedCheckCode': - 'Nabigo ang awtorisasyon ng device, pakisuri ang authorization code', + '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', - 'feedbackDescription': - 'Pakilarawan ang problemang naranasan o ang iyong suhestiyon', + 'feedbackDescription': 'Pakilarawan ang problemang naranasan o ang iyong suhestiyon', 'feedbackHint': 'Pakilagay ang iyong feedback...', 'feedbackRequired': 'Pakilagay ang nilalaman ng feedback', 'contactInfo': 'Impormasyon sa Pakikipag-ugnayan', 'contactHint': 'Email/Numero ng telepono, para makontak ka namin', 'submit': 'Isumite', - 'feedbackSubmitSuccess': - 'Matagumpay na naisumite ang feedback, salamat sa iyong feedback!', - 'feedbackSubmitFailed': - 'Nabigong isumite ang feedback, pakisubukang muli mamaya', + 'feedbackSubmitSuccess': 'Matagumpay na naisumite ang feedback, salamat sa iyong feedback!', + 'feedbackSubmitFailed': 'Nabigong isumite ang feedback, pakisubukang muli mamaya', // OTA升级模块 - "upgradeExitConfirm": - "Kasalukuyang nag-a-upgrade, ang pag-exit ay makakaantala sa proseso, sigurado ka bang gusto mong mag-exit?", + "upgradeExitConfirm": "Kasalukuyang nag-a-upgrade, ang pag-exit ay makakaantala sa proseso, sigurado ka bang gusto mong mag-exit?", "deviceModel": "Modelo ng Device", "unknownDevice": "Hindi Kilalang Device", "currentFirmwareVersion": "Kasalukuyang Bersyon ng Firmware", @@ -803,20 +1306,22 @@ const Map tlPH = { "connectionFailed": "Nabigo ang Koneksyon", "retryConnection": "Muling kumonekta", "ota_updateNow": "I-update Ngayon", - "keepConnectedDontClose": - "Panatilihing konektado ang device, huwag isara ang app", + "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", "charging": "Nagcha-charge", "updateContent": "Nilalaman ng Update", - "removeEarbudsEnsureBattery": - "Alisin ang parehong earbuds, at tiyaking parehong may 20% o higit pang baterya", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..ae652136b 100644 --- a/lib/core/translations/language/tr_tr.dart +++ b/lib/core/translations/language/tr_tr.dart @@ -71,8 +71,7 @@ const Map trTR = { // 登录页 "welcome": "Hoş Geldiniz", - "loginTips": - "Lütfen telefon numaranızı veya e-postanızı kullanarak giriş yapın veya hesap oluşturun", + "loginTips": "Lütfen telefon numaranızı veya e-postanızı kullanarak giriş yapın veya hesap oluşturun", "accountNumber": "Telefon Numarası veya E-posta", "verificationCode": "Doğrulama Kodu", "getCode": "Kodu Al", @@ -91,8 +90,7 @@ const Map trTR = { "tip": "İpucu", "pleaseEnterCompleteCode": "Lütfen tam doğrulama kodunu girin", "loginFailed": "Giriş başarısız, lütfen tekrar deneyin", - 'pleaseAcceptPrivacyPolicy': - 'Lütfen önce Gizlilik Politikasını ve Kullanıcı Sözleşmesini okuyup kabul edin', + 'pleaseAcceptPrivacyPolicy': 'Lütfen önce Gizlilik Politikasını ve Kullanıcı Sözleşmesini okuyup kabul edin', "enterVerificationCode": "Doğrulama kodunu girin", "verificationCodeSentTo": "Doğrulama kodu şuraya gönderildi:", "resendVerificationCode": "Doğrulama kodunu tekrar gönder", @@ -100,12 +98,14 @@ 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", @@ -115,20 +115,17 @@ const Map trTR = { "signal": "Sinyal", "deviceId": "Cihaz Kimliği", "firmwareVersion": "Donanım Yazılımı Sürümü", - "disconnectedDevice": - "Bağlı cihaz yok, bağlanmak için aşağıdaki düğmeye tıklayın", + "disconnectedDevice": "Bağlı cihaz yok, bağlanmak için aşağıdaki düğmeye tıklayın", "connectDevice": "Cihaz Bağla", "topAiExperiences": "En İyi Yapay Zeka Deneyimleri", "aiAssistant": "Her Şey Dahil Yapay Zeka Asistanı", "aiAssistantInfo": "Sorular ve tavsiyeler için 7/24 özel danışman", "interpretation": "Simultane Çeviri", - "simultaneousInterpretationInfo": - "80'den fazla dil için gerçek zamanlı çeviri, sorunsuz yurt dışı seyahati", + "simultaneousInterpretationInfo": "80'den fazla dil için gerçek zamanlı çeviri, sorunsuz yurt dışı seyahati", "aiCompanion": "Aile Arkadaşı", "aiCompanionInfo": "Sizi anlar ve sıcak bir arkadaşlık sunar", "homeSlogan": "Dünyayla bağlan, sesin ötesine geç", - "turnEarphones": - "Lütfen kulaklık şarj kutusunu açın ve kulaklıkları kulaklarınıza takın", + "turnEarphones": "Lütfen kulaklık şarj kutusunu açın ve kulaklıkları kulaklarınıza takın", "currentlyConnected": "Şu anda bağlı:", "unsystemSetup": "Sistem ayarlarına git", "talkLater": "Daha Sonra", @@ -178,11 +175,198 @@ const Map trTR = { "healthConsultant": "Çok Fonksiyonlu Yapay Zeka Sohbeti", "healthConsultantInfo": "Daha fazla yapay zeka sohbet özelliği sunar", "conferenceAssistant": "İş Toplantısı Asistanı", - "conferenceAssistantInfo": - "Gerçek zamanlı toplantı tutanakları, çok dilli çeviri", + "conferenceAssistantInfo": "Gerçek zamanlı toplantı tutanakları, çok dilli çeviri", "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,27 +381,238 @@ 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ı", "languageSetting": "Dil Ayarları", "darkMode": "Karanlık Mod", - "darkModeInfo": - "Uygulamanın aydınlık ve karanlık temaları arasında geçiş yapın", + "darkModeInfo": "Uygulamanın aydınlık ve karanlık temaları arasında geçiş yapın", "backups": "Yedekle ve Geri Yükle", "backupsInfo": "Ayarları ve yapay zeka etkileşim geçmişini yedekleyin", "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", @@ -226,11 +621,9 @@ const Map trTR = { "voiceServiceInfo": "Ses tanıma ve sentezleme hizmetini seçin", "selectVoiceService": "Ses Hizmeti Seç", "azureVoiceService": "Azure Ses Hizmeti", - "azureVoiceServiceInfo": - "Yüksek kaliteli ses sentezi ve tanımayı destekleyen Microsoft bulut ses hizmeti", + "azureVoiceServiceInfo": "Yüksek kaliteli ses sentezi ve tanımayı destekleyen Microsoft bulut ses hizmeti", "flutterVoiceService": "Flutter Yerel Ses Hizmeti", - "flutterVoiceServiceInfo": - "Cihazın yerel ses hizmeti, internet bağlantısı olmadan kullanılabilir", + "flutterVoiceServiceInfo": "Cihazın yerel ses hizmeti, internet bağlantısı olmadan kullanılabilir", 'timbreService': 'Ses Tonu Hizmeti', 'timbreServiceInfo': 'Ses sentezi için ses tonu hizmeti seçin', 'defaultTimbre': 'Varsayılan Ses Tonu', @@ -241,8 +634,7 @@ const Map trTR = { 'pleaseRead': 'Lütfen Yüksek Sesle Okuyun', 'completeRecording': 'Kaydı Tamamla', "firmwareUpgrade": "Donanım Yazılımı Güncellemesi", - "bleHeadsetFirmwareUpgrade": - "BLE Kulaklık Donanım Yazılımı Sürüm Güncellemesi", + "bleHeadsetFirmwareUpgrade": "BLE Kulaklık Donanım Yazılımı Sürüm Güncellemesi", "deviceManagement": "Cihaz Yönetimi", "manageConnectedDevices": "Bağlı Bluetooth cihazlarını yönetin", @@ -253,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Akıllı sesli etkileşim özelliğini deneyimleyin (Özellik Önizlemesi)", + "realtimeVoiceChatInfo": "Akıllı sesli etkileşim özelliğini deneyimleyin (Özellik Önizlemesi)", "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,10 +697,23 @@ 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': - 'Merhaba! Ben **Lily**, size şu konularda yardımcı olabilirim:\n\n' + 'welcomeMessage': 'Merhaba! Ben **Lily**, size şu konularda yardımcı olabilirim:\n\n' '• Soruları yanıtlamak ve bilgi sağlamak\n\n' '• Gerçek zamanlı sesli çeviri\n\n' '• Müzik ve podcast önermek\n\n' @@ -310,20 +721,16 @@ const Map trTR = { '• Kulaklık fonksiyonlarını kontrol etmek\n\n' 'Size nasıl yardımcı olabilirim?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': - 'Ses tanıma özelliği mikrofon erişimi gerektirir.', - 'voiceTranslationPermissionText': - 'Ses tanıma ve çeviri özelliği mikrofon erişimi gerektirir.', - 'phoneCallPermissionText': - 'Arama yapma özelliği sesli aramalar için mikrofon erişimi gerektirir.', - 'permissionDeniedText': - 'Mikrofon iznini kalıcı olarak reddettiniz, lütfen sistem ayarlarından izni etkinleştirin.', + 'voiceRecognitionPermissionText': 'Ses tanıma özelliği mikrofon erişimi gerektirir.', + 'voiceTranslationPermissionText': 'Ses tanıma ve çeviri özelliği mikrofon erişimi gerektirir.', + 'phoneCallPermissionText': 'Arama yapma özelliği sesli aramalar için mikrofon erişimi gerektirir.', + 'permissionDeniedText': 'Mikrofon iznini kalıcı olarak reddettiniz, lütfen sistem ayarlarından izni etkinleştirin.', 'startVoiceInput': 'Sesli girişi başlat', '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 +739,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', @@ -339,8 +747,8 @@ const Map trTR = { 'privacyRelated': 'Gizlilikle İlgili', 'copyrightViolation': 'Telif hakkımı, itibarımı vb. ihlal ediyor', 'other': 'Diğer', - 'reportDescriptionHint': - 'Şikayet nedeninizi öğrenmek istiyoruz, karşılaştığınız sorunu açıklayabilirsiniz.', + '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 +759,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", @@ -370,24 +778,15 @@ const Map trTR = { 'highest': 'En Yüksek', 'lowest': 'En Düşük', 'futureForecast': 'Gelecek Tahmini', - 'hotWeatherTip': - 'Bugün hava sıcak, lütfen serin kalmaya ve güneş çarpmasını önlemek için bol su içmeye dikkat edin', - 'coldWeatherTip': - 'Bugün hava soğuk, dışarı çıkarken üşütmemek için sıkı giyinin', - 'rainyWeatherTip': - 'Bugün yağmurlu, dışarı çıkarken şemsiye alın ve dikkatli olun', - 'snowyWeatherTip': - 'Bugün karlı, yollar kaygan, lütfen dikkatli olun ve sıcak kalmak için önlem alın', - 'foggyWeatherTip': - 'Bugün sisli, görüş mesafesi düşük, dışarı çıkarken maske takın', - 'windyWeatherTip': - 'Bugün rüzgarlı, dışarı çıkarken dikkatli olun ve eşyalarınızı sabitleyin', - 'sunnyWeatherTip': - 'Bugün güneşli ve UV ışınları güçlü, dışarı çıkarken güneş kremi kullanın', - 'temperatureDifferenceTip': - 'Bugün gece ile gündüz arasında büyük sıcaklık farkı var, giysilerinizi buna göre ayarlayın', - 'comfortableWeatherTip': - 'Bugün hava güzel, dışarıda vakit geçirmek için harika bir zaman', + 'hotWeatherTip': 'Bugün hava sıcak, lütfen serin kalmaya ve güneş çarpmasını önlemek için bol su içmeye dikkat edin', + 'coldWeatherTip': 'Bugün hava soğuk, dışarı çıkarken üşütmemek için sıkı giyinin', + 'rainyWeatherTip': 'Bugün yağmurlu, dışarı çıkarken şemsiye alın ve dikkatli olun', + 'snowyWeatherTip': 'Bugün karlı, yollar kaygan, lütfen dikkatli olun ve sıcak kalmak için önlem alın', + 'foggyWeatherTip': 'Bugün sisli, görüş mesafesi düşük, dışarı çıkarken maske takın', + 'windyWeatherTip': 'Bugün rüzgarlı, dışarı çıkarken dikkatli olun ve eşyalarınızı sabitleyin', + 'sunnyWeatherTip': 'Bugün güneşli ve UV ışınları güçlü, dışarı çıkarken güneş kremi kullanın', + 'temperatureDifferenceTip': 'Bugün gece ile gündüz arasında büyük sıcaklık farkı var, giysilerinizi buna göre ayarlayın', + 'comfortableWeatherTip': 'Bugün hava güzel, dışarıda vakit geçirmek için harika bir zaman', "monday": "Pzt", "tuesday": "Sal", "wednesday": "Çar", @@ -395,6 +794,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", @@ -428,28 +838,26 @@ const Map trTR = { "logout": "Çıkış Yap", "logoutTips": "Mevcut hesaptan çıkmak istediğinizden emin misiniz?", 'deleteAccount': 'Hesabı Sil', - 'deleteAccountTips': - 'Hesabınızı kalıcı olarak silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.', + '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': - 'Ağ bağlantısı başarısız, lütfen ağ ayarlarını kontrol edip tekrar deneyin', - 'serverTemporarilyUnavailable': - 'Sunucu geçici olarak yanıt vermiyor, lütfen daha sonra tekrar deneyin', + 'networkConnectionFailed': 'Ağ bağlantısı başarısız, lütfen ağ ayarlarını kontrol edip tekrar deneyin', + 'serverTemporarilyUnavailable': 'Sunucu geçici olarak yanıt vermiyor, lütfen daha sonra tekrar deneyin', 'loginExpiredPleaseRelogin': 'Oturum süresi doldu, lütfen tekrar giriş yapın', 'noPermissionForThisOperation': 'Bu işlemi gerçekleştirmek için izniniz yok', 'requestedResourceNotFound': 'İstenen kaynak bulunamadı', - 'imageProcessingFailedPleaseReselect': - 'Resim işlenemedi, lütfen resmi yeniden seçin', + 'imageProcessingFailedPleaseReselect': 'Resim işlenemedi, lütfen resmi yeniden seçin', 'operationFailedPleaseRetry': 'İşlem başarısız, lütfen tekrar deneyin', 'serverReturnedError': 'Sunucu bir hata döndürdü', 'serverError': 'Sunucu Hatası', - 'networkConnectionFailedCheckSettings': - 'Ağ bağlantısı başarısız, lütfen ağ ayarlarını kontrol edin', - 'serverInternalErrorRetryLater': - 'Sunucu iç hatası, lütfen daha sonra tekrar deneyin', + 'networkConnectionFailedCheckSettings': 'Ağ bağlantısı başarısız, lütfen ağ ayarlarını kontrol edin', + 'serverInternalErrorRetryLater': '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,32 +870,40 @@ 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', - 'calendarWritePermissionDesc': - 'Takvim etkinlikleri ve hatırlatıcılar oluşturmak için kullanılır', - 'calendarFullAccessPermissionDesc': - 'Takvim etkinliklerini ve hatırlatıcıları okumak ve yönetmek 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': 'Takvim etkinliklerini ve hatırlatıcıları okumak ve yönetmek için kullanılır', 'locationPermissionDesc': 'Mevcut konum bilgisini almak için kullanılır', 'appFunctionNeeds': 'Uygulama özelliğinin ihtiyacı var', 'authorized': 'Yetkilendirildi', @@ -499,27 +915,63 @@ 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', - 'calendarWritePermissionDetailDesc': - 'Takvim etkinliği oluşturma takvime yazma izni gerektirir', - 'calendarFullAccessPermissionDetailDesc': - 'Takvim etkinliklerini yönetme tam takvim erişimi 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', - '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', + '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', - 'cannotOpenAppStore': - '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', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Güncelleme sırasında bir hata oluştu, lütfen daha sonra tekrar deneyin', // 更新错误重试提示 //国家列表 "邮箱": "E-posta", @@ -628,8 +1080,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,18 +1105,76 @@ 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.", + "clearHistoryConfirm": "Tüm çeviri geçmişini temizlemek istediğinizden emin misiniz? Bu işlem geri alınamaz.", "unknownLanguage": "Bilinmeyen Dil", "deleteSessionRecord": "Oturum Kaydını Sil", - "deleteSessionConfirm": - "Bu oturumun tüm çeviri kayıtlarını silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", + "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...", @@ -664,8 +1189,7 @@ const Map trTR = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Orijinal Kayıt", "recordSummary": "Kayıt Özeti", - "clickToGenerateSummary": - "Oturum özeti oluşturmak için aşağıdaki düğmeye tıklayın", + "clickToGenerateSummary": "Oturum özeti oluşturmak için aşağıdaki düğmeye tıklayın", "summaryContent": "Özet İçeriği", "copied": "Kopyalandı", "summaryCopiledToClipboard": "Özet panoya kopyalandı", @@ -673,11 +1197,9 @@ const Map trTR = { "summaryGenerated": "Özet oluşturuldu", "generating": "Oluşturuluyor...", "regenerate": "Yeniden Oluştur", - "summaryTimeoutMessage": - "Özet oluşturma isteği zaman aşımına uğradı. Ağ sorunları veya sunucu yoğunluğu olabilir.", + "summaryTimeoutMessage": "Özet oluşturma isteği zaman aşımına uğradı. Ağ sorunları veya sunucu yoğunluğu olabilir.", "deleteTranslationRecord": "Çeviri Kaydını Sil", - "deleteTranslationConfirm": - "Bu çeviri kaydını silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", + "deleteTranslationConfirm": "Bu çeviri kaydını silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", "originalText": "Orijinal Metin", "translatedText": "Çevrilmiş Metin", "sessionSummary": "Oturum Özeti", @@ -695,7 +1217,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...", @@ -705,33 +1227,32 @@ const Map trTR = { // 配对状态文本 "readyToPair": "Eşleştirmeye hazır", "preparingPairingEnvironment": "Eşleştirme ortamı hazırlanıyor...", - "connectDeepSoundViaSystemBluetooth": - "Lütfen önce sistem Bluetooth'u üzerinden Voitrans cihazına bağlanın", + "connectDeepSoundViaSystemBluetooth": "Lütfen önce sistem Bluetooth'u üzerinden Voitrans cihazına bağlanın", "deviceBindingConfirm": "Cihaz bağlama onayı...", "establishingDeviceAssociation": "Cihaz ilişkisi kuruluyor...", "waitingCompletePairing": "Lütfen bekleyin, eşleştirme tamamlanıyor...", - "pairingSuccessRedirecting": - "Eşleştirme başarılı! Ana sayfaya yönlendiriliyor...", + "pairingSuccessRedirecting": "Eşleştirme başarılı! Ana sayfaya yönlendiriliyor...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Lütfen bir Voitrans cihazına bağlı olduğunuzdan emin olun", + "ensureConnectedDeepSoundDevice": "Lütfen bir Voitrans cihazına bağlı olduğunuzdan emin olun", "deviceAlreadyBoundToOtherAccount": "Bu cihaz başka bir hesaba zaten bağlı", "deviceAssociationFailed": "Cihaz ilişkisi kurulamadı, lütfen tekrar deneyin", - "scanTimeoutEnsureDeviceNearby": - "Tarama zaman aşımına uğradı, lütfen cihazın yakında olduğundan emin olun", + "scanTimeoutEnsureDeviceNearby": "Tarama zaman aşımına uğradı, lütfen cihazın yakında olduğundan emin olun", "networkError": "Ağ Hatası", - "authorizationFailedCheckCode": - "Yetkilendirme başarısız, lütfen yetkilendirme kodunun doğru olup olmadığını kontrol edin", + "authorizationFailedCheckCode": "Yetkilendirme başarısız, lütfen yetkilendirme kodunun doğru olup olmadığını kontrol edin", "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', + '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ı!', @@ -745,33 +1266,35 @@ const Map trTR = { 'verificationFailedRetry': 'Doğrulama başarısız, lütfen tekrar deneyin', 'invalidDeviceAddress': 'Geçersiz cihaz adresi', 'bleDeviceAssociationFailed': 'BLE cihaz ilişkisi kurulamadı', - 'deviceAssociationFailedRetry': - 'Cihaz ilişkisi kurulamadı, lütfen tekrar deneyin', - 'bleConnectionTimeoutRetry': - 'BLE bağlantısı zaman aşımına uğradı, lütfen tekrar deneyin', + 'deviceAssociationFailedRetry': 'Cihaz ilişkisi kurulamadı, lütfen tekrar deneyin', + 'bleConnectionTimeoutRetry': 'BLE bağlantısı zaman aşımına uğradı, lütfen tekrar deneyin', 'blePairingStartupFailed': 'BLE eşleştirmesi başlatılamadı', 'bleConnectionFailed': 'BLE bağlantısı başarısız', - 'deviceAuthorizationFailedCheckCode': - 'Cihaz yetkilendirmesi başarısız, lütfen yetkilendirme kodunu kontrol edin', + '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', - 'feedbackDescription': - 'Lütfen karşılaştığınız sorunu veya önerinizi açıklayın', + 'feedbackDescription': 'Lütfen karşılaştığınız sorunu veya önerinizi açıklayın', 'feedbackHint': 'Lütfen geri bildiriminizi girin...', 'feedbackRequired': 'Lütfen geri bildirim içeriğini girin', 'contactInfo': 'İletişim Bilgileri', 'contactHint': 'E-posta/Telefon, sizinle iletişime geçebilmemiz için', 'submit': 'Gönder', - 'feedbackSubmitSuccess': - 'Geri bildirim başarıyla gönderildi, geri bildiriminiz için teşekkür ederiz!', - 'feedbackSubmitFailed': - 'Geri bildirim gönderilemedi, lütfen daha sonra tekrar deneyin', + 'feedbackSubmitSuccess': 'Geri bildirim başarıyla gönderildi, geri bildiriminiz için teşekkür ederiz!', + 'feedbackSubmitFailed': 'Geri bildirim gönderilemedi, lütfen daha sonra tekrar deneyin', // OTA升级模块 - "upgradeExitConfirm": - "Yükseltme devam ediyor. Çıkmak işlemi kesecektir, çıkmak istediğinizden emin misiniz?", + "upgradeExitConfirm": "Yükseltme devam ediyor. Çıkmak işlemi kesecektir, çıkmak istediğinizden emin misiniz?", "deviceModel": "Cihaz Modeli", "unknownDevice": "Bilinmeyen Cihaz", "currentFirmwareVersion": "Mevcut Donanım Yazılımı Sürümü", @@ -783,20 +1306,22 @@ const Map trTR = { "connectionFailed": "Bağlantı Başarısız", "retryConnection": "Yeniden Dene", "ota_updateNow": "Şimdi Güncelle", - "keepConnectedDontClose": - "Lütfen cihazı bağlı tutun ve uygulamayı kapatmayı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": "Lütfen cihazı bağlı tutun ve uygulamayı kapatmayın", "doNotDisconnect": "Bağlantıyı kesmeyin", "charging": "Şarj oluyor", "updateContent": "Güncelleme İçeriği", - "removeEarbudsEnsureBattery": - "Her iki kulaklığı da çıkarın ve pil seviyelerinin %20'un üzerinde olduğundan emin olun", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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..05fa55fad 100644 --- a/lib/core/translations/language/uk_ua.dart +++ b/lib/core/translations/language/uk_ua.dart @@ -71,8 +71,7 @@ const Map ukUA = { // 登录页 "welcome": "Ласкаво просимо", - "loginTips": - "Увійдіть або зареєструйтеся за допомогою номера телефону або електронної пошти", + "loginTips": "Увійдіть або зареєструйтеся за допомогою номера телефону або електронної пошти", "accountNumber": "Номер телефону або Email", "verificationCode": "Код підтвердження", "getCode": "Отримати код", @@ -91,8 +90,7 @@ const Map ukUA = { "tip": "Підказка", "pleaseEnterCompleteCode": "Будь ласка, введіть повний код підтвердження", "loginFailed": "Помилка входу, спробуйте ще раз", - 'pleaseAcceptPrivacyPolicy': - 'Будь ласка, спочатку прочитайте та погодьтеся з Політикою конфіденційності та Угодою користувача', + 'pleaseAcceptPrivacyPolicy': 'Будь ласка, спочатку прочитайте та погодьтеся з Політикою конфіденційності та Угодою користувача', "enterVerificationCode": "Введіть код підтвердження", "verificationCodeSentTo": "Код підтвердження надіслано на", "resendVerificationCode": "Надіслати код ще раз", @@ -100,13 +98,14 @@ const Map ukUA = { "usePasswordLogin": "Увійти за паролем", // 隐私政策弹窗 - "loginDeclaration": "Декларація Voitrans", - "welcomeToThisApp": - "Ласкаво просимо до Voitrans, будь ласка, уважно прочитайте", + "loginDeclaration": "Декларація Voitrans", // Voitrans 声明 + "welcomeToThisApp": "Ласкаво просимо до Voitrans, будь ласка, уважно прочитайте", // 欢迎使用Voitrans,请充分阅读 + // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 + // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": - ", натискання 'Погодитися та увійти' означає, що ви повністю прочитали та погодилися з вищезазначеними угодами. Натискання 'Не погоджуватися' призведе до виходу з програми.", - "disagree": "Не погоджуватися", - "agreeAndEnter": "Погодитися та увійти", + ", натискання 'Погодитися та увійти' означає, що ви повністю прочитали та погодилися з вищезазначеними угодами. Натискання 'Не погоджуватися' призведе до виходу з програми.", // ,点击"同意并进入"表示您已充分阅读并同意上述协议。点击"不同意"将退出应用。 + "disagree": "Не погоджуватися", // 不同意 + "agreeAndEnter": "Погодитися та увійти", // 同意并进入 // 首页 "deviceStatus": "Статус пристрою", @@ -116,29 +115,24 @@ const Map ukUA = { "signal": "Сигнал", "deviceId": "ID пристрою", "firmwareVersion": "Версія прошивки", - "disconnectedDevice": - "Пристрій не підключено, натисніть кнопку нижче, щоб підключити", + "disconnectedDevice": "Пристрій не підключено, натисніть кнопку нижче, щоб підключити", "connectDevice": "Підключити пристрій", "topAiExperiences": "Найкращі враження від AI", "aiAssistant": "Всемогутній помічник AI", - "aiAssistantInfo": - "Ексклюзивний консультант 24/7, відповідає на запитання, надає поради", + "aiAssistantInfo": "Ексклюзивний консультант 24/7, відповідає на запитання, надає поради", "interpretation": "Синхронний переклад", - "simultaneousInterpretationInfo": - "Переклад у реальному часі на 80+ мов, безтурботні подорожі за кордон", + "simultaneousInterpretationInfo": "Переклад у реальному часі на 80+ мов, безтурботні подорожі за кордон", "aiCompanion": "Сімейний компаньйон", "aiCompanionInfo": "Розуміє вас, тепла компанія", "homeSlogan": "З'єднуючи світ, перевершуючи звук", - "turnEarphones": - "Будь ласка, відкрийте зарядний кейс для навушників і вставте навушники у вуха", + "turnEarphones": "Будь ласка, відкрийте зарядний кейс для навушників і вставте навушники у вуха", "currentlyConnected": "Наразі підключено:", "unsystemSetup": "Перейти до налаштувань системи", "talkLater": "Пізніше", "initializing": "Ініціалізація...", "bluetoothInitializationFailure": "Помилка ініціалізації служби Bluetooth", "checkingPermissions": "Перевірка дозволів...", - "lackPermissions": - "Відсутні дозволи Bluetooth і необхідно дозволити доступ до місцезнаходження", + "lackPermissions": "Відсутні дозволи Bluetooth і необхідно дозволити доступ до місцезнаходження", "searchingDevice": "Пошук пристроїв...", "findConnectedDevice": "Знайдено підключений пристрій", "notFound": "Не знайдено підключеного пристрою Bluetooth", @@ -181,11 +175,198 @@ const Map ukUA = { "healthConsultant": "Багатофункціональний чат AI", "healthConsultantInfo": "Надає більше функцій чату AI", "conferenceAssistant": "Помічник для ділових зустрічей", - "conferenceAssistantInfo": - "Запис протоколів у реальному часі, багатомовний переклад", + "conferenceAssistantInfo": "Запис протоколів у реальному часі, багатомовний переклад", "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 +381,225 @@ 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 +611,8 @@ const Map ukUA = { "lastBackup": "Останнє резервне копіювання:", "privacySettings": "Налаштування конфіденційності", "privacySettingsInfo": "Керування збором даних та дозволами", - "permissionManagement": "Керування дозволами", - "permissionManagementInfo": "Керування налаштуваннями дозволів програми", + "permissionManagement": "Керування дозволами", // 权限管理 + "permissionManagementInfo": "Керування налаштуваннями дозволів програми", // 管理应用权限设置 "aboutApplication": "Про програму", "versions": "Версія", "checkUpdates": "Перевірити оновлення", @@ -228,11 +621,9 @@ const Map ukUA = { "voiceServiceInfo": "Вибір служби розпізнавання та синтезу мовлення", "selectVoiceService": "Вибрати голосову службу", "azureVoiceService": "Голосова служба Azure", - "azureVoiceServiceInfo": - "Хмарна голосова служба Microsoft, що підтримує високоякісний синтез та розпізнавання мовлення", + "azureVoiceServiceInfo": "Хмарна голосова служба Microsoft, що підтримує високоякісний синтез та розпізнавання мовлення", "flutterVoiceService": "Локальна голосова служба Flutter", - "flutterVoiceServiceInfo": - "Локальна голосова служба пристрою, яку можна використовувати без підключення до Інтернету", + "flutterVoiceServiceInfo": "Локальна голосова служба пристрою, яку можна використовувати без підключення до Інтернету", 'timbreService': 'Служба тембрів', 'timbreServiceInfo': 'Вибір служби синтезу мовлення з різними тембрами', 'defaultTimbre': 'Стандартний тембр', @@ -254,24 +645,30 @@ const Map ukUA = { 'networkErrorRetry': 'Помилка мережі, спробуйте ще раз пізніше', // 设备管理相关 - 'clearPairedDevices': 'Очистити список спарених пристроїв', - 'clearPairedDevicesConfirm': - 'Ви впевнені, що хочете очистити всі спарені пристрої?', - 'clearPairedDevicesSuccess': 'Список спарених пристроїв успішно очищено', - 'clearPairedDevicesFailed': 'Не вдалося очистити список спарених пристроїв', + // 'clearPairedDevices': '清除配对设备', + // 'clearPairedDevicesConfirm': '确定要清除所有配对设备吗?', + // 'clearPairedDevicesSuccess': '清除配对设备成功', + // 'clearPairedDevicesFailed': '清除配对设备失败', // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Голосовий чат у реальному часі", - "realtimeVoiceChatInfo": - "Спробуйте функцію інтелектуальної голосової взаємодії (попередній перегляд)", + "realtimeVoiceChatInfo": "Спробуйте функцію інтелектуальної голосової взаємодії (попередній перегляд)", "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 +697,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' @@ -310,20 +721,16 @@ const Map ukUA = { '• Керувати функціями навушників\n\n' 'Чим я можу вам допомогти?', 'microphonePermission': 'Мікрофон', - 'voiceRecognitionPermissionText': - 'Для розпізнавання мовлення потрібен доступ до мікрофона.', - 'voiceTranslationPermissionText': - 'Для розпізнавання та перекладу мовлення потрібен доступ до мікрофона.', - 'phoneCallPermissionText': - 'Для здійснення дзвінків потрібен доступ до мікрофона для голосових викликів.', - 'permissionDeniedText': - 'Ви назавжди відмовили в доступі до мікрофона, будь ласка, увімкніть дозвіл у налаштуваннях системи.', + 'voiceRecognitionPermissionText': 'Для розпізнавання мовлення потрібен доступ до мікрофона.', + 'voiceTranslationPermissionText': 'Для розпізнавання та перекладу мовлення потрібен доступ до мікрофона.', + 'phoneCallPermissionText': 'Для здійснення дзвінків потрібен доступ до мікрофона для голосових викликів.', + 'permissionDeniedText': 'Ви назавжди відмовили в доступі до мікрофона, будь ласка, увімкніть дозвіл у налаштуваннях системи.', 'startVoiceInput': 'Почати голосове введення', 'startPhoneCallMode': 'Почати режим дзвінка, почати голосове введення', // Agent 全屏编辑器 - 'fullScreenEditorHint': 'Введіть своє повідомлення тут...', - 'characterCount': '{count} символів', + 'fullScreenEditorHint': 'Введіть своє повідомлення тут...', // 全屏编辑器输入提示 + 'characterCount': '{count} символів', // 字符计数显示 // 消息长按操作 'copy': 'Копіювати', @@ -332,6 +739,7 @@ const Map ukUA = { 'submitSuccess': 'Надіслано успішно', 'submitFailed': 'Не вдалося надіслати', 'reportSubmitted': 'Скаргу надіслано, ми її розглянемо найближчим часом', + //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Шкідливий/Небезпечний', 'pornographicVulgar': 'Порнографічний/Вульгарний', 'misleadingAttack': 'Вводить в оману/Атака', @@ -339,8 +747,8 @@ const Map ukUA = { 'privacyRelated': "Пов'язано з конфіденційністю", 'copyrightViolation': "Порушення моїх авторських прав, репутації тощо", 'other': 'Інше', - 'reportDescriptionHint': - 'Ми хочемо знати причину вашої скарги, ви можете описати проблему, з якою зіткнулися.', + 'reportDescriptionHint': 'Ми хочемо знати причину вашої скарги, ви можете описати проблему, з якою зіткнулися.', + //'submit': '提交', //Message_bubble 'generatedByAi': 'Згенеровано AI', @@ -351,15 +759,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": "Велосипедом", @@ -370,24 +778,15 @@ const Map ukUA = { 'highest': 'Макс.', 'lowest': 'Мін.', 'futureForecast': 'Прогноз на майбутнє', - 'hotWeatherTip': - 'Сьогодні спекотно, будь ласка, уникайте перегріву та пийте більше води, щоб уникнути сонячного удару', - 'coldWeatherTip': - 'Сьогодні температура низька, будь ласка, тепло одягайтеся, виходячи на вулицю, щоб не застудитися', - 'rainyWeatherTip': - 'Сьогодні дощ, будь ласка, візьміть з собою парасольку та будьте обережні під час поїздок', - 'snowyWeatherTip': - 'Сьогодні сніг, дороги слизькі, будьте обережні та тепло одягайтеся', - 'foggyWeatherTip': - 'Сьогодні туман, видимість обмежена, будь ласка, надягайте маску, виходячи на вулицю', - 'windyWeatherTip': - 'Сьогодні сильний вітер, будь ласка, будьте обережні та закріпіть свої речі, виходячи на вулицю', - 'sunnyWeatherTip': - 'Сьогодні сонячно та сильне ультрафіолетове випромінювання, будь ласка, використовуйте сонцезахисний крем, виходячи на вулицю', - 'temperatureDifferenceTip': - 'Сьогодні велика різниця температур між днем і ніччю, будь ласка, одягайтеся відповідно', - 'comfortableWeatherTip': - 'Сьогодні приємна погода, чудовий час для активного відпочинку на свіжому повітрі', + 'hotWeatherTip': 'Сьогодні спекотно, будь ласка, уникайте перегріву та пийте більше води, щоб уникнути сонячного удару', + 'coldWeatherTip': 'Сьогодні температура низька, будь ласка, тепло одягайтеся, виходячи на вулицю, щоб не застудитися', + 'rainyWeatherTip': 'Сьогодні дощ, будь ласка, візьміть з собою парасольку та будьте обережні під час поїздок', + 'snowyWeatherTip': 'Сьогодні сніг, дороги слизькі, будьте обережні та тепло одягайтеся', + 'foggyWeatherTip': 'Сьогодні туман, видимість обмежена, будь ласка, надягайте маску, виходячи на вулицю', + 'windyWeatherTip': 'Сьогодні сильний вітер, будь ласка, будьте обережні та закріпіть свої речі, виходячи на вулицю', + 'sunnyWeatherTip': 'Сьогодні сонячно та сильне ультрафіолетове випромінювання, будь ласка, використовуйте сонцезахисний крем, виходячи на вулицю', + 'temperatureDifferenceTip': 'Сьогодні велика різниця температур між днем і ніччю, будь ласка, одягайтеся відповідно', + 'comfortableWeatherTip': 'Сьогодні приємна погода, чудовий час для активного відпочинку на свіжому повітрі', "monday": "Пн", "tuesday": "Вт", "wednesday": "Ср", @@ -395,6 +794,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": "Мінлива хмарність", @@ -428,29 +838,26 @@ const Map ukUA = { "logout": "Вийти", "logoutTips": "Ви впевнені, що хочете вийти з поточного облікового запису?", 'deleteAccount': 'Видалити обліковий запис', - 'deleteAccountTips': - 'Ви впевнені, що хочете назавжди видалити свій обліковий запис? Цю дію неможливо скасувати', + 'deleteAccountTips': 'Ви впевнені, що хочете назавжди видалити свій обліковий запис? Цю дію неможливо скасувати', + 'clean': 'Clear Cache', + 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 - 'networkConnectionFailed': - 'Помилка мережевого підключення, перевірте налаштування мережі та спробуйте ще раз', - 'serverTemporarilyUnavailable': - 'Сервер тимчасово недоступний, спробуйте ще раз пізніше', - 'loginExpiredPleaseRelogin': - 'Термін дії сесії закінчився, будь ласка, увійдіть знову', + 'networkConnectionFailed': 'Помилка мережевого підключення, перевірте налаштування мережі та спробуйте ще раз', + 'serverTemporarilyUnavailable': 'Сервер тимчасово недоступний, спробуйте ще раз пізніше', + 'loginExpiredPleaseRelogin': 'Термін дії сесії закінчився, будь ласка, увійдіть знову', 'noPermissionForThisOperation': 'Немає дозволу на виконання цієї операції', 'requestedResourceNotFound': 'Запитаний ресурс не знайдено', - 'imageProcessingFailedPleaseReselect': - 'Не вдалося обробити зображення, будь ласка, виберіть інше зображення', + 'imageProcessingFailedPleaseReselect': 'Не вдалося обробити зображення, будь ласка, виберіть інше зображення', 'operationFailedPleaseRetry': 'Операція не вдалася, спробуйте ще раз', 'serverReturnedError': 'Сервер повернув помилку', 'serverError': 'Помилка сервера', - 'networkConnectionFailedCheckSettings': - 'Помилка мережевого підключення, перевірте налаштування мережі', - 'serverInternalErrorRetryLater': - 'Внутрішня помилка сервера, спробуйте ще раз пізніше', + 'networkConnectionFailedCheckSettings': 'Помилка мережевого підключення, перевірте налаштування мережі', + 'serverInternalErrorRetryLater': 'Внутрішня помилка сервера, спробуйте ще раз пізніше', // Profile 用户交互 +//'error': '错误', +//'success': '成功', 'imageCompressionFailed': 'Не вдалося стиснути зображення', 'avatarUpdateFailed': 'Не вдалося оновити аватар', 'usernameCannotBeEmpty': "Ім'я користувача не може бути порожнім", @@ -460,39 +867,44 @@ const Map ukUA = { 'loggedOut': 'Ви вийшли з системи', 'logoutFailedRetry': 'Не вдалося вийти, спробуйте ще раз', 'accountPermanentlyDeleted': 'Обліковий запис було назавжди видалено', - 'deleteAccountFailedRetry': - 'Не вдалося видалити обліковий запис, спробуйте ще раз', + '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', - 'calendarWritePermissionDesc': - 'Використовується для створення подій та нагадувань у календарі', - 'calendarFullAccessPermissionDesc': - 'Використовується для читання та керування подіями та нагадуваннями у календарі', - 'locationPermissionDesc': - 'Використовується для отримання інформації про поточне місцезнаходження', + 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': 'Використовується для створення подій та нагадувань у календарі', + 'calendarFullAccessPermissionDesc': 'Використовується для читання та керування подіями та нагадуваннями у календарі', + 'locationPermissionDesc': 'Використовується для отримання інформації про поточне місцезнаходження', 'appFunctionNeeds': 'Функції програми потребують', 'authorized': 'Дозволено', 'unauthorized': 'Не дозволено', @@ -501,32 +913,65 @@ const Map ukUA = { 'unknownStatus': 'Невідомий статус', 'permissionGranted': 'Дозвіл надано', 'permissionRequestError': 'Помилка під час запиту дозволу', - 'phonePermissionDetailDesc': - 'Для функції дзвінків потрібен дозвіл на доступ до телефону', - 'smsPermissionDetailDesc': - 'Для функції надсилання SMS потрібен дозвіл на доступ до SMS', - 'calendarWritePermissionDetailDesc': - 'Для створення подій у календарі потрібен дозвіл на запис до календаря', - 'calendarFullAccessPermissionDetailDesc': - 'Для керування подіями у календарі потрібен повний доступ до календаря', - 'locationPermissionDetailDesc': - 'Для отримання інформації про місцезнаходження потрібен дозвіл на доступ до місцезнаходження', - 'appNeedsPermissionForFullFunction': - 'Програмі потрібен цей дозвіл для надання повної функціональності', - 'permanentDenialText': - 'Ви назавжди відмовили в доступі до {permission}, будь ласка, перейдіть до налаштувань програми, щоб увімкнути його', + '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': 'Не вдалося оновити', - 'cannotOpenAppStore': - 'Не вдається відкрити App Store, будь ласка, перейдіть до App Store вручну, щоб оновити', - 'updateErrorRetry': - 'Сталася помилка під час оновлення, спробуйте ще раз пізніше', + 'newVersionFound': 'Знайдено нову версію', // 版本更新对话框标题 + 'remindLater': 'Нагадати пізніше', // 稍后提醒按钮 + 'updateNow': 'Оновити зараз', // 立即更新按钮 + 'checkUpdate': 'Перевірити оновлення', // 检查更新按钮 + 'updateFailed': 'Не вдалося оновити', // 更新失败提示 + 'cannotOpenAppStore': 'Не вдається відкрити App Store, будь ласка, перейдіть до App Store вручну, щоб оновити', // 无法打开应用商店提示 + 'updateErrorRetry': 'Сталася помилка під час оновлення, спробуйте ще раз пізніше', // 更新错误重试提示 //国家列表 "邮箱": "Email", @@ -635,8 +1080,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,18 +1105,76 @@ 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": - "Ви впевнені, що хочете очистити всю історію перекладів? Цю дію неможливо скасувати.", + "clearHistoryConfirm": "Ви впевнені, що хочете очистити всю історію перекладів? Цю дію неможливо скасувати.", "unknownLanguage": "Невідома мова", "deleteSessionRecord": "Видалити запис сесії", - "deleteSessionConfirm": - "Ви впевнені, що хочете видалити всі записи перекладів цієї сесії? Цю дію неможливо скасувати.", + "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": "Обчислення...", @@ -671,8 +1189,7 @@ const Map ukUA = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Оригінальний запис", "recordSummary": "Підсумок запису", - "clickToGenerateSummary": - "Натисніть кнопку нижче, щоб згенерувати підсумок сесії", + "clickToGenerateSummary": "Натисніть кнопку нижче, щоб згенерувати підсумок сесії", "summaryContent": "Зміст підсумку", "copied": "Скопійовано", "summaryCopiledToClipboard": "Підсумок скопійовано до буфера обміну", @@ -680,11 +1197,9 @@ const Map ukUA = { "summaryGenerated": "Підсумок згенеровано", "generating": "Генерація...", "regenerate": "Згенерувати знову", - "summaryTimeoutMessage": - "Час очікування запиту на генерацію підсумку минув, можливо, через проблеми з мережею або завантаженість сервера.", + "summaryTimeoutMessage": "Час очікування запиту на генерацію підсумку минув, можливо, через проблеми з мережею або завантаженість сервера.", "deleteTranslationRecord": "Видалити запис перекладу", - "deleteTranslationConfirm": - "Ви впевнені, що хочете видалити цей запис перекладу? Цю дію неможливо скасувати.", + "deleteTranslationConfirm": "Ви впевнені, що хочете видалити цей запис перекладу? Цю дію неможливо скасувати.", "originalText": "Оригінальний текст", "translatedText": "Перекладений текст", "sessionSummary": "Підсумок сесії", @@ -702,7 +1217,7 @@ const Map ukUA = { "autoInputCode": "Автоматичне введення коду", "skipBinding": "Пропустити прив'язку", "rescan": "Повторне сканування", - "skip": "Пропустити", + "verifyingDevice": "Перевірка пристрою...", "confirmBinding": "Підтвердити прив'язку", "associatingDevice": "Асоціація пристрою...", @@ -712,37 +1227,34 @@ const Map ukUA = { // 配对状态文本 "readyToPair": "Готово до спарювання", "preparingPairingEnvironment": "Підготовка середовища для спарювання...", - "connectDeepSoundViaSystemBluetooth": - "Будь ласка, спочатку підключіться до пристрою Voitrans через системний Bluetooth", + "connectDeepSoundViaSystemBluetooth": "Будь ласка, спочатку підключіться до пристрою Voitrans через системний Bluetooth", "deviceBindingConfirm": "Підтвердження прив'язки пристрою...", "establishingDeviceAssociation": "Встановлення асоціації пристрою...", "waitingCompletePairing": "Будь ласка, зачекайте, завершується спарювання...", - "pairingSuccessRedirecting": - "Спарювання успішне! Перенаправлення на головну сторінку...", + "pairingSuccessRedirecting": "Спарювання успішне! Перенаправлення на головну сторінку...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Переконайтеся, що ви підключені до пристрою Voitrans", - "deviceAlreadyBoundToOtherAccount": - "Цей пристрій вже прив'язаний до іншого облікового запису", + "ensureConnectedDeepSoundDevice": "Переконайтеся, що ви підключені до пристрою Voitrans", + "deviceAlreadyBoundToOtherAccount": "Цей пристрій вже прив'язаний до іншого облікового запису", "deviceAssociationFailed": "Не вдалося асоціювати пристрій, спробуйте ще раз", - "scanTimeoutEnsureDeviceNearby": - "Час сканування минув, переконайтеся, що пристрій знаходиться поруч", + "scanTimeoutEnsureDeviceNearby": "Час сканування минув, переконайтеся, що пристрій знаходиться поруч", "networkError": "Помилка мережі", - "authorizationFailedCheckCode": - "Помилка авторизації, перевірте правильність коду авторизації", + "authorizationFailedCheckCode": "Помилка авторизації, перевірте правильність коду авторизації", "pairingFailedRetry": "Не вдалося спарити, спробуйте ще раз", // 配对控制器相关 + //'connectDevice': '连接设备', 'pleaseEnableBluetooth': 'Будь ласка, увімкніть Bluetooth', 'deviceDisconnected': 'Пристрій відключено', 'readyToStartPairing': 'Готово до початку спарювання', 'checkingEnvironment': 'Перевірка середовища...', - 'ensureHeadsetOnAndPairingMode': - 'Переконайтеся, що навушники увімкнені та знаходяться в режимі спарювання', + 'ensureHeadsetOnAndPairingMode': 'Переконайтеся, що навушники увімкнені та знаходяться в режимі спарювання', + //'goToBluetoothSettings': '前往蓝牙设置', + //'verifyingDevice': '正在验证设备...', + //'confirmBinding': '确认绑定', + //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Встановлення безпечного з\'єднання...', - 'needManualBindingAuthCode': - 'Потрібен код авторизації для ручної прив\'язки...', + 'needManualBindingAuthCode': 'Потрібен код авторизації для ручної прив\'язки...', 'pairingSuccessful': 'Спарювання успішне!', 'enableBluetooth': 'Увімкнути Bluetooth', 'grantPermissions': 'Надати дозволи', @@ -754,32 +1266,35 @@ const Map ukUA = { 'verificationFailedRetry': 'Перевірка не вдалася, спробуйте ще раз', 'invalidDeviceAddress': 'Недійсна адреса пристрою', 'bleDeviceAssociationFailed': 'Не вдалося асоціювати пристрій BLE', - 'deviceAssociationFailedRetry': - 'Не вдалося асоціювати пристрій, спробуйте ще раз', - 'bleConnectionTimeoutRetry': - 'Час очікування підключення BLE минув, спробуйте ще раз', + 'deviceAssociationFailedRetry': 'Не вдалося асоціювати пристрій, спробуйте ще раз', + 'bleConnectionTimeoutRetry': 'Час очікування підключення BLE минув, спробуйте ще раз', 'blePairingStartupFailed': 'Не вдалося розпочати спарювання BLE', 'bleConnectionFailed': 'Не вдалося підключитися через BLE', - 'deviceAuthorizationFailedCheckCode': - 'Помилка авторизації пристрою, перевірте код авторизації', + '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': 'Надати відгук або пропозицію', - 'feedbackDescription': - 'Будь ласка, опишіть проблему, з якою ви зіткнулися, або вашу пропозицію', + 'feedbackDescription': 'Будь ласка, опишіть проблему, з якою ви зіткнулися, або вашу пропозицію', 'feedbackHint': 'Будь ласка, введіть ваш відгук...', 'feedbackRequired': 'Будь ласка, введіть зміст відгуку', 'contactInfo': 'Контактна інформація', 'contactHint': 'Email/Телефон, щоб ми могли з вами зв\'язатися', 'submit': 'Надіслати', 'feedbackSubmitSuccess': 'Відгук успішно надіслано, дякуємо за ваш відгук!', - 'feedbackSubmitFailed': - 'Не вдалося надіслати відгук, спробуйте ще раз пізніше', + 'feedbackSubmitFailed': 'Не вдалося надіслати відгук, спробуйте ще раз пізніше', // OTA升级模块 - "upgradeExitConfirm": - "Наразі триває оновлення, вихід перерве процес оновлення, ви впевнені, що хочете вийти?", + "upgradeExitConfirm": "Наразі триває оновлення, вихід перерве процес оновлення, ви впевнені, що хочете вийти?", "deviceModel": "Модель пристрою", "unknownDevice": "Невідомий пристрій", "currentFirmwareVersion": "Поточна версія прошивки", @@ -791,20 +1306,22 @@ const Map ukUA = { "connectionFailed": "Помилка підключення", "retryConnection": "Повторити підключення", "ota_updateNow": "Оновити зараз", - "keepConnectedDontClose": - "Будь ласка, тримайте пристрій підключеним, не закривайте програму", + "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": "Зарядка", "updateContent": "Зміст оновлення", - "removeEarbudsEnsureBattery": - "Вийміть обидва навушники та переконайтеся, що заряд батареї в обох перевищує 20%", + "removeEarbudsEnsureBattery": "Вийміть обидва навушники та переконайтеся, що заряд батареї в обох перевищує 20%", // 音乐列表页面 - "noMusic": "Немає музики", - "noPlayingMusic": "Немає відтворюваної музики", - "unknownSong": "Невідома пісня", - "unknownArtist": "Невідомий виконавець", - "playAll": "Відтворити все", + "noMusic": "Немає музики", // 暂无音乐 + "noPlayingMusic": "Немає відтворюваної музики", // 暂无播放音乐 + "unknownSong": "Невідома пісня", // 未知歌曲 + "unknownArtist": "Невідомий виконавець", // 未知歌手 + "playAll": "Відтворити все", // 播放全部 // 语言名称 "中文(简体)": "Китайська (спрощена)", @@ -846,4 +1363,21 @@ 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..80bf7a966 100644 --- a/lib/core/translations/language/vi_vn.dart +++ b/lib/core/translations/language/vi_vn.dart @@ -90,8 +90,7 @@ const Map viVN = { "tip": "Gợi ý", "pleaseEnterCompleteCode": "Vui lòng nhập đầy đủ mã xác minh", "loginFailed": "Đăng nhập thất bại, vui lòng thử lại", - 'pleaseAcceptPrivacyPolicy': - 'Vui lòng đọc và đồng ý với Chính sách bảo mật và Thỏa thuận người dùng trước', + 'pleaseAcceptPrivacyPolicy': 'Vui lòng đọc và đồng ý với Chính sách bảo mật và Thỏa thuận người dùng trước', "enterVerificationCode": "Nhập mã xác minh", "verificationCodeSentTo": "Mã xác minh đã được gửi đến", "resendVerificationCode": "Gửi lại mã xác minh", @@ -99,12 +98,14 @@ 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ị", @@ -118,11 +119,9 @@ const Map viVN = { "connectDevice": "Kết nối thiết bị", "topAiExperiences": "Trải nghiệm AI hàng đầu", "aiAssistant": "Trợ lý toàn năng AI", - "aiAssistantInfo": - "Tư vấn viên độc quyền 24/7, trả lời câu hỏi, cung cấp đề xuất", + "aiAssistantInfo": "Tư vấn viên độc quyền 24/7, trả lời câu hỏi, cung cấp đề xuất", "interpretation": "Phiên dịch đồng thời", - "simultaneousInterpretationInfo": - "Dịch thời gian thực hơn 80 ngôn ngữ, du lịch nước ngoài không lo", + "simultaneousInterpretationInfo": "Dịch thời gian thực hơn 80 ngôn ngữ, du lịch nước ngoài không lo", "aiCompanion": "Bạn đồng hành gia đình", "aiCompanionInfo": "Thấu hiểu bạn, đồng hành ấm áp", "homeSlogan": "Kết nối thế giới, vượt trên cả âm thanh", @@ -133,8 +132,7 @@ const Map viVN = { "initializing": "Đang khởi tạo...", "bluetoothInitializationFailure": "Khởi tạo dịch vụ Bluetooth thất bại", "checkingPermissions": "Đang kiểm tra quyền...", - "lackPermissions": - "Thiếu quyền Bluetooth và cần phải cấp quyền truy cập vị trí", + "lackPermissions": "Thiếu quyền Bluetooth và cần phải cấp quyền truy cập vị trí", "searchingDevice": "Đang tìm kiếm thiết bị...", "findConnectedDevice": "Đã tìm thấy thiết bị đã kết nối", "notFound": "Không tìm thấy thiết bị Bluetooth đã kết nối", @@ -177,11 +175,198 @@ const Map viVN = { "healthConsultant": "Trò chuyện AI đa chức năng", "healthConsultantInfo": "Cung cấp thêm chức năng trò chuyện AI", "conferenceAssistant": "Trợ lý hội nghị kinh doanh", - "conferenceAssistantInfo": - "Ghi lại biên bản họp thời gian thực, dịch đa ngôn ngữ", + "conferenceAssistantInfo": "Ghi lại biên bản họp thời gian thực, dịch đa ngôn ngữ", "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 +381,225 @@ 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 +611,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", @@ -224,11 +621,9 @@ const Map viVN = { "voiceServiceInfo": "Chọn dịch vụ nhận dạng và tổng hợp giọng nói", "selectVoiceService": "Chọn dịch vụ giọng nói", "azureVoiceService": "Dịch vụ giọng nói Azure", - "azureVoiceServiceInfo": - "Dịch vụ giọng nói đám mây của Microsoft, hỗ trợ tổng hợp và nhận dạng giọng nói chất lượng cao", + "azureVoiceServiceInfo": "Dịch vụ giọng nói đám mây của Microsoft, hỗ trợ tổng hợp và nhận dạng giọng nói chất lượng cao", "flutterVoiceService": "Dịch vụ giọng nói cục bộ Flutter", - "flutterVoiceServiceInfo": - "Dịch vụ giọng nói cục bộ trên thiết bị, có thể sử dụng mà không cần kết nối mạng", + "flutterVoiceServiceInfo": "Dịch vụ giọng nói cục bộ trên thiết bị, có thể sử dụng mà không cần kết nối mạng", 'timbreService': 'Dịch vụ âm sắc', 'timbreServiceInfo': 'Chọn dịch vụ tổng hợp giọng nói âm sắc', 'defaultTimbre': 'Âm sắc mặc định', @@ -250,24 +645,30 @@ 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", - "realtimeVoiceChatInfo": - "Trải nghiệm chức năng tương tác giọng nói thông minh (xem trước chức năng)", + "realtimeVoiceChatInfo": "Trải nghiệm chức năng tương tác giọng nói thông minh (xem trước chức năng)", "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 +697,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' @@ -306,21 +721,16 @@ const Map viVN = { '• Điều khiển chức năng tai nghe\n\n' 'Tôi có thể giúp gì cho bạn?', 'microphonePermission': 'Microphone', - 'voiceRecognitionPermissionText': - 'Chức năng nhận dạng giọng nói cần truy cập microphone.', - 'voiceTranslationPermissionText': - 'Chức năng nhận dạng và dịch giọng nói cần truy cập microphone.', - 'phoneCallPermissionText': - 'Chức năng gọi điện cần truy cập microphone để thực hiện cuộc gọi thoại.', - 'permissionDeniedText': - 'Bạn đã từ chối vĩnh viễn quyền truy cập microphone, vui lòng vào cài đặt hệ thống để cấp quyền.', + 'voiceRecognitionPermissionText': 'Chức năng nhận dạng giọng nói cần truy cập microphone.', + 'voiceTranslationPermissionText': 'Chức năng nhận dạng và dịch giọng nói cần truy cập microphone.', + 'phoneCallPermissionText': 'Chức năng gọi điện cần truy cập microphone để thực hiện cuộc gọi thoại.', + 'permissionDeniedText': 'Bạn đã từ chối vĩnh viễn quyền truy cập microphone, vui lòng vào cài đặt hệ thống để cấp quyền.', 'startVoiceInput': 'Bắt đầu nhập liệu bằng giọng nói', - 'startPhoneCallMode': - 'Bắt đầu chế độ gọi điện, bắt đầu nhập liệu bằng giọng nói', + 'startPhoneCallMode': '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 +739,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', @@ -336,8 +747,8 @@ const Map viVN = { 'privacyRelated': 'Liên quan đến quyền riêng tư', 'copyrightViolation': 'Vi phạm bản quyền, danh dự của tôi, v.v.', '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.', + '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 +759,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", @@ -367,23 +778,15 @@ const Map viVN = { 'highest': 'Cao nhất', 'lowest': 'Thấp nhất', 'futureForecast': 'Dự báo tương lai', - 'hotWeatherTip': - 'Hôm nay trời nóng, chú ý chống nóng, uống nhiều nước để tránh say nắng', - 'coldWeatherTip': - 'Hôm nay nhiệt độ thấp, ra ngoài chú ý giữ ấm, cẩn thận cảm lạnh', - 'rainyWeatherTip': - 'Hôm nay có mưa, ra ngoài nhớ mang theo ô, chú ý an toàn khi đi lại', - 'snowyWeatherTip': - 'Hôm nay có tuyết, đường trơn trượt chú ý an toàn, giữ ấm cơ thể', - 'foggyWeatherTip': - 'Hôm nay có sương mù, tầm nhìn thấp, ra ngoài nhớ đeo khẩu trang', - 'windyWeatherTip': - 'Hôm nay gió lớn, ra ngoài chú ý an toàn, buộc chặt đồ đạc', + 'hotWeatherTip': 'Hôm nay trời nóng, chú ý chống nóng, uống nhiều nước để tránh say nắng', + 'coldWeatherTip': 'Hôm nay nhiệt độ thấp, ra ngoài chú ý giữ ấm, cẩn thận cảm lạnh', + 'rainyWeatherTip': 'Hôm nay có mưa, ra ngoài nhớ mang theo ô, chú ý an toàn khi đi lại', + 'snowyWeatherTip': 'Hôm nay có tuyết, đường trơn trượt chú ý an toàn, giữ ấm cơ thể', + 'foggyWeatherTip': 'Hôm nay có sương mù, tầm nhìn thấp, ra ngoài nhớ đeo khẩu trang', + 'windyWeatherTip': 'Hôm nay gió lớn, ra ngoài chú ý an toàn, buộc chặt đồ đạc', 'sunnyWeatherTip': 'Hôm nay nắng đẹp, tia UV mạnh, ra ngoài nhớ chống nắng', - 'temperatureDifferenceTip': - 'Hôm nay chênh lệch nhiệt độ ngày đêm lớn, chú ý thêm bớt quần áo cho phù hợp', - 'comfortableWeatherTip': - 'Hôm nay thời tiết dễ chịu, là thời điểm tốt để hoạt động ngoài trời', + 'temperatureDifferenceTip': 'Hôm nay chênh lệch nhiệt độ ngày đêm lớn, chú ý thêm bớt quần áo cho phù hợp', + 'comfortableWeatherTip': 'Hôm nay thời tiết dễ chịu, là thời điểm tốt để hoạt động ngoài trời', "monday": "Thứ 2", "tuesday": "Thứ 3", "wednesday": "Thứ 4", @@ -391,6 +794,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", @@ -422,30 +836,28 @@ const Map viVN = { "notSet": "Chưa đặt", "accountSetting": "Cài đặt tài khoản", "logout": "Đăng xuất", - "logoutTips": - "Bạn có chắc chắn muốn đăng xuất khỏi tài khoản hiện tại không?", + "logoutTips": "Bạn có chắc chắn muốn đăng xuất khỏi tài khoản hiện tại không?", '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', + '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': - 'Kết nối mạng thất bại, vui lòng kiểm tra cài đặt mạng và thử lại', - 'serverTemporarilyUnavailable': - 'Máy chủ tạm thời không khả dụng, vui lòng thử lại sau', + 'networkConnectionFailed': 'Kết nối mạng thất bại, vui lòng kiểm tra cài đặt mạng và thử lại', + 'serverTemporarilyUnavailable': 'Máy chủ tạm thời không khả dụng, vui lòng thử lại sau', 'loginExpiredPleaseRelogin': 'Đăng nhập đã hết hạn, vui lòng đăng nhập lại', 'noPermissionForThisOperation': 'Không có quyền thực hiện thao tác này', 'requestedResourceNotFound': 'Không tìm thấy tài nguyên được yêu cầu', - 'imageProcessingFailedPleaseReselect': - 'Xử lý hình ảnh thất bại, vui lòng chọn lại hình ảnh', + 'imageProcessingFailedPleaseReselect': 'Xử lý hình ảnh thất bại, vui lòng chọn lại hình ảnh', 'operationFailedPleaseRetry': 'Thao tác thất bại, vui lòng thử lại', 'serverReturnedError': 'Máy chủ trả về lỗi', 'serverError': 'Lỗi máy chủ', - 'networkConnectionFailedCheckSettings': - 'Kết nối mạng thất bại, vui lòng kiểm tra cài đặt mạng', + 'networkConnectionFailedCheckSettings': 'Kết nối mạng thất bại, vui lòng kiểm tra cài đặt mạng', '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,31 +870,40 @@ 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', + 'calendarFullAccessPermissionDesc': 'Dùng để đọc và quản lý các sự kiện và lời nhắc trên lịch', 'locationPermissionDesc': 'Dùng để lấy thông tin vị trí hiện tại', 'appFunctionNeeds': 'Chức năng ứng dụng cần', 'authorized': 'Đã cấp quyền', @@ -492,31 +913,65 @@ const Map viVN = { 'unknownStatus': 'Trạng thái không xác định', 'permissionGranted': 'Quyền đã được cấp', 'permissionRequestError': 'Lỗi khi yêu cầu quyền', - 'phonePermissionDetailDesc': - 'Chức năng gọi điện cần quyền truy cập điện thoại', + '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', - '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í', - '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', + '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', - 'cannotOpenAppStore': - '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', + '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', // 无法打开应用商店提示 + 'updateErrorRetry': 'Đã xảy ra lỗi trong quá trình cập nhật, vui lòng thử lại sau', // 更新错误重试提示 //国家列表 "邮箱": "Email", @@ -625,8 +1080,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,18 +1105,76 @@ 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.", + "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.", "unknownLanguage": "Ngôn ngữ không xác định", "deleteSessionRecord": "Xóa bản ghi phiên", - "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.", + "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...", @@ -669,11 +1197,9 @@ const Map viVN = { "summaryGenerated": "Đã tạo tóm tắt", "generating": "Đang tạo...", "regenerate": "Tạo lại", - "summaryTimeoutMessage": - "Yêu cầu tạo tóm tắt đã hết thời gian, có thể do sự cố mạng hoặc máy chủ bận.", + "summaryTimeoutMessage": "Yêu cầu tạo tóm tắt đã hết thời gian, có thể do sự cố mạng hoặc máy chủ bận.", "deleteTranslationRecord": "Xóa bản ghi dịch", - "deleteTranslationConfirm": - "Bạn có chắc muốn xóa bản ghi dịch này không? Thao tác này không thể hoàn tác.", + "deleteTranslationConfirm": "Bạn có chắc muốn xóa bản ghi dịch này không? Thao tác này không thể hoàn tác.", "originalText": "Văn bản gốc", "translatedText": "Văn bản dịch", "sessionSummary": "Tóm tắt phiên", @@ -691,7 +1217,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ị...", @@ -701,34 +1227,32 @@ const Map viVN = { // 配对状态文本 "readyToPair": "Sẵn sàng để ghép nối", "preparingPairingEnvironment": "Đang chuẩn bị môi trường ghép nối...", - "connectDeepSoundViaSystemBluetooth": - "Vui lòng kết nối với thiết bị Voitrans qua Bluetooth hệ thống trước", + "connectDeepSoundViaSystemBluetooth": "Vui lòng kết nối với thiết bị Voitrans qua Bluetooth hệ thống trước", "deviceBindingConfirm": "Xác nhận liên kết thiết bị...", "establishingDeviceAssociation": "Đang thiết lập liên kết thiết bị...", "waitingCompletePairing": "Vui lòng đợi, đang hoàn tất ghép nối...", - "pairingSuccessRedirecting": - "Ghép nối thành công! Sắp chuyển hướng đến trang chủ...", + "pairingSuccessRedirecting": "Ghép nối thành công! Sắp chuyển hướng đến trang chủ...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": - "Vui lòng đảm bảo bạn đang kết nối với thiết bị Voitrans", - "deviceAlreadyBoundToOtherAccount": - "Thiết bị này đã được liên kết với tài khoản khác", + "ensureConnectedDeepSoundDevice": "Vui lòng đảm bảo bạn đang kết nối với thiết bị Voitrans", + "deviceAlreadyBoundToOtherAccount": "Thiết bị này đã được liên kết với tài khoản khác", "deviceAssociationFailed": "Liên kết thiết bị thất bại, vui lòng thử lại", - "scanTimeoutEnsureDeviceNearby": - "Quét hết thời gian, vui lòng đảm bảo thiết bị ở gần", + "scanTimeoutEnsureDeviceNearby": "Quét hết thời gian, vui lòng đảm bảo thiết bị ở gần", "networkError": "Lỗi mạng", - "authorizationFailedCheckCode": - "Ủy quyền thất bại, vui lòng kiểm tra xem mã ủy quyền có đúng không", + "authorizationFailedCheckCode": "Ủy quyền thất bại, vui lòng kiểm tra xem mã ủy quyền có đúng không", "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', + '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!', @@ -742,13 +1266,20 @@ const Map viVN = { 'verificationFailedRetry': 'Xác minh thất bại, vui lòng thử lại', 'invalidDeviceAddress': 'Địa chỉ thiết bị không hợp lệ', 'bleDeviceAssociationFailed': 'Liên kết thiết bị BLE thất bại', - 'deviceAssociationFailedRetry': - 'Liên kết thiết bị thất bại, vui lòng thử lại', + 'deviceAssociationFailedRetry': 'Liên kết thiết bị thất bại, vui lòng thử lại', 'bleConnectionTimeoutRetry': 'Kết nối BLE hết thời gian, vui lòng thử lại', 'blePairingStartupFailed': 'Khởi động ghép nối BLE thất bại', 'bleConnectionFailed': 'Kết nối BLE thất bại', - 'deviceAuthorizationFailedCheckCode': - 'Ủy quyền thiết bị thất bại, vui lòng kiểm tra mã ủy quyền', + '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", @@ -763,8 +1294,7 @@ const Map viVN = { 'feedbackSubmitFailed': 'Gửi phản hồi thất bại, vui lòng thử lại sau', // OTA升级模块 - "upgradeExitConfirm": - "Đang nâng cấp, thoát sẽ làm gián đoạn quá trình nâng cấp, bạn có chắc chắn muốn thoát không?", + "upgradeExitConfirm": "Đang nâng cấp, thoát sẽ làm gián đoạn quá trình nâng cấp, bạn có chắc chắn muốn thoát không?", "deviceModel": "Kiểu máy", "unknownDevice": "Thiết bị không xác định", "currentFirmwareVersion": "Phiên bản firmware hiện tại", @@ -776,20 +1306,22 @@ 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", - "keepConnectedDontClose": - "Vui lòng giữ thiết bị kết nối, không đóng ứng dụng", + "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", "charging": "Đang sạc", "updateContent": "Nội dung cập nhật", - "removeEarbudsEnsureBattery": - "Lấy cả hai tai nghe ra và đảm bảo pin của cả hai đều trên 20%", + "removeEarbudsEnsureBattery": "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 +1363,21 @@ 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.', }; From 92099cdfbea8e0b3b34173cdcb410065d57be7b1 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Sun, 4 Jan 2026 16:58:07 +0800 Subject: [PATCH 03/27] =?UTF-8?q?feat(i18n):=20=E6=B7=BB=E5=8A=A0=E7=B9=81?= =?UTF-8?q?=E4=BD=93=E4=B8=AD=E6=96=87(=E5=8F=B0=E6=B9=BE)=E8=AF=AD?= =?UTF-8?q?=E8=A8=80=E6=94=AF=E6=8C=81=E5=B9=B6=E4=BC=98=E5=8C=96=E8=AF=AD?= =?UTF-8?q?=E8=A8=80=E9=80=89=E6=8B=A9=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加繁体中文(香港)语言选项到所有语言文件 分离繁体中文(香港)和台湾繁体中文的语言映射 优化系统语言检测逻辑,优先根据地区代码判断 更新设置控制器以支持新的语言选项 修复繁体中文(香港)翻译文件中的术语一致性 --- lib/core/translations/app_translations.dart | 59 +- lib/core/translations/language/ar_sa.dart | 1 + lib/core/translations/language/bg_bg.dart | 1 + lib/core/translations/language/cs_cz.dart | 1 + lib/core/translations/language/da_dk.dart | 1 + lib/core/translations/language/de_de.dart | 1 + lib/core/translations/language/el_gr.dart | 1 + lib/core/translations/language/en_us.dart | 1 + lib/core/translations/language/es_es.dart | 439 ++++-- lib/core/translations/language/et_ee.dart | 367 +++-- lib/core/translations/language/fa_ir.dart | 397 +++-- lib/core/translations/language/fi_fi.dart | 415 +++-- lib/core/translations/language/fr_fr.dart | 460 ++++-- lib/core/translations/language/hi_in.dart | 421 +++-- lib/core/translations/language/hr_hr.dart | 436 ++++-- lib/core/translations/language/hu_hu.dart | 442 ++++-- lib/core/translations/language/id_id.dart | 403 +++-- lib/core/translations/language/is_is.dart | 412 +++-- lib/core/translations/language/it_it.dart | 472 ++++-- lib/core/translations/language/ja_jp.dart | 220 ++- lib/core/translations/language/ko_kr.dart | 205 ++- lib/core/translations/language/lt_lt.dart | 439 ++++-- lib/core/translations/language/lv_lv.dart | 442 ++++-- lib/core/translations/language/ms_my.dart | 409 +++-- lib/core/translations/language/nb_no.dart | 403 +++-- lib/core/translations/language/nl_nl.dart | 439 ++++-- lib/core/translations/language/pl_pl.dart | 463 ++++-- lib/core/translations/language/pt_pt.dart | 463 ++++-- lib/core/translations/language/ro_ro.dart | 451 ++++-- lib/core/translations/language/ru_ru.dart | 445 ++++-- lib/core/translations/language/sk_sk.dart | 421 +++-- lib/core/translations/language/sl_si.dart | 436 ++++-- lib/core/translations/language/sr_rs.dart | 424 +++-- lib/core/translations/language/sv_se.dart | 412 +++-- lib/core/translations/language/th_th.dart | 364 +++-- lib/core/translations/language/tl_ph.dart | 466 ++++-- lib/core/translations/language/tr_tr.dart | 412 +++-- lib/core/translations/language/uk_ua.dart | 433 ++++-- lib/core/translations/language/vi_vn.dart | 385 +++-- lib/core/translations/language/zh_cn.dart | 1 + lib/core/translations/language/zh_hk.dart | 9 +- lib/core/translations/language/zh_tw.dart | 1385 +++++++++++++++++ .../controllers/settings_controller.dart | 4 +- 43 files changed, 9975 insertions(+), 4286 deletions(-) create mode 100644 lib/core/translations/language/zh_tw.dart 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 2e3467118..e0042d85f 100644 --- a/lib/core/translations/language/ar_sa.dart +++ b/lib/core/translations/language/ar_sa.dart @@ -33,6 +33,7 @@ const Map arSA = { "spanish": "الإسبانية", "portuguese": "البرتغالية", "traditionalChinese": "الصينية التقليدية", + "traditionalChineseHK": "الصينية التقليدية (هونغ كونغ)", "japanese": "اليابانية", "korean": "الكورية", "french": "الفرنسية", diff --git a/lib/core/translations/language/bg_bg.dart b/lib/core/translations/language/bg_bg.dart index 63445b48a..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": "Френски", diff --git a/lib/core/translations/language/cs_cz.dart b/lib/core/translations/language/cs_cz.dart index b3a9a5227..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", diff --git a/lib/core/translations/language/da_dk.dart b/lib/core/translations/language/da_dk.dart index cf5f4e32c..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", diff --git a/lib/core/translations/language/de_de.dart b/lib/core/translations/language/de_de.dart index 7c87543ef..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", diff --git a/lib/core/translations/language/el_gr.dart b/lib/core/translations/language/el_gr.dart index 2e8f7e507..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": "Γαλλικά", diff --git a/lib/core/translations/language/en_us.dart b/lib/core/translations/language/en_us.dart index 38f23a45f..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", diff --git a/lib/core/translations/language/es_es.dart b/lib/core/translations/language/es_es.dart index 0b502f683..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", @@ -90,7 +91,8 @@ const Map esES = { "tip": "Consejo", "pleaseEnterCompleteCode": "Ingresa el código de verificación completo", "loginFailed": "Inicio de sesión fallido, inténtalo de nuevo", - 'pleaseAcceptPrivacyPolicy': 'Lee y acepta primero la política de privacidad y el acuerdo de usuario', + 'pleaseAcceptPrivacyPolicy': + 'Lee y acepta primero la política de privacidad y el acuerdo de usuario', "enterVerificationCode": "Ingresa código de verificación", "verificationCodeSentTo": "Código de verificación enviado a", "resendVerificationCode": "Reenviar código de verificación", @@ -99,7 +101,8 @@ const Map esES = { // 隐私政策弹窗 "loginDeclaration": "Declaración de Voitrans", // Voitrans 声明 - "welcomeToThisApp": "Bienvenido a Voitrans, lee cuidadosamente", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Bienvenido a Voitrans, lee cuidadosamente", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +118,29 @@ const Map esES = { "signal": "Señal", "deviceId": "ID del dispositivo", "firmwareVersion": "Versión del firmware", - "disconnectedDevice": "Ningún dispositivo conectado, haz clic en el botón de abajo", + "disconnectedDevice": + "Ningún dispositivo conectado, haz clic en el botón de abajo", "connectDevice": "Conectar dispositivo", "topAiExperiences": "Mejores experiencias de IA", "aiAssistant": "Asistente de IA", "aiAssistantInfo": "Consejero personal 24 horas para preguntas y consejos", "interpretation": "Interpretación simultánea", - "simultaneousInterpretationInfo": "Traducción en tiempo real para más de 80 idiomas", + "simultaneousInterpretationInfo": + "Traducción en tiempo real para más de 80 idiomas", "aiCompanion": "Compañía parental", "aiCompanionInfo": "Te entiende y ofrece compañía cálida", "homeSlogan": "Conectando el mundo, más allá del sonido", - "turnEarphones": "Abre el estuche de los auriculares y colócalos en tus oídos", + "turnEarphones": + "Abre el estuche de los auriculares y colócalos en tus oídos", "currentlyConnected": "Actualmente conectado:", "unsystemSetup": "Ir a configuración del sistema", "talkLater": "Recordar más tarde", "initializing": "Inicializando...", - "bluetoothInitializationFailure": "Fallo en la inicialización del servicio Bluetooth", + "bluetoothInitializationFailure": + "Fallo en la inicialización del servicio Bluetooth", "checkingPermissions": "Verificando permisos...", - "lackPermissions": "Habilita permisos de Bluetooth y ubicación para descubrir y conectar dispositivos cercanos", + "lackPermissions": + "Habilita permisos de Bluetooth y ubicación para descubrir y conectar dispositivos cercanos", "searchingDevice": "Buscando dispositivos...", "findConnectedDevice": "Dispositivo conectado encontrado", "notFound": "No se encontraron dispositivos Bluetooth conectados", @@ -169,13 +177,15 @@ const Map esES = { "faceToFaceTranslation": "Traducción cara a cara", 'audioVideoTranslation': 'Traducción de audio/video', 'callTranslation': 'Traducción de llamadas', - "simultaneousTranslationInfo": "Traducción instantánea para más de 80 idiomas", + "simultaneousTranslationInfo": + "Traducción instantánea para más de 80 idiomas", "aiGirlfriend": "Compañía parental", "aiGirlfriendInfo": "Compañía inteligente, chat en cualquier momento", "healthConsultant": "Chat multifuncional de IA", "healthConsultantInfo": "Más funciones de chat de IA", "conferenceAssistant": "Asistente de reuniones de negocios", - "conferenceAssistantInfo": "Grabación de actas en tiempo real y traducción multiidioma", + "conferenceAssistantInfo": + "Grabación de actas en tiempo real y traducción multiidioma", "usageStats": "Estadísticas de uso", "usageStatsInfo": "Consulte las estadísticas de uso de la aplicación", "scene": "Escenarios", @@ -218,7 +228,8 @@ const Map esES = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +285,10 @@ const Map esES = { '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.', + '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', @@ -284,27 +297,35 @@ const Map esES = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +334,10 @@ const Map esES = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +352,8 @@ const Map esES = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Omitir", @@ -355,7 +379,8 @@ const Map esES = { '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”", + '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", @@ -405,7 +430,8 @@ const Map esES = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +486,54 @@ const Map esES = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +545,8 @@ const Map esES = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +566,8 @@ const Map esES = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +616,8 @@ const Map esES = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +642,8 @@ const Map esES = { "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.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Dispositivo conectado:", "accountId": "ID de cuenta:", "systemSetting": "Configuración del sistema", @@ -612,18 +656,22 @@ const Map esES = { "privacySettings": "Configuración de privacidad", "privacySettingsInfo": "Gestionar recopilación de datos y permisos", "permissionManagement": "Gestión de permisos", // 权限管理 - "permissionManagementInfo": "Gestionar configuración de permisos de la aplicación", // 管理应用权限设置 + "permissionManagementInfo": + "Gestionar configuración de permisos de la aplicación", // 管理应用权限设置 "aboutApplication": "Acerca de", "versions": "Versión", "checkUpdates": "Verificar actualizaciones", "selectLanguage": "Seleccionar idioma", "voiceService": "Servicio de voz", - "voiceServiceInfo": "Seleccionar servicio de reconocimiento y síntesis de voz", + "voiceServiceInfo": + "Seleccionar servicio de reconocimiento y síntesis de voz", "selectVoiceService": "Seleccionar servicio de voz", "azureVoiceService": "Servicio de voz Azure", - "azureVoiceServiceInfo": "Servicio en la nube de Microsoft que soporta síntesis y reconocimiento de voz de alta calidad", + "azureVoiceServiceInfo": + "Servicio en la nube de Microsoft que soporta síntesis y reconocimiento de voz de alta calidad", "flutterVoiceService": "Servicio de voz local", - "flutterVoiceServiceInfo": "Servicio de voz local del dispositivo sin necesidad de conexión a internet", + "flutterVoiceServiceInfo": + "Servicio de voz local del dispositivo sin necesidad de conexión a internet", 'timbreService': 'Servicio de timbre de voz', 'timbreServiceInfo': 'Seleccionar servicio de síntesis de voz', 'defaultTimbre': 'Timbre predeterminado', @@ -652,7 +700,8 @@ const Map esES = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Chat de voz en tiempo real", - "realtimeVoiceChatInfo": "Experimenta la función de interacción de voz inteligente (vista previa de función)", + "realtimeVoiceChatInfo": + "Experimenta la función de interacción de voz inteligente (vista previa de función)", "loading": "Cargando...", //设备管理页面 @@ -667,7 +716,8 @@ const Map esES = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -721,12 +771,17 @@ const Map esES = { '• Control de funciones de auriculares\n\n' '¿En qué puedo ayudarte?', 'microphonePermission': 'Micrófono', - 'voiceRecognitionPermissionText': 'La función de reconocimiento de voz necesita acceso al micrófono.', - 'voiceTranslationPermissionText': 'Las funciones de reconocimiento de voz y traducción necesitan acceso al micrófono.', - 'phoneCallPermissionText': 'La función de llamadas telefónicas necesita acceso al micrófono para llamadas de voz.', - 'permissionDeniedText': 'Has denegado permanentemente el permiso del micrófono, ve a la configuración del sistema para habilitarlo.', + 'voiceRecognitionPermissionText': + 'La función de reconocimiento de voz necesita acceso al micrófono.', + 'voiceTranslationPermissionText': + 'Las funciones de reconocimiento de voz y traducción necesitan acceso al micrófono.', + 'phoneCallPermissionText': + 'La función de llamadas telefónicas necesita acceso al micrófono para llamadas de voz.', + 'permissionDeniedText': + 'Has denegado permanentemente el permiso del micrófono, ve a la configuración del sistema para habilitarlo.', 'startVoiceInput': 'Iniciar entrada de voz', - 'startPhoneCallMode': 'Iniciar modo de llamada telefónica, iniciar entrada de voz', + 'startPhoneCallMode': + 'Iniciar modo de llamada telefónica, iniciar entrada de voz', // Agent 全屏编辑器 'fullScreenEditorHint': 'Ingresa tu mensaje aquí...', // 全屏编辑器输入提示 @@ -747,7 +802,8 @@ const Map esES = { 'privacyRelated': 'Relacionado con privacidad', 'copyrightViolation': 'Violación de mis derechos de autor, reputación, etc.', 'other': 'Otro', - 'reportDescriptionHint': 'Queremos conocer la razón de tu reporte, puedes describir el problema que encontraste.', + 'reportDescriptionHint': + 'Queremos conocer la razón de tu reporte, puedes describir el problema que encontraste.', //'submit': '提交', //Message_bubble @@ -778,15 +834,24 @@ const Map esES = { 'highest': 'Máxima', 'lowest': 'Mínima', 'futureForecast': 'Pronóstico futuro', - 'hotWeatherTip': 'Hoy hace calor, presta atención a la protección contra el calor, bebe más agua para evitar golpes de calor', - 'coldWeatherTip': 'Hoy la temperatura es baja, abrígate bien cuando salgas, ten cuidado de no resfriarte', - 'rainyWeatherTip': 'Hoy llueve, lleva paraguas cuando salgas, ten cuidado con la seguridad', - 'snowyWeatherTip': 'Hoy nieva, la carretera está resbaladiza, ten cuidado con la seguridad, abrígate bien', - 'foggyWeatherTip': 'Hoy hay niebla, la visibilidad es baja, usa mascarilla cuando salgas', - 'windyWeatherTip': 'Hoy hay viento fuerte, ten cuidado con la seguridad cuando salgas, asegura bien las cosas', - 'sunnyWeatherTip': 'Hoy el sol es fuerte y la radiación UV es intensa, protégete del sol cuando salgas', - 'temperatureDifferenceTip': 'Hoy hay gran diferencia entre la temperatura diurna y nocturna, ajusta la ropa a tiempo', - 'comfortableWeatherTip': 'Hoy el clima es cómodo, es buen momento para actividades al aire libre', + 'hotWeatherTip': + 'Hoy hace calor, presta atención a la protección contra el calor, bebe más agua para evitar golpes de calor', + 'coldWeatherTip': + 'Hoy la temperatura es baja, abrígate bien cuando salgas, ten cuidado de no resfriarte', + 'rainyWeatherTip': + 'Hoy llueve, lleva paraguas cuando salgas, ten cuidado con la seguridad', + 'snowyWeatherTip': + 'Hoy nieva, la carretera está resbaladiza, ten cuidado con la seguridad, abrígate bien', + 'foggyWeatherTip': + 'Hoy hay niebla, la visibilidad es baja, usa mascarilla cuando salgas', + 'windyWeatherTip': + 'Hoy hay viento fuerte, ten cuidado con la seguridad cuando salgas, asegura bien las cosas', + 'sunnyWeatherTip': + 'Hoy el sol es fuerte y la radiación UV es intensa, protégete del sol cuando salgas', + 'temperatureDifferenceTip': + 'Hoy hay gran diferencia entre la temperatura diurna y nocturna, ajusta la ropa a tiempo', + 'comfortableWeatherTip': + 'Hoy el clima es cómodo, es buen momento para actividades al aire libre', "monday": "Lunes", "tuesday": "Martes", "wednesday": "Miércoles", @@ -836,24 +901,31 @@ const Map esES = { "notSet": "No establecido", "accountSetting": "Configuración de cuenta", "logout": "Cerrar sesión", - "logoutTips": "¿Estás seguro de que quieres cerrar sesión de la cuenta actual?", + "logoutTips": + "¿Estás seguro de que quieres cerrar sesión de la cuenta actual?", 'deleteAccount': 'Eliminar cuenta', - 'deleteAccountTips': '¿Estás seguro de que quieres eliminar permanentemente tu cuenta? Esta acción no se puede deshacer', + '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': 'Fallo de conexión de red, verifica la configuración de red e inténtalo de nuevo', - 'serverTemporarilyUnavailable': 'El servidor no puede responder temporalmente, inténtalo de nuevo más tarde', + 'networkConnectionFailed': + 'Fallo de conexión de red, verifica la configuración de red e inténtalo de nuevo', + 'serverTemporarilyUnavailable': + 'El servidor no puede responder temporalmente, inténtalo de nuevo más tarde', 'loginExpiredPleaseRelogin': 'Sesión expirada, inicia sesión de nuevo', 'noPermissionForThisOperation': 'Sin permiso para esta operación', 'requestedResourceNotFound': 'El recurso solicitado no existe', - 'imageProcessingFailedPleaseReselect': 'Fallo en el procesamiento de imagen, selecciona imagen de nuevo', + 'imageProcessingFailedPleaseReselect': + 'Fallo en el procesamiento de imagen, selecciona imagen de nuevo', 'operationFailedPleaseRetry': 'Operación fallida, inténtalo de nuevo', 'serverReturnedError': 'El servidor devolvió un error', 'serverError': 'Error del servidor', - 'networkConnectionFailedCheckSettings': 'Fallo de conexión de red, verifica la configuración de red', - 'serverInternalErrorRetryLater': 'Error interno del servidor, inténtalo de nuevo más tarde', + 'networkConnectionFailedCheckSettings': + 'Fallo de conexión de red, verifica la configuración de red', + 'serverInternalErrorRetryLater': + 'Error interno del servidor, inténtalo de nuevo más tarde', // Profile 用户交互 //'error': '错误', @@ -872,13 +944,18 @@ const Map esES = { // 账号服务相关 'clearUserDataFailed': 'Fallo al limpiar datos de usuario', // 清理用户数据失败 'deleteUserDataFailed': 'Fallo al eliminar datos de usuario', // 删除用户数据失败 - 'thirdPartyLogoutSuccess': 'Cierre de sesión de terceros exitoso', // 第三方登录退出成功 - 'thirdPartyLogoutFailed': 'Fallo en el cierre de sesión de terceros', // 第三方登录退出失败 + 'thirdPartyLogoutSuccess': + 'Cierre de sesión de terceros exitoso', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': + 'Fallo en el cierre de sesión de terceros', // 第三方登录退出失败 'signOutProcessError': 'Error en el proceso de cierre de sesión', // 登出过程发生错误 - 'deleteAccountProcessError': 'Error en el proceso de eliminación de cuenta', // 删除账号过程发生错误 + 'deleteAccountProcessError': + 'Error en el proceso de eliminación de cuenta', // 删除账号过程发生错误 'userDataClearSuccess': 'Limpieza de datos de usuario exitosa', // 用户数据清理成功 - 'allUserDataClearSuccess': 'Limpieza de todos los datos de usuario exitosa', // 所有用户数据清理成功 - 'accountServiceInitialized': 'AccountService inicializado', // AccountService 已初始化 + 'allUserDataClearSuccess': + 'Limpieza de todos los datos de usuario exitosa', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'AccountService inicializado', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Fallo al obtener estado de permisos', @@ -901,57 +978,88 @@ const Map esES = { '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': 'Se usa para leer y gestionar eventos y recordatorios del calendario', - 'locationPermissionDesc': 'Se usa para obtener información de ubicación actual', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Se usa para crear eventos y recordatorios del calendario', + 'calendarFullAccessPermissionDesc': + 'Se usa para leer y gestionar eventos y recordatorios del calendario', + 'locationPermissionDesc': + 'Se usa para obtener información de ubicación actual', 'appFunctionNeeds': 'La función de la aplicación necesita', 'authorized': 'Autorizado', 'unauthorized': 'No autorizado', - 'needOpenInSystemSettings': 'Necesita habilitarse en configuración del sistema', + 'needOpenInSystemSettings': + 'Necesita habilitarse en configuración del sistema', 'partialAuthorization': 'Autorización parcial', 'unknownStatus': 'Estado desconocido', 'permissionGranted': 'Permiso otorgado', 'permissionRequestError': 'Error en solicitud de permiso', - 'phonePermissionDetailDesc': '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', + 'phonePermissionDetailDesc': + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1069,8 @@ const Map esES = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1079,10 @@ const Map esES = { 'updateNow': 'Actualizar ahora', // 立即更新按钮 'checkUpdate': 'Verificar actualizaciones', // 检查更新按钮 'updateFailed': 'Actualización fallida', // 更新失败提示 - 'cannotOpenAppStore': 'No se puede abrir la tienda de aplicaciones, ve manualmente a la tienda para actualizar', // 无法打开应用商店提示 - 'updateErrorRetry': 'Ocurrió un error durante la actualización, inténtalo de nuevo más tarde', // 更新错误重试提示 + 'cannotOpenAppStore': + 'No se puede abrir la tienda de aplicaciones, ve manualmente a la tienda para actualizar', // 无法打开应用商店提示 + 'updateErrorRetry': + 'Ocurrió un error durante la actualización, inténtalo de nuevo más tarde', // 更新错误重试提示 //国家列表 "邮箱": "Email", @@ -1107,7 +1218,8 @@ const Map esES = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1235,12 @@ const Map esES = { "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.", + "clearHistoryConfirm": + "¿Estás seguro de que quieres limpiar todo el historial de traducción? Esta operación no se puede deshacer.", "unknownLanguage": "Idioma desconocido", "deleteSessionRecord": "Eliminar registro de sesión", - "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.", + "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.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1272,20 @@ const Map esES = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1308,8 @@ const Map esES = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Registro original", "recordSummary": "Resumen del registro", - "clickToGenerateSummary": "Haz clic en el botón de abajo para generar resumen de sesión", + "clickToGenerateSummary": + "Haz clic en el botón de abajo para generar resumen de sesión", "summaryContent": "Contenido del resumen", "copied": "Copiado", "summaryCopiledToClipboard": "Resumen copiado al portapapeles", @@ -1197,9 +1317,11 @@ const Map esES = { "summaryGenerated": "Resumen generado", "generating": "Generando...", "regenerate": "Regenerar", - "summaryTimeoutMessage": "Solicitud de generación de resumen expirada, posiblemente debido a problema de red o sobrecarga del servidor.", + "summaryTimeoutMessage": + "Solicitud de generación de resumen expirada, posiblemente debido a problema de red o sobrecarga del servidor.", "deleteTranslationRecord": "Eliminar registro de traducción", - "deleteTranslationConfirm": "¿Estás seguro de que quieres eliminar este registro de traducción? Esta operación no se puede deshacer.", + "deleteTranslationConfirm": + "¿Estás seguro de que quieres eliminar este registro de traducción? Esta operación no se puede deshacer.", "originalText": "Texto original", "translatedText": "Texto traducido", "sessionSummary": "Resumen de sesión", @@ -1227,19 +1349,26 @@ const Map esES = { // 配对状态文本 "readyToPair": "Listo para emparejar", "preparingPairingEnvironment": "Preparando entorno de emparejamiento...", - "connectDeepSoundViaSystemBluetooth": "Conecta primero el dispositivo Voitrans a través del Bluetooth del sistema", + "connectDeepSoundViaSystemBluetooth": + "Conecta primero el dispositivo Voitrans a través del Bluetooth del sistema", "deviceBindingConfirm": "Confirmación de vinculación de dispositivo...", "establishingDeviceAssociation": "Estableciendo asociación de dispositivo...", "waitingCompletePairing": "Espera por favor, completando emparejamiento...", - "pairingSuccessRedirecting": "¡Emparejamiento exitoso! Redirigiendo a página principal...", + "pairingSuccessRedirecting": + "¡Emparejamiento exitoso! Redirigiendo a página principal...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Asegúrate de que el dispositivo conectado sea Voitrans", - "deviceAlreadyBoundToOtherAccount": "Este dispositivo ya está vinculado a otra cuenta", - "deviceAssociationFailed": "Fallo en la asociación del dispositivo, inténtalo de nuevo", - "scanTimeoutEnsureDeviceNearby": "Tiempo de escaneo agotado, asegúrate de que el dispositivo esté cerca", + "ensureConnectedDeepSoundDevice": + "Asegúrate de que el dispositivo conectado sea Voitrans", + "deviceAlreadyBoundToOtherAccount": + "Este dispositivo ya está vinculado a otra cuenta", + "deviceAssociationFailed": + "Fallo en la asociación del dispositivo, inténtalo de nuevo", + "scanTimeoutEnsureDeviceNearby": + "Tiempo de escaneo agotado, asegúrate de que el dispositivo esté cerca", "networkError": "Error de red", - "authorizationFailedCheckCode": "Fallo en la autorización, verifica si el código de autorización es correcto", + "authorizationFailedCheckCode": + "Fallo en la autorización, verifica si el código de autorización es correcto", "pairingFailedRetry": "Fallo en el emparejamiento, inténtalo de nuevo", // 配对控制器相关 @@ -1248,13 +1377,15 @@ const Map esES = { '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', + 'ensureHeadsetOnAndPairingMode': + 'Asegúrate de que los auriculares estén encendidos y en modo de emparejamiento', //'goToBluetoothSettings': '前往蓝牙设置', //'verifyingDevice': '正在验证设备...', //'confirmBinding': '确认绑定', //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Estableciendo conexión segura...', - 'needManualBindingAuthCode': 'Necesita código de autorización de vinculación manual...', + 'needManualBindingAuthCode': + 'Necesita código de autorización de vinculación manual...', 'pairingSuccessful': '¡Emparejamiento exitoso!', 'enableBluetooth': 'Habilitar Bluetooth', 'grantPermissions': 'Otorgar permisos', @@ -1266,19 +1397,26 @@ const Map esES = { 'verificationFailedRetry': 'Verificación fallida, inténtalo de nuevo', 'invalidDeviceAddress': 'Dirección de dispositivo inválida', 'bleDeviceAssociationFailed': 'Fallo en la asociación del dispositivo BLE', - 'deviceAssociationFailedRetry': 'Fallo en la asociación del dispositivo, inténtalo de nuevo', - 'bleConnectionTimeoutRetry': 'Tiempo de conexión BLE agotado, inténtalo de nuevo', + 'deviceAssociationFailedRetry': + 'Fallo en la asociación del dispositivo, inténtalo de nuevo', + 'bleConnectionTimeoutRetry': + 'Tiempo de conexión BLE agotado, inténtalo de nuevo', 'blePairingStartupFailed': 'Fallo en el inicio del emparejamiento BLE', 'bleConnectionFailed': 'Fallo en la conexión BLE', - 'deviceAuthorizationFailedCheckCode': 'Fallo en la autorización del dispositivo, verifica el código de autorización', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', // 我知道了 //用户反馈页 @@ -1291,10 +1429,12 @@ const Map esES = { 'contactHint': 'Email/teléfono, para que podamos contactarte', 'submit': 'Enviar', 'feedbackSubmitSuccess': 'Comentarios enviados exitosamente, ¡gracias!', - 'feedbackSubmitFailed': 'Fallo al enviar comentarios, inténtalo de nuevo más tarde', + 'feedbackSubmitFailed': + 'Fallo al enviar comentarios, inténtalo de nuevo más tarde', // OTA升级模块 - "upgradeExitConfirm": "Actualización en progreso, salir interrumpirá el proceso de actualización, ¿estás seguro de que quieres salir?", + "upgradeExitConfirm": + "Actualización en progreso, salir interrumpirá el proceso de actualización, ¿estás seguro de que quieres salir?", "deviceModel": "Modelo del dispositivo", "unknownDevice": "Dispositivo desconocido", "currentFirmwareVersion": "Versión actual del firmware", @@ -1307,14 +1447,19 @@ const Map esES = { "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", + "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", "charging": "Cargando", "updateContent": "Contenido de actualización", - "removeEarbudsEnsureBattery": "Retira ambos auriculares y asegúrate de que la batería de ambos esté por encima del 20%", + "removeEarbudsEnsureBattery": + "Retira ambos auriculares y asegúrate de que la batería de ambos esté por encima del 20%", // 音乐列表页面 "noMusic": "Sin música", // 暂无音乐 @@ -1376,8 +1521,10 @@ const Map esES = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 754fbf688..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", @@ -90,7 +91,8 @@ const Map etEE = { "tip": "Nõuanne", "pleaseEnterCompleteCode": "Sisesta täielik kinnituskood", "loginFailed": "Sisselogimine ebaõnnestus, proovi uuesti", - 'pleaseAcceptPrivacyPolicy': 'Loe ja nõustu esmalt privaatsuspoliitika ja kasutajalepinguga', + 'pleaseAcceptPrivacyPolicy': + 'Loe ja nõustu esmalt privaatsuspoliitika ja kasutajalepinguga', "enterVerificationCode": "Sisesta kinnituskood", "verificationCodeSentTo": "Kinnituskood saadetud aadressile", "resendVerificationCode": "Saada kinnituskood uuesti", @@ -99,7 +101,8 @@ const Map etEE = { // 隐私政策弹窗 "loginDeclaration": "Voitrans avaldus", // Voitrans 声明 - "welcomeToThisApp": "Tere tulemast Voitrans'i, loe hoolikalt", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Tere tulemast Voitrans'i, loe hoolikalt", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -130,7 +133,8 @@ const Map etEE = { "unsystemSetup": "Mine süsteemi seadetesse", "talkLater": "Tuleta hiljem meelde", "initializing": "Lähtestamine...", - "bluetoothInitializationFailure": "Bluetooth teenuse lähtestamine ebaõnnestus", + "bluetoothInitializationFailure": + "Bluetooth teenuse lähtestamine ebaõnnestus", "checkingPermissions": "Lubade kontrollimine...", "lackPermissions": "Puuduvad Bluetooth lubad ja luba kasutamiseks loetakse", "searchingDevice": "Seadmete otsimine...", @@ -175,7 +179,8 @@ const Map etEE = { "healthConsultant": "Mitmefunktsionaalne AI vestlus", "healthConsultantInfo": "Rohkem AI vestluse funktsioone", "conferenceAssistant": "Ärikoosoleku assistent", - "conferenceAssistantInfo": "Reaalajas protokolli salvestamine ja mitmekeelne tõlge", + "conferenceAssistantInfo": + "Reaalajas protokolli salvestamine ja mitmekeelne tõlge", "usageStats": "Kasutamise statistika", "usageStatsInfo": "Näita sovelluksen kasutamise statistikat", "scene": "Stsenaariumid", @@ -218,7 +223,8 @@ const Map etEE = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +280,10 @@ const Map etEE = { '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.', + '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', @@ -284,27 +292,35 @@ const Map etEE = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +329,10 @@ const Map etEE = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +347,8 @@ const Map etEE = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Jäta vahele", @@ -355,7 +374,8 @@ const Map etEE = { '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”', + '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', @@ -405,7 +425,8 @@ const Map etEE = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +481,54 @@ const Map etEE = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +540,8 @@ const Map etEE = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +561,8 @@ const Map etEE = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +611,8 @@ const Map etEE = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +637,8 @@ const Map etEE = { "cloudSync": "Pääsyvaraus cloud-synkronointiin", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Ühendatud seade:", "accountId": "Konto ID:", "systemSetting": "Süsteemi seaded", @@ -621,9 +660,11 @@ const Map etEE = { "voiceServiceInfo": "Vali häältuvastuse ja sünteesi teenus", "selectVoiceService": "Vali hääleteenused", "azureVoiceService": "Azure hääleteenused", - "azureVoiceServiceInfo": "Microsofti pilveteenus, mis toetab kvaliteetset häälsünteesi ja -tuvastust", + "azureVoiceServiceInfo": + "Microsofti pilveteenus, mis toetab kvaliteetset häälsünteesi ja -tuvastust", "flutterVoiceService": "Kohalik hääleteenused", - "flutterVoiceServiceInfo": "Seadme kohalik hääleteenused ilma internetiühenduseta", + "flutterVoiceServiceInfo": + "Seadme kohalik hääleteenused ilma internetiühenduseta", 'timbreService': 'Hääletämber teenus', 'timbreServiceInfo': 'Vali häälsünteesi teenus', 'defaultTimbre': 'Vaikimisi tämber', @@ -652,7 +693,8 @@ const Map etEE = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Reaalajas häälvestlus", - "realtimeVoiceChatInfo": "Koge nutika häälinteraktsiooni funktsiooni (funktsiooni eelvaade)", + "realtimeVoiceChatInfo": + "Koge nutika häälinteraktsiooni funktsiooni (funktsiooni eelvaade)", "loading": "Laadimine...", //设备管理页面 @@ -667,7 +709,8 @@ const Map etEE = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -721,10 +764,14 @@ const Map etEE = { '• Kõrvaklappide funktsioonide kontroll\n\n' 'Kuidas saan sind aidata?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': 'Häältuvastuse funktsioon vajab mikrofoni ligipääsu.', - 'voiceTranslationPermissionText': 'Häältuvastuse ja tõlke funktsioonid vajavad mikrofoni ligipääsu.', - 'phoneCallPermissionText': 'Telefonikõnede funktsioon vajab mikrofoni ligipääsu häälkõnede jaoks.', - 'permissionDeniedText': 'Oled püsivalt keeldunud mikrofoni loast, mine süsteemi seadetesse selle lubamiseks.', + 'voiceRecognitionPermissionText': + 'Häältuvastuse funktsioon vajab mikrofoni ligipääsu.', + 'voiceTranslationPermissionText': + 'Häältuvastuse ja tõlke funktsioonid vajavad mikrofoni ligipääsu.', + 'phoneCallPermissionText': + 'Telefonikõnede funktsioon vajab mikrofoni ligipääsu häälkõnede jaoks.', + 'permissionDeniedText': + 'Oled püsivalt keeldunud mikrofoni loast, mine süsteemi seadetesse selle lubamiseks.', 'startVoiceInput': 'Alusta häälsisestust', 'startPhoneCallMode': 'Alusta telefonikõne režiimi, alusta häälsisestust', @@ -747,7 +794,8 @@ const Map etEE = { 'privacyRelated': 'Privaatsusega seotud', 'copyrightViolation': 'Minu autoriõiguste, maine jms rikkumine', 'other': 'Muu', - 'reportDescriptionHint': 'Tahame teada teate põhjust, võid kirjeldada probleemi, millega kokku puutusid.', + 'reportDescriptionHint': + 'Tahame teada teate põhjust, võid kirjeldada probleemi, millega kokku puutusid.', //'submit': '提交', //Message_bubble @@ -778,14 +826,21 @@ const Map etEE = { 'highest': 'Kõrgeim', 'lowest': 'Madalaim', 'futureForecast': 'Tuleviku prognoos', - 'hotWeatherTip': 'Täna on kuum, pööra tähelepanu kuumakaitsele, joo rohkem vett kuumalöögi vältimiseks', - 'coldWeatherTip': 'Täna on temperatuur madal, riietumine soojalt välja minnes, ettevaatust külmetusega', - 'rainyWeatherTip': 'Täna sajab vihma, võta vihmavari kaasa välja minnes, ole ettevaatlik ohutusega', - 'snowyWeatherTip': 'Täna sajab lund, tee on libe, ole ettevaatlik ohutusega, riietumine soojalt', + 'hotWeatherTip': + 'Täna on kuum, pööra tähelepanu kuumakaitsele, joo rohkem vett kuumalöögi vältimiseks', + 'coldWeatherTip': + 'Täna on temperatuur madal, riietumine soojalt välja minnes, ettevaatust külmetusega', + 'rainyWeatherTip': + 'Täna sajab vihma, võta vihmavari kaasa välja minnes, ole ettevaatlik ohutusega', + 'snowyWeatherTip': + 'Täna sajab lund, tee on libe, ole ettevaatlik ohutusega, riietumine soojalt', 'foggyWeatherTip': 'Täna on udu, nähtavus on halb, kanna maski välja minnes', - 'windyWeatherTip': 'Täna on tugev tuul, ole ettevaatlik ohutusega välja minnes, kinnita asjad hästi', - 'sunnyWeatherTip': 'Täna on päike tugev ja UV-kiirgus intensiivne, kaitse end päikese eest välja minnes', - 'temperatureDifferenceTip': 'Täna on suur erinevus päeva- ja öise temperatuuri vahel, lisa või eemalda riideid õigeaegselt', + 'windyWeatherTip': + 'Täna on tugev tuul, ole ettevaatlik ohutusega välja minnes, kinnita asjad hästi', + 'sunnyWeatherTip': + 'Täna on päike tugev ja UV-kiirgus intensiivne, kaitse end päikese eest välja minnes', + 'temperatureDifferenceTip': + 'Täna on suur erinevus päeva- ja öise temperatuuri vahel, lisa või eemalda riideid õigeaegselt', 'comfortableWeatherTip': 'Täna on ilm mugav, hea aeg õuetegevusteks', "monday": "Esmaspäev", "tuesday": "Teisipäev", @@ -838,22 +893,28 @@ const Map etEE = { "logout": "Logi välja", "logoutTips": "Kas oled kindel, et tahad praegusest kontost välja logida?", 'deleteAccount': 'Kustuta konto', - 'deleteAccountTips': 'Kas oled kindel, et tahad oma konto jäädavalt kustutada? Seda toimingut ei saa tagasi võtta', + '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': 'Võrguühendus ebaõnnestus, kontrolli võrgu seadeid ja proovi uuesti', - 'serverTemporarilyUnavailable': 'Server ei saa ajutiselt vastata, proovi hiljem uuesti', + 'networkConnectionFailed': + 'Võrguühendus ebaõnnestus, kontrolli võrgu seadeid ja proovi uuesti', + 'serverTemporarilyUnavailable': + 'Server ei saa ajutiselt vastata, proovi hiljem uuesti', 'loginExpiredPleaseRelogin': 'Sisselogimine aegunud, logi uuesti sisse', 'noPermissionForThisOperation': 'Pole luba selle toimingu jaoks', 'requestedResourceNotFound': 'Taotletud ressurss ei eksisteeri', - 'imageProcessingFailedPleaseReselect': 'Pildi töötlemine ebaõnnestus, vali pilt uuesti', + 'imageProcessingFailedPleaseReselect': + 'Pildi töötlemine ebaõnnestus, vali pilt uuesti', 'operationFailedPleaseRetry': 'Toiming ebaõnnestus, proovi uuesti', 'serverReturnedError': 'Server tagastas vea', 'serverError': 'Serveri viga', - 'networkConnectionFailedCheckSettings': 'Võrguühendus ebaõnnestus, kontrolli võrgu seadeid', - 'serverInternalErrorRetryLater': 'Serveri sisemine viga, proovi hiljem uuesti', + 'networkConnectionFailedCheckSettings': + 'Võrguühendus ebaõnnestus, kontrolli võrgu seadeid', + 'serverInternalErrorRetryLater': + 'Serveri sisemine viga, proovi hiljem uuesti', // Profile 用户交互 //'error': '错误', @@ -872,13 +933,17 @@ const Map etEE = { // 账号服务相关 'clearUserDataFailed': 'Kasutajaandmete tühjendamine ebaõnnestus', // 清理用户数据失败 'deleteUserDataFailed': 'Kasutajaandmete kustutamine ebaõnnestus', // 删除用户数据失败 - 'thirdPartyLogoutSuccess': 'Kolmanda osapoole väljalogimine õnnestus', // 第三方登录退出成功 - 'thirdPartyLogoutFailed': 'Kolmanda osapoole väljalogimine ebaõnnestus', // 第三方登录退出失败 + 'thirdPartyLogoutSuccess': + 'Kolmanda osapoole väljalogimine õnnestus', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': + 'Kolmanda osapoole väljalogimine ebaõnnestus', // 第三方登录退出失败 'signOutProcessError': 'Väljalogimine protsessi viga', // 登出过程发生错误 'deleteAccountProcessError': 'Konto kustutamise protsessi viga', // 删除账号过程发生错误 'userDataClearSuccess': 'Kasutajaandmete tühjendamine õnnestus', // 用户数据清理成功 - 'allUserDataClearSuccess': 'Kõigi kasutajaandmete tühjendamine õnnestus', // 所有用户数据清理成功 - 'accountServiceInitialized': 'AccountService lähtestatud', // AccountService 已初始化 + 'allUserDataClearSuccess': + 'Kõigi kasutajaandmete tühjendamine õnnestus', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'AccountService lähtestatud', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Lubade oleku hankimine ebaõnnestus', @@ -901,9 +966,12 @@ const Map etEE = { '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': 'Kasutatakse kalendri sündmuste ja meeldetuletuste lugemiseks ja haldamiseks', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Kasutatakse kalendri sündmuste ja meeldetuletuste loomiseks', + 'calendarFullAccessPermissionDesc': + 'Kasutatakse kalendri sündmuste ja meeldetuletuste lugemiseks ja haldamiseks', 'locationPermissionDesc': 'Kasutatakse praeguse asukoha info hankimiseks', 'appFunctionNeeds': 'Rakenduse funktsioon vajab', 'authorized': 'Autoriseeritud', @@ -915,43 +983,66 @@ 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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1052,8 @@ const Map etEE = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1062,10 @@ const Map etEE = { 'updateNow': 'Uuenda kohe', // 立即更新按钮 'checkUpdate': 'Kontrolli uuendusi', // 检查更新按钮 'updateFailed': 'Uuendamine ebaõnnestus', // 更新失败提示 - 'cannotOpenAppStore': 'Ei saa rakenduste poodi avada, mine käsitsi poodi uuendamiseks', // 无法打开应用商店提示 - 'updateErrorRetry': 'Uuendamisel tekkis viga, proovi hiljem uuesti', // 更新错误重试提示 + 'cannotOpenAppStore': + 'Ei saa rakenduste poodi avada, mine käsitsi poodi uuendamiseks', // 无法打开应用商店提示 + 'updateErrorRetry': + 'Uuendamisel tekkis viga, proovi hiljem uuesti', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -1107,7 +1201,8 @@ const Map etEE = { "selectTargetLanguage": "Vali sihtkeel", "me": "Me", "counterPart": "Counterpart", - "bluetoothCallStateError": "Please make sure the Bluetooth headset is connected to the phone and in a call state", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1218,12 @@ const Map etEE = { "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.", + "clearHistoryConfirm": + "Kas oled kindel, et tahad kogu tõlke ajaloo tühjendada? Seda toimingut ei saa tagasi võtta.", "unknownLanguage": "Tundmatu keel", "deleteSessionRecord": "Kustuta seansi kirje", - "deleteSessionConfirm": "Kas oled kindel, et tahad kõik selle seansi tõlke kirjed kustutada? Seda toimingut ei saa tagasi võtta.", + "deleteSessionConfirm": + "Kas oled kindel, et tahad kõik selle seansi tõlke kirjed kustutada? Seda toimingut ei saa tagasi võtta.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1255,20 @@ const Map etEE = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1291,8 @@ const Map etEE = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Algne kirje", "recordSummary": "Kirje kokkuvõte", - "clickToGenerateSummary": "Klõpsa alloleval nupul seansi kokkuvõtte genereerimiseks", + "clickToGenerateSummary": + "Klõpsa alloleval nupul seansi kokkuvõtte genereerimiseks", "summaryContent": "Kokkuvõtte sisu", "copied": "Kopeeritud", "summaryCopiledToClipboard": "Kokkuvõte kopeeritud lõikelauale", @@ -1197,9 +1300,11 @@ const Map etEE = { "summaryGenerated": "Kokkuvõte genereeritud", "generating": "Genereerimine...", "regenerate": "Genereeri uuesti", - "summaryTimeoutMessage": "Kokkuvõtte genereerimise taotlus aegus, võimalik võrguprobleem või serveri ülekoormatus.", + "summaryTimeoutMessage": + "Kokkuvõtte genereerimise taotlus aegus, võimalik võrguprobleem või serveri ülekoormatus.", "deleteTranslationRecord": "Kustuta tõlke kirje", - "deleteTranslationConfirm": "Kas oled kindel, et tahad selle tõlke kirje kustutada? Seda toimingut ei saa tagasi võtta.", + "deleteTranslationConfirm": + "Kas oled kindel, et tahad selle tõlke kirje kustutada? Seda toimingut ei saa tagasi võtta.", "originalText": "Algne tekst", "translatedText": "Tõlgitud tekst", "sessionSummary": "Seansi kokkuvõte", @@ -1227,7 +1332,8 @@ const Map etEE = { // 配对状态文本 "readyToPair": "Valmis sidumiseks", "preparingPairingEnvironment": "Sidumiskeskkonna ettevalmistamine...", - "connectDeepSoundViaSystemBluetooth": "Ühenda esmalt Voitrans seade süsteemi Bluetooth kaudu", + "connectDeepSoundViaSystemBluetooth": + "Ühenda esmalt Voitrans seade süsteemi Bluetooth kaudu", "deviceBindingConfirm": "Seadme sidumise kinnitus...", "establishingDeviceAssociation": "Seadme seose loomine...", "waitingCompletePairing": "Palun oota, sidumise lõpetamine...", @@ -1237,9 +1343,11 @@ const Map etEE = { "ensureConnectedDeepSoundDevice": "Veendu, et ühendatud seade on Voitrans", "deviceAlreadyBoundToOtherAccount": "See seade on juba seotud teise kontoga", "deviceAssociationFailed": "Seadme seostamine ebaõnnestus, proovi uuesti", - "scanTimeoutEnsureDeviceNearby": "Skaneerimine aegus, veendu, et seade on lähedal", + "scanTimeoutEnsureDeviceNearby": + "Skaneerimine aegus, veendu, et seade on lähedal", "networkError": "Võrgu viga", - "authorizationFailedCheckCode": "Autoriseerimine ebaõnnestus, kontrolli, kas autoriseerimiskood on õige", + "authorizationFailedCheckCode": + "Autoriseerimine ebaõnnestus, kontrolli, kas autoriseerimiskood on õige", "pairingFailedRetry": "Sidumine ebaõnnestus, proovi uuesti", // 配对控制器相关 @@ -1248,7 +1356,8 @@ const Map etEE = { 'deviceDisconnected': 'Seade lahti ühendatud', 'readyToStartPairing': 'Valmis sidumist alustama', 'checkingEnvironment': 'Keskkonna kontrollimine...', - 'ensureHeadsetOnAndPairingMode': 'Veendu, et kõrvaklapid on sisse lülitatud ja sidumisrežiimis', + 'ensureHeadsetOnAndPairingMode': + 'Veendu, et kõrvaklapid on sisse lülitatud ja sidumisrežiimis', //'goToBluetoothSettings': '前往蓝牙设置', //'verifyingDevice': '正在验证设备...', //'confirmBinding': '确认绑定', @@ -1266,19 +1375,25 @@ const Map etEE = { 'verificationFailedRetry': 'Kontrollimine ebaõnnestus, proovi uuesti', 'invalidDeviceAddress': 'Vigane seadme aadress', 'bleDeviceAssociationFailed': 'BLE seadme seostamine ebaõnnestus', - 'deviceAssociationFailedRetry': 'Seadme seostamine ebaõnnestus, proovi uuesti', + 'deviceAssociationFailedRetry': + 'Seadme seostamine ebaõnnestus, proovi uuesti', 'bleConnectionTimeoutRetry': 'BLE ühenduse ajalõpp, proovi uuesti', 'blePairingStartupFailed': 'BLE sidumise käivitamine ebaõnnestus', 'bleConnectionFailed': 'BLE ühendus ebaõnnestus', - 'deviceAuthorizationFailedCheckCode': 'Seadme autoriseerimine ebaõnnestus, kontrolli autoriseerimiskoodi', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', // 我知道了 //用户反馈页 @@ -1291,10 +1406,12 @@ const Map etEE = { 'contactHint': 'E-mail/telefon, et saaksime sinuga ühendust võtta', 'submit': 'Esita', 'feedbackSubmitSuccess': 'Tagasiside edukalt esitatud, täname!', - 'feedbackSubmitFailed': 'Tagasiside esitamine ebaõnnestus, proovi hiljem uuesti', + 'feedbackSubmitFailed': + 'Tagasiside esitamine ebaõnnestus, proovi hiljem uuesti', // OTA升级模块 - "upgradeExitConfirm": "Uuendamine käib, väljumine katkestab uuendamise protsessi, kas oled kindel, et tahad väljuda?", + "upgradeExitConfirm": + "Uuendamine käib, väljumine katkestab uuendamise protsessi, kas oled kindel, et tahad väljuda?", "deviceModel": "Seadme mudel", "unknownDevice": "Tundmatu seade", "currentFirmwareVersion": "Praegune püsivara versioon", @@ -1307,14 +1424,18 @@ const Map etEE = { "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.", + "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", "updateContent": "Uuenduse sisu", - "removeEarbudsEnsureBattery": "Võta mõlemad kõrvaklapid välja ja veendu, et mõlema aku on üle 20%", + "removeEarbudsEnsureBattery": + "Võta mõlemad kõrvaklapid välja ja veendu, et mõlema aku on üle 20%", // 音乐列表页面 "noMusic": "Muusikat pole", // 暂无音乐 @@ -1376,8 +1497,10 @@ const Map etEE = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 41b355ef4..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": "فرانسوی", @@ -71,7 +72,8 @@ const Map faIR = { // 登录页 "welcome": "خوش آمدید", - "loginTips": "لطفاً با شماره تلفن یا ایمیل خود وارد شوید یا حساب کاربری ایجاد کنید", + "loginTips": + "لطفاً با شماره تلفن یا ایمیل خود وارد شوید یا حساب کاربری ایجاد کنید", "accountNumber": "شماره تلفن یا ایمیل", "verificationCode": "کد تأیید", "getCode": "دریافت کد", @@ -90,7 +92,8 @@ const Map faIR = { "tip": "نکته", "pleaseEnterCompleteCode": "لطفاً کد تأیید کامل را وارد کنید", "loginFailed": "ورود ناموفق بود، لطفاً دوباره تلاش کنید", - 'pleaseAcceptPrivacyPolicy': 'لطفاً ابتدا سیاست حفظ حریم خصوصی و توافقنامه کاربری را بخوانید و بپذیرید', + 'pleaseAcceptPrivacyPolicy': + 'لطفاً ابتدا سیاست حفظ حریم خصوصی و توافقنامه کاربری را بخوانید و بپذیرید', "enterVerificationCode": "کد تأیید را وارد کنید", "verificationCodeSentTo": "کد تأیید به", "resendVerificationCode": "ارسال مجدد کد تأیید", @@ -99,7 +102,8 @@ const Map faIR = { // 隐私政策弹窗 "loginDeclaration": "بیانیه Voitrans", // Voitrans 声明 - "welcomeToThisApp": "به Voitrans خوش آمدید، لطفاً با دقت بخوانید ", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "به Voitrans خوش آمدید، لطفاً با دقت بخوانید ", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -125,14 +129,16 @@ const Map faIR = { "aiCompanion": "همراه والدین و فرزند", "aiCompanionInfo": "شما را درک می‌کند و همراهی گرمی را فراهم می‌کند", "homeSlogan": "دنیا را متصل کن، فراتر از صدا", - "turnEarphones": "لطفاً کیس ایرفون را باز کنید و ایربادها را در گوش خود قرار دهید", + "turnEarphones": + "لطفاً کیس ایرفون را باز کنید و ایربادها را در گوش خود قرار دهید", "currentlyConnected": "در حال حاضر متصل به:", "unsystemSetup": "رفتن به تنظیمات سیستم", "talkLater": "بعداً یادآوری کن", "initializing": "در حال آماده‌سازی...", "bluetoothInitializationFailure": "آماده‌سازی سرویس بلوتوث ناموفق بود", "checkingPermissions": "در حال بررسی مجوزها...", - "lackPermissions": "مجوزهای بلوتوث مورد نیاز است و دسترسی به لوکیشن نیز لازم است", + "lackPermissions": + "مجوزهای بلوتوث مورد نیاز است و دسترسی به لوکیشن نیز لازم است", "searchingDevice": "در حال جستجوی دستگاه‌ها...", "findConnectedDevice": "دستگاه متصل پیدا شد", "notFound": "دستگاه بلوتوث متصلی پیدا نشد", @@ -218,7 +224,8 @@ const Map faIR = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +281,10 @@ const Map faIR = { '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.', + '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', @@ -284,27 +293,35 @@ const Map faIR = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +330,10 @@ const Map faIR = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +348,8 @@ const Map faIR = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "رد کردن", @@ -355,7 +375,8 @@ const Map faIR = { '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”', + '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', @@ -398,14 +419,16 @@ const Map faIR = { 'connectedToAiPen': 'متصل به دستگاه AI PEN', 'checkingNewFiles': 'در حال بررسی فایل‌های جدید برای وارد کردن', 'startingWifi': 'در حال راه‌اندازی Wi-Fi...', - 'newFilesDetected': 'فایل‌های جدید شناسایی شد، در حال آماده‌سازی برای وارد کردن', + 'newFilesDetected': + 'فایل‌های جدید شناسایی شد، در حال آماده‌سازی برای وارد کردن', 'noNewFiles': 'فایل جدیدی برای وارد کردن وجود ندارد', 'connectingWifi': 'در حال اتصال به Wi-Fi...', 'wifiConnected': 'اتصال Wi-Fi موفقیت‌آمیز بود', 'downloadingFiles': 'در حال دانلود فایل‌ها...', 'downloadingFileProgress': 'مجموع {total} فایل، در حال دانلود فایل {current}', 'downloadComplete': 'دانلود کامل شد', - 'downloadCompleteInfo': 'دانلود کامل شد، مجموعاً {count} فایل، بازگشت خودکار تا ۲ ثانیه دیگر', + 'downloadCompleteInfo': + 'دانلود کامل شد، مجموعاً {count} فایل، بازگشت خودکار تا ۲ ثانیه دیگر', // Meeting模块 - 录音功能 'startRecording': 'شروع ضبط', @@ -441,7 +464,8 @@ const Map faIR = { 'meetingHours': 'ساعت', 'voitransAiMember': 'عضو هوش مصنوعی Voitrans', 'unlockStarterMember': 'باز کردن عضویت Starter', - 'bindDeviceToActivate': 'دستگاه Voitrans را برای فعال‌سازی عضویت Starter متصل کنید', + 'bindDeviceToActivate': + 'دستگاه Voitrans را برای فعال‌سازی عضویت Starter متصل کنید', 'unlockNow': 'اکنون باز کنید', // Meeting模块 - 会员功能 @@ -460,40 +484,55 @@ const Map faIR = { 'audioImport': 'وارد کردن صدا', 'multipleExportFormats': 'فرمت‌های خروجی متعدد', 'professionalSummaryTemplates': 'الگوهای خلاصه حرفه‌ای', - 'professionalTemplateDesc': 'طراحی الگوی حرفه‌ای برای بهبود کارایی شما. سفارشی‌شده بر اساس نیازهای صنعت.', - 'customTemplateDesc': 'شما می‌توانید اعلان‌های خلاصه را بر اساس نیازهای خود سفارشی کنید و از آن‌ها برای ایجاد خلاصه‌های مورد نیاز استفاده کنید.', - 'askAiDesc': 'استخراج هوشمند اطلاعات عمیق‌تر از ضبط‌ها، ایجاد جداول داده، نتایج کلیدی بحث، لیست کارها، ایمیل‌های گزارش و سایر محتوای فرمت‌شده با یک کلیک.', - 'visualMindMapDesc': 'فراتر از خلاصه‌ها - سازماندهی و بصری‌سازی نکات کلیدی با نقشه‌های ذهنی برای درک مؤثرتر متن کامل.', - 'templateCommunityDesc': 'کشف کنید، به اشتراک بگذارید و از کتابخانه الگوهای ایجاد شده توسط کاربران الهام بگیرید.', - 'speakerIdentificationDesc': 'تبدیل متن صوتی از شناسایی گوینده پشتیبانی می‌کند، محتوای جلسه یا تماس تلفنی را به طور شهودی‌تر بازیابی می‌کند. در عین حال، خلاصه دقیق‌تر خواهد بود.', - 'privateCloudSyncDesc': 'ضبط‌ها و متن‌های شما به طور ایمن در سرورهای ابری اختصاصی ذخیره می‌شوند، با رمزگذاری کامل در هنگام آپلود و دانلود برای اطمینان از حریم خصوصی و امنیت.', - 'aiVoiceEnhancementDesc': 'بهبود صدای هوش مصنوعی از تنظیمات کاهش نویز چندگانه پشتیبانی می‌کند، به طور هوشمند نویز پس‌زمینه را حذف می‌کند، وضوح صدا را افزایش می‌دهد و کیفیت پخش صدا را بهبود می‌بخشد.', - 'audioImportDesc': 'به راحتی فایل‌های صوتی را از برنامه‌های محلی یا شخص ثالث مانند یادداشت‌های صوتی، Google Drive و غیره وارد کنید.', - 'multipleExportFormatsDesc': 'ضبط‌های صوتی، متن تبدیل‌شده و خلاصه‌های خود را در فرمت‌های مختلف (TXT، PDF، JPEG) برای رفع نیازهای خود خروجی بگیرید.', + 'professionalTemplateDesc': + 'طراحی الگوی حرفه‌ای برای بهبود کارایی شما. سفارشی‌شده بر اساس نیازهای صنعت.', + 'customTemplateDesc': + 'شما می‌توانید اعلان‌های خلاصه را بر اساس نیازهای خود سفارشی کنید و از آن‌ها برای ایجاد خلاصه‌های مورد نیاز استفاده کنید.', + 'askAiDesc': + 'استخراج هوشمند اطلاعات عمیق‌تر از ضبط‌ها، ایجاد جداول داده، نتایج کلیدی بحث، لیست کارها، ایمیل‌های گزارش و سایر محتوای فرمت‌شده با یک کلیک.', + 'visualMindMapDesc': + 'فراتر از خلاصه‌ها - سازماندهی و بصری‌سازی نکات کلیدی با نقشه‌های ذهنی برای درک مؤثرتر متن کامل.', + 'templateCommunityDesc': + 'کشف کنید، به اشتراک بگذارید و از کتابخانه الگوهای ایجاد شده توسط کاربران الهام بگیرید.', + 'speakerIdentificationDesc': + 'تبدیل متن صوتی از شناسایی گوینده پشتیبانی می‌کند، محتوای جلسه یا تماس تلفنی را به طور شهودی‌تر بازیابی می‌کند. در عین حال، خلاصه دقیق‌تر خواهد بود.', + 'privateCloudSyncDesc': + 'ضبط‌ها و متن‌های شما به طور ایمن در سرورهای ابری اختصاصی ذخیره می‌شوند، با رمزگذاری کامل در هنگام آپلود و دانلود برای اطمینان از حریم خصوصی و امنیت.', + 'aiVoiceEnhancementDesc': + 'بهبود صدای هوش مصنوعی از تنظیمات کاهش نویز چندگانه پشتیبانی می‌کند، به طور هوشمند نویز پس‌زمینه را حذف می‌کند، وضوح صدا را افزایش می‌دهد و کیفیت پخش صدا را بهبود می‌بخشد.', + 'audioImportDesc': + 'به راحتی فایل‌های صوتی را از برنامه‌های محلی یا شخص ثالث مانند یادداشت‌های صوتی، Google Drive و غیره وارد کنید.', + 'multipleExportFormatsDesc': + 'ضبط‌های صوتی، متن تبدیل‌شده و خلاصه‌های خود را در فرمت‌های مختلف (TXT، PDF، JPEG) برای رفع نیازهای خود خروجی بگیرید.', // Meeting模块 - 升级会员 'upgradeMembership': 'عضویت خود را ارتقا دهید', 'yearlySubscription': 'اشتراک سالانه', 'monthlySubscription': 'اشتراک ماهانه', 'proMonthly': 'Pro ¥۶۰/ماه', - 'proMonthlyDesc': '۷ روز استفاده آزمایشی رایگان، سپس ¥۸۰۰/سال. هر زمان قبل از پایان دوره آزمایشی لغو کنید.', + 'proMonthlyDesc': + '۷ روز استفاده آزمایشی رایگان، سپس ¥۸۰۰/سال. هر زمان قبل از پایان دوره آزمایشی لغو کنید.', 'sevenDayTrial': '۷ روز استفاده آزمایشی رایگان', 'unlimitedMonthly': 'Unlimited ¥۱۲۰/ماه', - 'unlimitedMonthlyDesc': '۷ روز استفاده آزمایشی رایگان، سپس ¥۱۶۰۰/سال. هر زمان قبل از پایان دوره آزمایشی لغو کنید.', - 'trialNote': '*استفاده آزمایشی رایگان برای ۷ روز، سپس سالانه شارژ می‌شود، هر زمان لغو کنید.', + 'unlimitedMonthlyDesc': + '۷ روز استفاده آزمایشی رایگان، سپس ¥۱۶۰۰/سال. هر زمان قبل از پایان دوره آزمایشی لغو کنید.', + 'trialNote': + '*استفاده آزمایشی رایگان برای ۷ روز، سپس سالانه شارژ می‌شود، هر زمان لغو کنید.', 'proPrice': 'Pro ¥۱۲۰', 'proMonthlyPrice': '¥۱۲۰/ماه', 'subscribe': 'اشتراک', 'unlimitedPrice': 'Unlimited ¥۱۹۸', 'unlimitedMonthlyPrice': '¥۱۹۸/ماه', - 'upgradeNote': '*پس از ارتقای اشتراک، روزهای باقیمانده اشتراک اصلی به طور خودکار محاسبه و به حساب پرداخت شما بازپرداخت می‌شود', + 'upgradeNote': + '*پس از ارتقای اشتراک، روزهای باقیمانده اشتراک اصلی به طور خودکار محاسبه و به حساب پرداخت شما بازپرداخت می‌شود', 'buyMoreTranscriptionTime': 'خرید زمان تبدیل متن بیشتر', 'sixThousandMinutes': '۶,۰۰۰ دقیقه', 'threeThousandMinutes': '۳,۰۰۰ دقیقه', 'sixHundredMinutes': '۶۰۰ دقیقه', 'oneHundredTwentyMinutes': '۱۲۰ دقیقه', 'validityPeriod': '*دوره اعتبار: ', - 'validityNote': 'بلافاصله پس از خرید فعال می‌شود، تا ۲ سال پس از فعال‌سازی معتبر است.', + 'validityNote': + 'بلافاصله پس از خرید فعال می‌شود، تا ۲ سال پس از فعال‌سازی معتبر است.', 'purchase': 'خرید', // Meeting模块 - 模版和生成 @@ -505,7 +544,8 @@ const Map faIR = { 'chineseSimplified': 'چینی ماندارین (ساده‌شده)', 'meetingGenerateNow': 'اکنون ایجاد کن', 'keyEventsAnalyzed': '{count} رویداد کلیدی تجزیه و تحلیل شد.', - 'aiAnalysisDesc': 'تجزیه و تحلیل هوش مصنوعی رویدادهای کلیدی را در ضبط‌ها شناسایی می‌کند، به شما امکان می‌دهد رویدادهای مهم را برای ایجاد توسط هوش مصنوعی انتخاب کنید.', + 'aiAnalysisDesc': + 'تجزیه و تحلیل هوش مصنوعی رویدادهای کلیدی را در ضبط‌ها شناسایی می‌کند، به شما امکان می‌دهد رویدادهای مهم را برای ایجاد توسط هوش مصنوعی انتخاب کنید.', // Meeting模块 - 文件操作和状态 'importing': 'در حال وارد کردن...', @@ -525,7 +565,8 @@ const Map faIR = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'ذخیره‌سازی', - 'meetingStoragePermissionExplanation': 'ما به مجوزهای ذخیره‌سازی نیاز داریم تا شما بتوانید فایل‌های صوتی را انتخاب و آپلود کنید.', + 'meetingStoragePermissionExplanation': + 'ما به مجوزهای ذخیره‌سازی نیاز داریم تا شما بتوانید فایل‌های صوتی را انتخاب و آپلود کنید.', 'meetingStoragePermissionPermanentDenial': 'شناسایی شد که شما مجوز ذخیره‌سازی را برای همیشه رد کرده‌اید. برای ادامه استفاده از این ویژگی، لطفاً به تنظیمات برنامه بروید تا مجوز ذخیره‌سازی را به صورت دستی فعال کنید.', @@ -574,7 +615,8 @@ const Map faIR = { 'recentlyUsedNames': 'نام‌های اخیراً استفاده‌شده', 'applyToCurrentParagraph': 'اعمال به پاراگراف فعلی', 'totalTime': 'زمان کل', - 'summarySpeakerWillBeUpdatedAutomatically': 'گویندگان خلاصه به طور خودکار به‌روزرسانی خواهند شد', + 'summarySpeakerWillBeUpdatedAutomatically': + 'گویندگان خلاصه به طور خودکار به‌روزرسانی خواهند شد', // Meeting模块 - 云端同步相关 'syncToCloud': 'همگام‌سازی با ابر', @@ -599,7 +641,8 @@ const Map faIR = { "cloudSync": "شارژ همگام‌سازی ابری", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "دستگاه متصل:", "accountId": "شناسه حساب:", "systemSetting": "تنظیمات سیستم", @@ -621,7 +664,8 @@ const Map faIR = { "voiceServiceInfo": "انتخاب سرویس تشخیص و تولید گفتار", "selectVoiceService": "انتخاب سرویس صوتی", "azureVoiceService": "سرویس گفتار Azure", - "azureVoiceServiceInfo": "سرویس مبتنی بر ابر مایکروسافت که از تولید و تشخیص گفتار با کیفیت بالا پشتیبانی می‌کند", + "azureVoiceServiceInfo": + "سرویس مبتنی بر ابر مایکروسافت که از تولید و تشخیص گفتار با کیفیت بالا پشتیبانی می‌کند", "flutterVoiceService": "سرویس صوتی محلی", "flutterVoiceServiceInfo": "سرویس صوتی محلی دستگاه بدون نیاز به اینترنت", 'timbreService': 'سرویس طنین صدا', @@ -667,7 +711,8 @@ const Map faIR = { "noMacAddress": "بدون آدرس MAC", "licenseCode": "کد مجوز", "confirmUnbind": "تأیید لغو اتصال", - "confirmUnbindMessage": "آیا مطمئن هستید که می‌خواهید اتصال دستگاه «{deviceName}» را لغو کنید؟", + "confirmUnbindMessage": + "آیا مطمئن هستید که می‌خواهید اتصال دستگاه «{deviceName}» را لغو کنید؟", "confirmUnbindAction": "تأیید لغو اتصال", //Agent 模块 @@ -722,9 +767,12 @@ const Map faIR = { 'چه کمکی می‌توانم به شما بکنم؟', 'microphonePermission': 'میکروفون', 'voiceRecognitionPermissionText': 'تشخیص صدا به دسترسی میکروفون نیاز دارد.', - 'voiceTranslationPermissionText': 'تشخیص و ترجمه صدا به دسترسی میکروفون نیاز دارد.', - 'phoneCallPermissionText': 'عملکرد تماس تلفنی برای تماس‌های صوتی به دسترسی میکروفون نیاز دارد.', - 'permissionDeniedText': 'شما مجوز میکروفون را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات سیستم بروید.', + 'voiceTranslationPermissionText': + 'تشخیص و ترجمه صدا به دسترسی میکروفون نیاز دارد.', + 'phoneCallPermissionText': + 'عملکرد تماس تلفنی برای تماس‌های صوتی به دسترسی میکروفون نیاز دارد.', + 'permissionDeniedText': + 'شما مجوز میکروفون را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات سیستم بروید.', 'startVoiceInput': 'شروع ورودی صوتی', 'startPhoneCallMode': 'شروع حالت تماس تلفنی، شروع ورودی صوتی', @@ -747,7 +795,8 @@ const Map faIR = { 'privacyRelated': 'مرتبط با حریم خصوصی', 'copyrightViolation': 'نقض حق کپی‌رایت، حقوق شهرت و غیره من.', 'other': 'دیگر', - 'reportDescriptionHint': 'ما می‌خواهیم دلیل گزارش شما را بدانیم، می‌توانید مشکلی را که با آن مواجه شدید توصیف کنید.', + 'reportDescriptionHint': + 'ما می‌خواهیم دلیل گزارش شما را بدانیم، می‌توانید مشکلی را که با آن مواجه شدید توصیف کنید.', //'submit': '提交', //Message_bubble @@ -778,15 +827,24 @@ const Map faIR = { 'highest': 'حداکثر', 'lowest': 'حداقل', 'futureForecast': 'پیش‌بینی آینده', - 'hotWeatherTip': 'امروز هوا گرم است، لطفاً به پیشگیری از گرما و خنک شدن توجه کنید، برای جلوگیری از گرمازدگی آب بیشتری بنوشید', - 'coldWeatherTip': 'امروز دما پایین است، لطفاً هنگام بیرون رفتن گرم بپوشید و مراقب سرماخوردگی باشید', - 'rainyWeatherTip': 'امروز بارانی است، لطفاً هنگام بیرون رفتن چتر همراه داشته باشید و به ایمنی سفر توجه کنید', - 'snowyWeatherTip': 'امروز برفی است، جاده‌ها لغزنده هستند، لطفاً به ایمنی توجه کنید و گرم بپوشید', - 'foggyWeatherTip': 'امروز مه و غبارآلود است، دید کم است، لطفاً هنگام بیرون رفتن ماسک بزنید', - 'windyWeatherTip': 'امروز باد شدید است، لطفاً هنگام بیرون رفتن به ایمنی توجه کنید و وسایل را محکم کنید', - 'sunnyWeatherTip': 'امروز آفتابی با اشعه ماوراء بنفش قوی است، لطفاً هنگام بیرون رفتن از خود در برابر آفتاب محافظت کنید', - 'temperatureDifferenceTip': 'امروز اختلاف دمای شب و روز زیاد است، لطفاً لباس خود را متناسب با آن تنظیم کنید', - 'comfortableWeatherTip': 'امروز هوا دلپذیر است، عالی برای فعالیت‌های بیرون از خانه', + 'hotWeatherTip': + 'امروز هوا گرم است، لطفاً به پیشگیری از گرما و خنک شدن توجه کنید، برای جلوگیری از گرمازدگی آب بیشتری بنوشید', + 'coldWeatherTip': + 'امروز دما پایین است، لطفاً هنگام بیرون رفتن گرم بپوشید و مراقب سرماخوردگی باشید', + 'rainyWeatherTip': + 'امروز بارانی است، لطفاً هنگام بیرون رفتن چتر همراه داشته باشید و به ایمنی سفر توجه کنید', + 'snowyWeatherTip': + 'امروز برفی است، جاده‌ها لغزنده هستند، لطفاً به ایمنی توجه کنید و گرم بپوشید', + 'foggyWeatherTip': + 'امروز مه و غبارآلود است، دید کم است، لطفاً هنگام بیرون رفتن ماسک بزنید', + 'windyWeatherTip': + 'امروز باد شدید است، لطفاً هنگام بیرون رفتن به ایمنی توجه کنید و وسایل را محکم کنید', + 'sunnyWeatherTip': + 'امروز آفتابی با اشعه ماوراء بنفش قوی است، لطفاً هنگام بیرون رفتن از خود در برابر آفتاب محافظت کنید', + 'temperatureDifferenceTip': + 'امروز اختلاف دمای شب و روز زیاد است، لطفاً لباس خود را متناسب با آن تنظیم کنید', + 'comfortableWeatherTip': + 'امروز هوا دلپذیر است، عالی برای فعالیت‌های بیرون از خانه', "monday": "دوشنبه", "tuesday": "سه‌شنبه", "wednesday": "چهارشنبه", @@ -838,22 +896,28 @@ const Map faIR = { "logout": "خروج از حساب", "logoutTips": "آیا مطمئن هستید که می‌خواهید از حساب فعلی خارج شوید؟", 'deleteAccount': 'حذف حساب', - 'deleteAccountTips': 'آیا مطمئن هستید که می‌خواهید حساب خود را برای همیشه حذف کنید؟ این عمل قابل بازگشت نیست.', + 'deleteAccountTips': + 'آیا مطمئن هستید که می‌خواهید حساب خود را برای همیشه حذف کنید؟ این عمل قابل بازگشت نیست.', 'clean': 'پاک کردن حافظه پنهان', 'cleanTips': 'آیا مطمئن هستید که می‌خواهید حافظه پنهان شخصی را پاک کنید؟', // Profile 错误信息 - 'networkConnectionFailed': 'اتصال شبکه ناموفق بود، لطفاً تنظیمات شبکه را بررسی کرده و دوباره تلاش کنید', - 'serverTemporarilyUnavailable': 'سرور به طور موقت در دسترس نیست، لطفاً بعداً دوباره تلاش کنید', + 'networkConnectionFailed': + 'اتصال شبکه ناموفق بود، لطفاً تنظیمات شبکه را بررسی کرده و دوباره تلاش کنید', + 'serverTemporarilyUnavailable': + 'سرور به طور موقت در دسترس نیست، لطفاً بعداً دوباره تلاش کنید', 'loginExpiredPleaseRelogin': 'ورود منقضی شده است، لطفاً دوباره وارد شوید', 'noPermissionForThisOperation': 'مجوز انجام این عملیات وجود ندارد', 'requestedResourceNotFound': 'منبع درخواستی یافت نشد', - 'imageProcessingFailedPleaseReselect': 'پردازش تصویر ناموفق بود، لطفاً تصویر را دوباره انتخاب کنید', + 'imageProcessingFailedPleaseReselect': + 'پردازش تصویر ناموفق بود، لطفاً تصویر را دوباره انتخاب کنید', 'operationFailedPleaseRetry': 'عملیات ناموفق بود، لطفاً دوباره تلاش کنید', 'serverReturnedError': 'سرور خطا بازگرداند', 'serverError': 'خطای سرور', - 'networkConnectionFailedCheckSettings': 'اتصال شبکه ناموفق بود، لطفاً تنظیمات شبکه را بررسی کنید', - 'serverInternalErrorRetryLater': 'خطای داخلی سرور، لطفاً بعداً دوباره تلاش کنید', + 'networkConnectionFailedCheckSettings': + 'اتصال شبکه ناموفق بود، لطفاً تنظیمات شبکه را بررسی کنید', + 'serverInternalErrorRetryLater': + 'خطای داخلی سرور، لطفاً بعداً دوباره تلاش کنید', // Profile 用户交互 //'error': '错误', @@ -872,13 +936,17 @@ const Map faIR = { // 账号服务相关 'clearUserDataFailed': 'پاک کردن داده‌های کاربر ناموفق بود', // 清理用户数据失败 'deleteUserDataFailed': 'حذف داده‌های کاربر ناموفق بود', // 删除用户数据失败 - 'thirdPartyLogoutSuccess': 'خروج از حساب شخص ثالث موفقیت‌آمیز بود', // 第三方登录退出成功 + 'thirdPartyLogoutSuccess': + 'خروج از حساب شخص ثالث موفقیت‌آمیز بود', // 第三方登录退出成功 'thirdPartyLogoutFailed': 'خروج از حساب شخص ثالث ناموفق بود', // 第三方登录退出失败 'signOutProcessError': 'خطا در طول فرآیند خروج از حساب رخ داد', // 登出过程发生错误 - 'deleteAccountProcessError': 'خطا در طول فرآیند حذف حساب رخ داد', // 删除账号过程发生错误 + 'deleteAccountProcessError': + 'خطا در طول فرآیند حذف حساب رخ داد', // 删除账号过程发生错误 'userDataClearSuccess': 'داده‌های کاربر با موفقیت پاک شد', // 用户数据清理成功 - 'allUserDataClearSuccess': 'تمام داده‌های کاربر با موفقیت پاک شد', // 所有用户数据清理成功 - 'accountServiceInitialized': 'AccountService آماده‌سازی شد', // AccountService 已初始化 + 'allUserDataClearSuccess': + 'تمام داده‌های کاربر با موفقیت پاک شد', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'AccountService آماده‌سازی شد', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'دریافت وضعیت مجوز ناموفق بود', @@ -901,10 +969,14 @@ const Map faIR = { 'locationInfo': 'اطلاعات موقعیت مکانی', 'phonePermissionDesc': 'برای عملکرد تماس تلفنی استفاده می‌شود', 'smsPermissionDesc': 'برای عملکرد پیامک استفاده می‌شود', - 'alarmPermissionDesc': 'برای تنظیم زنگ‌های هشدار دقیق استفاده می‌شود تا اطمینان حاصل شود یادآوری‌ها به موقع فعال می‌شوند', - 'calendarWritePermissionDesc': 'برای ایجاد رویدادها و یادآوری‌های تقویم استفاده می‌شود', - 'calendarFullAccessPermissionDesc': 'برای خواندن و مدیریت رویدادها و یادآوری‌های تقویم استفاده می‌شود', - 'locationPermissionDesc': 'برای دریافت اطلاعات موقعیت مکانی فعلی استفاده می‌شود', + 'alarmPermissionDesc': + 'برای تنظیم زنگ‌های هشدار دقیق استفاده می‌شود تا اطمینان حاصل شود یادآوری‌ها به موقع فعال می‌شوند', + 'calendarWritePermissionDesc': + 'برای ایجاد رویدادها و یادآوری‌های تقویم استفاده می‌شود', + 'calendarFullAccessPermissionDesc': + 'برای خواندن و مدیریت رویدادها و یادآوری‌های تقویم استفاده می‌شود', + 'locationPermissionDesc': + 'برای دریافت اطلاعات موقعیت مکانی فعلی استفاده می‌شود', 'appFunctionNeeds': 'عملکرد برنامه نیاز دارد', 'authorized': 'مجاز', 'unauthorized': 'غیرمجاز', @@ -915,43 +987,69 @@ const Map faIR = { 'permissionRequestError': 'خطا در درخواست مجوز', 'phonePermissionDetailDesc': 'عملکرد تماس تلفنی به مجوز تلفن نیاز دارد', 'smsPermissionDetailDesc': 'عملکرد پیامک به مجوز پیامک نیاز دارد', - 'alarmPermissionDetailDesc': 'این مجوز برای تنظیم زنگ‌های هشدار دقیق و اطمینان از فعال شدن یادآوری‌ها به موقع مورد نیاز است', - 'calendarWritePermissionDetailDesc': 'ایجاد رویدادهای تقویم به مجوز نوشتن در تقویم نیاز دارد', - 'calendarFullAccessPermissionDetailDesc': 'مدیریت رویدادهای تقویم به مجوز دسترسی کامل به تقویم نیاز دارد', - 'locationPermissionDetailDesc': 'دریافت اطلاعات موقعیت مکانی به مجوز موقعیت مکانی نیاز دارد', + 'alarmPermissionDetailDesc': + 'این مجوز برای تنظیم زنگ‌های هشدار دقیق و اطمینان از فعال شدن یادآوری‌ها به موقع مورد نیاز است', + 'calendarWritePermissionDetailDesc': + 'ایجاد رویدادهای تقویم به مجوز نوشتن در تقویم نیاز دارد', + 'calendarFullAccessPermissionDetailDesc': + 'مدیریت رویدادهای تقویم به مجوز دسترسی کامل به تقویم نیاز دارد', + 'locationPermissionDetailDesc': + 'دریافت اطلاعات موقعیت مکانی به مجوز موقعیت مکانی نیاز دارد', 'contactsPermissionDesc': 'برای دسترسی به اطلاعات مخاطبین استفاده می‌شود', - 'contactsPermissionDetailDesc': 'عملکرد تماس تلفنی و پیامک برای انتخاب مخاطبین به مجوز مخاطبین نیاز دارد', - 'bluetoothPermissionDesc': 'برای اتصال و مدیریت دستگاه‌های بلوتوث استفاده می‌شود', - 'bluetoothPermissionDetailDesc': 'اتصال به هدفون‌های بلوتوث و سایر دستگاه‌ها به مجوز بلوتوث نیاز دارد', - 'bluetoothScanPermissionDesc': 'برای اسکن دستگاه‌های بلوتوث اطراف استفاده می‌شود', - 'bluetoothScanPermissionDetailDesc': 'اسکن دستگاه‌های بلوتوث اطراف به مجوز اسکن بلوتوث نیاز دارد', - 'bluetoothConnectPermissionDesc': 'برای اتصال به دستگاه‌های بلوتوث استفاده می‌شود', - 'bluetoothConnectPermissionDetailDesc': 'اتصال به دستگاه‌های بلوتوث به مجوز اتصال بلوتوث نیاز دارد', + 'contactsPermissionDetailDesc': + 'عملکرد تماس تلفنی و پیامک برای انتخاب مخاطبین به مجوز مخاطبین نیاز دارد', + 'bluetoothPermissionDesc': + 'برای اتصال و مدیریت دستگاه‌های بلوتوث استفاده می‌شود', + 'bluetoothPermissionDetailDesc': + 'اتصال به هدفون‌های بلوتوث و سایر دستگاه‌ها به مجوز بلوتوث نیاز دارد', + 'bluetoothScanPermissionDesc': + 'برای اسکن دستگاه‌های بلوتوث اطراف استفاده می‌شود', + 'bluetoothScanPermissionDetailDesc': + 'اسکن دستگاه‌های بلوتوث اطراف به مجوز اسکن بلوتوث نیاز دارد', + 'bluetoothConnectPermissionDesc': + 'برای اتصال به دستگاه‌های بلوتوث استفاده می‌شود', + 'bluetoothConnectPermissionDetailDesc': + 'اتصال به دستگاه‌های بلوتوث به مجوز اتصال بلوتوث نیاز دارد', 'notificationPermissionDesc': 'برای ارسال پیام‌های اعلان استفاده می‌شود', - 'notificationPermissionDetailDesc': 'برنامه برای ارسال هشدارها و پیام‌های مهم به شما به مجوز اعلان نیاز دارد', - 'appNeedsPermissionForFullFunction': 'برنامه برای ارائه عملکرد کامل به این مجوز نیاز دارد', - 'permanentDenialText': 'شما مجوز {permission} را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات برنامه بروید', + 'notificationPermissionDetailDesc': + 'برنامه برای ارسال هشدارها و پیام‌های مهم به شما به مجوز اعلان نیاز دارد', + 'appNeedsPermissionForFullFunction': + 'برنامه برای ارائه عملکرد کامل به این مجوز نیاز دارد', + 'permanentDenialText': + 'شما مجوز {permission} را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات برنامه بروید', 'goToSettings': 'رفتن به تنظیمات', // 权限申请 'bluetoothScan': 'اسکن بلوتوث', 'bluetoothConnect': 'اتصال بلوتوث', - 'bluetoothScanExplanation': 'برنامه برای اسکن دستگاه‌های بلوتوث اطراف به مجوز اسکن بلوتوث نیاز دارد.', - 'bluetoothConnectExplanation': 'برنامه برای اتصال به دستگاه‌های بلوتوث به مجوز اتصال بلوتوث نیاز دارد.', - 'locationForBluetoothExplanation': 'برنامه برای اسکن دستگاه‌های بلوتوث به مجوز موقعیت مکانی نیاز دارد.', - 'bluetoothScanPermanentDenial': 'مجوز اسکن بلوتوث برای همیشه رد شده است، لطفاً برای فعال کردن آن به صورت دستی به تنظیمات بروید.', - 'bluetoothConnectPermanentDenial': 'مجوز اتصال بلوتوث برای همیشه رد شده است، لطفاً برای فعال کردن آن به صورت دستی به تنظیمات بروید.', - 'locationPermanentDenial': 'Location permission has been permanently denied, please go to settings to enable it manually.', + 'bluetoothScanExplanation': + 'برنامه برای اسکن دستگاه‌های بلوتوث اطراف به مجوز اسکن بلوتوث نیاز دارد.', + 'bluetoothConnectExplanation': + 'برنامه برای اتصال به دستگاه‌های بلوتوث به مجوز اتصال بلوتوث نیاز دارد.', + 'locationForBluetoothExplanation': + 'برنامه برای اسکن دستگاه‌های بلوتوث به مجوز موقعیت مکانی نیاز دارد.', + 'bluetoothScanPermanentDenial': + 'مجوز اسکن بلوتوث برای همیشه رد شده است، لطفاً برای فعال کردن آن به صورت دستی به تنظیمات بروید.', + 'bluetoothConnectPermanentDenial': + 'مجوز اتصال بلوتوث برای همیشه رد شده است، لطفاً برای فعال کردن آن به صورت دستی به تنظیمات بروید.', + 'locationPermanentDenial': + 'Location permission has been permanently denied, please go to settings to enable it manually.', 'notificationPermission': 'اعلان', 'locationPermission': 'موقعیت مکانی', - 'notificationPermissionExplanation': 'مجوز اعلان برای نمایش وضعیت پخش موسیقی مورد نیاز است.', - 'locationPermissionExplanation': 'مجوز موقعیت مکانی برای دریافت موقعیت مکانی فعلی مورد نیاز است.', - 'notificationPermissionPermanentDenial': 'شما مجوز اعلان را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات بروید.', - 'locationPermissionPermanentDenial': 'شما مجوز موقعیت مکانی را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات بروید.', + 'notificationPermissionExplanation': + 'مجوز اعلان برای نمایش وضعیت پخش موسیقی مورد نیاز است.', + 'locationPermissionExplanation': + 'مجوز موقعیت مکانی برای دریافت موقعیت مکانی فعلی مورد نیاز است.', + 'notificationPermissionPermanentDenial': + 'شما مجوز اعلان را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات بروید.', + 'locationPermissionPermanentDenial': + 'شما مجوز موقعیت مکانی را برای همیشه رد کرده‌اید، لطفاً برای فعال کردن آن به تنظیمات بروید.', //'microphonePermission': '录音', 'storagePermission': 'ذخیره‌سازی', - 'microphonePermissionExplanation': 'ما برای ضبط محتوای صوتی به مجوز میکروفون نیاز داریم.', - 'storagePermissionExplanation': 'ما به مجوز ذخیره‌سازی نیاز داریم تا شما بتوانید فایل‌های صوتی را انتخاب و آپلود کنید.', + 'microphonePermissionExplanation': + 'ما برای ضبط محتوای صوتی به مجوز میکروفون نیاز داریم.', + 'storagePermissionExplanation': + 'ما به مجوز ذخیره‌سازی نیاز داریم تا شما بتوانید فایل‌های صوتی را انتخاب و آپلود کنید.', 'microphonePermissionPermanentDenial': 'مجوز میکروفون برای همیشه رد شده است. برای ادامه استفاده از این ویژگی، لطفاً به تنظیمات برنامه بروید تا مجوز میکروفون را به صورت دستی فعال کنید.', 'storagePermissionPermanentDenial': @@ -961,7 +1059,8 @@ const Map faIR = { 'permissionUtilNeed': 'نیاز به مجوز ', 'permissionUtilPermission': ' ', 'permissionUtilRestricted': ' مجوز محدود شده است', - 'permissionUtilRestrictedMessage': 'این ویژگی در دستگاه فعلی در دسترس نیست یا محدود شده است، لطفاً تنظیمات دستگاه یا محدودیت‌های سیستم را بررسی کنید', + 'permissionUtilRestrictedMessage': + 'این ویژگی در دستگاه فعلی در دسترس نیست یا محدود شده است، لطفاً تنظیمات دستگاه یا محدودیت‌های سیستم را بررسی کنید', 'permissionUtilConfirm': 'تأیید', // 版本更新对话框 @@ -970,8 +1069,10 @@ const Map faIR = { 'updateNow': 'اکنون به‌روزرسانی کن', // 立即更新按钮 'checkUpdate': 'بررسی به‌روزرسانی', // 检查更新按钮 'updateFailed': 'به‌روزرسانی ناموفق بود', // 更新失败提示 - 'cannotOpenAppStore': 'نمی‌توان فروشگاه برنامه را باز کرد، لطفاً به صورت دستی به‌روزرسانی کنید', // 无法打开应用商店提示 - 'updateErrorRetry': 'خطا در طول به‌روزرسانی رخ داد، لطفاً بعداً دوباره تلاش کنید', // 更新错误重试提示 + 'cannotOpenAppStore': + 'نمی‌توان فروشگاه برنامه را باز کرد، لطفاً به صورت دستی به‌روزرسانی کنید', // 无法打开应用商店提示 + 'updateErrorRetry': + 'خطا در طول به‌روزرسانی رخ داد، لطفاً بعداً دوباره تلاش کنید', // 更新错误重试提示 //国家列表 "邮箱": "ایمیل", @@ -1107,7 +1208,8 @@ const Map faIR = { "selectTargetLanguage": "انتخاب زبان مقصد", "me": "من", "counterPart": "طرف مقابل", - "bluetoothCallStateError": "Please make sure the Bluetooth headset is connected to the phone and in a call state", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1225,12 @@ const Map faIR = { "historyRecords": "History Records", "clearResults": "Clear Results", "clearHistory": "پاک کردن تاریخچه", - "clearHistoryConfirm": "آیا مطمئن هستید که می‌خواهید تمام تاریخچه ترجمه را پاک کنید؟ این عمل قابل بازگشت نیست.", + "clearHistoryConfirm": + "آیا مطمئن هستید که می‌خواهید تمام تاریخچه ترجمه را پاک کنید؟ این عمل قابل بازگشت نیست.", "unknownLanguage": "زبان ناشناخته", "deleteSessionRecord": "حذف سابقه جلسه", - "deleteSessionConfirm": "آیا مطمئن هستید که می‌خواهید تمام سوابق ترجمه این جلسه را حذف کنید؟ این عمل قابل بازگشت نیست.", + "deleteSessionConfirm": + "آیا مطمئن هستید که می‌خواهید تمام سوابق ترجمه این جلسه را حذف کنید؟ این عمل قابل بازگشت نیست.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1262,20 @@ const Map faIR = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1197,9 +1306,11 @@ const Map faIR = { "summaryGenerated": "خلاصه ایجاد شد", "generating": "در حال ایجاد...", "regenerate": "ایجاد مجدد", - "summaryTimeoutMessage": "درخواست ایجاد خلاصه به پایان رسید، احتمالاً به دلیل مشکلات شبکه یا مشغولی سرور.", + "summaryTimeoutMessage": + "درخواست ایجاد خلاصه به پایان رسید، احتمالاً به دلیل مشکلات شبکه یا مشغولی سرور.", "deleteTranslationRecord": "حذف سابقه ترجمه", - "deleteTranslationConfirm": "آیا مطمئن هستید که می‌خواهید این سابقه ترجمه را حذف کنید؟ این عمل قابل بازگشت نیست.", + "deleteTranslationConfirm": + "آیا مطمئن هستید که می‌خواهید این سابقه ترجمه را حذف کنید؟ این عمل قابل بازگشت نیست.", "originalText": "متن اصلی", "translatedText": "متن ترجمه‌شده", "sessionSummary": "خلاصه جلسه", @@ -1227,19 +1338,25 @@ const Map faIR = { // 配对状态文本 "readyToPair": "آماده برای جفت‌سازی", "preparingPairingEnvironment": "در حال آماده‌سازی محیط جفت‌سازی...", - "connectDeepSoundViaSystemBluetooth": "لطفاً ابتدا دستگاه Voitrans را از طریق بلوتوث سیستم متصل کنید", + "connectDeepSoundViaSystemBluetooth": + "لطفاً ابتدا دستگاه Voitrans را از طریق بلوتوث سیستم متصل کنید", "deviceBindingConfirm": "تأیید اتصال دستگاه...", "establishingDeviceAssociation": "در حال برقراری ارتباط دستگاه...", "waitingCompletePairing": "لطفاً صبر کنید، در حال تکمیل جفت‌سازی...", - "pairingSuccessRedirecting": "جفت‌سازی موفقیت‌آمیز بود! در حال هدایت به صفحه اصلی...", + "pairingSuccessRedirecting": + "جفت‌سازی موفقیت‌آمیز بود! در حال هدایت به صفحه اصلی...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "لطفاً اطمینان حاصل کنید که دستگاه متصل Voitrans است", - "deviceAlreadyBoundToOtherAccount": "این دستگاه قبلاً به حساب دیگری متصل شده است", + "ensureConnectedDeepSoundDevice": + "لطفاً اطمینان حاصل کنید که دستگاه متصل Voitrans است", + "deviceAlreadyBoundToOtherAccount": + "این دستگاه قبلاً به حساب دیگری متصل شده است", "deviceAssociationFailed": "ارتباط دستگاه ناموفق بود، لطفاً دوباره تلاش کنید", - "scanTimeoutEnsureDeviceNearby": "پایان مهلت اسکن، لطفاً اطمینان حاصل کنید که دستگاه در نزدیکی است", + "scanTimeoutEnsureDeviceNearby": + "پایان مهلت اسکن، لطفاً اطمینان حاصل کنید که دستگاه در نزدیکی است", "networkError": "خطای شبکه", - "authorizationFailedCheckCode": "مجوز ناموفق بود، لطفاً کد مجوز را بررسی کنید", + "authorizationFailedCheckCode": + "مجوز ناموفق بود، لطفاً کد مجوز را بررسی کنید", "pairingFailedRetry": "جفت‌سازی ناموفق بود، لطفاً دوباره تلاش کنید", // 配对控制器相关 @@ -1248,7 +1365,8 @@ const Map faIR = { 'deviceDisconnected': 'دستگاه قطع شد', 'readyToStartPairing': 'آماده برای شروع جفت‌سازی', 'checkingEnvironment': 'در حال بررسی محیط...', - 'ensureHeadsetOnAndPairingMode': 'لطفاً اطمینان حاصل کنید که هدست روشن و در حالت جفت‌سازی است', + 'ensureHeadsetOnAndPairingMode': + 'لطفاً اطمینان حاصل کنید که هدست روشن و در حالت جفت‌سازی است', //'goToBluetoothSettings': '前往蓝牙设置', //'verifyingDevice': '正在验证设备...', //'confirmBinding': '确认绑定', @@ -1266,19 +1384,26 @@ const Map faIR = { 'verificationFailedRetry': 'تأیید ناموفق بود، لطفاً دوباره تلاش کنید', 'invalidDeviceAddress': 'آدرس دستگاه نامعتبر است', 'bleDeviceAssociationFailed': 'ارتباط دستگاه BLE ناموفق بود', - 'deviceAssociationFailedRetry': 'ارتباط دستگاه ناموفق بود، لطفاً دوباره تلاش کنید', - 'bleConnectionTimeoutRetry': 'پایان مهلت اتصال BLE. لطفاً ایرفون را مجدداً راه‌اندازی کرده و دوباره تلاش کنید', + 'deviceAssociationFailedRetry': + 'ارتباط دستگاه ناموفق بود، لطفاً دوباره تلاش کنید', + 'bleConnectionTimeoutRetry': + 'پایان مهلت اتصال BLE. لطفاً ایرفون را مجدداً راه‌اندازی کرده و دوباره تلاش کنید', 'blePairingStartupFailed': 'شروع جفت‌سازی BLE ناموفق بود', 'bleConnectionFailed': 'اتصال BLE ناموفق بود', - 'deviceAuthorizationFailedCheckCode': 'مجوز دستگاه ناموفق بود، لطفاً کد مجوز را بررسی کنید', + 'deviceAuthorizationFailedCheckCode': + 'مجوز دستگاه ناموفق بود، لطفاً کد مجوز را بررسی کنید', ///iOS蓝牙引导窗 'bluetoothGuideTitle': 'فعال‌سازی دستی بلوتوث مورد نیاز است', // 需要手动开启蓝牙 'bluetoothGuideSteps': 'لطفاً این مراحل را دنبال کنید:', // 请按照以下步骤操作: - 'bluetoothGuideStep1': 'فعال کردن بلوتوث: تنظیمات ← بلوتوث ← روشن کردن', // 开启蓝牙:设置 → 蓝牙 → 开启 - 'bluetoothGuideStep2': 'اتصال دستگاه: دستگاه خود را در «دستگاه‌های من» پیدا کنید و برای اتصال ضربه بزنید', // 连接设备:在"我的设备"中找到您的设备并点击连接 - 'bluetoothGuideStep3': 'بازگشت به برنامه برای ادامه فرآیند جفت‌سازی', // 返回应用继续配对流程 - 'bluetoothGuideTip': 'نکته: می‌توانید آیکون بلوتوث را در مرکز کنترل به مدت طولانی فشار دهید تا به سرعت به تنظیمات بلوتوث دسترسی پیدا کنید', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + 'bluetoothGuideStep1': + 'فعال کردن بلوتوث: تنظیمات ← بلوتوث ← روشن کردن', // 开启蓝牙:设置 → 蓝牙 → 开启 + 'bluetoothGuideStep2': + 'اتصال دستگاه: دستگاه خود را در «دستگاه‌های من» پیدا کنید و برای اتصال ضربه بزنید', // 连接设备:在"我的设备"中找到您的设备并点击连接 + 'bluetoothGuideStep3': + 'بازگشت به برنامه برای ادامه فرآیند جفت‌سازی', // 返回应用继续配对流程 + 'bluetoothGuideTip': + 'نکته: می‌توانید آیکون بلوتوث را در مرکز کنترل به مدت طولانی فشار دهید تا به سرعت به تنظیمات بلوتوث دسترسی پیدا کنید', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 'iKnow': 'متوجه شدم', // 我知道了 //用户反馈页 @@ -1291,10 +1416,12 @@ const Map faIR = { 'contactHint': 'ایمیل/تلفن، تا بتوانیم با شما تماس بگیریم', 'submit': 'ارسال', 'feedbackSubmitSuccess': 'بازخورد با موفقیت ارسال شد، متشکریم!', - 'feedbackSubmitFailed': 'ارسال بازخورد ناموفق بود، لطفاً بعداً دوباره تلاش کنید', + 'feedbackSubmitFailed': + 'ارسال بازخورد ناموفق بود، لطفاً بعداً دوباره تلاش کنید', // OTA升级模块 - "upgradeExitConfirm": "در حال ارتقا، خروج فرآیند ارتقا را قطع خواهد کرد. آیا مطمئن هستید که می‌خواهید خارج شوید؟", + "upgradeExitConfirm": + "در حال ارتقا، خروج فرآیند ارتقا را قطع خواهد کرد. آیا مطمئن هستید که می‌خواهید خارج شوید؟", "deviceModel": "مدل دستگاه", "unknownDevice": "دستگاه ناشناخته", "currentFirmwareVersion": "نسخه سفت‌افزار فعلی", @@ -1307,14 +1434,18 @@ const Map faIR = { "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.", + "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": "در حال شارژ", "updateContent": "محتوای به‌روزرسانی", - "removeEarbudsEnsureBattery": "هر دو ایرباد را بردارید و اطمینان حاصل کنید که سطح باتری بالای ۲۰٪ است", + "removeEarbudsEnsureBattery": + "هر دو ایرباد را بردارید و اطمینان حاصل کنید که سطح باتری بالای ۲۰٪ است", // 音乐列表页面 "noMusic": "بدون موسیقی", // 暂无音乐 @@ -1376,8 +1507,10 @@ const Map faIR = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 dabb4447a..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", @@ -71,7 +72,8 @@ const Map fiFI = { // 登录页 "welcome": "Tervetuloa", - "loginTips": "Kirjaudu sisään tai rekisteröidy puhelinnumerollasi tai sähköpostillasi", + "loginTips": + "Kirjaudu sisään tai rekisteröidy puhelinnumerollasi tai sähköpostillasi", "accountNumber": "Puhelinnumero tai sähköposti", "verificationCode": "Vahvistuskoodi", "getCode": "Hae koodi", @@ -90,7 +92,8 @@ const Map fiFI = { "tip": "Vinkki", "pleaseEnterCompleteCode": "Syötä koko vahvistuskoodi", "loginFailed": "Kirjautuminen epäonnistui, yritä uudelleen", - 'pleaseAcceptPrivacyPolicy': 'Lue ja hyväksy ensin tietosuojakäytäntö ja käyttäjäsopimus', + 'pleaseAcceptPrivacyPolicy': + 'Lue ja hyväksy ensin tietosuojakäytäntö ja käyttäjäsopimus', "enterVerificationCode": "Syötä vahvistuskoodi", "verificationCodeSentTo": "Vahvistuskoodi lähetetty osoitteeseen", "resendVerificationCode": "Lähetä vahvistuskoodi uudelleen", @@ -99,7 +102,8 @@ const Map fiFI = { // 隐私政策弹窗 "loginDeclaration": "Voitransin ilmoitus", // Voitrans 声明 - "welcomeToThisApp": "Tervetuloa Voitransiin, lue huolellisesti", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Tervetuloa Voitransiin, lue huolellisesti", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +119,29 @@ const Map fiFI = { "signal": "Signaali", "deviceId": "Laitteen tunnus", "firmwareVersion": "Laiteohjelmiston versio", - "disconnectedDevice": "Ei yhdistettyä laitetta, yhdistä napsauttamalla alla olevaa painiketta", + "disconnectedDevice": + "Ei yhdistettyä laitetta, yhdistä napsauttamalla alla olevaa painiketta", "connectDevice": "Yhdistä laite", "topAiExperiences": "Suosituimmat AI-kokemukset", "aiAssistant": "Kattava AI-avustaja", - "aiAssistantInfo": "Yksinomainen 24/7-konsultti, vastaa kysymyksiin, antaa ehdotuksia", + "aiAssistantInfo": + "Yksinomainen 24/7-konsultti, vastaa kysymyksiin, antaa ehdotuksia", "interpretation": "Simultaanitulkkaus", - "simultaneousInterpretationInfo": "Reaaliaikainen käännös yli 80 kielelle, huolettomat ulkomaanmatkat", + "simultaneousInterpretationInfo": + "Reaaliaikainen käännös yli 80 kielelle, huolettomat ulkomaanmatkat", "aiCompanion": "Perheen seuralainen", "aiCompanionInfo": "Ymmärtää sinua, lämmin seura", "homeSlogan": "Maailman yhdistäminen, äänen ylittäminen", - "turnEarphones": "Avaa kuulokkeiden latauskotelo ja aseta kuulokkeet korviisi", + "turnEarphones": + "Avaa kuulokkeiden latauskotelo ja aseta kuulokkeet korviisi", "currentlyConnected": "Tällä hetkellä yhdistetty:", "unsystemSetup": "Siirry järjestelmäasetuksiin", "talkLater": "Myöhemmin", "initializing": "Alustetaan...", "bluetoothInitializationFailure": "Bluetooth-palvelun alustus epäonnistui", "checkingPermissions": "Tarkistetaan käyttöoikeuksia...", - "lackPermissions": "Bluetooth-käyttöoikeudet puuttuvat ja lokaatioon pääsy on tarpeen", + "lackPermissions": + "Bluetooth-käyttöoikeudet puuttuvat ja lokaatioon pääsy on tarpeen", "searchingDevice": "Etsitään laitteita...", "findConnectedDevice": "Yhdistetty laite löytyi", "notFound": "Yhdistettyä Bluetooth-laitetta ei löytynyt", @@ -175,7 +184,8 @@ const Map fiFI = { "healthConsultant": "Monitoiminen AI-keskustelu", "healthConsultantInfo": "Tarjoaa enemmän AI-keskustelutoimintoja", "conferenceAssistant": "Yrityskokousavustaja", - "conferenceAssistantInfo": "Reaaliaikainen pöytäkirjan pito, monikielinen käännös", + "conferenceAssistantInfo": + "Reaaliaikainen pöytäkirjan pito, monikielinen käännös", "usageStats": "Käyttöstatistiikka", "usageStatsInfo": "Näytä sovelluksen käytön statistiikka", "scene": "Skenaario", @@ -218,7 +228,8 @@ const Map fiFI = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +285,10 @@ const Map fiFI = { '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.', + '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', @@ -284,27 +297,35 @@ const Map fiFI = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +334,10 @@ const Map fiFI = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +352,8 @@ const Map fiFI = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Ohita", @@ -355,7 +379,8 @@ const Map fiFI = { '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”', + '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', @@ -405,7 +430,8 @@ const Map fiFI = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +486,54 @@ const Map fiFI = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +545,8 @@ const Map fiFI = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +566,8 @@ const Map fiFI = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +616,8 @@ const Map fiFI = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +642,8 @@ const Map fiFI = { "cloudSync": "Pääsyvaraus cloud-synkronointiin", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Yhdistetty laite:", "accountId": "Tilin tunnus:", "systemSetting": "Järjestelmäasetukset", @@ -612,7 +656,8 @@ const Map fiFI = { "privacySettings": "Tietosuoja-asetukset", "privacySettingsInfo": "Hallitse tiedonkeruuta ja käyttöoikeuksia", "permissionManagement": "Käyttöoikeuksien hallinta", // 权限管理 - "permissionManagementInfo": "Hallitse sovelluksen käyttöoikeusasetuksia", // 管理应用权限设置 + "permissionManagementInfo": + "Hallitse sovelluksen käyttöoikeusasetuksia", // 管理应用权限设置 "aboutApplication": "Tietoja sovelluksesta", "versions": "Versio", "checkUpdates": "Tarkista päivitykset", @@ -621,9 +666,11 @@ const Map fiFI = { "voiceServiceInfo": "Valitse puheentunnistus- ja synteesipalvelu", "selectVoiceService": "Valitse äänipalvelu", "azureVoiceService": "Azure-äänipalvelu", - "azureVoiceServiceInfo": "Microsoftin pilvipohjainen äänipalvelu, tukee korkealaatuista puhesynteesiä ja -tunnistusta", + "azureVoiceServiceInfo": + "Microsoftin pilvipohjainen äänipalvelu, tukee korkealaatuista puhesynteesiä ja -tunnistusta", "flutterVoiceService": "Flutter paikallinen äänipalvelu", - "flutterVoiceServiceInfo": "Laitteen paikallinen äänipalvelu, voidaan käyttää ilman internetyhteyttä", + "flutterVoiceServiceInfo": + "Laitteen paikallinen äänipalvelu, voidaan käyttää ilman internetyhteyttä", 'timbreService': 'Äänensävypalvelu', 'timbreServiceInfo': 'Valitse äänensävyn puhesynteesipalvelu', 'defaultTimbre': 'Oletusäänensävy', @@ -634,7 +681,8 @@ const Map fiFI = { 'pleaseRead': 'Lue ääneen', 'completeRecording': 'Lopeta tallennus', "firmwareUpgrade": "Laiteohjelmiston päivitys", - "bleHeadsetFirmwareUpgrade": "BLE-kuulokkeiden laiteohjelmiston version päivitys", + "bleHeadsetFirmwareUpgrade": + "BLE-kuulokkeiden laiteohjelmiston version päivitys", "deviceManagement": "Laitehallinta", "manageConnectedDevices": "Hallitse yhdistettyjä Bluetooth-laitteita", @@ -652,7 +700,8 @@ const Map fiFI = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Reaaliaikainen puhekeskustelu", - "realtimeVoiceChatInfo": "Koe älykäs puhevuorovaikutustoiminto (toiminnon esikatselu)", + "realtimeVoiceChatInfo": + "Koe älykäs puhevuorovaikutustoiminto (toiminnon esikatselu)", "loading": "Ladataan...", //设备管理页面 @@ -667,7 +716,8 @@ const Map fiFI = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -721,10 +771,14 @@ const Map fiFI = { '• Hallitsemaan kuulokkeiden toimintoja\n\n' 'Miten voin auttaa sinua?', 'microphonePermission': 'Mikrofoni', - 'voiceRecognitionPermissionText': 'Puheentunnistus vaatii mikrofonin käyttöoikeuden.', - 'voiceTranslationPermissionText': 'Puheentunnistus ja -kääntäminen vaativat mikrofonin käyttöoikeuden.', - 'phoneCallPermissionText': 'Soittaminen vaatii mikrofonin käyttöoikeuden äänipuheluita varten.', - 'permissionDeniedText': 'Olet pysyvästi kieltänyt mikrofonin käyttöoikeuden, ota se käyttöön järjestelmäasetuksista.', + 'voiceRecognitionPermissionText': + 'Puheentunnistus vaatii mikrofonin käyttöoikeuden.', + 'voiceTranslationPermissionText': + 'Puheentunnistus ja -kääntäminen vaativat mikrofonin käyttöoikeuden.', + 'phoneCallPermissionText': + 'Soittaminen vaatii mikrofonin käyttöoikeuden äänipuheluita varten.', + 'permissionDeniedText': + 'Olet pysyvästi kieltänyt mikrofonin käyttöoikeuden, ota se käyttöön järjestelmäasetuksista.', 'startVoiceInput': 'Aloita puhesyöttö', 'startPhoneCallMode': 'Aloita puhelutila, aloita puhesyöttö', @@ -747,7 +801,8 @@ const Map fiFI = { 'privacyRelated': 'Tietosuojaan liittyvä', 'copyrightViolation': 'Loukkaa tekijänoikeuksiani, mainettani jne.', 'other': 'Muu', - 'reportDescriptionHint': 'Haluamme tietää, miksi ilmoitat, voit kuvailla kohtaamaasi ongelmaa.', + 'reportDescriptionHint': + 'Haluamme tietää, miksi ilmoitat, voit kuvailla kohtaamaasi ongelmaa.', //'submit': '提交', //Message_bubble @@ -779,13 +834,20 @@ const Map fiFI = { 'lowest': 'Matalin', 'futureForecast': 'Tulevaisuuden ennuste', 'hotWeatherTip': 'Tänään on kuuma, varo lämpöhalvausta ja juo paljon vettä', - 'coldWeatherTip': 'Tänään lämpötila on alhainen, pukeudu lämpimästi ulos mennessäsi, jotta et vilustu', - 'rainyWeatherTip': 'Tänään sataa, ota sateenvarjo mukaan ulos mennessäsi ja ole varovainen', - 'snowyWeatherTip': 'Tänään sataa lunta, tie on liukas, ole varovainen ja pukeudu lämpimästi', - 'foggyWeatherTip': 'Tänään on sumuista, näkyvyys on huono, käytä maskia ulos mennessäsi', - 'windyWeatherTip': 'Tänään on tuulista, ole varovainen ulos mennessäsi ja kiinnitä tavarasi', - 'sunnyWeatherTip': 'Tänään on aurinkoista ja UV-säteily on voimakasta, käytä aurinkovoidetta ulos mennessäsi', - 'temperatureDifferenceTip': 'Tänään on suuri lämpötilaero päivän ja yön välillä, säädä vaatetustasi', + 'coldWeatherTip': + 'Tänään lämpötila on alhainen, pukeudu lämpimästi ulos mennessäsi, jotta et vilustu', + 'rainyWeatherTip': + 'Tänään sataa, ota sateenvarjo mukaan ulos mennessäsi ja ole varovainen', + 'snowyWeatherTip': + 'Tänään sataa lunta, tie on liukas, ole varovainen ja pukeudu lämpimästi', + 'foggyWeatherTip': + 'Tänään on sumuista, näkyvyys on huono, käytä maskia ulos mennessäsi', + 'windyWeatherTip': + 'Tänään on tuulista, ole varovainen ulos mennessäsi ja kiinnitä tavarasi', + 'sunnyWeatherTip': + 'Tänään on aurinkoista ja UV-säteily on voimakasta, käytä aurinkovoidetta ulos mennessäsi', + 'temperatureDifferenceTip': + 'Tänään on suuri lämpötilaero päivän ja yön välillä, säädä vaatetustasi', 'comfortableWeatherTip': 'Tänään sää on miellyttävä, hyvä aika ulkoiluun', "monday": "Ma", "tuesday": "Ti", @@ -838,22 +900,30 @@ const Map fiFI = { "logout": "Kirjaudu ulos", "logoutTips": "Oletko varma, että haluat kirjautua ulos nykyisestä tilistä?", 'deleteAccount': 'Poista tili', - 'deleteAccountTips': 'Oletko varma, että haluat poistaa tilisi pysyvästi? Tätä toimintoa ei voi kumota.', + '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': 'Verkkoyhteys epäonnistui, tarkista verkkoyhteyden asetukset ja yritä uudelleen', - 'serverTemporarilyUnavailable': 'Palvelin on väliaikaisesti poissa käytöstä, yritä myöhemmin uudelleen', - 'loginExpiredPleaseRelogin': 'Istuntosi on vanhentunut, kirjaudu sisään uudelleen', - 'noPermissionForThisOperation': 'Sinulla ei ole lupaa suorittaa tätä toimintoa', + 'networkConnectionFailed': + 'Verkkoyhteys epäonnistui, tarkista verkkoyhteyden asetukset ja yritä uudelleen', + 'serverTemporarilyUnavailable': + 'Palvelin on väliaikaisesti poissa käytöstä, yritä myöhemmin uudelleen', + 'loginExpiredPleaseRelogin': + 'Istuntosi on vanhentunut, kirjaudu sisään uudelleen', + 'noPermissionForThisOperation': + 'Sinulla ei ole lupaa suorittaa tätä toimintoa', 'requestedResourceNotFound': 'Pyydettyä resurssia ei löytynyt', - 'imageProcessingFailedPleaseReselect': 'Kuvan käsittely epäonnistui, valitse toinen kuva', + 'imageProcessingFailedPleaseReselect': + 'Kuvan käsittely epäonnistui, valitse toinen kuva', 'operationFailedPleaseRetry': 'Toiminto epäonnistui, yritä uudelleen', 'serverReturnedError': 'Palvelin palautti virheen', 'serverError': 'Palvelinvirhe', - 'networkConnectionFailedCheckSettings': 'Verkkoyhteys epäonnistui, tarkista verkkoyhteyden asetukset', - 'serverInternalErrorRetryLater': 'Sisäinen palvelinvirhe, yritä myöhemmin uudelleen', + 'networkConnectionFailedCheckSettings': + 'Verkkoyhteys epäonnistui, tarkista verkkoyhteyden asetukset', + 'serverInternalErrorRetryLater': + 'Sisäinen palvelinvirhe, yritä myöhemmin uudelleen', // Profile 用户交互 //'error': '错误', @@ -872,13 +942,20 @@ const Map fiFI = { // 账号服务相关 '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 已初始化 + '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', @@ -901,9 +978,12 @@ const Map fiFI = { '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': 'Käytetään kalenteritapahtumien ja muistutusten lukemiseen ja hallintaan', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Käytetään kalenteritapahtumien ja muistutusten luomiseen', + 'calendarFullAccessPermissionDesc': + 'Käytetään kalenteritapahtumien ja muistutusten lukemiseen ja hallintaan', 'locationPermissionDesc': 'Käytetään nykyisen sijaintitiedon hakemiseen', 'appFunctionNeeds': 'Sovelluksen toiminto vaatii', 'authorized': 'Hyväksytty', @@ -914,44 +994,68 @@ const Map fiFI = { 'permissionGranted': 'Lupa myönnetty', 'permissionRequestError': 'Virhe luvan pyytämisessä', '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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1065,8 @@ const Map fiFI = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1075,10 @@ const Map fiFI = { 'updateNow': 'Päivitä nyt', // 立即更新按钮 'checkUpdate': 'Tarkista päivitys', // 检查更新按钮 'updateFailed': 'Päivitys epäonnistui', // 更新失败提示 - 'cannotOpenAppStore': 'Sovelluskauppaa ei voi avata, siirry sovelluskauppaan manuaalisesti päivittääksesi', // 无法打开应用商店提示 - 'updateErrorRetry': 'Päivityksen aikana tapahtui virhe, yritä myöhemmin uudelleen', // 更新错误重试提示 + 'cannotOpenAppStore': + 'Sovelluskauppaa ei voi avata, siirry sovelluskauppaan manuaalisesti päivittääksesi', // 无法打开应用商店提示 + 'updateErrorRetry': + 'Päivityksen aikana tapahtui virhe, yritä myöhemmin uudelleen', // 更新错误重试提示 //国家列表 "邮箱": "Sähköposti", @@ -1107,7 +1214,8 @@ const Map fiFI = { "selectTargetLanguage": "Valitse kohdekieli", "me": "Me", "counterPart": "Counterpart", - "bluetoothCallStateError": "Please make sure the Bluetooth headset is connected to the phone and in a call state", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1231,12 @@ const Map fiFI = { "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.", + "clearHistoryConfirm": + "Oletko varma, että haluat tyhjentää kaiken käännöshistorian? Tätä toimintoa ei voi kumota.", "unknownLanguage": "Tuntematon kieli", "deleteSessionRecord": "Poista istunnon tallenne", - "deleteSessionConfirm": "Oletko varma, että haluat poistaa kaikki tämän istunnon käännöstallenteet? Tätä toimintoa ei voi kumota.", + "deleteSessionConfirm": + "Oletko varma, että haluat poistaa kaikki tämän istunnon käännöstallenteet? Tätä toimintoa ei voi kumota.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1268,20 @@ const Map fiFI = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1304,8 @@ const Map fiFI = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Alkuperäinen tallenne", "recordSummary": "Tallenteen yhteenveto", - "clickToGenerateSummary": "Napsauta alla olevaa painiketta luodaksesi istunnon yhteenvedon", + "clickToGenerateSummary": + "Napsauta alla olevaa painiketta luodaksesi istunnon yhteenvedon", "summaryContent": "Yhteenvedon sisältö", "copied": "Kopioitu", "summaryCopiledToClipboard": "Yhteenveto kopioitu leikepöydälle", @@ -1197,9 +1313,11 @@ const Map fiFI = { "summaryGenerated": "Yhteenveto luotu", "generating": "Luodaan...", "regenerate": "Luo uudelleen", - "summaryTimeoutMessage": "Yhteenvedon luontipyyntö aikakatkaistiin, syynä saattaa olla verkko-ongelma tai palvelimen ruuhkaisuus.", + "summaryTimeoutMessage": + "Yhteenvedon luontipyyntö aikakatkaistiin, syynä saattaa olla verkko-ongelma tai palvelimen ruuhkaisuus.", "deleteTranslationRecord": "Poista käännöstallenne", - "deleteTranslationConfirm": "Oletko varma, että haluat poistaa tämän käännöstallenteen? Tätä toimintoa ei voi kumota.", + "deleteTranslationConfirm": + "Oletko varma, että haluat poistaa tämän käännöstallenteen? Tätä toimintoa ei voi kumota.", "originalText": "Alkuperäinen teksti", "translatedText": "Käännetty teksti", "sessionSummary": "Istunnon yhteenveto", @@ -1227,19 +1345,24 @@ const Map fiFI = { // 配对状态文本 "readyToPair": "Valmis paritukseen", "preparingPairingEnvironment": "Valmistellaan paritusympäristöä...", - "connectDeepSoundViaSystemBluetooth": "Yhdistä ensin Voitrans-laitteeseen järjestelmän Bluetoothin kautta", + "connectDeepSoundViaSystemBluetooth": + "Yhdistä ensin Voitrans-laitteeseen järjestelmän Bluetoothin kautta", "deviceBindingConfirm": "Laitteen sidonnan vahvistus...", "establishingDeviceAssociation": "Luodaan laiteyhteyttä...", "waitingCompletePairing": "Odota, paritus on valmis...", "pairingSuccessRedirecting": "Paritus onnistui! Siirrytään etusivulle...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Varmista, että olet yhteydessä Voitrans-laitteeseen", + "ensureConnectedDeepSoundDevice": + "Varmista, että olet yhteydessä Voitrans-laitteeseen", "deviceAlreadyBoundToOtherAccount": "Tämä laite on jo sidottu toiseen tiliin", - "deviceAssociationFailed": "Laiteyhteyden luominen epäonnistui, yritä uudelleen", - "scanTimeoutEnsureDeviceNearby": "Skannaus aikakatkaistiin, varmista, että laite on lähellä", + "deviceAssociationFailed": + "Laiteyhteyden luominen epäonnistui, yritä uudelleen", + "scanTimeoutEnsureDeviceNearby": + "Skannaus aikakatkaistiin, varmista, että laite on lähellä", "networkError": "Verkkovirhe", - "authorizationFailedCheckCode": "Valtuutus epäonnistui, tarkista, onko valtuutuskoodi oikein", + "authorizationFailedCheckCode": + "Valtuutus epäonnistui, tarkista, onko valtuutuskoodi oikein", "pairingFailedRetry": "Paritus epäonnistui, yritä uudelleen", // 配对控制器相关 @@ -1248,7 +1371,8 @@ const Map fiFI = { 'deviceDisconnected': 'Laite irrotettu', 'readyToStartPairing': 'Valmis aloittamaan parituksen', 'checkingEnvironment': 'Tarkistetaan ympäristöä...', - 'ensureHeadsetOnAndPairingMode': 'Varmista, että kuulokkeet ovat päällä ja paritustilassa', + 'ensureHeadsetOnAndPairingMode': + 'Varmista, että kuulokkeet ovat päällä ja paritustilassa', //'goToBluetoothSettings': '前往蓝牙设置', //'verifyingDevice': '正在验证设备...', //'confirmBinding': '确认绑定', @@ -1266,19 +1390,25 @@ const Map fiFI = { 'verificationFailedRetry': 'Vahvistus epäonnistui, yritä uudelleen', 'invalidDeviceAddress': 'Virheellinen laiteosoite', 'bleDeviceAssociationFailed': 'BLE-laiteyhteyden luominen epäonnistui', - 'deviceAssociationFailedRetry': 'Laiteyhteyden luominen epäonnistui, yritä uudelleen', + 'deviceAssociationFailedRetry': + 'Laiteyhteyden luominen epäonnistui, yritä uudelleen', 'bleConnectionTimeoutRetry': 'BLE-yhteyden aikakatkaisu, yritä uudelleen', 'blePairingStartupFailed': 'BLE-parituksen aloitus epäonnistui', 'bleConnectionFailed': 'BLE-yhteys epäonnistui', - 'deviceAuthorizationFailedCheckCode': 'Laitteen valtuutus epäonnistui, tarkista valtuutuskoodi', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', // 我知道了 //用户反馈页 @@ -1290,11 +1420,14 @@ const Map fiFI = { 'contactInfo': 'Yhteystiedot', 'contactHint': 'Sähköposti/puhelin, jotta voimme ottaa sinuun yhteyttä', 'submit': 'Lähetä', - 'feedbackSubmitSuccess': 'Palaute lähetetty onnistuneesti, kiitos palautteestasi!', - 'feedbackSubmitFailed': 'Palautteen lähettäminen epäonnistui, yritä myöhemmin uudelleen', + 'feedbackSubmitSuccess': + 'Palaute lähetetty onnistuneesti, kiitos palautteestasi!', + 'feedbackSubmitFailed': + 'Palautteen lähettäminen epäonnistui, yritä myöhemmin uudelleen', // OTA升级模块 - "upgradeExitConfirm": "Päivitys on käynnissä, poistuminen keskeyttää prosessin, oletko varma, että haluat poistua?", + "upgradeExitConfirm": + "Päivitys on käynnissä, poistuminen keskeyttää prosessin, oletko varma, että haluat poistua?", "deviceModel": "Laitteen malli", "unknownDevice": "Tuntematon laite", "currentFirmwareVersion": "Nykyinen laiteohjelmiston versio", @@ -1307,14 +1440,18 @@ const Map fiFI = { "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.", + "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", "updateContent": "Päivityksen sisältö", - "removeEarbudsEnsureBattery": "Poista molemmat kuulokkeet ja varmista, että molempien akun varaus on yli 20%", + "removeEarbudsEnsureBattery": + "Poista molemmat kuulokkeet ja varmista, että molempien akun varaus on yli 20%", // 音乐列表页面 "noMusic": "Ei musiikkia", // 暂无音乐 @@ -1376,8 +1513,10 @@ const Map fiFI = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 61216c373..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", @@ -71,7 +72,8 @@ const Map frFR = { // 登录页 "welcome": "Bienvenue", - "loginTips": "Veuillez vous connecter ou vous inscrire avec votre numéro de téléphone ou votre e-mail", + "loginTips": + "Veuillez vous connecter ou vous inscrire avec votre numéro de téléphone ou votre e-mail", "accountNumber": "Numéro de téléphone ou e-mail", "verificationCode": "Code de vérification", "getCode": "Obtenir le code", @@ -84,13 +86,15 @@ const Map frFR = { 'selectCountry': 'Sélectionner le pays/région', "email": "E-mail", "phoneNumber": "Numéro de téléphone", - "pleaseEnterContactInfo": "Veuillez saisir le numéro de téléphone ou l'e-mail", + "pleaseEnterContactInfo": + "Veuillez saisir le numéro de téléphone ou l'e-mail", "invalidEmailFormat": "Format d'e-mail invalide", "invalidPhoneFormat": "Format de numéro de téléphone invalide", "tip": "Conseil", "pleaseEnterCompleteCode": "Veuillez saisir le code de vérification complet", "loginFailed": "Échec de la connexion, veuillez réessayer", - 'pleaseAcceptPrivacyPolicy': 'Veuillez d\'abord lire et accepter la politique de confidentialité et l\'accord d\'utilisateur', + 'pleaseAcceptPrivacyPolicy': + 'Veuillez d\'abord lire et accepter la politique de confidentialité et l\'accord d\'utilisateur', "enterVerificationCode": "Saisir le code de vérification", "verificationCodeSentTo": "Code de vérification envoyé à", "resendVerificationCode": "Renvoyer le code de vérification", @@ -99,7 +103,8 @@ const Map frFR = { // 隐私政策弹窗 "loginDeclaration": "Déclaration Voitrans", // Voitrans 声明 - "welcomeToThisApp": "Bienvenue sur Voitrans, veuillez lire attentivement", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Bienvenue sur Voitrans, veuillez lire attentivement", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,7 +120,8 @@ const Map frFR = { "signal": "Signal", "deviceId": "ID de l'appareil", "firmwareVersion": "Version du firmware", - "disconnectedDevice": "Aucun appareil connecté, cliquez sur le bouton ci-dessous", + "disconnectedDevice": + "Aucun appareil connecté, cliquez sur le bouton ci-dessous", "connectDevice": "Connecter l'appareil", "topAiExperiences": "Meilleures expériences IA", "aiAssistant": "Assistant IA", @@ -125,14 +131,17 @@ const Map frFR = { "aiCompanion": "Accompagnement parent-enfant", "aiCompanionInfo": "Vous comprend et offre un accompagnement chaleureux", "homeSlogan": "Connecter le monde, au-delà du son", - "turnEarphones": "Veuillez ouvrir l'étui des écouteurs et mettre les écouteurs dans vos oreilles", + "turnEarphones": + "Veuillez ouvrir l'étui des écouteurs et mettre les écouteurs dans vos oreilles", "currentlyConnected": "Actuellement connecté :", "unsystemSetup": "Aller aux paramètres système", "talkLater": "Rappeler plus tard", "initializing": "Initialisation...", - "bluetoothInitializationFailure": "Échec de l'initialisation du service Bluetooth", + "bluetoothInitializationFailure": + "Échec de l'initialisation du service Bluetooth", "checkingPermissions": "Vérification des autorisations...", - "lackPermissions": "Autorisations Bluetooth requises et accès à la localisation nécessaire", + "lackPermissions": + "Autorisations Bluetooth requises et accès à la localisation nécessaire", "searchingDevice": "Recherche d'appareils...", "findConnectedDevice": "Appareil connecté trouvé", "notFound": "Aucun appareil Bluetooth connecté trouvé", @@ -140,7 +149,8 @@ const Map frFR = { "connectedDevice": "Connecté à l'appareil :", "failedRefreshDevice": "Échec de l'actualisation de l'appareil", "noDeviceFound": "Aucun appareil connecté trouvé", - "failedDeviceInformation": "Impossible d'obtenir les informations de l'appareil", + "failedDeviceInformation": + "Impossible d'obtenir les informations de l'appareil", "unknownEquipment": "Appareil inconnu", "zeroSignal": "Aucun signal", "good": "Bon", @@ -154,7 +164,8 @@ const Map frFR = { 'chargingCase': 'Étui de charge', 'left': 'Gauche', 'right': 'Droite', - 'checkConnectionStatusFailed': 'Échec de la vérification de l\'état de la connexion', + 'checkConnectionStatusFailed': + 'Échec de la vérification de l\'état de la connexion', // 发现页 "searchAi": "Rechercher des fonctions IA...", @@ -175,7 +186,8 @@ const Map frFR = { "healthConsultant": "Chat IA multifonction", "healthConsultantInfo": "Plus de fonctions de chat IA", "conferenceAssistant": "Assistant de réunion d'affaires", - "conferenceAssistantInfo": "Enregistrement de procès-verbaux en temps réel et traduction multilingue", + "conferenceAssistantInfo": + "Enregistrement de procès-verbaux en temps réel et traduction multilingue", "usageStats": "Statistiques d'utilisation", "usageStatsInfo": "Consultez les statistiques d'utilisation de l'application", "scene": "Scénarios", @@ -218,7 +230,8 @@ const Map frFR = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +287,10 @@ const Map frFR = { '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.', + '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', @@ -284,27 +299,35 @@ const Map frFR = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +336,10 @@ const Map frFR = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +354,8 @@ const Map frFR = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Ignorer", @@ -355,7 +381,8 @@ const Map frFR = { '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”", + '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", @@ -405,7 +432,8 @@ const Map frFR = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +488,54 @@ const Map frFR = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +547,8 @@ const Map frFR = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +568,8 @@ const Map frFR = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +618,8 @@ const Map frFR = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +644,8 @@ const Map frFR = { "cloudSync": "Recharge de synchronisation cloud", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Appareil connecté :", "accountId": "ID du compte :", "systemSetting": "Paramètres système", @@ -612,18 +658,22 @@ const Map frFR = { "privacySettings": "Paramètres de confidentialité", "privacySettingsInfo": "Gérer la collecte de données et les autorisations", "permissionManagement": "Gestion des autorisations", // 权限管理 - "permissionManagementInfo": "Gérer les paramètres d'autorisation de l'application", // 管理应用权限设置 + "permissionManagementInfo": + "Gérer les paramètres d'autorisation de l'application", // 管理应用权限设置 "aboutApplication": "À propos", "versions": "Version", "checkUpdates": "Vérifier les mises à jour", "selectLanguage": "Sélectionner la langue", "voiceService": "Service vocal", - "voiceServiceInfo": "Sélectionner le service de reconnaissance et de synthèse vocale", + "voiceServiceInfo": + "Sélectionner le service de reconnaissance et de synthèse vocale", "selectVoiceService": "Sélectionner le service vocal", "azureVoiceService": "Service vocal Azure", - "azureVoiceServiceInfo": "Service basé sur le cloud Microsoft prenant en charge la synthèse et la reconnaissance vocale de haute qualité", + "azureVoiceServiceInfo": + "Service basé sur le cloud Microsoft prenant en charge la synthèse et la reconnaissance vocale de haute qualité", "flutterVoiceService": "Service vocal local", - "flutterVoiceServiceInfo": "Service vocal local de l'appareil sans connexion Internet requise", + "flutterVoiceServiceInfo": + "Service vocal local de l'appareil sans connexion Internet requise", 'timbreService': 'Service de timbre', 'timbreServiceInfo': 'Sélectionner le service de synthèse vocale', 'defaultTimbre': 'Timbre par défaut', @@ -652,7 +702,8 @@ const Map frFR = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": 'Conversation vocale en temps réel', - "realtimeVoiceChatInfo": 'Découvrez les fonctions d\'interaction vocale intelligente (Aperçu)', + "realtimeVoiceChatInfo": + 'Découvrez les fonctions d\'interaction vocale intelligente (Aperçu)', "loading": 'Chargement...', //设备管理页面 @@ -667,7 +718,8 @@ const Map frFR = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -678,7 +730,8 @@ const Map frFR = { "inputMessage": "Saisir un message...", "imListening": "J'écoute...", "canStartTalking": "Vous pouvez commencer à parler", - "addQuestionAboutImage": "Ajouter des questions ou descriptions sur l'image...", + "addQuestionAboutImage": + "Ajouter des questions ou descriptions sur l'image...", "summarizeImageContent": "Résumer le contenu de l'image", "extractImageText": "Extraire le texte de l'image", "translateImageText": "Traduire le texte de l'image", @@ -721,10 +774,14 @@ const Map frFR = { '• Contrôler les fonctions des écouteurs\n\n' 'Comment puis-je vous aider ?', 'microphonePermission': 'Microphone', - 'voiceRecognitionPermissionText': 'La fonction de reconnaissance vocale nécessite l\'accès au microphone.', - 'voiceTranslationPermissionText': 'Les fonctions de reconnaissance vocale et de traduction nécessitent l\'accès au microphone.', - 'phoneCallPermissionText': 'La fonction d\'appel nécessite l\'accès au microphone pour les appels vocaux.', - 'permissionDeniedText': 'Vous avez refusé définitivement l\'autorisation du microphone, veuillez aller dans les paramètres système pour l\'activer.', + 'voiceRecognitionPermissionText': + 'La fonction de reconnaissance vocale nécessite l\'accès au microphone.', + 'voiceTranslationPermissionText': + 'Les fonctions de reconnaissance vocale et de traduction nécessitent l\'accès au microphone.', + 'phoneCallPermissionText': + 'La fonction d\'appel nécessite l\'accès au microphone pour les appels vocaux.', + 'permissionDeniedText': + 'Vous avez refusé définitivement l\'autorisation du microphone, veuillez aller dans les paramètres système pour l\'activer.', 'startVoiceInput': 'Démarrer la saisie vocale', 'startPhoneCallMode': 'Démarrer le mode appel, commencer la saisie vocale', @@ -745,9 +802,11 @@ const Map frFR = { 'misleadingAttack': 'Trompeur/Attaque', 'illegalCriminal': 'Illégal/Criminel', 'privacyRelated': 'Lié à la vie privée', - 'copyrightViolation': 'Violation de mes droits d\'auteur, droits de la personnalité, etc.', + 'copyrightViolation': + 'Violation de mes droits d\'auteur, droits de la personnalité, etc.', 'other': 'Autre', - 'reportDescriptionHint': 'Nous aimerions connaître la raison de votre signalement, vous pouvez décrire le problème que vous avez rencontré.', + 'reportDescriptionHint': + 'Nous aimerions connaître la raison de votre signalement, vous pouvez décrire le problème que vous avez rencontré.', //'submit': '提交', //Message_bubble @@ -778,15 +837,24 @@ const Map frFR = { 'highest': 'Maximum', 'lowest': 'Minimum', 'futureForecast': 'Prévisions futures', - 'hotWeatherTip': 'Il fait chaud aujourd\'hui, veuillez faire attention à la protection contre la chaleur et au refroidissement, buvez plus d\'eau pour éviter les coups de chaleur', - 'coldWeatherTip': 'Il fait froid aujourd\'hui, veuillez vous habiller chaudement en sortant et attention aux rhumes', - 'rainyWeatherTip': 'Il pleut aujourd\'hui, veuillez emporter une protection contre la pluie et faire attention à la sécurité de voyage', - 'snowyWeatherTip': 'Il neige aujourd\'hui, les routes sont glissantes, veuillez faire attention à la sécurité et rester au chaud', - 'foggyWeatherTip': 'Il y a du brouillard et de la brume aujourd\'hui, la visibilité est mauvaise, veuillez porter un masque en sortant', - 'windyWeatherTip': 'Il y a du vent aujourd\'hui, veuillez faire attention à la sécurité en sortant et sécuriser les objets', - 'sunnyWeatherTip': 'Le soleil brille aujourd\'hui avec des rayons UV forts, veuillez vous protéger du soleil en sortant', - 'temperatureDifferenceTip': 'La différence de température entre le jour et la nuit est importante aujourd\'hui, veuillez ajuster vos vêtements en conséquence', - 'comfortableWeatherTip': 'Le temps est agréable aujourd\'hui, parfait pour les activités de plein air', + 'hotWeatherTip': + 'Il fait chaud aujourd\'hui, veuillez faire attention à la protection contre la chaleur et au refroidissement, buvez plus d\'eau pour éviter les coups de chaleur', + 'coldWeatherTip': + 'Il fait froid aujourd\'hui, veuillez vous habiller chaudement en sortant et attention aux rhumes', + 'rainyWeatherTip': + 'Il pleut aujourd\'hui, veuillez emporter une protection contre la pluie et faire attention à la sécurité de voyage', + 'snowyWeatherTip': + 'Il neige aujourd\'hui, les routes sont glissantes, veuillez faire attention à la sécurité et rester au chaud', + 'foggyWeatherTip': + 'Il y a du brouillard et de la brume aujourd\'hui, la visibilité est mauvaise, veuillez porter un masque en sortant', + 'windyWeatherTip': + 'Il y a du vent aujourd\'hui, veuillez faire attention à la sécurité en sortant et sécuriser les objets', + 'sunnyWeatherTip': + 'Le soleil brille aujourd\'hui avec des rayons UV forts, veuillez vous protéger du soleil en sortant', + 'temperatureDifferenceTip': + 'La différence de température entre le jour et la nuit est importante aujourd\'hui, veuillez ajuster vos vêtements en conséquence', + 'comfortableWeatherTip': + 'Le temps est agréable aujourd\'hui, parfait pour les activités de plein air', "monday": "Lun", "tuesday": "Mar", "wednesday": "Mer", @@ -838,22 +906,28 @@ const Map frFR = { "logout": "Se déconnecter", "logoutTips": "Êtes-vous sûr de vouloir vous déconnecter du compte actuel ?", 'deleteAccount': 'Supprimer le compte', - 'deleteAccountTips': 'Êtes-vous sûr de vouloir supprimer définitivement votre compte ? Cette action ne peut pas être annulée.', + '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': 'Échec de la connexion réseau, veuillez vérifier les paramètres réseau et réessayer', - 'serverTemporarilyUnavailable': 'Serveur temporairement indisponible, veuillez réessayer plus tard', + 'networkConnectionFailed': + 'Échec de la connexion réseau, veuillez vérifier les paramètres réseau et réessayer', + 'serverTemporarilyUnavailable': + 'Serveur temporairement indisponible, veuillez réessayer plus tard', 'loginExpiredPleaseRelogin': 'Connexion expirée, veuillez vous reconnecter', 'noPermissionForThisOperation': 'Aucune autorisation pour cette opération', 'requestedResourceNotFound': 'Ressource demandée introuvable', - 'imageProcessingFailedPleaseReselect': 'Échec du traitement de l\'image, veuillez resélectionner l\'image', + 'imageProcessingFailedPleaseReselect': + 'Échec du traitement de l\'image, veuillez resélectionner l\'image', 'operationFailedPleaseRetry': 'Échec de l\'opération, veuillez réessayer', 'serverReturnedError': 'Le serveur a retourné une erreur', 'serverError': 'Erreur serveur', - 'networkConnectionFailedCheckSettings': 'Échec de la connexion réseau, veuillez vérifier les paramètres réseau', - 'serverInternalErrorRetryLater': 'Erreur interne du serveur, veuillez réessayer plus tard', + 'networkConnectionFailedCheckSettings': + 'Échec de la connexion réseau, veuillez vérifier les paramètres réseau', + 'serverInternalErrorRetryLater': + 'Erreur interne du serveur, veuillez réessayer plus tard', // Profile 用户交互 //'error': '错误', @@ -867,21 +941,30 @@ const Map frFR = { 'loggedOut': 'Déconnecté', 'logoutFailedRetry': 'Échec de la déconnexion, veuillez réessayer', 'accountPermanentlyDeleted': 'Compte supprimé définitivement', - 'deleteAccountFailedRetry': 'Échec de la suppression du compte, veuillez réessayer', + 'deleteAccountFailedRetry': + 'Échec de la suppression du compte, veuillez réessayer', // 账号服务相关 - 'clearUserDataFailed': 'Échec de l\'effacement des données utilisateur', // 清理用户数据失败 - 'deleteUserDataFailed': 'Échec de la suppression des données utilisateur', // 删除用户数据失败 + 'clearUserDataFailed': + 'Échec de l\'effacement des données utilisateur', // 清理用户数据失败 + 'deleteUserDataFailed': + 'Échec de la suppression des données utilisateur', // 删除用户数据失败 'thirdPartyLogoutSuccess': 'Déconnexion tierce réussie', // 第三方登录退出成功 'thirdPartyLogoutFailed': 'Échec de la déconnexion tierce', // 第三方登录退出失败 - 'signOutProcessError': 'Erreur survenue lors du processus de déconnexion', // 登出过程发生错误 - 'deleteAccountProcessError': 'Erreur survenue lors du processus de suppression de compte', // 删除账号过程发生错误 - 'userDataClearSuccess': 'Données utilisateur effacées avec succès', // 用户数据清理成功 - 'allUserDataClearSuccess': 'Toutes les données utilisateur effacées avec succès', // 所有用户数据清理成功 - 'accountServiceInitialized': 'AccountService initialisé', // AccountService 已初始化 + 'signOutProcessError': + 'Erreur survenue lors du processus de déconnexion', // 登出过程发生错误 + 'deleteAccountProcessError': + 'Erreur survenue lors du processus de suppression de compte', // 删除账号过程发生错误 + 'userDataClearSuccess': + 'Données utilisateur effacées avec succès', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'Toutes les données utilisateur effacées avec succès', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'AccountService initialisé', // AccountService 已初始化 // 权限管理页面 - 'getPermissionStatusFailed': 'Échec de l\'obtention du statut d\'autorisation', + 'getPermissionStatusFailed': + 'Échec de l\'obtention du statut d\'autorisation', 'communicationPermissions': 'Autorisations de communication', 'bluetoothPermissions': 'Bluetooth Permissions', 'notificationPermissions': 'Notification Permissions', @@ -901,10 +984,14 @@ const Map frFR = { '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': 'Utilisé pour lire et gérer les événements de calendrier et les rappels', - 'locationPermissionDesc': 'Utilisé pour obtenir les informations de localisation actuelles', + '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': + 'Utilisé pour lire et gérer les événements de calendrier et les rappels', + 'locationPermissionDesc': + 'Utilisé pour obtenir les informations de localisation actuelles', 'appFunctionNeeds': 'Fonction d\'application nécessaire', 'authorized': 'Autorisé', 'unauthorized': 'Non autorisé', @@ -913,45 +1000,70 @@ const Map frFR = { 'unknownStatus': 'Statut inconnu', 'permissionGranted': 'Autorisation accordée', 'permissionRequestError': 'Erreur lors de la demande d\'autorisation', - 'phonePermissionDetailDesc': 'La fonction d\'appel nécessite l\'autorisation téléphone', + '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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1073,8 @@ const Map frFR = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1083,10 @@ const Map frFR = { 'updateNow': 'Mettre à jour maintenant', // 立即更新按钮 'checkUpdate': 'Vérifier la mise à jour', // 检查更新按钮 'updateFailed': 'Échec de la mise à jour', // 更新失败提示 - 'cannotOpenAppStore': 'Impossible d\'ouvrir l\'App Store, veuillez mettre à jour manuellement', // 无法打开应用商店提示 - 'updateErrorRetry': 'Erreur survenue lors du processus de mise à jour, veuillez réessayer plus tard', // 更新错误重试提示 + 'cannotOpenAppStore': + 'Impossible d\'ouvrir l\'App Store, veuillez mettre à jour manuellement', // 无法打开应用商店提示 + 'updateErrorRetry': + 'Erreur survenue lors du processus de mise à jour, veuillez réessayer plus tard', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -1107,7 +1222,8 @@ const Map frFR = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1239,12 @@ const Map frFR = { "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.", + "clearHistoryConfirm": + "Êtes-vous sûr de vouloir effacer tout l'historique de traduction ? Cette action ne peut pas être annulée.", "unknownLanguage": "Langue inconnue", "deleteSessionRecord": "Supprimer l'enregistrement de session", - "deleteSessionConfirm": "Êtes-vous sûr de vouloir supprimer tous les enregistrements de traduction pour cette session ? Cette action ne peut pas être annulée.", + "deleteSessionConfirm": + "Êtes-vous sûr de vouloir supprimer tous les enregistrements de traduction pour cette session ? Cette action ne peut pas être annulée.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1276,20 @@ const Map frFR = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1312,8 @@ const Map frFR = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Enregistrement original", "recordSummary": "Résumé de l'enregistrement", - "clickToGenerateSummary": "Cliquez sur le bouton ci-dessous pour générer un résumé de session", + "clickToGenerateSummary": + "Cliquez sur le bouton ci-dessous pour générer un résumé de session", "summaryContent": "Contenu du résumé", "copied": "Copié", "summaryCopiledToClipboard": "Résumé copié dans le presse-papiers", @@ -1197,9 +1321,11 @@ const Map frFR = { "summaryGenerated": "Résumé généré", "generating": "Génération en cours...", "regenerate": "Régénérer", - "summaryTimeoutMessage": "La demande de génération de résumé a expiré, possiblement due à des problèmes de réseau ou à une surcharge du serveur.", + "summaryTimeoutMessage": + "La demande de génération de résumé a expiré, possiblement due à des problèmes de réseau ou à une surcharge du serveur.", "deleteTranslationRecord": "Supprimer l'enregistrement de traduction", - "deleteTranslationConfirm": "Êtes-vous sûr de vouloir supprimer cet enregistrement de traduction ? Cette action ne peut pas être annulée.", + "deleteTranslationConfirm": + "Êtes-vous sûr de vouloir supprimer cet enregistrement de traduction ? Cette action ne peut pas être annulée.", "originalText": "Texte original", "translatedText": "Texte traduit", "sessionSummary": "Résumé de session", @@ -1226,20 +1352,29 @@ const Map frFR = { // 配对状态文本 "readyToPair": "Prêt à appairer", - "preparingPairingEnvironment": "Préparation de l'environnement d'appairage...", - "connectDeepSoundViaSystemBluetooth": "Veuillez d'abord connecter l'appareil Voitrans via le Bluetooth système", + "preparingPairingEnvironment": + "Préparation de l'environnement d'appairage...", + "connectDeepSoundViaSystemBluetooth": + "Veuillez d'abord connecter l'appareil Voitrans via le Bluetooth système", "deviceBindingConfirm": "Confirmation de liaison d'appareil...", - "establishingDeviceAssociation": "Établissement de l'association d'appareil...", + "establishingDeviceAssociation": + "Établissement de l'association d'appareil...", "waitingCompletePairing": "Veuillez patienter, appairage en cours...", - "pairingSuccessRedirecting": "Appairage réussi ! Redirection vers la page d'accueil...", + "pairingSuccessRedirecting": + "Appairage réussi ! Redirection vers la page d'accueil...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Veuillez vous assurer que l'appareil connecté est Voitrans", - "deviceAlreadyBoundToOtherAccount": "Cet appareil est déjà lié à un autre compte", - "deviceAssociationFailed": "Échec de l'association d'appareil, veuillez réessayer", - "scanTimeoutEnsureDeviceNearby": "Délai de scan dépassé, veuillez vous assurer que l'appareil est à proximité", + "ensureConnectedDeepSoundDevice": + "Veuillez vous assurer que l'appareil connecté est Voitrans", + "deviceAlreadyBoundToOtherAccount": + "Cet appareil est déjà lié à un autre compte", + "deviceAssociationFailed": + "Échec de l'association d'appareil, veuillez réessayer", + "scanTimeoutEnsureDeviceNearby": + "Délai de scan dépassé, veuillez vous assurer que l'appareil est à proximité", "networkError": "Erreur réseau", - "authorizationFailedCheckCode": "Échec de l'autorisation, veuillez vérifier le code d'autorisation", + "authorizationFailedCheckCode": + "Échec de l'autorisation, veuillez vérifier le code d'autorisation", "pairingFailedRetry": "Échec de l'appairage, veuillez réessayer", // 配对控制器相关 @@ -1248,37 +1383,47 @@ const Map frFR = { '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', + 'ensureHeadsetOnAndPairingMode': + 'Veuillez vous assurer que le casque est allumé et en mode appairage', //'goToBluetoothSettings': '前往蓝牙设置', //'verifyingDevice': '正在验证设备...', //'confirmBinding': '确认绑定', //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Établissement d\'une connexion sécurisée...', - 'needManualBindingAuthCode': 'Liaison manuelle du code d\'autorisation nécessaire...', + 'needManualBindingAuthCode': + 'Liaison manuelle du code d\'autorisation nécessaire...', 'pairingSuccessful': 'Appairage réussi !', 'enableBluetooth': 'Activer le Bluetooth', 'grantPermissions': 'Accorder les autorisations', 'retryAssociation': 'Réessayer l\'association', 'retryAuthorization': 'Réessayer l\'autorisation', - 'pleaseGrantNecessaryPermissions': 'Veuillez accorder les autorisations nécessaires', + 'pleaseGrantNecessaryPermissions': + 'Veuillez accorder les autorisations nécessaires', 'checkFailedRetry': 'Échec de la vérification, veuillez réessayer', 'pleaseConnectDeepSoundDevice': 'Veuillez connecter l\'appareil Voitrans', 'verificationFailedRetry': 'Échec de la vérification, veuillez réessayer', 'invalidDeviceAddress': 'Adresse d\'appareil invalide', 'bleDeviceAssociationFailed': 'Échec de l\'association d\'appareil BLE', - 'deviceAssociationFailedRetry': 'Échec de l\'association d\'appareil, veuillez réessayer', - 'bleConnectionTimeoutRetry': 'Délai de connexion BLE dépassé, veuillez réessayer', + 'deviceAssociationFailedRetry': + 'Échec de l\'association d\'appareil, veuillez réessayer', + 'bleConnectionTimeoutRetry': + 'Délai de connexion BLE dépassé, veuillez réessayer', 'blePairingStartupFailed': 'Échec du démarrage de l\'appairage BLE', 'bleConnectionFailed': 'Échec de la connexion BLE', - 'deviceAuthorizationFailedCheckCode': 'Échec de l\'autorisation d\'appareil, veuillez vérifier le code d\'autorisation', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', // 我知道了 //用户反馈页 @@ -1291,10 +1436,12 @@ const Map frFR = { 'contactHint': 'E-mail/Téléphone pour que nous puissions vous contacter', 'submit': 'Soumettre', 'feedbackSubmitSuccess': 'Commentaires soumis avec succès, merci !', - 'feedbackSubmitFailed': 'Échec de la soumission des commentaires, veuillez réessayer plus tard', + 'feedbackSubmitFailed': + 'Échec de la soumission des commentaires, veuillez réessayer plus tard', // OTA升级模块 - "upgradeExitConfirm": "Une mise à niveau est actuellement en cours, quitter interrompra le processus de mise à niveau. Êtes-vous sûr de vouloir quitter ?", + "upgradeExitConfirm": + "Une mise à niveau est actuellement en cours, quitter interrompra le processus de mise à niveau. Êtes-vous sûr de vouloir quitter ?", "deviceModel": "Modèle d'appareil", "unknownDevice": "Appareil inconnu", "currentFirmwareVersion": "Version actuelle du firmware", @@ -1307,14 +1454,19 @@ const Map frFR = { "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", + "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", "charging": "En charge", "updateContent": "Contenu de la mise à jour", - "removeEarbudsEnsureBattery": "Retirez les deux écouteurs et assurez-vous que le niveau de batterie est supérieur à 20%", + "removeEarbudsEnsureBattery": + "Retirez les deux écouteurs et assurez-vous que le niveau de batterie est supérieur à 20%", // 音乐列表页面 "noMusic": "Aucune musique", // 暂无音乐 @@ -1376,8 +1528,10 @@ const Map frFR = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 0a6b1c3fe..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": "फ्रेंच", @@ -90,7 +91,8 @@ const Map hiIN = { "tip": "संकेत", "pleaseEnterCompleteCode": "कृपया पूरा सत्यापन कोड दर्ज करें", "loginFailed": "लॉगिन विफल, कृपया पुनः प्रयास करें", - 'pleaseAcceptPrivacyPolicy': 'कृपया पहले गोपनीयता नीति और उपयोगकर्ता अनुबंध पढ़ें और सहमत हों', + 'pleaseAcceptPrivacyPolicy': + 'कृपया पहले गोपनीयता नीति और उपयोगकर्ता अनुबंध पढ़ें और सहमत हों', "enterVerificationCode": "सत्यापन कोड दर्ज करें", "verificationCodeSentTo": "सत्यापन कोड भेजा गया है", "resendVerificationCode": "सत्यापन कोड पुनः भेजें", @@ -99,7 +101,8 @@ const Map hiIN = { // 隐私政策弹窗 "loginDeclaration": "Voitrans घोषणा", // Voitrans 声明 - "welcomeToThisApp": "Voitrans में आपका स्वागत है, कृपया ध्यान से पढ़ें", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Voitrans में आपका स्वागत है, कृपया ध्यान से पढ़ें", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +118,28 @@ const Map hiIN = { "signal": "सिग्नल", "deviceId": "डिवाइस आईडी", "firmwareVersion": "फर्मवेयर संस्करण", - "disconnectedDevice": "कोई डिवाइस कनेक्ट नहीं है, कनेक्ट करने के लिए नीचे दिए गए बटन पर क्लिक करें", + "disconnectedDevice": + "कोई डिवाइस कनेक्ट नहीं है, कनेक्ट करने के लिए नीचे दिए गए बटन पर क्लिक करें", "connectDevice": "डिवाइस कनेक्ट करें", "topAiExperiences": "शीर्ष एआई अनुभव", "aiAssistant": "एआई ऑल-इन-वन असिस्टेंट", "aiAssistantInfo": "24/7 विशेष सलाहकार, सवालों के जवाब देना, सुझाव देना", "interpretation": "एक साथ व्याख्या", - "simultaneousInterpretationInfo": "80+ भाषाओं में रीयल-टाइम अनुवाद, चिंता मुक्त विदेश यात्रा", + "simultaneousInterpretationInfo": + "80+ भाषाओं में रीयल-टाइम अनुवाद, चिंता मुक्त विदेश यात्रा", "aiCompanion": "परिवार का साथी", "aiCompanionInfo": "आपको समझता है, गर्मजोशी से साथ देता है", "homeSlogan": "दुनिया को जोड़ना, ध्वनि को पार करना", - "turnEarphones": "कृपया ईयरफोन चार्जिंग केस खोलें और ईयरफोन को अपने कानों में लगाएं", + "turnEarphones": + "कृपया ईयरफोन चार्जिंग केस खोलें और ईयरफोन को अपने कानों में लगाएं", "currentlyConnected": "वर्तमान में जुड़ा हुआ है:", "unsystemSetup": "सिस्टम सेटिंग्स पर जाएं", "talkLater": "बाद में", "initializing": "प्रारंभ हो रहा है...", "bluetoothInitializationFailure": "ब्लूटूथ सेवा प्रारंभ करने में विफल", "checkingPermissions": "अनुमतियों की जाँच हो रही है...", - "lackPermissions": "ब्लूटूथ अनुमतियों की कमी है और लोकेशन तक पहुंच नहीं सकता है", + "lackPermissions": + "ब्लूटूथ अनुमतियों की कमी है और लोकेशन तक पहुंच नहीं सकता है", "searchingDevice": "डिवाइस खोज रहा है...", "findConnectedDevice": "कनेक्टेड डिवाइस मिला", "notFound": "कोई कनेक्टेड ब्लूटूथ डिवाइस नहीं मिला", @@ -175,7 +182,8 @@ const Map hiIN = { "healthConsultant": "बहु-कार्यात्मक एआई चैट", "healthConsultantInfo": "अधिक एआई चैट फ़ंक्शन प्रदान करता है", "conferenceAssistant": "बिजनेस मीटिंग असिस्टेंट", - "conferenceAssistantInfo": "रीयल-टाइम मीटिंग मिनट रिकॉर्डिंग, बहु-भाषा अनुवाद", + "conferenceAssistantInfo": + "रीयल-टाइम मीटिंग मिनट रिकॉर्डिंग, बहु-भाषा अनुवाद", "usageStats": "उपयोग सtatistik", "usageStatsInfo": "अप्लिकेशन का उपयोग सtatistik देखें", "scene": "दृश्य", @@ -218,7 +226,8 @@ const Map hiIN = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +283,10 @@ const Map hiIN = { 'copyrightVoitrans': '© 2025 Voitrans Technologies', // 会议商品页描述 - 'meetingHeaderDesc1': 'Audio recording, transcription, keyword search, and auto summary.', - 'meetingHeaderDesc2': 'Suitable for business meetings, class notes, and interview minutes.', + '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', @@ -284,27 +295,35 @@ const Map hiIN = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'रीयल-टाइम समकालीन व्याख्या और पाठ अनुवाद, कम विलंबता वॉइस प्रसारण के साथ।', + 'transHeaderDesc1': + 'रीयल-टाइम समकालीन व्याख्या और पाठ अनुवाद, कम विलंबता वॉइस प्रसारण के साथ।', 'transHeaderDesc2': 'यात्रा, व्यवसाय, भाषण और शिक्षण के लिए उपयुक्त।', 'translateZhEn': 'चीनी-अंग्रेज़ी अनुवाद', 'lowLatencyVoiceBroadcast': 'कम विलंबता वॉइस प्रसारण', 'multiLangTextTranslation': 'बहुभाषी पाठ अनुवाद', - 'termOptimizationContextPreserve': 'पारिभाषिक शब्दों का अनुकूलन और संदर्भ बनाए रखना', + 'termOptimizationContextPreserve': + 'पारिभाषिक शब्दों का अनुकूलन और संदर्भ बनाए रखना', 'lexiconTourBusinessLife': 'यात्रा/व्यवसाय/जीवन शब्दकोश', 'personalVocabularyMemory': 'व्यक्तिगत शब्दावली स्मृति', 'conversationSubtitleLargeText': 'वार्तालाप उपशीर्षक / बड़े-टेक्स्ट मोड', 'colorHighContrast': 'उच्च रंग-विपरीत', - 'transDisclaimer': 'अनुवाद की गुणवत्ता माइक्रोफोन, नेटवर्क विलंबता और परिवेशी शोर पर निर्भर करती है।', + 'transDisclaimer': + 'अनुवाद की गुणवत्ता माइक्रोफोन, नेटवर्क विलंबता और परिवेशी शोर पर निर्भर करती है।', // AI 商品页描述 - 'aiHeaderDesc1': 'Longer conversation quota, more tool calls, extended context length.', - 'aiHeaderDesc2': 'Suitable for agent Q&A, summarization, analysis, and task execution.', + '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', + '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', @@ -313,8 +332,10 @@ const Map hiIN = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'लाभों का अवलोकन', @@ -329,7 +350,8 @@ const Map hiIN = { 'generalPrivileges': 'सामान्य विशेषाधिकार', 'earlyAccessNewFeatures': 'नई सुविधाओं का प्रारंभिक उपयोग', 'crossDeviceSync': 'क्रॉस-डिवाइस सिंक', - 'vipDisclaimer': 'वास्तविक लाभ पैकेज विवरण पर निर्भर करते हैं और संस्करणों के साथ बदल सकते हैं।', + 'vipDisclaimer': + 'वास्तविक लाभ पैकेज विवरण पर निर्भर करते हैं और संस्करणों के साथ बदल सकते हैं।', // 新手引导 / Onboarding 'skip': "छोड़ें", @@ -355,7 +377,8 @@ const Map hiIN = { '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”", + '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", @@ -405,7 +428,8 @@ const Map hiIN = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +484,54 @@ const Map hiIN = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +543,8 @@ const Map hiIN = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +564,8 @@ const Map hiIN = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +614,8 @@ const Map hiIN = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +640,8 @@ const Map hiIN = { "cloudSync": "क्लाउड सिंक्रोनाइज़ेशन रिचार्ज", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "कनेक्टेड डिवाइस:", "accountId": "खाता आईडी:", "systemSetting": "सिस्टम सेटिंग", @@ -621,9 +663,11 @@ const Map hiIN = { "voiceServiceInfo": "वॉयस रिकग्निशन और सिंथेसिस सर्विस चुनें", "selectVoiceService": "वॉयस सर्विस चुनें", "azureVoiceService": "Azure वॉयस सर्विस", - "azureVoiceServiceInfo": "Microsoft की क्लाउड वॉयस सर्विस, उच्च गुणवत्ता वाली वॉयस सिंथेसिस और रिकग्निशन का समर्थन करती है", + "azureVoiceServiceInfo": + "Microsoft की क्लाउड वॉयस सर्विस, उच्च गुणवत्ता वाली वॉयस सिंथेसिस और रिकग्निशन का समर्थन करती है", "flutterVoiceService": "Flutter लोकल वॉयस सर्विस", - "flutterVoiceServiceInfo": "डिवाइस की लोकल वॉयस सर्विस, बिना इंटरनेट कनेक्शन के इस्तेमाल की जा सकती है", + "flutterVoiceServiceInfo": + "डिवाइस की लोकल वॉयस सर्विस, बिना इंटरनेट कनेक्शन के इस्तेमाल की जा सकती है", 'timbreService': 'टिम्बर सर्विस', 'timbreServiceInfo': 'टिम्बर वॉयस सिंथेसिस सर्विस चुनें', 'defaultTimbre': 'डिफ़ॉल्ट टिम्बर', @@ -652,7 +696,8 @@ const Map hiIN = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "रीयल-टाइम वॉयस चैट", - "realtimeVoiceChatInfo": "बुद्धिमान वॉयस इंटरैक्शन फ़ंक्शन का अनुभव करें (फ़ंक्शन पूर्वावलोकन)", + "realtimeVoiceChatInfo": + "बुद्धिमान वॉयस इंटरैक्शन फ़ंक्शन का अनुभव करें (फ़ंक्शन पूर्वावलोकन)", "loading": "लोड हो रहा है...", //设备管理页面 @@ -667,7 +712,8 @@ const Map hiIN = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -695,7 +741,8 @@ const Map hiIN = { "listeningToYou": "आपको सुन रहा हूँ...", "processing": "संसाधित हो रहा है...", "loadMoreMessages": "और संदेश लोड करें...", - "loadFailedClickRetry": "लोड करने में विफल, पुनः प्रयास करने के लिए क्लिक करें", + "loadFailedClickRetry": + "लोड करने में विफल, पुनः प्रयास करने के लिए क्लिक करें", "swipeUpForMore": "अधिक के लिए ऊपर स्वाइप करें", "callingTool": "I'm helping you, please wait!", // 正在帮您,请稍等! "voice_interrupt": "Interrupt", // 语音打断 @@ -721,10 +768,14 @@ const Map hiIN = { '• ईयरफोन फ़ंक्शन को नियंत्रित करना\n\n' 'मैं आपकी क्या मदद कर सकता हूँ?', 'microphonePermission': 'माइक्रोफोन', - 'voiceRecognitionPermissionText': 'वॉयस रिकग्निशन फ़ंक्शन के लिए माइक्रोफोन एक्सेस की आवश्यकता होती है।', - 'voiceTranslationPermissionText': 'वॉयस रिकग्निशन और अनुवाद फ़ंक्शन के लिए माइक्रोफोन एक्सेस की आवश्यकता होती है।', - 'phoneCallPermissionText': 'कॉल करने के लिए वॉयस कॉल के लिए माइक्रोफोन एक्सेस की आवश्यकता होती है।', - 'permissionDeniedText': 'आपने माइक्रोफोन की अनुमति को स्थायी रूप से अस्वीकार कर दिया है, कृपया इसे सक्षम करने के لیے सिस्टम सेटिंग्स पर जाएं।', + 'voiceRecognitionPermissionText': + 'वॉयस रिकग्निशन फ़ंक्शन के लिए माइक्रोफोन एक्सेस की आवश्यकता होती है।', + 'voiceTranslationPermissionText': + 'वॉयस रिकग्निशन और अनुवाद फ़ंक्शन के लिए माइक्रोफोन एक्सेस की आवश्यकता होती है।', + 'phoneCallPermissionText': + 'कॉल करने के लिए वॉयस कॉल के लिए माइक्रोफोन एक्सेस की आवश्यकता होती है।', + 'permissionDeniedText': + 'आपने माइक्रोफोन की अनुमति को स्थायी रूप से अस्वीकार कर दिया है, कृपया इसे सक्षम करने के لیے सिस्टम सेटिंग्स पर जाएं।', 'startVoiceInput': 'वॉयस इनपुट शुरू करें', 'startPhoneCallMode': 'कॉल मोड शुरू करें, वॉयस इनपुट शुरू करें', @@ -747,7 +798,8 @@ const Map hiIN = { 'privacyRelated': 'गोपनीयता से संबंधित', 'copyrightViolation': 'मेरे कॉपीराइट, प्रतिष्ठा आदि का उल्लंघन करता है।', 'other': 'अन्य', - 'reportDescriptionHint': 'हम जानना चाहते हैं कि आप क्यों रिपोर्ट कर रहे हैं, आप जिस समस्या का सामना कर रहे हैं उसका वर्णन कर सकते हैं।', + 'reportDescriptionHint': + 'हम जानना चाहते हैं कि आप क्यों रिपोर्ट कर रहे हैं, आप जिस समस्या का सामना कर रहे हैं उसका वर्णन कर सकते हैं।', //'submit': '提交', //Message_bubble @@ -779,14 +831,22 @@ const Map hiIN = { 'lowest': 'न्यूनतम', 'futureForecast': 'भविष्य का पूर्वानुमान', 'hotWeatherTip': 'आज गर्मी है, कृपया लू से बचें और खूब पानी पिएं', - 'coldWeatherTip': 'आज तापमान कम है, कृपया बाहर जाते समय गर्म कपड़े पहनें ताकि जुकाम न लगे', - 'rainyWeatherTip': 'आज बारिश हो रही है, कृपया बाहर जाते समय छाता ले जाएं और सावधान रहें', - 'snowyWeatherTip': 'आज बर्फ पड़ रही है, सड़क फिसलन भरी है, कृपया सावधान रहें और गर्म कपड़े पहनें', - 'foggyWeatherTip': 'आज कोहरा है, दृश्यता कम है, कृपया बाहर जाते समय मास्क पहनें', - 'windyWeatherTip': 'आज हवा तेज है, कृपया बाहर जाते समय सावधान रहें और अपनी चीजों को सुरक्षित रखें', - 'sunnyWeatherTip': 'आज धूप तेज है और यूवी किरणें मजबूत हैं, कृपया बाहर जाते समय सनस्क्रीन का उपयोग करें', - 'temperatureDifferenceTip': 'आज दिन और रात के तापमान में बड़ा अंतर है, कृपया अपने कपड़े समायोजित करें', - 'comfortableWeatherTip': 'आज मौसम सुहावना है, बाहरी गतिविधियों के लिए एक अच्छा समय है', + 'coldWeatherTip': + 'आज तापमान कम है, कृपया बाहर जाते समय गर्म कपड़े पहनें ताकि जुकाम न लगे', + 'rainyWeatherTip': + 'आज बारिश हो रही है, कृपया बाहर जाते समय छाता ले जाएं और सावधान रहें', + 'snowyWeatherTip': + 'आज बर्फ पड़ रही है, सड़क फिसलन भरी है, कृपया सावधान रहें और गर्म कपड़े पहनें', + 'foggyWeatherTip': + 'आज कोहरा है, दृश्यता कम है, कृपया बाहर जाते समय मास्क पहनें', + 'windyWeatherTip': + 'आज हवा तेज है, कृपया बाहर जाते समय सावधान रहें और अपनी चीजों को सुरक्षित रखें', + 'sunnyWeatherTip': + 'आज धूप तेज है और यूवी किरणें मजबूत हैं, कृपया बाहर जाते समय सनस्क्रीन का उपयोग करें', + 'temperatureDifferenceTip': + 'आज दिन और रात के तापमान में बड़ा अंतर है, कृपया अपने कपड़े समायोजित करें', + 'comfortableWeatherTip': + 'आज मौसम सुहावना है, बाहरी गतिविधियों के लिए एक अच्छा समय है', "monday": "सोम", "tuesday": "मंगल", "wednesday": "बुध", @@ -838,22 +898,30 @@ const Map hiIN = { "logout": "लॉग आउट करें", "logoutTips": "क्या आप वाकई वर्तमान खाते से लॉग आउट करना चाहते हैं?", 'deleteAccount': 'खाता हटाएं', - 'deleteAccountTips': 'क्या आप वाकई अपना खाता स्थायी रूप से हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।', + 'deleteAccountTips': + 'क्या आप वाकई अपना खाता स्थायी रूप से हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।', 'clean': 'Clear Cache', 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 - 'networkConnectionFailed': 'नेटवर्क कनेक्शन विफल, कृपया अपनी नेटवर्क सेटिंग्स जांचें और पुनः प्रयास करें', - 'serverTemporarilyUnavailable': 'सर्वर अस्थायी रूप से अनुपलब्ध है, कृपया बाद में पुनः प्रयास करें', - 'loginExpiredPleaseRelogin': 'आपका सत्र समाप्त हो गया है, कृपया पुनः लॉग इन करें', - 'noPermissionForThisOperation': 'इस ऑपरेशन को करने की आपके पास अनुमति नहीं है', + 'networkConnectionFailed': + 'नेटवर्क कनेक्शन विफल, कृपया अपनी नेटवर्क सेटिंग्स जांचें और पुनः प्रयास करें', + 'serverTemporarilyUnavailable': + 'सर्वर अस्थायी रूप से अनुपलब्ध है, कृपया बाद में पुनः प्रयास करें', + 'loginExpiredPleaseRelogin': + 'आपका सत्र समाप्त हो गया है, कृपया पुनः लॉग इन करें', + 'noPermissionForThisOperation': + 'इस ऑपरेशन को करने की आपके पास अनुमति नहीं है', 'requestedResourceNotFound': 'अनुरोधित संसाधन नहीं मिला', - 'imageProcessingFailedPleaseReselect': 'छवि प्रसंस्करण विफल, कृपया दूसरी छवि चुनें', + 'imageProcessingFailedPleaseReselect': + 'छवि प्रसंस्करण विफल, कृपया दूसरी छवि चुनें', 'operationFailedPleaseRetry': 'ऑपरेशन विफल, कृपया पुनः प्रयास करें', 'serverReturnedError': 'सर्वर ने एक त्रुटि वापस की', 'serverError': 'सर्वर त्रुटि', - 'networkConnectionFailedCheckSettings': 'नेटवर्क कनेक्शन विफल, कृपया अपनी नेटवर्क सेटिंग्स जांचें', - 'serverInternalErrorRetryLater': 'सर्वर आंतरिक त्रुटि, कृपया बाद में पुनः प्रयास करें', + 'networkConnectionFailedCheckSettings': + 'नेटवर्क कनेक्शन विफल, कृपया अपनी नेटवर्क सेटिंग्स जांचें', + 'serverInternalErrorRetryLater': + 'सर्वर आंतरिक त्रुटि, कृपया बाद में पुनः प्रयास करें', // Profile 用户交互 //'error': '错误', @@ -874,11 +942,16 @@ const Map hiIN = { 'deleteUserDataFailed': 'उपयोगकर्ता डेटा हटाने में विफल', // 删除用户数据失败 'thirdPartyLogoutSuccess': 'तीसरे पक्ष का लॉगआउट सफल', // 第三方登录退出成功 'thirdPartyLogoutFailed': 'तीसरे पक्ष का लॉगआउट विफल', // 第三方登录退出失败 - 'signOutProcessError': 'साइन आउट प्रक्रिया के दौरान एक त्रुटि हुई', // 登出过程发生错误 - 'deleteAccountProcessError': 'खाता हटाने की प्रक्रिया के दौरान एक त्रुटि हुई', // 删除账号过程发生错误 - 'userDataClearSuccess': 'उपयोगकर्ता डेटा सफलतापूर्वक साफ़ किया गया', // 用户数据清理成功 - 'allUserDataClearSuccess': 'सभी उपयोगकर्ता डेटा सफलतापूर्वक साफ़ किया गया', // 所有用户数据清理成功 - 'accountServiceInitialized': 'खाता सेवा प्रारंभ की गई है', // AccountService 已初始化 + 'signOutProcessError': + 'साइन आउट प्रक्रिया के दौरान एक त्रुटि हुई', // 登出过程发生错误 + 'deleteAccountProcessError': + 'खाता हटाने की प्रक्रिया के दौरान एक त्रुटि हुई', // 删除账号过程发生错误 + 'userDataClearSuccess': + 'उपयोगकर्ता डेटा सफलतापूर्वक साफ़ किया गया', // 用户数据清理成功 + 'allUserDataClearSuccess': + 'सभी उपयोगकर्ता डेटा सफलतापूर्वक साफ़ किया गया', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'खाता सेवा प्रारंभ की गई है', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'अनुमति की स्थिति प्राप्त करने में विफल', @@ -901,10 +974,14 @@ const Map hiIN = { 'locationInfo': 'स्थान की जानकारी', 'phonePermissionDesc': 'कॉल करने के लिए उपयोग किया जाता है', 'smsPermissionDesc': 'एसएमएस भेजने के लिए उपयोग किया जाता है', - 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', - 'calendarWritePermissionDesc': 'कैलेंडर ईवेंट और रिमाइंडर बनाने के लिए उपयोग किया जाता है', - 'calendarFullAccessPermissionDesc': 'कैलेंडर ईवेंट और रिमाइंडर पढ़ने और प्रबंधित करने के लिए उपयोग किया जाता है', - 'locationPermissionDesc': 'वर्तमान स्थान की जानकारी प्राप्त करने के लिए उपयोग किया जाता है', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'कैलेंडर ईवेंट और रिमाइंडर बनाने के लिए उपयोग किया जाता है', + 'calendarFullAccessPermissionDesc': + 'कैलेंडर ईवेंट और रिमाइंडर पढ़ने और प्रबंधित करने के लिए उपयोग किया जाता है', + 'locationPermissionDesc': + 'वर्तमान स्थान की जानकारी प्राप्त करने के लिए उपयोग किया जाता है', 'appFunctionNeeds': 'ऐप फ़ंक्शन की आवश्यकता है', 'authorized': 'अधिकृत', 'unauthorized': 'अनधिकृत', @@ -913,45 +990,71 @@ const Map hiIN = { 'unknownStatus': 'अज्ञात स्थिति', 'permissionGranted': 'अनुमति दी गई', 'permissionRequestError': 'अनुमति का अनुरोध करते समय त्रुटि हुई', - 'phonePermissionDetailDesc': 'कॉल फ़ंक्शन के लिए फ़ोन अनुमति की आवश्यकता होती है', - 'smsPermissionDetailDesc': 'एसएमएस भेजने के लिए एसएमएस अनुमति की आवश्यकता होती है', - 'alarmPermissionDetailDesc': 'This permission is required to set exact alarms and ensure reminders trigger on time', - 'calendarWritePermissionDetailDesc': 'कैलेंडर ईवेंट बनाने के लिए कैलेंडर में लिखने की अनुमति की आवश्यकता होती है', - 'calendarFullAccessPermissionDetailDesc': 'कैलेंडर ईवेंट प्रबंधित करने के लिए पूर्ण कैलेंडर अनुमति की आवश्यकता होती है', - 'locationPermissionDetailDesc': 'स्थान की जानकारी प्राप्त करने के लिए स्थान अनुमति की आवश्यकता होती है', + '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', + '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', + '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', + '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} अनुमति को स्थायी रूप से अस्वीकार कर दिया है, कृपया इसे सक्षम करने کے لیے ऐप सेटिंग्स पर जाएं', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1064,8 @@ const Map hiIN = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1074,10 @@ const Map hiIN = { 'updateNow': 'अभी अपडेट करें', // 立即更新按钮 'checkUpdate': 'अपडेट की जाँच करें', // 检查更新按钮 'updateFailed': 'अपडेट विफल', // 更新失败提示 - 'cannotOpenAppStore': 'ऐप स्टोर नहीं खोल सकता, कृपया अपडेट करने के लिए मैन्युअल रूप से ऐप स्टोर पर जाएं', // 无法打开应用商店提示 - 'updateErrorRetry': 'अपडेट के दौरान एक त्रुटि हुई, कृपया बाद में पुनः प्रयास करें', // 更新错误重试提示 + 'cannotOpenAppStore': + 'ऐप स्टोर नहीं खोल सकता, कृपया अपडेट करने के लिए मैन्युअल रूप से ऐप स्टोर पर जाएं', // 无法打开应用商店提示 + 'updateErrorRetry': + 'अपडेट के दौरान एक त्रुटि हुई, कृपया बाद में पुनः प्रयास करें', // 更新错误重试提示 //国家列表 "邮箱": "ईमेल", @@ -1107,7 +1213,8 @@ const Map hiIN = { "selectTargetLanguage": "लक्ष्य भाषा चुनें", "me": "Me", "counterPart": "Counterpart", - "bluetoothCallStateError": "Please make sure the Bluetooth headset is connected to the phone and in a call state", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1230,12 @@ const Map hiIN = { "historyRecords": "History Records", "clearResults": "Clear Results", "clearHistory": "इतिहास साफ़ करें", - "clearHistoryConfirm": "क्या आप वाकई सभी अनुवाद इतिहास साफ़ करना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।", + "clearHistoryConfirm": + "क्या आप वाकई सभी अनुवाद इतिहास साफ़ करना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।", "unknownLanguage": "अज्ञात भाषा", "deleteSessionRecord": "सत्र रिकॉर्ड हटाएं", - "deleteSessionConfirm": "क्या आप वाकई इस सत्र के सभी अनुवाद रिकॉर्ड हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।", + "deleteSessionConfirm": + "क्या आप वाकई इस सत्र के सभी अनुवाद रिकॉर्ड हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1267,20 @@ const Map hiIN = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1303,8 @@ const Map hiIN = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "मूल रिकॉर्ड", "recordSummary": "रिकॉर्ड सारांश", - "clickToGenerateSummary": "सत्र सारांश बनाने के लिए नीचे दिए गए बटन पर क्लिक करें", + "clickToGenerateSummary": + "सत्र सारांश बनाने के लिए नीचे दिए गए बटन पर क्लिक करें", "summaryContent": "सारांश सामग्री", "copied": "कॉपी किया गया", "summaryCopiledToClipboard": "सारांश क्लिपबोर्ड पर कॉपी किया गया", @@ -1197,9 +1312,11 @@ const Map hiIN = { "summaryGenerated": "सारांश बनाया गया", "generating": "बनाया जा रहा है...", "regenerate": "पुनः बनाएं", - "summaryTimeoutMessage": "सारांश बनाने का अनुरोध समय समाप्त हो गया, शायद नेटवर्क समस्याओं या व्यस्त सर्वर के कारण।", + "summaryTimeoutMessage": + "सारांश बनाने का अनुरोध समय समाप्त हो गया, शायद नेटवर्क समस्याओं या व्यस्त सर्वर के कारण।", "deleteTranslationRecord": "अनुवाद रिकॉर्ड हटाएं", - "deleteTranslationConfirm": "क्या आप वाकई इस अनुवाद रिकॉर्ड को हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।", + "deleteTranslationConfirm": + "क्या आप वाकई इस अनुवाद रिकॉर्ड को हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।", "originalText": "मूल पाठ", "translatedText": "अनुवादित पाठ", "sessionSummary": "सत्र सारांश", @@ -1227,19 +1344,25 @@ const Map hiIN = { // 配对状态文本 "readyToPair": "पेयर करने के लिए तैयार", "preparingPairingEnvironment": "पेयरिंग वातावरण तैयार हो रहा है...", - "connectDeepSoundViaSystemBluetooth": "कृपया पहले सिस्टम ब्लूटूथ के माध्यम से Voitrans डिवाइस से कनेक्ट करें", + "connectDeepSoundViaSystemBluetooth": + "कृपया पहले सिस्टम ब्लूटूथ के माध्यम से Voitrans डिवाइस से कनेक्ट करें", "deviceBindingConfirm": "डिवाइस बाइंडिंग की पुष्टि...", "establishingDeviceAssociation": "डिवाइस एसोसिएशन स्थापित हो रहा है...", "waitingCompletePairing": "कृपया प्रतीक्षा करें, पेयरिंग पूरी हो रही है...", - "pairingSuccessRedirecting": "पेयरिंग सफल! होमपेज पर रीडायरेक्ट किया जा रहा है...", + "pairingSuccessRedirecting": + "पेयरिंग सफल! होमपेज पर रीडायरेक्ट किया जा रहा है...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "कृपया सुनिश्चित करें कि आप Voitrans डिवाइस से जुड़े हैं", - "deviceAlreadyBoundToOtherAccount": "यह डिवाइस पहले से ही दूसरे खाते से बंधा हुआ है", + "ensureConnectedDeepSoundDevice": + "कृपया सुनिश्चित करें कि आप Voitrans डिवाइस से जुड़े हैं", + "deviceAlreadyBoundToOtherAccount": + "यह डिवाइस पहले से ही दूसरे खाते से बंधा हुआ है", "deviceAssociationFailed": "डिवाइस एसोसिएशन विफल, कृपया पुनः प्रयास करें", - "scanTimeoutEnsureDeviceNearby": "स्कैन टाइमआउट, कृपया सुनिश्चित करें कि डिवाइस पास में है", + "scanTimeoutEnsureDeviceNearby": + "स्कैन टाइमआउट, कृपया सुनिश्चित करें कि डिवाइस पास में है", "networkError": "नेटवर्क त्रुटि", - "authorizationFailedCheckCode": "प्राधिकरण विफल, कृपया जांचें कि प्राधिकरण कोड सही है या नहीं", + "authorizationFailedCheckCode": + "प्राधिकरण विफल, कृपया जांचें कि प्राधिकरण कोड सही है या नहीं", "pairingFailedRetry": "पेयरिंग विफल, कृपया पुनः प्रयास करें", // 配对控制器相关 @@ -1248,13 +1371,15 @@ const Map hiIN = { 'deviceDisconnected': 'डिवाइस डिस्कनेक्ट हो गया', 'readyToStartPairing': 'पेयरिंग शुरू करने के लिए तैयार', 'checkingEnvironment': 'वातावरण की जाँच हो रही है...', - 'ensureHeadsetOnAndPairingMode': 'कृपया सुनिश्चित करें कि हेडसेट चालू है और पेयरिंग मोड में है', + 'ensureHeadsetOnAndPairingMode': + 'कृपया सुनिश्चित करें कि हेडसेट चालू है और पेयरिंग मोड में है', //'goToBluetoothSettings': '前往蓝牙设置', //'verifyingDevice': '正在验证设备...', //'confirmBinding': '确认绑定', //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'सुरक्षित कनेक्शन स्थापित हो रहा है...', - 'needManualBindingAuthCode': 'मैनुअल बाइंडिंग प्राधिकरण कोड की आवश्यकता है...', + 'needManualBindingAuthCode': + 'मैनुअल बाइंडिंग प्राधिकरण कोड की आवश्यकता है...', 'pairingSuccessful': 'पेयरिंग सफल!', 'enableBluetooth': 'ब्लूटूथ सक्षम करें', 'grantPermissions': 'अनुमतियाँ दें', @@ -1266,35 +1391,45 @@ const Map hiIN = { 'verificationFailedRetry': 'सत्यापन विफल, कृपया पुनः प्रयास करें', 'invalidDeviceAddress': 'अमान्य डिवाइस पता', 'bleDeviceAssociationFailed': 'BLE डिवाइस एसोसिएशन विफल', - 'deviceAssociationFailedRetry': 'डिवाइस एसोसिएशन विफल, कृपया पुनः प्रयास करें', + 'deviceAssociationFailedRetry': + 'डिवाइस एसोसिएशन विफल, कृपया पुनः प्रयास करें', 'bleConnectionTimeoutRetry': 'BLE कनेक्शन टाइमआउट, कृपया पुनः प्रयास करें', 'blePairingStartupFailed': 'BLE पेयरिंग स्टार्टअप विफल', 'bleConnectionFailed': 'BLE कनेक्शन विफल', - 'deviceAuthorizationFailedCheckCode': 'डिवाइस प्राधिकरण विफल, कृपया प्राधिकरण कोड जांचें', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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': 'प्रतिक्रिया या सुझाव दें', - 'feedbackDescription': 'कृपया आपके द्वारा सामना की गई समस्या या आपके सुझाव का वर्णन करें', + 'feedbackDescription': + 'कृपया आपके द्वारा सामना की गई समस्या या आपके सुझाव का वर्णन करें', 'feedbackHint': 'कृपया अपनी प्रतिक्रिया दर्ज करें...', 'feedbackRequired': 'कृपया प्रतिक्रिया सामग्री दर्ज करें', 'contactInfo': 'संपर्क जानकारी', 'contactHint': 'ईमेल/फोन, ताकि हम आपसे संपर्क कर सकें', 'submit': 'सबमिट करें', - 'feedbackSubmitSuccess': 'प्रतिक्रिया सफलतापूर्वक सबमिट की गई, आपकी प्रतिक्रिया के लिए धन्यवाद!', - 'feedbackSubmitFailed': 'प्रतिक्रिया सबमिट करने में विफल, कृपया बाद में पुनः प्रयास करें', + 'feedbackSubmitSuccess': + 'प्रतिक्रिया सफलतापूर्वक सबमिट की गई, आपकी प्रतिक्रिया के लिए धन्यवाद!', + 'feedbackSubmitFailed': + 'प्रतिक्रिया सबमिट करने में विफल, कृपया बाद में पुनः प्रयास करें', // OTA升级模块 - "upgradeExitConfirm": "अपग्रेड चल रहा है, बाहर निकलने से प्रक्रिया बाधित होगी, क्या आप वाकई बाहर निकलना चाहते हैं?", + "upgradeExitConfirm": + "अपग्रेड चल रहा है, बाहर निकलने से प्रक्रिया बाधित होगी, क्या आप वाकई बाहर निकलना चाहते हैं?", "deviceModel": "डिवाइस मॉडल", "unknownDevice": "अज्ञात डिवाइस", "currentFirmwareVersion": "वर्तमान फर्मवेयर संस्करण", @@ -1307,14 +1442,18 @@ const Map hiIN = { "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.", + "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": "चार्ज हो रहा है", "updateContent": "अपडेट सामग्री", - "removeEarbudsEnsureBattery": "दोनों ईयरबड निकालें, और सुनिश्चित करें कि दोनों की बैटरी 20% से ऊपर है", + "removeEarbudsEnsureBattery": + "दोनों ईयरबड निकालें, और सुनिश्चित करें कि दोनों की बैटरी 20% से ऊपर है", // 音乐列表页面 "noMusic": "कोई संगीत नहीं", // 暂无音乐 @@ -1376,8 +1515,10 @@ const Map hiIN = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 2a92d6faa..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", @@ -71,7 +72,8 @@ const Map hrHR = { // 登录页 "welcome": "Dobrodošli", - "loginTips": "Prijavite se ili registrirajte pomoću svog telefonskog broja ili e-pošte", + "loginTips": + "Prijavite se ili registrirajte pomoću svog telefonskog broja ili e-pošte", "accountNumber": "Telefonski broj ili e-pošta", "verificationCode": "Verifikacijski kod", "getCode": "Dohvati kod", @@ -90,7 +92,8 @@ const Map hrHR = { "tip": "Savjet", "pleaseEnterCompleteCode": "Unesite potpuni verifikacijski kod", "loginFailed": "Prijava nije uspjela, pokušajte ponovno", - 'pleaseAcceptPrivacyPolicy': 'Molimo, prvo pročitajte i prihvatite Pravila o privatnosti i Korisnički ugovor', + 'pleaseAcceptPrivacyPolicy': + 'Molimo, prvo pročitajte i prihvatite Pravila o privatnosti i Korisnički ugovor', "enterVerificationCode": "Unesite verifikacijski kod", "verificationCodeSentTo": "Verifikacijski kod poslan je na", "resendVerificationCode": "Ponovno pošalji verifikacijski kod", @@ -99,7 +102,8 @@ const Map hrHR = { // 隐私政策弹窗 "loginDeclaration": "Izjava tvrtke Voitrans", // Voitrans 声明 - "welcomeToThisApp": "Dobrodošli u Voitrans, molimo pročitajte pažljivo", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Dobrodošli u Voitrans, molimo pročitajte pažljivo", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +119,30 @@ const Map hrHR = { "signal": "Signal", "deviceId": "ID uređaja", "firmwareVersion": "Verzija firmvera", - "disconnectedDevice": "Nijedan uređaj nije povezan, kliknite na gumb ispod za povezivanje", + "disconnectedDevice": + "Nijedan uređaj nije povezan, kliknite na gumb ispod za povezivanje", "connectDevice": "Poveži uređaj", "topAiExperiences": "Vrhunska AI iskustva", "aiAssistant": "Sveobuhvatni AI asistent", - "aiAssistantInfo": "Ekskluzivni konzultant 24/7, odgovara na pitanja, daje prijedloge", + "aiAssistantInfo": + "Ekskluzivni konzultant 24/7, odgovara na pitanja, daje prijedloge", "interpretation": "Simultano prevođenje", - "simultaneousInterpretationInfo": "Prijevod u stvarnom vremenu na više od 80 jezika, bezbrižna putovanja u inozemstvo", + "simultaneousInterpretationInfo": + "Prijevod u stvarnom vremenu na više od 80 jezika, bezbrižna putovanja u inozemstvo", "aiCompanion": "Obiteljski pratilac", "aiCompanionInfo": "Razumije vas, toplo društvo", "homeSlogan": "Povezivanje svijeta, nadilazeći zvuk", - "turnEarphones": "Otvorite kućište za punjenje slušalica i stavite slušalice u uši", + "turnEarphones": + "Otvorite kućište za punjenje slušalica i stavite slušalice u uši", "currentlyConnected": "Trenutno povezano:", "unsystemSetup": "Idite na postavke sustava", "talkLater": "Kasnije", "initializing": "Inicijalizacija...", - "bluetoothInitializationFailure": "Inicijalizacija Bluetooth usluge nije uspjela", + "bluetoothInitializationFailure": + "Inicijalizacija Bluetooth usluge nije uspjela", "checkingPermissions": "Provjera dopuštenja...", - "lackPermissions": "Nedostaju Bluetooth dopuštenja i pristup lokacijskom podacima je potrebno", + "lackPermissions": + "Nedostaju Bluetooth dopuštenja i pristup lokacijskom podacima je potrebno", "searchingDevice": "Pretraživanje uređaja...", "findConnectedDevice": "Pronađen povezan uređaj", "notFound": "Nije pronađen povezan Bluetooth uređaj", @@ -169,13 +179,15 @@ const Map hrHR = { "faceToFaceTranslation": "Prijevod licem u lice", 'audioVideoTranslation': 'Prijevod zvuka i videa', 'callTranslation': 'Prijevod poziva', - "simultaneousTranslationInfo": "Prijevod u stvarnom vremenu na više od 80 jezika", + "simultaneousTranslationInfo": + "Prijevod u stvarnom vremenu na više od 80 jezika", "aiGirlfriend": "AI djevojka", "aiGirlfriendInfo": "Inteligentni pratilac, razgovarajte bilo kada", "healthConsultant": "Višenamjenski AI chat", "healthConsultantInfo": "Nudi više AI chat funkcija", "conferenceAssistant": "Asistent za poslovne sastanke", - "conferenceAssistantInfo": "Bilježenje zapisnika u stvarnom vremenu, višejezični prijevod", + "conferenceAssistantInfo": + "Bilježenje zapisnika u stvarnom vremenu, višejezični prijevod", "usageStats": "Statistika upotrebe", "usageStatsInfo": "Pregledajte statistiku upotrebe aplikacije", "scene": "Scenarij", @@ -218,7 +230,8 @@ const Map hrHR = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +287,10 @@ const Map hrHR = { '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.', + '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', @@ -284,27 +299,35 @@ const Map hrHR = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +336,10 @@ const Map hrHR = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +354,8 @@ const Map hrHR = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Preskoči", @@ -355,7 +381,8 @@ const Map hrHR = { '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”', + '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', @@ -405,7 +432,8 @@ const Map hrHR = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +488,54 @@ const Map hrHR = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +547,8 @@ const Map hrHR = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +568,8 @@ const Map hrHR = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +618,8 @@ const Map hrHR = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +644,8 @@ const Map hrHR = { "cloudSync": "Synchronizacija u oblaku ponuda", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Povezan uređaj:", "accountId": "ID računa:", "systemSetting": "Postavke sustava", @@ -612,7 +658,8 @@ const Map hrHR = { "privacySettings": "Postavke privatnosti", "privacySettingsInfo": "Upravljanje prikupljanjem podataka i dopuštenjima", "permissionManagement": "Upravljanje dopuštenjima", // 权限管理 - "permissionManagementInfo": "Upravljanje postavkama dopuštenja aplikacije", // 管理应用权限设置 + "permissionManagementInfo": + "Upravljanje postavkama dopuštenja aplikacije", // 管理应用权限设置 "aboutApplication": "O aplikaciji", "versions": "Verzija", "checkUpdates": "Provjeri ažuriranja", @@ -621,9 +668,11 @@ const Map hrHR = { "voiceServiceInfo": "Odabir usluge za prepoznavanje i sintezu govora", "selectVoiceService": "Odaberi glasovnu uslugu", "azureVoiceService": "Azure glasovna usluga", - "azureVoiceServiceInfo": "Microsoftova glasovna usluga u oblaku, podržava visokokvalitetnu sintezu i prepoznavanje govora", + "azureVoiceServiceInfo": + "Microsoftova glasovna usluga u oblaku, podržava visokokvalitetnu sintezu i prepoznavanje govora", "flutterVoiceService": "Flutter lokalna glasovna usluga", - "flutterVoiceServiceInfo": "Lokalna glasovna usluga uređaja, može se koristiti bez internetske veze", + "flutterVoiceServiceInfo": + "Lokalna glasovna usluga uređaja, može se koristiti bez internetske veze", 'timbreService': 'Usluga boje glasa', 'timbreServiceInfo': 'Odaberite uslugu sinteze govora s bojom glasa', 'defaultTimbre': 'Zadana boja glasa', @@ -652,7 +701,8 @@ const Map hrHR = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Glasovni chat u stvarnom vremenu", - "realtimeVoiceChatInfo": "Iskusite funkciju inteligentne glasovne interakcije (pregled funkcije)", + "realtimeVoiceChatInfo": + "Iskusite funkciju inteligentne glasovne interakcije (pregled funkcije)", "loading": "Učitavanje...", //设备管理页面 @@ -667,7 +717,8 @@ const Map hrHR = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -721,10 +772,14 @@ const Map hrHR = { '• Kontrolirati funkcije slušalica\n\n' 'Kako vam mogu pomoći?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': 'Funkcija prepoznavanja govora zahtijeva pristup mikrofonu.', - 'voiceTranslationPermissionText': 'Funkcija prepoznavanja i prevođenja govora zahtijeva pristup mikrofonu.', - 'phoneCallPermissionText': 'Funkcija pozivanja zahtijeva pristup mikrofonu za glasovne pozive.', - 'permissionDeniedText': 'Trajno ste odbili dopuštenje za mikrofon, idite u postavke sustava da biste ga omogućili.', + 'voiceRecognitionPermissionText': + 'Funkcija prepoznavanja govora zahtijeva pristup mikrofonu.', + 'voiceTranslationPermissionText': + 'Funkcija prepoznavanja i prevođenja govora zahtijeva pristup mikrofonu.', + 'phoneCallPermissionText': + 'Funkcija pozivanja zahtijeva pristup mikrofonu za glasovne pozive.', + 'permissionDeniedText': + 'Trajno ste odbili dopuštenje za mikrofon, idite u postavke sustava da biste ga omogućili.', 'startVoiceInput': 'Započni unos glasom', 'startPhoneCallMode': 'Započni način poziva, započni unos glasom', @@ -747,7 +802,8 @@ const Map hrHR = { 'privacyRelated': 'Vezano za privatnost', 'copyrightViolation': 'Kršenje mog autorskog prava, ugleda, itd.', 'other': 'Ostalo', - 'reportDescriptionHint': 'Želimo znati razlog vaše prijave, možete opisati problem s kojim ste se suočili.', + 'reportDescriptionHint': + 'Želimo znati razlog vaše prijave, možete opisati problem s kojim ste se suočili.', //'submit': '提交', //Message_bubble @@ -779,14 +835,22 @@ const Map hrHR = { 'lowest': 'Najniža', 'futureForecast': 'Buduća prognoza', 'hotWeatherTip': 'Danas je vruće, pazite na toplinski udar i pijte puno vode', - 'coldWeatherTip': 'Danas je temperatura niska, obucite se toplo kada izlazite da se ne prehladite', - 'rainyWeatherTip': 'Danas pada kiša, ponesite kišobran kada izlazite i pazite na putu', - 'snowyWeatherTip': 'Danas pada snijeg, put je sklizak, pazite i obucite se toplo', - 'foggyWeatherTip': 'Danas je magla, vidljivost je smanjena, nosite masku kada izlazite', - 'windyWeatherTip': 'Danas puše jak vjetar, pazite kada izlazite i osigurajte svoje stvari', - 'sunnyWeatherTip': 'Danas je sunčano i jako UV zračenje, koristite kremu za sunčanje kada izlazite', - 'temperatureDifferenceTip': 'Danas je velika razlika u temperaturi između dana i noći, prilagodite odjeću', - 'comfortableWeatherTip': 'Danas je vrijeme ugodno, odlično vrijeme za aktivnosti na otvorenom', + 'coldWeatherTip': + 'Danas je temperatura niska, obucite se toplo kada izlazite da se ne prehladite', + 'rainyWeatherTip': + 'Danas pada kiša, ponesite kišobran kada izlazite i pazite na putu', + 'snowyWeatherTip': + 'Danas pada snijeg, put je sklizak, pazite i obucite se toplo', + 'foggyWeatherTip': + 'Danas je magla, vidljivost je smanjena, nosite masku kada izlazite', + 'windyWeatherTip': + 'Danas puše jak vjetar, pazite kada izlazite i osigurajte svoje stvari', + 'sunnyWeatherTip': + 'Danas je sunčano i jako UV zračenje, koristite kremu za sunčanje kada izlazite', + 'temperatureDifferenceTip': + 'Danas je velika razlika u temperaturi između dana i noći, prilagodite odjeću', + 'comfortableWeatherTip': + 'Danas je vrijeme ugodno, odlično vrijeme za aktivnosti na otvorenom', "monday": "Pon", "tuesday": "Uto", "wednesday": "Sri", @@ -838,22 +902,28 @@ const Map hrHR = { "logout": "Odjavi se", "logoutTips": "Jeste li sigurni da se želite odjaviti s trenutnog računa?", 'deleteAccount': 'Obriši račun', - 'deleteAccountTips': 'Jeste li sigurni da želite trajno obrisati svoj račun? Ova se radnja ne može poništiti.', + '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': 'Mrežna veza nije uspjela, provjerite postavke mreže i pokušajte ponovno', - 'serverTemporarilyUnavailable': 'Poslužitelj je privremeno nedostupan, pokušajte ponovno kasnije', + 'networkConnectionFailed': + 'Mrežna veza nije uspjela, provjerite postavke mreže i pokušajte ponovno', + 'serverTemporarilyUnavailable': + 'Poslužitelj je privremeno nedostupan, pokušajte ponovno kasnije', 'loginExpiredPleaseRelogin': 'Vaša sesija je istekla, prijavite se ponovno', 'noPermissionForThisOperation': 'Nemate dopuštenje za ovu operaciju', 'requestedResourceNotFound': 'Traženi resurs nije pronađen', - 'imageProcessingFailedPleaseReselect': 'Obrada slike nije uspjela, odaberite drugu sliku', + 'imageProcessingFailedPleaseReselect': + 'Obrada slike nije uspjela, odaberite drugu sliku', 'operationFailedPleaseRetry': 'Operacija nije uspjela, pokušajte ponovno', 'serverReturnedError': 'Poslužitelj je vratio grešku', 'serverError': 'Greška na poslužitelju', - 'networkConnectionFailedCheckSettings': 'Mrežna veza nije uspjela, provjerite postavke mreže', - 'serverInternalErrorRetryLater': 'Interna greška na poslužitelju, pokušajte ponovno kasnije', + 'networkConnectionFailedCheckSettings': + 'Mrežna veza nije uspjela, provjerite postavke mreže', + 'serverInternalErrorRetryLater': + 'Interna greška na poslužitelju, pokušajte ponovno kasnije', // Profile 用户交互 //'error': '错误', @@ -870,15 +940,21 @@ 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', // 删除用户数据失败 + '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', // 删除账号过程发生错误 + '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', // AccountService 已初始化 + 'allUserDataClearSuccess': + 'Svi korisnički podaci uspješno obrisani', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'AccountService je inicijaliziran', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Dohvaćanje statusa dopuštenja nije uspjelo', @@ -901,10 +977,14 @@ const Map hrHR = { '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': 'Koristi se za čitanje i upravljanje događajima i podsjetnicima u kalendaru', - 'locationPermissionDesc': 'Koristi se za dobivanje informacija o trenutnoj lokaciji', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Koristi se za stvaranje događaja i podsjetnika u kalendaru', + 'calendarFullAccessPermissionDesc': + 'Koristi se za čitanje i upravljanje događajima i podsjetnicima u kalendaru', + 'locationPermissionDesc': + 'Koristi se za dobivanje informacija o trenutnoj lokaciji', 'appFunctionNeeds': 'Funkcija aplikacije zahtijeva', 'authorized': 'Autorizirano', 'unauthorized': 'Neautorizirano', @@ -913,45 +993,71 @@ const Map hrHR = { 'unknownStatus': 'Nepoznat status', 'permissionGranted': 'Dopuštenje je odobreno', 'permissionRequestError': 'Greška prilikom traženja dopuštenja', - 'phonePermissionDetailDesc': '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', + 'phonePermissionDetailDesc': + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1067,8 @@ const Map hrHR = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1077,10 @@ const Map hrHR = { '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', // 无法打开应用商店提示 - 'updateErrorRetry': 'Došlo je do greške tijekom ažuriranja, pokušajte ponovno kasnije', // 更新错误重试提示 + 'cannotOpenAppStore': + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-pošta", @@ -1107,7 +1216,8 @@ const Map hrHR = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1233,12 @@ const Map hrHR = { "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.", + "clearHistoryConfirm": + "Jeste li sigurni da želite obrisati cijelu povijest prijevoda? Ova se radnja ne može poništiti.", "unknownLanguage": "Nepoznat jezik", "deleteSessionRecord": "Obriši zapis sesije", - "deleteSessionConfirm": "Jeste li sigurni da želite obrisati sve zapise prijevoda za ovu sesiju? Ova se radnja ne može poništiti.", + "deleteSessionConfirm": + "Jeste li sigurni da želite obrisati sve zapise prijevoda za ovu sesiju? Ova se radnja ne može poništiti.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1270,20 @@ const Map hrHR = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1306,8 @@ const Map hrHR = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Originalni zapis", "recordSummary": "Sažetak zapisa", - "clickToGenerateSummary": "Kliknite na gumb ispod da biste generirali sažetak sesije", + "clickToGenerateSummary": + "Kliknite na gumb ispod da biste generirali sažetak sesije", "summaryContent": "Sadržaj sažetka", "copied": "Kopirano", "summaryCopiledToClipboard": "Sažetak je kopiran u međuspremnik", @@ -1197,9 +1315,11 @@ const Map hrHR = { "summaryGenerated": "Sažetak je generiran", "generating": "Generiranje...", "regenerate": "Ponovno generiraj", - "summaryTimeoutMessage": "Isteklo je vrijeme za generiranje sažetka, možda zbog problema s mrežom ili zauzetosti poslužitelja.", + "summaryTimeoutMessage": + "Isteklo je vrijeme za generiranje sažetka, možda zbog problema s mrežom ili zauzetosti poslužitelja.", "deleteTranslationRecord": "Obriši zapis prijevoda", - "deleteTranslationConfirm": "Jeste li sigurni da želite obrisati ovaj zapis prijevoda? Ova se radnja ne može poništiti.", + "deleteTranslationConfirm": + "Jeste li sigurni da želite obrisati ovaj zapis prijevoda? Ova se radnja ne može poništiti.", "originalText": "Originalni tekst", "translatedText": "Prevedeni tekst", "sessionSummary": "Sažetak sesije", @@ -1227,19 +1347,26 @@ const Map hrHR = { // 配对状态文本 "readyToPair": "Spremno za uparivanje", "preparingPairingEnvironment": "Priprema okruženja za uparivanje...", - "connectDeepSoundViaSystemBluetooth": "Prvo se povežite s Voitrans uređajem putem sistemskog Bluetootha", + "connectDeepSoundViaSystemBluetooth": + "Prvo se povežite s Voitrans uređajem putem sistemskog Bluetootha", "deviceBindingConfirm": "Potvrda povezivanja uređaja...", "establishingDeviceAssociation": "Uspostavljanje veze s uređajem...", "waitingCompletePairing": "Molimo pričekajte, uparivanje se završava...", - "pairingSuccessRedirecting": "Uparivanje uspješno! Preusmjeravanje na početnu stranicu...", + "pairingSuccessRedirecting": + "Uparivanje uspješno! Preusmjeravanje na početnu stranicu...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Provjerite jeste li povezani s Voitrans uređajem", - "deviceAlreadyBoundToOtherAccount": "Ovaj je uređaj već povezan s drugim računom", - "deviceAssociationFailed": "Povezivanje uređaja nije uspjelo, pokušajte ponovno", - "scanTimeoutEnsureDeviceNearby": "Isteklo je vrijeme skeniranja, provjerite je li uređaj u blizini", + "ensureConnectedDeepSoundDevice": + "Provjerite jeste li povezani s Voitrans uređajem", + "deviceAlreadyBoundToOtherAccount": + "Ovaj je uređaj već povezan s drugim računom", + "deviceAssociationFailed": + "Povezivanje uređaja nije uspjelo, pokušajte ponovno", + "scanTimeoutEnsureDeviceNearby": + "Isteklo je vrijeme skeniranja, provjerite je li uređaj u blizini", "networkError": "Mrežna greška", - "authorizationFailedCheckCode": "Autorizacija nije uspjela, provjerite je li autorizacijski kod točan", + "authorizationFailedCheckCode": + "Autorizacija nije uspjela, provjerite je li autorizacijski kod točan", "pairingFailedRetry": "Uparivanje nije uspjelo, pokušajte ponovno", // 配对控制器相关 @@ -1248,13 +1375,15 @@ const Map hrHR = { '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', + '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...', + 'needManualBindingAuthCode': + 'Potreban je kod za autorizaciju ručnog povezivanja...', 'pairingSuccessful': 'Uparivanje uspješno!', 'enableBluetooth': 'Omogući Bluetooth', 'grantPermissions': 'Daj dopuštenja', @@ -1266,35 +1395,46 @@ const Map hrHR = { 'verificationFailedRetry': 'Verifikacija nije uspjela, pokušajte ponovno', 'invalidDeviceAddress': 'Nevažeća adresa uređaja', 'bleDeviceAssociationFailed': 'Povezivanje BLE uređaja nije uspjelo', - 'deviceAssociationFailedRetry': 'Povezivanje uređaja nije uspjelo, pokušajte ponovno', - 'bleConnectionTimeoutRetry': 'Isteklo je vrijeme za BLE vezu, pokušajte ponovno', + 'deviceAssociationFailedRetry': + 'Povezivanje uređaja nije uspjelo, pokušajte ponovno', + 'bleConnectionTimeoutRetry': + 'Isteklo je vrijeme za BLE vezu, pokušajte ponovno', 'blePairingStartupFailed': 'Pokretanje BLE uparivanja nije uspjelo', 'bleConnectionFailed': 'BLE veza nije uspjela', - 'deviceAuthorizationFailedCheckCode': 'Autorizacija uređaja nije uspjela, provjerite autorizacijski kod', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', - 'feedbackDescription': 'Opišite problem s kojim ste se suočili ili svoj prijedlog', + 'feedbackDescription': + 'Opišite problem s kojim ste se suočili ili svoj prijedlog', 'feedbackHint': 'Unesite svoje povratne informacije...', 'feedbackRequired': 'Unesite sadržaj povratnih informacija', 'contactInfo': 'Kontakt informacije', 'contactHint': 'E-pošta/Telefon, da bismo vas mogli kontaktirati', 'submit': 'Pošalji', - 'feedbackSubmitSuccess': 'Povratne informacije su uspješno poslane, hvala vam!', - 'feedbackSubmitFailed': 'Slanje povratnih informacija nije uspjelo, pokušajte ponovno kasnije', + 'feedbackSubmitSuccess': + 'Povratne informacije su uspješno poslane, hvala vam!', + 'feedbackSubmitFailed': + 'Slanje povratnih informacija nije uspjelo, pokušajte ponovno kasnije', // OTA升级模块 - "upgradeExitConfirm": "Nadogradnja je u tijeku, izlazak će prekinuti proces, jeste li sigurni da želite izaći?", + "upgradeExitConfirm": + "Nadogradnja je u tijeku, izlazak će prekinuti proces, jeste li sigurni da želite izaći?", "deviceModel": "Model uređaja", "unknownDevice": "Nepoznat uređaj", "currentFirmwareVersion": "Trenutna verzija firmvera", @@ -1307,14 +1447,18 @@ const Map hrHR = { "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.", + "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", "updateContent": "Sadržaj ažuriranja", - "removeEarbudsEnsureBattery": "Izvadite obje slušalice i provjerite je li baterija obje iznad 20%", + "removeEarbudsEnsureBattery": + "Izvadite obje slušalice i provjerite je li baterija obje iznad 20%", // 音乐列表页面 "noMusic": "Nema glazbe", // 暂无音乐 @@ -1376,8 +1520,10 @@ const Map hrHR = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 7c9c0af6e..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", @@ -71,7 +72,8 @@ const Map huHU = { // 登录页 "welcome": "Üdvözöljük", - "loginTips": "Jelentkezzen be vagy regisztráljon telefonszámával vagy e-mail címével", + "loginTips": + "Jelentkezzen be vagy regisztráljon telefonszámával vagy e-mail címével", "accountNumber": "Telefonszám vagy e-mail", "verificationCode": "Megerősítő kód", "getCode": "Kód kérése", @@ -84,13 +86,15 @@ const Map huHU = { 'selectCountry': 'Válasszon országot/régiót', "email": "E-mail", "phoneNumber": "Telefonszám", - "pleaseEnterContactInfo": "Kérjük, adja meg a telefonszámot vagy az e-mail címet", + "pleaseEnterContactInfo": + "Kérjük, adja meg a telefonszámot vagy az e-mail címet", "invalidEmailFormat": "Érvénytelen e-mail formátum", "invalidPhoneFormat": "Érvénytelen telefonszám formátum", "tip": "Tipp", "pleaseEnterCompleteCode": "Kérjük, adja meg a teljes megerősítő kódot", "loginFailed": "Bejelentkezés sikertelen, próbálja újra", - 'pleaseAcceptPrivacyPolicy': 'Kérjük, először olvassa el és fogadja el az Adatvédelmi Szabályzatot és a Felhasználói Szerződést', + 'pleaseAcceptPrivacyPolicy': + 'Kérjük, először olvassa el és fogadja el az Adatvédelmi Szabályzatot és a Felhasználói Szerződést', "enterVerificationCode": "Írja be a megerősítő kódot", "verificationCodeSentTo": "A megerősítő kód elküldve a következő címre:", "resendVerificationCode": "Megerősítő kód újraküldése", @@ -99,7 +103,8 @@ const Map huHU = { // 隐私政策弹窗 "loginDeclaration": "Voitrans nyilatkozat", // Voitrans 声明 - "welcomeToThisApp": "Üdvözöljük a Voitransban, kérjük, olvassa el figyelmesen", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Üdvözöljük a Voitransban, kérjük, olvassa el figyelmesen", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +120,30 @@ const Map huHU = { "signal": "Jel", "deviceId": "Eszköz azonosító", "firmwareVersion": "Firmware verzió", - "disconnectedDevice": "Nincs csatlakoztatott eszköz, kattintson az alábbi gombra a csatlakozáshoz", + "disconnectedDevice": + "Nincs csatlakoztatott eszköz, kattintson az alábbi gombra a csatlakozáshoz", "connectDevice": "Eszköz csatlakoztatása", "topAiExperiences": "Legjobb AI élmények", "aiAssistant": "Mindenre kiterjedő AI asszisztens", - "aiAssistantInfo": "Exkluzív 24/7 tanácsadó, válaszol a kérdésekre, javaslatokat tesz", + "aiAssistantInfo": + "Exkluzív 24/7 tanácsadó, válaszol a kérdésekre, javaslatokat tesz", "interpretation": "Szinkrontolmácsolás", - "simultaneousInterpretationInfo": "Valós idejű fordítás több mint 80 nyelven, gondtalan külföldi utazások", + "simultaneousInterpretationInfo": + "Valós idejű fordítás több mint 80 nyelven, gondtalan külföldi utazások", "aiCompanion": "Családi társ", "aiCompanionInfo": "Megérti Önt, meleg társaság", "homeSlogan": "A világ összekötése, a hangot felülmúlva", - "turnEarphones": "Kérjük, nyissa ki a fülhallgató töltőtokját, és helyezze a fülhallgatót a fülébe", + "turnEarphones": + "Kérjük, nyissa ki a fülhallgató töltőtokját, és helyezze a fülhallgatót a fülébe", "currentlyConnected": "Jelenleg csatlakoztatva:", "unsystemSetup": "Ugrás a rendszerbeállításokhoz", "talkLater": "Később", "initializing": "Inicializálás...", - "bluetoothInitializationFailure": "A Bluetooth szolgáltatás inicializálása sikertelen", + "bluetoothInitializationFailure": + "A Bluetooth szolgáltatás inicializálása sikertelen", "checkingPermissions": "Engedélyek ellenőrzése...", - "lackPermissions": "Hiányoznak a Bluetooth engedélyek és a helyzetek elérése szükséges", + "lackPermissions": + "Hiányoznak a Bluetooth engedélyek és a helyzetek elérése szükséges", "searchingDevice": "Eszközök keresése...", "findConnectedDevice": "Csatlakoztatott eszköz található", "notFound": "Nem található csatlakoztatott Bluetooth eszköz", @@ -154,7 +165,8 @@ const Map huHU = { 'chargingCase': 'Töltőtok', 'left': 'Bal', 'right': 'Jobb', - 'checkConnectionStatusFailed': 'A kapcsolat állapotának ellenőrzése sikertelen', + 'checkConnectionStatusFailed': + 'A kapcsolat állapotának ellenőrzése sikertelen', // 发现页 "searchAi": "AI funkciók keresése...", @@ -218,7 +230,8 @@ const Map huHU = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +287,10 @@ const Map huHU = { '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.', + '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', @@ -284,27 +299,35 @@ const Map huHU = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +336,10 @@ const Map huHU = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +354,8 @@ const Map huHU = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Kihagyás", @@ -355,7 +381,8 @@ const Map huHU = { '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”', + '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', @@ -405,7 +432,8 @@ const Map huHU = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +488,54 @@ const Map huHU = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +547,8 @@ const Map huHU = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +568,8 @@ const Map huHU = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +618,8 @@ const Map huHU = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +644,8 @@ const Map huHU = { "cloudSync": "Synchronizációs ponuda", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "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", @@ -612,18 +658,22 @@ const Map huHU = { "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", // 管理应用权限设置 + "permissionManagementInfo": + "Alkalmazásengedély-beállítások kezelése", // 管理应用权限设置 "aboutApplication": "Az alkalmazásról", "versions": "Verzió", "checkUpdates": "Frissítések keresése", "selectLanguage": "Nyelv kiválasztása", "voiceService": "Hangszolgáltatás", - "voiceServiceInfo": "Hangfelismerő és -szintetizáló szolgáltatás kiválasztása", + "voiceServiceInfo": + "Hangfelismerő és -szintetizáló szolgáltatás kiválasztása", "selectVoiceService": "Hangszolgáltatás kiválasztása", "azureVoiceService": "Azure Hangszolgáltatás", - "azureVoiceServiceInfo": "Microsoft felhőalapú hangszolgáltatás, támogatja a magas minőségű hangszintézist és -felismerést", + "azureVoiceServiceInfo": + "Microsoft felhőalapú hangszolgáltatás, támogatja a magas minőségű hangszintézist és -felismerést", "flutterVoiceService": "Flutter Helyi Hangszolgáltatás", - "flutterVoiceServiceInfo": "Eszköz helyi hangszolgáltatása, internetkapcsolat nélkül is használható", + "flutterVoiceServiceInfo": + "Eszköz helyi hangszolgáltatása, internetkapcsolat nélkül is használható", 'timbreService': 'Hangszínszolgáltatás', 'timbreServiceInfo': 'Hangszínszintetizáló szolgáltatás kiválasztása', 'defaultTimbre': 'Alapértelmezett hangszín', @@ -652,7 +702,8 @@ const Map huHU = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Valós idejű hangcsevegés", - "realtimeVoiceChatInfo": "Tapasztalja meg az intelligens hanginterakciós funkciót (funkció előnézet)", + "realtimeVoiceChatInfo": + "Tapasztalja meg az intelligens hanginterakciós funkciót (funkció előnézet)", "loading": "Betöltés...", //设备管理页面 @@ -667,7 +718,8 @@ const Map huHU = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -695,7 +747,8 @@ const Map huHU = { "listeningToYou": "Hallgatom Önt...", "processing": "Feldolgozás...", "loadMoreMessages": "További üzenetek betöltése...", - "loadFailedClickRetry": "Betöltés sikertelen, kattintson az újrapróbálkozáshoz", + "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", // 语音打断 @@ -721,10 +774,14 @@ const Map huHU = { '• Fülhallgató funkciók vezérlésében\n\n' 'Miben segíthetek?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': 'A hangfelismerő funkcióhoz mikrofon-hozzáférés szükséges.', - 'voiceTranslationPermissionText': 'A hangfelismerő és -fordító funkcióhoz mikrofon-hozzáférés szükséges.', - 'phoneCallPermissionText': 'A hívás funkcióhoz mikrofon-hozzáférés szükséges a hanghívásokhoz.', - 'permissionDeniedText': 'Véglegesen letiltotta a mikrofon-hozzáférést, kérjük, engedélyezze a rendszerbeállításokban.', + 'voiceRecognitionPermissionText': + 'A hangfelismerő funkcióhoz mikrofon-hozzáférés szükséges.', + 'voiceTranslationPermissionText': + 'A hangfelismerő és -fordító funkcióhoz mikrofon-hozzáférés szükséges.', + 'phoneCallPermissionText': + 'A hívás funkcióhoz mikrofon-hozzáférés szükséges a hanghívásokhoz.', + 'permissionDeniedText': + 'Véglegesen letiltotta a mikrofon-hozzáférést, kérjük, engedélyezze a rendszerbeállításokban.', 'startVoiceInput': 'Hangbevitel indítása', 'startPhoneCallMode': 'Hívás mód indítása, hangbevitel indítása', @@ -747,7 +804,8 @@ const Map huHU = { 'privacyRelated': 'Adatvédelemmel kapcsolatos', 'copyrightViolation': 'Sérti a szerzői jogomat, hírnevemet stb.', 'other': 'Egyéb', - 'reportDescriptionHint': 'Szeretnénk tudni a jelentés okát, leírhatja a tapasztalt problémát.', + 'reportDescriptionHint': + 'Szeretnénk tudni a jelentés okát, leírhatja a tapasztalt problémát.', //'submit': '提交', //Message_bubble @@ -779,14 +837,22 @@ const Map huHU = { 'lowest': 'Legalacsonyabb', 'futureForecast': 'Jövőbeli előrejelzés', 'hotWeatherTip': 'Ma meleg van, vigyázzon a hőgutára és igyon sok vizet', - 'coldWeatherTip': 'Ma alacsony a hőmérséklet, öltözzön melegen, ha kimegy, hogy ne fázzon meg', - 'rainyWeatherTip': 'Ma esik az eső, vigyen magával esernyőt, ha kimegy, és legyen óvatos', - 'snowyWeatherTip': 'Ma havazik, az út csúszós, legyen óvatos és öltözzön melegen', - 'foggyWeatherTip': 'Ma köd van, a látótávolság alacsony, viseljen maszkot, ha kimegy', - 'windyWeatherTip': 'Ma szeles az idő, legyen óvatos, ha kimegy, és rögzítse a tárgyait', - 'sunnyWeatherTip': 'Ma napos az idő és erős az UV-sugárzás, használjon naptejet, ha kimegy', - 'temperatureDifferenceTip': 'Ma nagy a hőmérséklet-különbség a nappal és az éjszaka között, öltözzön rétegesen', - 'comfortableWeatherTip': 'Ma kellemes az idő, remek alkalom a szabadtéri tevékenységekhez', + 'coldWeatherTip': + 'Ma alacsony a hőmérséklet, öltözzön melegen, ha kimegy, hogy ne fázzon meg', + 'rainyWeatherTip': + 'Ma esik az eső, vigyen magával esernyőt, ha kimegy, és legyen óvatos', + 'snowyWeatherTip': + 'Ma havazik, az út csúszós, legyen óvatos és öltözzön melegen', + 'foggyWeatherTip': + 'Ma köd van, a látótávolság alacsony, viseljen maszkot, ha kimegy', + 'windyWeatherTip': + 'Ma szeles az idő, legyen óvatos, ha kimegy, és rögzítse a tárgyait', + 'sunnyWeatherTip': + 'Ma napos az idő és erős az UV-sugárzás, használjon naptejet, ha kimegy', + 'temperatureDifferenceTip': + 'Ma nagy a hőmérséklet-különbség a nappal és az éjszaka között, öltözzön rétegesen', + 'comfortableWeatherTip': + 'Ma kellemes az idő, remek alkalom a szabadtéri tevékenységekhez', "monday": "Hé", "tuesday": "Ke", "wednesday": "Sze", @@ -838,21 +904,28 @@ const Map huHU = { "logout": "Kijelentkezés", "logoutTips": "Biztosan ki szeretne jelentkezni a jelenlegi fiókból?", 'deleteAccount': 'Fiók törlése', - 'deleteAccountTips': 'Biztosan véglegesen törli a fiókját? Ezt a műveletet nem lehet visszavonni.', + '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': 'Hálózati kapcsolat sikertelen, ellenőrizze a hálózati beállításokat és próbálja újra', - 'serverTemporarilyUnavailable': 'A szerver átmenetileg nem elérhető, próbálja újra később', - 'loginExpiredPleaseRelogin': 'A munkamenet lejárt, kérjük, jelentkezzen be újra', - 'noPermissionForThisOperation': 'Nincs jogosultsága végrehajtani ezt a műveletet', + 'networkConnectionFailed': + 'Hálózati kapcsolat sikertelen, ellenőrizze a hálózati beállításokat és próbálja újra', + 'serverTemporarilyUnavailable': + 'A szerver átmenetileg nem elérhető, próbálja újra később', + 'loginExpiredPleaseRelogin': + 'A munkamenet lejárt, kérjük, jelentkezzen be újra', + 'noPermissionForThisOperation': + 'Nincs jogosultsága végrehajtani ezt a műveletet', 'requestedResourceNotFound': 'A kért erőforrás nem található', - 'imageProcessingFailedPleaseReselect': 'A képfeldolgozás sikertelen, válasszon másik képet', + 'imageProcessingFailedPleaseReselect': + 'A képfeldolgozás sikertelen, válasszon másik képet', 'operationFailedPleaseRetry': 'A művelet sikertelen, próbálja újra', 'serverReturnedError': 'A szerver hibát adott vissza', 'serverError': 'Szerverhiba', - 'networkConnectionFailedCheckSettings': 'Hálózati kapcsolat sikertelen, ellenőrizze a hálózati beállításokat', + 'networkConnectionFailedCheckSettings': + 'Hálózati kapcsolat sikertelen, ellenőrizze a hálózati beállításokat', 'serverInternalErrorRetryLater': 'Belső szerverhiba, próbálja újra később', // Profile 用户交互 @@ -871,14 +944,21 @@ const Map huHU = { // 账号服务相关 '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', // 删除账号过程发生错误 + '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', // AccountService 已初始化 + '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', @@ -901,10 +981,14 @@ const Map huHU = { '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': 'Naptáresemények és emlékeztetők olvasásához és kezeléséhez használatos', - 'locationPermissionDesc': 'Az aktuális helyinformációk lekéréséhez 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': + 'Naptáresemények és emlékeztetők olvasásához és kezeléséhez használatos', + 'locationPermissionDesc': + 'Az aktuális helyinformációk lekéréséhez használatos', 'appFunctionNeeds': 'Az alkalmazás funkciójához szükséges', 'authorized': 'Engedélyezve', 'unauthorized': 'Nincs engedélyezve', @@ -915,43 +999,67 @@ 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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1069,8 @@ const Map huHU = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1079,10 @@ const Map huHU = { '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', // 更新错误重试提示 + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -1107,7 +1218,8 @@ const Map huHU = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1235,12 @@ const Map huHU = { "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.", + "clearHistoryConfirm": + "Biztosan törli az összes fordítási előzményt? Ezt a műveletet nem lehet visszavonni.", "unknownLanguage": "Ismeretlen nyelv", "deleteSessionRecord": "Munkamenet-rekord törlése", - "deleteSessionConfirm": "Biztosan törli az összes fordítási rekordot ehhez a munkamenethez? Ezt a műveletet nem lehet visszavonni.", + "deleteSessionConfirm": + "Biztosan törli az összes fordítási rekordot ehhez a munkamenethez? Ezt a műveletet nem lehet visszavonni.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1272,20 @@ const Map huHU = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1308,8 @@ const Map huHU = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Eredeti felvétel", "recordSummary": "Felvétel összefoglalója", - "clickToGenerateSummary": "Kattintson az alábbi gombra a munkamenet összefoglalójának generálásához", + "clickToGenerateSummary": + "Kattintson az alábbi gombra a munkamenet összefoglalójának generálásához", "summaryContent": "Összefoglaló tartalma", "copied": "Másolva", "summaryCopiledToClipboard": "Az összefoglaló a vágólapra másolva", @@ -1197,9 +1317,11 @@ const Map huHU = { "summaryGenerated": "Összefoglaló generálva", "generating": "Generálás...", "regenerate": "Újragenerálás", - "summaryTimeoutMessage": "Az összefoglaló generálási kérelme időtúllépést okozott, lehetséges hálózati probléma vagy szerverterhelés miatt.", + "summaryTimeoutMessage": + "Az összefoglaló generálási kérelme időtúllépést okozott, lehetséges hálózati probléma vagy szerverterhelés miatt.", "deleteTranslationRecord": "Fordítási rekord törlése", - "deleteTranslationConfirm": "Biztosan törli ezt a fordítási rekordot? Ezt a műveletet nem lehet visszavonni.", + "deleteTranslationConfirm": + "Biztosan törli ezt a fordítási rekordot? Ezt a műveletet nem lehet visszavonni.", "originalText": "Eredeti szöveg", "translatedText": "Fordított szöveg", "sessionSummary": "Munkamenet összefoglalója", @@ -1227,19 +1349,25 @@ const Map huHU = { // 配对状态文本 "readyToPair": "Készen áll a párosításra", "preparingPairingEnvironment": "Párosítási környezet előkészítése...", - "connectDeepSoundViaSystemBluetooth": "Kérjük, először csatlakozzon a Voitrans eszközhöz a rendszer Bluetooth-on keresztül", + "connectDeepSoundViaSystemBluetooth": + "Kérjük, először csatlakozzon a Voitrans eszközhöz a rendszer Bluetooth-on keresztül", "deviceBindingConfirm": "Eszközpárosítás megerősítése...", "establishingDeviceAssociation": "Eszköztársítás létrehozása...", "waitingCompletePairing": "Kérjük, várjon, a párosítás befejeződik...", - "pairingSuccessRedirecting": "A párosítás sikeres! Átirányítás a főoldalra...", + "pairingSuccessRedirecting": + "A párosítás sikeres! Átirányítás a főoldalra...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Győződjön meg róla, hogy a Voitrans eszközhöz csatlakozik", - "deviceAlreadyBoundToOtherAccount": "Ez az eszköz már egy másik fiókhoz van párosítva", + "ensureConnectedDeepSoundDevice": + "Győződjön meg róla, hogy a Voitrans eszközhöz csatlakozik", + "deviceAlreadyBoundToOtherAccount": + "Ez az eszköz már egy másik fiókhoz van párosítva", "deviceAssociationFailed": "Az eszköztársítás sikertelen, próbálja újra", - "scanTimeoutEnsureDeviceNearby": "A szkennelés időtúllépést okozott, győződjön meg róla, hogy az eszköz a közelben van", + "scanTimeoutEnsureDeviceNearby": + "A szkennelés időtúllépést okozott, győződjön meg róla, hogy az eszköz a közelben van", "networkError": "Hálózati hiba", - "authorizationFailedCheckCode": "Az engedélyezés sikertelen, ellenőrizze, hogy az engedélyezési kód helyes-e", + "authorizationFailedCheckCode": + "Az engedélyezés sikertelen, ellenőrizze, hogy az engedélyezési kód helyes-e", "pairingFailedRetry": "A párosítás sikertelen, próbálja újra", // 配对控制器相关 @@ -1248,7 +1376,8 @@ const Map huHU = { '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', + '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': '确认绑定', @@ -1260,41 +1389,53 @@ const Map huHU = { 'grantPermissions': 'Engedélyek megadása', 'retryAssociation': 'Társítás újrapróbálása', 'retryAuthorization': 'Engedélyezés újrapróbálása', - 'pleaseGrantNecessaryPermissions': 'Kérjük, adja meg a szükséges engedélyeket', + 'pleaseGrantNecessaryPermissions': + 'Kérjük, adja meg a szükséges engedélyeket', 'checkFailedRetry': 'Az ellenőrzés sikertelen, próbálja újra', - 'pleaseConnectDeepSoundDevice': 'Kérjük, csatlakoztasson egy Voitrans eszközt', + 'pleaseConnectDeepSoundDevice': + 'Kérjük, csatlakoztasson egy Voitrans eszközt', 'verificationFailedRetry': 'Az ellenőrzés sikertelen, próbálja újra', 'invalidDeviceAddress': 'Érvénytelen eszközcím', 'bleDeviceAssociationFailed': 'A BLE eszköztársítás sikertelen', 'deviceAssociationFailedRetry': 'Az eszköztársítás sikertelen, próbálja újra', - 'bleConnectionTimeoutRetry': 'A BLE kapcsolat időtúllépést okozott, próbálja újra', + 'bleConnectionTimeoutRetry': + 'A BLE kapcsolat időtúllépést okozott, próbálja újra', 'blePairingStartupFailed': 'A BLE párosítás indítása sikertelen', 'bleConnectionFailed': 'A BLE kapcsolat sikertelen', - 'deviceAuthorizationFailedCheckCode': 'Az eszközengedélyezés sikertelen, ellenőrizze az engedélyezési kódot', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', - 'feedbackDescription': 'Kérjük, írja le a tapasztalt problémát vagy javaslatát', + 'feedbackDescription': + 'Kérjük, írja le a tapasztalt problémát vagy javaslatát', 'feedbackHint': 'Kérjük, írja be a visszajelzését...', 'feedbackRequired': 'Kérjük, írja be a visszajelzés tartalmát', 'contactInfo': 'Elérhetőség', 'contactHint': 'E-mail/Telefon, hogy felvehessük Önnel a kapcsolatot', 'submit': 'Küldés', - 'feedbackSubmitSuccess': 'A visszajelzés sikeresen elküldve, köszönjük a visszajelzését!', - 'feedbackSubmitFailed': 'A visszajelzés küldése sikertelen, próbálja újra később', + 'feedbackSubmitSuccess': + 'A visszajelzés sikeresen elküldve, köszönjük a visszajelzését!', + 'feedbackSubmitFailed': + 'A visszajelzés küldése sikertelen, próbálja újra később', // OTA升级模块 - "upgradeExitConfirm": "Frissítés folyamatban van, a kilépés megszakítja a folyamatot, biztosan kilép?", + "upgradeExitConfirm": + "Frissítés folyamatban van, a kilépés megszakítja a folyamatot, biztosan kilép?", "deviceModel": "Eszközmodell", "unknownDevice": "Ismeretlen eszköz", "currentFirmwareVersion": "Jelenlegi firmware verzió", @@ -1307,14 +1448,19 @@ const Map huHU = { "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", + "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", "charging": "Töltés", "updateContent": "Frissítés tartalma", - "removeEarbudsEnsureBattery": "Vegye ki mindkét fülhallgatót, és győződjön meg róla, hogy mindkettő akkumulátora 20% felett van", + "removeEarbudsEnsureBattery": + "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", // 暂无音乐 @@ -1376,8 +1522,10 @@ const Map huHU = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 992e2d375..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", @@ -90,7 +91,8 @@ const Map idID = { "tip": "Tip", "pleaseEnterCompleteCode": "Silakan masukkan kode verifikasi lengkap", "loginFailed": "Gagal masuk, silakan coba lagi", - 'pleaseAcceptPrivacyPolicy': 'Harap baca dan setujui Kebijakan Privasi dan Perjanjian Pengguna terlebih dahulu', + 'pleaseAcceptPrivacyPolicy': + 'Harap baca dan setujui Kebijakan Privasi dan Perjanjian Pengguna terlebih dahulu', "enterVerificationCode": "Masukkan Kode Verifikasi", "verificationCodeSentTo": "Kode verifikasi telah dikirim ke", "resendVerificationCode": "Kirim ulang kode verifikasi", @@ -99,7 +101,8 @@ const Map idID = { // 隐私政策弹窗 "loginDeclaration": "Deklarasi Voitrans", // Voitrans 声明 - "welcomeToThisApp": "Selamat datang di Voitrans, silakan baca dengan seksama", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Selamat datang di Voitrans, silakan baca dengan seksama", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,17 +118,21 @@ const Map idID = { "signal": "Sinyal", "deviceId": "ID Perangkat", "firmwareVersion": "Versi Firmware", - "disconnectedDevice": "Tidak ada perangkat yang terhubung, klik tombol di bawah untuk menyambungkan", + "disconnectedDevice": + "Tidak ada perangkat yang terhubung, klik tombol di bawah untuk menyambungkan", "connectDevice": "Sambungkan Perangkat", "topAiExperiences": "Pengalaman AI Teratas", "aiAssistant": "Asisten AI Serba Guna", - "aiAssistantInfo": "Konsultan eksklusif 24/7, menjawab pertanyaan, memberikan saran", + "aiAssistantInfo": + "Konsultan eksklusif 24/7, menjawab pertanyaan, memberikan saran", "interpretation": "Interpretasi Simultan", - "simultaneousInterpretationInfo": "Terjemahan waktu nyata untuk 80+ bahasa, perjalanan ke luar negeri tanpa khawatir", + "simultaneousInterpretationInfo": + "Terjemahan waktu nyata untuk 80+ bahasa, perjalanan ke luar negeri tanpa khawatir", "aiCompanion": "Teman Keluarga", "aiCompanionInfo": "Memahami Anda, teman yang hangat", "homeSlogan": "Menghubungkan dunia, melampaui suara", - "turnEarphones": "Silakan buka casing pengisi daya earphone dan masukkan earphone ke telinga Anda", + "turnEarphones": + "Silakan buka casing pengisi daya earphone dan masukkan earphone ke telinga Anda", "currentlyConnected": "Saat ini terhubung:", "unsystemSetup": "Buka pengaturan sistem", "talkLater": "Nanti", @@ -175,7 +182,8 @@ const Map idID = { "healthConsultant": "Obrolan AI Multifungsi", "healthConsultantInfo": "Menyediakan lebih banyak fitur obrolan AI", "conferenceAssistant": "Asisten Rapat Bisnis", - "conferenceAssistantInfo": "Catatan rapat waktu nyata, terjemahan multibahasa", + "conferenceAssistantInfo": + "Catatan rapat waktu nyata, terjemahan multibahasa", "usageStats": "Statistik Penggunaan", "usageStatsInfo": "Lihat statistik penggunaan aplikasi", "scene": "Skenario", @@ -218,7 +226,8 @@ const Map idID = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +283,10 @@ const Map idID = { '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.', + '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', @@ -284,27 +295,35 @@ const Map idID = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +332,10 @@ const Map idID = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +350,8 @@ const Map idID = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Lewati", @@ -355,7 +377,8 @@ const Map idID = { '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”', + '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', @@ -405,7 +428,8 @@ const Map idID = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +484,54 @@ const Map idID = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +543,8 @@ const Map idID = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +564,8 @@ const Map idID = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +614,8 @@ const Map idID = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +640,8 @@ const Map idID = { "cloudSync": "Pembayaran Sinkronisasi awan", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Perangkat terhubung:", "accountId": "ID Akun:", "systemSetting": "Pengaturan Sistem", @@ -621,9 +663,11 @@ const Map idID = { "voiceServiceInfo": "Pilih layanan pengenalan dan sintesis suara", "selectVoiceService": "Pilih Layanan Suara", "azureVoiceService": "Layanan Suara Azure", - "azureVoiceServiceInfo": "Layanan suara cloud Microsoft, mendukung sintesis dan pengenalan suara berkualitas tinggi", + "azureVoiceServiceInfo": + "Layanan suara cloud Microsoft, mendukung sintesis dan pengenalan suara berkualitas tinggi", "flutterVoiceService": "Layanan Suara Lokal Flutter", - "flutterVoiceServiceInfo": "Layanan suara lokal perangkat, dapat digunakan tanpa koneksi internet", + "flutterVoiceServiceInfo": + "Layanan suara lokal perangkat, dapat digunakan tanpa koneksi internet", 'timbreService': 'Layanan Timbre', 'timbreServiceInfo': 'Pilih layanan sintesis suara timbre', 'defaultTimbre': 'Timbre Standar', @@ -652,7 +696,8 @@ const Map idID = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Obrolan Suara Waktu Nyata", - "realtimeVoiceChatInfo": "Rasakan fungsi interaksi suara cerdas (pratinjau fitur)", + "realtimeVoiceChatInfo": + "Rasakan fungsi interaksi suara cerdas (pratinjau fitur)", "loading": "Memuat...", //设备管理页面 @@ -667,7 +712,8 @@ const Map idID = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -678,7 +724,8 @@ const Map idID = { "inputMessage": "Masukkan pesan...", "imListening": "Mendengarkan...", "canStartTalking": "Anda bisa mulai berbicara", - "addQuestionAboutImage": "Tambahkan pertanyaan atau deskripsi tentang gambar...", + "addQuestionAboutImage": + "Tambahkan pertanyaan atau deskripsi tentang gambar...", "summarizeImageContent": "Ringkas konten gambar", "extractImageText": "Ekstrak teks gambar", "translateImageText": "Terjemahkan teks gambar", @@ -721,10 +768,14 @@ const Map idID = { '• Mengontrol fungsi earphone\n\n' 'Apa yang bisa saya bantu?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': 'Pengenalan suara memerlukan akses mikrofon.', - 'voiceTranslationPermissionText': 'Pengenalan dan terjemahan suara memerlukan akses mikrofon.', - 'phoneCallPermissionText': 'Melakukan panggilan memerlukan akses mikrofon untuk panggilan suara.', - 'permissionDeniedText': 'Anda telah menolak izin mikrofon secara permanen, silakan buka pengaturan sistem untuk mengaktifkannya.', + 'voiceRecognitionPermissionText': + 'Pengenalan suara memerlukan akses mikrofon.', + 'voiceTranslationPermissionText': + 'Pengenalan dan terjemahan suara memerlukan akses mikrofon.', + 'phoneCallPermissionText': + 'Melakukan panggilan memerlukan akses mikrofon untuk panggilan suara.', + 'permissionDeniedText': + 'Anda telah menolak izin mikrofon secara permanen, silakan buka pengaturan sistem untuk mengaktifkannya.', 'startVoiceInput': 'Mulai input suara', 'startPhoneCallMode': 'Mulai mode panggilan telepon, mulai input suara', @@ -738,7 +789,8 @@ const Map idID = { 'report': 'Lapor', 'submitSuccess': 'Berhasil dikirim', 'submitFailed': 'Gagal dikirim', - 'reportSubmitted': 'Laporan telah dikirim, kami akan memprosesnya sesegera mungkin', + 'reportSubmitted': + 'Laporan telah dikirim, kami akan memprosesnya sesegera mungkin', //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Berbahaya/Tidak Aman', 'pornographicVulgar': 'Pornografi/Vulgär', @@ -747,7 +799,8 @@ const Map idID = { 'privacyRelated': 'Terkait Privasi', 'copyrightViolation': 'Melanggar hak cipta, nama baik saya, dll.', 'other': 'Lainnya', - 'reportDescriptionHint': 'Kami ingin tahu alasan Anda melaporkan, Anda dapat menjelaskan masalah yang Anda hadapi.', + 'reportDescriptionHint': + 'Kami ingin tahu alasan Anda melaporkan, Anda dapat menjelaskan masalah yang Anda hadapi.', //'submit': '提交', //Message_bubble @@ -778,15 +831,24 @@ const Map idID = { 'highest': 'Tertinggi', 'lowest': 'Terendah', 'futureForecast': 'Prakiraan Masa Depan', - 'hotWeatherTip': 'Hari ini panas, harap berhati-hati terhadap sengatan panas dan minum banyak air', - 'coldWeatherTip': 'Suhu hari ini rendah, harap kenakan pakaian hangat saat keluar untuk menghindari pilek', - 'rainyWeatherTip': 'Hari ini hujan, harap bawa payung saat keluar dan berhati-hati saat bepergian', - 'snowyWeatherTip': 'Hari ini salju, jalan licin harap berhati-hati, ambil tindakan pencegahan agar tetap hangat', - 'foggyWeatherTip': 'Hari ini berkabut, jarak pandang rendah, harap pakai masker saat keluar', - 'windyWeatherTip': 'Hari ini berangin, harap berhati-hati saat keluar, pastikan barang-barang Anda aman', - 'sunnyWeatherTip': 'Hari ini cerah dengan sinar UV yang kuat, harap gunakan tabir surya saat keluar', - 'temperatureDifferenceTip': 'Ada perbedaan suhu yang besar antara siang dan malam hari ini, harap sesuaikan pakaian Anda', - 'comfortableWeatherTip': 'Cuaca hari ini menyenangkan, waktu yang tepat untuk aktivitas di luar ruangan', + 'hotWeatherTip': + 'Hari ini panas, harap berhati-hati terhadap sengatan panas dan minum banyak air', + 'coldWeatherTip': + 'Suhu hari ini rendah, harap kenakan pakaian hangat saat keluar untuk menghindari pilek', + 'rainyWeatherTip': + 'Hari ini hujan, harap bawa payung saat keluar dan berhati-hati saat bepergian', + 'snowyWeatherTip': + 'Hari ini salju, jalan licin harap berhati-hati, ambil tindakan pencegahan agar tetap hangat', + 'foggyWeatherTip': + 'Hari ini berkabut, jarak pandang rendah, harap pakai masker saat keluar', + 'windyWeatherTip': + 'Hari ini berangin, harap berhati-hati saat keluar, pastikan barang-barang Anda aman', + 'sunnyWeatherTip': + 'Hari ini cerah dengan sinar UV yang kuat, harap gunakan tabir surya saat keluar', + 'temperatureDifferenceTip': + 'Ada perbedaan suhu yang besar antara siang dan malam hari ini, harap sesuaikan pakaian Anda', + 'comfortableWeatherTip': + 'Cuaca hari ini menyenangkan, waktu yang tepat untuk aktivitas di luar ruangan', "monday": "Senin", "tuesday": "Selasa", "wednesday": "Rabu", @@ -838,22 +900,29 @@ const Map idID = { "logout": "Keluar", "logoutTips": "Apakah Anda yakin ingin keluar dari akun saat ini?", 'deleteAccount': 'Hapus Akun', - 'deleteAccountTips': 'Apakah Anda yakin ingin menghapus akun Anda secara permanen? Tindakan ini tidak dapat dibatalkan', + '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': 'Koneksi jaringan gagal, silakan periksa pengaturan jaringan Anda dan coba lagi', - 'serverTemporarilyUnavailable': 'Server tidak tersedia untuk sementara, silakan coba lagi nanti', + 'networkConnectionFailed': + 'Koneksi jaringan gagal, silakan periksa pengaturan jaringan Anda dan coba lagi', + 'serverTemporarilyUnavailable': + 'Server tidak tersedia untuk sementara, silakan coba lagi nanti', 'loginExpiredPleaseRelogin': 'Sesi Anda telah berakhir, silakan masuk lagi', - 'noPermissionForThisOperation': 'Anda tidak memiliki izin untuk melakukan operasi ini', + 'noPermissionForThisOperation': + 'Anda tidak memiliki izin untuk melakukan operasi ini', 'requestedResourceNotFound': 'Sumber daya yang diminta tidak ditemukan', - 'imageProcessingFailedPleaseReselect': 'Pemrosesan gambar gagal, silakan pilih gambar lain', + 'imageProcessingFailedPleaseReselect': + 'Pemrosesan gambar gagal, silakan pilih gambar lain', 'operationFailedPleaseRetry': 'Operasi gagal, silakan coba lagi', 'serverReturnedError': 'Server mengembalikan kesalahan', 'serverError': 'Kesalahan Server', - 'networkConnectionFailedCheckSettings': 'Koneksi jaringan gagal, silakan periksa pengaturan jaringan Anda', - 'serverInternalErrorRetryLater': 'Kesalahan internal server, silakan coba lagi nanti', + 'networkConnectionFailedCheckSettings': + 'Koneksi jaringan gagal, silakan periksa pengaturan jaringan Anda', + 'serverInternalErrorRetryLater': + 'Kesalahan internal server, silakan coba lagi nanti', // Profile 用户交互 //'error': '错误', @@ -875,10 +944,13 @@ const Map idID = { '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', // 删除账号过程发生错误 + 'deleteAccountProcessError': + 'Terjadi kesalahan saat proses penghapusan akun', // 删除账号过程发生错误 'userDataClearSuccess': 'Data pengguna berhasil dihapus', // 用户数据清理成功 - 'allUserDataClearSuccess': 'Semua data pengguna berhasil dihapus', // 所有用户数据清理成功 - 'accountServiceInitialized': 'Layanan Akun telah diinisialisasi', // AccountService 已初始化 + 'allUserDataClearSuccess': + 'Semua data pengguna berhasil dihapus', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Layanan Akun telah diinisialisasi', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Gagal mendapatkan status izin', @@ -901,10 +973,14 @@ const Map idID = { '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': 'Digunakan untuk membaca dan mengelola acara kalender dan pengingat', - 'locationPermissionDesc': 'Digunakan untuk mendapatkan informasi lokasi saat ini', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Digunakan untuk membuat acara kalender dan pengingat', + 'calendarFullAccessPermissionDesc': + 'Digunakan untuk membaca dan mengelola acara kalender dan pengingat', + 'locationPermissionDesc': + 'Digunakan untuk mendapatkan informasi lokasi saat ini', 'appFunctionNeeds': 'Fungsi aplikasi membutuhkan', 'authorized': 'Diizinkan', 'unauthorized': 'Tidak Diizinkan', @@ -915,43 +991,67 @@ 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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1061,8 @@ const Map idID = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1071,10 @@ const Map idID = { 'updateNow': 'Perbarui Sekarang', // 立即更新按钮 'checkUpdate': 'Periksa Pembaruan', // 检查更新按钮 'updateFailed': 'Pembaruan Gagal', // 更新失败提示 - 'cannotOpenAppStore': 'Tidak dapat membuka toko aplikasi, silakan buka toko aplikasi secara manual untuk memperbarui', // 无法打开应用商店提示 - 'updateErrorRetry': 'Terjadi kesalahan saat pembaruan, silakan coba lagi nanti', // 更新错误重试提示 + 'cannotOpenAppStore': + 'Tidak dapat membuka toko aplikasi, silakan buka toko aplikasi secara manual untuk memperbarui', // 无法打开应用商店提示 + 'updateErrorRetry': + 'Terjadi kesalahan saat pembaruan, silakan coba lagi nanti', // 更新错误重试提示 //国家列表 "邮箱": "Email", @@ -1107,7 +1210,8 @@ const Map idID = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1227,12 @@ const Map idID = { "historyRecords": "History Records", "clearResults": "Clear Results", "clearHistory": "Hapus Riwayat", - "clearHistoryConfirm": "Apakah Anda yakin ingin menghapus semua riwayat terjemahan? Tindakan ini tidak dapat dibatalkan.", + "clearHistoryConfirm": + "Apakah Anda yakin ingin menghapus semua riwayat terjemahan? Tindakan ini tidak dapat dibatalkan.", "unknownLanguage": "Bahasa Tidak Dikenal", "deleteSessionRecord": "Hapus Rekaman Sesi", - "deleteSessionConfirm": "Apakah Anda yakin ingin menghapus semua rekaman terjemahan untuk sesi ini? Tindakan ini tidak dapat dibatalkan.", + "deleteSessionConfirm": + "Apakah Anda yakin ingin menghapus semua rekaman terjemahan untuk sesi ini? Tindakan ini tidak dapat dibatalkan.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1264,20 @@ const Map idID = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1197,9 +1308,11 @@ const Map idID = { "summaryGenerated": "Ringkasan telah dibuat", "generating": "Membuat...", "regenerate": "Buat Ulang", - "summaryTimeoutMessage": "Permintaan pembuatan ringkasan habis waktu, mungkin karena masalah jaringan atau server sibuk.", + "summaryTimeoutMessage": + "Permintaan pembuatan ringkasan habis waktu, mungkin karena masalah jaringan atau server sibuk.", "deleteTranslationRecord": "Hapus Rekaman Terjemahan", - "deleteTranslationConfirm": "Apakah Anda yakin ingin menghapus rekaman terjemahan ini? Tindakan ini tidak dapat dibatalkan.", + "deleteTranslationConfirm": + "Apakah Anda yakin ingin menghapus rekaman terjemahan ini? Tindakan ini tidak dapat dibatalkan.", "originalText": "Teks Asli", "translatedText": "Teks Terjemahan", "sessionSummary": "Ringkasan Sesi", @@ -1227,19 +1340,25 @@ const Map idID = { // 配对状态文本 "readyToPair": "Siap untuk dipasangkan", "preparingPairingEnvironment": "Mempersiapkan lingkungan pemasangan...", - "connectDeepSoundViaSystemBluetooth": "Harap hubungkan ke perangkat Voitrans melalui Bluetooth sistem terlebih dahulu", + "connectDeepSoundViaSystemBluetooth": + "Harap hubungkan ke perangkat Voitrans melalui Bluetooth sistem terlebih dahulu", "deviceBindingConfirm": "Konfirmasi pengikatan perangkat...", "establishingDeviceAssociation": "Membangun asosiasi perangkat...", "waitingCompletePairing": "Harap tunggu, pemasangan sedang diselesaikan...", - "pairingSuccessRedirecting": "Pemasangan berhasil! Mengalihkan ke halaman utama...", + "pairingSuccessRedirecting": + "Pemasangan berhasil! Mengalihkan ke halaman utama...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Harap pastikan Anda terhubung ke perangkat Voitrans", - "deviceAlreadyBoundToOtherAccount": "Perangkat ini sudah terikat ke akun lain", + "ensureConnectedDeepSoundDevice": + "Harap pastikan Anda terhubung ke perangkat Voitrans", + "deviceAlreadyBoundToOtherAccount": + "Perangkat ini sudah terikat ke akun lain", "deviceAssociationFailed": "Asosiasi perangkat gagal, silakan coba lagi", - "scanTimeoutEnsureDeviceNearby": "Waktu pemindaian habis, harap pastikan perangkat berada di dekat", + "scanTimeoutEnsureDeviceNearby": + "Waktu pemindaian habis, harap pastikan perangkat berada di dekat", "networkError": "Kesalahan Jaringan", - "authorizationFailedCheckCode": "Otorisasi gagal, harap periksa apakah kode otorisasi benar", + "authorizationFailedCheckCode": + "Otorisasi gagal, harap periksa apakah kode otorisasi benar", "pairingFailedRetry": "Pemasangan gagal, silakan coba lagi", // 配对控制器相关 @@ -1248,7 +1367,8 @@ const Map idID = { 'deviceDisconnected': 'Perangkat terputus', 'readyToStartPairing': 'Siap untuk memulai pemasangan', 'checkingEnvironment': 'Memeriksa lingkungan...', - 'ensureHeadsetOnAndPairingMode': 'Harap pastikan headset dihidupkan dan dalam mode pemasangan', + 'ensureHeadsetOnAndPairingMode': + 'Harap pastikan headset dihidupkan dan dalam mode pemasangan', //'goToBluetoothSettings': '前往蓝牙设置', //'verifyingDevice': '正在验证设备...', //'confirmBinding': '确认绑定', @@ -1270,31 +1390,39 @@ const Map idID = { 'bleConnectionTimeoutRetry': 'Waktu koneksi BLE habis, silakan coba lagi', 'blePairingStartupFailed': 'Gagal memulai pemasangan BLE', 'bleConnectionFailed': 'Koneksi BLE gagal', - 'deviceAuthorizationFailedCheckCode': 'Otorisasi perangkat gagal, harap periksa kode otorisasi', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', - 'feedbackDescription': 'Harap jelaskan masalah yang Anda hadapi atau saran Anda', + 'feedbackDescription': + 'Harap jelaskan masalah yang Anda hadapi atau saran Anda', 'feedbackHint': 'Silakan masukkan umpan balik Anda...', 'feedbackRequired': 'Harap masukkan konten umpan balik', 'contactInfo': 'Informasi Kontak', 'contactHint': 'Email/Telepon, agar kami dapat menghubungi Anda', 'submit': 'Kirim', - 'feedbackSubmitSuccess': 'Umpan balik berhasil dikirim, terima kasih atas umpan balik Anda!', + 'feedbackSubmitSuccess': + 'Umpan balik berhasil dikirim, terima kasih atas umpan balik Anda!', 'feedbackSubmitFailed': 'Gagal mengirim umpan balik, silakan coba lagi nanti', // OTA升级模块 - "upgradeExitConfirm": "Pembaruan sedang berlangsung, keluar akan mengganggu proses, apakah Anda yakin ingin keluar?", + "upgradeExitConfirm": + "Pembaruan sedang berlangsung, keluar akan mengganggu proses, apakah Anda yakin ingin keluar?", "deviceModel": "Model Perangkat", "unknownDevice": "Perangkat Tidak Dikenal", "currentFirmwareVersion": "Versi Firmware Saat Ini", @@ -1307,14 +1435,19 @@ const Map idID = { "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", + "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", "charging": "Mengisi daya", "updateContent": "Konten Pembaruan", - "removeEarbudsEnsureBattery": "Keluarkan kedua earbud, dan pastikan baterai keduanya di atas 20%", + "removeEarbudsEnsureBattery": + "Keluarkan kedua earbud, dan pastikan baterai keduanya di atas 20%", // 音乐列表页面 "noMusic": "Tidak Ada Musik", // 暂无音乐 @@ -1376,8 +1509,10 @@ const Map idID = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 58aeea02b..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", @@ -90,7 +91,8 @@ const Map isIS = { "tip": "Ábending", "pleaseEnterCompleteCode": "Vinsamlegast sláðu inn allan staðfestingarkóðann", "loginFailed": "Innskráning mistókst, vinsamlegast reyndu aftur", - 'pleaseAcceptPrivacyPolicy': 'Vinsamlegast lestu og samþykktu persónuverndarstefnuna og notendasamninginn fyrst', + 'pleaseAcceptPrivacyPolicy': + 'Vinsamlegast lestu og samþykktu persónuverndarstefnuna og notendasamninginn fyrst', "enterVerificationCode": "Sláðu inn staðfestingarkóða", "verificationCodeSentTo": "Staðfestingarkóði sendur til", "resendVerificationCode": "Senda staðfestingarkóða aftur", @@ -99,7 +101,8 @@ const Map isIS = { // 隐私政策弹窗 "loginDeclaration": "Yfirlýsing Voitrans", // Voitrans 声明 - "welcomeToThisApp": "Velkomin(n) í Voitrans, vinsamlegast lestu vandlega", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Velkomin(n) í Voitrans, vinsamlegast lestu vandlega", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +118,29 @@ const Map isIS = { "signal": "Merki", "deviceId": "Auðkenni tækis", "firmwareVersion": "Fastbúnaðarútgáfa", - "disconnectedDevice": "Ekkert tæki tengt, smelltu á hnappinn hér að neðan til að tengjast", + "disconnectedDevice": + "Ekkert tæki tengt, smelltu á hnappinn hér að neðan til að tengjast", "connectDevice": "Tengja tæki", "topAiExperiences": "Helstu gervigreindarupplifanir", "aiAssistant": "Alhliða gervigreindar-aðstoðarmaður", - "aiAssistantInfo": "Einkaþjónusta allan sólarhringinn, svarar spurningum, gefur tillögur", + "aiAssistantInfo": + "Einkaþjónusta allan sólarhringinn, svarar spurningum, gefur tillögur", "interpretation": "Samtímatúlkun", - "simultaneousInterpretationInfo": "Rauntímaþýðing fyrir yfir 80 tungumál, áhyggjulausar utanlandsferðir", + "simultaneousInterpretationInfo": + "Rauntímaþýðing fyrir yfir 80 tungumál, áhyggjulausar utanlandsferðir", "aiCompanion": "Fjölskyldufélagi", "aiCompanionInfo": "Skilur þig, hlýlegur félagsskapur", "homeSlogan": "Að tengja heiminn, umfram hljóð", - "turnEarphones": "Vinsamlegast opnaðu hleðsluhulstrið á heyrnartólunum og settu þau í eyrun", + "turnEarphones": + "Vinsamlegast opnaðu hleðsluhulstrið á heyrnartólunum og settu þau í eyrun", "currentlyConnected": "Nú tengt:", "unsystemSetup": "Fara í kerfisstillingar", "talkLater": "Seinna", "initializing": "Frumstilli...", "bluetoothInitializationFailure": "Frumstilling Bluetooth-þjónustu mistókst", "checkingPermissions": "Athuga heimildir...", - "lackPermissions": "Skortir Bluetooth-heimildir og lokatæknið er þó ekki tilgengilegt", + "lackPermissions": + "Skortir Bluetooth-heimildir og lokatæknið er þó ekki tilgengilegt", "searchingDevice": "Leita að tækjum...", "findConnectedDevice": "Fann tengt tæki", "notFound": "Ekkert tengt Bluetooth-tæki fannst", @@ -147,7 +155,8 @@ const Map isIS = { "fine": "Mjög gott", "excellent": "Framúrskarandi", "unknown": "Óþekkt", - 'bluetoothTurnedOff': 'Slökkt er á Bluetooth, vinsamlegast kveiktu á Bluetooth', + 'bluetoothTurnedOff': + 'Slökkt er á Bluetooth, vinsamlegast kveiktu á Bluetooth', 'bluetoothOff': 'Slökkt á Bluetooth', 'leftEar': 'Vinstra eyra', 'rightEar': 'Hægra eyra', @@ -218,7 +227,8 @@ const Map isIS = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +284,10 @@ const Map isIS = { '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.', + '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', @@ -284,27 +296,35 @@ const Map isIS = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +333,10 @@ const Map isIS = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +351,8 @@ const Map isIS = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Sleppa", @@ -355,7 +378,8 @@ const Map isIS = { '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”', + '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', @@ -405,7 +429,8 @@ const Map isIS = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +485,54 @@ const Map isIS = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +544,8 @@ const Map isIS = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +565,8 @@ const Map isIS = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +615,8 @@ const Map isIS = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +641,8 @@ const Map isIS = { "cloudSync": "Synchronisering með skýjaraddþjónustu", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Tengt tæki:", "accountId": "Auðkenni reiknings:", "systemSetting": "Kerfisstillingar", @@ -612,7 +655,8 @@ const Map isIS = { "privacySettings": "Persónuverndarstillingar", "privacySettingsInfo": "Stjórna gagnaöflun og heimildum", "permissionManagement": "Heimildastjórnun", // 权限管理 - "permissionManagementInfo": "Stjórna heimildastillingum forritsins", // 管理应用权限设置 + "permissionManagementInfo": + "Stjórna heimildastillingum forritsins", // 管理应用权限设置 "aboutApplication": "Um forritið", "versions": "Útgáfa", "checkUpdates": "Athuga með uppfærslur", @@ -621,9 +665,11 @@ const Map isIS = { "voiceServiceInfo": "Veldu raddgreiningar- og myndunarþjónustu", "selectVoiceService": "Veldu raddþjónustu", "azureVoiceService": "Azure raddþjónusta", - "azureVoiceServiceInfo": "Microsoft skýjaraddþjónusta, styður hágæða raddmyndun og -greiningu", + "azureVoiceServiceInfo": + "Microsoft skýjaraddþjónusta, styður hágæða raddmyndun og -greiningu", "flutterVoiceService": "Flutter staðbundin raddþjónusta", - "flutterVoiceServiceInfo": "Staðbundin raddþjónusta tækisins, hægt að nota án nettengingar", + "flutterVoiceServiceInfo": + "Staðbundin raddþjónusta tækisins, hægt að nota án nettengingar", 'timbreService': 'Raddblæþjónusta', 'timbreServiceInfo': 'Veldu raddblæmyndunarþjónustu', 'defaultTimbre': 'Sjálfgefinn raddblær', @@ -652,7 +698,8 @@ const Map isIS = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Rauntíma raddspjall", - "realtimeVoiceChatInfo": "Upplifðu greinda raddsamskiptaaðgerð (forskoðun aðgerðar)", + "realtimeVoiceChatInfo": + "Upplifðu greinda raddsamskiptaaðgerð (forskoðun aðgerðar)", "loading": "Hleður...", //设备管理页面 @@ -667,7 +714,8 @@ const Map isIS = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -722,9 +770,12 @@ const Map isIS = { 'Hvernig get ég aðstoðað þig?', 'microphonePermission': 'Hljóðnemi', 'voiceRecognitionPermissionText': 'Raddgreining krefst aðgangs að hljóðnema.', - 'voiceTranslationPermissionText': 'Raddgreining og þýðing krefjast aðgangs að hljóðnema.', - 'phoneCallPermissionText': 'Að hringja krefst aðgangs að hljóðnema fyrir raddsamtöl.', - 'permissionDeniedText': 'Þú hefur varanlega hafnað heimild fyrir hljóðnema, vinsamlegast farðu í kerfisstillingar til að virkja heimildina.', + 'voiceTranslationPermissionText': + 'Raddgreining og þýðing krefjast aðgangs að hljóðnema.', + 'phoneCallPermissionText': + 'Að hringja krefst aðgangs að hljóðnema fyrir raddsamtöl.', + 'permissionDeniedText': + 'Þú hefur varanlega hafnað heimild fyrir hljóðnema, vinsamlegast farðu í kerfisstillingar til að virkja heimildina.', 'startVoiceInput': 'Hefja raddinnslátt', 'startPhoneCallMode': 'Hefja símtalsham, hefja raddinnslátt', @@ -738,7 +789,8 @@ const Map isIS = { 'report': 'Tilkynna', 'submitSuccess': 'Sent', 'submitFailed': 'Sending mistókst', - 'reportSubmitted': 'Tilkynning send, við munum afgreiða hana eins fljótt og auðið er', + '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', @@ -747,7 +799,8 @@ const Map isIS = { 'privacyRelated': 'Tengt persónuvernd', 'copyrightViolation': 'Brot á höfundarrétti mínum, mannorði o.s.frv.', 'other': 'Annað', - 'reportDescriptionHint': 'Við viljum vita hvers vegna þú ert að tilkynna, þú getur lýst vandamálinu sem þú lendir í.', + 'reportDescriptionHint': + 'Við viljum vita hvers vegna þú ert að tilkynna, þú getur lýst vandamálinu sem þú lendir í.', //'submit': '提交', //Message_bubble @@ -778,15 +831,24 @@ const Map isIS = { 'highest': 'Hæst', 'lowest': 'Lægst', 'futureForecast': 'Framtíðarspá', - 'hotWeatherTip': 'Í dag er heitt, gætið að hitaslagi og drekkið mikið af vatni', - 'coldWeatherTip': 'Í dag er lágt hitastig, klæðið ykkur vel þegar þið farið út til að forðast kvef', - 'rainyWeatherTip': 'Í dag rignir, takið með ykkur regnhlíf þegar þið farið út og farið varlega', - 'snowyWeatherTip': 'Í dag snjóar, vegurinn er háll, farið varlega og klæðið ykkur vel', - 'foggyWeatherTip': 'Í dag er þoka, skyggni er slæmt, notið grímu þegar þið farið út', - 'windyWeatherTip': 'Í dag er mikill vindur, farið varlega þegar þið farið út og festið eigur ykkar', - 'sunnyWeatherTip': 'Í dag er sólskin og sterk UV-geislun, notið sólarvörn þegar þið farið út', - 'temperatureDifferenceTip': 'Í dag er mikill hitamunur á degi og nóttu, klæðið ykkur í samræmi við það', - 'comfortableWeatherTip': 'Í dag er veðrið notalegt, frábær tími fyrir útivist', + 'hotWeatherTip': + 'Í dag er heitt, gætið að hitaslagi og drekkið mikið af vatni', + 'coldWeatherTip': + 'Í dag er lágt hitastig, klæðið ykkur vel þegar þið farið út til að forðast kvef', + 'rainyWeatherTip': + 'Í dag rignir, takið með ykkur regnhlíf þegar þið farið út og farið varlega', + 'snowyWeatherTip': + 'Í dag snjóar, vegurinn er háll, farið varlega og klæðið ykkur vel', + 'foggyWeatherTip': + 'Í dag er þoka, skyggni er slæmt, notið grímu þegar þið farið út', + 'windyWeatherTip': + 'Í dag er mikill vindur, farið varlega þegar þið farið út og festið eigur ykkar', + 'sunnyWeatherTip': + 'Í dag er sólskin og sterk UV-geislun, notið sólarvörn þegar þið farið út', + 'temperatureDifferenceTip': + 'Í dag er mikill hitamunur á degi og nóttu, klæðið ykkur í samræmi við það', + 'comfortableWeatherTip': + 'Í dag er veðrið notalegt, frábær tími fyrir útivist', "monday": "Mán", "tuesday": "Þri", "wednesday": "Mið", @@ -838,22 +900,30 @@ const Map isIS = { "logout": "Útskráning", "logoutTips": "Ertu viss um að þú viljir skrá þig út af núverandi reikningi?", 'deleteAccount': 'Eyða reikningi', - 'deleteAccountTips': 'Ertu viss um að þú viljir eyða reikningnum þínum varanlega? Ekki er hægt að afturkalla þessa aðgerð.', + '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': 'Netkerfistenging mistókst, vinsamlegast athugaðu netkerfisstillingar og reyndu aftur', - 'serverTemporarilyUnavailable': 'Netþjónn er tímabundið ófáanlegur, vinsamlegast reyndu aftur síðar', - 'loginExpiredPleaseRelogin': 'Innskráningin þín er útrunnin, vinsamlegast skráðu þig inn aftur', - 'noPermissionForThisOperation': 'Þú hefur ekki heimild til að framkvæma þessa aðgerð', + 'networkConnectionFailed': + 'Netkerfistenging mistókst, vinsamlegast athugaðu netkerfisstillingar og reyndu aftur', + 'serverTemporarilyUnavailable': + 'Netþjónn er tímabundið ófáanlegur, vinsamlegast reyndu aftur síðar', + 'loginExpiredPleaseRelogin': + 'Innskráningin þín er útrunnin, vinsamlegast skráðu þig inn aftur', + 'noPermissionForThisOperation': + 'Þú hefur ekki heimild til að framkvæma þessa aðgerð', 'requestedResourceNotFound': 'Umbeðin auðlind fannst ekki', - 'imageProcessingFailedPleaseReselect': 'Myndvinnsla mistókst, vinsamlegast veldu aðra mynd', + 'imageProcessingFailedPleaseReselect': + 'Myndvinnsla mistókst, vinsamlegast veldu aðra mynd', 'operationFailedPleaseRetry': 'Aðgerð mistókst, vinsamlegast reyndu aftur', 'serverReturnedError': 'Netþjónn skilaði villu', 'serverError': 'Netþjónsvilla', - 'networkConnectionFailedCheckSettings': 'Netkerfistenging mistókst, vinsamlegast athugaðu netkerfisstillingar', - 'serverInternalErrorRetryLater': 'Innri netþjónsvilla, vinsamlegast reyndu aftur síðar', + 'networkConnectionFailedCheckSettings': + 'Netkerfistenging mistókst, vinsamlegast athugaðu netkerfisstillingar', + 'serverInternalErrorRetryLater': + 'Innri netþjónsvilla, vinsamlegast reyndu aftur síðar', // Profile 用户交互 //'error': '错误', @@ -867,7 +937,8 @@ const Map isIS = { 'loggedOut': 'Útskráð(ur)', 'logoutFailedRetry': 'Útskráning mistókst, vinsamlegast reyndu aftur', 'accountPermanentlyDeleted': 'Reikningi hefur verið eytt varanlega', - 'deleteAccountFailedRetry': 'Eyðing reiknings mistókst, vinsamlegast reyndu aftur', + 'deleteAccountFailedRetry': + 'Eyðing reiknings mistókst, vinsamlegast reyndu aftur', // 账号服务相关 'clearUserDataFailed': 'Ekki tókst að hreinsa notandagögn', // 清理用户数据失败 @@ -875,10 +946,12 @@ const Map isIS = { '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', // 删除账号过程发生错误 + '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 已初始化 + 'accountServiceInitialized': + 'Reikningsþjónusta frumstillt', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Ekki tókst að fá stöðu heimilda', @@ -901,10 +974,14 @@ const Map isIS = { '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': 'Notað til að lesa og stjórna dagbókarviðburðum og áminningum', - 'locationPermissionDesc': 'Notað til að fá upplýsingar um núverandi staðsetningu', + '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': + 'Notað til að lesa og stjórna dagbókarviðburðum og áminningum', + 'locationPermissionDesc': + 'Notað til að fá upplýsingar um núverandi staðsetningu', 'appFunctionNeeds': 'Forritsaðgerð þarf', 'authorized': 'Heimilað', 'unauthorized': 'Óheimilað', @@ -915,43 +992,67 @@ 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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1062,8 @@ const Map isIS = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1072,10 @@ const Map isIS = { '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', // 无法打开应用商店提示 - 'updateErrorRetry': 'Villa kom upp við uppfærslu, vinsamlegast reyndu aftur síðar', // 更新错误重试提示 + 'cannotOpenAppStore': + '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', // 更新错误重试提示 //国家列表 "邮箱": "Tölvupóstur", @@ -1107,7 +1211,8 @@ const Map isIS = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1228,12 @@ const Map isIS = { "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ð.", + "clearHistoryConfirm": + "Ertu viss um að þú viljir hreinsa alla þýðingasögu? Ekki er hægt að afturkalla þessa aðgerð.", "unknownLanguage": "Óþekkt tungumál", "deleteSessionRecord": "Eyða lotuupptöku", - "deleteSessionConfirm": "Ertu viss um að þú viljir eyða öllum þýðingarupptökum fyrir þessa lotu? Ekki er hægt að afturkalla þessa aðgerð.", + "deleteSessionConfirm": + "Ertu viss um að þú viljir eyða öllum þýðingarupptökum fyrir þessa lotu? Ekki er hægt að afturkalla þessa aðgerð.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1265,20 @@ const Map isIS = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1301,8 @@ const Map isIS = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Upprunaleg upptaka", "recordSummary": "Samantekt upptöku", - "clickToGenerateSummary": "Smelltu á hnappinn hér að neðan til að búa til samantekt lotu", + "clickToGenerateSummary": + "Smelltu á hnappinn hér að neðan til að búa til samantekt lotu", "summaryContent": "Innihald samantektar", "copied": "Afritað", "summaryCopiledToClipboard": "Samantekt afrituð á klippiborð", @@ -1197,9 +1310,11 @@ const Map isIS = { "summaryGenerated": "Samantekt búin til", "generating": "Býr til...", "regenerate": "Búa til aftur", - "summaryTimeoutMessage": "Tími beiðni um samantektargenerun rann út, gæti verið vegna netvandamála eða upptekins netþjóns.", + "summaryTimeoutMessage": + "Tími beiðni um samantektargenerun rann út, gæti verið vegna netvandamála eða upptekins netþjóns.", "deleteTranslationRecord": "Eyða þýðingarupptöku", - "deleteTranslationConfirm": "Ertu viss um að þú viljir eyða þessari þýðingarupptöku? Ekki er hægt að afturkalla þessa aðgerð.", + "deleteTranslationConfirm": + "Ertu viss um að þú viljir eyða þessari þýðingarupptöku? Ekki er hægt að afturkalla þessa aðgerð.", "originalText": "Upprunalegur texti", "translatedText": "Þýddur texti", "sessionSummary": "Samantekt lotu", @@ -1227,19 +1342,24 @@ const Map isIS = { // 配对状态文本 "readyToPair": "Tilbúið til pörunar", "preparingPairingEnvironment": "Undirbýr pörunarumhverfi...", - "connectDeepSoundViaSystemBluetooth": "Tengstu fyrst við Voitrans tækið í gegnum kerfis-Bluetooth", + "connectDeepSoundViaSystemBluetooth": + "Tengstu fyrst við Voitrans tækið í gegnum kerfis-Bluetooth", "deviceBindingConfirm": "Staðfesting á tækisbindingu...", "establishingDeviceAssociation": "Stofna tækjasamband...", "waitingCompletePairing": "Vinsamlegast bíddu, lýkur pörun...", "pairingSuccessRedirecting": "Pörun tókst! Vísar á aðalsíðu...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Gakktu úr skugga um að þú sért tengd(ur) við Voitrans tæki", - "deviceAlreadyBoundToOtherAccount": "Þetta tæki er þegar bundið við annan reikning", + "ensureConnectedDeepSoundDevice": + "Gakktu úr skugga um að þú sért tengd(ur) við Voitrans tæki", + "deviceAlreadyBoundToOtherAccount": + "Þetta tæki er þegar bundið við annan reikning", "deviceAssociationFailed": "Tækjasamband mistókst, vinsamlegast reyndu aftur", - "scanTimeoutEnsureDeviceNearby": "Tími skönnunar rann út, gakktu úr skugga um að tækið sé nálægt", + "scanTimeoutEnsureDeviceNearby": + "Tími skönnunar rann út, gakktu úr skugga um að tækið sé nálægt", "networkError": "Netvilla", - "authorizationFailedCheckCode": "Heimildun mistókst, athugaðu hvort heimildarkóðinn sé réttur", + "authorizationFailedCheckCode": + "Heimildun mistókst, athugaðu hvort heimildarkóðinn sé réttur", "pairingFailedRetry": "Pörun mistókst, vinsamlegast reyndu aftur", // 配对控制器相关 @@ -1248,37 +1368,47 @@ const Map isIS = { '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', + '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...', + 'needManualBindingAuthCode': + 'Handvirkur bindingarheimildarkóði er nauðsynlegur...', 'pairingSuccessful': 'Pörun tókst!', 'enableBluetooth': 'Virkja Bluetooth', 'grantPermissions': 'Veita heimildir', 'retryAssociation': 'Reyna samband aftur', 'retryAuthorization': 'Reyna heimildun aftur', - 'pleaseGrantNecessaryPermissions': 'Vinsamlegast veittu nauðsynlegar heimildir', + 'pleaseGrantNecessaryPermissions': + 'Vinsamlegast veittu nauðsynlegar heimildir', 'checkFailedRetry': 'Athugun mistókst, vinsamlegast reyndu aftur', 'pleaseConnectDeepSoundDevice': 'Vinsamlegast tengdu Voitrans tæki', 'verificationFailedRetry': 'Staðfesting mistókst, vinsamlegast reyndu aftur', 'invalidDeviceAddress': 'Ógilt tækisnetfang', 'bleDeviceAssociationFailed': 'BLE tækjasamband mistókst', - 'deviceAssociationFailedRetry': 'Tækjasamband mistókst, vinsamlegast reyndu aftur', - 'bleConnectionTimeoutRetry': 'BLE tengingartími rann út, vinsamlegast reyndu aftur', + 'deviceAssociationFailedRetry': + 'Tækjasamband mistókst, vinsamlegast reyndu aftur', + 'bleConnectionTimeoutRetry': + 'BLE tengingartími rann út, vinsamlegast reyndu aftur', 'blePairingStartupFailed': 'BLE pörunarstart mistókst', 'bleConnectionFailed': 'BLE tenging mistókst', - 'deviceAuthorizationFailedCheckCode': 'Tækisheimildun mistókst, athugaðu heimildarkóðann', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', // 我知道了 //用户反馈页 @@ -1291,10 +1421,12 @@ const Map isIS = { 'contactHint': 'Tölvupóstur/Sími, svo við getum haft samband við þig', 'submit': 'Senda', 'feedbackSubmitSuccess': 'Endurgjöf send, takk fyrir endurgjöfina!', - 'feedbackSubmitFailed': 'Sending endurgjafar mistókst, vinsamlegast reyndu aftur síðar', + 'feedbackSubmitFailed': + 'Sending endurgjafar mistókst, vinsamlegast reyndu aftur síðar', // OTA升级模块 - "upgradeExitConfirm": "Uppfærsla er í gangi, að hætta mun trufla ferlið, ertu viss um að þú viljir hætta?", + "upgradeExitConfirm": + "Uppfærsla er í gangi, að hætta mun trufla ferlið, ertu viss um að þú viljir hætta?", "deviceModel": "Gerð tækis", "unknownDevice": "Óþekkt tæki", "currentFirmwareVersion": "Núverandi fastbúnaðarútgáfa", @@ -1307,14 +1439,18 @@ const Map isIS = { "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.", + "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", "updateContent": "Innihald uppfærslu", - "removeEarbudsEnsureBattery": "Taktu báðar heyrnartólin úr og gakktu úr skugga um að rafhlaðan á báðum sé yfir 20%", + "removeEarbudsEnsureBattery": + "Taktu báðar heyrnartólin úr og gakktu úr skugga um að rafhlaðan á báðum sé yfir 20%", // 音乐列表页面 "noMusic": "Engin tónlist", // 暂无音乐 @@ -1376,8 +1512,10 @@ const Map isIS = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 071384191..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", @@ -91,7 +92,8 @@ const Map itIT = { "tip": "Suggerimento", "pleaseEnterCompleteCode": "Inserisci il codice di verifica completo", "loginFailed": "Accesso fallito, riprova", - 'pleaseAcceptPrivacyPolicy': 'Per favore, leggi e accetta prima l\'Informativa sulla privacy e il Contratto utente', + 'pleaseAcceptPrivacyPolicy': + 'Per favore, leggi e accetta prima l\'Informativa sulla privacy e il Contratto utente', "enterVerificationCode": "Inserisci codice di verifica", "verificationCodeSentTo": "Codice di verifica inviato a", "resendVerificationCode": "Invia nuovamente il codice di verifica", @@ -100,7 +102,8 @@ const Map itIT = { // 隐私政策弹窗 "loginDeclaration": "Dichiarazione di Voitrans", // Voitrans 声明 - "welcomeToThisApp": "Benvenuto in Voitrans, si prega di leggere attentamente", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Benvenuto in Voitrans, si prega di leggere attentamente", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -116,24 +119,30 @@ const Map itIT = { "signal": "Segnale", "deviceId": "ID dispositivo", "firmwareVersion": "Versione firmware", - "disconnectedDevice": "Nessun dispositivo connesso, clicca il pulsante qui sotto per connettere", + "disconnectedDevice": + "Nessun dispositivo connesso, clicca il pulsante qui sotto per connettere", "connectDevice": "Connetti dispositivo", "topAiExperiences": "Esperienze AI principali", "aiAssistant": "Assistente AI completo", - "aiAssistantInfo": "Consulente esclusivo 24/7, risponde a domande, fornisce suggerimenti", + "aiAssistantInfo": + "Consulente esclusivo 24/7, risponde a domande, fornisce suggerimenti", "interpretation": "Interpretazione simultanea", - "simultaneousInterpretationInfo": "Traduzione in tempo reale in oltre 80 lingue, viaggi all'estero senza preoccupazioni", + "simultaneousInterpretationInfo": + "Traduzione in tempo reale in oltre 80 lingue, viaggi all'estero senza preoccupazioni", "aiCompanion": "Compagno di famiglia", "aiCompanionInfo": "Ti capisce, compagnia calorosa", "homeSlogan": "Connettere il mondo, trascendere il suono", - "turnEarphones": "Apri la custodia di ricarica degli auricolari e inseriscili nelle orecchie", + "turnEarphones": + "Apri la custodia di ricarica degli auricolari e inseriscili nelle orecchie", "currentlyConnected": "Attualmente connesso:", "unsystemSetup": "Vai alle impostazioni di sistema", "talkLater": "Più tardi", "initializing": "Inizializzazione...", - "bluetoothInitializationFailure": "Inizializzazione del servizio Bluetooth fallita", + "bluetoothInitializationFailure": + "Inizializzazione del servizio Bluetooth fallita", "checkingPermissions": "Verifica autorizzazioni...", - "lackPermissions": "Mancano le autorizzazioni Bluetooth e l'accesso alla posizione è necessario", + "lackPermissions": + "Mancano le autorizzazioni Bluetooth e l'accesso alla posizione è necessario", "searchingDevice": "Ricerca dispositivi...", "findConnectedDevice": "Dispositivo connesso trovato", "notFound": "Nessun dispositivo Bluetooth connesso trovato", @@ -141,21 +150,24 @@ const Map itIT = { "connectedDevice": "Connesso al dispositivo:", "failedRefreshDevice": "Aggiornamento del dispositivo fallito", "noDeviceFound": "Nessun dispositivo connesso trovato", - "failedDeviceInformation": "Impossibile ottenere informazioni sul dispositivo", + "failedDeviceInformation": + "Impossibile ottenere informazioni sul dispositivo", "unknownEquipment": "Dispositivo sconosciuto", "zeroSignal": "Nessun segnale", "good": "Buono", "fine": "Ottimo", "excellent": "Eccellente", "unknown": "Sconosciuto", - 'bluetoothTurnedOff': 'Bluetooth disattivato, si prega di attivare il Bluetooth', + 'bluetoothTurnedOff': + 'Bluetooth disattivato, si prega di attivare il Bluetooth', 'bluetoothOff': 'Bluetooth disattivato', 'leftEar': 'Orecchio sinistro', 'rightEar': 'Orecchio destro', 'chargingCase': 'Custodia di ricarica', 'left': 'Sinistra', 'right': 'Destra', - 'checkConnectionStatusFailed': 'Verifica dello stato della connessione fallita', + 'checkConnectionStatusFailed': + 'Verifica dello stato della connessione fallita', // 发现页 "searchAi": "Cerca funzioni AI...", @@ -176,7 +188,8 @@ const Map itIT = { "healthConsultant": "Chat AI multifunzionale", "healthConsultantInfo": "Offre più funzioni di chat AI", "conferenceAssistant": "Assistente per riunioni di lavoro", - "conferenceAssistantInfo": "Registrazione di verbali in tempo reale, traduzione multilingue", + "conferenceAssistantInfo": + "Registrazione di verbali in tempo reale, traduzione multilingue", "usageStats": "Statistiche di utilizzo", "usageStatsInfo": "Visualizza le statistiche di utilizzo dell'applicazione", "scene": "Scenario", @@ -219,7 +232,8 @@ const Map itIT = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -275,8 +289,10 @@ const Map itIT = { 'copyrightVoitrans': '© 2025 Voitrans Technologies', // 会议商品页描述 - 'meetingHeaderDesc1': 'Audio recording, transcription, keyword search, and auto summary.', - 'meetingHeaderDesc2': 'Suitable for business meetings, class notes, and interview minutes.', + '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', @@ -285,27 +301,36 @@ const Map itIT = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + '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.', + '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', + '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', + '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.', + '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.', + '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', + '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', @@ -314,8 +339,10 @@ const Map itIT = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Panoramica dei vantaggi', @@ -330,7 +357,8 @@ const Map itIT = { '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.', + 'vipDisclaimer': + 'I benefici effettivi dipendono dai dettagli del pacchetto e possono cambiare con le versioni.', // 新手引导 / Onboarding 'skip': "Salta", @@ -356,7 +384,8 @@ const Map itIT = { '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”", + '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", @@ -406,7 +435,8 @@ const Map itIT = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -461,40 +491,54 @@ const Map itIT = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -506,7 +550,8 @@ const Map itIT = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -526,7 +571,8 @@ const Map itIT = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -575,7 +621,8 @@ const Map itIT = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -600,7 +647,8 @@ const Map itIT = { "cloudSync": "Recharge sincronizzazione cloud", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Dispositivo connesso:", "accountId": "ID account:", "systemSetting": "Impostazioni di sistema", @@ -608,23 +656,28 @@ const Map itIT = { "darkMode": "Modalità scura", "darkModeInfo": "Passa tra i temi chiaro e scuro dell'app", "backups": "Backup e ripristino", - "backupsInfo": "Backup delle impostazioni e della cronologia delle interazioni AI", + "backupsInfo": + "Backup delle impostazioni e della cronologia delle interazioni AI", "lastBackup": "Ultimo backup:", "privacySettings": "Impostazioni privacy", "privacySettingsInfo": "Gestisci la raccolta dei dati e le autorizzazioni", "permissionManagement": "Gestione autorizzazioni", // 权限管理 - "permissionManagementInfo": "Gestisci le impostazioni delle autorizzazioni dell'app", // 管理应用权限设置 + "permissionManagementInfo": + "Gestisci le impostazioni delle autorizzazioni dell'app", // 管理应用权限设置 "aboutApplication": "Informazioni sull'app", "versions": "Versione", "checkUpdates": "Controlla aggiornamenti", "selectLanguage": "Seleziona lingua", "voiceService": "Servizio vocale", - "voiceServiceInfo": "Seleziona il servizio di riconoscimento e sintesi vocale", + "voiceServiceInfo": + "Seleziona il servizio di riconoscimento e sintesi vocale", "selectVoiceService": "Seleziona servizio vocale", "azureVoiceService": "Servizio vocale Azure", - "azureVoiceServiceInfo": "Servizio vocale cloud di Microsoft, supporta sintesi e riconoscimento vocale di alta qualità", + "azureVoiceServiceInfo": + "Servizio vocale cloud di Microsoft, supporta sintesi e riconoscimento vocale di alta qualità", "flutterVoiceService": "Servizio vocale locale Flutter", - "flutterVoiceServiceInfo": "Servizio vocale locale del dispositivo, utilizzabile senza connessione a Internet", + "flutterVoiceServiceInfo": + "Servizio vocale locale del dispositivo, utilizzabile senza connessione a Internet", 'timbreService': 'Servizio timbro', 'timbreServiceInfo': 'Seleziona il servizio di sintesi vocale del timbro', 'defaultTimbre': 'Timbro predefinito', @@ -635,7 +688,8 @@ const Map itIT = { 'pleaseRead': 'Leggi ad alta voce', 'completeRecording': 'Completa la registrazione', "firmwareUpgrade": "Aggiornamento firmware", - "bleHeadsetFirmwareUpgrade": "Aggiornamento della versione del firmware delle cuffie BLE", + "bleHeadsetFirmwareUpgrade": + "Aggiornamento della versione del firmware delle cuffie BLE", "deviceManagement": "Gestione dispositivi", "manageConnectedDevices": "Gestisci i dispositivi Bluetooth associati", @@ -653,7 +707,8 @@ const Map itIT = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Chat vocale in tempo reale", - "realtimeVoiceChatInfo": "Sperimenta la funzione di interazione vocale intelligente (anteprima della funzione)", + "realtimeVoiceChatInfo": + "Sperimenta la funzione di interazione vocale intelligente (anteprima della funzione)", "loading": "Caricamento...", //设备管理页面 @@ -668,7 +723,8 @@ const Map itIT = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -679,7 +735,8 @@ const Map itIT = { "inputMessage": "Inserisci messaggio...", "imListening": "Sto ascoltando...", "canStartTalking": "Puoi iniziare a parlare", - "addQuestionAboutImage": "Aggiungi una domanda o una descrizione sull'immagine...", + "addQuestionAboutImage": + "Aggiungi una domanda o una descrizione sull'immagine...", "summarizeImageContent": "Riassumi il contenuto dell'immagine", "extractImageText": "Estrai il testo dall'immagine", "translateImageText": "Traduci il testo nell'immagine", @@ -722,10 +779,14 @@ const Map itIT = { '• Controllare le funzioni degli auricolari\n\n' 'Come posso aiutarti?', 'microphonePermission': 'Microfono', - 'voiceRecognitionPermissionText': 'Il riconoscimento vocale richiede l\'accesso al microfono.', - 'voiceTranslationPermissionText': 'Il riconoscimento e la traduzione vocale richiedono l\'accesso al microfono.', - 'phoneCallPermissionText': 'Effettuare chiamate richiede l\'accesso al microfono per le chiamate vocali.', - 'permissionDeniedText': 'Hai negato permanentemente l\'autorizzazione al microfono, vai alle impostazioni di sistema per attivarla.', + 'voiceRecognitionPermissionText': + 'Il riconoscimento vocale richiede l\'accesso al microfono.', + 'voiceTranslationPermissionText': + 'Il riconoscimento e la traduzione vocale richiedono l\'accesso al microfono.', + 'phoneCallPermissionText': + 'Effettuare chiamate richiede l\'accesso al microfono per le chiamate vocali.', + 'permissionDeniedText': + 'Hai negato permanentemente l\'autorizzazione al microfono, vai alle impostazioni di sistema per attivarla.', 'startVoiceInput': 'Avvia input vocale', 'startPhoneCallMode': 'Avvia modalità chiamata, avvia input vocale', @@ -746,9 +807,11 @@ const Map itIT = { 'misleadingAttack': 'Fuorviante/Attacco', 'illegalCriminal': 'Illegale/Criminale', 'privacyRelated': 'Relativo alla privacy', - 'copyrightViolation': 'Violazione del mio diritto d\'autore, della mia reputazione, ecc.', + 'copyrightViolation': + 'Violazione del mio diritto d\'autore, della mia reputazione, ecc.', 'other': 'Altro', - 'reportDescriptionHint': 'Vogliamo sapere perché stai segnalando, puoi descrivere il problema che hai riscontrato.', + 'reportDescriptionHint': + 'Vogliamo sapere perché stai segnalando, puoi descrivere il problema che hai riscontrato.', //'submit': '提交', //Message_bubble @@ -779,15 +842,24 @@ const Map itIT = { 'highest': 'Massima', 'lowest': 'Minima', 'futureForecast': 'Previsioni future', - 'hotWeatherTip': 'Oggi fa caldo, fai attenzione al colpo di calore e bevi molta acqua', - 'coldWeatherTip': 'Oggi la temperatura è bassa, vestiti pesante quando esci per non prendere il raffreddore', - 'rainyWeatherTip': 'Oggi piove, porta un ombrello quando esci e fai attenzione', - 'snowyWeatherTip': 'Oggi nevica, la strada è scivolosa, fai attenzione e vestiti pesante', - 'foggyWeatherTip': 'Oggi c\'è nebbia, la visibilità è scarsa, indossa una mascherina quando esci', - 'windyWeatherTip': 'Oggi c\'è molto vento, fai attenzione quando esci e fissa bene le tue cose', - 'sunnyWeatherTip': 'Oggi c\'è il sole e i raggi UV sono forti, usa la protezione solare quando esci', - 'temperatureDifferenceTip': 'Oggi c\'è una grande differenza di temperatura tra il giorno e la notte, adatta i vestiti', - 'comfortableWeatherTip': 'Oggi il tempo è piacevole, un ottimo momento per le attività all\'aperto', + 'hotWeatherTip': + 'Oggi fa caldo, fai attenzione al colpo di calore e bevi molta acqua', + 'coldWeatherTip': + 'Oggi la temperatura è bassa, vestiti pesante quando esci per non prendere il raffreddore', + 'rainyWeatherTip': + 'Oggi piove, porta un ombrello quando esci e fai attenzione', + 'snowyWeatherTip': + 'Oggi nevica, la strada è scivolosa, fai attenzione e vestiti pesante', + 'foggyWeatherTip': + 'Oggi c\'è nebbia, la visibilità è scarsa, indossa una mascherina quando esci', + 'windyWeatherTip': + 'Oggi c\'è molto vento, fai attenzione quando esci e fissa bene le tue cose', + 'sunnyWeatherTip': + 'Oggi c\'è il sole e i raggi UV sono forti, usa la protezione solare quando esci', + 'temperatureDifferenceTip': + 'Oggi c\'è una grande differenza di temperatura tra il giorno e la notte, adatta i vestiti', + 'comfortableWeatherTip': + 'Oggi il tempo è piacevole, un ottimo momento per le attività all\'aperto', "monday": "Lun", "tuesday": "Mar", "wednesday": "Mer", @@ -839,22 +911,30 @@ const Map itIT = { "logout": "Esci", "logoutTips": "Sei sicuro di voler uscire dall'account corrente?", 'deleteAccount': 'Elimina account', - 'deleteAccountTips': 'Sei sicuro di voler eliminare permanentemente il tuo account? Questa azione non può essere annullata.', + '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': 'Connessione di rete fallita, controlla le impostazioni di rete e riprova', - 'serverTemporarilyUnavailable': 'Il server è temporaneamente non disponibile, riprova più tardi', - 'loginExpiredPleaseRelogin': 'La tua sessione è scaduta, effettua nuovamente l\'accesso', - 'noPermissionForThisOperation': 'Non hai il permesso di eseguire questa operazione', + 'networkConnectionFailed': + 'Connessione di rete fallita, controlla le impostazioni di rete e riprova', + 'serverTemporarilyUnavailable': + 'Il server è temporaneamente non disponibile, riprova più tardi', + 'loginExpiredPleaseRelogin': + 'La tua sessione è scaduta, effettua nuovamente l\'accesso', + 'noPermissionForThisOperation': + 'Non hai il permesso di eseguire questa operazione', 'requestedResourceNotFound': 'La risorsa richiesta non è stata trovata', - 'imageProcessingFailedPleaseReselect': 'Elaborazione dell\'immagine fallita, seleziona un\'altra immagine', + 'imageProcessingFailedPleaseReselect': + 'Elaborazione dell\'immagine fallita, seleziona un\'altra immagine', 'operationFailedPleaseRetry': 'Operazione fallita, riprova', 'serverReturnedError': 'Il server ha restituito un errore', 'serverError': 'Errore del server', - 'networkConnectionFailedCheckSettings': 'Connessione di rete fallita, controlla le impostazioni di rete', - 'serverInternalErrorRetryLater': 'Errore interno del server, riprova più tardi', + 'networkConnectionFailedCheckSettings': + 'Connessione di rete fallita, controlla le impostazioni di rete', + 'serverInternalErrorRetryLater': + 'Errore interno del server, riprova più tardi', // Profile 用户交互 //'error': '错误', @@ -873,16 +953,23 @@ const Map itIT = { // 账号服务相关 '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', // 登出过程发生错误 - 'deleteAccountProcessError': 'Si è verificato un errore durante il processo di eliminazione dell\'account', // 删除账号过程发生错误 + 'thirdPartyLogoutSuccess': + 'Disconnessione di terze parti riuscita', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': + 'Disconnessione di terze parti fallita', // 第三方登录退出失败 + 'signOutProcessError': + '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', // 用户数据清理成功 - 'allUserDataClearSuccess': 'Tutti i dati utente sono stati cancellati con successo', // 所有用户数据清理成功 - 'accountServiceInitialized': 'Servizio account inizializzato', // AccountService 已初始化 + 'allUserDataClearSuccess': + 'Tutti i dati utente sono stati cancellati con successo', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Servizio account inizializzato', // AccountService 已初始化 // 权限管理页面 - 'getPermissionStatusFailed': 'Ottenimento dello stato delle autorizzazioni fallito', + 'getPermissionStatusFailed': + 'Ottenimento dello stato delle autorizzazioni fallito', 'communicationPermissions': 'Autorizzazioni di comunicazione', 'bluetoothPermissions': 'Bluetooth Permissions', 'notificationPermissions': 'Notification Permissions', @@ -902,57 +989,88 @@ const Map itIT = { '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': 'Utilizzato per leggere e gestire eventi e promemoria del calendario', - 'locationPermissionDesc': 'Utilizzato per ottenere informazioni sulla posizione corrente', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Utilizzato per creare eventi e promemoria nel calendario', + 'calendarFullAccessPermissionDesc': + 'Utilizzato per leggere e gestire eventi e promemoria del calendario', + 'locationPermissionDesc': + 'Utilizzato per ottenere informazioni sulla posizione corrente', 'appFunctionNeeds': 'La funzione dell\'app necessita di', 'authorized': 'Autorizzato', 'unauthorized': 'Non autorizzato', - 'needOpenInSystemSettings': 'Deve essere attivato nelle impostazioni di sistema', + 'needOpenInSystemSettings': + 'Deve essere attivato nelle impostazioni di sistema', 'partialAuthorization': 'Autorizzazione parziale', 'unknownStatus': 'Stato sconosciuto', 'permissionGranted': 'Autorizzazione concessa', 'permissionRequestError': 'Errore durante la richiesta di autorizzazione', - 'phonePermissionDetailDesc': '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', + 'phonePermissionDetailDesc': + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -962,7 +1080,8 @@ const Map itIT = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -971,8 +1090,10 @@ const Map itIT = { 'updateNow': 'Aggiorna ora', // 立即更新按钮 'checkUpdate': 'Controlla aggiornamenti', // 检查更新按钮 'updateFailed': 'Aggiornamento fallito', // 更新失败提示 - 'cannotOpenAppStore': 'Impossibile aprire l\'app store, vai manualmente all\'app store per aggiornare', // 无法打开应用商店提示 - 'updateErrorRetry': 'Si è verificato un errore durante l\'aggiornamento, riprova più tardi', // 更新错误重试提示 + 'cannotOpenAppStore': + 'Impossibile aprire l\'app store, vai manualmente all\'app store per aggiornare', // 无法打开应用商店提示 + 'updateErrorRetry': + 'Si è verificato un errore durante l\'aggiornamento, riprova più tardi', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -1108,7 +1229,8 @@ const Map itIT = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1124,10 +1246,12 @@ const Map itIT = { "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.", + "clearHistoryConfirm": + "Sei sicuro di voler cancellare tutta la cronologia delle traduzioni? Questa azione non può essere annullata.", "unknownLanguage": "Lingua sconosciuta", "deleteSessionRecord": "Elimina registrazione sessione", - "deleteSessionConfirm": "Sei sicuro di voler eliminare tutte le registrazioni di traduzione per questa sessione? Questa azione non può essere annullata.", + "deleteSessionConfirm": + "Sei sicuro di voler eliminare tutte le registrazioni di traduzione per questa sessione? Questa azione non può essere annullata.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1159,15 +1283,20 @@ const Map itIT = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1190,7 +1319,8 @@ const Map itIT = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Registrazione originale", "recordSummary": "Riepilogo registrazione", - "clickToGenerateSummary": "Clicca il pulsante qui sotto per generare un riepilogo della sessione", + "clickToGenerateSummary": + "Clicca il pulsante qui sotto per generare un riepilogo della sessione", "summaryContent": "Contenuto del riepilogo", "copied": "Copiato", "summaryCopiledToClipboard": "Riepilogo copiato negli appunti", @@ -1198,9 +1328,11 @@ const Map itIT = { "summaryGenerated": "Riepilogo generato", "generating": "Generazione...", "regenerate": "Rigenera", - "summaryTimeoutMessage": "La richiesta di generazione del riepilogo è scaduta, potrebbe essere a causa di problemi di rete o di un server occupato.", + "summaryTimeoutMessage": + "La richiesta di generazione del riepilogo è scaduta, potrebbe essere a causa di problemi di rete o di un server occupato.", "deleteTranslationRecord": "Elimina registrazione traduzione", - "deleteTranslationConfirm": "Sei sicuro di voler eliminare questa registrazione di traduzione? Questa azione non può essere annullata.", + "deleteTranslationConfirm": + "Sei sicuro di voler eliminare questa registrazione di traduzione? Questa azione non può essere annullata.", "originalText": "Testo originale", "translatedText": "Testo tradotto", "sessionSummary": "Riepilogo sessione", @@ -1227,20 +1359,28 @@ const Map itIT = { // 配对状态文本 "readyToPair": "Pronto per l'associazione", - "preparingPairingEnvironment": "Preparazione dell'ambiente di associazione...", - "connectDeepSoundViaSystemBluetooth": "Connettiti prima al dispositivo Voitrans tramite il Bluetooth di sistema", + "preparingPairingEnvironment": + "Preparazione dell'ambiente di associazione...", + "connectDeepSoundViaSystemBluetooth": + "Connettiti prima al dispositivo Voitrans tramite il Bluetooth di sistema", "deviceBindingConfirm": "Conferma associazione dispositivo...", - "establishingDeviceAssociation": "Creazione dell'associazione del dispositivo...", + "establishingDeviceAssociation": + "Creazione dell'associazione del dispositivo...", "waitingCompletePairing": "Attendi, completamento dell'associazione...", - "pairingSuccessRedirecting": "Associazione riuscita! Reindirizzamento alla pagina principale...", + "pairingSuccessRedirecting": + "Associazione riuscita! Reindirizzamento alla pagina principale...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Assicurati di essere connesso a un dispositivo Voitrans", - "deviceAlreadyBoundToOtherAccount": "Questo dispositivo è già associato a un altro account", + "ensureConnectedDeepSoundDevice": + "Assicurati di essere connesso a un dispositivo Voitrans", + "deviceAlreadyBoundToOtherAccount": + "Questo dispositivo è già associato a un altro account", "deviceAssociationFailed": "Associazione del dispositivo fallita, riprova", - "scanTimeoutEnsureDeviceNearby": "Timeout della scansione, assicurati che il dispositivo sia nelle vicinanze", + "scanTimeoutEnsureDeviceNearby": + "Timeout della scansione, assicurati che il dispositivo sia nelle vicinanze", "networkError": "Errore di rete", - "authorizationFailedCheckCode": "Autorizzazione fallita, controlla che il codice di autorizzazione sia corretto", + "authorizationFailedCheckCode": + "Autorizzazione fallita, controlla che il codice di autorizzazione sia corretto", "pairingFailedRetry": "Associazione fallita, riprova", // 配对控制器相关 @@ -1249,13 +1389,15 @@ const Map itIT = { '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', + '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...", + 'needManualBindingAuthCode': + "È necessario un codice di autorizzazione per l'associazione manuale...", 'pairingSuccessful': 'Associazione riuscita!', 'enableBluetooth': 'Abilita Bluetooth', 'grantPermissions': 'Concedi autorizzazioni', @@ -1267,35 +1409,44 @@ const Map itIT = { 'verificationFailedRetry': 'Verifica fallita, riprova', 'invalidDeviceAddress': 'Indirizzo del dispositivo non valido', 'bleDeviceAssociationFailed': 'Associazione del dispositivo BLE fallita', - 'deviceAssociationFailedRetry': 'Associazione del dispositivo fallita, riprova', + 'deviceAssociationFailedRetry': + 'Associazione del dispositivo fallita, riprova', 'bleConnectionTimeoutRetry': 'Timeout della connessione BLE, riprova', 'blePairingStartupFailed': "Avvio dell'associazione BLE fallito", 'bleConnectionFailed': 'Connessione BLE fallita', - 'deviceAuthorizationFailedCheckCode': 'Autorizzazione del dispositivo fallita, controlla il codice di autorizzazione', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', - 'feedbackDescription': 'Descrivi il problema riscontrato o il tuo suggerimento', + 'feedbackDescription': + 'Descrivi il problema riscontrato o il tuo suggerimento', 'feedbackHint': 'Inserisci il tuo feedback...', 'feedbackRequired': 'Inserisci il contenuto del feedback', 'contactInfo': 'Informazioni di contatto', 'contactHint': 'E-mail/Telefono, per poterti contattare', 'submit': 'Invia', - 'feedbackSubmitSuccess': 'Feedback inviato con successo, grazie per il tuo feedback!', + 'feedbackSubmitSuccess': + 'Feedback inviato con successo, grazie per il tuo feedback!', 'feedbackSubmitFailed': 'Invio del feedback fallito, riprova più tardi', // OTA升级模块 - "upgradeExitConfirm": "Aggiornamento in corso, l'uscita interromperà il processo, sei sicuro di voler uscire?", + "upgradeExitConfirm": + "Aggiornamento in corso, l'uscita interromperà il processo, sei sicuro di voler uscire?", "deviceModel": "Modello del dispositivo", "unknownDevice": "Dispositivo sconosciuto", "currentFirmwareVersion": "Versione firmware attuale", @@ -1308,14 +1459,19 @@ const Map itIT = { "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", + "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", "charging": "In carica", "updateContent": "Contenuto dell'aggiornamento", - "removeEarbudsEnsureBattery": "Rimuovi entrambi gli auricolari e assicurati che la batteria di entrambi sia superiore al 20%", + "removeEarbudsEnsureBattery": + "Rimuovi entrambi gli auricolari e assicurati che la batteria di entrambi sia superiore al 20%", // 音乐列表页面 "noMusic": "Nessuna musica", // 暂无音乐 @@ -1377,8 +1533,10 @@ const Map itIT = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 24b51888b..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": "フランス語", @@ -218,7 +219,8 @@ const Map jaJP = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +276,10 @@ const Map jaJP = { '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.', + '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', @@ -284,27 +288,35 @@ const Map jaJP = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +325,10 @@ const Map jaJP = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +343,8 @@ const Map jaJP = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "スキップ", @@ -355,7 +370,8 @@ const Map jaJP = { '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”", + '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", @@ -405,7 +421,8 @@ const Map jaJP = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +477,54 @@ const Map jaJP = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +536,8 @@ const Map jaJP = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +557,8 @@ const Map jaJP = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +607,8 @@ const Map jaJP = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +633,8 @@ const Map jaJP = { "cloudSync": "クラウド同期料金", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "接続デバイス:", "accountId": "アカウントID:", "systemSetting": "システム設定", @@ -667,7 +702,8 @@ const Map jaJP = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -901,7 +937,8 @@ const Map jaJP = { 'locationInfo': '位置情報', 'phonePermissionDesc': '通話機能に使用', 'smsPermissionDesc': 'SMS機能に使用', - 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'カレンダーイベントとリマインダーの作成に使用', 'calendarFullAccessPermissionDesc': 'カレンダーイベントとリマインダーの読み取りと管理に使用', 'locationPermissionDesc': '現在の位置情報の取得に使用', @@ -915,20 +952,27 @@ const Map jaJP = { 'permissionRequestError': '権限要求エラー', 'phonePermissionDetailDesc': '通話機能には電話権限が必要', 'smsPermissionDetailDesc': 'SMS機能にはSMS権限が必要', - 'alarmPermissionDetailDesc': 'This permission is required to set exact alarms and ensure reminders trigger on time', + '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', + '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', + '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', + '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', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': 'アプリは完全な機能のためにこの権限が必要です', 'permanentDenialText': '{permission}権限を永続的に拒否されました。アプリ設定で有効にしてください', 'goToSettings': '設定に移動', @@ -936,22 +980,34 @@ const Map jaJP = { // 权限申请 '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.', + '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.', + '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.', + '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': @@ -961,7 +1017,8 @@ const Map jaJP = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -1107,7 +1164,8 @@ const Map jaJP = { "selectTargetLanguage": "ターゲット言語を選択", "me": "Me", "counterPart": "Counterpart", - "bluetoothCallStateError": "Please make sure the Bluetooth headset is connected to the phone and in a call state", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1158,15 +1216,20 @@ const Map jaJP = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1197,7 +1260,8 @@ const Map jaJP = { "summaryGenerated": "要約が生成されました", "generating": "生成中...", "regenerate": "再生成", - "summaryTimeoutMessage": "要約生成リクエストがタイムアウトしました。ネットワークの問題またはサーバーの過負荷が原因の可能性があります。", + "summaryTimeoutMessage": + "要約生成リクエストがタイムアウトしました。ネットワークの問題またはサーバーの過負荷が原因の可能性があります。", "deleteTranslationRecord": "翻訳記録を削除", "deleteTranslationConfirm": "この翻訳記録を削除してもよろしいですか?この操作は元に戻せません。", "originalText": "元のテキスト", @@ -1227,7 +1291,8 @@ const Map jaJP = { // 配对状态文本 "readyToPair": "ペアリング準備完了", "preparingPairingEnvironment": "ペアリング環境を準備中...", - "connectDeepSoundViaSystemBluetooth": "まずシステムBluetoothでDeepSoundデバイスを接続してください", + "connectDeepSoundViaSystemBluetooth": + "まずシステムBluetoothでDeepSoundデバイスを接続してください", "deviceBindingConfirm": "デバイスバインド確認中...", "establishingDeviceAssociation": "デバイス関連付けを確立中...", "waitingCompletePairing": "お待ちください、ペアリングを完了中...", @@ -1275,10 +1340,14 @@ const Map jaJP = { ///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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', // 我知道了 //用户反馈页 @@ -1307,9 +1376,12 @@ const Map jaJP = { "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.", + "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": "充電中", @@ -1376,8 +1448,10 @@ const Map jaJP = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 d22bb1acf..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": "프랑스어", @@ -218,7 +219,8 @@ const Map koKR = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +276,10 @@ const Map koKR = { 'copyrightVoitrans': '© 2025 Voitrans Technologies', // 会议商品页描述 - 'meetingHeaderDesc1': 'Audio recording, transcription, keyword search, and auto summary.', - 'meetingHeaderDesc2': 'Suitable for business meetings, class notes, and interview minutes.', + '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', @@ -284,7 +288,8 @@ const Map koKR = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 'transHeaderDesc1': '실시간 동시통역과 텍스트 번역, 저지연 음성 방송.', @@ -300,11 +305,15 @@ const Map koKR = { 'transDisclaimer': '번역 품질은 마이크, 네트워크 지연 및 주변 소음에 따라 달라집니다.', // AI 商品页描述 - 'aiHeaderDesc1': 'Longer conversation quota, more tool calls, extended context length.', - 'aiHeaderDesc2': 'Suitable for agent Q&A, summarization, analysis, and task execution.', + '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', + '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', @@ -313,8 +322,10 @@ const Map koKR = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': '혜택 개요', @@ -355,7 +366,8 @@ const Map koKR = { '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”", + '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", @@ -405,7 +417,8 @@ const Map koKR = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +473,54 @@ const Map koKR = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +532,8 @@ const Map koKR = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +553,8 @@ const Map koKR = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +603,8 @@ const Map koKR = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +629,8 @@ const Map koKR = { "cloudSync": "클라우드 동기화료", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "연결된 기기:", "accountId": "계정 ID:", "systemSetting": "시스템 설정", @@ -667,7 +698,8 @@ const Map koKR = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -901,7 +933,8 @@ const Map koKR = { 'locationInfo': '위치 정보', 'phonePermissionDesc': '전화 걸기 기능에 사용됩니다', 'smsPermissionDesc': '문자 보내기 기능에 사용됩니다', - 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': '캘린더 이벤트 및 알림 생성에 사용됩니다', 'calendarFullAccessPermissionDesc': '캘린더 이벤트 및 알림 읽기 및 관리에 사용됩니다', 'locationPermissionDesc': '현재 위치 정보 가져오기에 사용됩니다', @@ -915,20 +948,27 @@ const Map koKR = { 'permissionRequestError': '권한 요청 중 오류 발생', 'phonePermissionDetailDesc': '전화 걸기 기능에는 전화 권한이 필요합니다', 'smsPermissionDetailDesc': '문자 보내기 기능에는 문자 권한이 필요합니다', - 'alarmPermissionDetailDesc': 'This permission is required to set exact alarms and ensure reminders trigger on time', + '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', + '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', + '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', + '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', + 'notificationPermissionDetailDesc': + 'App needs notification permission to send you important alerts and messages', 'appNeedsPermissionForFullFunction': '앱이 전체 기능을 제공하려면 이 권한이 필요합니다', 'permanentDenialText': '{permission} 권한을 영구적으로 거부하셨습니다. 앱 설정에서 활성화해주세요', 'goToSettings': '설정으로 이동', @@ -936,22 +976,34 @@ const Map koKR = { // 权限申请 '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.', + '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.', + '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.', + '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': @@ -961,7 +1013,8 @@ const Map koKR = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,7 +1023,8 @@ const Map koKR = { 'updateNow': '지금 업데이트', // 立即更新按钮 'checkUpdate': '업데이트 확인', // 检查更新按钮 'updateFailed': '업데이트 실패', // 更新失败提示 - 'cannotOpenAppStore': '앱 스토어를 열 수 없습니다. 수동으로 앱 스토어로 이동하여 업데이트하세요', // 无法打开应用商店提示 + 'cannotOpenAppStore': + '앱 스토어를 열 수 없습니다. 수동으로 앱 스토어로 이동하여 업데이트하세요', // 无法打开应用商店提示 'updateErrorRetry': '업데이트 중 오류가 발생했습니다. 잠시 후 다시 시도하세요', // 更新错误重试提示 //国家列表 @@ -1107,7 +1161,8 @@ const Map koKR = { "selectTargetLanguage": "대상 언어 선택", "me": "Me", "counterPart": "Counterpart", - "bluetoothCallStateError": "Please make sure the Bluetooth headset is connected to the phone and in a call state", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1158,15 +1213,20 @@ const Map koKR = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1275,10 +1335,14 @@ const Map koKR = { ///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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', // 我知道了 //用户反馈页 @@ -1307,9 +1371,12 @@ const Map koKR = { "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.", + "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": "충전 중", @@ -1376,8 +1443,10 @@ const Map koKR = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 6406a54ed..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ų", @@ -72,7 +73,8 @@ const Map ltLT = { // 登录页 "welcome": "Sveiki atvykę", - "loginTips": "Prisijunkite arba užsiregistruokite naudodami savo telefono numerį arba el. paštą", + "loginTips": + "Prisijunkite arba užsiregistruokite naudodami savo telefono numerį arba el. paštą", "accountNumber": "Telefono numeris arba el. paštas", "verificationCode": "Patvirtinimo kodas", "getCode": "Gauti kodą", @@ -91,7 +93,8 @@ const Map ltLT = { "tip": "Patarimas", "pleaseEnterCompleteCode": "Įveskite visą patvirtinimo kodą", "loginFailed": "Prisijungimas nepavyko, bandykite dar kartą", - 'pleaseAcceptPrivacyPolicy': 'Pirmiausia perskaitykite ir sutikite su Privatumo politika ir Vartotojo sutartimi', + 'pleaseAcceptPrivacyPolicy': + 'Pirmiausia perskaitykite ir sutikite su Privatumo politika ir Vartotojo sutartimi', "enterVerificationCode": "Įveskite patvirtinimo kodą", "verificationCodeSentTo": "Patvirtinimo kodas išsiųstas į", "resendVerificationCode": "Išsiųsti patvirtinimo kodą iš naujo", @@ -100,7 +103,8 @@ const Map ltLT = { // 隐私政策弹窗 "loginDeclaration": "Voitrans deklaracija", // Voitrans 声明 - "welcomeToThisApp": "Sveiki atvykę į Voitrans, prašome atidžiai perskaityti", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Sveiki atvykę į Voitrans, prašome atidžiai perskaityti", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -116,24 +120,29 @@ const Map ltLT = { "signal": "Signalas", "deviceId": "Įrenginio ID", "firmwareVersion": "Programinės įrangos versija", - "disconnectedDevice": "Nėra prijungto įrenginio, spustelėkite mygtuką žemiau, kad prisijungtumėte", + "disconnectedDevice": + "Nėra prijungto įrenginio, spustelėkite mygtuką žemiau, kad prisijungtumėte", "connectDevice": "Prijungti įrenginį", "topAiExperiences": "Populiariausios AI patirtys", "aiAssistant": "Visapusiškas AI asistentas", - "aiAssistantInfo": "Išskirtinis 24/7 konsultantas, atsako į klausimus, teikia pasiūlymus", + "aiAssistantInfo": + "Išskirtinis 24/7 konsultantas, atsako į klausimus, teikia pasiūlymus", "interpretation": "Sinchroninis vertimas", - "simultaneousInterpretationInfo": "Vertimas realiuoju laiku į daugiau nei 80 kalbų, nerūpestingos kelionės į užsienį", + "simultaneousInterpretationInfo": + "Vertimas realiuoju laiku į daugiau nei 80 kalbų, nerūpestingos kelionės į užsienį", "aiCompanion": "Šeimos draugas", "aiCompanionInfo": "Supranta jus, šilta draugija", "homeSlogan": "Jungiantis pasaulį, pranokstantis garsą", - "turnEarphones": "Atidarykite ausinių įkrovimo dėklą ir įsidėkite ausines į ausis", + "turnEarphones": + "Atidarykite ausinių įkrovimo dėklą ir įsidėkite ausines į ausis", "currentlyConnected": "Šiuo metu prijungta:", "unsystemSetup": "Eiti į sistemos nustatymus", "talkLater": "Vėliau", "initializing": "Inicijuojama...", "bluetoothInitializationFailure": "Bluetooth paslaugos inicijavimas nepavyko", "checkingPermissions": "Tikrinami leidimai...", - "lackPermissions": "Trūksta Bluetooth leidimų ir yra reikalinga lokacijos prieiga", + "lackPermissions": + "Trūksta Bluetooth leidimų ir yra reikalinga lokacijos prieiga", "searchingDevice": "Ieškoma įrenginių...", "findConnectedDevice": "Rastas prijungtas įrenginys", "notFound": "Nerasta prijungto Bluetooth įrenginio", @@ -170,13 +179,15 @@ const Map ltLT = { "faceToFaceTranslation": "Vertimas akis į akį", 'audioVideoTranslation': 'Garso ir vaizdo vertimas', 'callTranslation': 'Skambučių vertimas', - "simultaneousTranslationInfo": "Vertimas realiuoju laiku į daugiau nei 80 kalbų", + "simultaneousTranslationInfo": + "Vertimas realiuoju laiku į daugiau nei 80 kalbų", "aiGirlfriend": "AI mergina", "aiGirlfriendInfo": "Intelektualus draugas, bendraukite bet kada", "healthConsultant": "Daugiafunkcis AI pokalbis", "healthConsultantInfo": "Siūlo daugiau AI pokalbių funkcijų", "conferenceAssistant": "Verslo susitikimų asistentas", - "conferenceAssistantInfo": "Susitikimų protokolo įrašymas realiuoju laiku, daugiakalbis vertimas", + "conferenceAssistantInfo": + "Susitikimų protokolo įrašymas realiuoju laiku, daugiakalbis vertimas", "usageStats": "Naudojimo statistika", "usageStatsInfo": "Peržiūrėkite jūsų naudojimo statistiką", "scene": "Scenarijus", @@ -219,7 +230,8 @@ const Map ltLT = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -275,8 +287,10 @@ const Map ltLT = { '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.', + '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', @@ -285,27 +299,35 @@ const Map ltLT = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -314,8 +336,10 @@ const Map ltLT = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -330,7 +354,8 @@ const Map ltLT = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Praleisti", @@ -356,7 +381,8 @@ const Map ltLT = { '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”', + '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', @@ -406,7 +432,8 @@ const Map ltLT = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -461,40 +488,54 @@ const Map ltLT = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -506,7 +547,8 @@ const Map ltLT = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -526,7 +568,8 @@ const Map ltLT = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -575,7 +618,8 @@ const Map ltLT = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -600,7 +644,8 @@ const Map ltLT = { "cloudSync": "Synchronizacijos užsipirkimas", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Prijungtas įrenginys:", "accountId": "Paskyros ID:", "systemSetting": "Sistemos nustatymas", @@ -613,7 +658,8 @@ const Map ltLT = { "privacySettings": "Privatumo nustatymai", "privacySettingsInfo": "Valdyti duomenų rinkimą ir leidimus", "permissionManagement": "Leidimų valdymas", // 权限管理 - "permissionManagementInfo": "Valdyti programos leidimų nustatymus", // 管理应用权限设置 + "permissionManagementInfo": + "Valdyti programos leidimų nustatymus", // 管理应用权限设置 "aboutApplication": "Apie programą", "versions": "Versija", "checkUpdates": "Patikrinti atnaujinimus", @@ -622,9 +668,11 @@ const Map ltLT = { "voiceServiceInfo": "Pasirinkti kalbos atpažinimo ir sintezės paslaugą", "selectVoiceService": "Pasirinkti balso paslaugą", "azureVoiceService": "Azure balso paslauga", - "azureVoiceServiceInfo": "Microsoft debesies balso paslauga, palaiko aukštos kokybės balso sintezę ir atpažinimą", + "azureVoiceServiceInfo": + "Microsoft debesies balso paslauga, palaiko aukštos kokybės balso sintezę ir atpažinimą", "flutterVoiceService": "Flutter vietinė balso paslauga", - "flutterVoiceServiceInfo": "Įrenginio vietinė balso paslauga, galima naudoti be interneto ryšio", + "flutterVoiceServiceInfo": + "Įrenginio vietinė balso paslauga, galima naudoti be interneto ryšio", 'timbreService': 'Tembro paslauga', 'timbreServiceInfo': 'Pasirinkite tembro balso sintezės paslaugą', 'defaultTimbre': 'Numatytasis tembras', @@ -635,7 +683,8 @@ const Map ltLT = { 'pleaseRead': 'Perskaitykite garsiai', 'completeRecording': 'Užbaigti įrašymą', "firmwareUpgrade": "Programinės įrangos atnaujinimas", - "bleHeadsetFirmwareUpgrade": "BLE ausinių programinės įrangos versijos atnaujinimas", + "bleHeadsetFirmwareUpgrade": + "BLE ausinių programinės įrangos versijos atnaujinimas", "deviceManagement": "Įrenginių valdymas", "manageConnectedDevices": "Valdyti prijungtus Bluetooth įrenginius", @@ -653,7 +702,8 @@ const Map ltLT = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Balso pokalbis realiuoju laiku", - "realtimeVoiceChatInfo": "Išbandykite išmaniosios balso sąveikos funkciją (funkcijos peržiūra)", + "realtimeVoiceChatInfo": + "Išbandykite išmaniosios balso sąveikos funkciją (funkcijos peržiūra)", "loading": "Įkeliama...", //设备管理页面 @@ -668,7 +718,8 @@ const Map ltLT = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -696,7 +747,8 @@ const Map ltLT = { "listeningToYou": "Klausausi jūsų...", "processing": "Apdorojama...", "loadMoreMessages": "Įkelti daugiau žinučių...", - "loadFailedClickRetry": "Įkėlimas nepavyko, spustelėkite, kad bandytumėte dar kartą", + "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", // 语音打断 @@ -722,10 +774,14 @@ const Map ltLT = { '• Valdyti ausinių funkcijas\n\n' 'Kuo galiu jums padėti?', 'microphonePermission': 'Mikrofonas', - 'voiceRecognitionPermissionText': 'Balso atpažinimo funkcijai reikalingas priėjimas prie mikrofono.', - 'voiceTranslationPermissionText': 'Balso atpažinimo ir vertimo funkcijai reikalingas priėjimas prie mikrofono.', - 'phoneCallPermissionText': 'Skambinimo funkcijai reikalingas priėjimas prie mikrofono balso skambučiams.', - 'permissionDeniedText': 'Jūs visam laikui atmetėte mikrofono leidimą, eikite į sistemos nustatymus, kad jį įjungtumėte.', + 'voiceRecognitionPermissionText': + 'Balso atpažinimo funkcijai reikalingas priėjimas prie mikrofono.', + 'voiceTranslationPermissionText': + 'Balso atpažinimo ir vertimo funkcijai reikalingas priėjimas prie mikrofono.', + 'phoneCallPermissionText': + 'Skambinimo funkcijai reikalingas priėjimas prie mikrofono balso skambučiams.', + 'permissionDeniedText': + 'Jūs visam laikui atmetėte mikrofono leidimą, eikite į sistemos nustatymus, kad jį įjungtumėte.', 'startVoiceInput': 'Pradėti balso įvestį', 'startPhoneCallMode': 'Pradėti skambinimo režimą, pradėti balso įvestį', @@ -748,7 +804,8 @@ const Map ltLT = { 'privacyRelated': 'Susijęs su privatumu', 'copyrightViolation': 'Pažeidžia mano autorių teises, reputaciją ir pan.', 'other': 'Kita', - 'reportDescriptionHint': 'Norėtume sužinoti, kodėl pranešate, galite aprašyti problemą, su kuria susidūrėte.', + 'reportDescriptionHint': + 'Norėtume sužinoti, kodėl pranešate, galite aprašyti problemą, su kuria susidūrėte.', //'submit': '提交', //Message_bubble @@ -779,15 +836,24 @@ const Map ltLT = { 'highest': 'Aukščiausia', 'lowest': 'Žemiausia', 'futureForecast': 'Ateities prognozė', - 'hotWeatherTip': 'Šiandien karšta, saugokitės karščio smūgio ir gerkite daug vandens', - 'coldWeatherTip': 'Šiandien temperatūra žema, šiltai apsirenkite eidami į lauką, kad neperšaltumėte', - 'rainyWeatherTip': 'Šiandien lietus, pasiimkite skėtį eidami į lauką ir būkite atsargūs', - 'snowyWeatherTip': 'Šiandien sninga, kelias slidus, būkite atsargūs ir šiltai apsirenkite', - 'foggyWeatherTip': 'Šiandien rūkas, matomumas prastas, dėvėkite kaukę eidami į lauką', - 'windyWeatherTip': 'Šiandien vėjuota, būkite atsargūs eidami į lauką ir pritvirtinkite savo daiktus', - 'sunnyWeatherTip': 'Šiandien saulėta ir stiprūs UV spinduliai, naudokite apsaugos nuo saulės kremą eidami į lauką', - 'temperatureDifferenceTip': 'Šiandien didelis temperatūros skirtumas tarp dienos ir nakties, pritaikykite drabužius', - 'comfortableWeatherTip': 'Šiandien oras malonus, puikus laikas lauko veikloms', + 'hotWeatherTip': + 'Šiandien karšta, saugokitės karščio smūgio ir gerkite daug vandens', + 'coldWeatherTip': + 'Šiandien temperatūra žema, šiltai apsirenkite eidami į lauką, kad neperšaltumėte', + 'rainyWeatherTip': + 'Šiandien lietus, pasiimkite skėtį eidami į lauką ir būkite atsargūs', + 'snowyWeatherTip': + 'Šiandien sninga, kelias slidus, būkite atsargūs ir šiltai apsirenkite', + 'foggyWeatherTip': + 'Šiandien rūkas, matomumas prastas, dėvėkite kaukę eidami į lauką', + 'windyWeatherTip': + 'Šiandien vėjuota, būkite atsargūs eidami į lauką ir pritvirtinkite savo daiktus', + 'sunnyWeatherTip': + 'Šiandien saulėta ir stiprūs UV spinduliai, naudokite apsaugos nuo saulės kremą eidami į lauką', + 'temperatureDifferenceTip': + 'Šiandien didelis temperatūros skirtumas tarp dienos ir nakties, pritaikykite drabužius', + 'comfortableWeatherTip': + 'Šiandien oras malonus, puikus laikas lauko veikloms', "monday": "Pirm", "tuesday": "Antr", "wednesday": "Treč", @@ -839,22 +905,29 @@ const Map ltLT = { "logout": "Atsijungti", "logoutTips": "Ar tikrai norite atsijungti nuo dabartinės paskyros?", 'deleteAccount': 'Ištrinti paskyrą', - 'deleteAccountTips': 'Ar tikrai norite visam laikui ištrinti savo paskyrą? Šio veiksmo negalima atšaukti.', + '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': 'Tinklo ryšio klaida, patikrinkite tinklo nustatymus ir bandykite dar kartą', - 'serverTemporarilyUnavailable': 'Serveris laikinai nepasiekiamas, bandykite dar kartą vėliau', + 'networkConnectionFailed': + 'Tinklo ryšio klaida, patikrinkite tinklo nustatymus ir bandykite dar kartą', + 'serverTemporarilyUnavailable': + 'Serveris laikinai nepasiekiamas, bandykite dar kartą vėliau', 'loginExpiredPleaseRelogin': 'Jūsų sesija baigėsi, prisijunkite iš naujo', - 'noPermissionForThisOperation': 'Jūs neturite leidimo atlikti šios operacijos', + 'noPermissionForThisOperation': + 'Jūs neturite leidimo atlikti šios operacijos', 'requestedResourceNotFound': 'Prašomas resursas nerastas', - 'imageProcessingFailedPleaseReselect': 'Vaizdo apdorojimas nepavyko, pasirinkite kitą vaizdą', + 'imageProcessingFailedPleaseReselect': + 'Vaizdo apdorojimas nepavyko, pasirinkite kitą vaizdą', 'operationFailedPleaseRetry': 'Operacija nepavyko, bandykite dar kartą', 'serverReturnedError': 'Serveris grąžino klaidą', 'serverError': 'Serverio klaida', - 'networkConnectionFailedCheckSettings': 'Tinklo ryšio klaida, patikrinkite tinklo nustatymus', - 'serverInternalErrorRetryLater': 'Vidinė serverio klaida, bandykite dar kartą vėliau', + 'networkConnectionFailedCheckSettings': + 'Tinklo ryšio klaida, patikrinkite tinklo nustatymus', + 'serverInternalErrorRetryLater': + 'Vidinė serverio klaida, bandykite dar kartą vėliau', // Profile 用户交互 //'error': '错误', @@ -868,18 +941,24 @@ const Map ltLT = { 'loggedOut': 'Sėkmingai atsijungta', 'logoutFailedRetry': 'Atsijungimas nepavyko, bandykite dar kartą', 'accountPermanentlyDeleted': 'Paskyra visam laikui ištrinta', - 'deleteAccountFailedRetry': 'Paskyros ištrynimas nepavyko, bandykite dar kartą', + 'deleteAccountFailedRetry': + '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', // 第三方登录退出失败 + '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', // 删除账号过程发生错误 + '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 已初始化 + 'allUserDataClearSuccess': + 'Visi vartotojo duomenys sėkmingai išvalyti', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Paskyros paslauga inicijuota', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Nepavyko gauti leidimo būsenos', @@ -902,9 +981,12 @@ const Map ltLT = { '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': 'Naudojama skaitant ir valdant kalendoriaus įvykius ir priminimus', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Naudojama kuriant kalendoriaus įvykius ir priminimus', + 'calendarFullAccessPermissionDesc': + 'Naudojama skaitant ir valdant kalendoriaus įvykius ir priminimus', 'locationPermissionDesc': 'Naudojama gaunant dabartinės vietovės informaciją', 'appFunctionNeeds': 'Programos funkcijai reikia', 'authorized': 'Leista', @@ -914,45 +996,70 @@ const Map ltLT = { 'unknownStatus': 'Nežinoma būsena', 'permissionGranted': 'Leidimas suteiktas', 'permissionRequestError': 'Klaida prašant leidimo', - 'phonePermissionDetailDesc': 'Skambinimo funkcijai reikalingas telefono leidimas', + '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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -962,7 +1069,8 @@ const Map ltLT = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -971,8 +1079,10 @@ const Map ltLT = { 'updateNow': 'Atnaujinti dabar', // 立即更新按钮 'checkUpdate': 'Patikrinti atnaujinimą', // 检查更新按钮 'updateFailed': 'Atnaujinimas nepavyko', // 更新失败提示 - 'cannotOpenAppStore': 'Negalima atidaryti programų parduotuvės, eikite į parduotuvę rankiniu būdu, kad atnaujintumėte', // 无法打开应用商店提示 - 'updateErrorRetry': 'Atnaujinimo metu įvyko klaida, bandykite dar kartą vėliau', // 更新错误重试提示 + 'cannotOpenAppStore': + 'Negalima atidaryti programų parduotuvės, eikite į parduotuvę rankiniu būdu, kad atnaujintumėte', // 无法打开应用商店提示 + 'updateErrorRetry': + 'Atnaujinimo metu įvyko klaida, bandykite dar kartą vėliau', // 更新错误重试提示 //国家列表 "邮箱": "El. paštas", @@ -1108,7 +1218,8 @@ const Map ltLT = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1124,10 +1235,12 @@ const Map ltLT = { "historyRecords": "History Records", "clearResults": "Clear Results", "clearHistory": "Išvalyti istoriją", - "clearHistoryConfirm": "Ar tikrai norite išvalyti visą vertimų istoriją? Šio veiksmo negalima atšaukti.", + "clearHistoryConfirm": + "Ar tikrai norite išvalyti visą vertimų istoriją? Šio veiksmo negalima atšaukti.", "unknownLanguage": "Nežinoma kalba", "deleteSessionRecord": "Ištrinti sesijos įrašą", - "deleteSessionConfirm": "Ar tikrai norite ištrinti visus šios sesijos vertimų įrašus? Šio veiksmo negalima atšaukti.", + "deleteSessionConfirm": + "Ar tikrai norite ištrinti visus šios sesijos vertimų įrašus? Šio veiksmo negalima atšaukti.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1159,15 +1272,20 @@ const Map ltLT = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1190,7 +1308,8 @@ const Map ltLT = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Originalus įrašas", "recordSummary": "Įrašo santrauka", - "clickToGenerateSummary": "Spustelėkite mygtuką žemiau, kad sugeneruotumėte sesijos santrauką", + "clickToGenerateSummary": + "Spustelėkite mygtuką žemiau, kad sugeneruotumėte sesijos santrauką", "summaryContent": "Santraukos turinys", "copied": "Nukopijuota", "summaryCopiledToClipboard": "Santrauka nukopijuota į iškarpinę", @@ -1198,9 +1317,11 @@ const Map ltLT = { "summaryGenerated": "Santrauka sugeneruota", "generating": "Generuojama...", "regenerate": "Generuoti iš naujo", - "summaryTimeoutMessage": "Santraukos generavimo užklausa baigėsi, galbūt dėl tinklo problemų ar užimto serverio.", + "summaryTimeoutMessage": + "Santraukos generavimo užklausa baigėsi, galbūt dėl tinklo problemų ar užimto serverio.", "deleteTranslationRecord": "Ištrinti vertimo įrašą", - "deleteTranslationConfirm": "Ar tikrai norite ištrinti šį vertimo įrašą? Šio veiksmo negalima atšaukti.", + "deleteTranslationConfirm": + "Ar tikrai norite ištrinti šį vertimo įrašą? Šio veiksmo negalima atšaukti.", "originalText": "Originalus tekstas", "translatedText": "Išverstas tekstas", "sessionSummary": "Sesijos santrauka", @@ -1228,19 +1349,26 @@ const Map ltLT = { // 配对状态文本 "readyToPair": "Pasiruošta susiejimui", "preparingPairingEnvironment": "Ruošiama susiejimo aplinka...", - "connectDeepSoundViaSystemBluetooth": "Pirmiausia prisijunkite prie Voitrans įrenginio per sistemos Bluetooth", + "connectDeepSoundViaSystemBluetooth": + "Pirmiausia prisijunkite prie Voitrans įrenginio per sistemos Bluetooth", "deviceBindingConfirm": "Įrenginio susiejimo patvirtinimas...", "establishingDeviceAssociation": "Kuriama įrenginio asociacija...", "waitingCompletePairing": "Prašome palaukti, baigiamas susiejimas...", - "pairingSuccessRedirecting": "Susiejimas sėkmingas! Nukreipiama į pagrindinį puslapį...", + "pairingSuccessRedirecting": + "Susiejimas sėkmingas! Nukreipiama į pagrindinį puslapį...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Įsitikinkite, kad esate prisijungę prie Voitrans įrenginio", - "deviceAlreadyBoundToOtherAccount": "Šis įrenginys jau susietas su kita paskyra", - "deviceAssociationFailed": "Įrenginio asociacija nepavyko, bandykite dar kartą", - "scanTimeoutEnsureDeviceNearby": "Skenavimo laikas baigėsi, įsitikinkite, kad įrenginys yra netoliese", + "ensureConnectedDeepSoundDevice": + "Įsitikinkite, kad esate prisijungę prie Voitrans įrenginio", + "deviceAlreadyBoundToOtherAccount": + "Šis įrenginys jau susietas su kita paskyra", + "deviceAssociationFailed": + "Įrenginio asociacija nepavyko, bandykite dar kartą", + "scanTimeoutEnsureDeviceNearby": + "Skenavimo laikas baigėsi, įsitikinkite, kad įrenginys yra netoliese", "networkError": "Tinklo klaida", - "authorizationFailedCheckCode": "Autorizacija nepavyko, patikrinkite, ar autorizacijos kodas yra teisingas", + "authorizationFailedCheckCode": + "Autorizacija nepavyko, patikrinkite, ar autorizacijos kodas yra teisingas", "pairingFailedRetry": "Susiejimas nepavyko, bandykite dar kartą", // 配对控制器相关 @@ -1249,13 +1377,15 @@ const Map ltLT = { 'deviceDisconnected': 'Įrenginys atjungtas', 'readyToStartPairing': 'Pasiruošta pradėti susiejimą', 'checkingEnvironment': 'Tikrinama aplinka...', - 'ensureHeadsetOnAndPairingMode': 'Įsitikinkite, kad ausinės įjungtos ir yra susiejimo režime', + '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...', + 'needManualBindingAuthCode': + 'Reikalingas rankinio susiejimo autorizacijos kodas...', 'pairingSuccessful': 'Susiejimas sėkmingas!', 'enableBluetooth': 'Įjungti Bluetooth', 'grantPermissions': 'Suteikti leidimus', @@ -1267,35 +1397,45 @@ const Map ltLT = { 'verificationFailedRetry': 'Patvirtinimas nepavyko, bandykite dar kartą', 'invalidDeviceAddress': 'Neteisingas įrenginio adresas', 'bleDeviceAssociationFailed': 'BLE įrenginio asociacija nepavyko', - 'deviceAssociationFailedRetry': 'Įrenginio asociacija nepavyko, bandykite dar kartą', + 'deviceAssociationFailedRetry': + 'Įrenginio asociacija nepavyko, bandykite dar kartą', 'bleConnectionTimeoutRetry': 'BLE ryšio laikas baigėsi, bandykite dar kartą', 'blePairingStartupFailed': 'BLE susiejimo paleidimas nepavyko', 'bleConnectionFailed': 'BLE ryšys nepavyko', - 'deviceAuthorizationFailedCheckCode': 'Įrenginio autorizacija nepavyko, patikrinkite autorizacijos kodą', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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ą', - 'feedbackDescription': 'Aprašykite problemą, su kuria susidūrėte, arba savo pasiūlymą', + 'feedbackDescription': + 'Aprašykite problemą, su kuria susidūrėte, arba savo pasiūlymą', 'feedbackHint': 'Įveskite savo atsiliepimą...', 'feedbackRequired': 'Įveskite atsiliepimo turinį', 'contactInfo': 'Kontaktinė informacija', 'contactHint': 'El. paštas/Telefonas, kad galėtume su jumis susisiekti', 'submit': 'Pateikti', - 'feedbackSubmitSuccess': 'Atsiliepimas sėkmingai pateiktas, dėkojame už jūsų atsiliepimą!', - 'feedbackSubmitFailed': 'Atsiliepimo pateikimas nepavyko, bandykite dar kartą vėliau', + 'feedbackSubmitSuccess': + 'Atsiliepimas sėkmingai pateiktas, dėkojame už jūsų atsiliepimą!', + 'feedbackSubmitFailed': + 'Atsiliepimo pateikimas nepavyko, bandykite dar kartą vėliau', // OTA升级模块 - "upgradeExitConfirm": "Vyksta atnaujinimas, išėjus procesas bus nutrauktas, ar tikrai norite išeiti?", + "upgradeExitConfirm": + "Vyksta atnaujinimas, išėjus procesas bus nutrauktas, ar tikrai norite išeiti?", "deviceModel": "Įrenginio modelis", "unknownDevice": "Nežinomas įrenginys", "currentFirmwareVersion": "Dabartinė programinės įrangos versija", @@ -1308,14 +1448,19 @@ const Map ltLT = { "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", + "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", "charging": "Kraunama", "updateContent": "Atnaujinimo turinys", - "removeEarbudsEnsureBattery": "Išimkite abi ausines ir įsitikinkite, kad abiejų baterijos lygis yra didesnis nei 20%", + "removeEarbudsEnsureBattery": + "Išimkite abi ausines ir įsitikinkite, kad abiejų baterijos lygis yra didesnis nei 20%", // 音乐列表页面 "noMusic": "Nėra muzikos", // 暂无音乐 @@ -1377,8 +1522,10 @@ const Map ltLT = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 e0d6e12c3..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", @@ -71,7 +72,8 @@ const Map lvLV = { // 登录页 "welcome": "Laipni lūdzam", - "loginTips": "Piesakieties vai reģistrējieties ar savu tālruņa numuru vai e-pastu", + "loginTips": + "Piesakieties vai reģistrējieties ar savu tālruņa numuru vai e-pastu", "accountNumber": "Tālruņa numurs vai e-pasts", "verificationCode": "Verifikācijas kods", "getCode": "Saņemt kodu", @@ -90,7 +92,8 @@ const Map lvLV = { "tip": "Padoms", "pleaseEnterCompleteCode": "Lūdzu, ievadiet pilnu verifikācijas kodu", "loginFailed": "Pieteikšanās neizdevās, lūdzu, mēģiniet vēlreiz", - 'pleaseAcceptPrivacyPolicy': 'Lūdzu, vispirms izlasiet un piekrītiet Privātuma politikai un Lietotāja līgumam', + 'pleaseAcceptPrivacyPolicy': + 'Lūdzu, vispirms izlasiet un piekrītiet Privātuma politikai un Lietotāja līgumam', "enterVerificationCode": "Ievadiet verifikācijas kodu", "verificationCodeSentTo": "Verifikācijas kods nosūtīts uz", "resendVerificationCode": "Nosūtīt verifikācijas kodu vēlreiz", @@ -99,7 +102,8 @@ const Map lvLV = { // 隐私政策弹窗 "loginDeclaration": "Voitrans deklarācija", // Voitrans 声明 - "welcomeToThisApp": "Laipni lūdzam Voitrans, lūdzu, uzmanīgi izlasiet", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Laipni lūdzam Voitrans, lūdzu, uzmanīgi izlasiet", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +119,30 @@ const Map lvLV = { "signal": "Signāls", "deviceId": "Ierīces ID", "firmwareVersion": "Programmaparatūras versija", - "disconnectedDevice": "Neviena ierīce nav savienota, noklikšķiniet uz pogas zemāk, lai savienotu", + "disconnectedDevice": + "Neviena ierīce nav savienota, noklikšķiniet uz pogas zemāk, lai savienotu", "connectDevice": "Savienot ierīci", "topAiExperiences": "Populārākās AI pieredzes", "aiAssistant": "Visaptverošs AI palīgs", - "aiAssistantInfo": "Ekskluzīvs konsultants 24/7, atbild uz jautājumiem, sniedz ieteikumus", + "aiAssistantInfo": + "Ekskluzīvs konsultants 24/7, atbild uz jautājumiem, sniedz ieteikumus", "interpretation": "Sinhronā tulkošana", - "simultaneousInterpretationInfo": "Reāllaika tulkošana vairāk nekā 80 valodās, bezrūpīgi ceļojumi uz ārzemēm", + "simultaneousInterpretationInfo": + "Reāllaika tulkošana vairāk nekā 80 valodās, bezrūpīgi ceļojumi uz ārzemēm", "aiCompanion": "Ģimenes pavadonis", "aiCompanionInfo": "Saprot jūs, silta sabiedrība", "homeSlogan": "Pasaules savienošana, pārsniedzot skaņu", - "turnEarphones": "Lūdzu, atveriet austiņu uzlādes futrāli un ievietojiet austiņas ausīs", + "turnEarphones": + "Lūdzu, atveriet austiņu uzlādes futrāli un ievietojiet austiņas ausīs", "currentlyConnected": "Pašlaik savienots:", "unsystemSetup": "Doties uz sistēmas iestatījumiem", "talkLater": "Vēlāk", "initializing": "Inicializē...", - "bluetoothInitializationFailure": "Bluetooth pakalpojuma inicializācija neizdevās", + "bluetoothInitializationFailure": + "Bluetooth pakalpojuma inicializācija neizdevās", "checkingPermissions": "Pārbauda atļaujas...", - "lackPermissions": "Trūkst Bluetooth atļauju un ir nepieciešams piekļūt lokācijai", + "lackPermissions": + "Trūkst Bluetooth atļauju un ir nepieciešams piekļūt lokācijai", "searchingDevice": "Meklē ierīces...", "findConnectedDevice": "Atrasta savienota ierīce", "notFound": "Neviena savienota Bluetooth ierīce nav atrasta", @@ -175,7 +185,8 @@ const Map lvLV = { "healthConsultant": "Daudzfunkcionāls AI čats", "healthConsultantInfo": "Piedāvā vairāk AI čata funkciju", "conferenceAssistant": "Biznesa sanāksmju palīgs", - "conferenceAssistantInfo": "Reāllaika protokolu ierakstīšana, daudzvalodu tulkošana", + "conferenceAssistantInfo": + "Reāllaika protokolu ierakstīšana, daudzvalodu tulkošana", "usageStats": "Pārskatījumu statistika", "usageStatsInfo": "Pārskatiet jūsu lietotāja pārskatījumu statistiku", "scene": "Scenārijs", @@ -218,7 +229,8 @@ const Map lvLV = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +286,10 @@ const Map lvLV = { '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.', + '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', @@ -284,27 +298,35 @@ const Map lvLV = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +335,10 @@ const Map lvLV = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +353,8 @@ const Map lvLV = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Izlaist", @@ -355,7 +380,8 @@ const Map lvLV = { '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”', + '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', @@ -405,7 +431,8 @@ const Map lvLV = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +487,54 @@ const Map lvLV = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +546,8 @@ const Map lvLV = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +567,8 @@ const Map lvLV = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +617,8 @@ const Map lvLV = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +643,8 @@ const Map lvLV = { "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.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Savienotā ierīce:", "accountId": "Konta ID:", "systemSetting": "Sistēmas iestatījumi", @@ -612,7 +657,8 @@ const Map lvLV = { "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", // 管理应用权限设置 + "permissionManagementInfo": + "Pārvaldīt lietotnes atļauju iestatījumus", // 管理应用权限设置 "aboutApplication": "Par lietotni", "versions": "Versija", "checkUpdates": "Pārbaudīt atjauninājumus", @@ -621,9 +667,11 @@ const Map lvLV = { "voiceServiceInfo": "Izvēlieties balss atpazīšanas un sintēzes pakalpojumu", "selectVoiceService": "Izvēlēties balss pakalpojumu", "azureVoiceService": "Azure balss pakalpojums", - "azureVoiceServiceInfo": "Microsoft mākoņa balss pakalpojums, atbalsta augstas kvalitātes balss sintēzi un atpazīšanu", + "azureVoiceServiceInfo": + "Microsoft mākoņa balss pakalpojums, atbalsta augstas kvalitātes balss sintēzi un atpazīšanu", "flutterVoiceService": "Flutter lokālais balss pakalpojums", - "flutterVoiceServiceInfo": "Ierīces lokālais balss pakalpojums, var izmantot bez interneta savienojuma", + "flutterVoiceServiceInfo": + "Ierīces lokālais balss pakalpojums, var izmantot bez interneta savienojuma", 'timbreService': 'Tembru pakalpojums', 'timbreServiceInfo': 'Izvēlieties tembru balss sintēzes pakalpojumu', 'defaultTimbre': 'Noklusējuma tembrs', @@ -634,7 +682,8 @@ const Map lvLV = { 'pleaseRead': 'Lūdzu, lasiet skaļi', 'completeRecording': 'Pabeigt ierakstīšanu', "firmwareUpgrade": "Programmaparatūras jaunināšana", - "bleHeadsetFirmwareUpgrade": "BLE austiņu programmaparatūras versijas jaunināšana", + "bleHeadsetFirmwareUpgrade": + "BLE austiņu programmaparatūras versijas jaunināšana", "deviceManagement": "Ierīču pārvaldība", "manageConnectedDevices": "Pārvaldīt savienotās Bluetooth ierīces", @@ -652,7 +701,8 @@ const Map lvLV = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Reāllaika balss tērzēšana", - "realtimeVoiceChatInfo": "Izbaudiet inteliģentās balss mijiedarbības funkciju (funkcijas priekšskatījums)", + "realtimeVoiceChatInfo": + "Izbaudiet inteliģentās balss mijiedarbības funkciju (funkcijas priekšskatījums)", "loading": "Ielādē...", //设备管理页面 @@ -667,7 +717,8 @@ const Map lvLV = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -695,7 +746,8 @@ const Map lvLV = { "listeningToYou": "Klausos jūs...", "processing": "Apstrādā...", "loadMoreMessages": "Ielādēt vairāk ziņu...", - "loadFailedClickRetry": "Ielāde neizdevās, noklikšķiniet, lai mēģinātu vēlreiz", + "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", // 语音打断 @@ -721,10 +773,14 @@ const Map lvLV = { '• Kontrolēt austiņu funkcijas\n\n' 'Kā es varu jums palīdzēt?', 'microphonePermission': 'Mikrofons', - 'voiceRecognitionPermissionText': 'Balss atpazīšanas funkcijai nepieciešama piekļuve mikrofonam.', - 'voiceTranslationPermissionText': 'Balss atpazīšanas un tulkošanas funkcijai nepieciešama piekļuve mikrofonam.', - 'phoneCallPermissionText': 'Zvanīšanas funkcijai nepieciešama piekļuve mikrofonam balss zvaniem.', - 'permissionDeniedText': 'Jūs esat neatgriezeniski atteicis mikrofona atļauju, lūdzu, dodieties uz sistēmas iestatījumiem, lai to iespējotu.', + 'voiceRecognitionPermissionText': + 'Balss atpazīšanas funkcijai nepieciešama piekļuve mikrofonam.', + 'voiceTranslationPermissionText': + 'Balss atpazīšanas un tulkošanas funkcijai nepieciešama piekļuve mikrofonam.', + 'phoneCallPermissionText': + 'Zvanīšanas funkcijai nepieciešama piekļuve mikrofonam balss zvaniem.', + 'permissionDeniedText': + 'Jūs esat neatgriezeniski atteicis mikrofona atļauju, lūdzu, dodieties uz sistēmas iestatījumiem, lai to iespējotu.', 'startVoiceInput': 'Sākt balss ievadi', 'startPhoneCallMode': 'Sākt zvanīšanas režīmu, sākt balss ievadi', @@ -738,7 +794,8 @@ const Map lvLV = { 'report': 'Ziņot', 'submitSuccess': 'Veiksmīgi iesniegts', 'submitFailed': 'Iesniegšana neizdevās', - 'reportSubmitted': 'Ziņojums iesniegts, mēs to apstrādāsim pēc iespējas ātrāk', + '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', @@ -747,7 +804,8 @@ const Map lvLV = { 'privacyRelated': 'Saistīts ar privātumu', 'copyrightViolation': 'Pārkāpj manas autortiesības, reputāciju utt.', '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.', + '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 @@ -778,15 +836,24 @@ const Map lvLV = { 'highest': 'Augstākā', 'lowest': 'Zemākā', 'futureForecast': 'Nākotnes prognoze', - 'hotWeatherTip': 'Šodien ir karsts, lūdzu, uzmanieties no karstuma dūriena un dzeriet daudz ūdens', - 'coldWeatherTip': 'Šodien temperatūra ir zema, lūdzu, silti ģērbieties, ejot ārā, lai nesaaukstētos', - 'rainyWeatherTip': 'Šodien līst, lūdzu, ņemiet līdzi lietussargu, ejot ārā, un esiet uzmanīgi', - 'snowyWeatherTip': 'Šodien snieg, ceļš ir slidens, lūdzu, esiet uzmanīgi un silti ģērbieties', - 'foggyWeatherTip': 'Šodien ir migla, redzamība ir slikta, lūdzu, nēsājiet masku, ejot ārā', - 'windyWeatherTip': 'Šodien ir stiprs vējš, lūdzu, esiet uzmanīgi, ejot ārā, un nostipriniet savas mantas', - 'sunnyWeatherTip': 'Šodien ir saulains un spēcīgs UV starojums, lūdzu, lietojiet saules aizsargkrēmu, ejot ārā', - 'temperatureDifferenceTip': 'Šodien ir liela temperatūras atšķirība starp dienu un nakti, lūdzu, pielāgojiet apģērbu', - 'comfortableWeatherTip': 'Šodien ir patīkams laiks, lielisks laiks āra aktivitātēm', + 'hotWeatherTip': + 'Šodien ir karsts, lūdzu, uzmanieties no karstuma dūriena un dzeriet daudz ūdens', + 'coldWeatherTip': + 'Šodien temperatūra ir zema, lūdzu, silti ģērbieties, ejot ārā, lai nesaaukstētos', + 'rainyWeatherTip': + 'Šodien līst, lūdzu, ņemiet līdzi lietussargu, ejot ārā, un esiet uzmanīgi', + 'snowyWeatherTip': + 'Šodien snieg, ceļš ir slidens, lūdzu, esiet uzmanīgi un silti ģērbieties', + 'foggyWeatherTip': + 'Šodien ir migla, redzamība ir slikta, lūdzu, nēsājiet masku, ejot ārā', + 'windyWeatherTip': + 'Šodien ir stiprs vējš, lūdzu, esiet uzmanīgi, ejot ārā, un nostipriniet savas mantas', + 'sunnyWeatherTip': + 'Šodien ir saulains un spēcīgs UV starojums, lūdzu, lietojiet saules aizsargkrēmu, ejot ārā', + 'temperatureDifferenceTip': + 'Šodien ir liela temperatūras atšķirība starp dienu un nakti, lūdzu, pielāgojiet apģērbu', + 'comfortableWeatherTip': + 'Šodien ir patīkams laiks, lielisks laiks āra aktivitātēm', "monday": "Pirm.", "tuesday": "Otr.", "wednesday": "Treš.", @@ -836,24 +903,32 @@ const Map lvLV = { "notSet": "Nav iestatīts", "accountSetting": "Konta iestatījumi", "logout": "Izrakstīties", - "logoutTips": "Vai esat pārliecināts, ka vēlaties izrakstīties no pašreizējā konta?", + "logoutTips": + "Vai esat pārliecināts, ka vēlaties izrakstīties no pašreizējā konta?", 'deleteAccount': 'Dzēst kontu', - 'deleteAccountTips': 'Vai esat pārliecināts, ka vēlaties neatgriezeniski dzēst savu kontu? Šī darbība nav atgriezeniska.', + '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': 'Tīkla savienojuma kļūda, lūdzu, pārbaudiet tīkla iestatījumus un mēģiniet vēlreiz', - 'serverTemporarilyUnavailable': 'Serveris uz laiku nav pieejams, lūdzu, mēģiniet vēlreiz vēlāk', - 'loginExpiredPleaseRelogin': 'Jūsu sesija ir beigusies, lūdzu, piesakieties vēlreiz', + 'networkConnectionFailed': + 'Tīkla savienojuma kļūda, lūdzu, pārbaudiet tīkla iestatījumus un mēģiniet vēlreiz', + 'serverTemporarilyUnavailable': + 'Serveris uz laiku nav pieejams, lūdzu, mēģiniet vēlreiz vēlāk', + 'loginExpiredPleaseRelogin': + 'Jūsu sesija ir beigusies, lūdzu, piesakieties vēlreiz', 'noPermissionForThisOperation': 'Jums nav atļaujas veikt šo darbību', 'requestedResourceNotFound': 'Pieprasītais resurss nav atrasts', - 'imageProcessingFailedPleaseReselect': 'Attēla apstrāde neizdevās, lūdzu, izvēlieties citu attēlu', + 'imageProcessingFailedPleaseReselect': + 'Attēla apstrāde neizdevās, lūdzu, izvēlieties citu attēlu', 'operationFailedPleaseRetry': 'Darbība neizdevās, lūdzu, mēģiniet vēlreiz', 'serverReturnedError': 'Serveris atgrieza kļūdu', 'serverError': 'Servera kļūda', - 'networkConnectionFailedCheckSettings': 'Tīkla savienojuma kļūda, lūdzu, pārbaudiet tīkla iestatījumus', - 'serverInternalErrorRetryLater': 'Iekšēja servera kļūda, lūdzu, mēģiniet vēlreiz vēlāk', + 'networkConnectionFailedCheckSettings': + 'Tīkla savienojuma kļūda, lūdzu, pārbaudiet tīkla iestatījumus', + 'serverInternalErrorRetryLater': + 'Iekšēja servera kļūda, lūdzu, mēģiniet vēlreiz vēlāk', // Profile 用户交互 //'error': '错误', @@ -867,18 +942,23 @@ const Map lvLV = { 'loggedOut': 'Veiksmīgi izrakstījāties', 'logoutFailedRetry': 'Izrakstīšanās neizdevās, lūdzu, mēģiniet vēlreiz', 'accountPermanentlyDeleted': 'Konts ir neatgriezeniski dzēsts', - 'deleteAccountFailedRetry': 'Konta dzēšana neizdevās, lūdzu, mēģiniet vēlreiz', + 'deleteAccountFailedRetry': + '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', // 第三方登录退出成功 + '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', // 删除账号过程发生错误 + '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 已初始化 + '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', @@ -901,10 +981,14 @@ const Map lvLV = { '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': 'Izmanto kalendāra notikumu un atgādinājumu lasīšanai un pārvaldībai', - 'locationPermissionDesc': 'Izmanto pašreizējās atrašanās vietas informācijas iegūšanai', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Izmanto kalendāra notikumu un atgādinājumu izveidei', + 'calendarFullAccessPermissionDesc': + 'Izmanto kalendāra notikumu un atgādinājumu lasīšanai un pārvaldībai', + 'locationPermissionDesc': + 'Izmanto pašreizējās atrašanās vietas informācijas iegūšanai', 'appFunctionNeeds': 'Lietotnes funkcijai nepieciešams', 'authorized': 'Autorizēts', 'unauthorized': 'Neautorizēts', @@ -913,45 +997,70 @@ const Map lvLV = { 'unknownStatus': 'Nezināms statuss', 'permissionGranted': 'Atļauja piešķirta', 'permissionRequestError': 'Kļūda, pieprasot atļauju', - 'phonePermissionDetailDesc': 'Zvanīšanas funkcijai nepieciešama tālruņa atļauja', + '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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1070,8 @@ const Map lvLV = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1080,10 @@ const Map lvLV = { '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', // 无法打开应用商店提示 - 'updateErrorRetry': 'Atjaunināšanas laikā radās kļūda, lūdzu, mēģiniet vēlreiz vēlāk', // 更新错误重试提示 + 'cannotOpenAppStore': + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-pasts", @@ -1107,7 +1219,8 @@ const Map lvLV = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1236,12 @@ const Map lvLV = { "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.", + "clearHistoryConfirm": + "Vai esat pārliecināts, ka vēlaties notīrīt visu tulkošanas vēsturi? Šī darbība nav atgriezeniska.", "unknownLanguage": "Nezināma valoda", "deleteSessionRecord": "Dzēst sesijas ierakstu", - "deleteSessionConfirm": "Vai esat pārliecināts, ka vēlaties dzēst visus šīs sesijas tulkošanas ierakstus? Šī darbība nav atgriezeniska.", + "deleteSessionConfirm": + "Vai esat pārliecināts, ka vēlaties dzēst visus šīs sesijas tulkošanas ierakstus? Šī darbība nav atgriezeniska.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1273,20 @@ const Map lvLV = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1309,8 @@ const Map lvLV = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Oriģinālais ieraksts", "recordSummary": "Ieraksta kopsavilkums", - "clickToGenerateSummary": "Noklikšķiniet uz pogas zemāk, lai ģenerētu sesijas kopsavilkumu", + "clickToGenerateSummary": + "Noklikšķiniet uz pogas zemāk, lai ģenerētu sesijas kopsavilkumu", "summaryContent": "Kopsavilkuma saturs", "copied": "Nokopēts", "summaryCopiledToClipboard": "Kopsavilkums nokopēts starpliktuvē", @@ -1197,9 +1318,11 @@ const Map lvLV = { "summaryGenerated": "Kopsavilkums ģenerēts", "generating": "Ģenerē...", "regenerate": "Ģenerēt no jauna", - "summaryTimeoutMessage": "Kopsavilkuma ģenerēšanas pieprasījums ir beidzies, iespējams, tīkla problēmu vai aizņemta servera dēļ.", + "summaryTimeoutMessage": + "Kopsavilkuma ģenerēšanas pieprasījums ir beidzies, iespējams, tīkla problēmu vai aizņemta servera dēļ.", "deleteTranslationRecord": "Dzēst tulkošanas ierakstu", - "deleteTranslationConfirm": "Vai esat pārliecināts, ka vēlaties dzēst šo tulkošanas ierakstu? Šī darbība nav atgriezeniska.", + "deleteTranslationConfirm": + "Vai esat pārliecināts, ka vēlaties dzēst šo tulkošanas ierakstu? Šī darbība nav atgriezeniska.", "originalText": "Oriģinālais teksts", "translatedText": "Tulkotais teksts", "sessionSummary": "Sesijas kopsavilkums", @@ -1227,19 +1350,25 @@ const Map lvLV = { // 配对状态文本 "readyToPair": "Gatavs savienošanai pārī", "preparingPairingEnvironment": "Sagatavo vidi savienošanai pārī...", - "connectDeepSoundViaSystemBluetooth": "Lūdzu, vispirms izveidojiet savienojumu ar Voitrans ierīci, izmantojot sistēmas Bluetooth", + "connectDeepSoundViaSystemBluetooth": + "Lūdzu, vispirms izveidojiet savienojumu ar Voitrans ierīci, izmantojot sistēmas Bluetooth", "deviceBindingConfirm": "Ierīces saistīšanas apstiprinājums...", "establishingDeviceAssociation": "Izveido ierīces asociāciju...", "waitingCompletePairing": "Lūdzu, uzgaidiet, pabeidz savienošanu pārī...", - "pairingSuccessRedirecting": "Savienošana pārī veiksmīga! Pāradresē uz sākumlapu...", + "pairingSuccessRedirecting": + "Savienošana pārī veiksmīga! Pāradresē uz sākumlapu...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Lūdzu, pārliecinieties, ka esat savienots ar Voitrans ierīci", + "ensureConnectedDeepSoundDevice": + "Lūdzu, pārliecinieties, ka esat savienots ar Voitrans ierīci", "deviceAlreadyBoundToOtherAccount": "Šī ierīce jau ir saistīta ar citu kontu", - "deviceAssociationFailed": "Ierīces asociācija neizdevās, lūdzu, mēģiniet vēlreiz", - "scanTimeoutEnsureDeviceNearby": "Skenēšanas taimauts, lūdzu, pārliecinieties, ka ierīce ir tuvumā", + "deviceAssociationFailed": + "Ierīces asociācija neizdevās, lūdzu, mēģiniet vēlreiz", + "scanTimeoutEnsureDeviceNearby": + "Skenēšanas taimauts, lūdzu, pārliecinieties, ka ierīce ir tuvumā", "networkError": "Tīkla kļūda", - "authorizationFailedCheckCode": "Autorizācija neizdevās, lūdzu, pārbaudiet, vai autorizācijas kods ir pareizs", + "authorizationFailedCheckCode": + "Autorizācija neizdevās, lūdzu, pārbaudiet, vai autorizācijas kods ir pareizs", "pairingFailedRetry": "Savienošana pārī neizdevās, lūdzu, mēģiniet vēlreiz", // 配对控制器相关 @@ -1248,13 +1377,15 @@ const Map lvLV = { '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ā', + '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...', + 'needManualBindingAuthCode': + 'Nepieciešams manuālas saistīšanas autorizācijas kods...', 'pairingSuccessful': 'Savienošana pārī veiksmīga!', 'enableBluetooth': 'Iespējot Bluetooth', 'grantPermissions': 'Piešķirt atļaujas', @@ -1266,35 +1397,46 @@ const Map lvLV = { 'verificationFailedRetry': 'Verifikācija neizdevās, lūdzu, mēģiniet vēlreiz', 'invalidDeviceAddress': 'Nederīga ierīces adrese', 'bleDeviceAssociationFailed': 'BLE ierīces asociācija neizdevās', - 'deviceAssociationFailedRetry': 'Ierīces asociācija neizdevās, lūdzu, mēģiniet vēlreiz', - 'bleConnectionTimeoutRetry': 'BLE savienojuma taimauts, lūdzu, mēģiniet vēlreiz', + 'deviceAssociationFailedRetry': + 'Ierīces asociācija neizdevās, lūdzu, mēģiniet vēlreiz', + 'bleConnectionTimeoutRetry': + 'BLE savienojuma taimauts, lūdzu, mēģiniet vēlreiz', 'blePairingStartupFailed': 'BLE savienošanas pārī sākšana neizdevās', 'bleConnectionFailed': 'BLE savienojums neizdevās', - 'deviceAuthorizationFailedCheckCode': 'Ierīces autorizācija neizdevās, lūdzu, pārbaudiet autorizācijas kodu', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', - 'feedbackDescription': 'Lūdzu, aprakstiet problēmu, ar kuru saskārāties, vai savu ieteikumu', + 'feedbackDescription': + 'Lūdzu, aprakstiet problēmu, ar kuru saskārāties, vai savu ieteikumu', 'feedbackHint': 'Lūdzu, ievadiet savas atsauksmes...', 'feedbackRequired': 'Lūdzu, ievadiet atsauksmju saturu', 'contactInfo': 'Kontaktinformācija', 'contactHint': 'E-pasts/Tālrunis, lai mēs varētu ar jums sazināties', 'submit': 'Iesniegt', - 'feedbackSubmitSuccess': 'Atsauksmes veiksmīgi iesniegtas, paldies par jūsu atsauksmēm!', - 'feedbackSubmitFailed': 'Atsauksmju iesniegšana neizdevās, lūdzu, mēģiniet vēlreiz vēlāk', + 'feedbackSubmitSuccess': + 'Atsauksmes veiksmīgi iesniegtas, paldies par jūsu atsauksmēm!', + 'feedbackSubmitFailed': + 'Atsauksmju iesniegšana neizdevās, lūdzu, mēģiniet vēlreiz vēlāk', // OTA升级模块 - "upgradeExitConfirm": "Notiek jaunināšana, izejot process tiks pārtraukts, vai esat pārliecināts, ka vēlaties iziet?", + "upgradeExitConfirm": + "Notiek jaunināšana, izejot process tiks pārtraukts, vai esat pārliecināts, ka vēlaties iziet?", "deviceModel": "Ierīces modelis", "unknownDevice": "Nezināma ierīce", "currentFirmwareVersion": "Pašreizējā programmaparatūras versija", @@ -1307,14 +1449,18 @@ const Map lvLV = { "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.", + "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", "updateContent": "Atjauninājuma saturs", - "removeEarbudsEnsureBattery": "Izņemiet abas austiņas un pārliecinieties, ka abu baterijas līmenis ir virs 20%", + "removeEarbudsEnsureBattery": + "Izņemiet abas austiņas un pārliecinieties, ka abu baterijas līmenis ir virs 20%", // 音乐列表页面 "noMusic": "Nav mūzikas", // 暂无音乐 @@ -1376,8 +1522,10 @@ const Map lvLV = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 1260cf3a3..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", @@ -71,7 +72,8 @@ const Map msMY = { // 登录页 "welcome": "Selamat Datang", - "loginTips": "Sila log masuk atau daftar dengan nombor telefon atau e-mel anda", + "loginTips": + "Sila log masuk atau daftar dengan nombor telefon atau e-mel anda", "accountNumber": "Nombor Telefon atau E-mel", "verificationCode": "Kod Pengesahan", "getCode": "Dapatkan Kod", @@ -90,7 +92,8 @@ const Map msMY = { "tip": "Petua", "pleaseEnterCompleteCode": "Sila masukkan kod pengesahan yang lengkap", "loginFailed": "Log masuk gagal, sila cuba lagi", - 'pleaseAcceptPrivacyPolicy': 'Sila baca dan setujui Dasar Privasi dan Perjanjian Pengguna terlebih dahulu', + 'pleaseAcceptPrivacyPolicy': + 'Sila baca dan setujui Dasar Privasi dan Perjanjian Pengguna terlebih dahulu', "enterVerificationCode": "Masukkan Kod Pengesahan", "verificationCodeSentTo": "Kod pengesahan telah dihantar ke", "resendVerificationCode": "Hantar semula kod pengesahan", @@ -99,7 +102,8 @@ const Map msMY = { // 隐私政策弹窗 "loginDeclaration": "Pengisytiharan Voitrans", // Voitrans 声明 - "welcomeToThisApp": "Selamat datang ke Voitrans, sila baca dengan teliti", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Selamat datang ke Voitrans, sila baca dengan teliti", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +119,29 @@ const Map msMY = { "signal": "Isyarat", "deviceId": "ID Peranti", "firmwareVersion": "Versi Firmware", - "disconnectedDevice": "Tiada peranti disambungkan, klik butang di bawah untuk menyambung", + "disconnectedDevice": + "Tiada peranti disambungkan, klik butang di bawah untuk menyambung", "connectDevice": "Sambungkan Peranti", "topAiExperiences": "Pengalaman AI Teratas", "aiAssistant": "Pembantu AI Serba Boleh", - "aiAssistantInfo": "Perunding eksklusif 24/7, menjawab soalan, memberi cadangan", + "aiAssistantInfo": + "Perunding eksklusif 24/7, menjawab soalan, memberi cadangan", "interpretation": "Penterjemahan Serentak", - "simultaneousInterpretationInfo": "Terjemahan masa nyata untuk 80+ bahasa, perjalanan ke luar negara tanpa bimbang", + "simultaneousInterpretationInfo": + "Terjemahan masa nyata untuk 80+ bahasa, perjalanan ke luar negara tanpa bimbang", "aiCompanion": "Teman Keluarga", "aiCompanionInfo": "Memahami anda, teman yang mesra", "homeSlogan": "Menghubungkan dunia, melangkaui suara", - "turnEarphones": "Sila buka bekas pengecas fon telinga dan letakkan fon telinga di telinga anda", + "turnEarphones": + "Sila buka bekas pengecas fon telinga dan letakkan fon telinga di telinga anda", "currentlyConnected": "Sedang bersambung:", "unsystemSetup": "Pergi ke tetapan sistem", "talkLater": "Nanti", "initializing": "Memulakan...", "bluetoothInitializationFailure": "Inisialisasi perkhidmatan Bluetooth gagal", "checkingPermissions": "Menyemak kebenaran...", - "lackPermissions": "Kebenaran Bluetooth tiada dan perlu mengaktifkan lokasi peranti", + "lackPermissions": + "Kebenaran Bluetooth tiada dan perlu mengaktifkan lokasi peranti", "searchingDevice": "Mencari peranti...", "findConnectedDevice": "Peranti yang disambungkan ditemui", "notFound": "Tiada peranti Bluetooth yang disambungkan ditemui", @@ -175,7 +184,8 @@ const Map msMY = { "healthConsultant": "Sembang AI Pelbagai Fungsi", "healthConsultantInfo": "Menyediakan lebih banyak fungsi sembang AI", "conferenceAssistant": "Pembantu Mesyuarat Perniagaan", - "conferenceAssistantInfo": "Minit mesyuarat masa nyata, terjemahan pelbagai bahasa", + "conferenceAssistantInfo": + "Minit mesyuarat masa nyata, terjemahan pelbagai bahasa", "usageStats": "Statistik Penggunaan", "usageStatsInfo": "Lihat statistik penggunaan aplikasi", "scene": "Senario", @@ -218,7 +228,8 @@ const Map msMY = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +285,10 @@ const Map msMY = { '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.', + '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', @@ -284,27 +297,35 @@ const Map msMY = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +334,10 @@ const Map msMY = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +352,8 @@ const Map msMY = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Langkau", @@ -355,7 +379,8 @@ const Map msMY = { '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”', + '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', @@ -405,7 +430,8 @@ const Map msMY = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +486,54 @@ const Map msMY = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +545,8 @@ const Map msMY = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +566,8 @@ const Map msMY = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +616,8 @@ const Map msMY = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +642,8 @@ const Map msMY = { "cloudSync": "Pembayaran Sinkronisasi awan", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Peranti disambungkan:", "accountId": "ID Akaun:", "systemSetting": "Tetapan Sistem", @@ -621,9 +665,11 @@ const Map msMY = { "voiceServiceInfo": "Pilih perkhidmatan pengecaman dan sintesis suara", "selectVoiceService": "Pilih Perkhidmatan Suara", "azureVoiceService": "Perkhidmatan Suara Azure", - "azureVoiceServiceInfo": "Perkhidmatan suara awan Microsoft, menyokong sintesis dan pengecaman suara berkualiti tinggi", + "azureVoiceServiceInfo": + "Perkhidmatan suara awan Microsoft, menyokong sintesis dan pengecaman suara berkualiti tinggi", "flutterVoiceService": "Perkhidmatan Suara Tempatan Flutter", - "flutterVoiceServiceInfo": "Perkhidmatan suara tempatan peranti, boleh digunakan tanpa sambungan internet", + "flutterVoiceServiceInfo": + "Perkhidmatan suara tempatan peranti, boleh digunakan tanpa sambungan internet", 'timbreService': 'Perkhidmatan Timbre', 'timbreServiceInfo': 'Pilih perkhidmatan sintesis suara timbre', 'defaultTimbre': 'Timbre Lalai', @@ -652,7 +698,8 @@ const Map msMY = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Sembang Suara Masa Nyata", - "realtimeVoiceChatInfo": "Alami fungsi interaksi suara pintar (pratonton fungsi)", + "realtimeVoiceChatInfo": + "Alami fungsi interaksi suara pintar (pratonton fungsi)", "loading": "Memuatkan...", //设备管理页面 @@ -667,7 +714,8 @@ const Map msMY = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -721,10 +769,14 @@ const Map msMY = { '• Kawal fungsi fon telinga\n\n' 'Apa yang boleh saya bantu?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': 'Pengecaman suara memerlukan akses mikrofon.', - 'voiceTranslationPermissionText': 'Pengecaman dan terjemahan suara memerlukan akses mikrofon.', - 'phoneCallPermissionText': 'Membuat panggilan memerlukan akses mikrofon untuk panggilan suara.', - 'permissionDeniedText': 'Anda telah menafikan kebenaran mikrofon secara kekal, sila pergi ke tetapan sistem untuk mendayakannya.', + 'voiceRecognitionPermissionText': + 'Pengecaman suara memerlukan akses mikrofon.', + 'voiceTranslationPermissionText': + 'Pengecaman dan terjemahan suara memerlukan akses mikrofon.', + 'phoneCallPermissionText': + 'Membuat panggilan memerlukan akses mikrofon untuk panggilan suara.', + 'permissionDeniedText': + 'Anda telah menafikan kebenaran mikrofon secara kekal, sila pergi ke tetapan sistem untuk mendayakannya.', 'startVoiceInput': 'Mula input suara', 'startPhoneCallMode': 'Mula mod panggilan telefon, mula input suara', @@ -738,7 +790,8 @@ const Map msMY = { 'report': 'Lapor', 'submitSuccess': 'Berjaya dihantar', 'submitFailed': 'Gagal dihantar', - 'reportSubmitted': 'Laporan telah dihantar, kami akan memprosesnya secepat mungkin', + 'reportSubmitted': + 'Laporan telah dihantar, kami akan memprosesnya secepat mungkin', //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Berbahaya/Tidak Selamat', 'pornographicVulgar': 'Pornografi/Lucah', @@ -747,7 +800,8 @@ const Map msMY = { 'privacyRelated': 'Berkaitan Privasi', 'copyrightViolation': 'Melanggar hak cipta, nama baik saya, dsb.', 'other': 'Lain-lain', - 'reportDescriptionHint': 'Kami ingin tahu sebab anda melaporkan, anda boleh menerangkan masalah yang anda hadapi.', + 'reportDescriptionHint': + 'Kami ingin tahu sebab anda melaporkan, anda boleh menerangkan masalah yang anda hadapi.', //'submit': '提交', //Message_bubble @@ -778,15 +832,24 @@ const Map msMY = { 'highest': 'Tertinggi', 'lowest': 'Terendah', 'futureForecast': 'Ramalan Masa Depan', - 'hotWeatherTip': 'Hari ini panas, sila berhati-hati dengan strok haba dan minum banyak air', - 'coldWeatherTip': 'Suhu hari ini rendah, sila pakai pakaian hangat apabila keluar untuk mengelakkan selesema', - 'rainyWeatherTip': 'Hari ini hujan, sila bawa payung apabila keluar dan berhati-hati semasa perjalanan', - 'snowyWeatherTip': 'Hari ini salji, jalan licin sila berhati-hati, ambil langkah berjaga-jaga untuk kekal hangat', - 'foggyWeatherTip': 'Hari ini berkabus, penglihatan rendah, sila pakai topeng apabila keluar', - 'windyWeatherTip': 'Hari ini berangin, sila berhati-hati apabila keluar, pastikan barang-barang anda selamat', - 'sunnyWeatherTip': 'Hari ini cerah dengan sinaran UV yang kuat, sila gunakan pelindung matahari apabila keluar', - 'temperatureDifferenceTip': 'Terdapat perbezaan suhu yang besar antara siang dan malam hari ini, sila laraskan pakaian anda', - 'comfortableWeatherTip': 'Cuaca hari ini menyenangkan, masa yang sesuai untuk aktiviti luar', + 'hotWeatherTip': + 'Hari ini panas, sila berhati-hati dengan strok haba dan minum banyak air', + 'coldWeatherTip': + 'Suhu hari ini rendah, sila pakai pakaian hangat apabila keluar untuk mengelakkan selesema', + 'rainyWeatherTip': + 'Hari ini hujan, sila bawa payung apabila keluar dan berhati-hati semasa perjalanan', + 'snowyWeatherTip': + 'Hari ini salji, jalan licin sila berhati-hati, ambil langkah berjaga-jaga untuk kekal hangat', + 'foggyWeatherTip': + 'Hari ini berkabus, penglihatan rendah, sila pakai topeng apabila keluar', + 'windyWeatherTip': + 'Hari ini berangin, sila berhati-hati apabila keluar, pastikan barang-barang anda selamat', + 'sunnyWeatherTip': + 'Hari ini cerah dengan sinaran UV yang kuat, sila gunakan pelindung matahari apabila keluar', + 'temperatureDifferenceTip': + 'Terdapat perbezaan suhu yang besar antara siang dan malam hari ini, sila laraskan pakaian anda', + 'comfortableWeatherTip': + 'Cuaca hari ini menyenangkan, masa yang sesuai untuk aktiviti luar', "monday": "Isnin", "tuesday": "Selasa", "wednesday": "Rabu", @@ -838,22 +901,30 @@ const Map msMY = { "logout": "Log Keluar", "logoutTips": "Adakah anda pasti mahu log keluar dari akaun semasa?", 'deleteAccount': 'Padam Akaun', - 'deleteAccountTips': 'Adakah anda pasti mahu memadam akaun anda secara kekal? Tindakan ini tidak boleh dibatalkan', + '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': 'Sambungan rangkaian gagal, sila semak tetapan rangkaian anda dan cuba lagi', - 'serverTemporarilyUnavailable': 'Pelayan tidak tersedia buat sementara waktu, sila cuba lagi nanti', - 'loginExpiredPleaseRelogin': 'Sesi anda telah tamat tempoh, sila log masuk semula', - 'noPermissionForThisOperation': 'Anda tidak mempunyai kebenaran untuk melakukan operasi ini', + 'networkConnectionFailed': + 'Sambungan rangkaian gagal, sila semak tetapan rangkaian anda dan cuba lagi', + 'serverTemporarilyUnavailable': + 'Pelayan tidak tersedia buat sementara waktu, sila cuba lagi nanti', + 'loginExpiredPleaseRelogin': + 'Sesi anda telah tamat tempoh, sila log masuk semula', + 'noPermissionForThisOperation': + 'Anda tidak mempunyai kebenaran untuk melakukan operasi ini', 'requestedResourceNotFound': 'Sumber yang diminta tidak ditemui', - 'imageProcessingFailedPleaseReselect': 'Pemprosesan imej gagal, sila pilih imej lain', + 'imageProcessingFailedPleaseReselect': + 'Pemprosesan imej gagal, sila pilih imej lain', 'operationFailedPleaseRetry': 'Operasi gagal, sila cuba lagi', 'serverReturnedError': 'Pelayan mengembalikan ralat', 'serverError': 'Ralat Pelayan', - 'networkConnectionFailedCheckSettings': 'Sambungan rangkaian gagal, sila semak tetapan rangkaian anda', - 'serverInternalErrorRetryLater': 'Ralat dalaman pelayan, sila cuba lagi nanti', + 'networkConnectionFailedCheckSettings': + 'Sambungan rangkaian gagal, sila semak tetapan rangkaian anda', + 'serverInternalErrorRetryLater': + 'Ralat dalaman pelayan, sila cuba lagi nanti', // Profile 用户交互 //'error': '错误', @@ -875,10 +946,13 @@ const Map msMY = { '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', // 删除账号过程发生错误 + 'deleteAccountProcessError': + 'Berlaku ralat semasa proses pemadaman akaun', // 删除账号过程发生错误 'userDataClearSuccess': 'Data pengguna berjaya dikosongkan', // 用户数据清理成功 - 'allUserDataClearSuccess': 'Semua data pengguna berjaya dikosongkan', // 所有用户数据清理成功 - 'accountServiceInitialized': 'Perkhidmatan Akaun telah dimulakan', // AccountService 已初始化 + 'allUserDataClearSuccess': + 'Semua data pengguna berjaya dikosongkan', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Perkhidmatan Akaun telah dimulakan', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Gagal mendapatkan status kebenaran', @@ -901,10 +975,14 @@ const Map msMY = { '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': 'Digunakan untuk membaca dan mengurus acara kalendar dan peringatan', - 'locationPermissionDesc': 'Digunakan untuk mendapatkan maklumat lokasi semasa', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Digunakan untuk membuat acara kalendar dan peringatan', + 'calendarFullAccessPermissionDesc': + 'Digunakan untuk membaca dan mengurus acara kalendar dan peringatan', + 'locationPermissionDesc': + 'Digunakan untuk mendapatkan maklumat lokasi semasa', 'appFunctionNeeds': 'Fungsi aplikasi memerlukan', 'authorized': 'Dibenarkan', 'unauthorized': 'Tidak Dibenarkan', @@ -915,43 +993,67 @@ 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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1063,8 @@ const Map msMY = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1073,10 @@ const Map msMY = { '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', // 更新错误重试提示 + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-mel", @@ -1107,7 +1212,8 @@ const Map msMY = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1229,12 @@ const Map msMY = { "historyRecords": "History Records", "clearResults": "Clear Results", "clearHistory": "Kosongkan Sejarah", - "clearHistoryConfirm": "Adakah anda pasti mahu mengosongkan semua sejarah terjemahan? Tindakan ini tidak boleh dibatalkan.", + "clearHistoryConfirm": + "Adakah anda pasti mahu mengosongkan semua sejarah terjemahan? Tindakan ini tidak boleh dibatalkan.", "unknownLanguage": "Bahasa Tidak Diketahui", "deleteSessionRecord": "Padam Rekod Sesi", - "deleteSessionConfirm": "Adakah anda pasti mahu memadam semua rekod terjemahan untuk sesi ini? Tindakan ini tidak boleh dibatalkan.", + "deleteSessionConfirm": + "Adakah anda pasti mahu memadam semua rekod terjemahan untuk sesi ini? Tindakan ini tidak boleh dibatalkan.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1266,20 @@ const Map msMY = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1197,9 +1310,11 @@ const Map msMY = { "summaryGenerated": "Ringkasan telah dijana", "generating": "Menjana...", "regenerate": "Jana semula", - "summaryTimeoutMessage": "Permintaan menjana ringkasan telah tamat masa, mungkin disebabkan oleh masalah rangkaian atau pelayan sibuk.", + "summaryTimeoutMessage": + "Permintaan menjana ringkasan telah tamat masa, mungkin disebabkan oleh masalah rangkaian atau pelayan sibuk.", "deleteTranslationRecord": "Padam Rekod Terjemahan", - "deleteTranslationConfirm": "Adakah anda pasti mahu memadam rekod terjemahan ini? Tindakan ini tidak boleh dibatalkan.", + "deleteTranslationConfirm": + "Adakah anda pasti mahu memadam rekod terjemahan ini? Tindakan ini tidak boleh dibatalkan.", "originalText": "Teks Asal", "translatedText": "Teks Terjemahan", "sessionSummary": "Ringkasan Sesi", @@ -1227,19 +1342,25 @@ const Map msMY = { // 配对状态文本 "readyToPair": "Sedia untuk dipasangkan", "preparingPairingEnvironment": "Menyediakan persekitaran pemasangan...", - "connectDeepSoundViaSystemBluetooth": "Sila sambung ke peranti Voitrans melalui Bluetooth sistem terlebih dahulu", + "connectDeepSoundViaSystemBluetooth": + "Sila sambung ke peranti Voitrans melalui Bluetooth sistem terlebih dahulu", "deviceBindingConfirm": "Pengesahan pengikatan peranti...", "establishingDeviceAssociation": "Mewujudkan perkaitan peranti...", "waitingCompletePairing": "Sila tunggu, melengkapkan pemasangan...", - "pairingSuccessRedirecting": "Pemasangan berjaya! Mengalihkan ke halaman utama...", + "pairingSuccessRedirecting": + "Pemasangan berjaya! Mengalihkan ke halaman utama...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Sila pastikan anda disambungkan ke peranti Voitrans", - "deviceAlreadyBoundToOtherAccount": "Peranti ini telah diikat pada akaun lain", + "ensureConnectedDeepSoundDevice": + "Sila pastikan anda disambungkan ke peranti Voitrans", + "deviceAlreadyBoundToOtherAccount": + "Peranti ini telah diikat pada akaun lain", "deviceAssociationFailed": "Perkaitan peranti gagal, sila cuba lagi", - "scanTimeoutEnsureDeviceNearby": "Imbasan tamat masa, sila pastikan peranti berada berdekatan", + "scanTimeoutEnsureDeviceNearby": + "Imbasan tamat masa, sila pastikan peranti berada berdekatan", "networkError": "Ralat Rangkaian", - "authorizationFailedCheckCode": "Kebenaran gagal, sila semak sama ada kod kebenaran betul", + "authorizationFailedCheckCode": + "Kebenaran gagal, sila semak sama ada kod kebenaran betul", "pairingFailedRetry": "Pemasangan gagal, sila cuba lagi", // 配对控制器相关 @@ -1248,7 +1369,8 @@ const Map msMY = { 'deviceDisconnected': 'Peranti diputuskan sambungan', 'readyToStartPairing': 'Sedia untuk memulakan pemasangan', 'checkingEnvironment': 'Menyemak persekitaran...', - 'ensureHeadsetOnAndPairingMode': 'Sila pastikan fon kepala dihidupkan dan dalam mod pemasangan', + 'ensureHeadsetOnAndPairingMode': + 'Sila pastikan fon kepala dihidupkan dan dalam mod pemasangan', //'goToBluetoothSettings': '前往蓝牙设置', //'verifyingDevice': '正在验证设备...', //'confirmBinding': '确认绑定', @@ -1270,31 +1392,39 @@ const Map msMY = { 'bleConnectionTimeoutRetry': 'Tamat masa sambungan BLE, sila cuba lagi', 'blePairingStartupFailed': 'Permulaan pemasangan BLE gagal', 'bleConnectionFailed': 'Sambungan BLE gagal', - 'deviceAuthorizationFailedCheckCode': 'Kebenaran peranti gagal, sila semak kod kebenaran', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', - 'feedbackDescription': 'Sila terangkan masalah yang anda hadapi atau cadangan anda', + 'feedbackDescription': + 'Sila terangkan masalah yang anda hadapi atau cadangan anda', 'feedbackHint': 'Sila masukkan maklum balas anda...', 'feedbackRequired': 'Sila masukkan kandungan maklum balas', 'contactInfo': 'Maklumat Hubungan', 'contactHint': 'E-mel/Telefon, supaya kami boleh menghubungi anda', 'submit': 'Hantar', - 'feedbackSubmitSuccess': 'Maklum balas berjaya dihantar, terima kasih atas maklum balas anda!', + 'feedbackSubmitSuccess': + 'Maklum balas berjaya dihantar, terima kasih atas maklum balas anda!', 'feedbackSubmitFailed': 'Gagal menghantar maklum balas, sila cuba lagi nanti', // OTA升级模块 - "upgradeExitConfirm": "Naik taraf sedang berjalan, keluar akan mengganggu proses, adakah anda pasti mahu keluar?", + "upgradeExitConfirm": + "Naik taraf sedang berjalan, keluar akan mengganggu proses, adakah anda pasti mahu keluar?", "deviceModel": "Model Peranti", "unknownDevice": "Peranti Tidak Diketahui", "currentFirmwareVersion": "Versi Firmware Semasa", @@ -1307,14 +1437,19 @@ const Map msMY = { "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", + "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", "charging": "Mengecas", "updateContent": "Kandungan Kemas Kini", - "removeEarbudsEnsureBattery": "Keluarkan kedua-dua fon telinga, dan pastikan bateri kedua-duanya melebihi 20%", + "removeEarbudsEnsureBattery": + "Keluarkan kedua-dua fon telinga, dan pastikan bateri kedua-duanya melebihi 20%", // 音乐列表页面 "noMusic": "Tiada Muzik", // 暂无音乐 @@ -1376,8 +1511,10 @@ const Map msMY = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 dc6d148ff..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", @@ -90,7 +91,8 @@ const Map nbNO = { "tip": "Tips", "pleaseEnterCompleteCode": "Vennligst skriv inn hele verifiseringskoden", "loginFailed": "Innlogging mislyktes, prøv igjen", - 'pleaseAcceptPrivacyPolicy': 'Vennligst les og godta personvernerklæringen og brukeravtalen først', + 'pleaseAcceptPrivacyPolicy': + 'Vennligst les og godta personvernerklæringen og brukeravtalen først', "enterVerificationCode": "Skriv inn verifiseringskode", "verificationCodeSentTo": "Verifiseringskode sendt til", "resendVerificationCode": "Send verifiseringskode på nytt", @@ -99,7 +101,8 @@ const Map nbNO = { // 隐私政策弹窗 "loginDeclaration": "Voitrans-erklæring", // Voitrans 声明 - "welcomeToThisApp": "Velkommen til Voitrans, vennligst les nøye", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Velkommen til Voitrans, vennligst les nøye", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +118,30 @@ const Map nbNO = { "signal": "Signal", "deviceId": "Enhets-ID", "firmwareVersion": "Firmware-versjon", - "disconnectedDevice": "Ingen enhet tilkoblet, klikk på knappen nedenfor for å koble til", + "disconnectedDevice": + "Ingen enhet tilkoblet, klikk på knappen nedenfor for å koble til", "connectDevice": "Koble til enhet", "topAiExperiences": "Topp AI-opplevelser", "aiAssistant": "Allsidig AI-assistent", - "aiAssistantInfo": "Eksklusiv 24/7-konsulent, svarer på spørsmål, gir forslag", + "aiAssistantInfo": + "Eksklusiv 24/7-konsulent, svarer på spørsmål, gir forslag", "interpretation": "Simultantolking", - "simultaneousInterpretationInfo": "Sanntidsoversettelse for over 80 språk, bekymringsfrie utenlandsreiser", + "simultaneousInterpretationInfo": + "Sanntidsoversettelse for over 80 språk, bekymringsfrie utenlandsreiser", "aiCompanion": "Familievenn", "aiCompanionInfo": "Forstår deg, varmt selskap", "homeSlogan": "Kobler sammen verden, overgår lyden", - "turnEarphones": "Åpne ladeetuiet til øreproppene og sett øreproppene i ørene", + "turnEarphones": + "Åpne ladeetuiet til øreproppene og sett øreproppene i ørene", "currentlyConnected": "For øyeblikket tilkoblet:", "unsystemSetup": "Gå til systeminnstillinger", "talkLater": "Senere", "initializing": "Initialiserer...", - "bluetoothInitializationFailure": "Initialisering av Bluetooth-tjenesten mislyktes", + "bluetoothInitializationFailure": + "Initialisering av Bluetooth-tjenesten mislyktes", "checkingPermissions": "Sjekker tillatelser...", - "lackPermissions": "Mangler Bluetooth-tillatelser og er nødvendig å aktivere lokasjons-tillatelser", + "lackPermissions": + "Mangler Bluetooth-tillatelser og er nødvendig å aktivere lokasjons-tillatelser", "searchingDevice": "Søker etter enheter...", "findConnectedDevice": "Fant tilkoblet enhet", "notFound": "Ingen tilkoblet Bluetooth-enhet funnet", @@ -175,7 +184,8 @@ const Map nbNO = { "healthConsultant": "Multifunksjonell AI-chat", "healthConsultantInfo": "Tilbyr flere AI-chatfunksjoner", "conferenceAssistant": "Assistent for forretningsmøter", - "conferenceAssistantInfo": "Sanntids protokollføring, flerspråklig oversettelse", + "conferenceAssistantInfo": + "Sanntids protokollføring, flerspråklig oversettelse", "usageStats": "Brukstatistikk", "usageStatsInfo": "Vis brukstatistikk for din app", "scene": "Scenario", @@ -218,7 +228,8 @@ const Map nbNO = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +285,10 @@ const Map nbNO = { '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.', + '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', @@ -284,27 +297,35 @@ const Map nbNO = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +334,10 @@ const Map nbNO = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +352,8 @@ const Map nbNO = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Hopp over", @@ -355,7 +379,8 @@ const Map nbNO = { '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”', + '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', @@ -405,7 +430,8 @@ const Map nbNO = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +486,54 @@ const Map nbNO = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +545,8 @@ const Map nbNO = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +566,8 @@ const Map nbNO = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +616,8 @@ const Map nbNO = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +642,8 @@ const Map nbNO = { "cloudSync": "Cloud-synchroniseringspenger", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Tilkoblet enhet:", "accountId": "Konto-ID:", "systemSetting": "Systeminnstillinger", @@ -612,7 +656,8 @@ const Map nbNO = { "privacySettings": "Personverninnstillinger", "privacySettingsInfo": "Administrer datainnsamling og tillatelser", "permissionManagement": "Tillatelsesadministrasjon", // 权限管理 - "permissionManagementInfo": "Administrer innstillinger for app-tillatelser", // 管理应用权限设置 + "permissionManagementInfo": + "Administrer innstillinger for app-tillatelser", // 管理应用权限设置 "aboutApplication": "Om appen", "versions": "Versjon", "checkUpdates": "Se etter oppdateringer", @@ -621,9 +666,11 @@ const Map nbNO = { "voiceServiceInfo": "Velg tjeneste for talegjenkjenning og syntese", "selectVoiceService": "Velg stemmetjeneste", "azureVoiceService": "Azure stemmetjeneste", - "azureVoiceServiceInfo": "Microsofts skybaserte stemmetjeneste, støtter høykvalitets talesyntese og gjenkjenning", + "azureVoiceServiceInfo": + "Microsofts skybaserte stemmetjeneste, støtter høykvalitets talesyntese og gjenkjenning", "flutterVoiceService": "Flutter lokal stemmetjeneste", - "flutterVoiceServiceInfo": "Lokal stemmetjeneste på enheten, kan brukes uten internettforbindelse", + "flutterVoiceServiceInfo": + "Lokal stemmetjeneste på enheten, kan brukes uten internettforbindelse", 'timbreService': 'Timbre-tjeneste', 'timbreServiceInfo': 'Velg tjeneste for talesyntese med timbre', 'defaultTimbre': 'Standard timbre', @@ -634,7 +681,8 @@ const Map nbNO = { 'pleaseRead': 'Vennligst les høyt', 'completeRecording': 'Fullfør opptak', "firmwareUpgrade": "Firmware-oppgradering", - "bleHeadsetFirmwareUpgrade": "Oppgradering av firmware-versjon for BLE-hodesett", + "bleHeadsetFirmwareUpgrade": + "Oppgradering av firmware-versjon for BLE-hodesett", "deviceManagement": "Enhetsadministrasjon", "manageConnectedDevices": "Administrer tilkoblede Bluetooth-enheter", @@ -652,7 +700,8 @@ const Map nbNO = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Sanntids talechat", - "realtimeVoiceChatInfo": "Opplev intelligent taleinteraksjonsfunksjon (funksjonsforhåndsvisning)", + "realtimeVoiceChatInfo": + "Opplev intelligent taleinteraksjonsfunksjon (funksjonsforhåndsvisning)", "loading": "Laster inn...", //设备管理页面 @@ -667,7 +716,8 @@ const Map nbNO = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -678,7 +728,8 @@ const Map nbNO = { "inputMessage": "Skriv melding...", "imListening": "Lytter...", "canStartTalking": "Du kan begynne å snakke", - "addQuestionAboutImage": "Legg til et spørsmål eller en beskrivelse av bildet...", + "addQuestionAboutImage": + "Legg til et spørsmål eller en beskrivelse av bildet...", "summarizeImageContent": "Oppsummer bildets innhold", "extractImageText": "Trekk ut tekst fra bildet", "translateImageText": "Oversett tekst i bildet", @@ -721,10 +772,14 @@ const Map nbNO = { '• Å kontrollere øreproppfunksjoner\n\n' 'Hvordan kan jeg hjelpe deg?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': 'Talegjenkjenning krever tilgang til mikrofon.', - 'voiceTranslationPermissionText': 'Talegjenkjenning og oversettelse krever tilgang til mikrofon.', - 'phoneCallPermissionText': 'Å ringe krever tilgang til mikrofon for taleanrop.', - 'permissionDeniedText': 'Du har permanent nektet mikrofontillatelse, gå til systeminnstillingene for å aktivere den.', + 'voiceRecognitionPermissionText': + 'Talegjenkjenning krever tilgang til mikrofon.', + 'voiceTranslationPermissionText': + 'Talegjenkjenning og oversettelse krever tilgang til mikrofon.', + 'phoneCallPermissionText': + 'Å ringe krever tilgang til mikrofon for taleanrop.', + 'permissionDeniedText': + 'Du har permanent nektet mikrofontillatelse, gå til systeminnstillingene for å aktivere den.', 'startVoiceInput': 'Start taleinndata', 'startPhoneCallMode': 'Start anropsmodus, start taleinndata', @@ -747,7 +802,8 @@ const Map nbNO = { 'privacyRelated': 'Personvernrelatert', 'copyrightViolation': 'Krenkelse av min opphavsrett, omdømme, etc.', 'other': 'Annet', - 'reportDescriptionHint': 'Vi vil gjerne vite hvorfor du rapporterer, du kan beskrive problemet du opplevde.', + 'reportDescriptionHint': + 'Vi vil gjerne vite hvorfor du rapporterer, du kan beskrive problemet du opplevde.', //'submit': '提交', //Message_bubble @@ -778,15 +834,24 @@ const Map nbNO = { 'highest': 'Høyeste', 'lowest': 'Laveste', 'futureForecast': 'Fremtidig varsel', - 'hotWeatherTip': 'I dag er det varmt, vær forsiktig med heteslag og drikk rikelig med vann', - 'coldWeatherTip': 'I dag er temperaturen lav, kle deg varmt når du går ut for å unngå forkjølelse', - 'rainyWeatherTip': 'I dag regner det, ta med en paraply når du går ut og vær forsiktig', - 'snowyWeatherTip': 'I dag snør det, veien er glatt, vær forsiktig og kle deg varmt', - 'foggyWeatherTip': 'I dag er det tåke, sikten er dårlig, bruk en maske når du går ut', - 'windyWeatherTip': 'I dag er det mye vind, vær forsiktig når du går ut og sikre eiendelene dine', - 'sunnyWeatherTip': 'I dag er det sol og sterk UV-stråling, bruk solkrem når du går ut', - 'temperatureDifferenceTip': 'I dag er det stor temperaturforskjell mellom dag og natt, tilpass klærne', - 'comfortableWeatherTip': 'I dag er været behagelig, en flott tid for utendørsaktiviteter', + 'hotWeatherTip': + 'I dag er det varmt, vær forsiktig med heteslag og drikk rikelig med vann', + 'coldWeatherTip': + 'I dag er temperaturen lav, kle deg varmt når du går ut for å unngå forkjølelse', + 'rainyWeatherTip': + 'I dag regner det, ta med en paraply når du går ut og vær forsiktig', + 'snowyWeatherTip': + 'I dag snør det, veien er glatt, vær forsiktig og kle deg varmt', + 'foggyWeatherTip': + 'I dag er det tåke, sikten er dårlig, bruk en maske når du går ut', + 'windyWeatherTip': + 'I dag er det mye vind, vær forsiktig når du går ut og sikre eiendelene dine', + 'sunnyWeatherTip': + 'I dag er det sol og sterk UV-stråling, bruk solkrem når du går ut', + 'temperatureDifferenceTip': + 'I dag er det stor temperaturforskjell mellom dag og natt, tilpass klærne', + 'comfortableWeatherTip': + 'I dag er været behagelig, en flott tid for utendørsaktiviteter', "monday": "Man", "tuesday": "Tir", "wednesday": "Ons", @@ -838,21 +903,28 @@ const Map nbNO = { "logout": "Logg ut", "logoutTips": "Er du sikker på at du vil logge ut av den nåværende kontoen?", 'deleteAccount': 'Slett konto', - 'deleteAccountTips': 'Er du sikker på at du vil slette kontoen din permanent? Denne handlingen kan ikke angres.', + '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': 'Nettverkstilkobling mislyktes, sjekk nettverksinnstillingene og prøv igjen', - 'serverTemporarilyUnavailable': 'Serveren er midlertidig utilgjengelig, prøv igjen senere', - 'loginExpiredPleaseRelogin': 'Sesjonen din er utløpt, vennligst logg inn på nytt', - 'noPermissionForThisOperation': 'Du har ikke tillatelse til å utføre denne operasjonen', + 'networkConnectionFailed': + 'Nettverkstilkobling mislyktes, sjekk nettverksinnstillingene og prøv igjen', + 'serverTemporarilyUnavailable': + 'Serveren er midlertidig utilgjengelig, prøv igjen senere', + 'loginExpiredPleaseRelogin': + 'Sesjonen din er utløpt, vennligst logg inn på nytt', + 'noPermissionForThisOperation': + 'Du har ikke tillatelse til å utføre denne operasjonen', 'requestedResourceNotFound': 'Den forespurte ressursen ble ikke funnet', - 'imageProcessingFailedPleaseReselect': 'Bildebehandling mislyktes, velg et annet bilde', + 'imageProcessingFailedPleaseReselect': + 'Bildebehandling mislyktes, velg et annet bilde', 'operationFailedPleaseRetry': 'Operasjonen mislyktes, prøv igjen', 'serverReturnedError': 'Serveren returnerte en feil', 'serverError': 'Serverfeil', - 'networkConnectionFailedCheckSettings': 'Nettverkstilkobling mislyktes, sjekk nettverksinnstillingene', + 'networkConnectionFailedCheckSettings': + 'Nettverkstilkobling mislyktes, sjekk nettverksinnstillingene', 'serverInternalErrorRetryLater': 'Intern serverfeil, prøv igjen senere', // Profile 用户交互 @@ -875,10 +947,12 @@ const Map nbNO = { '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', // 删除账号过程发生错误 + 'deleteAccountProcessError': + 'Det oppstod en feil under sletting av kontoen', // 删除账号过程发生错误 'userDataClearSuccess': 'Brukerdata fjernet', // 用户数据清理成功 'allUserDataClearSuccess': 'Alle brukerdata fjernet', // 所有用户数据清理成功 - 'accountServiceInitialized': 'Kontotjenesten er initialisert', // AccountService 已初始化 + 'accountServiceInitialized': + 'Kontotjenesten er initialisert', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Henting av tillatelsesstatus mislyktes', @@ -901,9 +975,12 @@ const Map nbNO = { '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': 'Brukes for å lese og administrere kalenderhendelser og påminnelser', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Brukes for å opprette kalenderhendelser og påminnelser', + 'calendarFullAccessPermissionDesc': + 'Brukes for å lese og administrere kalenderhendelser og påminnelser', 'locationPermissionDesc': 'Brukes for å hente nåværende posisjonsinformasjon', 'appFunctionNeeds': 'Appfunksjonen trenger', 'authorized': 'Autorisert', @@ -915,43 +992,67 @@ 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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1062,8 @@ const Map nbNO = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1072,10 @@ const Map nbNO = { 'updateNow': 'Oppdater nå', // 立即更新按钮 'checkUpdate': 'Se etter oppdatering', // 检查更新按钮 'updateFailed': 'Oppdatering mislyktes', // 更新失败提示 - 'cannotOpenAppStore': 'Kan ikke åpne appbutikken, gå til appbutikken manuelt for å oppdatere', // 无法打开应用商店提示 - 'updateErrorRetry': 'Det oppstod en feil under oppdateringen, prøv igjen senere', // 更新错误重试提示 + 'cannotOpenAppStore': + 'Kan ikke åpne appbutikken, gå til appbutikken manuelt for å oppdatere', // 无法打开应用商店提示 + 'updateErrorRetry': + 'Det oppstod en feil under oppdateringen, prøv igjen senere', // 更新错误重试提示 //国家列表 "邮箱": "E-post", @@ -1107,7 +1211,8 @@ const Map nbNO = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1228,12 @@ const Map nbNO = { "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.", + "clearHistoryConfirm": + "Er du sikker på at du vil tømme all oversettelseshistorikk? Denne handlingen kan ikke angres.", "unknownLanguage": "Ukjent språk", "deleteSessionRecord": "Slett sesjonsopptak", - "deleteSessionConfirm": "Er du sikker på at du vil slette alle oversettelsesopptak for denne sesjonen? Denne handlingen kan ikke angres.", + "deleteSessionConfirm": + "Er du sikker på at du vil slette alle oversettelsesopptak for denne sesjonen? Denne handlingen kan ikke angres.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1265,20 @@ const Map nbNO = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1301,8 @@ const Map nbNO = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Originalt opptak", "recordSummary": "Opptakssammendrag", - "clickToGenerateSummary": "Klikk på knappen nedenfor for å generere et sesjonssammendrag", + "clickToGenerateSummary": + "Klikk på knappen nedenfor for å generere et sesjonssammendrag", "summaryContent": "Sammendragsinnhold", "copied": "Kopiert", "summaryCopiledToClipboard": "Sammendraget er kopiert til utklippstavlen", @@ -1197,9 +1310,11 @@ const Map nbNO = { "summaryGenerated": "Sammendrag generert", "generating": "Genererer...", "regenerate": "Generer på nytt", - "summaryTimeoutMessage": "Forespørselen om å generere sammendrag utløp, muligens på grunn av nettverksproblemer eller travel server.", + "summaryTimeoutMessage": + "Forespørselen om å generere sammendrag utløp, muligens på grunn av nettverksproblemer eller travel server.", "deleteTranslationRecord": "Slett oversettelsesopptak", - "deleteTranslationConfirm": "Er du sikker på at du vil slette dette oversettelsesopptaket? Denne handlingen kan ikke angres.", + "deleteTranslationConfirm": + "Er du sikker på at du vil slette dette oversettelsesopptaket? Denne handlingen kan ikke angres.", "originalText": "Originaltekst", "translatedText": "Oversatt tekst", "sessionSummary": "Sesjonssammendrag", @@ -1227,19 +1342,25 @@ const Map nbNO = { // 配对状态文本 "readyToPair": "Klar til å pare", "preparingPairingEnvironment": "Forbereder paringsmiljø...", - "connectDeepSoundViaSystemBluetooth": "Koble først til Voitrans-enheten via systemets Bluetooth", + "connectDeepSoundViaSystemBluetooth": + "Koble først til Voitrans-enheten via systemets Bluetooth", "deviceBindingConfirm": "Bekreftelse av enhetsbinding...", "establishingDeviceAssociation": "Oppretter enhetsassosiasjon...", "waitingCompletePairing": "Vennligst vent, fullfører paring...", - "pairingSuccessRedirecting": "Paring vellykket! Omdirigerer til startsiden...", + "pairingSuccessRedirecting": + "Paring vellykket! Omdirigerer til startsiden...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Sørg for at du er koblet til en Voitrans-enhet", - "deviceAlreadyBoundToOtherAccount": "Denne enheten er allerede bundet til en annen konto", + "ensureConnectedDeepSoundDevice": + "Sørg for at du er koblet til en Voitrans-enhet", + "deviceAlreadyBoundToOtherAccount": + "Denne enheten er allerede bundet til en annen konto", "deviceAssociationFailed": "Enhetsassosiasjon mislyktes, prøv igjen", - "scanTimeoutEnsureDeviceNearby": "Skanne-tidsavbrudd, sørg for at enheten er i nærheten", + "scanTimeoutEnsureDeviceNearby": + "Skanne-tidsavbrudd, sørg for at enheten er i nærheten", "networkError": "Nettverksfeil", - "authorizationFailedCheckCode": "Autorisasjon mislyktes, sjekk om autorisasjonskoden er riktig", + "authorizationFailedCheckCode": + "Autorisasjon mislyktes, sjekk om autorisasjonskoden er riktig", "pairingFailedRetry": "Paring mislyktes, prøv igjen", // 配对控制器相关 @@ -1248,7 +1369,8 @@ const Map nbNO = { 'deviceDisconnected': 'Enheten er frakoblet', 'readyToStartPairing': 'Klar til å starte paring', 'checkingEnvironment': 'Sjekker miljø...', - 'ensureHeadsetOnAndPairingMode': 'Sørg for at hodesettet er på og i paringsmodus', + 'ensureHeadsetOnAndPairingMode': + 'Sørg for at hodesettet er på og i paringsmodus', //'goToBluetoothSettings': '前往蓝牙设置', //'verifyingDevice': '正在验证设备...', //'confirmBinding': '确认绑定', @@ -1270,15 +1392,20 @@ const Map nbNO = { 'bleConnectionTimeoutRetry': 'BLE-tilkoblingstidsavbrudd, prøv igjen', 'blePairingStartupFailed': 'Start av BLE-paring mislyktes', 'bleConnectionFailed': 'BLE-tilkobling mislyktes', - 'deviceAuthorizationFailedCheckCode': 'Enhetsautorisasjon mislyktes, sjekk autorisasjonskoden', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', // 我知道了 //用户反馈页 @@ -1291,10 +1418,12 @@ const Map nbNO = { 'contactHint': 'E-post/telefon, slik at vi kan kontakte deg', 'submit': 'Send inn', 'feedbackSubmitSuccess': 'Tilbakemelding sendt, takk for din tilbakemelding!', - 'feedbackSubmitFailed': 'Innsending av tilbakemelding mislyktes, prøv igjen senere', + 'feedbackSubmitFailed': + 'Innsending av tilbakemelding mislyktes, prøv igjen senere', // OTA升级模块 - "upgradeExitConfirm": "Oppgradering pågår, å avslutte vil avbryte prosessen, er du sikker på at du vil avslutte?", + "upgradeExitConfirm": + "Oppgradering pågår, å avslutte vil avbryte prosessen, er du sikker på at du vil avslutte?", "deviceModel": "Enhetsmodell", "unknownDevice": "Ukjent enhet", "currentFirmwareVersion": "Nåværende firmware-versjon", @@ -1307,14 +1436,18 @@ const Map nbNO = { "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.", + "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", "updateContent": "Oppdateringsinnhold", - "removeEarbudsEnsureBattery": "Ta ut begge øreproppene og sørg for at batterinivået på begge er over 20 %", + "removeEarbudsEnsureBattery": + "Ta ut begge øreproppene og sørg for at batterinivået på begge er over 20 %", // 音乐列表页面 "noMusic": "Ingen musikk", // 暂无音乐 @@ -1376,8 +1509,10 @@ const Map nbNO = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 9f077e584..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", @@ -90,7 +91,8 @@ const Map nlNL = { "tip": "Tip", "pleaseEnterCompleteCode": "Voer de volledige verificatiecode in", "loginFailed": "Inloggen mislukt, probeer het opnieuw", - 'pleaseAcceptPrivacyPolicy': 'Lees en accepteer eerst het Privacybeleid en de Gebruikersovereenkomst', + 'pleaseAcceptPrivacyPolicy': + 'Lees en accepteer eerst het Privacybeleid en de Gebruikersovereenkomst', "enterVerificationCode": "Voer verificatiecode in", "verificationCodeSentTo": "Verificatiecode verzonden naar", "resendVerificationCode": "Verificatiecode opnieuw verzenden", @@ -99,7 +101,8 @@ const Map nlNL = { // 隐私政策弹窗 "loginDeclaration": "Voitrans Verklaring", // Voitrans 声明 - "welcomeToThisApp": "Welkom bij Voitrans, lees aandachtig door", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Welkom bij Voitrans, lees aandachtig door", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +118,30 @@ const Map nlNL = { "signal": "Signaal", "deviceId": "Apparaat-ID", "firmwareVersion": "Firmwareversie", - "disconnectedDevice": "Geen apparaat verbonden, klik op de onderstaande knop om te verbinden", + "disconnectedDevice": + "Geen apparaat verbonden, klik op de onderstaande knop om te verbinden", "connectDevice": "Apparaat verbinden", "topAiExperiences": "Top AI-ervaringen", "aiAssistant": "Alles-in-één AI-assistent", - "aiAssistantInfo": "Exclusieve 24/7 consultant, beantwoordt vragen, geeft suggesties", + "aiAssistantInfo": + "Exclusieve 24/7 consultant, beantwoordt vragen, geeft suggesties", "interpretation": "Simultaanvertolking", - "simultaneousInterpretationInfo": "Realtime vertaling in meer dan 80 talen, zorgeloos reizen naar het buitenland", + "simultaneousInterpretationInfo": + "Realtime vertaling in meer dan 80 talen, zorgeloos reizen naar het buitenland", "aiCompanion": "Familiebegeleider", "aiCompanionInfo": "Begrijpt u, warm gezelschap", "homeSlogan": "De wereld verbinden, het geluid overstijgen", - "turnEarphones": "Open de oplaadcase van de oortjes en plaats de oortjes in uw oren", + "turnEarphones": + "Open de oplaadcase van de oortjes en plaats de oortjes in uw oren", "currentlyConnected": "Momenteel verbonden:", "unsystemSetup": "Ga naar systeeminstellingen", "talkLater": "Later", "initializing": "Initialiseren...", - "bluetoothInitializationFailure": "Initialisatie van Bluetooth-service mislukt", + "bluetoothInitializationFailure": + "Initialisatie van Bluetooth-service mislukt", "checkingPermissions": "Toestemmingen controleren...", - "lackPermissions": "Bluetooth-toestemmingen ontbreken en zijn nodig om locatie toegang te krijgen", + "lackPermissions": + "Bluetooth-toestemmingen ontbreken en zijn nodig om locatie toegang te krijgen", "searchingDevice": "Apparaten zoeken...", "findConnectedDevice": "Verbonden apparaat gevonden", "notFound": "Geen verbonden Bluetooth-apparaat gevonden", @@ -164,7 +173,8 @@ const Map nlNL = { "exploreAi": "Ontdek de AI-functies die door Voitrans worden aangeboden", "aiFunction": "AI-functies", "allRoundAssistant": "Alles-in-één assistent", - "allRoundAssistantInfo": "Helpt u bij het oplossen van verschillende problemen", + "allRoundAssistantInfo": + "Helpt u bij het oplossen van verschillende problemen", "simultaneousTranslation": "Simultaanvertolking", "faceToFaceTranslation": "Face-to-face vertaling", 'audioVideoTranslation': 'Audio- en videovertaling', @@ -175,7 +185,8 @@ const Map nlNL = { "healthConsultant": "Multifunctionele AI-chat", "healthConsultantInfo": "Biedt meer AI-chatfuncties", "conferenceAssistant": "Assistent voor zakelijke bijeenkomsten", - "conferenceAssistantInfo": "Realtime notuleren van vergaderingen, meertalige vertaling", + "conferenceAssistantInfo": + "Realtime notuleren van vergaderingen, meertalige vertaling", "usageStats": "Gebruikstatistieken", "usageStatsInfo": " Bekijk de gebruikstatistieken van uw applicatie", "scene": "Scenario", @@ -218,7 +229,8 @@ const Map nlNL = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +286,10 @@ const Map nlNL = { '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.', + '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', @@ -284,27 +298,35 @@ const Map nlNL = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +335,10 @@ const Map nlNL = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +353,8 @@ const Map nlNL = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Overslaan", @@ -355,7 +380,8 @@ const Map nlNL = { '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”', + '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', @@ -405,7 +431,8 @@ const Map nlNL = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +487,54 @@ const Map nlNL = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +546,8 @@ const Map nlNL = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +567,8 @@ const Map nlNL = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +617,8 @@ const Map nlNL = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +643,8 @@ const Map nlNL = { "cloudSync": "Cloud-synchronisatiepayering", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Verbonden apparaat:", "accountId": "Account-ID:", "systemSetting": "Systeeminstellingen", @@ -621,9 +666,11 @@ const Map nlNL = { "voiceServiceInfo": "Selecteer spraakherkenning- en synthese-service", "selectVoiceService": "Selecteer stemdienst", "azureVoiceService": "Azure Stemdienst", - "azureVoiceServiceInfo": "Microsoft's cloud-stemdienst, ondersteunt hoogwaardige spraaksynthese en -herkenning", + "azureVoiceServiceInfo": + "Microsoft's cloud-stemdienst, ondersteunt hoogwaardige spraaksynthese en -herkenning", "flutterVoiceService": "Flutter Lokale Stemdienst", - "flutterVoiceServiceInfo": "Lokale stemdienst van het apparaat, kan zonder internetverbinding worden gebruikt", + "flutterVoiceServiceInfo": + "Lokale stemdienst van het apparaat, kan zonder internetverbinding worden gebruikt", 'timbreService': 'Timbre-dienst', 'timbreServiceInfo': 'Selecteer timbre-spraak-synthese-service', 'defaultTimbre': 'Standaard Timbre', @@ -652,7 +699,8 @@ const Map nlNL = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Realtime spraakchat", - "realtimeVoiceChatInfo": "Ervaar de intelligente spraakinteractiefunctie (functievoorbeeld)", + "realtimeVoiceChatInfo": + "Ervaar de intelligente spraakinteractiefunctie (functievoorbeeld)", "loading": "Laden...", //设备管理页面 @@ -667,7 +715,8 @@ const Map nlNL = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -678,7 +727,8 @@ const Map nlNL = { "inputMessage": "Voer bericht in...", "imListening": "Ik luister...", "canStartTalking": "U kunt beginnen met praten", - "addQuestionAboutImage": "Voeg een vraag of beschrijving over de afbeelding toe...", + "addQuestionAboutImage": + "Voeg een vraag of beschrijving over de afbeelding toe...", "summarizeImageContent": "Vat de inhoud van de afbeelding samen", "extractImageText": "Extraheer tekst uit de afbeelding", "translateImageText": "Vertaal tekst in de afbeelding", @@ -721,10 +771,14 @@ const Map nlNL = { '• Oortjesfuncties bedienen\n\n' 'Hoe kan ik u helpen?', 'microphonePermission': 'Microfoon', - 'voiceRecognitionPermissionText': 'Spraakherkenning vereist microfoontoegang.', - 'voiceTranslationPermissionText': 'Spraakherkenning en -vertaling vereisen microfoontoegang.', - 'phoneCallPermissionText': 'Bellen vereist microfoontoegang voor spraakoproepen.', - 'permissionDeniedText': 'U hebt de microfoontoestemming permanent geweigerd, ga naar de systeeminstellingen om deze in te schakelen.', + 'voiceRecognitionPermissionText': + 'Spraakherkenning vereist microfoontoegang.', + 'voiceTranslationPermissionText': + 'Spraakherkenning en -vertaling vereisen microfoontoegang.', + 'phoneCallPermissionText': + 'Bellen vereist microfoontoegang voor spraakoproepen.', + 'permissionDeniedText': + 'U hebt de microfoontoestemming permanent geweigerd, ga naar de systeeminstellingen om deze in te schakelen.', 'startVoiceInput': 'Start spraakinvoer', 'startPhoneCallMode': 'Start belmodus, start spraakinvoer', @@ -738,7 +792,8 @@ const Map nlNL = { 'report': 'Rapporteren', 'submitSuccess': 'Succesvol ingediend', 'submitFailed': 'Indienen mislukt', - 'reportSubmitted': 'Rapport ingediend, we zullen het zo snel mogelijk verwerken', + 'reportSubmitted': + 'Rapport ingediend, we zullen het zo snel mogelijk verwerken', //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Schadelijk/Onveilig', 'pornographicVulgar': 'Pornografisch/Vulgair', @@ -747,7 +802,8 @@ const Map nlNL = { 'privacyRelated': 'Privacygerelateerd', 'copyrightViolation': 'Schendt mijn auteursrecht, reputatie, enz.', 'other': 'Overig', - 'reportDescriptionHint': 'We willen weten waarom u rapporteert, u kunt het probleem dat u tegenkwam beschrijven.', + 'reportDescriptionHint': + 'We willen weten waarom u rapporteert, u kunt het probleem dat u tegenkwam beschrijven.', //'submit': '提交', //Message_bubble @@ -779,14 +835,22 @@ const Map nlNL = { 'lowest': 'Laagste', 'futureForecast': 'Toekomstige voorspelling', 'hotWeatherTip': 'Vandaag is het heet, let op zonnesteek en drink veel water', - 'coldWeatherTip': 'Vandaag is de temperatuur laag, kleed u warm aan als u naar buiten gaat om verkoudheid te voorkomen', - 'rainyWeatherTip': 'Vandaag regent het, neem een paraplu mee als u naar buiten gaat en wees voorzichtig', - 'snowyWeatherTip': 'Vandaag sneeuwt het, de weg is glad, wees voorzichtig en kleed u warm aan', - 'foggyWeatherTip': 'Vandaag is het mistig, het zicht is slecht, draag een masker als u naar buiten gaat', - 'windyWeatherTip': 'Vandaag is het winderig, wees voorzichtig als u naar buiten gaat en zet uw spullen vast', - 'sunnyWeatherTip': 'Vandaag is het zonnig en de UV-straling is sterk, gebruik zonnebrandcrème als u naar buiten gaat', - 'temperatureDifferenceTip': 'Vandaag is er een groot temperatuurverschil tussen dag en nacht, pas uw kleding aan', - 'comfortableWeatherTip': 'Vandaag is het aangenaam weer, een goede tijd voor buitenactiviteiten', + 'coldWeatherTip': + 'Vandaag is de temperatuur laag, kleed u warm aan als u naar buiten gaat om verkoudheid te voorkomen', + 'rainyWeatherTip': + 'Vandaag regent het, neem een paraplu mee als u naar buiten gaat en wees voorzichtig', + 'snowyWeatherTip': + 'Vandaag sneeuwt het, de weg is glad, wees voorzichtig en kleed u warm aan', + 'foggyWeatherTip': + 'Vandaag is het mistig, het zicht is slecht, draag een masker als u naar buiten gaat', + 'windyWeatherTip': + 'Vandaag is het winderig, wees voorzichtig als u naar buiten gaat en zet uw spullen vast', + 'sunnyWeatherTip': + 'Vandaag is het zonnig en de UV-straling is sterk, gebruik zonnebrandcrème als u naar buiten gaat', + 'temperatureDifferenceTip': + 'Vandaag is er een groot temperatuurverschil tussen dag en nacht, pas uw kleding aan', + 'comfortableWeatherTip': + 'Vandaag is het aangenaam weer, een goede tijd voor buitenactiviteiten', "monday": "Ma", "tuesday": "Di", "wednesday": "Wo", @@ -838,22 +902,29 @@ const Map nlNL = { "logout": "Uitloggen", "logoutTips": "Weet u zeker dat u wilt uitloggen bij het huidige account?", 'deleteAccount': 'Account verwijderen', - 'deleteAccountTips': 'Weet u zeker dat u uw account permanent wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.', + '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': 'Netwerkverbinding mislukt, controleer uw netwerkinstellingen en probeer het opnieuw', - 'serverTemporarilyUnavailable': 'De server is tijdelijk niet beschikbaar, probeer het later opnieuw', + 'networkConnectionFailed': + 'Netwerkverbinding mislukt, controleer uw netwerkinstellingen en probeer het opnieuw', + 'serverTemporarilyUnavailable': + 'De server is tijdelijk niet beschikbaar, probeer het later opnieuw', 'loginExpiredPleaseRelogin': 'Uw sessie is verlopen, log opnieuw in', - 'noPermissionForThisOperation': 'U hebt geen toestemming om deze bewerking uit te voeren', + 'noPermissionForThisOperation': + 'U hebt geen toestemming om deze bewerking uit te voeren', 'requestedResourceNotFound': 'De gevraagde bron is niet gevonden', - 'imageProcessingFailedPleaseReselect': 'Beeldverwerking mislukt, selecteer een andere afbeelding', + 'imageProcessingFailedPleaseReselect': + 'Beeldverwerking mislukt, selecteer een andere afbeelding', 'operationFailedPleaseRetry': 'Bewerking mislukt, probeer het opnieuw', 'serverReturnedError': 'De server heeft een fout geretourneerd', 'serverError': 'Serverfout', - 'networkConnectionFailedCheckSettings': 'Netwerkverbinding mislukt, controleer uw netwerkinstellingen', - 'serverInternalErrorRetryLater': 'Interne serverfout, probeer het later opnieuw', + 'networkConnectionFailedCheckSettings': + 'Netwerkverbinding mislukt, controleer uw netwerkinstellingen', + 'serverInternalErrorRetryLater': + 'Interne serverfout, probeer het later opnieuw', // Profile 用户交互 //'error': '错误', @@ -867,18 +938,25 @@ const Map nlNL = { 'loggedOut': 'Succesvol uitgelogd', 'logoutFailedRetry': 'Uitloggen mislukt, probeer het opnieuw', 'accountPermanentlyDeleted': 'Account is permanent verwijderd', - 'deleteAccountFailedRetry': 'Verwijderen van account mislukt, probeer het opnieuw', + 'deleteAccountFailedRetry': + 'Verwijderen van account mislukt, probeer het opnieuw', // 账号服务相关 'clearUserDataFailed': 'Wissen van gebruikersgegevens mislukt', // 清理用户数据失败 - 'deleteUserDataFailed': 'Verwijderen van gebruikersgegevens mislukt', // 删除用户数据失败 - 'thirdPartyLogoutSuccess': 'Uitloggen bij derde partij succesvol', // 第三方登录退出成功 + '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', // 删除账号过程发生错误 + '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', // AccountService 已初始化 + 'allUserDataClearSuccess': + 'Alle gebruikersgegevens succesvol gewist', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Accountservice is geïnitialiseerd', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Ophalen van toestemmingsstatus mislukt', @@ -900,58 +978,89 @@ const Map nlNL = { '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': 'Gebruikt voor het lezen en beheren van kalenderafspraken en herinneringen', - 'locationPermissionDesc': 'Gebruikt voor het ophalen van de huidige locatie-informatie', + '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': + 'Gebruikt voor het lezen en beheren van kalenderafspraken en herinneringen', + 'locationPermissionDesc': + 'Gebruikt voor het ophalen van de huidige locatie-informatie', 'appFunctionNeeds': 'App-functie vereist', 'authorized': 'Geautoriseerd', 'unauthorized': 'Niet geautoriseerd', - 'needOpenInSystemSettings': 'Moet worden ingeschakeld in de systeeminstellingen', + 'needOpenInSystemSettings': + 'Moet worden ingeschakeld in de systeeminstellingen', 'partialAuthorization': 'Gedeeltelijke autorisatie', 'unknownStatus': 'Onbekende status', 'permissionGranted': 'Toestemming verleend', 'permissionRequestError': 'Fout bij het aanvragen van toestemming', '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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1070,8 @@ const Map nlNL = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1080,10 @@ const Map nlNL = { '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', // 无法打开应用商店提示 - 'updateErrorRetry': 'Er is een fout opgetreden tijdens het bijwerken, probeer het later opnieuw', // 更新错误重试提示 + 'cannotOpenAppStore': + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -1107,7 +1219,8 @@ const Map nlNL = { "selectTargetLanguage": "Selecteer doeltaal", "me": "Me", "counterPart": "Counterpart", - "bluetoothCallStateError": "Please make sure the Bluetooth headset is connected to the phone and in a call state", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1236,12 @@ const Map nlNL = { "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.", + "clearHistoryConfirm": + "Weet u zeker dat u alle vertaalgeschiedenis wilt wissen? Deze actie kan niet ongedaan worden gemaakt.", "unknownLanguage": "Onbekende taal", "deleteSessionRecord": "Sessie-opname verwijderen", - "deleteSessionConfirm": "Weet u zeker dat u alle vertaalopnamen voor deze sessie wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.", + "deleteSessionConfirm": + "Weet u zeker dat u alle vertaalopnamen voor deze sessie wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1273,20 @@ const Map nlNL = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1309,8 @@ const Map nlNL = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Originele opname", "recordSummary": "Opnamesamenvatting", - "clickToGenerateSummary": "Klik op de onderstaande knop om een sessiesamenvatting te genereren", + "clickToGenerateSummary": + "Klik op de onderstaande knop om een sessiesamenvatting te genereren", "summaryContent": "Samenvattingsinhoud", "copied": "Gekopieerd", "summaryCopiledToClipboard": "Samenvatting gekopieerd naar klembord", @@ -1197,9 +1318,11 @@ const Map nlNL = { "summaryGenerated": "Samenvatting gegenereerd", "generating": "Genereren...", "regenerate": "Opnieuw genereren", - "summaryTimeoutMessage": "Het genereren van de samenvatting is verlopen, mogelijk vanwege netwerkproblemen of een drukke server.", + "summaryTimeoutMessage": + "Het genereren van de samenvatting is verlopen, mogelijk vanwege netwerkproblemen of een drukke server.", "deleteTranslationRecord": "Vertaalopname verwijderen", - "deleteTranslationConfirm": "Weet u zeker dat u deze vertaalopname wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.", + "deleteTranslationConfirm": + "Weet u zeker dat u deze vertaalopname wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.", "originalText": "Originele tekst", "translatedText": "Vertaalde tekst", "sessionSummary": "Sessiesamenvatting", @@ -1227,19 +1350,25 @@ const Map nlNL = { // 配对状态文本 "readyToPair": "Klaar om te koppelen", "preparingPairingEnvironment": "Koppelingsomgeving voorbereiden...", - "connectDeepSoundViaSystemBluetooth": "Verbind eerst met het Voitrans-apparaat via systeem-Bluetooth", + "connectDeepSoundViaSystemBluetooth": + "Verbind eerst met het Voitrans-apparaat via systeem-Bluetooth", "deviceBindingConfirm": "Bevestiging apparaatkoppeling...", "establishingDeviceAssociation": "Apparaatassociatie tot stand brengen...", "waitingCompletePairing": "Even geduld, koppeling wordt voltooid...", - "pairingSuccessRedirecting": "Koppelen geslaagd! Wordt doorgestuurd naar de startpagina...", + "pairingSuccessRedirecting": + "Koppelen geslaagd! Wordt doorgestuurd naar de startpagina...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Zorg ervoor dat u bent verbonden met een Voitrans-apparaat", - "deviceAlreadyBoundToOtherAccount": "Dit apparaat is al gekoppeld aan een ander account", + "ensureConnectedDeepSoundDevice": + "Zorg ervoor dat u bent verbonden met een Voitrans-apparaat", + "deviceAlreadyBoundToOtherAccount": + "Dit apparaat is al gekoppeld aan een ander account", "deviceAssociationFailed": "Apparaatassociatie mislukt, probeer het opnieuw", - "scanTimeoutEnsureDeviceNearby": "Scannen is verlopen, zorg ervoor dat het apparaat in de buurt is", + "scanTimeoutEnsureDeviceNearby": + "Scannen is verlopen, zorg ervoor dat het apparaat in de buurt is", "networkError": "Netwerkfout", - "authorizationFailedCheckCode": "Autorisatie mislukt, controleer of de autorisatiecode correct is", + "authorizationFailedCheckCode": + "Autorisatie mislukt, controleer of de autorisatiecode correct is", "pairingFailedRetry": "Koppelen mislukt, probeer het opnieuw", // 配对控制器相关 @@ -1248,13 +1377,15 @@ const Map nlNL = { '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', + '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...', + 'needManualBindingAuthCode': + 'Handmatige koppelingsautorisatiecode vereist...', 'pairingSuccessful': 'Koppelen geslaagd!', 'enableBluetooth': 'Bluetooth inschakelen', 'grantPermissions': 'Toestemmingen verlenen', @@ -1266,35 +1397,45 @@ const Map nlNL = { 'verificationFailedRetry': 'Verificatie mislukt, probeer het opnieuw', 'invalidDeviceAddress': 'Ongeldig apparaatadres', 'bleDeviceAssociationFailed': 'Associatie van BLE-apparaat mislukt', - 'deviceAssociationFailedRetry': 'Apparaatassociatie mislukt, probeer het opnieuw', + 'deviceAssociationFailedRetry': + 'Apparaatassociatie mislukt, probeer het opnieuw', 'bleConnectionTimeoutRetry': 'BLE-verbindingstime-out, probeer het opnieuw', 'blePairingStartupFailed': 'Starten van BLE-koppeling mislukt', 'bleConnectionFailed': 'BLE-verbinding mislukt', - 'deviceAuthorizationFailedCheckCode': 'Apparaatautorisatie mislukt, controleer de autorisatiecode', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', - 'feedbackDescription': 'Beschrijf het probleem dat u tegenkwam of uw suggestie', + 'feedbackDescription': + 'Beschrijf het probleem dat u tegenkwam of uw suggestie', 'feedbackHint': 'Voer uw feedback in...', 'feedbackRequired': 'Voer de inhoud van de feedback in', 'contactInfo': 'Contactgegevens', 'contactHint': 'E-mail/telefoon, zodat we contact met u kunnen opnemen', 'submit': 'Indienen', - 'feedbackSubmitSuccess': 'Feedback succesvol ingediend, bedankt voor uw feedback!', - 'feedbackSubmitFailed': 'Indienen van feedback mislukt, probeer het later opnieuw', + 'feedbackSubmitSuccess': + 'Feedback succesvol ingediend, bedankt voor uw feedback!', + 'feedbackSubmitFailed': + 'Indienen van feedback mislukt, probeer het later opnieuw', // OTA升级模块 - "upgradeExitConfirm": "Upgrade wordt uitgevoerd, afsluiten zal het proces onderbreken, weet u zeker dat u wilt afsluiten?", + "upgradeExitConfirm": + "Upgrade wordt uitgevoerd, afsluiten zal het proces onderbreken, weet u zeker dat u wilt afsluiten?", "deviceModel": "Apparaatmodel", "unknownDevice": "Onbekend apparaat", "currentFirmwareVersion": "Huidige firmwareversie", @@ -1307,14 +1448,18 @@ const Map nlNL = { "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.", + "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", "updateContent": "Update-inhoud", - "removeEarbudsEnsureBattery": "Haal beide oortjes eruit en zorg ervoor dat de batterij van beide meer dan 20% is", + "removeEarbudsEnsureBattery": + "Haal beide oortjes eruit en zorg ervoor dat de batterij van beide meer dan 20% is", // 音乐列表页面 "noMusic": "Geen muziek", // 暂无音乐 @@ -1376,8 +1521,10 @@ const Map nlNL = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 c7b2d4768..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", @@ -71,7 +72,8 @@ const Map plPL = { // 登录页 "welcome": "Witaj", - "loginTips": "Zaloguj się lub zarejestruj za pomocą numeru telefonu lub adresu e-mail", + "loginTips": + "Zaloguj się lub zarejestruj za pomocą numeru telefonu lub adresu e-mail", "accountNumber": "Numer telefonu lub e-mail", "verificationCode": "Kod weryfikacyjny", "getCode": "Pobierz kod", @@ -90,7 +92,8 @@ const Map plPL = { "tip": "Wskazówka", "pleaseEnterCompleteCode": "Wprowadź pełny kod weryfikacyjny", "loginFailed": "Logowanie nie powiodło się, spróbuj ponownie", - 'pleaseAcceptPrivacyPolicy': 'Najpierw przeczytaj i zaakceptuj Politykę prywatności oraz Umowę użytkownika', + 'pleaseAcceptPrivacyPolicy': + 'Najpierw przeczytaj i zaakceptuj Politykę prywatności oraz Umowę użytkownika', "enterVerificationCode": "Wprowadź kod weryfikacyjny", "verificationCodeSentTo": "Kod weryfikacyjny został wysłany na", "resendVerificationCode": "Wyślij kod weryfikacyjny ponownie", @@ -99,7 +102,8 @@ const Map plPL = { // 隐私政策弹窗 "loginDeclaration": "Oświadczenie Voitrans", // Voitrans 声明 - "welcomeToThisApp": "Witaj w Voitrans, prosimy o uważne przeczytanie", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Witaj w Voitrans, prosimy o uważne przeczytanie", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,13 +119,16 @@ const Map plPL = { "signal": "Sygnał", "deviceId": "ID urządzenia", "firmwareVersion": "Wersja oprogramowania układowego", - "disconnectedDevice": "Brak podłączonego urządzenia, kliknij przycisk poniżej, aby połączyć", + "disconnectedDevice": + "Brak podłączonego urządzenia, kliknij przycisk poniżej, aby połączyć", "connectDevice": "Połącz urządzenie", "topAiExperiences": "Najlepsze doświadczenia z AI", "aiAssistant": "Wszechstronny asystent AI", - "aiAssistantInfo": "Ekskluzywny konsultant 24/7, odpowiada na pytania, udziela sugestii", + "aiAssistantInfo": + "Ekskluzywny konsultant 24/7, odpowiada na pytania, udziela sugestii", "interpretation": "Tłumaczenie symultaniczne", - "simultaneousInterpretationInfo": "Tłumaczenie w czasie rzeczywistym na ponad 80 języków, bezproblemowe podróże zagraniczne", + "simultaneousInterpretationInfo": + "Tłumaczenie w czasie rzeczywistym na ponad 80 języków, bezproblemowe podróże zagraniczne", "aiCompanion": "Towarzysz rodzinny", "aiCompanionInfo": "Rozumie Cię, ciepłe towarzystwo", "homeSlogan": "Łącząc świat, przekraczając dźwięk", @@ -130,9 +137,11 @@ const Map plPL = { "unsystemSetup": "Przejdź do ustawień systemowych", "talkLater": "Później", "initializing": "Inicjalizacja...", - "bluetoothInitializationFailure": "Inicjalizacja usługi Bluetooth nie powiodła się", + "bluetoothInitializationFailure": + "Inicjalizacja usługi Bluetooth nie powiodła się", "checkingPermissions": "Sprawdzanie uprawnień...", - "lackPermissions": "Brak uprawnień Bluetooth i jest wymagana prawo dostępu do lokalizacji", + "lackPermissions": + "Brak uprawnień Bluetooth i jest wymagana prawo dostępu do lokalizacji", "searchingDevice": "Wyszukiwanie urządzeń...", "findConnectedDevice": "Znaleziono podłączone urządzenie", "notFound": "Nie znaleziono podłączonego urządzenia Bluetooth", @@ -154,7 +163,8 @@ const Map plPL = { 'chargingCase': 'Etui ładujące', 'left': 'Lewo', 'right': 'Prawo', - 'checkConnectionStatusFailed': 'Sprawdzenie stanu połączenia nie powiodło się', + 'checkConnectionStatusFailed': + 'Sprawdzenie stanu połączenia nie powiodło się', // 发现页 "searchAi": "Szukaj funkcji AI...", @@ -169,13 +179,15 @@ const Map plPL = { "faceToFaceTranslation": "Tłumaczenie twarzą w twarz", 'audioVideoTranslation': 'Tłumaczenie audio i wideo', 'callTranslation': 'Tłumaczenie rozmów', - "simultaneousTranslationInfo": "Tłumaczenie w czasie rzeczywistym na ponad 80 języków", + "simultaneousTranslationInfo": + "Tłumaczenie w czasie rzeczywistym na ponad 80 języków", "aiGirlfriend": "Dziewczyna AI", "aiGirlfriendInfo": "Inteligentny towarzysz, rozmawiaj w dowolnym momencie", "healthConsultant": "Wielofunkcyjny czat AI", "healthConsultantInfo": "Oferuje więcej funkcji czatu AI", "conferenceAssistant": "Asystent spotkań biznesowych", - "conferenceAssistantInfo": "Zapisywanie protokołów w czasie rzeczywistym, tłumaczenie wielojęzyczne", + "conferenceAssistantInfo": + "Zapisywanie protokołów w czasie rzeczywistym, tłumaczenie wielojęzyczne", "usageStats": "Statystyki użycia", "usageStatsInfo": "Przeglądaj statystyki użycia aplikacji", "scene": "Scenariusz", @@ -218,7 +230,8 @@ const Map plPL = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +287,10 @@ const Map plPL = { '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.', + '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', @@ -284,27 +299,35 @@ const Map plPL = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +336,10 @@ const Map plPL = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +354,8 @@ const Map plPL = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Pomiń", @@ -355,7 +381,8 @@ const Map plPL = { '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”', + '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', @@ -405,7 +432,8 @@ const Map plPL = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +488,54 @@ const Map plPL = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +547,8 @@ const Map plPL = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +568,8 @@ const Map plPL = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +618,8 @@ const Map plPL = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +644,8 @@ const Map plPL = { "cloudSync": "Płatność synchronizacji w chmurze", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Podłączone urządzenie:", "accountId": "ID konta:", "systemSetting": "Ustawienia systemowe", @@ -612,7 +658,8 @@ const Map plPL = { "privacySettings": "Ustawienia prywatności", "privacySettingsInfo": "Zarządzaj zbieraniem danych i uprawnieniami", "permissionManagement": "Zarządzanie uprawnieniami", // 权限管理 - "permissionManagementInfo": "Zarządzaj ustawieniami uprawnień aplikacji", // 管理应用权限设置 + "permissionManagementInfo": + "Zarządzaj ustawieniami uprawnień aplikacji", // 管理应用权限设置 "aboutApplication": "O aplikacji", "versions": "Wersja", "checkUpdates": "Sprawdź aktualizacje", @@ -621,9 +668,11 @@ const Map plPL = { "voiceServiceInfo": "Wybierz usługę rozpoznawania i syntezy mowy", "selectVoiceService": "Wybierz usługę głosową", "azureVoiceService": "Usługa głosowa Azure", - "azureVoiceServiceInfo": "Usługa głosowa w chmurze Microsoftu, obsługuje wysokiej jakości syntezę i rozpoznawanie mowy", + "azureVoiceServiceInfo": + "Usługa głosowa w chmurze Microsoftu, obsługuje wysokiej jakości syntezę i rozpoznawanie mowy", "flutterVoiceService": "Lokalna usługa głosowa Flutter", - "flutterVoiceServiceInfo": "Lokalna usługa głosowa urządzenia, można używać bez połączenia z internetem", + "flutterVoiceServiceInfo": + "Lokalna usługa głosowa urządzenia, można używać bez połączenia z internetem", 'timbreService': 'Usługa barwy głosu', 'timbreServiceInfo': 'Wybierz usługę syntezy mowy z barwą głosu', 'defaultTimbre': 'Domyślna barwa głosu', @@ -634,7 +683,8 @@ const Map plPL = { 'pleaseRead': 'Przeczytaj na głos', 'completeRecording': 'Zakończ nagrywanie', "firmwareUpgrade": "Aktualizacja oprogramowania układowego", - "bleHeadsetFirmwareUpgrade": "Aktualizacja wersji oprogramowania układowego słuchawek BLE", + "bleHeadsetFirmwareUpgrade": + "Aktualizacja wersji oprogramowania układowego słuchawek BLE", "deviceManagement": "Zarządzanie urządzeniami", "manageConnectedDevices": "Zarządzaj sparowanymi urządzeniami Bluetooth", @@ -652,7 +702,8 @@ const Map plPL = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Czat głosowy w czasie rzeczywistym", - "realtimeVoiceChatInfo": "Doświadcz funkcji inteligentnej interakcji głosowej (podgląd funkcji)", + "realtimeVoiceChatInfo": + "Doświadcz funkcji inteligentnej interakcji głosowej (podgląd funkcji)", "loading": "Ładowanie...", //设备管理页面 @@ -667,7 +718,8 @@ const Map plPL = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -695,7 +747,8 @@ const Map plPL = { "listeningToYou": "Słucham Cię...", "processing": "Przetwarzanie...", "loadMoreMessages": "Załaduj więcej wiadomości...", - "loadFailedClickRetry": "Ładowanie nie powiodło się, kliknij, aby spróbować ponownie", + "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", // 语音打断 @@ -721,12 +774,17 @@ const Map plPL = { '• Sterować funkcjami słuchawek\n\n' 'W czym mogę Ci pomóc?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': 'Funkcja rozpoznawania mowy wymaga dostępu do mikrofonu.', - 'voiceTranslationPermissionText': 'Funkcja rozpoznawania i tłumaczenia mowy wymaga dostępu do mikrofonu.', - 'phoneCallPermissionText': 'Funkcja dzwonienia wymaga dostępu do mikrofonu do rozmów głosowych.', - 'permissionDeniedText': 'Trwale odmówiłeś dostępu do mikrofonu, przejdź do ustawień systemowych, aby go włączyć.', + 'voiceRecognitionPermissionText': + 'Funkcja rozpoznawania mowy wymaga dostępu do mikrofonu.', + 'voiceTranslationPermissionText': + 'Funkcja rozpoznawania i tłumaczenia mowy wymaga dostępu do mikrofonu.', + 'phoneCallPermissionText': + 'Funkcja dzwonienia wymaga dostępu do mikrofonu do rozmów głosowych.', + 'permissionDeniedText': + 'Trwale odmówiłeś dostępu do mikrofonu, przejdź do ustawień systemowych, aby go włączyć.', 'startVoiceInput': 'Rozpocznij wprowadzanie głosowe', - 'startPhoneCallMode': 'Rozpocznij tryb dzwonienia, rozpocznij wprowadzanie głosowe', + 'startPhoneCallMode': + 'Rozpocznij tryb dzwonienia, rozpocznij wprowadzanie głosowe', // Agent 全屏编辑器 'fullScreenEditorHint': 'Wpisz swoją wiadomość tutaj...', // 全屏编辑器输入提示 @@ -738,16 +796,19 @@ const Map plPL = { 'report': 'Zgłoś', 'submitSuccess': 'Przesłano pomyślnie', 'submitFailed': 'Przesyłanie nie powiodło się', - 'reportSubmitted': 'Zgłoszenie zostało przesłane, zajmiemy się nim jak najszybciej', + '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', 'illegalCriminal': 'Niezgodne z prawem/Przestępcze', 'privacyRelated': 'Związane z prywatnością', - 'copyrightViolation': 'Naruszenie moich praw autorskich, dobrego imienia itp.', + 'copyrightViolation': + 'Naruszenie moich praw autorskich, dobrego imienia itp.', 'other': 'Inne', - 'reportDescriptionHint': 'Chcielibyśmy wiedzieć, dlaczego zgłaszasz, możesz opisać problem, z którym się spotkałeś.', + 'reportDescriptionHint': + 'Chcielibyśmy wiedzieć, dlaczego zgłaszasz, możesz opisać problem, z którym się spotkałeś.', //'submit': '提交', //Message_bubble @@ -778,15 +839,24 @@ const Map plPL = { 'highest': 'Najwyższa', 'lowest': 'Najniższa', 'futureForecast': 'Prognoza na przyszłość', - 'hotWeatherTip': 'Dzisiaj jest gorąco, uważaj na udar cieplny i pij dużo wody', - 'coldWeatherTip': 'Dzisiaj jest niska temperatura, ubierz się ciepło, wychodząc, aby się nie przeziębić', - 'rainyWeatherTip': 'Dzisiaj pada deszcz, weź ze sobą parasol, wychodząc, i uważaj na drodze', - 'snowyWeatherTip': 'Dzisiaj pada śnieg, droga jest śliska, uważaj i ubierz się ciepło', - 'foggyWeatherTip': 'Dzisiaj jest mgła, widoczność jest ograniczona, noś maseczkę, wychodząc', - 'windyWeatherTip': 'Dzisiaj wieje silny wiatr, uważaj, wychodząc, i zabezpiecz swoje rzeczy', - 'sunnyWeatherTip': 'Dzisiaj jest słonecznie i silne promieniowanie UV, używaj kremu z filtrem, wychodząc', - 'temperatureDifferenceTip': 'Dzisiaj jest duża różnica temperatur między dniem a nocą, dostosuj ubranie', - 'comfortableWeatherTip': 'Dzisiaj jest przyjemna pogoda, świetny czas na aktywności na świeżym powietrzu', + 'hotWeatherTip': + 'Dzisiaj jest gorąco, uważaj na udar cieplny i pij dużo wody', + 'coldWeatherTip': + 'Dzisiaj jest niska temperatura, ubierz się ciepło, wychodząc, aby się nie przeziębić', + 'rainyWeatherTip': + 'Dzisiaj pada deszcz, weź ze sobą parasol, wychodząc, i uważaj na drodze', + 'snowyWeatherTip': + 'Dzisiaj pada śnieg, droga jest śliska, uważaj i ubierz się ciepło', + 'foggyWeatherTip': + 'Dzisiaj jest mgła, widoczność jest ograniczona, noś maseczkę, wychodząc', + 'windyWeatherTip': + 'Dzisiaj wieje silny wiatr, uważaj, wychodząc, i zabezpiecz swoje rzeczy', + 'sunnyWeatherTip': + 'Dzisiaj jest słonecznie i silne promieniowanie UV, używaj kremu z filtrem, wychodząc', + 'temperatureDifferenceTip': + 'Dzisiaj jest duża różnica temperatur między dniem a nocą, dostosuj ubranie', + 'comfortableWeatherTip': + 'Dzisiaj jest przyjemna pogoda, świetny czas na aktywności na świeżym powietrzu', "monday": "Pon", "tuesday": "Wt", "wednesday": "Śr", @@ -838,22 +908,29 @@ const Map plPL = { "logout": "Wyloguj się", "logoutTips": "Czy na pewno chcesz wylogować się z obecnego konta?", 'deleteAccount': 'Usuń konto', - 'deleteAccountTips': 'Czy na pewno chcesz trwale usunąć swoje konto? Tej operacji nie można cofnąć.', + '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': 'Błąd połączenia sieciowego, sprawdź ustawienia sieci i spróbuj ponownie', - 'serverTemporarilyUnavailable': 'Serwer jest tymczasowo niedostępny, spróbuj ponownie później', + 'networkConnectionFailed': + 'Błąd połączenia sieciowego, sprawdź ustawienia sieci i spróbuj ponownie', + 'serverTemporarilyUnavailable': + 'Serwer jest tymczasowo niedostępny, spróbuj ponownie później', 'loginExpiredPleaseRelogin': 'Twoja sesja wygasła, zaloguj się ponownie', - 'noPermissionForThisOperation': 'Nie masz uprawnień do wykonania tej operacji', + 'noPermissionForThisOperation': + 'Nie masz uprawnień do wykonania tej operacji', 'requestedResourceNotFound': 'Żądany zasób nie został znaleziony', - 'imageProcessingFailedPleaseReselect': 'Przetwarzanie obrazu nie powiodło się, wybierz inny obraz', + 'imageProcessingFailedPleaseReselect': + 'Przetwarzanie obrazu nie powiodło się, wybierz inny obraz', 'operationFailedPleaseRetry': 'Operacja nie powiodła się, spróbuj ponownie', 'serverReturnedError': 'Serwer zwrócił błąd', 'serverError': 'Błąd serwera', - 'networkConnectionFailedCheckSettings': 'Błąd połączenia sieciowego, sprawdź ustawienia sieci', - 'serverInternalErrorRetryLater': 'Wewnętrzny błąd serwera, spróbuj ponownie później', + 'networkConnectionFailedCheckSettings': + 'Błąd połączenia sieciowego, sprawdź ustawienia sieci', + 'serverInternalErrorRetryLater': + 'Wewnętrzny błąd serwera, spróbuj ponownie później', // Profile 用户交互 //'error': '错误', @@ -867,18 +944,27 @@ const Map plPL = { 'loggedOut': 'Wylogowano', 'logoutFailedRetry': 'Wylogowanie nie powiodło się, spróbuj ponownie', 'accountPermanentlyDeleted': 'Konto zostało trwale usunięte', - 'deleteAccountFailedRetry': 'Usuwanie konta nie powiodło się, spróbuj ponownie', + 'deleteAccountFailedRetry': + '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ę', // 第三方登录退出失败 + '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', // AccountService 已初始化 + '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', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Pobranie stanu uprawnień nie powiodło się', @@ -901,10 +987,14 @@ const Map plPL = { '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': 'Używane do odczytu i zarządzania wydarzeniami i przypomnieniami w kalendarzu', - 'locationPermissionDesc': 'Używane do uzyskiwania informacji o bieżącej lokalizacji', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Używane do tworzenia wydarzeń i przypomnień w kalendarzu', + 'calendarFullAccessPermissionDesc': + 'Używane do odczytu i zarządzania wydarzeniami i przypomnieniami w kalendarzu', + 'locationPermissionDesc': + 'Używane do uzyskiwania informacji o bieżącej lokalizacji', 'appFunctionNeeds': 'Funkcja aplikacji wymaga', 'authorized': 'Autoryzowano', 'unauthorized': 'Nieautoryzowano', @@ -913,45 +1003,70 @@ const Map plPL = { 'unknownStatus': 'Nieznany stan', 'permissionGranted': 'Uprawnienie przyznane', 'permissionRequestError': 'Błąd podczas żądania uprawnienia', - 'phonePermissionDetailDesc': 'Funkcja dzwonienia wymaga uprawnień telefonicznych', + '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', + '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', + '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', + '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', + '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ć', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1076,8 @@ const Map plPL = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1086,10 @@ const Map plPL = { '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ć', // 无法打开应用商店提示 - 'updateErrorRetry': 'Wystąpił błąd podczas aktualizacji, spróbuj ponownie później', // 更新错误重试提示 + 'cannotOpenAppStore': + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -1107,7 +1225,8 @@ const Map plPL = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1242,12 @@ const Map plPL = { "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ąć.", + "clearHistoryConfirm": + "Czy na pewno chcesz wyczyścić całą historię tłumaczeń? Tej operacji nie można cofnąć.", "unknownLanguage": "Nieznany język", "deleteSessionRecord": "Usuń zapis sesji", - "deleteSessionConfirm": "Czy na pewno chcesz usunąć wszystkie zapisy tłumaczeń dla tej sesji? Tej operacji nie można cofnąć.", + "deleteSessionConfirm": + "Czy na pewno chcesz usunąć wszystkie zapisy tłumaczeń dla tej sesji? Tej operacji nie można cofnąć.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1279,20 @@ const Map plPL = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1315,8 @@ const Map plPL = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Oryginalny zapis", "recordSummary": "Podsumowanie zapisu", - "clickToGenerateSummary": "Kliknij przycisk poniżej, aby wygenerować podsumowanie sesji", + "clickToGenerateSummary": + "Kliknij przycisk poniżej, aby wygenerować podsumowanie sesji", "summaryContent": "Treść podsumowania", "copied": "Skopiowano", "summaryCopiledToClipboard": "Podsumowanie skopiowano do schowka", @@ -1197,9 +1324,11 @@ const Map plPL = { "summaryGenerated": "Wygenerowano podsumowanie", "generating": "Generowanie...", "regenerate": "Wygeneruj ponownie", - "summaryTimeoutMessage": "Przekroczono czas oczekiwania na żądanie wygenerowania podsumowania, może to być spowodowane problemami z siecią lub zajętym serwerem.", + "summaryTimeoutMessage": + "Przekroczono czas oczekiwania na żądanie wygenerowania podsumowania, może to być spowodowane problemami z siecią lub zajętym serwerem.", "deleteTranslationRecord": "Usuń zapis tłumaczenia", - "deleteTranslationConfirm": "Czy na pewno chcesz usunąć ten zapis tłumaczenia? Tej operacji nie można cofnąć.", + "deleteTranslationConfirm": + "Czy na pewno chcesz usunąć ten zapis tłumaczenia? Tej operacji nie można cofnąć.", "originalText": "Tekst oryginalny", "translatedText": "Tekst przetłumaczony", "sessionSummary": "Podsumowanie sesji", @@ -1227,19 +1356,26 @@ const Map plPL = { // 配对状态文本 "readyToPair": "Gotowy do parowania", "preparingPairingEnvironment": "Przygotowywanie środowiska do parowania...", - "connectDeepSoundViaSystemBluetooth": "Najpierw połącz się z urządzeniem Voitrans przez systemowy Bluetooth", + "connectDeepSoundViaSystemBluetooth": + "Najpierw połącz się z urządzeniem Voitrans przez systemowy Bluetooth", "deviceBindingConfirm": "Potwierdzenie powiązania urządzenia...", "establishingDeviceAssociation": "Ustanawianie skojarzenia urządzenia...", "waitingCompletePairing": "Poczekaj, kończenie parowania...", - "pairingSuccessRedirecting": "Parowanie zakończone sukcesem! Przekierowywanie na stronę główną...", + "pairingSuccessRedirecting": + "Parowanie zakończone sukcesem! Przekierowywanie na stronę główną...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Upewnij się, że jesteś połączony z urządzeniem Voitrans", - "deviceAlreadyBoundToOtherAccount": "To urządzenie jest już powiązane z innym kontem", - "deviceAssociationFailed": "Skojarzenie urządzenia nie powiodło się, spróbuj ponownie", - "scanTimeoutEnsureDeviceNearby": "Przekroczono czas skanowania, upewnij się, że urządzenie jest w pobliżu", + "ensureConnectedDeepSoundDevice": + "Upewnij się, że jesteś połączony z urządzeniem Voitrans", + "deviceAlreadyBoundToOtherAccount": + "To urządzenie jest już powiązane z innym kontem", + "deviceAssociationFailed": + "Skojarzenie urządzenia nie powiodło się, spróbuj ponownie", + "scanTimeoutEnsureDeviceNearby": + "Przekroczono czas skanowania, upewnij się, że urządzenie jest w pobliżu", "networkError": "Błąd sieci", - "authorizationFailedCheckCode": "Autoryzacja nie powiodła się, sprawdź, czy kod autoryzacji jest poprawny", + "authorizationFailedCheckCode": + "Autoryzacja nie powiodła się, sprawdź, czy kod autoryzacji jest poprawny", "pairingFailedRetry": "Parowanie nie powiodło się, spróbuj ponownie", // 配对控制器相关 @@ -1248,13 +1384,15 @@ const Map plPL = { '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', + '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...', + 'needManualBindingAuthCode': + 'Wymagany jest kod autoryzacji do ręcznego powiązania...', 'pairingSuccessful': 'Parowanie zakończone sukcesem!', 'enableBluetooth': 'Włącz Bluetooth', 'grantPermissions': 'Udziel uprawnień', @@ -1266,19 +1404,26 @@ const Map plPL = { 'verificationFailedRetry': 'Weryfikacja nie powiodła się, spróbuj ponownie', 'invalidDeviceAddress': 'Nieprawidłowy adres urządzenia', 'bleDeviceAssociationFailed': 'Skojarzenie urządzenia BLE nie powiodło się', - 'deviceAssociationFailedRetry': 'Skojarzenie urządzenia nie powiodło się, spróbuj ponownie', - 'bleConnectionTimeoutRetry': 'Przekroczono czas oczekiwania na połączenie BLE, spróbuj ponownie', + 'deviceAssociationFailedRetry': + 'Skojarzenie urządzenia nie powiodło się, spróbuj ponownie', + 'bleConnectionTimeoutRetry': + 'Przekroczono czas oczekiwania na połączenie BLE, spróbuj ponownie', 'blePairingStartupFailed': 'Uruchomienie parowania BLE nie powiodło się', 'bleConnectionFailed': 'Połączenie BLE nie powiodło się', - 'deviceAuthorizationFailedCheckCode': 'Autoryzacja urządzenia nie powiodła się, sprawdź kod autoryzacji', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', // 我知道了 //用户反馈页 @@ -1290,11 +1435,14 @@ const Map plPL = { 'contactInfo': 'Dane kontaktowe', 'contactHint': 'E-mail/Telefon, abyśmy mogli się z Tobą skontaktować', 'submit': 'Prześlij', - 'feedbackSubmitSuccess': 'Opinia przesłana pomyślnie, dziękujemy za Twoją opinię!', - 'feedbackSubmitFailed': 'Przesyłanie opinii nie powiodło się, spróbuj ponownie później', + 'feedbackSubmitSuccess': + 'Opinia przesłana pomyślnie, dziękujemy za Twoją opinię!', + 'feedbackSubmitFailed': + 'Przesyłanie opinii nie powiodło się, spróbuj ponownie później', // OTA升级模块 - "upgradeExitConfirm": "Trwa aktualizacja, wyjście przerwie proces, czy na pewno chcesz wyjść?", + "upgradeExitConfirm": + "Trwa aktualizacja, wyjście przerwie proces, czy na pewno chcesz wyjść?", "deviceModel": "Model urządzenia", "unknownDevice": "Nieznane urządzenie", "currentFirmwareVersion": "Bieżąca wersja oprogramowania układowego", @@ -1307,14 +1455,19 @@ const Map plPL = { "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", + "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", "charging": "Ładowanie", "updateContent": "Treść aktualizacji", - "removeEarbudsEnsureBattery": "Wyjmij obie słuchawki i upewnij się, że poziom naładowania baterii obu wynosi ponad 20%", + "removeEarbudsEnsureBattery": + "Wyjmij obie słuchawki i upewnij się, że poziom naładowania baterii obu wynosi ponad 20%", // 音乐列表页面 "noMusic": "Brak muzyki", // 暂无音乐 @@ -1376,8 +1529,10 @@ const Map plPL = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 7a70308cc..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", @@ -71,7 +72,8 @@ const Map ptPT = { // 登录页 "welcome": "Bem-vindo", - "loginTips": "Faça login ou registe-se com o seu número de telemóvel ou e-mail", + "loginTips": + "Faça login ou registe-se com o seu número de telemóvel ou e-mail", "accountNumber": "Número de Telemóvel ou E-mail", "verificationCode": "Código de Verificação", "getCode": "Obter Código", @@ -90,7 +92,8 @@ const Map ptPT = { "tip": "Dica", "pleaseEnterCompleteCode": "Introduza o código de verificação completo", "loginFailed": "Falha no login, tente novamente", - 'pleaseAcceptPrivacyPolicy': 'Por favor, leia e aceite primeiro a Política de Privacidade e o Contrato do Utilizador', + 'pleaseAcceptPrivacyPolicy': + 'Por favor, leia e aceite primeiro a Política de Privacidade e o Contrato do Utilizador', "enterVerificationCode": "Introduza o Código de Verificação", "verificationCodeSentTo": "Código de verificação enviado para", "resendVerificationCode": "Reenviar código de verificação", @@ -99,7 +102,8 @@ const Map ptPT = { // 隐私政策弹窗 "loginDeclaration": "Declaração Voitrans", // Voitrans 声明 - "welcomeToThisApp": "Bem-vindo à Voitrans, por favor, leia atentamente", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Bem-vindo à Voitrans, por favor, leia atentamente", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +119,30 @@ const Map ptPT = { "signal": "Sinal", "deviceId": "ID do Dispositivo", "firmwareVersion": "Versão do Firmware", - "disconnectedDevice": "Nenhum dispositivo conectado, clique no botão abaixo para conectar", + "disconnectedDevice": + "Nenhum dispositivo conectado, clique no botão abaixo para conectar", "connectDevice": "Conectar Dispositivo", "topAiExperiences": "Melhores Experiências de IA", "aiAssistant": "Assistente IA Completo", - "aiAssistantInfo": "Consultor exclusivo 24/7, responde a perguntas, dá sugestões", + "aiAssistantInfo": + "Consultor exclusivo 24/7, responde a perguntas, dá sugestões", "interpretation": "Interpretação Simultânea", - "simultaneousInterpretationInfo": "Tradução em tempo real para mais de 80 idiomas, viagens ao estrangeiro sem preocupações", + "simultaneousInterpretationInfo": + "Tradução em tempo real para mais de 80 idiomas, viagens ao estrangeiro sem preocupações", "aiCompanion": "Companheiro Familiar", "aiCompanionInfo": "Entende-o, companhia calorosa", "homeSlogan": "Conectando o mundo, transcendendo o som", - "turnEarphones": "Por favor, abra a caixa de carregamento dos auriculares e coloque os auriculares nos seus ouvidos", + "turnEarphones": + "Por favor, abra a caixa de carregamento dos auriculares e coloque os auriculares nos seus ouvidos", "currentlyConnected": "Atualmente conectado:", "unsystemSetup": "Ir para as definições do sistema", "talkLater": "Mais Tarde", "initializing": "A inicializar...", - "bluetoothInitializationFailure": "Falha na inicialização do serviço Bluetooth", + "bluetoothInitializationFailure": + "Falha na inicialização do serviço Bluetooth", "checkingPermissions": "A verificar permissões...", - "lackPermissions": "Faltam permissões de Bluetooth e é necessário permitir o acesso à localização", + "lackPermissions": + "Faltam permissões de Bluetooth e é necessário permitir o acesso à localização", "searchingDevice": "A procurar dispositivos...", "findConnectedDevice": "Dispositivo conectado encontrado", "notFound": "Nenhum dispositivo Bluetooth conectado encontrado", @@ -140,14 +150,16 @@ const Map ptPT = { "connectedDevice": "Conectado ao dispositivo:", "failedRefreshDevice": "Falha ao atualizar o dispositivo", "noDeviceFound": "Nenhum dispositivo conectado encontrado", - "failedDeviceInformation": "Não foi possível obter informações do dispositivo", + "failedDeviceInformation": + "Não foi possível obter informações do dispositivo", "unknownEquipment": "Equipamento Desconhecido", "zeroSignal": "Sem Sinal", "good": "Bom", "fine": "Muito Bom", "excellent": "Excelente", "unknown": "Desconhecido", - 'bluetoothTurnedOff': 'O Bluetooth está desligado, por favor, ligue o Bluetooth', + 'bluetoothTurnedOff': + 'O Bluetooth está desligado, por favor, ligue o Bluetooth', 'bluetoothOff': 'Bluetooth Desligado', 'leftEar': 'Auricular Esquerdo', 'rightEar': 'Auricular Direito', @@ -169,13 +181,15 @@ const Map ptPT = { "faceToFaceTranslation": "Tradução Cara a Cara", 'audioVideoTranslation': 'Tradução de Áudio e Vídeo', 'callTranslation': 'Tradução de Chamadas', - "simultaneousTranslationInfo": "Tradução em tempo real para mais de 80 idiomas", + "simultaneousTranslationInfo": + "Tradução em tempo real para mais de 80 idiomas", "aiGirlfriend": "Namorada IA", "aiGirlfriendInfo": "Companhia inteligente, converse a qualquer momento", "healthConsultant": "Chat IA Multifuncional", "healthConsultantInfo": "Oferece mais funções de chat IA", "conferenceAssistant": "Assistente de Reunião de Negócios", - "conferenceAssistantInfo": "Gravação de atas em tempo real, tradução multilingue", + "conferenceAssistantInfo": + "Gravação de atas em tempo real, tradução multilingue", "usageStats": "Estatísticas de Uso", "usageStatsInfo": "Visualize as estatísticas de uso da sua aplicação", "scene": "Cenário", @@ -218,7 +232,8 @@ const Map ptPT = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +289,10 @@ const Map ptPT = { 'copyrightVoitrans': '© 2025 Voitrans Technologies', // 会议商品页描述 - 'meetingHeaderDesc1': 'Audio recording, transcription, keyword search, and auto summary.', - 'meetingHeaderDesc2': 'Suitable for business meetings, class notes, and interview minutes.', + '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', @@ -284,27 +301,36 @@ const Map ptPT = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + '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.', + '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', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +339,10 @@ const Map ptPT = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Visão geral de benefícios', @@ -329,7 +357,8 @@ const Map ptPT = { '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.', + 'vipDisclaimer': + 'Os benefícios reais dependem dos detalhes do pacote e podem mudar entre versões.', // 新手引导 / Onboarding 'skip': "Saltar", @@ -355,7 +384,8 @@ const Map ptPT = { '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”", + '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", @@ -405,7 +435,8 @@ const Map ptPT = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +491,54 @@ const Map ptPT = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +550,8 @@ const Map ptPT = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +571,8 @@ const Map ptPT = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +621,8 @@ const Map ptPT = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +647,8 @@ const Map ptPT = { "cloudSync": "Recarga de Sincronização em Nuvem", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Dispositivo conectado:", "accountId": "ID da Conta:", "systemSetting": "Definição do Sistema", @@ -607,12 +656,14 @@ const Map ptPT = { "darkMode": "Modo Escuro", "darkModeInfo": "Alternar entre os temas claro e escuro da aplicação", "backups": "Cópia de Segurança e Restauro", - "backupsInfo": "Cópia de segurança das definições e histórico de interação com IA", + "backupsInfo": + "Cópia de segurança das definições e histórico de interação com IA", "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", // 管理应用权限设置 + "permissionManagementInfo": + "Gerir as definições de permissão da aplicação", // 管理应用权限设置 "aboutApplication": "Sobre a Aplicação", "versions": "Versão", "checkUpdates": "Verificar Atualizações", @@ -621,9 +672,11 @@ const Map ptPT = { "voiceServiceInfo": "Selecionar serviço de reconhecimento e síntese de voz", "selectVoiceService": "Selecionar Serviço de Voz", "azureVoiceService": "Serviço de Voz Azure", - "azureVoiceServiceInfo": "Serviço de voz na nuvem da Microsoft, suporta síntese e reconhecimento de voz de alta qualidade", + "azureVoiceServiceInfo": + "Serviço de voz na nuvem da Microsoft, suporta síntese e reconhecimento de voz de alta qualidade", "flutterVoiceService": "Serviço de Voz Local Flutter", - "flutterVoiceServiceInfo": "Serviço de voz local do dispositivo, pode ser usado sem ligação à internet", + "flutterVoiceServiceInfo": + "Serviço de voz local do dispositivo, pode ser usado sem ligação à internet", 'timbreService': 'Serviço de Timbre', 'timbreServiceInfo': 'Selecionar serviço de síntese de voz com timbre', 'defaultTimbre': 'Timbre Padrão', @@ -634,7 +687,8 @@ const Map ptPT = { 'pleaseRead': 'Leia em voz alta', 'completeRecording': 'Concluir Gravação', "firmwareUpgrade": "Atualização de Firmware", - "bleHeadsetFirmwareUpgrade": "Atualização da Versão do Firmware dos Auriculares BLE", + "bleHeadsetFirmwareUpgrade": + "Atualização da Versão do Firmware dos Auriculares BLE", "deviceManagement": "Gestão de Dispositivos", "manageConnectedDevices": "Gerir dispositivos Bluetooth emparelhados", @@ -652,7 +706,8 @@ const Map ptPT = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Chat de Voz em Tempo Real", - "realtimeVoiceChatInfo": "Experimente a função de interação de voz inteligente (pré-visualização da função)", + "realtimeVoiceChatInfo": + "Experimente a função de interação de voz inteligente (pré-visualização da função)", "loading": "A carregar...", //设备管理页面 @@ -667,7 +722,8 @@ const Map ptPT = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -678,7 +734,8 @@ const Map ptPT = { "inputMessage": "Introduzir mensagem...", "imListening": "A ouvir...", "canStartTalking": "Pode começar a falar", - "addQuestionAboutImage": "Adicione uma pergunta ou descrição sobre a imagem...", + "addQuestionAboutImage": + "Adicione uma pergunta ou descrição sobre a imagem...", "summarizeImageContent": "Resumir conteúdo da imagem", "extractImageText": "Extrair texto da imagem", "translateImageText": "Traduzir texto na imagem", @@ -721,10 +778,14 @@ const Map ptPT = { '• Controlar as funções dos auriculares\n\n' 'Em que posso ajudá-lo(a)?', 'microphonePermission': 'Microfone', - 'voiceRecognitionPermissionText': 'O reconhecimento de voz requer acesso ao microfone.', - 'voiceTranslationPermissionText': 'O reconhecimento e tradução de voz requerem acesso ao microfone.', - 'phoneCallPermissionText': 'Fazer chamadas requer acesso ao microfone para chamadas de voz.', - 'permissionDeniedText': 'Negou permanentemente a permissão do microfone, por favor, vá às definições do sistema para a ativar.', + 'voiceRecognitionPermissionText': + 'O reconhecimento de voz requer acesso ao microfone.', + 'voiceTranslationPermissionText': + 'O reconhecimento e tradução de voz requerem acesso ao microfone.', + 'phoneCallPermissionText': + 'Fazer chamadas requer acesso ao microfone para chamadas de voz.', + 'permissionDeniedText': + 'Negou permanentemente a permissão do microfone, por favor, vá às definições do sistema para a ativar.', 'startVoiceInput': 'Iniciar entrada de voz', 'startPhoneCallMode': 'Iniciar modo de chamada, iniciar entrada de voz', @@ -747,7 +808,8 @@ const Map ptPT = { 'privacyRelated': 'Relacionado com a Privacidade', 'copyrightViolation': 'Violação dos meus direitos de autor, reputação, etc.', 'other': 'Outro', - 'reportDescriptionHint': 'Gostaríamos de saber o motivo da sua denúncia, pode descrever o problema que encontrou.', + 'reportDescriptionHint': + 'Gostaríamos de saber o motivo da sua denúncia, pode descrever o problema que encontrou.', //'submit': '提交', //Message_bubble @@ -778,15 +840,24 @@ const Map ptPT = { 'highest': 'Máxima', 'lowest': 'Mínima', 'futureForecast': 'Previsão Futura', - 'hotWeatherTip': 'Hoje está calor, por favor, tenha cuidado com o golpe de calor e beba muita água', - 'coldWeatherTip': 'Hoje a temperatura está baixa, por favor, agasalhe-se bem ao sair para evitar constipações', - 'rainyWeatherTip': 'Hoje vai chover, por favor, leve um guarda-chuva ao sair e tenha cuidado', - 'snowyWeatherTip': 'Hoje vai nevar, o piso está escorregadio, por favor, tenha cuidado e agasalhe-se bem', - 'foggyWeatherTip': 'Hoje há nevoeiro, a visibilidade é reduzida, por favor, use uma máscara ao sair', - 'windyWeatherTip': 'Hoje o vento está forte, por favor, tenha cuidado ao sair e prenda bem os seus pertences', - 'sunnyWeatherTip': 'Hoje o sol está forte e os raios UV são intensos, por favor, use protetor solar ao sair', - 'temperatureDifferenceTip': 'Hoje há uma grande diferença de temperatura entre o dia e a noite, por favor, ajuste a sua roupa', - 'comfortableWeatherTip': 'Hoje o tempo está agradável, é uma ótima altura para atividades ao ar livre', + 'hotWeatherTip': + 'Hoje está calor, por favor, tenha cuidado com o golpe de calor e beba muita água', + 'coldWeatherTip': + 'Hoje a temperatura está baixa, por favor, agasalhe-se bem ao sair para evitar constipações', + 'rainyWeatherTip': + 'Hoje vai chover, por favor, leve um guarda-chuva ao sair e tenha cuidado', + 'snowyWeatherTip': + 'Hoje vai nevar, o piso está escorregadio, por favor, tenha cuidado e agasalhe-se bem', + 'foggyWeatherTip': + 'Hoje há nevoeiro, a visibilidade é reduzida, por favor, use uma máscara ao sair', + 'windyWeatherTip': + 'Hoje o vento está forte, por favor, tenha cuidado ao sair e prenda bem os seus pertences', + 'sunnyWeatherTip': + 'Hoje o sol está forte e os raios UV são intensos, por favor, use protetor solar ao sair', + 'temperatureDifferenceTip': + 'Hoje há uma grande diferença de temperatura entre o dia e a noite, por favor, ajuste a sua roupa', + 'comfortableWeatherTip': + 'Hoje o tempo está agradável, é uma ótima altura para atividades ao ar livre', "monday": "Seg", "tuesday": "Ter", "wednesday": "Qua", @@ -838,22 +909,30 @@ const Map ptPT = { "logout": "Terminar Sessão", "logoutTips": "Tem a certeza que quer terminar a sessão da conta atual?", 'deleteAccount': 'Eliminar Conta', - 'deleteAccountTips': 'Tem a certeza que quer eliminar permanentemente a sua conta? Esta ação não pode ser revertida.', + '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': 'Falha na ligação à rede, verifique as definições de rede e tente novamente', - 'serverTemporarilyUnavailable': 'O servidor está temporariamente indisponível, tente novamente mais tarde', - 'loginExpiredPleaseRelogin': 'A sua sessão expirou, por favor, inicie sessão novamente', - 'noPermissionForThisOperation': 'Não tem permissão para realizar esta operação', + 'networkConnectionFailed': + 'Falha na ligação à rede, verifique as definições de rede e tente novamente', + 'serverTemporarilyUnavailable': + 'O servidor está temporariamente indisponível, tente novamente mais tarde', + 'loginExpiredPleaseRelogin': + 'A sua sessão expirou, por favor, inicie sessão novamente', + 'noPermissionForThisOperation': + 'Não tem permissão para realizar esta operação', 'requestedResourceNotFound': 'O recurso solicitado não foi encontrado', - 'imageProcessingFailedPleaseReselect': 'Falha no processamento da imagem, por favor, selecione outra imagem', + 'imageProcessingFailedPleaseReselect': + 'Falha no processamento da imagem, por favor, selecione outra imagem', 'operationFailedPleaseRetry': 'Operação falhou, tente novamente', 'serverReturnedError': 'O servidor retornou um erro', 'serverError': 'Erro do Servidor', - 'networkConnectionFailedCheckSettings': 'Falha na ligação à rede, verifique as definições de rede', - 'serverInternalErrorRetryLater': 'Erro interno do servidor, tente novamente mais tarde', + 'networkConnectionFailedCheckSettings': + 'Falha na ligação à rede, verifique as definições de rede', + 'serverInternalErrorRetryLater': + 'Erro interno do servidor, tente novamente mais tarde', // Profile 用户交互 //'error': '错误', @@ -871,14 +950,21 @@ const Map ptPT = { // 账号服务相关 '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', // 登出过程发生错误 - 'deleteAccountProcessError': 'Ocorreu um erro durante o processo de eliminação da conta', // 删除账号过程发生错误 + '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', // 登出过程发生错误 + 'deleteAccountProcessError': + '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', // AccountService 已初始化 + 'allUserDataClearSuccess': + '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', @@ -901,57 +987,86 @@ const Map ptPT = { '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': 'Usado para ler e gerir eventos e lembretes do calendário', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Usado para criar eventos e lembretes no calendário', + 'calendarFullAccessPermissionDesc': + 'Usado para ler e gerir eventos e lembretes do calendário', 'locationPermissionDesc': 'Usado para obter informações da localização atual', 'appFunctionNeeds': 'A função da aplicação precisa', 'authorized': 'Autorizado', 'unauthorized': 'Não Autorizado', - 'needOpenInSystemSettings': 'Precisa de ser ativado nas definições do sistema', + 'needOpenInSystemSettings': + 'Precisa de ser ativado nas definições do sistema', 'partialAuthorization': 'Autorização Parcial', 'unknownStatus': 'Estado Desconhecido', 'permissionGranted': 'Permissão concedida', 'permissionRequestError': 'Erro ao solicitar permissão', - 'phonePermissionDetailDesc': 'A função de chamada requer permissão de telefone', + '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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1076,8 @@ const Map ptPT = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1086,10 @@ const Map ptPT = { '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', // 无法打开应用商店提示 - 'updateErrorRetry': 'Ocorreu um erro durante a atualização, por favor, tente novamente mais tarde', // 更新错误重试提示 + 'cannotOpenAppStore': + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -1107,7 +1225,8 @@ const Map ptPT = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1242,12 @@ const Map ptPT = { "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.", + "clearHistoryConfirm": + "Tem a certeza que quer limpar todo o histórico de traduções? Esta ação não pode ser revertida.", "unknownLanguage": "Idioma Desconhecido", "deleteSessionRecord": "Eliminar Registo da Sessão", - "deleteSessionConfirm": "Tem a certeza que quer eliminar todos os registos de tradução desta sessão? Esta ação não pode ser revertida.", + "deleteSessionConfirm": + "Tem a certeza que quer eliminar todos os registos de tradução desta sessão? Esta ação não pode ser revertida.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1279,20 @@ const Map ptPT = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1315,8 @@ const Map ptPT = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Registo Original", "recordSummary": "Resumo do Registo", - "clickToGenerateSummary": "Clique no botão abaixo para gerar um resumo da sessão", + "clickToGenerateSummary": + "Clique no botão abaixo para gerar um resumo da sessão", "summaryContent": "Conteúdo do Resumo", "copied": "Copiado", "summaryCopiledToClipboard": "Resumo copiado para a área de transferência", @@ -1197,9 +1324,11 @@ const Map ptPT = { "summaryGenerated": "Resumo gerado", "generating": "A gerar...", "regenerate": "Regenerar", - "summaryTimeoutMessage": "O pedido de geração de resumo expirou, pode ser devido a problemas de rede ou servidor ocupado.", + "summaryTimeoutMessage": + "O pedido de geração de resumo expirou, pode ser devido a problemas de rede ou servidor ocupado.", "deleteTranslationRecord": "Eliminar Registo de Tradução", - "deleteTranslationConfirm": "Tem a certeza que quer eliminar este registo de tradução? Esta ação não pode ser revertida.", + "deleteTranslationConfirm": + "Tem a certeza que quer eliminar este registo de tradução? Esta ação não pode ser revertida.", "originalText": "Texto Original", "translatedText": "Texto Traduzido", "sessionSummary": "Resumo da Sessão", @@ -1227,19 +1356,26 @@ const Map ptPT = { // 配对状态文本 "readyToPair": "Pronto para emparelhar", "preparingPairingEnvironment": "A preparar ambiente de emparelhamento...", - "connectDeepSoundViaSystemBluetooth": "Por favor, conecte-se primeiro ao dispositivo Voitrans através do Bluetooth do sistema", + "connectDeepSoundViaSystemBluetooth": + "Por favor, conecte-se primeiro ao dispositivo Voitrans através do Bluetooth do sistema", "deviceBindingConfirm": "Confirmação de vinculação do dispositivo...", "establishingDeviceAssociation": "A estabelecer associação do dispositivo...", "waitingCompletePairing": "Aguarde, a concluir o emparelhamento...", - "pairingSuccessRedirecting": "Emparelhamento bem-sucedido! A redirecionar para a página inicial...", + "pairingSuccessRedirecting": + "Emparelhamento bem-sucedido! A redirecionar para a página inicial...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Certifique-se de que está conectado a um dispositivo Voitrans", - "deviceAlreadyBoundToOtherAccount": "Este dispositivo já está vinculado a outra conta", - "deviceAssociationFailed": "Falha na associação do dispositivo, tente novamente", - "scanTimeoutEnsureDeviceNearby": "Tempo de digitalização esgotado, certifique-se de que o dispositivo está por perto", + "ensureConnectedDeepSoundDevice": + "Certifique-se de que está conectado a um dispositivo Voitrans", + "deviceAlreadyBoundToOtherAccount": + "Este dispositivo já está vinculado a outra conta", + "deviceAssociationFailed": + "Falha na associação do dispositivo, tente novamente", + "scanTimeoutEnsureDeviceNearby": + "Tempo de digitalização esgotado, certifique-se de que o dispositivo está por perto", "networkError": "Erro de Rede", - "authorizationFailedCheckCode": "Falha na autorização, verifique se o código de autorização está correto", + "authorizationFailedCheckCode": + "Falha na autorização, verifique se o código de autorização está correto", "pairingFailedRetry": "Falha no emparelhamento, tente novamente", // 配对控制器相关 @@ -1248,37 +1384,46 @@ const Map ptPT = { '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', + '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...', + 'needManualBindingAuthCode': + 'É necessário um código de autorização de vinculação manual...', 'pairingSuccessful': 'Emparelhamento bem-sucedido!', 'enableBluetooth': 'Ativar Bluetooth', 'grantPermissions': 'Conceder Permissões', 'retryAssociation': 'Tentar Associação Novamente', 'retryAuthorization': 'Tentar Autorização Novamente', - 'pleaseGrantNecessaryPermissions': 'Por favor, conceda as permissões necessárias', + 'pleaseGrantNecessaryPermissions': + 'Por favor, conceda as permissões necessárias', 'checkFailedRetry': 'Verificação falhou, tente novamente', 'pleaseConnectDeepSoundDevice': 'Por favor, conecte um dispositivo Voitrans', 'verificationFailedRetry': 'Verificação falhou, tente novamente', 'invalidDeviceAddress': 'Endereço de dispositivo inválido', 'bleDeviceAssociationFailed': 'Falha na associação do dispositivo BLE', - 'deviceAssociationFailedRetry': 'Falha na associação do dispositivo, tente novamente', + 'deviceAssociationFailedRetry': + 'Falha na associação do dispositivo, tente novamente', 'bleConnectionTimeoutRetry': 'Tempo de conexão BLE esgotado, tente novamente', 'blePairingStartupFailed': 'Falha no início do emparelhamento BLE', 'bleConnectionFailed': 'Falha na conexão BLE', - 'deviceAuthorizationFailedCheckCode': 'Falha na autorização do dispositivo, verifique o código de autorização', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', // 我知道了 //用户反馈页 @@ -1290,11 +1435,14 @@ const Map ptPT = { 'contactInfo': 'Informações de Contacto', 'contactHint': 'E-mail/Telemóvel, para que o possamos contactar', 'submit': 'Enviar', - 'feedbackSubmitSuccess': 'Feedback enviado com sucesso, obrigado pelo seu feedback!', - 'feedbackSubmitFailed': 'Falha ao enviar o feedback, tente novamente mais tarde', + 'feedbackSubmitSuccess': + 'Feedback enviado com sucesso, obrigado pelo seu feedback!', + 'feedbackSubmitFailed': + 'Falha ao enviar o feedback, tente novamente mais tarde', // OTA升级模块 - "upgradeExitConfirm": "Atualização em andamento, sair irá interromper o processo, tem a certeza que quer sair?", + "upgradeExitConfirm": + "Atualização em andamento, sair irá interromper o processo, tem a certeza que quer sair?", "deviceModel": "Modelo do Dispositivo", "unknownDevice": "Dispositivo Desconhecido", "currentFirmwareVersion": "Versão Atual do Firmware", @@ -1307,14 +1455,19 @@ const Map ptPT = { "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", + "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", "charging": "A carregar", "updateContent": "Conteúdo da Atualização", - "removeEarbudsEnsureBattery": "Retire ambos os auriculares e certifique-se de que a bateria de ambos está acima de 20%", + "removeEarbudsEnsureBattery": + "Retire ambos os auriculares e certifique-se de que a bateria de ambos está acima de 20%", // 音乐列表页面 "noMusic": "Sem Música", // 暂无音乐 @@ -1376,8 +1529,10 @@ const Map ptPT = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 458244596..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ă", @@ -71,7 +72,8 @@ const Map roRO = { // 登录页 "welcome": "Bun venit", - "loginTips": "Autentificați-vă sau înregistrați-vă cu numărul de telefon sau e-mail", + "loginTips": + "Autentificați-vă sau înregistrați-vă cu numărul de telefon sau e-mail", "accountNumber": "Număr de telefon sau e-mail", "verificationCode": "Cod de verificare", "getCode": "Obține codul", @@ -90,7 +92,8 @@ const Map roRO = { "tip": "Sfat", "pleaseEnterCompleteCode": "Introduceți codul de verificare complet", "loginFailed": "Autentificare eșuată, reîncercați", - 'pleaseAcceptPrivacyPolicy': 'Citiți și acceptați mai întâi Politica de confidențialitate și Acordul de utilizare', + 'pleaseAcceptPrivacyPolicy': + 'Citiți și acceptați mai întâi Politica de confidențialitate și Acordul de utilizare', "enterVerificationCode": "Introduceți codul de verificare", "verificationCodeSentTo": "Codul de verificare a fost trimis la", "resendVerificationCode": "Retrimite codul de verificare", @@ -99,7 +102,8 @@ const Map roRO = { // 隐私政策弹窗 "loginDeclaration": "Declarația Voitrans", // Voitrans 声明 - "welcomeToThisApp": "Bun venit la Voitrans, vă rugăm să citiți cu atenție", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Bun venit la Voitrans, vă rugăm să citiți cu atenție", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +119,30 @@ const Map roRO = { "signal": "Semnal", "deviceId": "ID dispozitiv", "firmwareVersion": "Versiune firmware", - "disconnectedDevice": "Niciun dispozitiv conectat, faceți clic pe butonul de mai jos pentru a conecta", + "disconnectedDevice": + "Niciun dispozitiv conectat, faceți clic pe butonul de mai jos pentru a conecta", "connectDevice": "Conectare dispozitiv", "topAiExperiences": "Experiențe de top cu AI", "aiAssistant": "Asistent AI multifuncțional", - "aiAssistantInfo": "Consultant exclusiv 24/7, răspunde la întrebări, oferă sugestii", + "aiAssistantInfo": + "Consultant exclusiv 24/7, răspunde la întrebări, oferă sugestii", "interpretation": "Interpretare simultană", - "simultaneousInterpretationInfo": "Traducere în timp real în peste 80 de limbi, călătorii fără griji în străinătate", + "simultaneousInterpretationInfo": + "Traducere în timp real în peste 80 de limbi, călătorii fără griji în străinătate", "aiCompanion": "Companion de familie", "aiCompanionInfo": "Vă înțelege, companie caldă", "homeSlogan": "Conectând lumea, dincolo de sunet", - "turnEarphones": "Deschideți carcasa de încărcare a căștilor și introduceți căștile în urechi", + "turnEarphones": + "Deschideți carcasa de încărcare a căștilor și introduceți căștile în urechi", "currentlyConnected": "Conectat în prezent:", "unsystemSetup": "Mergeți la setările de sistem", "talkLater": "Mai târziu", "initializing": "Se inițializează...", - "bluetoothInitializationFailure": "Inițializarea serviciului Bluetooth a eșuat", + "bluetoothInitializationFailure": + "Inițializarea serviciului Bluetooth a eșuat", "checkingPermissions": "Se verifică permisiunile...", - "lackPermissions": "Lipsesc permisiunile Bluetooth și este necesar să permiteți accesul la localizare", + "lackPermissions": + "Lipsesc permisiunile Bluetooth și este necesar să permiteți accesul la localizare", "searchingDevice": "Se caută dispozitive...", "findConnectedDevice": "Dispozitiv conectat găsit", "notFound": "Niciun dispozitiv Bluetooth conectat nu a fost găsit", @@ -140,14 +150,16 @@ const Map roRO = { "connectedDevice": "Conectat la dispozitiv:", "failedRefreshDevice": "Reîmprospătarea dispozitivului a eșuat", "noDeviceFound": "Niciun dispozitiv conectat nu a fost găsit", - "failedDeviceInformation": "Nu s-au putut obține informații despre dispozitiv", + "failedDeviceInformation": + "Nu s-au putut obține informații despre dispozitiv", "unknownEquipment": "Echipament necunoscut", "zeroSignal": "Fără semnal", "good": "Bun", "fine": "Foarte bun", "excellent": "Excelent", "unknown": "Necunoscut", - 'bluetoothTurnedOff': 'Bluetooth este dezactivat, vă rugăm să activați Bluetooth', + 'bluetoothTurnedOff': + 'Bluetooth este dezactivat, vă rugăm să activați Bluetooth', 'bluetoothOff': 'Bluetooth dezactivat', 'leftEar': 'Urechea stângă', 'rightEar': 'Urechea dreaptă', @@ -175,7 +187,8 @@ const Map roRO = { "healthConsultant": "Chat AI multifuncțional", "healthConsultantInfo": "Oferă mai multe funcții de chat AI", "conferenceAssistant": "Asistent pentru ședințe de afaceri", - "conferenceAssistantInfo": "Înregistrare în timp real a proceselor-verbale, traducere multilingvă", + "conferenceAssistantInfo": + "Înregistrare în timp real a proceselor-verbale, traducere multilingvă", "usageStats": "Statistici de utilizare", "usageStatsInfo": "Vizualizați istoricul utilizării aplicației", "scene": "Scenariu", @@ -218,7 +231,8 @@ const Map roRO = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +288,10 @@ const Map roRO = { '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.', + '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', @@ -284,27 +300,35 @@ const Map roRO = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +337,10 @@ const Map roRO = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +355,8 @@ const Map roRO = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Omite", @@ -355,7 +382,8 @@ const Map roRO = { '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”', + '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', @@ -405,7 +433,8 @@ const Map roRO = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +489,54 @@ const Map roRO = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +548,8 @@ const Map roRO = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +569,8 @@ const Map roRO = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +619,8 @@ const Map roRO = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +645,8 @@ const Map roRO = { "cloudSync": "Recarga de sincronizare în cloud", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Dispozitiv conectat:", "accountId": "ID cont:", "systemSetting": "Setări de sistem", @@ -612,7 +659,8 @@ const Map roRO = { "privacySettings": "Setări de confidențialitate", "privacySettingsInfo": "Gestionați colectarea datelor și permisiunile", "permissionManagement": "Gestionarea permisiunilor", // 权限管理 - "permissionManagementInfo": "Gestionați setările de permisiuni ale aplicației", // 管理应用权限设置 + "permissionManagementInfo": + "Gestionați setările de permisiuni ale aplicației", // 管理应用权限设置 "aboutApplication": "Despre aplicație", "versions": "Versiune", "checkUpdates": "Verifică actualizări", @@ -621,9 +669,11 @@ const Map roRO = { "voiceServiceInfo": "Selectați serviciul de recunoaștere și sinteză vocală", "selectVoiceService": "Selectează serviciu vocal", "azureVoiceService": "Serviciu vocal Azure", - "azureVoiceServiceInfo": "Serviciu vocal în cloud Microsoft, suportă sinteză și recunoaștere vocală de înaltă calitate", + "azureVoiceServiceInfo": + "Serviciu vocal în cloud Microsoft, suportă sinteză și recunoaștere vocală de înaltă calitate", "flutterVoiceService": "Serviciu vocal local Flutter", - "flutterVoiceServiceInfo": "Serviciu vocal local al dispozitivului, poate fi utilizat fără conexiune la internet", + "flutterVoiceServiceInfo": + "Serviciu vocal local al dispozitivului, poate fi utilizat fără conexiune la internet", 'timbreService': 'Serviciu timbru', 'timbreServiceInfo': 'Selectați serviciul de sinteză vocală a timbrului', 'defaultTimbre': 'Timbru implicit', @@ -652,7 +702,8 @@ const Map roRO = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Chat vocal în timp real", - "realtimeVoiceChatInfo": "Experimentați funcția de interacțiune vocală inteligentă (previzualizare funcție)", + "realtimeVoiceChatInfo": + "Experimentați funcția de interacțiune vocală inteligentă (previzualizare funcție)", "loading": "Se încarcă...", //设备管理页面 @@ -667,7 +718,8 @@ const Map roRO = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -678,7 +730,8 @@ const Map roRO = { "inputMessage": "Introduceți mesaj...", "imListening": "Ascult...", "canStartTalking": "Puteți începe să vorbiți", - "addQuestionAboutImage": "Adăugați o întrebare sau o descriere despre imagine...", + "addQuestionAboutImage": + "Adăugați o întrebare sau o descriere despre imagine...", "summarizeImageContent": "Rezumați conținutul imaginii", "extractImageText": "Extrageți text din imagine", "translateImageText": "Traduceți textul din imagine", @@ -721,10 +774,14 @@ const Map roRO = { '• Controlul funcțiilor căștilor\n\n' 'Cu ce vă pot ajuta?', 'microphonePermission': 'Microfon', - 'voiceRecognitionPermissionText': 'Recunoașterea vocală necesită acces la microfon.', - 'voiceTranslationPermissionText': 'Recunoașterea și traducerea vocală necesită acces la microfon.', - 'phoneCallPermissionText': 'Efectuarea apelurilor necesită acces la microfon pentru apeluri vocale.', - 'permissionDeniedText': 'Ați refuzat permanent permisiunea pentru microfon, vă rugăm să mergeți la setările de sistem pentru a o activa.', + 'voiceRecognitionPermissionText': + 'Recunoașterea vocală necesită acces la microfon.', + 'voiceTranslationPermissionText': + 'Recunoașterea și traducerea vocală necesită acces la microfon.', + 'phoneCallPermissionText': + 'Efectuarea apelurilor necesită acces la microfon pentru apeluri vocale.', + 'permissionDeniedText': + 'Ați refuzat permanent permisiunea pentru microfon, vă rugăm să mergeți la setările de sistem pentru a o activa.', 'startVoiceInput': 'Începe intrarea vocală', 'startPhoneCallMode': 'Începe modul de apel, începe intrarea vocală', @@ -745,9 +802,11 @@ const Map roRO = { 'misleadingAttack': 'Înșelător/Atac', 'illegalCriminal': 'Ilegal/Criminal', 'privacyRelated': 'Legat de confidențialitate', - 'copyrightViolation': 'Încălcarea drepturilor mele de autor, a reputației etc.', + 'copyrightViolation': + 'Încălcarea drepturilor mele de autor, a reputației etc.', 'other': 'Altele', - 'reportDescriptionHint': 'Dorim să știm de ce raportați, puteți descrie problema pe care ați întâmpinat-o.', + 'reportDescriptionHint': + 'Dorim să știm de ce raportați, puteți descrie problema pe care ați întâmpinat-o.', //'submit': '提交', //Message_bubble @@ -778,15 +837,24 @@ const Map roRO = { 'highest': 'Maximă', 'lowest': 'Minimă', 'futureForecast': 'Prognoza viitoare', - 'hotWeatherTip': 'Astăzi este cald, aveți grijă la insolație și beți multă apă', - 'coldWeatherTip': 'Astăzi temperatura este scăzută, îmbrăcați-vă gros când ieșiți pentru a nu răci', - 'rainyWeatherTip': 'Astăzi plouă, luați o umbrelă când ieșiți și aveți grijă la drum', - 'snowyWeatherTip': 'Astăzi ninge, drumul este alunecos, aveți grijă și îmbrăcați-vă gros', - 'foggyWeatherTip': 'Astăzi este ceață, vizibilitatea este redusă, purtați o mască când ieșiți', - 'windyWeatherTip': 'Astăzi vântul este puternic, aveți grijă când ieșiți și asigurați-vă bunurile', - 'sunnyWeatherTip': 'Astăzi este soare și razele UV sunt puternice, folosiți protecție solară când ieșiți', - 'temperatureDifferenceTip': 'Astăzi este o diferență mare de temperatură între zi și noapte, adaptați-vă îmbrăcămintea', - 'comfortableWeatherTip': 'Astăzi vremea este plăcută, un moment bun pentru activități în aer liber', + 'hotWeatherTip': + 'Astăzi este cald, aveți grijă la insolație și beți multă apă', + 'coldWeatherTip': + 'Astăzi temperatura este scăzută, îmbrăcați-vă gros când ieșiți pentru a nu răci', + 'rainyWeatherTip': + 'Astăzi plouă, luați o umbrelă când ieșiți și aveți grijă la drum', + 'snowyWeatherTip': + 'Astăzi ninge, drumul este alunecos, aveți grijă și îmbrăcați-vă gros', + 'foggyWeatherTip': + 'Astăzi este ceață, vizibilitatea este redusă, purtați o mască când ieșiți', + 'windyWeatherTip': + 'Astăzi vântul este puternic, aveți grijă când ieșiți și asigurați-vă bunurile', + 'sunnyWeatherTip': + 'Astăzi este soare și razele UV sunt puternice, folosiți protecție solară când ieșiți', + 'temperatureDifferenceTip': + 'Astăzi este o diferență mare de temperatură între zi și noapte, adaptați-vă îmbrăcămintea', + 'comfortableWeatherTip': + 'Astăzi vremea este plăcută, un moment bun pentru activități în aer liber', "monday": "Lu", "tuesday": "Ma", "wednesday": "Mi", @@ -836,24 +904,33 @@ const Map roRO = { "notSet": "Nesetat", "accountSetting": "Setări cont", "logout": "Deconectare", - "logoutTips": "Sunteți sigur că doriți să vă deconectați de la contul curent?", + "logoutTips": + "Sunteți sigur că doriți să vă deconectați de la contul curent?", 'deleteAccount': 'Șterge contul', - 'deleteAccountTips': 'Sunteți sigur că doriți să ștergeți permanent contul? Această acțiune nu poate fi anulată.', + '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': 'Conexiunea la rețea a eșuat, verificați setările de rețea și reîncercați', - 'serverTemporarilyUnavailable': 'Serverul este temporar indisponibil, reîncercați mai târziu', - 'loginExpiredPleaseRelogin': 'Sesiunea dvs. a expirat, vă rugăm să vă autentificați din nou', - 'noPermissionForThisOperation': 'Nu aveți permisiunea de a efectua această operație', + 'networkConnectionFailed': + 'Conexiunea la rețea a eșuat, verificați setările de rețea și reîncercați', + 'serverTemporarilyUnavailable': + 'Serverul este temporar indisponibil, reîncercați mai târziu', + 'loginExpiredPleaseRelogin': + 'Sesiunea dvs. a expirat, vă rugăm să vă autentificați din nou', + 'noPermissionForThisOperation': + 'Nu aveți permisiunea de a efectua această operație', 'requestedResourceNotFound': 'Resursa solicitată nu a fost găsită', - 'imageProcessingFailedPleaseReselect': 'Procesarea imaginii a eșuat, vă rugăm să selectați o altă imagine', + 'imageProcessingFailedPleaseReselect': + 'Procesarea imaginii a eșuat, vă rugăm să selectați o altă imagine', 'operationFailedPleaseRetry': 'Operațiunea a eșuat, reîncercați', 'serverReturnedError': 'Serverul a returnat o eroare', 'serverError': 'Eroare de server', - 'networkConnectionFailedCheckSettings': 'Conexiunea la rețea a eșuat, verificați setările de rețea', - 'serverInternalErrorRetryLater': 'Eroare internă de server, reîncercați mai târziu', + 'networkConnectionFailedCheckSettings': + 'Conexiunea la rețea a eșuat, verificați setările de rețea', + 'serverInternalErrorRetryLater': + 'Eroare internă de server, reîncercați mai târziu', // Profile 用户交互 //'error': '错误', @@ -874,11 +951,16 @@ const Map roRO = { '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', // 登出过程发生错误 - 'deleteAccountProcessError': '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', // AccountService 已初始化 + 'signOutProcessError': + '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', // 用户数据清理成功 + 'allUserDataClearSuccess': + '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', @@ -901,10 +983,14 @@ const Map roRO = { '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': 'Utilizat pentru citirea și gestionarea evenimentelor și mementourilor din calendar', - 'locationPermissionDesc': 'Utilizat pentru obținerea informațiilor despre locația curentă', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Utilizat pentru crearea de evenimente și memento-uri în calendar', + 'calendarFullAccessPermissionDesc': + 'Utilizat pentru citirea și gestionarea evenimentelor și mementourilor din calendar', + 'locationPermissionDesc': + 'Utilizat pentru obținerea informațiilor despre locația curentă', 'appFunctionNeeds': 'Funcția aplicației necesită', 'authorized': 'Autorizat', 'unauthorized': 'Neautorizat', @@ -913,45 +999,71 @@ const Map roRO = { 'unknownStatus': 'Stare necunoscută', 'permissionGranted': 'Permisiune acordată', 'permissionRequestError': 'Eroare la solicitarea permisiunii', - 'phonePermissionDetailDesc': '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', + 'phonePermissionDetailDesc': + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1073,8 @@ const Map roRO = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1083,10 @@ const Map roRO = { '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', // 无法打开应用商店提示 - 'updateErrorRetry': 'A apărut o eroare în timpul actualizării, reîncercați mai târziu', // 更新错误重试提示 + 'cannotOpenAppStore': + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -1107,7 +1222,8 @@ const Map roRO = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1239,12 @@ const Map roRO = { "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ă.", + "clearHistoryConfirm": + "Sunteți sigur că doriți să ștergeți tot istoricul traducerilor? Această acțiune nu poate fi anulată.", "unknownLanguage": "Limbă necunoscută", "deleteSessionRecord": "Șterge înregistrarea sesiunii", - "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ă.", + "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ă.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1276,20 @@ const Map roRO = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1312,8 @@ const Map roRO = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Înregistrare originală", "recordSummary": "Rezumat înregistrare", - "clickToGenerateSummary": "Faceți clic pe butonul de mai jos pentru a genera un rezumat al sesiunii", + "clickToGenerateSummary": + "Faceți clic pe butonul de mai jos pentru a genera un rezumat al sesiunii", "summaryContent": "Conținut rezumat", "copied": "Copiat", "summaryCopiledToClipboard": "Rezumatul a fost copiat în clipboard", @@ -1197,9 +1321,11 @@ const Map roRO = { "summaryGenerated": "Rezumat generat", "generating": "Se generează...", "regenerate": "Regenerează", - "summaryTimeoutMessage": "Cererea de generare a rezumatului a expirat, posibil din cauza problemelor de rețea sau a unui server ocupat.", + "summaryTimeoutMessage": + "Cererea de generare a rezumatului a expirat, posibil din cauza problemelor de rețea sau a unui server ocupat.", "deleteTranslationRecord": "Șterge înregistrarea traducerii", - "deleteTranslationConfirm": "Sunteți sigur că doriți să ștergeți această înregistrare de traducere? Această acțiune nu poate fi anulată.", + "deleteTranslationConfirm": + "Sunteți sigur că doriți să ștergeți această înregistrare de traducere? Această acțiune nu poate fi anulată.", "originalText": "Text original", "translatedText": "Text tradus", "sessionSummary": "Rezumat sesiune", @@ -1227,19 +1353,25 @@ const Map roRO = { // 配对状态文本 "readyToPair": "Gata de asociere", "preparingPairingEnvironment": "Se pregătește mediul de asociere...", - "connectDeepSoundViaSystemBluetooth": "Conectați-vă mai întâi la dispozitivul Voitrans prin Bluetooth-ul de sistem", + "connectDeepSoundViaSystemBluetooth": + "Conectați-vă mai întâi la dispozitivul Voitrans prin Bluetooth-ul de sistem", "deviceBindingConfirm": "Confirmare legare dispozitiv...", "establishingDeviceAssociation": "Se stabilește asocierea dispozitivului...", "waitingCompletePairing": "Vă rugăm așteptați, se finalizează asocierea...", - "pairingSuccessRedirecting": "Asociere reușită! Se redirecționează către pagina principală...", + "pairingSuccessRedirecting": + "Asociere reușită! Se redirecționează către pagina principală...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Asigurați-vă că sunteți conectat la un dispozitiv Voitrans", - "deviceAlreadyBoundToOtherAccount": "Acest dispozitiv este deja legat de un alt cont", + "ensureConnectedDeepSoundDevice": + "Asigurați-vă că sunteți conectat la un dispozitiv Voitrans", + "deviceAlreadyBoundToOtherAccount": + "Acest dispozitiv este deja legat de un alt cont", "deviceAssociationFailed": "Asocierea dispozitivului a eșuat, reîncercați", - "scanTimeoutEnsureDeviceNearby": "Scanarea a expirat, asigurați-vă că dispozitivul este în apropiere", + "scanTimeoutEnsureDeviceNearby": + "Scanarea a expirat, asigurați-vă că dispozitivul este în apropiere", "networkError": "Eroare de rețea", - "authorizationFailedCheckCode": "Autorizare eșuată, verificați dacă codul de autorizare este corect", + "authorizationFailedCheckCode": + "Autorizare eșuată, verificați dacă codul de autorizare este corect", "pairingFailedRetry": "Asociere eșuată, reîncercați", // 配对控制器相关 @@ -1248,13 +1380,15 @@ const Map roRO = { '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', + '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ă...', + 'needManualBindingAuthCode': + 'Este necesar un cod de autorizare pentru legarea manuală...', 'pairingSuccessful': 'Asociere reușită!', 'enableBluetooth': 'Activează Bluetooth', 'grantPermissions': 'Acordă permisiuni', @@ -1266,35 +1400,45 @@ const Map roRO = { 'verificationFailedRetry': 'Verificare eșuată, reîncercați', 'invalidDeviceAddress': 'Adresă de dispozitiv invalidă', 'bleDeviceAssociationFailed': 'Asocierea dispozitivului BLE a eșuat', - 'deviceAssociationFailedRetry': 'Asocierea dispozitivului a eșuat, reîncercați', + 'deviceAssociationFailedRetry': + 'Asocierea dispozitivului a eșuat, reîncercați', 'bleConnectionTimeoutRetry': 'Conexiunea BLE a expirat, reîncercați', 'blePairingStartupFailed': 'Pornirea asocierii BLE a eșuat', 'bleConnectionFailed': 'Conexiunea BLE a eșuat', - 'deviceAuthorizationFailedCheckCode': 'Autorizarea dispozitivului a eșuat, verificați codul de autorizare', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', - 'feedbackDescription': 'Vă rugăm să descrieți problema întâmpinată sau sugestia dvs.', + 'feedbackDescription': + 'Vă rugăm să descrieți problema întâmpinată sau sugestia dvs.', 'feedbackHint': 'Introduceți feedback-ul dvs....', 'feedbackRequired': 'Introduceți conținutul feedback-ului', 'contactInfo': 'Informații de contact', 'contactHint': 'E-mail/Telefon, pentru a vă putea contacta', 'submit': 'Trimite', - 'feedbackSubmitSuccess': 'Feedback trimis cu succes, vă mulțumim pentru feedback!', - 'feedbackSubmitFailed': 'Trimiterea feedback-ului a eșuat, reîncercați mai târziu', + 'feedbackSubmitSuccess': + 'Feedback trimis cu succes, vă mulțumim pentru feedback!', + 'feedbackSubmitFailed': + 'Trimiterea feedback-ului a eșuat, reîncercați mai târziu', // OTA升级模块 - "upgradeExitConfirm": "Actualizarea este în curs, ieșirea va întrerupe procesul, sunteți sigur că doriți să ieșiți?", + "upgradeExitConfirm": + "Actualizarea este în curs, ieșirea va întrerupe procesul, sunteți sigur că doriți să ieșiți?", "deviceModel": "Model dispozitiv", "unknownDevice": "Dispozitiv necunoscut", "currentFirmwareVersion": "Versiune firmware curentă", @@ -1307,14 +1451,19 @@ const Map roRO = { "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", + "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", "charging": "Se încarcă", "updateContent": "Conținut actualizare", - "removeEarbudsEnsureBattery": "Scoateți ambele căști și asigurați-vă că bateria ambelor este peste 20%", + "removeEarbudsEnsureBattery": + "Scoateți ambele căști și asigurați-vă că bateria ambelor este peste 20%", // 音乐列表页面 "noMusic": "Fără muzică", // 暂无音乐 @@ -1376,8 +1525,10 @@ const Map roRO = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 e9ffb87e6..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": "Французский", @@ -71,7 +72,8 @@ const Map ruRU = { // 登录页 "welcome": "Добро пожаловать", - "loginTips": "Войдите или зарегистрируйтесь, используя номер телефона или электронную почту", + "loginTips": + "Войдите или зарегистрируйтесь, используя номер телефона или электронную почту", "accountNumber": "Номер телефона или e-mail", "verificationCode": "Код подтверждения", "getCode": "Получить код", @@ -90,7 +92,8 @@ const Map ruRU = { "tip": "Подсказка", "pleaseEnterCompleteCode": "Пожалуйста, введите полный код подтверждения", "loginFailed": "Ошибка входа, попробуйте еще раз", - 'pleaseAcceptPrivacyPolicy': 'Пожалуйста, сначала прочтите и согласитесь с Политикой конфиденциальности и Пользовательским соглашением', + 'pleaseAcceptPrivacyPolicy': + 'Пожалуйста, сначала прочтите и согласитесь с Политикой конфиденциальности и Пользовательским соглашением', "enterVerificationCode": "Введите код подтверждения", "verificationCodeSentTo": "Код подтверждения отправлен на", "resendVerificationCode": "Отправить код еще раз", @@ -99,7 +102,8 @@ const Map ruRU = { // 隐私政策弹窗 "loginDeclaration": "Заявление Voitrans", // Voitrans 声明 - "welcomeToThisApp": "Добро пожаловать в Voitrans, пожалуйста, внимательно прочтите", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Добро пожаловать в Voitrans, пожалуйста, внимательно прочтите", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +119,29 @@ const Map ruRU = { "signal": "Сигнал", "deviceId": "ID устройства", "firmwareVersion": "Версия прошивки", - "disconnectedDevice": "Устройство не подключено, нажмите кнопку ниже для подключения", + "disconnectedDevice": + "Устройство не подключено, нажмите кнопку ниже для подключения", "connectDevice": "Подключить устройство", "topAiExperiences": "Лучшие AI-впечатления", "aiAssistant": "Всемогущий AI-помощник", - "aiAssistantInfo": "Эксклюзивный консультант 24/7, отвечает на вопросы, дает советы", + "aiAssistantInfo": + "Эксклюзивный консультант 24/7, отвечает на вопросы, дает советы", "interpretation": "Синхронный перевод", - "simultaneousInterpretationInfo": "Перевод в реальном времени на более чем 80 языков, беззаботные поездки за границу", + "simultaneousInterpretationInfo": + "Перевод в реальном времени на более чем 80 языков, беззаботные поездки за границу", "aiCompanion": "Семейный компаньон", "aiCompanionInfo": "Понимает вас, теплое общение", "homeSlogan": "Соединяя мир, превосходя звук", - "turnEarphones": "Откройте зарядный чехол для наушников и вставьте наушники в уши", + "turnEarphones": + "Откройте зарядный чехол для наушников и вставьте наушники в уши", "currentlyConnected": "В настоящее время подключено:", "unsystemSetup": "Перейти в настройки системы", "talkLater": "Позже", "initializing": "Инициализация...", "bluetoothInitializationFailure": "Ошибка инициализации службы Bluetooth", "checkingPermissions": "Проверка разрешений...", - "lackPermissions": "Отсутствуют разрешения Bluetooth и необходимо разрешить доступ к местоположению", + "lackPermissions": + "Отсутствуют разрешения Bluetooth и необходимо разрешить доступ к местоположению", "searchingDevice": "Поиск устройств...", "findConnectedDevice": "Найдено подключенное устройство", "notFound": "Подключенное устройство Bluetooth не найдено", @@ -169,13 +178,15 @@ const Map ruRU = { "faceToFaceTranslation": "Перевод лицом к лицу", 'audioVideoTranslation': 'Перевод аудио и видео', 'callTranslation': 'Перевод звонков', - "simultaneousTranslationInfo": "Перевод в реальном времени на более чем 80 языков", + "simultaneousTranslationInfo": + "Перевод в реальном времени на более чем 80 языков", "aiGirlfriend": "AI-подруга", "aiGirlfriendInfo": "Интеллектуальный компаньон, общайтесь в любое время", "healthConsultant": "Многофункциональный AI-чат", "healthConsultantInfo": "Предлагает больше функций AI-чата", "conferenceAssistant": "Помощник для деловых встреч", - "conferenceAssistantInfo": "Запись протоколов в реальном времени, многоязычный перевод", + "conferenceAssistantInfo": + "Запись протоколов в реальном времени, многоязычный перевод", "usageStats": "Статистика использования", "usageStatsInfo": "Просмотрите статистику использования вашего приложения", "scene": "Сценарий", @@ -218,7 +229,8 @@ const Map ruRU = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +286,10 @@ const Map ruRU = { 'copyrightVoitrans': '© 2025 Voitrans Technologies', // 会议商品页描述 - 'meetingHeaderDesc1': 'Audio recording, transcription, keyword search, and auto summary.', - 'meetingHeaderDesc2': 'Suitable for business meetings, class notes, and interview minutes.', + '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', @@ -284,27 +298,37 @@ const Map ruRU = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Синхронный перевод и перевод текста в реальном времени с низкой задержкой голосового озвучивания.', - 'transHeaderDesc2': 'Подходит для путешествий, бизнеса, выступлений и обучения.', + 'transHeaderDesc1': + 'Синхронный перевод и перевод текста в реальном времени с низкой задержкой голосового озвучивания.', + 'transHeaderDesc2': + 'Подходит для путешествий, бизнеса, выступлений и обучения.', 'translateZhEn': 'Китайско-английский перевод', 'lowLatencyVoiceBroadcast': 'Голосовое вещание с низкой задержкой', 'multiLangTextTranslation': 'Многоязычный перевод текста', - 'termOptimizationContextPreserve': 'Оптимизация терминологии и сохранение контекста', - 'lexiconTourBusinessLife': 'Лексика для путешествий/бизнеса/повседневной жизни', + 'termOptimizationContextPreserve': + 'Оптимизация терминологии и сохранение контекста', + 'lexiconTourBusinessLife': + 'Лексика для путешествий/бизнеса/повседневной жизни', 'personalVocabularyMemory': 'Память персонального словаря', 'conversationSubtitleLargeText': 'Субтитры беседы / режим крупных шрифтов', 'colorHighContrast': 'Высокая контрастность цветов', - 'transDisclaimer': 'Качество перевода зависит от микрофона, сетевой задержки и фонового шума.', + 'transDisclaimer': + 'Качество перевода зависит от микрофона, сетевой задержки и фонового шума.', // AI 商品页描述 - 'aiHeaderDesc1': 'Longer conversation quota, more tool calls, extended context length.', - 'aiHeaderDesc2': 'Suitable for agent Q&A, summarization, analysis, and task execution.', + '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', + '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', @@ -313,8 +337,10 @@ const Map ruRU = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Обзор преимуществ', @@ -329,7 +355,8 @@ const Map ruRU = { 'generalPrivileges': 'Общие привилегии', 'earlyAccessNewFeatures': 'Ранний доступ к новым функциям', 'crossDeviceSync': 'Синхронизация между устройствами', - 'vipDisclaimer': 'Фактические преимущества зависят от деталей пакета и могут меняться с версиями.', + 'vipDisclaimer': + 'Фактические преимущества зависят от деталей пакета и могут меняться с версиями.', // 新手引导 / Onboarding 'skip': "Пропустить", @@ -355,7 +382,8 @@ const Map ruRU = { '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”", + '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", @@ -405,7 +433,8 @@ const Map ruRU = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +489,54 @@ const Map ruRU = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +548,8 @@ const Map ruRU = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +569,8 @@ const Map ruRU = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +619,8 @@ const Map ruRU = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +645,8 @@ const Map ruRU = { "cloudSync": "Пополнение синхронизации в облаке", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Подключенное устройство:", "accountId": "ID аккаунта:", "systemSetting": "Системные настройки", @@ -612,7 +659,8 @@ const Map ruRU = { "privacySettings": "Настройки конфиденциальности", "privacySettingsInfo": "Управление сбором данных и разрешениями", "permissionManagement": "Управление разрешениями", // 权限管理 - "permissionManagementInfo": "Управление настройками разрешений приложения", // 管理应用权限设置 + "permissionManagementInfo": + "Управление настройками разрешений приложения", // 管理应用权限设置 "aboutApplication": "О приложении", "versions": "Версия", "checkUpdates": "Проверить обновления", @@ -621,9 +669,11 @@ const Map ruRU = { "voiceServiceInfo": "Выбор службы распознавания и синтеза речи", "selectVoiceService": "Выберите голосовую службу", "azureVoiceService": "Голосовая служба Azure", - "azureVoiceServiceInfo": "Облачная голосовая служба Microsoft, поддерживающая высококачественный синтез и распознавание речи", + "azureVoiceServiceInfo": + "Облачная голосовая служба Microsoft, поддерживающая высококачественный синтез и распознавание речи", "flutterVoiceService": "Локальная голосовая служба Flutter", - "flutterVoiceServiceInfo": "Локальная голосовая служба устройства, можно использовать без подключения к Интернету", + "flutterVoiceServiceInfo": + "Локальная голосовая служба устройства, можно использовать без подключения к Интернету", 'timbreService': 'Служба тембров', 'timbreServiceInfo': 'Выберите службу синтеза речи с тембрами', 'defaultTimbre': 'Стандартный тембр', @@ -652,7 +702,8 @@ const Map ruRU = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Голосовой чат в реальном времени", - "realtimeVoiceChatInfo": "Испытайте функцию интеллектуального голосового взаимодействия (предварительный просмотр)", + "realtimeVoiceChatInfo": + "Испытайте функцию интеллектуального голосового взаимодействия (предварительный просмотр)", "loading": "Загрузка...", //设备管理页面 @@ -667,7 +718,8 @@ const Map ruRU = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -721,10 +773,14 @@ const Map ruRU = { '• Управлять функциями наушников\n\n' 'Чем я могу вам помочь?', 'microphonePermission': 'Микрофон', - 'voiceRecognitionPermissionText': 'Для распознавания речи требуется доступ к микрофону.', - 'voiceTranslationPermissionText': 'Для распознавания и перевода речи требуется доступ к микрофону.', - 'phoneCallPermissionText': 'Для совершения звонков требуется доступ к микрофону для голосовых вызовов.', - 'permissionDeniedText': 'Вы навсегда отказали в доступе к микрофону, пожалуйста, включите разрешение в настройках системы.', + 'voiceRecognitionPermissionText': + 'Для распознавания речи требуется доступ к микрофону.', + 'voiceTranslationPermissionText': + 'Для распознавания и перевода речи требуется доступ к микрофону.', + 'phoneCallPermissionText': + 'Для совершения звонков требуется доступ к микрофону для голосовых вызовов.', + 'permissionDeniedText': + 'Вы навсегда отказали в доступе к микрофону, пожалуйста, включите разрешение в настройках системы.', 'startVoiceInput': 'Начать голосовой ввод', 'startPhoneCallMode': 'Начать режим звонка, начать голосовой ввод', @@ -747,7 +803,8 @@ const Map ruRU = { 'privacyRelated': "Связано с конфиденциальностью", 'copyrightViolation': "Нарушение моих авторских прав, репутации и т.д.", 'other': 'Другое', - 'reportDescriptionHint': 'Мы хотим знать причину вашей жалобы, вы можете описать проблему, с которой столкнулись.', + 'reportDescriptionHint': + 'Мы хотим знать причину вашей жалобы, вы можете описать проблему, с которой столкнулись.', //'submit': '提交', //Message_bubble @@ -778,15 +835,24 @@ const Map ruRU = { 'highest': 'Макс.', 'lowest': 'Мин.', 'futureForecast': 'Прогноз на будущее', - 'hotWeatherTip': 'Сегодня жарко, пожалуйста, избегайте перегрева и пейте больше воды, чтобы избежать теплового удара', - 'coldWeatherTip': 'Сегодня температура низкая, пожалуйста, тепло одевайтесь, выходя на улицу, чтобы не простудиться', - 'rainyWeatherTip': 'Сегодня дождь, пожалуйста, возьмите с собой зонт и будьте осторожны во время поездок', - 'snowyWeatherTip': 'Сегодня снег, дороги скользкие, будьте осторожны и тепло одевайтесь', - 'foggyWeatherTip': 'Сегодня туман, видимость ограничена, пожалуйста, надевайте маску, выходя на улицу', - 'windyWeatherTip': 'Сегодня сильный ветер, пожалуйста, будьте осторожны и закрепите свои вещи, выходя на улицу', - 'sunnyWeatherTip': 'Сегодня солнечно и сильное ультрафиолетовое излучение, пожалуйста, используйте солнцезащитный крем, выходя на улицу', - 'temperatureDifferenceTip': 'Сегодня большая разница температур между днем и ночью, пожалуйста, одевайтесь соответственно', - 'comfortableWeatherTip': 'Сегодня приятная погода, прекрасное время для активного отдыха на свежем воздухе', + 'hotWeatherTip': + 'Сегодня жарко, пожалуйста, избегайте перегрева и пейте больше воды, чтобы избежать теплового удара', + 'coldWeatherTip': + 'Сегодня температура низкая, пожалуйста, тепло одевайтесь, выходя на улицу, чтобы не простудиться', + 'rainyWeatherTip': + 'Сегодня дождь, пожалуйста, возьмите с собой зонт и будьте осторожны во время поездок', + 'snowyWeatherTip': + 'Сегодня снег, дороги скользкие, будьте осторожны и тепло одевайтесь', + 'foggyWeatherTip': + 'Сегодня туман, видимость ограничена, пожалуйста, надевайте маску, выходя на улицу', + 'windyWeatherTip': + 'Сегодня сильный ветер, пожалуйста, будьте осторожны и закрепите свои вещи, выходя на улицу', + 'sunnyWeatherTip': + 'Сегодня солнечно и сильное ультрафиолетовое излучение, пожалуйста, используйте солнцезащитный крем, выходя на улицу', + 'temperatureDifferenceTip': + 'Сегодня большая разница температур между днем и ночью, пожалуйста, одевайтесь соответственно', + 'comfortableWeatherTip': + 'Сегодня приятная погода, прекрасное время для активного отдыха на свежем воздухе', "monday": "Пн", "tuesday": "Вт", "wednesday": "Ср", @@ -838,22 +904,30 @@ const Map ruRU = { "logout": "Выйти", "logoutTips": "Вы уверены, что хотите выйти из текущего аккаунта?", 'deleteAccount': 'Удалить аккаунт', - 'deleteAccountTips': 'Вы уверены, что хотите навсегда удалить свой аккаунт? Это действие необратимо.', + 'deleteAccountTips': + 'Вы уверены, что хотите навсегда удалить свой аккаунт? Это действие необратимо.', 'clean': 'Clear Cache', 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 - 'networkConnectionFailed': 'Ошибка сетевого подключения, проверьте настройки сети и попробуйте еще раз', - 'serverTemporarilyUnavailable': 'Сервер временно недоступен, попробуйте еще раз позже', - 'loginExpiredPleaseRelogin': 'Срок действия сессии истек, пожалуйста, войдите снова', - 'noPermissionForThisOperation': 'У вас нет разрешения на выполнение этой операции', + 'networkConnectionFailed': + 'Ошибка сетевого подключения, проверьте настройки сети и попробуйте еще раз', + 'serverTemporarilyUnavailable': + 'Сервер временно недоступен, попробуйте еще раз позже', + 'loginExpiredPleaseRelogin': + 'Срок действия сессии истек, пожалуйста, войдите снова', + 'noPermissionForThisOperation': + 'У вас нет разрешения на выполнение этой операции', 'requestedResourceNotFound': 'Запрошенный ресурс не найден', - 'imageProcessingFailedPleaseReselect': 'Не удалось обработать изображение, пожалуйста, выберите другое изображение', + 'imageProcessingFailedPleaseReselect': + 'Не удалось обработать изображение, пожалуйста, выберите другое изображение', 'operationFailedPleaseRetry': 'Операция не удалась, попробуйте еще раз', 'serverReturnedError': 'Сервер вернул ошибку', 'serverError': 'Ошибка сервера', - 'networkConnectionFailedCheckSettings': 'Ошибка сетевого подключения, проверьте настройки сети', - 'serverInternalErrorRetryLater': 'Внутренняя ошибка сервера, попробуйте еще раз позже', + 'networkConnectionFailedCheckSettings': + 'Ошибка сетевого подключения, проверьте настройки сети', + 'serverInternalErrorRetryLater': + 'Внутренняя ошибка сервера, попробуйте еще раз позже', // Profile 用户交互 //'error': '错误', @@ -873,12 +947,17 @@ const Map ruRU = { 'clearUserDataFailed': 'Не удалось очистить данные пользователя', // 清理用户数据失败 'deleteUserDataFailed': 'Не удалось удалить данные пользователя', // 删除用户数据失败 'thirdPartyLogoutSuccess': 'Выход из стороннего сервиса успешен', // 第三方登录退出成功 - 'thirdPartyLogoutFailed': 'Не удалось выйти из стороннего сервиса', // 第三方登录退出失败 - 'signOutProcessError': 'Произошла ошибка во время выхода из системы', // 登出过程发生错误 - 'deleteAccountProcessError': 'Произошла ошибка во время удаления аккаунта', // 删除账号过程发生错误 + 'thirdPartyLogoutFailed': + 'Не удалось выйти из стороннего сервиса', // 第三方登录退出失败 + 'signOutProcessError': + 'Произошла ошибка во время выхода из системы', // 登出过程发生错误 + 'deleteAccountProcessError': + 'Произошла ошибка во время удаления аккаунта', // 删除账号过程发生错误 'userDataClearSuccess': 'Данные пользователя успешно очищены', // 用户数据清理成功 - 'allUserDataClearSuccess': 'Все данные пользователя успешно очищены', // 所有用户数据清理成功 - 'accountServiceInitialized': 'Служба аккаунтов инициализирована', // AccountService 已初始化 + 'allUserDataClearSuccess': + 'Все данные пользователя успешно очищены', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Служба аккаунтов инициализирована', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Не удалось получить статус разрешений', @@ -901,10 +980,14 @@ const Map ruRU = { 'locationInfo': 'Информация о местоположении', 'phonePermissionDesc': 'Используется для совершения звонков', 'smsPermissionDesc': 'Используется для отправки SMS', - 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', - 'calendarWritePermissionDesc': 'Используется для создания событий и напоминаний в календаре', - 'calendarFullAccessPermissionDesc': 'Используется для чтения и управления событиями и напоминаниями в календаре', - 'locationPermissionDesc': 'Используется для получения информации о текущем местоположении', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Используется для создания событий и напоминаний в календаре', + 'calendarFullAccessPermissionDesc': + 'Используется для чтения и управления событиями и напоминаниями в календаре', + 'locationPermissionDesc': + 'Используется для получения информации о текущем местоположении', 'appFunctionNeeds': 'Функции приложения требуют', 'authorized': 'Разрешено', 'unauthorized': 'Не разрешено', @@ -913,45 +996,71 @@ const Map ruRU = { 'unknownStatus': 'Неизвестный статус', 'permissionGranted': 'Разрешение предоставлено', 'permissionRequestError': 'Ошибка при запросе разрешения', - 'phonePermissionDetailDesc': 'Для функции звонков требуется разрешение на доступ к телефону', - 'smsPermissionDetailDesc': 'Для функции отправки SMS требуется разрешение на доступ к SMS', - 'alarmPermissionDetailDesc': 'This permission is required to set exact alarms and ensure reminders trigger on time', - 'calendarWritePermissionDetailDesc': 'Для создания событий в календаре требуется разрешение на запись в календарь', - 'calendarFullAccessPermissionDetailDesc': 'Для управления событиями в календаре требуется полный доступ к календарю', - 'locationPermissionDetailDesc': 'Для получения информации о местоположении требуется разрешение на доступ к местоположению', + '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', + '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', + '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', + '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}, пожалуйста, перейдите в настройки приложения, чтобы включить его', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1070,8 @@ const Map ruRU = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1080,10 @@ const Map ruRU = { 'updateNow': 'Обновить сейчас', // 立即更新按钮 'checkUpdate': 'Проверить обновления', // 检查更新按钮 'updateFailed': 'Не удалось обновить', // 更新失败提示 - 'cannotOpenAppStore': 'Не удается открыть App Store, пожалуйста, перейдите в App Store вручную, чтобы обновить', // 无法打开应用商店提示 - 'updateErrorRetry': 'Произошла ошибка во время обновления, попробуйте еще раз позже', // 更新错误重试提示 + 'cannotOpenAppStore': + 'Не удается открыть App Store, пожалуйста, перейдите в App Store вручную, чтобы обновить', // 无法打开应用商店提示 + 'updateErrorRetry': + 'Произошла ошибка во время обновления, попробуйте еще раз позже', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -1107,7 +1219,8 @@ const Map ruRU = { "selectTargetLanguage": "Выберите целевой язык", "me": "Me", "counterPart": "Counterpart", - "bluetoothCallStateError": "Please make sure the Bluetooth headset is connected to the phone and in a call state", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1236,12 @@ const Map ruRU = { "historyRecords": "History Records", "clearResults": "Clear Results", "clearHistory": "Очистить историю", - "clearHistoryConfirm": "Вы уверены, что хотите очистить всю историю переводов? Это действие необратимо.", + "clearHistoryConfirm": + "Вы уверены, что хотите очистить всю историю переводов? Это действие необратимо.", "unknownLanguage": "Неизвестный язык", "deleteSessionRecord": "Удалить запись сессии", - "deleteSessionConfirm": "Вы уверены, что хотите удалить все записи переводов этой сессии? Это действие необратимо.", + "deleteSessionConfirm": + "Вы уверены, что хотите удалить все записи переводов этой сессии? Это действие необратимо.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1273,20 @@ const Map ruRU = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1309,8 @@ const Map ruRU = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Оригинальная запись", "recordSummary": "Резюме записи", - "clickToGenerateSummary": "Нажмите кнопку ниже, чтобы сгенерировать резюме сессии", + "clickToGenerateSummary": + "Нажмите кнопку ниже, чтобы сгенерировать резюме сессии", "summaryContent": "Содержание резюме", "copied": "Скопировано", "summaryCopiledToClipboard": "Резюме скопировано в буфер обмена", @@ -1197,9 +1318,11 @@ const Map ruRU = { "summaryGenerated": "Резюме сгенерировано", "generating": "Генерация...", "regenerate": "Сгенерировать заново", - "summaryTimeoutMessage": "Тайм-аут запроса на генерацию резюме, возможно, из-за проблем с сетью или загруженности сервера.", + "summaryTimeoutMessage": + "Тайм-аут запроса на генерацию резюме, возможно, из-за проблем с сетью или загруженности сервера.", "deleteTranslationRecord": "Удалить запись перевода", - "deleteTranslationConfirm": "Вы уверены, что хотите удалить эту запись перевода? Это действие необратимо.", + "deleteTranslationConfirm": + "Вы уверены, что хотите удалить эту запись перевода? Это действие необратимо.", "originalText": "Оригинальный текст", "translatedText": "Переведенный текст", "sessionSummary": "Резюме сессии", @@ -1227,19 +1350,26 @@ const Map ruRU = { // 配对状态文本 "readyToPair": "Готово к сопряжению", "preparingPairingEnvironment": "Подготовка среды для сопряжения...", - "connectDeepSoundViaSystemBluetooth": "Пожалуйста, сначала подключитесь к устройству Voitrans через системный Bluetooth", + "connectDeepSoundViaSystemBluetooth": + "Пожалуйста, сначала подключитесь к устройству Voitrans через системный Bluetooth", "deviceBindingConfirm": "Подтверждение привязки устройства...", "establishingDeviceAssociation": "Установление связи с устройством...", "waitingCompletePairing": "Пожалуйста, подождите, завершается сопряжение...", - "pairingSuccessRedirecting": "Сопряжение успешно! Перенаправление на главную страницу...", + "pairingSuccessRedirecting": + "Сопряжение успешно! Перенаправление на главную страницу...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Убедитесь, что вы подключены к устройству Voitrans", - "deviceAlreadyBoundToOtherAccount": "Это устройство уже привязано к другому аккаунту", - "deviceAssociationFailed": "Не удалось связать устройство, попробуйте еще раз", - "scanTimeoutEnsureDeviceNearby": "Тайм-аут сканирования, убедитесь, что устройство находится поблизости", + "ensureConnectedDeepSoundDevice": + "Убедитесь, что вы подключены к устройству Voitrans", + "deviceAlreadyBoundToOtherAccount": + "Это устройство уже привязано к другому аккаунту", + "deviceAssociationFailed": + "Не удалось связать устройство, попробуйте еще раз", + "scanTimeoutEnsureDeviceNearby": + "Тайм-аут сканирования, убедитесь, что устройство находится поблизости", "networkError": "Ошибка сети", - "authorizationFailedCheckCode": "Ошибка авторизации, проверьте правильность кода авторизации", + "authorizationFailedCheckCode": + "Ошибка авторизации, проверьте правильность кода авторизации", "pairingFailedRetry": "Не удалось выполнить сопряжение, попробуйте еще раз", // 配对控制器相关 @@ -1248,53 +1378,65 @@ const Map ruRU = { 'deviceDisconnected': 'Устройство отключено', 'readyToStartPairing': 'Готово к началу сопряжения', 'checkingEnvironment': 'Проверка среды...', - 'ensureHeadsetOnAndPairingMode': 'Убедитесь, что наушники включены и находятся в режиме сопряжения', + 'ensureHeadsetOnAndPairingMode': + 'Убедитесь, что наушники включены и находятся в режиме сопряжения', //'goToBluetoothSettings': '前往蓝牙设置', //'verifyingDevice': '正在验证设备...', //'confirmBinding': '确认绑定', //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Установление безопасного соединения...', - 'needManualBindingAuthCode': 'Требуется код авторизации для ручной привязки...', + 'needManualBindingAuthCode': + 'Требуется код авторизации для ручной привязки...', 'pairingSuccessful': 'Сопряжение успешно!', 'enableBluetooth': 'Включить Bluetooth', 'grantPermissions': 'Предоставить разрешения', 'retryAssociation': 'Повторить связывание', 'retryAuthorization': 'Повторить авторизацию', - 'pleaseGrantNecessaryPermissions': 'Пожалуйста, предоставьте необходимые разрешения', + 'pleaseGrantNecessaryPermissions': + 'Пожалуйста, предоставьте необходимые разрешения', 'checkFailedRetry': 'Проверка не удалась, попробуйте еще раз', 'pleaseConnectDeepSoundDevice': 'Пожалуйста, подключите устройство Voitrans', 'verificationFailedRetry': 'Проверка не удалась, попробуйте еще раз', 'invalidDeviceAddress': 'Неверный адрес устройства', 'bleDeviceAssociationFailed': 'Не удалось связать устройство BLE', - 'deviceAssociationFailedRetry': 'Не удалось связать устройство, попробуйте еще раз', + 'deviceAssociationFailedRetry': + 'Не удалось связать устройство, попробуйте еще раз', 'bleConnectionTimeoutRetry': 'Тайм-аут подключения BLE, попробуйте еще раз', 'blePairingStartupFailed': 'Не удалось запустить сопряжение BLE', 'bleConnectionFailed': 'Не удалось подключиться через BLE', - 'deviceAuthorizationFailedCheckCode': 'Ошибка авторизации устройства, проверьте код авторизации', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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': 'Оставить отзыв или предложение', - 'feedbackDescription': 'Пожалуйста, опишите проблему, с которой вы столкнулись, или ваше предложение', + 'feedbackDescription': + 'Пожалуйста, опишите проблему, с которой вы столкнулись, или ваше предложение', 'feedbackHint': 'Пожалуйста, введите ваш отзыв...', 'feedbackRequired': 'Пожалуйста, введите содержание отзыва', 'contactInfo': 'Контактная информация', 'contactHint': 'E-mail/Телефон, чтобы мы могли с вами связаться', 'submit': 'Отправить', 'feedbackSubmitSuccess': 'Отзыв успешно отправлен, спасибо за ваш отзыв!', - 'feedbackSubmitFailed': 'Не удалось отправить отзыв, попробуйте еще раз позже', + 'feedbackSubmitFailed': + 'Не удалось отправить отзыв, попробуйте еще раз позже', // OTA升级模块 - "upgradeExitConfirm": "Идет обновление, выход прервет процесс обновления, вы уверены, что хотите выйти?", + "upgradeExitConfirm": + "Идет обновление, выход прервет процесс обновления, вы уверены, что хотите выйти?", "deviceModel": "Модель устройства", "unknownDevice": "Неизвестное устройство", "currentFirmwareVersion": "Текущая версия прошивки", @@ -1307,14 +1449,19 @@ const Map ruRU = { "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": "Пожалуйста, держите устройство подключенным, не закрывайте приложение", + "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": "Зарядка", "updateContent": "Содержание обновления", - "removeEarbudsEnsureBattery": "Извлеките оба наушника и убедитесь, что уровень заряда батареи в обоих превышает 20%", + "removeEarbudsEnsureBattery": + "Извлеките оба наушника и убедитесь, что уровень заряда батареи в обоих превышает 20%", // 音乐列表页面 "noMusic": "Нет музыки", // 暂无音乐 @@ -1376,8 +1523,10 @@ const Map ruRU = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 464490f26..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", @@ -71,7 +72,8 @@ const Map skSK = { // 登录页 "welcome": "Vitajte", - "loginTips": "Prihláste sa alebo sa zaregistrujte pomocou telefónneho čísla alebo e-mailu", + "loginTips": + "Prihláste sa alebo sa zaregistrujte pomocou telefónneho čísla alebo e-mailu", "accountNumber": "Telefónne číslo alebo e-mail", "verificationCode": "Overovací kód", "getCode": "Získať kód", @@ -90,7 +92,8 @@ const Map skSK = { "tip": "Tip", "pleaseEnterCompleteCode": "Zadajte kompletný overovací kód", "loginFailed": "Prihlásenie zlyhalo, skúste to znova", - 'pleaseAcceptPrivacyPolicy': 'Najprv si prečítajte a súhlaste so Zásadami ochrany osobných údajov a Používateľskou zmluvou', + 'pleaseAcceptPrivacyPolicy': + 'Najprv si prečítajte a súhlaste so Zásadami ochrany osobných údajov a Používateľskou zmluvou', "enterVerificationCode": "Zadajte overovací kód", "verificationCodeSentTo": "Overovací kód bol odoslaný na", "resendVerificationCode": "Znova odoslať overovací kód", @@ -99,7 +102,8 @@ const Map skSK = { // 隐私政策弹窗 "loginDeclaration": "Vyhlásenie Voitrans", // Voitrans 声明 - "welcomeToThisApp": "Vitajte v Voitrans, prečítajte si prosím pozorne", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Vitajte v Voitrans, prečítajte si prosím pozorne", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +119,29 @@ const Map skSK = { "signal": "Signál", "deviceId": "ID zariadenia", "firmwareVersion": "Verzia firmvéru", - "disconnectedDevice": "Žiadne zariadenie nie je pripojené, kliknite na tlačidlo nižšie pre pripojenie", + "disconnectedDevice": + "Žiadne zariadenie nie je pripojené, kliknite na tlačidlo nižšie pre pripojenie", "connectDevice": "Pripojiť zariadenie", "topAiExperiences": "Najlepšie AI zážitky", "aiAssistant": "Všestranný AI asistent", - "aiAssistantInfo": "Exkluzívny konzultant 24/7, odpovedá na otázky, poskytuje návrhy", + "aiAssistantInfo": + "Exkluzívny konzultant 24/7, odpovedá na otázky, poskytuje návrhy", "interpretation": "Simultánne tlmočenie", - "simultaneousInterpretationInfo": "Preklad v reálnom čase vo viac ako 80 jazykoch, bezstarostné cestovanie do zahraničia", + "simultaneousInterpretationInfo": + "Preklad v reálnom čase vo viac ako 80 jazykoch, bezstarostné cestovanie do zahraničia", "aiCompanion": "Rodinný spoločník", "aiCompanionInfo": "Rozumie vám, teplé spoločenstvo", "homeSlogan": "Pripájanie sveta, presahujúce zvuk", - "turnEarphones": "Otvorte nabíjacie puzdro slúchadiel a vložte si slúchadlá do uší", + "turnEarphones": + "Otvorte nabíjacie puzdro slúchadiel a vložte si slúchadlá do uší", "currentlyConnected": "Momentálne pripojené:", "unsystemSetup": "Prejsť do systémových nastavení", "talkLater": "Neskôr", "initializing": "Inicializácia...", "bluetoothInitializationFailure": "Inicializácia služby Bluetooth zlyhala", "checkingPermissions": "Kontrola povolení...", - "lackPermissions": "Chýbajú povolenia Bluetooth a je potrebné povoliť prístup k lokáli", + "lackPermissions": + "Chýbajú povolenia Bluetooth a je potrebné povoliť prístup k lokáli", "searchingDevice": "Vyhľadávanie zariadení...", "findConnectedDevice": "Nájdené pripojené zariadenie", "notFound": "Nenájdené žiadne pripojené Bluetooth zariadenie", @@ -169,13 +178,15 @@ const Map skSK = { "faceToFaceTranslation": "Preklad tvárou v tvár", 'audioVideoTranslation': 'Preklad zvuku a videa', 'callTranslation': 'Preklad hovorov', - "simultaneousTranslationInfo": "Preklad v reálnom čase vo viac ako 80 jazykoch", + "simultaneousTranslationInfo": + "Preklad v reálnom čase vo viac ako 80 jazykoch", "aiGirlfriend": "AI priateľka", "aiGirlfriendInfo": "Inteligentný spoločník, chatujte kedykoľvek", "healthConsultant": "Multifunkčný AI chat", "healthConsultantInfo": "Ponúka viac funkcií AI chatu", "conferenceAssistant": "Asistent pre obchodné stretnutia", - "conferenceAssistantInfo": "Záznam zápisnice v reálnom čase, viacjazyčný preklad", + "conferenceAssistantInfo": + "Záznam zápisnice v reálnom čase, viacjazyčný preklad", "usageStats": "Statistiky využitia", "usageStatsInfo": "Zobrazte vaše využitie aplikácie", "scene": "Scenár", @@ -218,7 +229,8 @@ const Map skSK = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +286,10 @@ const Map skSK = { '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.', + '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', @@ -284,27 +298,35 @@ const Map skSK = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +335,10 @@ const Map skSK = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +353,8 @@ const Map skSK = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Preskočiť", @@ -355,7 +380,8 @@ const Map skSK = { '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”', + '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', @@ -405,7 +431,8 @@ const Map skSK = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +487,54 @@ const Map skSK = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +546,8 @@ const Map skSK = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +567,8 @@ const Map skSK = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +617,8 @@ const Map skSK = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +643,8 @@ const Map skSK = { "cloudSync": "Nákup synchronizácie v cloude", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Pripojené zariadenie:", "accountId": "ID účtu:", "systemSetting": "Systémové nastavenie", @@ -621,9 +666,11 @@ const Map skSK = { "voiceServiceInfo": "Výber služby rozpoznávania a syntézy reči", "selectVoiceService": "Vyberte hlasovú službu", "azureVoiceService": "Hlasová služba Azure", - "azureVoiceServiceInfo": "Cloudová hlasová služba spoločnosti Microsoft, podporuje vysokokvalitnú syntézu a rozpoznávanie reči", + "azureVoiceServiceInfo": + "Cloudová hlasová služba spoločnosti Microsoft, podporuje vysokokvalitnú syntézu a rozpoznávanie reči", "flutterVoiceService": "Lokálna hlasová služba Flutter", - "flutterVoiceServiceInfo": "Lokálna hlasová služba zariadenia, možno použiť bez pripojenia na internet", + "flutterVoiceServiceInfo": + "Lokálna hlasová služba zariadenia, možno použiť bez pripojenia na internet", 'timbreService': 'Služba zafarbenia hlasu', 'timbreServiceInfo': 'Vyberte službu syntézy reči so zafarbením hlasu', 'defaultTimbre': 'Predvolené zafarbenie hlasu', @@ -652,7 +699,8 @@ const Map skSK = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Hlasový chat v reálnom čase", - "realtimeVoiceChatInfo": "Vyskúšajte funkciu inteligentnej hlasovej interakcie (ukážka funkcie)", + "realtimeVoiceChatInfo": + "Vyskúšajte funkciu inteligentnej hlasovej interakcie (ukážka funkcie)", "loading": "Načítava sa...", //设备管理页面 @@ -667,7 +715,8 @@ const Map skSK = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -721,10 +770,14 @@ const Map skSK = { '• Ovládať funkcie slúchadiel\n\n' 'Ako vám môžem pomôcť?', 'microphonePermission': 'Mikrofón', - 'voiceRecognitionPermissionText': 'Funkcia rozpoznávania reči vyžaduje prístup k mikrofónu.', - 'voiceTranslationPermissionText': 'Funkcia rozpoznávania a prekladu reči vyžaduje prístup k mikrofónu.', - 'phoneCallPermissionText': 'Funkcia volania vyžaduje prístup k mikrofónu pre hlasové hovory.', - 'permissionDeniedText': 'Trvalo ste odmietli povolenie pre mikrofón, prejdite do systémových nastavení, aby ste ho povolili.', + 'voiceRecognitionPermissionText': + 'Funkcia rozpoznávania reči vyžaduje prístup k mikrofónu.', + 'voiceTranslationPermissionText': + 'Funkcia rozpoznávania a prekladu reči vyžaduje prístup k mikrofónu.', + 'phoneCallPermissionText': + 'Funkcia volania vyžaduje prístup k mikrofónu pre hlasové hovory.', + 'permissionDeniedText': + 'Trvalo ste odmietli povolenie pre mikrofón, prejdite do systémových nastavení, aby ste ho povolili.', 'startVoiceInput': 'Začať hlasový vstup', 'startPhoneCallMode': 'Začať režim volania, začať hlasový vstup', @@ -747,7 +800,8 @@ const Map skSK = { 'privacyRelated': 'Súvisiace s ochranou osobných údajov', 'copyrightViolation': 'Porušenie mojich autorských práv, dobrého mena atď.', 'other': 'Iné', - 'reportDescriptionHint': 'Chceme vedieť dôvod vášho hlásenia, môžete opísať problém, s ktorým ste sa stretli.', + 'reportDescriptionHint': + 'Chceme vedieť dôvod vášho hlásenia, môžete opísať problém, s ktorým ste sa stretli.', //'submit': '提交', //Message_bubble @@ -779,14 +833,22 @@ const Map skSK = { 'lowest': 'Najnižšia', 'futureForecast': 'Budúca predpoveď', 'hotWeatherTip': 'Dnes je horúco, dávajte si pozor na úpal a pite veľa vody', - 'coldWeatherTip': 'Dnes je nízka teplota, oblečte sa teplo, keď idete von, aby ste neprechladli', - 'rainyWeatherTip': 'Dnes prší, vezmite si dáždnik, keď idete von, a dávajte si pozor na cestách', - 'snowyWeatherTip': 'Dnes sneží, cesta je klzká, dávajte si pozor a teplo sa oblečte', - 'foggyWeatherTip': 'Dnes je hmla, viditeľnosť je nízka, noste rúško, keď idete von', - 'windyWeatherTip': 'Dnes fúka silný vietor, dávajte si pozor, keď idete von, a zaistite si veci', - 'sunnyWeatherTip': 'Dnes je slnečno a silné UV žiarenie, používajte opaľovací krém, keď idete von', - 'temperatureDifferenceTip': 'Dnes je veľký rozdiel teplôt medzi dňom a nocou, prispôsobte si oblečenie', - 'comfortableWeatherTip': 'Dnes je príjemné počasie, skvelý čas na vonkajšie aktivity', + 'coldWeatherTip': + 'Dnes je nízka teplota, oblečte sa teplo, keď idete von, aby ste neprechladli', + 'rainyWeatherTip': + 'Dnes prší, vezmite si dáždnik, keď idete von, a dávajte si pozor na cestách', + 'snowyWeatherTip': + 'Dnes sneží, cesta je klzká, dávajte si pozor a teplo sa oblečte', + 'foggyWeatherTip': + 'Dnes je hmla, viditeľnosť je nízka, noste rúško, keď idete von', + 'windyWeatherTip': + 'Dnes fúka silný vietor, dávajte si pozor, keď idete von, a zaistite si veci', + 'sunnyWeatherTip': + 'Dnes je slnečno a silné UV žiarenie, používajte opaľovací krém, keď idete von', + 'temperatureDifferenceTip': + 'Dnes je veľký rozdiel teplôt medzi dňom a nocou, prispôsobte si oblečenie', + 'comfortableWeatherTip': + 'Dnes je príjemné počasie, skvelý čas na vonkajšie aktivity', "monday": "Po", "tuesday": "Ut", "wednesday": "St", @@ -838,22 +900,28 @@ const Map skSK = { "logout": "Odhlásiť sa", "logoutTips": "Ste si istí, že sa chcete odhlásiť z aktuálneho účtu?", '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äť.', + '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': 'Sieťové pripojenie zlyhalo, skontrolujte nastavenia siete a skúste to znova', - 'serverTemporarilyUnavailable': 'Server je dočasne nedostupný, skúste to znova neskôr', + 'networkConnectionFailed': + 'Sieťové pripojenie zlyhalo, skontrolujte nastavenia siete a skúste to znova', + 'serverTemporarilyUnavailable': + 'Server je dočasne nedostupný, skúste to znova neskôr', 'loginExpiredPleaseRelogin': 'Vaša relácia vypršala, prihláste sa znova', 'noPermissionForThisOperation': 'Nemáte povolenie na túto operáciu', 'requestedResourceNotFound': 'Požadovaný zdroj sa nenašiel', - 'imageProcessingFailedPleaseReselect': 'Spracovanie obrázka zlyhalo, vyberte iný obrázok', + 'imageProcessingFailedPleaseReselect': + 'Spracovanie obrázka zlyhalo, vyberte iný obrázok', 'operationFailedPleaseRetry': 'Operácia zlyhala, skúste to znova', 'serverReturnedError': 'Server vrátil chybu', 'serverError': 'Chyba servera', - 'networkConnectionFailedCheckSettings': 'Sieťové pripojenie zlyhalo, skontrolujte nastavenia siete', - 'serverInternalErrorRetryLater': 'Interná chyba servera, skúste to znova neskôr', + 'networkConnectionFailedCheckSettings': + 'Sieťové pripojenie zlyhalo, skontrolujte nastavenia siete', + 'serverInternalErrorRetryLater': + 'Interná chyba servera, skúste to znova neskôr', // Profile 用户交互 //'error': '错误', @@ -871,14 +939,19 @@ const Map skSK = { // 账号服务相关 'clearUserDataFailed': 'Vymazanie používateľských údajov zlyhalo', // 清理用户数据失败 - 'deleteUserDataFailed': 'Odstránenie 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', // 删除账号过程发生错误 + '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á', // AccountService 已初始化 + 'allUserDataClearSuccess': + 'Všetky používateľské údaje úspešne vymazané', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Služba účtu bola inicializovaná', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Získanie stavu povolenia zlyhalo', @@ -901,10 +974,14 @@ const Map skSK = { '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': 'Používa sa na čítanie a správu udalostí a pripomienok v kalendári', - 'locationPermissionDesc': 'Používa sa na získanie informácií o aktuálnej polohe', + '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': + 'Používa sa na čítanie a správu udalostí a pripomienok v kalendári', + 'locationPermissionDesc': + 'Používa sa na získanie informácií o aktuálnej polohe', 'appFunctionNeeds': 'Funkcia aplikácie vyžaduje', 'authorized': 'Autorizované', 'unauthorized': 'Neautorizované', @@ -914,44 +991,69 @@ const Map skSK = { 'permissionGranted': 'Povolenie udelené', 'permissionRequestError': 'Chyba pri žiadaní o povolenie', '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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1063,8 @@ const Map skSK = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1073,10 @@ const Map skSK = { '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', // 无法打开应用商店提示 - 'updateErrorRetry': 'Počas aktualizácie sa vyskytla chyba, skúste to znova neskôr', // 更新错误重试提示 + 'cannotOpenAppStore': + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-mail", @@ -1107,7 +1212,8 @@ const Map skSK = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1229,12 @@ const Map skSK = { "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äť.", + "clearHistoryConfirm": + "Ste si istí, že chcete vymazať celú históriu prekladov? Túto akciu nie je možné vrátiť späť.", "unknownLanguage": "Neznámy jazyk", "deleteSessionRecord": "Odstrániť záznam relácie", - "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äť.", + "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äť.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1266,20 @@ const Map skSK = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1302,8 @@ const Map skSK = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Pôvodný záznam", "recordSummary": "Zhrnutie záznamu", - "clickToGenerateSummary": "Kliknite na tlačidlo nižšie pre vygenerovanie zhrnutia relácie", + "clickToGenerateSummary": + "Kliknite na tlačidlo nižšie pre vygenerovanie zhrnutia relácie", "summaryContent": "Obsah zhrnutia", "copied": "Skopírované", "summaryCopiledToClipboard": "Zhrnutie skopírované do schránky", @@ -1197,9 +1311,11 @@ const Map skSK = { "summaryGenerated": "Zhrnutie vygenerované", "generating": "Generuje sa...", "regenerate": "Znova vygenerovať", - "summaryTimeoutMessage": "Požiadavka na generovanie zhrnutia vypršala, môže to byť spôsobené problémami so sieťou alebo zaneprázdneným serverom.", + "summaryTimeoutMessage": + "Požiadavka na generovanie zhrnutia vypršala, môže to byť spôsobené problémami so sieťou alebo zaneprázdneným serverom.", "deleteTranslationRecord": "Odstrániť záznam prekladu", - "deleteTranslationConfirm": "Ste si istí, že chcete odstrániť tento záznam prekladu? Túto akciu nie je možné vrátiť späť.", + "deleteTranslationConfirm": + "Ste si istí, že chcete odstrániť tento záznam prekladu? Túto akciu nie je možné vrátiť späť.", "originalText": "Pôvodný text", "translatedText": "Preložený text", "sessionSummary": "Zhrnutie relácie", @@ -1227,19 +1343,25 @@ const Map skSK = { // 配对状态文本 "readyToPair": "Pripravené na párovanie", "preparingPairingEnvironment": "Príprava prostredia na párovanie...", - "connectDeepSoundViaSystemBluetooth": "Najprv sa pripojte k zariadeniu Voitrans cez systémový Bluetooth", + "connectDeepSoundViaSystemBluetooth": + "Najprv sa pripojte k zariadeniu Voitrans cez systémový Bluetooth", "deviceBindingConfirm": "Potvrdenie prepojenia zariadenia...", "establishingDeviceAssociation": "Vytvára sa priradenie zariadenia...", "waitingCompletePairing": "Počkajte, prosím, párovanie sa dokončuje...", - "pairingSuccessRedirecting": "Párovanie úspešné! Presmerováva sa na domovskú stránku...", + "pairingSuccessRedirecting": + "Párovanie úspešné! Presmerováva sa na domovskú stránku...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Uistite sa, že ste pripojení k zariadeniu Voitrans", - "deviceAlreadyBoundToOtherAccount": "Toto zariadenie je už prepojené s iným účtom", + "ensureConnectedDeepSoundDevice": + "Uistite sa, že ste pripojení k zariadeniu Voitrans", + "deviceAlreadyBoundToOtherAccount": + "Toto zariadenie je už prepojené s iným účtom", "deviceAssociationFailed": "Priradenie zariadenia zlyhalo, skúste to znova", - "scanTimeoutEnsureDeviceNearby": "Skenovanie vypršalo, uistite sa, že je zariadenie v blízkosti", + "scanTimeoutEnsureDeviceNearby": + "Skenovanie vypršalo, uistite sa, že je zariadenie v blízkosti", "networkError": "Chyba siete", - "authorizationFailedCheckCode": "Autorizácia zlyhala, skontrolujte, či je autorizačný kód správny", + "authorizationFailedCheckCode": + "Autorizácia zlyhala, skontrolujte, či je autorizačný kód správny", "pairingFailedRetry": "Párovanie zlyhalo, skúste to znova", // 配对控制器相关 @@ -1248,13 +1370,15 @@ const Map skSK = { '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', + '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...', + 'needManualBindingAuthCode': + 'Vyžaduje sa kód pre autorizáciu manuálneho prepojenia...', 'pairingSuccessful': 'Párovanie úspešné!', 'enableBluetooth': 'Zapnúť Bluetooth', 'grantPermissions': 'Udeliť povolenia', @@ -1266,35 +1390,45 @@ const Map skSK = { 'verificationFailedRetry': 'Overenie zlyhalo, skúste to znova', 'invalidDeviceAddress': 'Neplatná adresa zariadenia', 'bleDeviceAssociationFailed': 'Priradenie zariadenia BLE zlyhalo', - 'deviceAssociationFailedRetry': 'Priradenie zariadenia zlyhalo, skúste to znova', + 'deviceAssociationFailedRetry': + 'Priradenie zariadenia zlyhalo, skúste to znova', 'bleConnectionTimeoutRetry': 'Časový limit pripojenia BLE, skúste to znova', 'blePairingStartupFailed': 'Spustenie párovania BLE zlyhalo', 'bleConnectionFailed': 'Pripojenie BLE zlyhalo', - 'deviceAuthorizationFailedCheckCode': 'Autorizácia zariadenia zlyhala, skontrolujte autorizačný kód', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', - 'feedbackDescription': 'Opíšte problém, s ktorým ste sa stretli, alebo váš návrh', + 'feedbackDescription': + 'Opíšte problém, s ktorým ste sa stretli, alebo váš návrh', 'feedbackHint': 'Zadajte svoju spätnú väzbu...', 'feedbackRequired': 'Zadajte obsah spätnej väzby', 'contactInfo': 'Kontaktné informácie', 'contactHint': 'E-mail/Telefón, aby sme vás mohli kontaktovať', 'submit': 'Odoslať', - 'feedbackSubmitSuccess': 'Spätná väzba úspešne odoslaná, ďakujeme za vašu spätnú väzbu!', - 'feedbackSubmitFailed': 'Odoslanie spätnej väzby zlyhalo, skúste to znova neskôr', + 'feedbackSubmitSuccess': + 'Spätná väzba úspešne odoslaná, ďakujeme za vašu spätnú väzbu!', + 'feedbackSubmitFailed': + 'Odoslanie spätnej väzby zlyhalo, skúste to znova neskôr', // OTA升级模块 - "upgradeExitConfirm": "Prebieha aktualizácia, odchodom sa proces preruší, ste si istí, že chcete odísť?", + "upgradeExitConfirm": + "Prebieha aktualizácia, odchodom sa proces preruší, ste si istí, že chcete odísť?", "deviceModel": "Model zariadenia", "unknownDevice": "Neznáme zariadenie", "currentFirmwareVersion": "Aktuálna verzia firmvéru", @@ -1307,14 +1441,19 @@ const Map skSK = { "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", + "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", "charging": "Nabíja sa", "updateContent": "Obsah aktualizácie", - "removeEarbudsEnsureBattery": "Vyberte obe slúchadlá a uistite sa, že batéria oboch je nad 20%", + "removeEarbudsEnsureBattery": + "Vyberte obe slúchadlá a uistite sa, že batéria oboch je nad 20%", // 音乐列表页面 "noMusic": "Žiadna hudba", // 暂无音乐 @@ -1376,8 +1515,10 @@ const Map skSK = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 740e2950a..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", @@ -71,7 +72,8 @@ const Map slSI = { // 登录页 "welcome": "Dobrodošli", - "loginTips": "Prijavite se ali registrirajte s svojo telefonsko številko ali e-pošto", + "loginTips": + "Prijavite se ali registrirajte s svojo telefonsko številko ali e-pošto", "accountNumber": "Telefonska številka ali e-pošta", "verificationCode": "Verifikacijska koda", "getCode": "Pridobi kodo", @@ -90,7 +92,8 @@ const Map slSI = { "tip": "Namig", "pleaseEnterCompleteCode": "Vnesite celotno verifikacijsko kodo", "loginFailed": "Prijava ni uspela, poskusite znova", - 'pleaseAcceptPrivacyPolicy': 'Najprej preberite in se strinjajte s Politiko zasebnosti in Uporabniškim sporazumom', + 'pleaseAcceptPrivacyPolicy': + 'Najprej preberite in se strinjajte s Politiko zasebnosti in Uporabniškim sporazumom', "enterVerificationCode": "Vnesite verifikacijsko kodo", "verificationCodeSentTo": "Verifikacijska koda je bila poslana na", "resendVerificationCode": "Ponovno pošlji verifikacijsko kodo", @@ -99,7 +102,8 @@ const Map slSI = { // 隐私政策弹窗 "loginDeclaration": "Izjava Voitrans", // Voitrans 声明 - "welcomeToThisApp": "Dobrodošli v Voitrans, prosimo, da natančno preberete", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Dobrodošli v Voitrans, prosimo, da natančno preberete", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,13 +119,16 @@ const Map slSI = { "signal": "Signal", "deviceId": "ID naprave", "firmwareVersion": "Različica vdelane programske opreme", - "disconnectedDevice": "Nobena naprava ni povezana, kliknite spodnji gumb za povezavo", + "disconnectedDevice": + "Nobena naprava ni povezana, kliknite spodnji gumb za povezavo", "connectDevice": "Poveži napravo", "topAiExperiences": "Vrhunske izkušnje z AI", "aiAssistant": "Vsestranski pomočnik AI", - "aiAssistantInfo": "Ekskluzivni svetovalec 24/7, odgovarja na vprašanja, daje predloge", + "aiAssistantInfo": + "Ekskluzivni svetovalec 24/7, odgovarja na vprašanja, daje predloge", "interpretation": "Simultano tolmačenje", - "simultaneousInterpretationInfo": "Prevajanje v realnem času v več kot 80 jezikov, brezskrbna potovanja v tujino", + "simultaneousInterpretationInfo": + "Prevajanje v realnem času v več kot 80 jezikov, brezskrbna potovanja v tujino", "aiCompanion": "Družinski spremljevalec", "aiCompanionInfo": "Razume vas, topla družba", "homeSlogan": "Povezovanje sveta, preseganje zvoka", @@ -130,9 +137,11 @@ const Map slSI = { "unsystemSetup": "Pojdi na sistemske nastavitve", "talkLater": "Kasneje", "initializing": "Inicializacija...", - "bluetoothInitializationFailure": "Inicializacija storitve Bluetooth ni uspela", + "bluetoothInitializationFailure": + "Inicializacija storitve Bluetooth ni uspela", "checkingPermissions": "Preverjanje dovoljenj...", - "lackPermissions": "Manjkajo dovoljenja za Bluetooth in je potrebno omogočiti dostop do lokacije", + "lackPermissions": + "Manjkajo dovoljenja za Bluetooth in je potrebno omogočiti dostop do lokacije", "searchingDevice": "Iskanje naprav...", "findConnectedDevice": "Najdena povezana naprava", "notFound": "Nobena povezana naprava Bluetooth ni bila najdena", @@ -169,13 +178,15 @@ const Map slSI = { "faceToFaceTranslation": "Prevajanje iz oči v oči", 'audioVideoTranslation': 'Prevajanje avdia in videa', 'callTranslation': 'Prevajanje klicev', - "simultaneousTranslationInfo": "Prevajanje v realnem času v več kot 80 jezikov", + "simultaneousTranslationInfo": + "Prevajanje v realnem času v več kot 80 jezikov", "aiGirlfriend": "AI dekle", "aiGirlfriendInfo": "Inteligentni spremljevalec, klepetajte kadarkoli", "healthConsultant": "Večnamenski AI klepet", "healthConsultantInfo": "Ponuja več funkcij AI klepeta", "conferenceAssistant": "Pomočnik za poslovne sestanke", - "conferenceAssistantInfo": "Zapisovanje zapisnikov v realnem času, večjezično prevajanje", + "conferenceAssistantInfo": + "Zapisovanje zapisnikov v realnem času, večjezično prevajanje", "usageStats": "Statistika uporabe", "usageStatsInfo": "Pregledajte vaše uporabo aplikacije", "scene": "Scenarij", @@ -218,7 +229,8 @@ const Map slSI = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +286,10 @@ const Map slSI = { '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.', + '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', @@ -284,27 +298,35 @@ const Map slSI = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +335,10 @@ const Map slSI = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +353,8 @@ const Map slSI = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Preskoči", @@ -355,7 +380,8 @@ const Map slSI = { '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”', + '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', @@ -405,7 +431,8 @@ const Map slSI = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +487,54 @@ const Map slSI = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +546,8 @@ const Map slSI = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +567,8 @@ const Map slSI = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +617,8 @@ const Map slSI = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +643,8 @@ const Map slSI = { "cloudSync": "Nákup sinkronizacije v oblaku", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Povezana naprava:", "accountId": "ID računa:", "systemSetting": "Sistemska nastavitev", @@ -612,7 +657,8 @@ const Map slSI = { "privacySettings": "Nastavitve zasebnosti", "privacySettingsInfo": "Upravljanje zbiranja podatkov in dovoljenj", "permissionManagement": "Upravljanje dovoljenj", // 权限管理 - "permissionManagementInfo": "Upravljanje nastavitev dovoljenj aplikacije", // 管理应用权限设置 + "permissionManagementInfo": + "Upravljanje nastavitev dovoljenj aplikacije", // 管理应用权限设置 "aboutApplication": "O aplikaciji", "versions": "Različica", "checkUpdates": "Preveri posodobitve", @@ -621,9 +667,11 @@ const Map slSI = { "voiceServiceInfo": "Izbira storitve za prepoznavanje in sintezo govora", "selectVoiceService": "Izberi glasovno storitev", "azureVoiceService": "Azure glasovna storitev", - "azureVoiceServiceInfo": "Microsoftova glasovna storitev v oblaku, podpira visokokakovostno sintezo in prepoznavanje govora", + "azureVoiceServiceInfo": + "Microsoftova glasovna storitev v oblaku, podpira visokokakovostno sintezo in prepoznavanje govora", "flutterVoiceService": "Lokalna glasovna storitev Flutter", - "flutterVoiceServiceInfo": "Lokalna glasovna storitev naprave, uporaba brez internetne povezave", + "flutterVoiceServiceInfo": + "Lokalna glasovna storitev naprave, uporaba brez internetne povezave", 'timbreService': 'Storitev barve glasu', 'timbreServiceInfo': 'Izberite storitev sinteze govora z barvo glasu', 'defaultTimbre': 'Privzeta barva glasu', @@ -634,7 +682,8 @@ const Map slSI = { 'pleaseRead': 'Preberite na glas', 'completeRecording': 'Dokončaj snemanje', "firmwareUpgrade": "Nadgradnja vdelane programske opreme", - "bleHeadsetFirmwareUpgrade": "Nadgradnja različice vdelane programske opreme slušalk BLE", + "bleHeadsetFirmwareUpgrade": + "Nadgradnja različice vdelane programske opreme slušalk BLE", "deviceManagement": "Upravljanje naprav", "manageConnectedDevices": "Upravljanje povezanih naprav Bluetooth", @@ -652,7 +701,8 @@ const Map slSI = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Glasovni klepet v realnem času", - "realtimeVoiceChatInfo": "Izkusite funkcijo inteligentne glasovne interakcije (predogled funkcije)", + "realtimeVoiceChatInfo": + "Izkusite funkcijo inteligentne glasovne interakcije (predogled funkcije)", "loading": "Nalaganje...", //设备管理页面 @@ -667,7 +717,8 @@ const Map slSI = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -721,10 +772,14 @@ const Map slSI = { '• Upravljam funkcije slušalk\n\n' 'Kako vam lahko pomagam?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': 'Funkcija prepoznavanja govora zahteva dostop do mikrofona.', - 'voiceTranslationPermissionText': 'Funkcija prepoznavanja in prevajanja govora zahteva dostop do mikrofona.', - 'phoneCallPermissionText': 'Funkcija klicanja zahteva dostop do mikrofona za glasovne klice.', - 'permissionDeniedText': 'Trajno ste zavrnili dovoljenje za mikrofon, prosimo, pojdite v sistemske nastavitve, da ga omogočite.', + 'voiceRecognitionPermissionText': + 'Funkcija prepoznavanja govora zahteva dostop do mikrofona.', + 'voiceTranslationPermissionText': + 'Funkcija prepoznavanja in prevajanja govora zahteva dostop do mikrofona.', + 'phoneCallPermissionText': + 'Funkcija klicanja zahteva dostop do mikrofona za glasovne klice.', + 'permissionDeniedText': + 'Trajno ste zavrnili dovoljenje za mikrofon, prosimo, pojdite v sistemske nastavitve, da ga omogočite.', 'startVoiceInput': 'Začni glasovni vnos', 'startPhoneCallMode': 'Začni način klicanja, začni glasovni vnos', @@ -738,7 +793,8 @@ const Map slSI = { 'report': 'Prijavi', 'submitSuccess': 'Uspešno poslano', 'submitFailed': 'Pošiljanje ni uspelo', - 'reportSubmitted': 'Prijava je bila poslana, obdelali jo bomo v najkrajšem možnem času', + 'reportSubmitted': + 'Prijava je bila poslana, obdelali jo bomo v najkrajšem možnem času', //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Škodljivo/Nevarno', 'pornographicVulgar': 'Pornografsko/Vulgarno', @@ -747,7 +803,8 @@ const Map slSI = { 'privacyRelated': 'Povezano z zasebnostjo', 'copyrightViolation': 'Kršitev mojih avtorskih pravic, ugleda itd.', 'other': 'Drugo', - 'reportDescriptionHint': 'Želimo vedeti, zakaj prijavljate, lahko opišete težavo, s katero ste se soočili.', + 'reportDescriptionHint': + 'Želimo vedeti, zakaj prijavljate, lahko opišete težavo, s katero ste se soočili.', //'submit': '提交', //Message_bubble @@ -778,15 +835,24 @@ const Map slSI = { 'highest': 'Najvišja', 'lowest': 'Najnižja', 'futureForecast': 'Prihodnja napoved', - 'hotWeatherTip': 'Danes je vroče, pazite na vročinsko kap in pijte veliko vode', - 'coldWeatherTip': 'Danes je temperatura nizka, oblecite se toplo, ko greste ven, da se ne prehladite', - 'rainyWeatherTip': 'Danes dežuje, vzemite s seboj dežnik, ko greste ven, in pazite na poti', - 'snowyWeatherTip': 'Danes sneži, cesta je spolzka, pazite in se toplo oblecite', - 'foggyWeatherTip': 'Danes je megla, vidljivost je zmanjšana, nosite masko, ko greste ven', - 'windyWeatherTip': 'Danes piha močan veter, pazite, ko greste ven, in zavarujte svoje stvari', - 'sunnyWeatherTip': 'Danes je sončno in močno UV sevanje, uporabite sončno kremo, ko greste ven', - 'temperatureDifferenceTip': 'Danes je velika razlika v temperaturi med dnevom in nočjo, prilagodite oblačila', - 'comfortableWeatherTip': 'Danes je vreme prijetno, odličen čas za dejavnosti na prostem', + 'hotWeatherTip': + 'Danes je vroče, pazite na vročinsko kap in pijte veliko vode', + 'coldWeatherTip': + 'Danes je temperatura nizka, oblecite se toplo, ko greste ven, da se ne prehladite', + 'rainyWeatherTip': + 'Danes dežuje, vzemite s seboj dežnik, ko greste ven, in pazite na poti', + 'snowyWeatherTip': + 'Danes sneži, cesta je spolzka, pazite in se toplo oblecite', + 'foggyWeatherTip': + 'Danes je megla, vidljivost je zmanjšana, nosite masko, ko greste ven', + 'windyWeatherTip': + 'Danes piha močan veter, pazite, ko greste ven, in zavarujte svoje stvari', + 'sunnyWeatherTip': + 'Danes je sončno in močno UV sevanje, uporabite sončno kremo, ko greste ven', + 'temperatureDifferenceTip': + 'Danes je velika razlika v temperaturi med dnevom in nočjo, prilagodite oblačila', + 'comfortableWeatherTip': + 'Danes je vreme prijetno, odličen čas za dejavnosti na prostem', "monday": "Pon", "tuesday": "Tor", "wednesday": "Sre", @@ -836,24 +902,31 @@ const Map slSI = { "notSet": "Ni nastavljeno", "accountSetting": "Nastavitve računa", "logout": "Odjava", - "logoutTips": "Ali ste prepričani, da se želite odjaviti iz trenutnega računa?", + "logoutTips": + "Ali ste prepričani, da se želite odjaviti iz trenutnega računa?", 'deleteAccount': 'Izbriši račun', - 'deleteAccountTips': 'Ali ste prepričani, da želite trajno izbrisati svoj račun? Tega dejanja ni mogoče razveljaviti', + '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': 'Napaka v omrežni povezavi, preverite nastavitve omrežja in poskusite znova', - 'serverTemporarilyUnavailable': 'Strežnik je začasno nedosegljiv, poskusite znova kasneje', + 'networkConnectionFailed': + 'Napaka v omrežni povezavi, preverite nastavitve omrežja in poskusite znova', + 'serverTemporarilyUnavailable': + 'Strežnik je začasno nedosegljiv, poskusite znova kasneje', 'loginExpiredPleaseRelogin': 'Vaša seja je potekla, prijavite se znova', 'noPermissionForThisOperation': 'Nimate dovoljenja za to operacijo', 'requestedResourceNotFound': 'Zahtevan vir ni bil najden', - 'imageProcessingFailedPleaseReselect': 'Obdelava slike ni uspela, izberite drugo sliko', + 'imageProcessingFailedPleaseReselect': + 'Obdelava slike ni uspela, izberite drugo sliko', 'operationFailedPleaseRetry': 'Operacija ni uspela, poskusite znova', 'serverReturnedError': 'Strežnik je vrnil napako', 'serverError': 'Napaka strežnika', - 'networkConnectionFailedCheckSettings': 'Napaka v omrežni povezavi, preverite nastavitve omrežja', - 'serverInternalErrorRetryLater': 'Notranja napaka strežnika, poskusite znova kasneje', + 'networkConnectionFailedCheckSettings': + 'Napaka v omrežni povezavi, preverite nastavitve omrežja', + 'serverInternalErrorRetryLater': + 'Notranja napaka strežnika, poskusite znova kasneje', // Profile 用户交互 //'error': '错误', @@ -871,14 +944,18 @@ const Map slSI = { // 账号服务相关 'clearUserDataFailed': 'Čiščenje uporabniških podatkov ni uspelo', // 清理用户数据失败 - 'deleteUserDataFailed': 'Brisanje 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', // 删除账号过程发生错误 + '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', // AccountService 已初始化 + 'allUserDataClearSuccess': + 'Vsi uporabniški podatki uspešno počiščeni', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'AccountService je bil inicializiran', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Pridobivanje stanja dovoljenja ni uspelo', @@ -901,10 +978,14 @@ const Map slSI = { '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': 'Uporablja se za branje in upravljanje dogodkov in opomnikov v koledarju', - 'locationPermissionDesc': 'Uporablja se za pridobivanje informacij o trenutni lokaciji', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Uporablja se za ustvarjanje dogodkov in opomnikov v koledarju', + 'calendarFullAccessPermissionDesc': + 'Uporablja se za branje in upravljanje dogodkov in opomnikov v koledarju', + 'locationPermissionDesc': + 'Uporablja se za pridobivanje informacij o trenutni lokaciji', 'appFunctionNeeds': 'Funkcija aplikacije zahteva', 'authorized': 'Avtorizirano', 'unauthorized': 'Neavtorizirano', @@ -913,45 +994,71 @@ const Map slSI = { 'unknownStatus': 'Neznano stanje', 'permissionGranted': 'Dovoljenje je bilo odobreno', 'permissionRequestError': 'Napaka pri zahtevanju dovoljenja', - 'phonePermissionDetailDesc': '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', + 'phonePermissionDetailDesc': + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1068,8 @@ const Map slSI = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1078,10 @@ const Map slSI = { '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', // 无法打开应用商店提示 - 'updateErrorRetry': 'Prišlo je do napake med posodabljanjem, poskusite znova kasneje', // 更新错误重试提示 + 'cannotOpenAppStore': + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-pošta", @@ -1107,7 +1217,8 @@ const Map slSI = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1234,12 @@ const Map slSI = { "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.", + "clearHistoryConfirm": + "Ali ste prepričani, da želite počistiti vso zgodovino prevodov? Tega dejanja ni mogoče razveljaviti.", "unknownLanguage": "Neznan jezik", "deleteSessionRecord": "Izbriši zapis seje", - "deleteSessionConfirm": "Ali ste prepričani, da želite izbrisati vse zapise prevodov za to sejo? Tega dejanja ni mogoče razveljaviti.", + "deleteSessionConfirm": + "Ali ste prepričani, da želite izbrisati vse zapise prevodov za to sejo? Tega dejanja ni mogoče razveljaviti.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1271,20 @@ const Map slSI = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1307,8 @@ const Map slSI = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Originalni zapis", "recordSummary": "Povzetek zapisa", - "clickToGenerateSummary": "Kliknite spodnji gumb za generiranje povzetka seje", + "clickToGenerateSummary": + "Kliknite spodnji gumb za generiranje povzetka seje", "summaryContent": "Vsebina povzetka", "copied": "Kopirano", "summaryCopiledToClipboard": "Povzetek je bil kopiran v odložišče", @@ -1197,9 +1316,11 @@ const Map slSI = { "summaryGenerated": "Povzetek je bil generiran", "generating": "Generiranje...", "regenerate": "Ponovno generiraj", - "summaryTimeoutMessage": "Čas za generiranje povzetka je potekel, morda zaradi težav z omrežjem ali zasedenosti strežnika.", + "summaryTimeoutMessage": + "Čas za generiranje povzetka je potekel, morda zaradi težav z omrežjem ali zasedenosti strežnika.", "deleteTranslationRecord": "Izbriši zapis prevoda", - "deleteTranslationConfirm": "Ali ste prepričani, da želite izbrisati ta zapis prevoda? Tega dejanja ni mogoče razveljaviti.", + "deleteTranslationConfirm": + "Ali ste prepričani, da želite izbrisati ta zapis prevoda? Tega dejanja ni mogoče razveljaviti.", "originalText": "Originalno besedilo", "translatedText": "Prevedeno besedilo", "sessionSummary": "Povzetek seje", @@ -1227,19 +1348,25 @@ const Map slSI = { // 配对状态文本 "readyToPair": "Pripravljen za seznanjanje", "preparingPairingEnvironment": "Priprava okolja za seznanjanje...", - "connectDeepSoundViaSystemBluetooth": "Najprej se povežite z napravo Voitrans prek sistemskega Bluetootha", + "connectDeepSoundViaSystemBluetooth": + "Najprej se povežite z napravo Voitrans prek sistemskega Bluetootha", "deviceBindingConfirm": "Potrditev povezave naprave...", "establishingDeviceAssociation": "Vzpostavljanje povezave z napravo...", "waitingCompletePairing": "Počakajte, seznanjanje se zaključuje...", - "pairingSuccessRedirecting": "Seznanjanje uspelo! Preusmerjanje na domačo stran...", + "pairingSuccessRedirecting": + "Seznanjanje uspelo! Preusmerjanje na domačo stran...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Prepričajte se, da ste povezani z napravo Voitrans", - "deviceAlreadyBoundToOtherAccount": "Ta naprava je že povezana z drugim računom", + "ensureConnectedDeepSoundDevice": + "Prepričajte se, da ste povezani z napravo Voitrans", + "deviceAlreadyBoundToOtherAccount": + "Ta naprava je že povezana z drugim računom", "deviceAssociationFailed": "Povezovanje naprave ni uspelo, poskusite znova", - "scanTimeoutEnsureDeviceNearby": "Čas skeniranja je potekel, prepričajte se, da je naprava v bližini", + "scanTimeoutEnsureDeviceNearby": + "Čas skeniranja je potekel, prepričajte se, da je naprava v bližini", "networkError": "Napaka v omrežju", - "authorizationFailedCheckCode": "Avtorizacija ni uspela, preverite, ali je avtorizacijska koda pravilna", + "authorizationFailedCheckCode": + "Avtorizacija ni uspela, preverite, ali je avtorizacijska koda pravilna", "pairingFailedRetry": "Seznanjanje ni uspelo, poskusite znova", // 配对控制器相关 @@ -1248,13 +1375,15 @@ const Map slSI = { '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', + '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...', + 'needManualBindingAuthCode': + 'Potrebna je koda za avtorizacijo ročne povezave...', 'pairingSuccessful': 'Seznanjanje uspelo!', 'enableBluetooth': 'Omogoči Bluetooth', 'grantPermissions': 'Podeli dovoljenja', @@ -1266,35 +1395,45 @@ const Map slSI = { 'verificationFailedRetry': 'Preverjanje ni uspelo, poskusite znova', 'invalidDeviceAddress': 'Neveljaven naslov naprave', 'bleDeviceAssociationFailed': 'Povezovanje naprave BLE ni uspelo', - 'deviceAssociationFailedRetry': 'Povezovanje naprave ni uspelo, poskusite znova', - 'bleConnectionTimeoutRetry': 'Čas za povezavo BLE je potekel, poskusite znova', + 'deviceAssociationFailedRetry': + 'Povezovanje naprave ni uspelo, poskusite znova', + 'bleConnectionTimeoutRetry': + 'Čas za povezavo BLE je potekel, poskusite znova', 'blePairingStartupFailed': 'Zagon seznanjanja BLE ni uspel', 'bleConnectionFailed': 'Povezava BLE ni uspela', - 'deviceAuthorizationFailedCheckCode': 'Avtorizacija naprave ni uspela, preverite avtorizacijsko kodo', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', - 'feedbackDescription': 'Opišite težavo, s katero ste se soočili, ali svoj predlog', + 'feedbackDescription': + 'Opišite težavo, s katero ste se soočili, ali svoj predlog', 'feedbackHint': 'Vnesite svoje povratne informacije...', 'feedbackRequired': 'Vnesite vsebino povratnih informacij', 'contactInfo': 'Kontaktni podatki', 'contactHint': 'E-pošta/Telefon, da vas lahko kontaktiramo', 'submit': 'Pošlji', 'feedbackSubmitSuccess': 'Povratne informacije uspešno poslane, hvala vam!', - 'feedbackSubmitFailed': 'Pošiljanje povratnih informacij ni uspelo, poskusite znova kasneje', + 'feedbackSubmitFailed': + 'Pošiljanje povratnih informacij ni uspelo, poskusite znova kasneje', // OTA升级模块 - "upgradeExitConfirm": "Nadgradnja poteka, izhod bo prekinil postopek, ste prepričani, da želite izstopiti?", + "upgradeExitConfirm": + "Nadgradnja poteka, izhod bo prekinil postopek, ste prepričani, da želite izstopiti?", "deviceModel": "Model naprave", "unknownDevice": "Neznana naprava", "currentFirmwareVersion": "Trenutna različica vdelane programske opreme", @@ -1307,14 +1446,19 @@ const Map slSI = { "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", + "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", "charging": "Polnjenje", "updateContent": "Vsebina posodobitve", - "removeEarbudsEnsureBattery": "Odstranite obe slušalki in se prepričajte, da je baterija obeh nad 20%", + "removeEarbudsEnsureBattery": + "Odstranite obe slušalki in se prepričajte, da je baterija obeh nad 20%", // 音乐列表页面 "noMusic": "Ni glasbe", // 暂无音乐 @@ -1376,8 +1520,10 @@ const Map slSI = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 a48d0b8fd..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", @@ -90,7 +91,8 @@ const Map srRS = { "tip": "Savet", "pleaseEnterCompleteCode": "Unesite kompletan verifikacioni kod", "loginFailed": "Neuspešno prijavljivanje, pokušajte ponovo", - 'pleaseAcceptPrivacyPolicy': 'Prvo pročitajte i prihvatite Politiku privatnosti i Korisnički ugovor', + 'pleaseAcceptPrivacyPolicy': + 'Prvo pročitajte i prihvatite Politiku privatnosti i Korisnički ugovor', "enterVerificationCode": "Unesite verifikacioni kod", "verificationCodeSentTo": "Verifikacioni kod je poslat na", "resendVerificationCode": "Ponovo pošalji verifikacioni kod", @@ -99,7 +101,8 @@ const Map srRS = { // 隐私政策弹窗 "loginDeclaration": "Voitrans izjava", // Voitrans 声明 - "welcomeToThisApp": "Dobrodošli u Voitrans, molimo vas da pažljivo pročitate", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Dobrodošli u Voitrans, molimo vas da pažljivo pročitate", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +118,30 @@ const Map srRS = { "signal": "Signal", "deviceId": "ID uređaja", "firmwareVersion": "Verzija firmvera", - "disconnectedDevice": "Nijedan uređaj nije povezan, kliknite na dugme ispod da biste se povezali", + "disconnectedDevice": + "Nijedan uređaj nije povezan, kliknite na dugme ispod da biste se povezali", "connectDevice": "Poveži uređaj", "topAiExperiences": "Vrhunska AI iskustva", "aiAssistant": "AI sveobuhvatni asistent", - "aiAssistantInfo": "Ekskluzivni konsultant 24/7, odgovara na pitanja, daje predloge", + "aiAssistantInfo": + "Ekskluzivni konsultant 24/7, odgovara na pitanja, daje predloge", "interpretation": "Simultano prevođenje", - "simultaneousInterpretationInfo": "Prevođenje u realnom vremenu na 80+ jezika, bezbrižna putovanja u inostranstvo", + "simultaneousInterpretationInfo": + "Prevođenje u realnom vremenu na 80+ jezika, bezbrižna putovanja u inostranstvo", "aiCompanion": "Porodični pratilac", "aiCompanionInfo": "Razume vas, toplo društvo", "homeSlogan": "Povezivanje sveta, izvan zvuka", - "turnEarphones": "Otvorite futrolu za punjenje slušalica i stavite slušalice u uši", + "turnEarphones": + "Otvorite futrolu za punjenje slušalica i stavite slušalice u uši", "currentlyConnected": "Trenutno povezano:", "unsystemSetup": "Idite na sistemska podešavanja", "talkLater": "Kasnije", "initializing": "Inicijalizacija...", - "bluetoothInitializationFailure": "Neuspešna inicijalizacija Bluetooth servisa", + "bluetoothInitializationFailure": + "Neuspešna inicijalizacija Bluetooth servisa", "checkingPermissions": "Provera dozvola...", - "lackPermissions": "Nedostaju Bluetooth dozvole i je potrebno omogućiti pristup lokaciji", + "lackPermissions": + "Nedostaju Bluetooth dozvole i je potrebno omogućiti pristup lokaciji", "searchingDevice": "Pretraga uređaja...", "findConnectedDevice": "Pronađen povezan uređaj", "notFound": "Nije pronađen povezan Bluetooth uređaj", @@ -175,7 +184,8 @@ const Map srRS = { "healthConsultant": "Višenamenski AI ćaskanje", "healthConsultantInfo": "Nudi više funkcija AI ćaskanja", "conferenceAssistant": "Asistent za poslovne sastanke", - "conferenceAssistantInfo": "Beleženje zapisnika u realnom vremenu, višejezično prevođenje", + "conferenceAssistantInfo": + "Beleženje zapisnika u realnom vremenu, višejezično prevođenje", "usageStats": "Statistika korišćenja", "usageStatsInfo": "Pregledajte vaše korišćenje aplikacije", "scene": "Scena", @@ -218,7 +228,8 @@ const Map srRS = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +285,10 @@ const Map srRS = { '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.', + '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', @@ -284,27 +297,35 @@ const Map srRS = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +334,10 @@ const Map srRS = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +352,8 @@ const Map srRS = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Preskoči", @@ -355,7 +379,8 @@ const Map srRS = { '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”', + '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', @@ -405,7 +430,8 @@ const Map srRS = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +486,54 @@ const Map srRS = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +545,8 @@ const Map srRS = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +566,8 @@ const Map srRS = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +616,8 @@ const Map srRS = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +642,8 @@ const Map srRS = { "cloudSync": "Nákup sinkronizacije u oblaku", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Povezan uređaj:", "accountId": "ID naloga:", "systemSetting": "Sistemsko podešavanje", @@ -612,7 +656,8 @@ const Map srRS = { "privacySettings": "Podešavanja privatnosti", "privacySettingsInfo": "Upravljanje prikupljanjem podataka i dozvolama", "permissionManagement": "Upravljanje dozvolama", // 权限管理 - "permissionManagementInfo": "Upravljanje podešavanjima dozvola aplikacije", // 管理应用权限设置 + "permissionManagementInfo": + "Upravljanje podešavanjima dozvola aplikacije", // 管理应用权限设置 "aboutApplication": "O aplikaciji", "versions": "Verzija", "checkUpdates": "Proveri ažuriranja", @@ -621,9 +666,11 @@ const Map srRS = { "voiceServiceInfo": "Izbor servisa za prepoznavanje i sintezu govora", "selectVoiceService": "Izaberi govorni servis", "azureVoiceService": "Azure govorni servis", - "azureVoiceServiceInfo": "Microsoftov govorni servis u oblaku, podržava visokokvalitetnu sintezu i prepoznavanje govora", + "azureVoiceServiceInfo": + "Microsoftov govorni servis u oblaku, podržava visokokvalitetnu sintezu i prepoznavanje govora", "flutterVoiceService": "Flutter lokalni govorni servis", - "flutterVoiceServiceInfo": "Lokalni govorni servis uređaja, može se koristiti bez internet konekcije", + "flutterVoiceServiceInfo": + "Lokalni govorni servis uređaja, može se koristiti bez internet konekcije", 'timbreService': 'Servis za boju glasa', 'timbreServiceInfo': 'Izaberite servis za sintezu govora sa bojom glasa', 'defaultTimbre': 'Podrazumevana boja glasa', @@ -652,7 +699,8 @@ const Map srRS = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Glasovno ćaskanje u realnom vremenu", - "realtimeVoiceChatInfo": "Iskusite funkciju inteligentne glasovne interakcije (pregled funkcije)", + "realtimeVoiceChatInfo": + "Iskusite funkciju inteligentne glasovne interakcije (pregled funkcije)", "loading": "Učitavanje...", //设备管理页面 @@ -667,7 +715,8 @@ const Map srRS = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -721,10 +770,14 @@ const Map srRS = { '• Da kontrolišem funkcije slušalica\n\n' 'Kako vam mogu pomoći?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': 'Funkcija prepoznavanja govora zahteva pristup mikrofonu.', - 'voiceTranslationPermissionText': 'Funkcija prepoznavanja i prevođenja govora zahteva pristup mikrofonu.', - 'phoneCallPermissionText': 'Funkcija pozivanja zahteva pristup mikrofonu za glasovne pozive.', - 'permissionDeniedText': 'Trajno ste odbili dozvolu za mikrofon, idite u sistemska podešavanja da biste je omogućili.', + 'voiceRecognitionPermissionText': + 'Funkcija prepoznavanja govora zahteva pristup mikrofonu.', + 'voiceTranslationPermissionText': + 'Funkcija prepoznavanja i prevođenja govora zahteva pristup mikrofonu.', + 'phoneCallPermissionText': + 'Funkcija pozivanja zahteva pristup mikrofonu za glasovne pozive.', + 'permissionDeniedText': + 'Trajno ste odbili dozvolu za mikrofon, idite u sistemska podešavanja da biste je omogućili.', 'startVoiceInput': 'Započni unos glasom', 'startPhoneCallMode': 'Započni režim poziva, započni unos glasom', @@ -747,7 +800,8 @@ const Map srRS = { 'privacyRelated': 'Vezano za privatnost', 'copyrightViolation': 'Kršenje mog autorskog prava, ugleda, itd.', 'other': 'Ostalo', - 'reportDescriptionHint': 'Želimo da znamo razlog vaše prijave, možete opisati problem sa kojim ste se suočili.', + 'reportDescriptionHint': + 'Želimo da znamo razlog vaše prijave, možete opisati problem sa kojim ste se suočili.', //'submit': '提交', //Message_bubble @@ -779,14 +833,22 @@ const Map srRS = { 'lowest': 'Najniža', 'futureForecast': 'Buduća prognoza', 'hotWeatherTip': 'Danas je vruće, pazite na toplotni udar i pijte puno vode', - 'coldWeatherTip': 'Danas je temperatura niska, obucite se toplo kada izlazite da se ne prehladite', - 'rainyWeatherTip': 'Danas pada kiša, ponesite kišobran kada izlazite i pazite na putu', - 'snowyWeatherTip': 'Danas pada sneg, put je klizav, pazite i obucite se toplo', - 'foggyWeatherTip': 'Danas je magla, vidljivost je smanjena, nosite masku kada izlazite', - 'windyWeatherTip': 'Danas duva jak vetar, pazite kada izlazite i osigurajte svoje stvari', - 'sunnyWeatherTip': 'Danas je sunčano i jako UV zračenje, koristite kremu za sunčanje kada izlazite', - 'temperatureDifferenceTip': 'Danas je velika razlika u temperaturi između dana i noći, prilagodite odeću', - 'comfortableWeatherTip': 'Danas je vreme prijatno, odlično vreme za aktivnosti na otvorenom', + 'coldWeatherTip': + 'Danas je temperatura niska, obucite se toplo kada izlazite da se ne prehladite', + 'rainyWeatherTip': + 'Danas pada kiša, ponesite kišobran kada izlazite i pazite na putu', + 'snowyWeatherTip': + 'Danas pada sneg, put je klizav, pazite i obucite se toplo', + 'foggyWeatherTip': + 'Danas je magla, vidljivost je smanjena, nosite masku kada izlazite', + 'windyWeatherTip': + 'Danas duva jak vetar, pazite kada izlazite i osigurajte svoje stvari', + 'sunnyWeatherTip': + 'Danas je sunčano i jako UV zračenje, koristite kremu za sunčanje kada izlazite', + 'temperatureDifferenceTip': + 'Danas je velika razlika u temperaturi između dana i noći, prilagodite odeću', + 'comfortableWeatherTip': + 'Danas je vreme prijatno, odlično vreme za aktivnosti na otvorenom', "monday": "Pon", "tuesday": "Uto", "wednesday": "Sre", @@ -836,24 +898,31 @@ const Map srRS = { "notSet": "Nije podešeno", "accountSetting": "Podešavanja naloga", "logout": "Odjavi se", - "logoutTips": "Da li ste sigurni da želite da se odjavite sa trenutnog naloga?", + "logoutTips": + "Da li ste sigurni da želite da se odjavite sa trenutnog naloga?", 'deleteAccount': 'Obriši nalog', - 'deleteAccountTips': 'Da li ste sigurni da želite trajno da obrišete svoj nalog? Ova radnja se ne može opozvati', + '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': 'Neuspešna mrežna veza, proverite podešavanja mreže i pokušajte ponovo', - 'serverTemporarilyUnavailable': 'Server je trenutno nedostupan, pokušajte ponovo kasnije', + 'networkConnectionFailed': + 'Neuspešna mrežna veza, proverite podešavanja mreže i pokušajte ponovo', + 'serverTemporarilyUnavailable': + 'Server je trenutno nedostupan, pokušajte ponovo kasnije', 'loginExpiredPleaseRelogin': 'Vaša sesija je istekla, prijavite se ponovo', 'noPermissionForThisOperation': 'Nemate dozvolu za ovu operaciju', 'requestedResourceNotFound': 'Traženi resurs nije pronađen', - 'imageProcessingFailedPleaseReselect': 'Neuspešna obrada slike, izaberite drugu sliku', + 'imageProcessingFailedPleaseReselect': + 'Neuspešna obrada slike, izaberite drugu sliku', 'operationFailedPleaseRetry': 'Operacija nije uspela, pokušajte ponovo', 'serverReturnedError': 'Server je vratio grešku', 'serverError': 'Greška na serveru', - 'networkConnectionFailedCheckSettings': 'Neuspešna mrežna veza, proverite podešavanja mreže', - 'serverInternalErrorRetryLater': 'Interna greška na serveru, pokušajte ponovo kasnije', + 'networkConnectionFailedCheckSettings': + 'Neuspešna mrežna veza, proverite podešavanja mreže', + 'serverInternalErrorRetryLater': + 'Interna greška na serveru, pokušajte ponovo kasnije', // Profile 用户交互 //'error': '错误', @@ -872,13 +941,19 @@ const Map srRS = { // 账号服务相关 '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', // 删除账号过程发生错误 + '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', // AccountService 已初始化 + 'allUserDataClearSuccess': + 'Svi korisnički podaci uspešno obrisani', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'AccountService je inicijalizovan', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Neuspešno dobijanje statusa dozvole', @@ -901,57 +976,86 @@ const Map srRS = { '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': 'Koristi se za čitanje i upravljanje događajima i podsetnicima u kalendaru', - 'locationPermissionDesc': 'Koristi se za dobijanje informacija o trenutnoj lokaciji', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Koristi se za kreiranje događaja i podsetnika u kalendaru', + 'calendarFullAccessPermissionDesc': + 'Koristi se za čitanje i upravljanje događajima i podsetnicima u kalendaru', + 'locationPermissionDesc': + 'Koristi se za dobijanje informacija o trenutnoj lokaciji', 'appFunctionNeeds': 'Funkcija aplikacije zahteva', 'authorized': 'Autorizovano', 'unauthorized': 'Neautorizovano', - 'needOpenInSystemSettings': 'Potrebno je omogućiti u sistemskim podešavanjima', + 'needOpenInSystemSettings': + 'Potrebno je omogućiti u sistemskim podešavanjima', 'partialAuthorization': 'Delimična autorizacija', 'unknownStatus': 'Nepoznat status', 'permissionGranted': 'Dozvola je odobrena', '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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1065,8 @@ const Map srRS = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1075,10 @@ const Map srRS = { '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', // 无法打开应用商店提示 - 'updateErrorRetry': 'Došlo je do greške tokom ažuriranja, pokušajte ponovo kasnije', // 更新错误重试提示 + 'cannotOpenAppStore': + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-pošta", @@ -1107,7 +1214,8 @@ const Map srRS = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1231,12 @@ const Map srRS = { "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.", + "clearHistoryConfirm": + "Da li ste sigurni da želite da obrišete celu istoriju prevođenja? Ova radnja se ne može opozvati.", "unknownLanguage": "Nepoznat jezik", "deleteSessionRecord": "Obriši zapis sesije", - "deleteSessionConfirm": "Da li ste sigurni da želite da obrišete sve zapise prevođenja za ovu sesiju? Ova radnja se ne može opozvati.", + "deleteSessionConfirm": + "Da li ste sigurni da želite da obrišete sve zapise prevođenja za ovu sesiju? Ova radnja se ne može opozvati.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1268,20 @@ const Map srRS = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1304,8 @@ const Map srRS = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Originalni zapis", "recordSummary": "Sažetak zapisa", - "clickToGenerateSummary": "Kliknite na dugme ispod da biste generisali sažetak sesije", + "clickToGenerateSummary": + "Kliknite na dugme ispod da biste generisali sažetak sesije", "summaryContent": "Sadržaj sažetka", "copied": "Kopirano", "summaryCopiledToClipboard": "Sažetak je kopiran u međuspremnik", @@ -1197,9 +1313,11 @@ const Map srRS = { "summaryGenerated": "Sažetak je generisan", "generating": "Generisanje...", "regenerate": "Ponovo generiši", - "summaryTimeoutMessage": "Isteklo je vreme za generisanje sažetka, možda zbog problema sa mrežom ili zauzetosti servera.", + "summaryTimeoutMessage": + "Isteklo je vreme za generisanje sažetka, možda zbog problema sa mrežom ili zauzetosti servera.", "deleteTranslationRecord": "Obriši zapis prevođenja", - "deleteTranslationConfirm": "Da li ste sigurni da želite da obrišete ovaj zapis prevođenja? Ova radnja se ne može opozvati.", + "deleteTranslationConfirm": + "Da li ste sigurni da želite da obrišete ovaj zapis prevođenja? Ova radnja se ne može opozvati.", "originalText": "Originalni tekst", "translatedText": "Prevedeni tekst", "sessionSummary": "Sažetak sesije", @@ -1227,19 +1345,25 @@ const Map srRS = { // 配对状态文本 "readyToPair": "Spremno za uparivanje", "preparingPairingEnvironment": "Priprema okruženja za uparivanje...", - "connectDeepSoundViaSystemBluetooth": "Prvo se povežite sa Voitrans uređajem preko sistemskog Bluetooth-a", + "connectDeepSoundViaSystemBluetooth": + "Prvo se povežite sa Voitrans uređajem preko sistemskog Bluetooth-a", "deviceBindingConfirm": "Potvrda povezivanja uređaja...", "establishingDeviceAssociation": "Uspostavljanje veze sa uređajem...", "waitingCompletePairing": "Molimo sačekajte, uparivanje se završava...", - "pairingSuccessRedirecting": "Uparivanje uspešno! Preusmeravanje na početnu stranicu...", + "pairingSuccessRedirecting": + "Uparivanje uspešno! Preusmeravanje na početnu stranicu...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Uverite se da ste povezani sa Voitrans uređajem", - "deviceAlreadyBoundToOtherAccount": "Ovaj uređaj je već povezan sa drugim nalogom", + "ensureConnectedDeepSoundDevice": + "Uverite se da ste povezani sa Voitrans uređajem", + "deviceAlreadyBoundToOtherAccount": + "Ovaj uređaj je već povezan sa drugim nalogom", "deviceAssociationFailed": "Neuspešno povezivanje uređaja, pokušajte ponovo", - "scanTimeoutEnsureDeviceNearby": "Isteklo vreme skeniranja, uverite se da je uređaj u blizini", + "scanTimeoutEnsureDeviceNearby": + "Isteklo vreme skeniranja, uverite se da je uređaj u blizini", "networkError": "Mrežna greška", - "authorizationFailedCheckCode": "Neuspešna autorizacija, proverite da li je autorizacioni kod tačan", + "authorizationFailedCheckCode": + "Neuspešna autorizacija, proverite da li je autorizacioni kod tačan", "pairingFailedRetry": "Neuspešno uparivanje, pokušajte ponovo", // 配对控制器相关 @@ -1248,13 +1372,15 @@ const Map srRS = { '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', + '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...', + 'needManualBindingAuthCode': + 'Potreban je kod za autorizaciju ručnog povezivanja...', 'pairingSuccessful': 'Uparivanje uspešno!', 'enableBluetooth': 'Omogući Bluetooth', 'grantPermissions': 'Daj dozvole', @@ -1266,35 +1392,45 @@ const Map srRS = { 'verificationFailedRetry': 'Neuspešna verifikacija, pokušajte ponovo', 'invalidDeviceAddress': 'Nevažeća adresa uređaja', 'bleDeviceAssociationFailed': 'Neuspešno povezivanje BLE uređaja', - 'deviceAssociationFailedRetry': 'Neuspešno povezivanje uređaja, pokušajte ponovo', + 'deviceAssociationFailedRetry': + 'Neuspešno povezivanje uređaja, pokušajte ponovo', 'bleConnectionTimeoutRetry': 'Isteklo vreme za BLE vezu, pokušajte ponovo', 'blePairingStartupFailed': 'Neuspešno pokretanje BLE uparivanja', 'bleConnectionFailed': 'Neuspešna BLE veza', - 'deviceAuthorizationFailedCheckCode': 'Neuspešna autorizacija uređaja, proverite autorizacioni kod', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', - 'feedbackDescription': 'Opišite problem sa kojim ste se suočili ili svoj predlog', + 'feedbackDescription': + 'Opišite problem sa kojim ste se suočili ili svoj predlog', 'feedbackHint': 'Unesite svoje povratne informacije...', 'feedbackRequired': 'Unesite sadržaj povratnih informacija', 'contactInfo': 'Kontakt informacije', 'contactHint': 'E-pošta/Telefon, da bismo vas mogli kontaktirati', 'submit': 'Pošalji', - 'feedbackSubmitSuccess': 'Povratne informacije su uspešno poslate, hvala vam!', - 'feedbackSubmitFailed': 'Neuspešno slanje povratnih informacija, pokušajte ponovo kasnije', + 'feedbackSubmitSuccess': + 'Povratne informacije su uspešno poslate, hvala vam!', + 'feedbackSubmitFailed': + 'Neuspešno slanje povratnih informacija, pokušajte ponovo kasnije', // OTA升级模块 - "upgradeExitConfirm": "Nadogradnja je u toku, izlazak će prekinuti proces, da li ste sigurni da želite da izađete?", + "upgradeExitConfirm": + "Nadogradnja je u toku, izlazak će prekinuti proces, da li ste sigurni da želite da izađete?", "deviceModel": "Model uređaja", "unknownDevice": "Nepoznat uređaj", "currentFirmwareVersion": "Trenutna verzija firmvera", @@ -1307,14 +1443,18 @@ const Map srRS = { "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.", + "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", "updateContent": "Sadržaj ažuriranja", - "removeEarbudsEnsureBattery": "Izvadite obe slušalice i uverite se da je baterija obe iznad 20%", + "removeEarbudsEnsureBattery": + "Izvadite obe slušalice i uverite se da je baterija obe iznad 20%", // 音乐列表页面 "noMusic": "Nema muzike", // 暂无音乐 @@ -1376,8 +1516,10 @@ const Map srRS = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 6874a58c4..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", @@ -71,7 +72,8 @@ const Map svSE = { // 登录页 "welcome": "Välkommen", - "loginTips": "Logga in eller registrera dig med ditt telefonnummer eller din e-postadress", + "loginTips": + "Logga in eller registrera dig med ditt telefonnummer eller din e-postadress", "accountNumber": "Telefonnummer eller e-post", "verificationCode": "Verifieringskod", "getCode": "Hämta kod", @@ -90,7 +92,8 @@ const Map svSE = { "tip": "Tips", "pleaseEnterCompleteCode": "Ange hela verifieringskoden", "loginFailed": "Inloggning misslyckades, försök igen", - 'pleaseAcceptPrivacyPolicy': 'Läs och godkänn integritetspolicyn och användaravtalet först', + 'pleaseAcceptPrivacyPolicy': + 'Läs och godkänn integritetspolicyn och användaravtalet först', "enterVerificationCode": "Ange verifieringskod", "verificationCodeSentTo": "Verifieringskod har skickats till", "resendVerificationCode": "Skicka verifieringskod igen", @@ -99,7 +102,8 @@ const Map svSE = { // 隐私政策弹窗 "loginDeclaration": "Voitrans-deklaration", // Voitrans 声明 - "welcomeToThisApp": "Välkommen till Voitrans, vänligen läs noggrant", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Välkommen till Voitrans, vänligen läs noggrant", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +119,29 @@ const Map svSE = { "signal": "Signal", "deviceId": "Enhets-ID", "firmwareVersion": "Firmware-version", - "disconnectedDevice": "Ingen enhet ansluten, klicka på knappen nedan för att ansluta", + "disconnectedDevice": + "Ingen enhet ansluten, klicka på knappen nedan för att ansluta", "connectDevice": "Anslut enhet", "topAiExperiences": "Topp AI-upplevelser", "aiAssistant": "AI Allround-assistent", "aiAssistantInfo": "Exklusiv konsult dygnet runt, svarar på frågor, ger råd", "interpretation": "Simultantolkning", - "simultaneousInterpretationInfo": "Realtidsöversättning för över 80 språk, bekymmersfria utlandsresor", + "simultaneousInterpretationInfo": + "Realtidsöversättning för över 80 språk, bekymmersfria utlandsresor", "aiCompanion": "Familjekamrat", "aiCompanionInfo": "Förstår dig, varmt sällskap", "homeSlogan": "Anslut världen, bortom ljudet", - "turnEarphones": "Öppna laddningsfodralet för hörlurarna och placera hörlurarna i dina öron", + "turnEarphones": + "Öppna laddningsfodralet för hörlurarna och placera hörlurarna i dina öron", "currentlyConnected": "För närvarande ansluten:", "unsystemSetup": "Gå till systeminställningar", "talkLater": "Senare", "initializing": "Initierar...", - "bluetoothInitializationFailure": "Initiering av Bluetooth-tjänst misslyckades", + "bluetoothInitializationFailure": + "Initiering av Bluetooth-tjänst misslyckades", "checkingPermissions": "Kontrollerar behörigheter...", - "lackPermissions": "Saknar Bluetooth-behörigheter och kräver att du tillåter åtkomst till plats", + "lackPermissions": + "Saknar Bluetooth-behörigheter och kräver att du tillåter åtkomst till plats", "searchingDevice": "Söker efter enheter...", "findConnectedDevice": "Hittade ansluten enhet", "notFound": "Ingen ansluten Bluetooth-enhet hittades", @@ -175,7 +184,8 @@ const Map svSE = { "healthConsultant": "Mångfunktionell AI-chatt", "healthConsultantInfo": "Erbjuder fler AI-chattfunktioner", "conferenceAssistant": "Affärsmötesassistent", - "conferenceAssistantInfo": "Realtidsinspelning av mötesprotokoll, flerspråkig översättning", + "conferenceAssistantInfo": + "Realtidsinspelning av mötesprotokoll, flerspråkig översättning", "usageStats": "Användningsstatistik", "usageStatsInfo": "Visa din användningsstatistik", "scene": "Scenario", @@ -218,7 +228,8 @@ const Map svSE = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +285,10 @@ const Map svSE = { '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.', + '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', @@ -284,27 +297,35 @@ const Map svSE = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +334,10 @@ const Map svSE = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +352,8 @@ const Map svSE = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Hoppa över", @@ -355,7 +379,8 @@ const Map svSE = { '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”', + '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', @@ -405,7 +430,8 @@ const Map svSE = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +486,54 @@ const Map svSE = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +545,8 @@ const Map svSE = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +566,8 @@ const Map svSE = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +616,8 @@ const Map svSE = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +642,8 @@ const Map svSE = { "cloudSync": "Molnsynkronisering", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Ansluten enhet:", "accountId": "Konto-ID:", "systemSetting": "Systeminställning", @@ -612,7 +656,8 @@ const Map svSE = { "privacySettings": "Integritetsinställningar", "privacySettingsInfo": "Hantera datainsamling och behörigheter", "permissionManagement": "Behörighetshantering", // 权限管理 - "permissionManagementInfo": "Hantera inställningar för appbehörigheter", // 管理应用权限设置 + "permissionManagementInfo": + "Hantera inställningar för appbehörigheter", // 管理应用权限设置 "aboutApplication": "Om appen", "versions": "Version", "checkUpdates": "Sök efter uppdateringar", @@ -621,9 +666,11 @@ const Map svSE = { "voiceServiceInfo": "Välj röstigenkännings- och syntestjänst", "selectVoiceService": "Välj rösttjänst", "azureVoiceService": "Azure Rösttjänst", - "azureVoiceServiceInfo": "Microsofts molnbaserade rösttjänst, stöder högkvalitativ röstsyntes och igenkänning", + "azureVoiceServiceInfo": + "Microsofts molnbaserade rösttjänst, stöder högkvalitativ röstsyntes och igenkänning", "flutterVoiceService": "Flutter Lokal Rösttjänst", - "flutterVoiceServiceInfo": "Enhetens lokala rösttjänst, kan användas utan internetanslutning", + "flutterVoiceServiceInfo": + "Enhetens lokala rösttjänst, kan användas utan internetanslutning", 'timbreService': 'Klangtjänst', 'timbreServiceInfo': 'Välj klangtjänst för röstsyntes', 'defaultTimbre': 'Standardklang', @@ -652,7 +699,8 @@ const Map svSE = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Realtids röstchatt", - "realtimeVoiceChatInfo": "Upplev intelligent röstinteraktionsfunktion (funktionsförhandsvisning)", + "realtimeVoiceChatInfo": + "Upplev intelligent röstinteraktionsfunktion (funktionsförhandsvisning)", "loading": "Laddar...", //设备管理页面 @@ -667,7 +715,8 @@ const Map svSE = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -721,10 +770,14 @@ const Map svSE = { '• Kontrollera hörlursfunktioner\n\n' 'Hur kan jag hjälpa dig?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': 'Röstigenkänning kräver åtkomst till mikrofonen.', - 'voiceTranslationPermissionText': 'Röstigenkänning och översättning kräver åtkomst till mikrofonen.', - 'phoneCallPermissionText': 'Att ringa samtal kräver åtkomst till mikrofonen för röstsamtal.', - 'permissionDeniedText': 'Du har permanent nekat åtkomst till mikrofonen, vänligen gå till systeminställningarna för att aktivera behörigheten.', + 'voiceRecognitionPermissionText': + 'Röstigenkänning kräver åtkomst till mikrofonen.', + 'voiceTranslationPermissionText': + 'Röstigenkänning och översättning kräver åtkomst till mikrofonen.', + 'phoneCallPermissionText': + 'Att ringa samtal kräver åtkomst till mikrofonen för röstsamtal.', + 'permissionDeniedText': + 'Du har permanent nekat åtkomst till mikrofonen, vänligen gå till systeminställningarna för att aktivera behörigheten.', 'startVoiceInput': 'Starta röstinmatning', 'startPhoneCallMode': 'Starta samtalsläge, starta röstinmatning', @@ -747,7 +800,8 @@ const Map svSE = { 'privacyRelated': 'Integritetsrelaterat', 'copyrightViolation': 'Inkräktar på min upphovsrätt, anseende, etc.', 'other': 'Annat', - 'reportDescriptionHint': 'Vi vill veta varför du anmäler, du kan beskriva problemet du stött på.', + 'reportDescriptionHint': + 'Vi vill veta varför du anmäler, du kan beskriva problemet du stött på.', //'submit': '提交', //Message_bubble @@ -778,15 +832,24 @@ const Map svSE = { 'highest': 'Högsta', 'lowest': 'Lägsta', 'futureForecast': 'Framtida prognos', - 'hotWeatherTip': 'Idag är det varmt, var försiktig med värmeslag och drick mycket vatten', - 'coldWeatherTip': 'Idag är temperaturen låg, klä dig varmt när du går ut för att undvika förkylning', - 'rainyWeatherTip': 'Idag regnar det, ta med ett paraply när du går ut och var försiktig', - 'snowyWeatherTip': 'Idag snöar det, vägen är hal, var försiktig och klä dig varmt', - 'foggyWeatherTip': 'Idag är det dimmigt, sikten är låg, använd en mask när du går ut', - 'windyWeatherTip': 'Idag blåser det mycket, var försiktig när du går ut och säkra dina tillhörigheter', - 'sunnyWeatherTip': 'Idag är det soligt och stark UV-strålning, använd solskydd när du går ut', - 'temperatureDifferenceTip': 'Idag är det stor temperaturskillnad mellan dag och natt, anpassa kläderna därefter', - 'comfortableWeatherTip': 'Idag är vädret behagligt, en bra tid för utomhusaktiviteter', + 'hotWeatherTip': + 'Idag är det varmt, var försiktig med värmeslag och drick mycket vatten', + 'coldWeatherTip': + 'Idag är temperaturen låg, klä dig varmt när du går ut för att undvika förkylning', + 'rainyWeatherTip': + 'Idag regnar det, ta med ett paraply när du går ut och var försiktig', + 'snowyWeatherTip': + 'Idag snöar det, vägen är hal, var försiktig och klä dig varmt', + 'foggyWeatherTip': + 'Idag är det dimmigt, sikten är låg, använd en mask när du går ut', + 'windyWeatherTip': + 'Idag blåser det mycket, var försiktig när du går ut och säkra dina tillhörigheter', + 'sunnyWeatherTip': + 'Idag är det soligt och stark UV-strålning, använd solskydd när du går ut', + 'temperatureDifferenceTip': + 'Idag är det stor temperaturskillnad mellan dag och natt, anpassa kläderna därefter', + 'comfortableWeatherTip': + 'Idag är vädret behagligt, en bra tid för utomhusaktiviteter', "monday": "Mån", "tuesday": "Tis", "wednesday": "Ons", @@ -836,23 +899,31 @@ const Map svSE = { "notSet": "Inte inställt", "accountSetting": "Kontoinställningar", "logout": "Logga ut", - "logoutTips": "Är du säker på att du vill logga ut från det nuvarande kontot?", + "logoutTips": + "Är du säker på att du vill logga ut från det nuvarande kontot?", 'deleteAccount': 'Ta bort konto', - 'deleteAccountTips': 'Är du säker på att du vill ta bort ditt konto permanent? Denna åtgärd kan inte ångras', + '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': 'Nätverksanslutning misslyckades, kontrollera dina nätverksinställningar och försök igen', - 'serverTemporarilyUnavailable': 'Servern är tillfälligt otillgänglig, försök igen senare', - 'loginExpiredPleaseRelogin': 'Din session har gått ut, vänligen logga in igen', - 'noPermissionForThisOperation': 'Du har inte behörighet att utföra denna åtgärd', + 'networkConnectionFailed': + 'Nätverksanslutning misslyckades, kontrollera dina nätverksinställningar och försök igen', + 'serverTemporarilyUnavailable': + 'Servern är tillfälligt otillgänglig, försök igen senare', + 'loginExpiredPleaseRelogin': + 'Din session har gått ut, vänligen logga in igen', + 'noPermissionForThisOperation': + 'Du har inte behörighet att utföra denna åtgärd', 'requestedResourceNotFound': 'Den begärda resursen hittades inte', - 'imageProcessingFailedPleaseReselect': 'Bildbehandling misslyckades, välj en annan bild', + 'imageProcessingFailedPleaseReselect': + 'Bildbehandling misslyckades, välj en annan bild', 'operationFailedPleaseRetry': 'Åtgärden misslyckades, försök igen', 'serverReturnedError': 'Servern returnerade ett fel', 'serverError': 'Serverfel', - 'networkConnectionFailedCheckSettings': 'Nätverksanslutning misslyckades, kontrollera dina nätverksinställningar', + 'networkConnectionFailedCheckSettings': + 'Nätverksanslutning misslyckades, kontrollera dina nätverksinställningar', 'serverInternalErrorRetryLater': 'Internt serverfel, försök igen senare', // Profile 用户交互 @@ -871,14 +942,20 @@ const Map svSE = { // 账号服务相关 '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', // 删除账号过程发生错误 + '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', // AccountService 已初始化 + 'accountServiceInitialized': + 'Kontotjänsten har initierats', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Hämtning av behörighetsstatus misslyckades', @@ -901,9 +978,12 @@ const Map svSE = { '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': 'Används för att läsa och hantera kalenderhändelser och påminnelser', + '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': + 'Används för att läsa och hantera kalenderhändelser och påminnelser', 'locationPermissionDesc': 'Används för att hämta aktuell platsinformation', 'appFunctionNeeds': 'Appfunktionen behöver', 'authorized': 'Beviljad', @@ -915,43 +995,67 @@ 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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1065,8 @@ const Map svSE = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1075,10 @@ const Map svSE = { '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', // 更新错误重试提示 + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-post", @@ -1107,7 +1214,8 @@ const Map svSE = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1231,12 @@ const Map svSE = { "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.", + "clearHistoryConfirm": + "Är du säker på att du vill rensa all översättningshistorik? Denna åtgärd kan inte ångras.", "unknownLanguage": "Okänt språk", "deleteSessionRecord": "Ta bort sessionsinspelning", - "deleteSessionConfirm": "Är du säker på att du vill ta bort alla översättningsinspelningar för denna session? Denna åtgärd kan inte ångras.", + "deleteSessionConfirm": + "Är du säker på att du vill ta bort alla översättningsinspelningar för denna session? Denna åtgärd kan inte ångras.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1268,20 @@ const Map svSE = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1304,8 @@ const Map svSE = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Originalinspelning", "recordSummary": "Inspelningssammanfattning", - "clickToGenerateSummary": "Klicka på knappen nedan för att generera en sessionssammanfattning", + "clickToGenerateSummary": + "Klicka på knappen nedan för att generera en sessionssammanfattning", "summaryContent": "Sammanfattningsinnehåll", "copied": "Kopierad", "summaryCopiledToClipboard": "Sammanfattning kopierad till urklipp", @@ -1197,9 +1313,11 @@ const Map svSE = { "summaryGenerated": "Sammanfattning genererad", "generating": "Genererar...", "regenerate": "Generera igen", - "summaryTimeoutMessage": "Begäran om att generera sammanfattning nådde tidsgräns, det kan bero på nätverksproblem eller upptagen server.", + "summaryTimeoutMessage": + "Begäran om att generera sammanfattning nådde tidsgräns, det kan bero på nätverksproblem eller upptagen server.", "deleteTranslationRecord": "Ta bort översättningsinspelning", - "deleteTranslationConfirm": "Är du säker på att du vill ta bort denna översättningsinspelning? Denna åtgärd kan inte ångras.", + "deleteTranslationConfirm": + "Är du säker på att du vill ta bort denna översättningsinspelning? Denna åtgärd kan inte ångras.", "originalText": "Originaltext", "translatedText": "Översatt text", "sessionSummary": "Sessionssammanfattning", @@ -1227,19 +1345,25 @@ const Map svSE = { // 配对状态文本 "readyToPair": "Redo att parkoppla", "preparingPairingEnvironment": "Förbereder parkopplingsmiljö...", - "connectDeepSoundViaSystemBluetooth": "Anslut först till Voitrans-enheten via systemets Bluetooth", + "connectDeepSoundViaSystemBluetooth": + "Anslut först till Voitrans-enheten via systemets Bluetooth", "deviceBindingConfirm": "Bekräftelse av enhetsbindning...", "establishingDeviceAssociation": "Upprättar enhetsassociation...", "waitingCompletePairing": "Vänta, slutför parkoppling...", - "pairingSuccessRedirecting": "Parkoppling lyckades! Omdirigerar till startsidan...", + "pairingSuccessRedirecting": + "Parkoppling lyckades! Omdirigerar till startsidan...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Se till att du är ansluten till en Voitrans-enhet", - "deviceAlreadyBoundToOtherAccount": "Denna enhet är redan bunden till ett annat konto", + "ensureConnectedDeepSoundDevice": + "Se till att du är ansluten till en Voitrans-enhet", + "deviceAlreadyBoundToOtherAccount": + "Denna enhet är redan bunden till ett annat konto", "deviceAssociationFailed": "Enhetsassociation misslyckades, försök igen", - "scanTimeoutEnsureDeviceNearby": "Skanningen nådde tidsgräns, se till att enheten är i närheten", + "scanTimeoutEnsureDeviceNearby": + "Skanningen nådde tidsgräns, se till att enheten är i närheten", "networkError": "Nätverksfel", - "authorizationFailedCheckCode": "Auktorisering misslyckades, kontrollera att auktoriseringskoden är korrekt", + "authorizationFailedCheckCode": + "Auktorisering misslyckades, kontrollera att auktoriseringskoden är korrekt", "pairingFailedRetry": "Parkoppling misslyckades, försök igen", // 配对控制器相关 @@ -1248,7 +1372,8 @@ const Map svSE = { 'deviceDisconnected': 'Enheten frånkopplad', 'readyToStartPairing': 'Redo att starta parkoppling', 'checkingEnvironment': 'Kontrollerar miljö...', - 'ensureHeadsetOnAndPairingMode': 'Se till att hörlurarna är på och i parkopplingsläge', + 'ensureHeadsetOnAndPairingMode': + 'Se till att hörlurarna är på och i parkopplingsläge', //'goToBluetoothSettings': '前往蓝牙设置', //'verifyingDevice': '正在验证设备...', //'confirmBinding': '确认绑定', @@ -1270,15 +1395,20 @@ const Map svSE = { 'bleConnectionTimeoutRetry': 'BLE-anslutningen nådde tidsgräns, försök igen', 'blePairingStartupFailed': 'Start av BLE-parkoppling misslyckades', 'bleConnectionFailed': 'BLE-anslutning misslyckades', - 'deviceAuthorizationFailedCheckCode': 'Enhetsauktorisering misslyckades, kontrollera auktoriseringskoden', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', // 我知道了 //用户反馈页 @@ -1291,10 +1421,12 @@ const Map svSE = { 'contactHint': 'E-post/Telefon, så att vi kan kontakta dig', 'submit': 'Skicka', 'feedbackSubmitSuccess': 'Feedback inskickad, tack för din feedback!', - 'feedbackSubmitFailed': 'Inskickning av feedback misslyckades, försök igen senare', + 'feedbackSubmitFailed': + 'Inskickning av feedback misslyckades, försök igen senare', // OTA升级模块 - "upgradeExitConfirm": "Uppgradering pågår, att avsluta kommer att avbryta uppgraderingsprocessen, är du säker på att du vill avsluta?", + "upgradeExitConfirm": + "Uppgradering pågår, att avsluta kommer att avbryta uppgraderingsprocessen, är du säker på att du vill avsluta?", "deviceModel": "Enhetsmodell", "unknownDevice": "Okänd enhet", "currentFirmwareVersion": "Nuvarande firmware-version", @@ -1307,14 +1439,18 @@ const Map svSE = { "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.", + "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", "updateContent": "Uppdateringsinnehåll", - "removeEarbudsEnsureBattery": "Ta ut båda hörlurarna och se till att batterinivån är över 20 % på båda", + "removeEarbudsEnsureBattery": + "Ta ut båda hörlurarna och se till att batterinivån är över 20 % på båda", // 音乐列表页面 "noMusic": "Ingen musik", // 暂无音乐 @@ -1376,8 +1512,10 @@ const Map svSE = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 112854a30..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": "ภาษาฝรั่งเศส", @@ -90,7 +91,8 @@ const Map thTH = { "tip": "เคล็ดลับ", "pleaseEnterCompleteCode": "กรุณากรอกรหัสยืนยันให้ครบถ้วน", "loginFailed": "เข้าสู่ระบบล้มเหลว กรุณาลองใหม่", - 'pleaseAcceptPrivacyPolicy': 'กรุณาอ่านและยอมรับนโยบายความเป็นส่วนตัวและข้อตกลงผู้ใช้ก่อน', + 'pleaseAcceptPrivacyPolicy': + 'กรุณาอ่านและยอมรับนโยบายความเป็นส่วนตัวและข้อตกลงผู้ใช้ก่อน', "enterVerificationCode": "กรอกรหัสยืนยัน", "verificationCodeSentTo": "รหัสยืนยันถูกส่งไปยัง", "resendVerificationCode": "ส่งรหัสยืนยันอีกครั้ง", @@ -99,7 +101,8 @@ const Map thTH = { // 隐私政策弹窗 "loginDeclaration": "คำประกาศของ Voitrans", // Voitrans 声明 - "welcomeToThisApp": "ยินดีต้อนรับสู่ Voitrans กรุณาอ่านอย่างละเอียด", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "ยินดีต้อนรับสู่ Voitrans กรุณาอ่านอย่างละเอียด", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -121,7 +124,8 @@ const Map thTH = { "aiAssistant": "ผู้ช่วย AI รอบด้าน", "aiAssistantInfo": "ที่ปรึกษาส่วนตัว 24 ชั่วโมง ตอบคำถาม ให้คำแนะนำ", "interpretation": "การแปลภาษาพร้อมกัน", - "simultaneousInterpretationInfo": "แปลภาษากว่า 80 ภาษาแบบเรียลไทม์ เดินทางต่างประเทศไร้กังวล", + "simultaneousInterpretationInfo": + "แปลภาษากว่า 80 ภาษาแบบเรียลไทม์ เดินทางต่างประเทศไร้กังวล", "aiCompanion": "เพื่อนคู่คิดสำหรับครอบครัว", "aiCompanionInfo": "เข้าใจคุณ อยู่เคียงข้างอย่างอบอุ่น", "homeSlogan": "เชื่อมต่อโลก เหนือกว่าเสียง", @@ -218,7 +222,8 @@ const Map thTH = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +279,10 @@ const Map thTH = { '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.', + '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', @@ -284,27 +291,35 @@ const Map thTH = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +328,10 @@ const Map thTH = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +346,8 @@ const Map thTH = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "ข้าม", @@ -355,7 +373,8 @@ const Map thTH = { '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”', + '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', @@ -405,7 +424,8 @@ const Map thTH = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +480,54 @@ const Map thTH = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +539,8 @@ const Map thTH = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +560,8 @@ const Map thTH = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +610,8 @@ const Map thTH = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +636,8 @@ const Map thTH = { "cloudSync": "การเติมเงินการ đồng bộ hóaคลาวด์", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "อุปกรณ์ที่เชื่อมต่อ:", "accountId": "ID บัญชี:", "systemSetting": "การตั้งค่าระบบ", @@ -612,7 +650,8 @@ const Map thTH = { "privacySettings": "การตั้งค่าความเป็นส่วนตัว", "privacySettingsInfo": "จัดการการรวบรวมข้อมูลและสิทธิ์", "permissionManagement": "การจัดการสิทธิ์", // 权限管理 - "permissionManagementInfo": "จัดการการตั้งค่าสิทธิ์ของแอปพลิเคชัน", // 管理应用权限设置 + "permissionManagementInfo": + "จัดการการตั้งค่าสิทธิ์ของแอปพลิเคชัน", // 管理应用权限设置 "aboutApplication": "เกี่ยวกับแอปพลิเคชัน", "versions": "เวอร์ชัน", "checkUpdates": "ตรวจสอบการอัปเดต", @@ -621,9 +660,11 @@ const Map thTH = { "voiceServiceInfo": "เลือกบริการรู้จำและสังเคราะห์เสียง", "selectVoiceService": "เลือกบริการเสียง", "azureVoiceService": "บริการเสียง Azure", - "azureVoiceServiceInfo": "บริการเสียงบนคลาวด์ของ Microsoft รองรับการสังเคราะห์และรู้จำเสียงคุณภาพสูง", + "azureVoiceServiceInfo": + "บริการเสียงบนคลาวด์ของ Microsoft รองรับการสังเคราะห์และรู้จำเสียงคุณภาพสูง", "flutterVoiceService": "บริการเสียงในเครื่อง Flutter", - "flutterVoiceServiceInfo": "บริการเสียงในเครื่องของอุปกรณ์ สามารถใช้งานได้โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต", + "flutterVoiceServiceInfo": + "บริการเสียงในเครื่องของอุปกรณ์ สามารถใช้งานได้โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต", 'timbreService': 'บริการโทนเสียง', 'timbreServiceInfo': 'เลือกบริการสังเคราะห์เสียงด้วยโทนเสียง', 'defaultTimbre': 'โทนเสียงเริ่มต้น', @@ -652,7 +693,8 @@ const Map thTH = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "แชทเสียงแบบเรียลไทม์", - "realtimeVoiceChatInfo": "สัมผัสประสบการณ์การโต้ตอบด้วยเสียงอัจฉริยะ (ตัวอย่างฟังก์ชัน)", + "realtimeVoiceChatInfo": + "สัมผัสประสบการณ์การโต้ตอบด้วยเสียงอัจฉริยะ (ตัวอย่างฟังก์ชัน)", "loading": "กำลังโหลด...", //设备管理页面 @@ -667,7 +709,8 @@ const Map thTH = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -721,10 +764,14 @@ const Map thTH = { '• ควบคุมฟังก์ชันของหูฟัง\n\n' 'มีอะไรให้ฉันช่วยไหม', 'microphonePermission': 'ไมโครโฟน', - 'voiceRecognitionPermissionText': 'ฟังก์ชันรู้จำเสียงต้องการการเข้าถึงไมโครโฟน', - 'voiceTranslationPermissionText': 'ฟังก์ชันรู้จำและแปลเสียงต้องการการเข้าถึงไมโครโฟน', - 'phoneCallPermissionText': 'ฟังก์ชันโทรออกต้องการการเข้าถึงไมโครโฟนสำหรับการโทรด้วยเสียง', - 'permissionDeniedText': 'คุณได้ปฏิเสธการอนุญาตใช้ไมโครโฟนอย่างถาวร โปรดไปที่การตั้งค่าระบบเพื่อเปิดใช้งาน', + 'voiceRecognitionPermissionText': + 'ฟังก์ชันรู้จำเสียงต้องการการเข้าถึงไมโครโฟน', + 'voiceTranslationPermissionText': + 'ฟังก์ชันรู้จำและแปลเสียงต้องการการเข้าถึงไมโครโฟน', + 'phoneCallPermissionText': + 'ฟังก์ชันโทรออกต้องการการเข้าถึงไมโครโฟนสำหรับการโทรด้วยเสียง', + 'permissionDeniedText': + 'คุณได้ปฏิเสธการอนุญาตใช้ไมโครโฟนอย่างถาวร โปรดไปที่การตั้งค่าระบบเพื่อเปิดใช้งาน', 'startVoiceInput': 'เริ่มการป้อนข้อมูลด้วยเสียง', 'startPhoneCallMode': 'เริ่มโหมดโทรศัพท์ เริ่มการป้อนข้อมูลด้วยเสียง', @@ -747,7 +794,8 @@ const Map thTH = { 'privacyRelated': 'เกี่ยวกับความเป็นส่วนตัว', 'copyrightViolation': 'ละเมิดลิขสิทธิ์ ชื่อเสียง ฯลฯ ของฉัน', 'other': 'อื่นๆ', - 'reportDescriptionHint': 'เราต้องการทราบเหตุผลที่คุณรายงาน คุณสามารถอธิบายปัญหาที่คุณพบได้', + 'reportDescriptionHint': + 'เราต้องการทราบเหตุผลที่คุณรายงาน คุณสามารถอธิบายปัญหาที่คุณพบได้', //'submit': '提交', //Message_bubble @@ -779,13 +827,20 @@ const Map thTH = { 'lowest': 'ต่ำสุด', 'futureForecast': 'พยากรณ์อากาศล่วงหน้า', 'hotWeatherTip': 'วันนี้อากาศร้อน โปรดระวังโรคลมแดด ดื่มน้ำมากๆ', - 'coldWeatherTip': 'วันนี้อากาศเย็น โปรดใส่ใจเรื่องความอบอุ่นเมื่อออกไปข้างนอก ระวังเป็นหวัด', - 'rainyWeatherTip': 'วันนี้มีฝน โปรดพกร่มเมื่อออกไปข้างนอก ระมัดระวังในการเดินทาง', - 'snowyWeatherTip': 'วันนี้มีหิมะ ถนนลื่นโปรดระวังความปลอดภัย เตรียมมาตรการป้องกันความหนาว', - 'foggyWeatherTip': 'วันนี้มีหมอก ทัศนวิสัยต่ำ โปรดสวมหน้ากากเมื่อออกไปข้างนอก', - 'windyWeatherTip': 'วันนี้ลมแรง โปรดระวังความปลอดภัยเมื่อออกไปข้างนอก ยึดของให้แน่น', - 'sunnyWeatherTip': 'วันนี้แดดจัด รังสียูวีแรง โปรดป้องกันแสงแดดเมื่อออกไปข้างนอก', - 'temperatureDifferenceTip': 'วันนี้อุณหภูมิต่างกันมากระหว่างกลางวันและกลางคืน โปรดเพิ่มหรือลดเสื้อผ้าให้เหมาะสม', + 'coldWeatherTip': + 'วันนี้อากาศเย็น โปรดใส่ใจเรื่องความอบอุ่นเมื่อออกไปข้างนอก ระวังเป็นหวัด', + 'rainyWeatherTip': + 'วันนี้มีฝน โปรดพกร่มเมื่อออกไปข้างนอก ระมัดระวังในการเดินทาง', + 'snowyWeatherTip': + 'วันนี้มีหิมะ ถนนลื่นโปรดระวังความปลอดภัย เตรียมมาตรการป้องกันความหนาว', + 'foggyWeatherTip': + 'วันนี้มีหมอก ทัศนวิสัยต่ำ โปรดสวมหน้ากากเมื่อออกไปข้างนอก', + 'windyWeatherTip': + 'วันนี้ลมแรง โปรดระวังความปลอดภัยเมื่อออกไปข้างนอก ยึดของให้แน่น', + 'sunnyWeatherTip': + 'วันนี้แดดจัด รังสียูวีแรง โปรดป้องกันแสงแดดเมื่อออกไปข้างนอก', + 'temperatureDifferenceTip': + 'วันนี้อุณหภูมิต่างกันมากระหว่างกลางวันและกลางคืน โปรดเพิ่มหรือลดเสื้อผ้าให้เหมาะสม', 'comfortableWeatherTip': 'วันนี้อากาศดี เป็นเวลาที่ดีสำหรับกิจกรรมกลางแจ้ง', "monday": "จ.", "tuesday": "อ.", @@ -838,22 +893,29 @@ const Map thTH = { "logout": "ออกจากระบบ", "logoutTips": "คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบบัญชีปัจจุบัน", 'deleteAccount': 'ลบบัญชี', - 'deleteAccountTips': 'คุณแน่ใจหรือไม่ว่าต้องการลบบัญชีของคุณอย่างถาวร การกระทำนี้ไม่สามารถย้อนกลับได้', + 'deleteAccountTips': + 'คุณแน่ใจหรือไม่ว่าต้องการลบบัญชีของคุณอย่างถาวร การกระทำนี้ไม่สามารถย้อนกลับได้', 'clean': 'Clear Cache', 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 - 'networkConnectionFailed': 'การเชื่อมต่อเครือข่ายล้มเหลว โปรดตรวจสอบการตั้งค่าเครือข่ายแล้วลองใหม่', - 'serverTemporarilyUnavailable': 'เซิร์ฟเวอร์ไม่สามารถตอบสนองได้ชั่วคราว โปรดลองใหม่ในภายหลัง', - 'loginExpiredPleaseRelogin': 'การเข้าสู่ระบบหมดอายุแล้ว โปรดเข้าสู่ระบบอีกครั้ง', + 'networkConnectionFailed': + 'การเชื่อมต่อเครือข่ายล้มเหลว โปรดตรวจสอบการตั้งค่าเครือข่ายแล้วลองใหม่', + 'serverTemporarilyUnavailable': + 'เซิร์ฟเวอร์ไม่สามารถตอบสนองได้ชั่วคราว โปรดลองใหม่ในภายหลัง', + 'loginExpiredPleaseRelogin': + 'การเข้าสู่ระบบหมดอายุแล้ว โปรดเข้าสู่ระบบอีกครั้ง', 'noPermissionForThisOperation': 'ไม่มีสิทธิ์ดำเนินการนี้', 'requestedResourceNotFound': 'ไม่พบทรัพยากรที่ร้องขอ', - 'imageProcessingFailedPleaseReselect': 'การประมวลผลรูปภาพล้มเหลว โปรดเลือกรูปภาพอีกครั้ง', + 'imageProcessingFailedPleaseReselect': + 'การประมวลผลรูปภาพล้มเหลว โปรดเลือกรูปภาพอีกครั้ง', 'operationFailedPleaseRetry': 'การดำเนินการล้มเหลว โปรดลองใหม่', 'serverReturnedError': 'เซิร์ฟเวอร์ส่งคืนข้อผิดพลาด', 'serverError': 'ข้อผิดพลาดของเซิร์ฟเวอร์', - 'networkConnectionFailedCheckSettings': 'การเชื่อมต่อเครือข่ายล้มเหลว โปรดตรวจสอบการตั้งค่าเครือข่าย', - 'serverInternalErrorRetryLater': 'ข้อผิดพลาดภายในเซิร์ฟเวอร์ โปรดลองใหม่ในภายหลัง', + 'networkConnectionFailedCheckSettings': + 'การเชื่อมต่อเครือข่ายล้มเหลว โปรดตรวจสอบการตั้งค่าเครือข่าย', + 'serverInternalErrorRetryLater': + 'ข้อผิดพลาดภายในเซิร์ฟเวอร์ โปรดลองใหม่ในภายหลัง', // Profile 用户交互 //'error': '错误', @@ -875,10 +937,12 @@ const Map thTH = { 'thirdPartyLogoutSuccess': 'ออกจากระบบบุคคลที่สามสำเร็จ', // 第三方登录退出成功 'thirdPartyLogoutFailed': 'ออกจากระบบบุคคลที่สามล้มเหลว', // 第三方登录退出失败 'signOutProcessError': 'เกิดข้อผิดพลาดระหว่างกระบวนการออกจากระบบ', // 登出过程发生错误 - 'deleteAccountProcessError': 'เกิดข้อผิดพลาดระหว่างกระบวนการลบบัญชี', // 删除账号过程发生错误 + 'deleteAccountProcessError': + 'เกิดข้อผิดพลาดระหว่างกระบวนการลบบัญชี', // 删除账号过程发生错误 'userDataClearSuccess': 'ล้างข้อมูลผู้ใช้สำเร็จ', // 用户数据清理成功 'allUserDataClearSuccess': 'ล้างข้อมูลผู้ใช้ทั้งหมดสำเร็จ', // 所有用户数据清理成功 - 'accountServiceInitialized': 'AccountService ได้รับการเริ่มต้นแล้ว', // AccountService 已初始化 + 'accountServiceInitialized': + 'AccountService ได้รับการเริ่มต้นแล้ว', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'รับสถานะสิทธิ์ล้มเหลว', @@ -901,9 +965,11 @@ const Map thTH = { 'locationInfo': 'ข้อมูลตำแหน่ง', 'phonePermissionDesc': 'ใช้สำหรับฟังก์ชันการโทรออก', 'smsPermissionDesc': 'ใช้สำหรับฟังก์ชันการส่ง SMS', - 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', 'calendarWritePermissionDesc': 'ใช้สำหรับสร้างกิจกรรมและการแจ้งเตือนในปฏิทิน', - 'calendarFullAccessPermissionDesc': 'ใช้สำหรับอ่านและจัดการกิจกรรมและการแจ้งเตือนในปฏิทิน', + 'calendarFullAccessPermissionDesc': + 'ใช้สำหรับอ่านและจัดการกิจกรรมและการแจ้งเตือนในปฏิทิน', 'locationPermissionDesc': 'ใช้สำหรับรับข้อมูลตำแหน่งปัจจุบัน', 'appFunctionNeeds': 'ฟังก์ชันแอปพลิเคชันต้องการ', 'authorized': 'ได้รับอนุญาต', @@ -915,43 +981,66 @@ 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': 'การจัดการกิจกรรมในปฏิทินต้องการสิทธิ์เข้าถึงปฏิทินเต็มรูปแบบ', + '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', + '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', + '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', + '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} อย่างถาวร โปรดไปที่การตั้งค่าแอปเพื่อเปิดใช้งาน', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1050,8 @@ const Map thTH = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1060,10 @@ const Map thTH = { 'updateNow': 'อัปเดตทันที', // 立即更新按钮 'checkUpdate': 'ตรวจสอบการอัปเดต', // 检查更新按钮 'updateFailed': 'อัปเดตล้มเหลว', // 更新失败提示 - 'cannotOpenAppStore': 'ไม่สามารถเปิด App Store ได้ โปรดไปที่ App Store เพื่ออัปเดตด้วยตนเอง', // 无法打开应用商店提示 - 'updateErrorRetry': 'เกิดข้อผิดพลาดระหว่างการอัปเดต โปรดลองใหม่ในภายหลัง', // 更新错误重试提示 + 'cannotOpenAppStore': + 'ไม่สามารถเปิด App Store ได้ โปรดไปที่ App Store เพื่ออัปเดตด้วยตนเอง', // 无法打开应用商店提示 + 'updateErrorRetry': + 'เกิดข้อผิดพลาดระหว่างการอัปเดต โปรดลองใหม่ในภายหลัง', // 更新错误重试提示 //国家列表 "邮箱": "อีเมล", @@ -1107,7 +1199,8 @@ const Map thTH = { "selectTargetLanguage": "เลือกภาษาเป้าหมาย", "me": "Me", "counterPart": "Counterpart", - "bluetoothCallStateError": "Please make sure the Bluetooth headset is connected to the phone and in a call state", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1216,12 @@ const Map thTH = { "historyRecords": "History Records", "clearResults": "Clear Results", "clearHistory": "ล้างประวัติ", - "clearHistoryConfirm": "คุณแน่ใจหรือไม่ว่าต้องการล้างประวัติการแปลทั้งหมด การกระทำนี้ไม่สามารถย้อนกลับได้", + "clearHistoryConfirm": + "คุณแน่ใจหรือไม่ว่าต้องการล้างประวัติการแปลทั้งหมด การกระทำนี้ไม่สามารถย้อนกลับได้", "unknownLanguage": "ภาษาที่ไม่รู้จัก", "deleteSessionRecord": "ลบบันทึกเซสชัน", - "deleteSessionConfirm": "คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกการแปลทั้งหมดของเซสชันนี้ การกระทำนี้ไม่สามารถย้อนกลับได้", + "deleteSessionConfirm": + "คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกการแปลทั้งหมดของเซสชันนี้ การกระทำนี้ไม่สามารถย้อนกลับได้", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1253,20 @@ const Map thTH = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1197,9 +1297,11 @@ const Map thTH = { "summaryGenerated": "สร้างสรุปแล้ว", "generating": "กำลังสร้าง...", "regenerate": "สร้างใหม่", - "summaryTimeoutMessage": "คำขอสร้างสรุปหมดเวลา อาจเป็นเพราะปัญหาเครือข่ายหรือเซิร์ฟเวอร์ไม่ว่าง", + "summaryTimeoutMessage": + "คำขอสร้างสรุปหมดเวลา อาจเป็นเพราะปัญหาเครือข่ายหรือเซิร์ฟเวอร์ไม่ว่าง", "deleteTranslationRecord": "ลบบันทึกการแปล", - "deleteTranslationConfirm": "คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกการแปลนี้ การกระทำนี้ไม่สามารถย้อนกลับได้", + "deleteTranslationConfirm": + "คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกการแปลนี้ การกระทำนี้ไม่สามารถย้อนกลับได้", "originalText": "ข้อความต้นฉบับ", "translatedText": "ข้อความที่แปลแล้ว", "sessionSummary": "สรุปเซสชัน", @@ -1227,19 +1329,24 @@ const Map thTH = { // 配对状态文本 "readyToPair": "พร้อมที่จะจับคู่", "preparingPairingEnvironment": "กำลังเตรียมสภาพแวดล้อมการจับคู่...", - "connectDeepSoundViaSystemBluetooth": "กรุณาเชื่อมต่อกับอุปกรณ์ Voitrans ผ่านบลูทูธของระบบก่อน", + "connectDeepSoundViaSystemBluetooth": + "กรุณาเชื่อมต่อกับอุปกรณ์ Voitrans ผ่านบลูทูธของระบบก่อน", "deviceBindingConfirm": "ยืนยันการผูกอุปกรณ์...", "establishingDeviceAssociation": "กำลังสร้างการเชื่อมโยงอุปกรณ์...", "waitingCompletePairing": "กรุณารอสักครู่ กำลังทำการจับคู่ให้เสร็จสิ้น...", - "pairingSuccessRedirecting": "การจับคู่สำเร็จ! กำลังเปลี่ยนเส้นทางไปยังหน้าหลัก...", + "pairingSuccessRedirecting": + "การจับคู่สำเร็จ! กำลังเปลี่ยนเส้นทางไปยังหน้าหลัก...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "โปรดตรวจสอบให้แน่ใจว่าคุณเชื่อมต่อกับอุปกรณ์ Voitrans", + "ensureConnectedDeepSoundDevice": + "โปรดตรวจสอบให้แน่ใจว่าคุณเชื่อมต่อกับอุปกรณ์ Voitrans", "deviceAlreadyBoundToOtherAccount": "อุปกรณ์นี้ถูกผูกไว้กับบัญชีอื่นแล้ว", "deviceAssociationFailed": "การเชื่อมโยงอุปกรณ์ล้มเหลว โปรดลองอีกครั้ง", - "scanTimeoutEnsureDeviceNearby": "การสแกนหมดเวลา โปรดตรวจสอบให้แน่ใจว่าอุปกรณ์อยู่ใกล้ๆ", + "scanTimeoutEnsureDeviceNearby": + "การสแกนหมดเวลา โปรดตรวจสอบให้แน่ใจว่าอุปกรณ์อยู่ใกล้ๆ", "networkError": "ข้อผิดพลาดเครือข่าย", - "authorizationFailedCheckCode": "การอนุญาตล้มเหลว โปรดตรวจสอบว่ารหัสอนุญาตถูกต้องหรือไม่", + "authorizationFailedCheckCode": + "การอนุญาตล้มเหลว โปรดตรวจสอบว่ารหัสอนุญาตถูกต้องหรือไม่", "pairingFailedRetry": "การจับคู่ล้มเหลว โปรดลองอีกครั้ง", // 配对控制器相关 @@ -1248,7 +1355,8 @@ const Map thTH = { 'deviceDisconnected': 'อุปกรณ์ตัดการเชื่อมต่อแล้ว', 'readyToStartPairing': 'พร้อมที่จะเริ่มการจับคู่', 'checkingEnvironment': 'กำลังตรวจสอบสภาพแวดล้อม...', - 'ensureHeadsetOnAndPairingMode': 'โปรดตรวจสอบให้แน่ใจว่าหูฟังเปิดอยู่และอยู่ในโหมดจับคู่', + 'ensureHeadsetOnAndPairingMode': + 'โปรดตรวจสอบให้แน่ใจว่าหูฟังเปิดอยู่และอยู่ในโหมดจับคู่', //'goToBluetoothSettings': '前往蓝牙设置', //'verifyingDevice': '正在验证设备...', //'confirmBinding': '确认绑定', @@ -1270,15 +1378,20 @@ const Map thTH = { 'bleConnectionTimeoutRetry': 'การเชื่อมต่อ BLE หมดเวลา โปรดลองอีกครั้ง', 'blePairingStartupFailed': 'การเริ่มต้นการจับคู่ BLE ล้มเหลว', 'bleConnectionFailed': 'การเชื่อมต่อ BLE ล้มเหลว', - 'deviceAuthorizationFailedCheckCode': 'การอนุญาตอุปกรณ์ล้มเหลว โปรดตรวจสอบรหัสอนุญาต', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', // 我知道了 //用户反馈页 @@ -1290,11 +1403,13 @@ const Map thTH = { 'contactInfo': 'ข้อมูลติดต่อ', 'contactHint': 'อีเมล/หมายเลขโทรศัพท์ เพื่อให้เราสามารถติดต่อคุณได้', 'submit': 'ส่ง', - 'feedbackSubmitSuccess': 'ส่งความคิดเห็นสำเร็จ ขอบคุณสำหรับความคิดเห็นของคุณ!', + 'feedbackSubmitSuccess': + 'ส่งความคิดเห็นสำเร็จ ขอบคุณสำหรับความคิดเห็นของคุณ!', 'feedbackSubmitFailed': 'ส่งความคิดเห็นล้มเหลว โปรดลองใหม่ในภายหลัง', // OTA升级模块 - "upgradeExitConfirm": "กำลังอัปเกรด การออกจะขัดจังหวะกระบวนการอัปเกรด คุณแน่ใจหรือไม่ว่าต้องการออก", + "upgradeExitConfirm": + "กำลังอัปเกรด การออกจะขัดจังหวะกระบวนการอัปเกรด คุณแน่ใจหรือไม่ว่าต้องการออก", "deviceModel": "รุ่นอุปกรณ์", "unknownDevice": "อุปกรณ์ที่ไม่รู้จัก", "currentFirmwareVersion": "เวอร์ชันเฟิร์มแวร์ปัจจุบัน", @@ -1307,14 +1422,19 @@ const Map thTH = { "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": "โปรดให้อุปกรณ์เชื่อมต่ออยู่เสมอ อย่าปิดแอปพลิเคชัน", + "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": "กำลังชาร์จ", "updateContent": "เนื้อหาการอัปเดต", - "removeEarbudsEnsureBattery": "ถอดหูฟังทั้งสองข้างออก และตรวจสอบให้แน่ใจว่าแบตเตอรี่ทั้งสองข้างมีพลังงานมากกว่า 20%", + "removeEarbudsEnsureBattery": + "ถอดหูฟังทั้งสองข้างออก และตรวจสอบให้แน่ใจว่าแบตเตอรี่ทั้งสองข้างมีพลังงานมากกว่า 20%", // 音乐列表页面 "noMusic": "ไม่มีเพลง", // 暂无音乐 @@ -1376,8 +1496,10 @@ const Map thTH = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 393860b45..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", @@ -71,7 +72,8 @@ const Map tlPH = { // 登录页 "welcome": "Maligayang pagdating", - "loginTips": "Mangyaring mag-login o mag-signup gamit ang iyong numero ng telepono o email", + "loginTips": + "Mangyaring mag-login o mag-signup gamit ang iyong numero ng telepono o email", "accountNumber": "Numero ng Telepono o Email", "verificationCode": "Verification Code", "getCode": "Kunin ang Code", @@ -90,7 +92,8 @@ const Map tlPH = { "tip": "Paalala", "pleaseEnterCompleteCode": "Pakilagay ang kumpletong verification code", "loginFailed": "Nabigo ang pag-login, pakisubukang muli", - 'pleaseAcceptPrivacyPolicy': 'Pakibasa at sumang-ayon muna sa Patakaran sa Privacy at Kasunduan ng User', + 'pleaseAcceptPrivacyPolicy': + 'Pakibasa at sumang-ayon muna sa Patakaran sa Privacy at Kasunduan ng User', "enterVerificationCode": "Ilagay ang Verification Code", "verificationCodeSentTo": "Ang verification code ay ipinadala sa", "resendVerificationCode": "Ipadala muli ang verification code", @@ -99,7 +102,8 @@ const Map tlPH = { // 隐私政策弹窗 "loginDeclaration": "Pahayag ng Voitrans", // Voitrans 声明 - "welcomeToThisApp": "Maligayang pagdating sa Voitrans, mangyaring basahin nang mabuti", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Maligayang pagdating sa Voitrans, mangyaring basahin nang mabuti", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +119,30 @@ const Map tlPH = { "signal": "Signal", "deviceId": "Device ID", "firmwareVersion": "Bersyon ng Firmware", - "disconnectedDevice": "Walang device na konektado, i-click ang button sa ibaba para kumonekta", + "disconnectedDevice": + "Walang device na konektado, i-click ang button sa ibaba para kumonekta", "connectDevice": "Ikonekta ang Device", "topAiExperiences": "Mga Nangungunang Karanasan sa AI", "aiAssistant": "AI All-in-One Assistant", - "aiAssistantInfo": "24/7 na eksklusibong consultant, sumasagot sa mga tanong, nagbibigay ng payo", + "aiAssistantInfo": + "24/7 na eksklusibong consultant, sumasagot sa mga tanong, nagbibigay ng payo", "interpretation": "Sabayang Pagsasalin", - "simultaneousInterpretationInfo": "Real-time na pagsasalin sa 80+ na wika, walang alalahanin sa paglalakbay sa ibang bansa", + "simultaneousInterpretationInfo": + "Real-time na pagsasalin sa 80+ na wika, walang alalahanin sa paglalakbay sa ibang bansa", "aiCompanion": "Kasama ng Pamilya", "aiCompanionInfo": "Nakakaintindi sa iyo, mainit na samahan", "homeSlogan": "Ikonekta ang mundo, lampas sa tunog", - "turnEarphones": "Pakibuksan ang charging case ng earphones, at ilagay ang earphones sa iyong mga tainga", + "turnEarphones": + "Pakibuksan ang charging case ng earphones, at ilagay ang earphones sa iyong mga tainga", "currentlyConnected": "Kasalukuyang konektado:", "unsystemSetup": "Pumunta sa Mga Setting ng System", "talkLater": "Mamaya na", "initializing": "Nag-i-initialize...", - "bluetoothInitializationFailure": "Nabigo ang pag-initialize ng serbisyo ng Bluetooth", + "bluetoothInitializationFailure": + "Nabigo ang pag-initialize ng serbisyo ng Bluetooth", "checkingPermissions": "Sinusuri ang mga pahintulot...", - "lackPermissions": "Kulang sa mga pahintulot ng Bluetooth at sumasang-ayon ka sa lokasyon", + "lackPermissions": + "Kulang sa mga pahintulot ng Bluetooth at sumasang-ayon ka sa lokasyon", "searchingDevice": "Naghahanap ng mga device...", "findConnectedDevice": "Natagpuan ang konektadong device", "notFound": "Walang natagpuang konektadong Bluetooth device", @@ -164,7 +174,8 @@ const Map tlPH = { "exploreAi": "Galugarin ang mga function ng AI na inaalok ng Voitrans", "aiFunction": "Mga Function ng AI", "allRoundAssistant": "All-in-One Assistant", - "allRoundAssistantInfo": "Tumutulong sa iyong malutas ang iba't ibang problema", + "allRoundAssistantInfo": + "Tumutulong sa iyong malutas ang iba't ibang problema", "simultaneousTranslation": "Sabayang Pagsasalin", "faceToFaceTranslation": "Pagsasalin ng Harapan", 'audioVideoTranslation': 'Pagsasalin ng Audio at Video', @@ -175,7 +186,8 @@ const Map tlPH = { "healthConsultant": "Multi-functional na AI Chat", "healthConsultantInfo": "Nagbibigay ng mas maraming function ng AI chat", "conferenceAssistant": "Business Meeting Assistant", - "conferenceAssistantInfo": "Real-time na pagtatala ng mga minuto ng pulong, pagsasalin sa maraming wika", + "conferenceAssistantInfo": + "Real-time na pagtatala ng mga minuto ng pulong, pagsasalin sa maraming wika", "usageStats": "Usage Statistics", "usageStatsInfo": "View your usage statistics", "scene": "Eksena", @@ -218,7 +230,8 @@ const Map tlPH = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +287,10 @@ const Map tlPH = { '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.', + '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', @@ -284,27 +299,35 @@ const Map tlPH = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +336,10 @@ const Map tlPH = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +354,8 @@ const Map tlPH = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Laktawan", @@ -355,7 +381,8 @@ const Map tlPH = { '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”', + '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', @@ -405,7 +432,8 @@ const Map tlPH = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +488,54 @@ const Map tlPH = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +547,8 @@ const Map tlPH = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +568,8 @@ const Map tlPH = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +618,8 @@ const Map tlPH = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +644,8 @@ const Map tlPH = { "cloudSync": "Pagsasalin ng Recharge ng Cloud", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Konektadong device:", "accountId": "Account ID:", "systemSetting": "Setting ng System", @@ -612,18 +658,22 @@ const Map tlPH = { "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", // 管理应用权限设置 + "permissionManagementInfo": + "Pamahalaan ang mga setting ng pahintulot ng app", // 管理应用权限设置 "aboutApplication": "Tungkol sa App", "versions": "Bersyon", "checkUpdates": "Suriin kung may mga Update", "selectLanguage": "Pumili ng Wika", "voiceService": "Serbisyo ng Boses", - "voiceServiceInfo": "Pumili ng serbisyo para sa pagkilala at pag-synthesize ng boses", + "voiceServiceInfo": + "Pumili ng serbisyo para sa pagkilala at pag-synthesize ng boses", "selectVoiceService": "Pumili ng Serbisyo ng Boses", "azureVoiceService": "Azure Voice Service", - "azureVoiceServiceInfo": "Serbisyo ng boses sa cloud ng Microsoft, sumusuporta sa mataas na kalidad na voice synthesis at recognition", + "azureVoiceServiceInfo": + "Serbisyo ng boses sa cloud ng Microsoft, sumusuporta sa mataas na kalidad na voice synthesis at recognition", "flutterVoiceService": "Flutter Local Voice Service", - "flutterVoiceServiceInfo": "Lokal na serbisyo ng boses sa device, maaaring gamitin nang walang koneksyon sa internet", + "flutterVoiceServiceInfo": + "Lokal na serbisyo ng boses sa device, maaaring gamitin nang walang koneksyon sa internet", 'timbreService': 'Serbisyo ng Timbre', 'timbreServiceInfo': 'Pumili ng serbisyo ng voice synthesis na may timbre', 'defaultTimbre': 'Default na Timbre', @@ -634,7 +684,8 @@ const Map tlPH = { 'pleaseRead': 'Pakibasa nang malakas', 'completeRecording': 'Kumpletuhin ang Pag-record', "firmwareUpgrade": "Pag-upgrade ng Firmware", - "bleHeadsetFirmwareUpgrade": "Pag-upgrade ng Bersyon ng Firmware ng BLE Headset", + "bleHeadsetFirmwareUpgrade": + "Pag-upgrade ng Bersyon ng Firmware ng BLE Headset", "deviceManagement": "Pamamahala ng Device", "manageConnectedDevices": "Pamahalaan ang mga naka-pair na Bluetooth device", @@ -652,7 +703,8 @@ const Map tlPH = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Real-time na Voice Chat", - "realtimeVoiceChatInfo": "Damhin ang matalinong voice interaction function (feature preview)", + "realtimeVoiceChatInfo": + "Damhin ang matalinong voice interaction function (feature preview)", "loading": "Naglo-load...", //设备管理页面 @@ -667,7 +719,8 @@ const Map tlPH = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -678,7 +731,8 @@ const Map tlPH = { "inputMessage": "Mag-type ng mensahe...", "imListening": "Nakikinig...", "canStartTalking": "Maaari ka nang magsalita", - "addQuestionAboutImage": "Magdagdag ng tanong o paglalarawan tungkol sa larawan...", + "addQuestionAboutImage": + "Magdagdag ng tanong o paglalarawan tungkol sa larawan...", "summarizeImageContent": "Ibuod ang nilalaman ng larawan", "extractImageText": "I-extract ang teksto sa imahe", "translateImageText": "Isalin ang teksto sa imahe", @@ -721,10 +775,14 @@ const Map tlPH = { '• Pagkontrol sa mga function ng earphone\n\n' 'Paano kita matutulungan?', 'microphonePermission': 'Mikropono', - 'voiceRecognitionPermissionText': 'Ang pagkilala sa boses ay nangangailangan ng access sa mikropono.', - 'voiceTranslationPermissionText': 'Ang pagkilala at pagsasalin ng boses ay nangangailangan ng access sa mikropono.', - 'phoneCallPermissionText': 'Ang pagtawag ay nangangailangan ng access sa mikropono para sa mga voice call.', - 'permissionDeniedText': 'Permanenteng tinanggihan mo ang pahintulot sa mikropono, mangyaring pumunta sa mga setting ng system para paganahin ito.', + 'voiceRecognitionPermissionText': + 'Ang pagkilala sa boses ay nangangailangan ng access sa mikropono.', + 'voiceTranslationPermissionText': + 'Ang pagkilala at pagsasalin ng boses ay nangangailangan ng access sa mikropono.', + 'phoneCallPermissionText': + 'Ang pagtawag ay nangangailangan ng access sa mikropono para sa mga voice call.', + 'permissionDeniedText': + 'Permanenteng tinanggihan mo ang pahintulot sa mikropono, mangyaring pumunta sa mga setting ng system para paganahin ito.', 'startVoiceInput': 'Simulan ang voice input', 'startPhoneCallMode': 'Simulan ang mode ng pagtawag, simulan ang voice input', @@ -738,7 +796,8 @@ const Map tlPH = { 'report': 'I-report', 'submitSuccess': 'Matagumpay na naisumite', 'submitFailed': 'Nabigo ang pagsusumite', - 'reportSubmitted': 'Naisumite na ang report, ipoproseso namin ito sa lalong madaling panahon', + 'reportSubmitted': + 'Naisumite na ang report, ipoproseso namin ito sa lalong madaling panahon', //'networkError': '网络错误,请稍后重试', 'harmfulUnsafe': 'Nakapipinsala/Hindi Ligtas', 'pornographicVulgar': 'Pornograpiko/Bastos', @@ -747,7 +806,8 @@ const Map tlPH = { 'privacyRelated': 'May kaugnayan sa Privacy', 'copyrightViolation': 'Lumabag sa aking copyright, reputasyon, atbp.', 'other': 'Iba pa', - 'reportDescriptionHint': 'Gusto naming malaman kung bakit ka nagre-report, maaari mong ilarawan ang problemang iyong naranasan.', + 'reportDescriptionHint': + 'Gusto naming malaman kung bakit ka nagre-report, maaari mong ilarawan ang problemang iyong naranasan.', //'submit': '提交', //Message_bubble @@ -778,15 +838,24 @@ const Map tlPH = { 'highest': 'Pinakamataas', 'lowest': 'Pinakamababa', 'futureForecast': 'Pagtataya sa Hinaharap', - 'hotWeatherTip': 'Mainit ngayon, mag-ingat sa heatstroke, uminom ng maraming tubig', - 'coldWeatherTip': 'Malamig ang temperatura ngayon, magsuot ng mainit na damit kapag lalabas para maiwasan ang sipon', - 'rainyWeatherTip': 'May ulan ngayon, magdala ng payong kapag lalabas, mag-ingat sa paglalakbay', - 'snowyWeatherTip': 'May snow ngayon, madulas ang daan, mag-ingat at magsuot ng panlamig', - 'foggyWeatherTip': 'May hamog ngayon, mababa ang visibility, magsuot ng mask kapag lalabas', - 'windyWeatherTip': 'Mahangin ngayon, mag-ingat kapag lalabas, i-secure ang mga gamit', - 'sunnyWeatherTip': 'Maaraw at malakas ang UV rays ngayon, maglagay ng sunscreen kapag lalabas', - 'temperatureDifferenceTip': 'Malaki ang pagkakaiba ng temperatura sa araw at gabi, magsuot ng damit na angkop', - 'comfortableWeatherTip': 'Maganda ang panahon ngayon, magandang oras para sa mga aktibidad sa labas', + 'hotWeatherTip': + 'Mainit ngayon, mag-ingat sa heatstroke, uminom ng maraming tubig', + 'coldWeatherTip': + 'Malamig ang temperatura ngayon, magsuot ng mainit na damit kapag lalabas para maiwasan ang sipon', + 'rainyWeatherTip': + 'May ulan ngayon, magdala ng payong kapag lalabas, mag-ingat sa paglalakbay', + 'snowyWeatherTip': + 'May snow ngayon, madulas ang daan, mag-ingat at magsuot ng panlamig', + 'foggyWeatherTip': + 'May hamog ngayon, mababa ang visibility, magsuot ng mask kapag lalabas', + 'windyWeatherTip': + 'Mahangin ngayon, mag-ingat kapag lalabas, i-secure ang mga gamit', + 'sunnyWeatherTip': + 'Maaraw at malakas ang UV rays ngayon, maglagay ng sunscreen kapag lalabas', + 'temperatureDifferenceTip': + 'Malaki ang pagkakaiba ng temperatura sa araw at gabi, magsuot ng damit na angkop', + 'comfortableWeatherTip': + 'Maganda ang panahon ngayon, magandang oras para sa mga aktibidad sa labas', "monday": "Lunes", "tuesday": "Martes", "wednesday": "Miyerkules", @@ -836,24 +905,33 @@ const Map tlPH = { "notSet": "Hindi Naitakda", "accountSetting": "Setting ng Account", "logout": "Mag-logout", - "logoutTips": "Sigurado ka bang gusto mong mag-logout sa kasalukuyang account?", + "logoutTips": + "Sigurado ka bang gusto mong mag-logout sa kasalukuyang account?", 'deleteAccount': 'Burahin ang Account', - 'deleteAccountTips': 'Sigurado ka bang gusto mong permanenteng burahin ang iyong account? Hindi na ito maibabalik.', + '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': 'Nabigo ang koneksyon sa network, pakisuri ang iyong mga setting ng network at subukang muli', - 'serverTemporarilyUnavailable': 'Pansamantalang hindi available ang server, pakisubukang muli mamaya', - 'loginExpiredPleaseRelogin': 'Nag-expire na ang iyong pag-login, mangyaring mag-login muli', - 'noPermissionForThisOperation': 'Walang pahintulot na gawin ang operasyong ito', + 'networkConnectionFailed': + 'Nabigo ang koneksyon sa network, pakisuri ang iyong mga setting ng network at subukang muli', + 'serverTemporarilyUnavailable': + 'Pansamantalang hindi available ang server, pakisubukang muli mamaya', + 'loginExpiredPleaseRelogin': + 'Nag-expire na ang iyong pag-login, mangyaring mag-login muli', + 'noPermissionForThisOperation': + 'Walang pahintulot na gawin ang operasyong ito', 'requestedResourceNotFound': 'Hindi natagpuan ang hiniling na mapagkukunan', - 'imageProcessingFailedPleaseReselect': 'Nabigo ang pagproseso ng imahe, mangyaring pumili muli ng imahe', + 'imageProcessingFailedPleaseReselect': + 'Nabigo ang pagproseso ng imahe, mangyaring pumili muli ng imahe', 'operationFailedPleaseRetry': 'Nabigo ang operasyon, pakisubukang muli', 'serverReturnedError': 'Nagbalik ng error ang server', 'serverError': 'Error sa Server', - 'networkConnectionFailedCheckSettings': 'Nabigo ang koneksyon sa network, pakisuri ang iyong mga setting ng network', - 'serverInternalErrorRetryLater': 'Internal na error sa server, pakisubukang muli mamaya', + 'networkConnectionFailedCheckSettings': + 'Nabigo ang koneksyon sa network, pakisuri ang iyong mga setting ng network', + 'serverInternalErrorRetryLater': + 'Internal na error sa server, pakisubukang muli mamaya', // Profile 用户交互 //'error': '错误', @@ -872,13 +950,18 @@ const Map tlPH = { // 账号服务相关 'clearUserDataFailed': 'Nabigong i-clear ang data ng user', // 清理用户数据失败 'deleteUserDataFailed': 'Nabigong burahin ang data ng user', // 删除用户数据失败 - 'thirdPartyLogoutSuccess': 'Matagumpay na naka-logout sa third-party', // 第三方登录退出成功 + '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', // 删除账号过程发生错误 + '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', // AccountService 已初始化 + 'allUserDataClearSuccess': + 'Matagumpay na na-clear ang lahat ng data ng user', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Naisimulan na ang AccountService', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Nabigong makuha ang katayuan ng pahintulot', @@ -901,10 +984,14 @@ const Map tlPH = { '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': 'Ginagamit para sa pagbabasa at pamamahala ng mga kaganapan at paalala sa kalendaryo', - 'locationPermissionDesc': 'Ginagamit para sa pagkuha ng kasalukuyang impormasyon sa lokasyon', + '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': + 'Ginagamit para sa pagbabasa at pamamahala ng mga kaganapan at paalala sa kalendaryo', + 'locationPermissionDesc': + 'Ginagamit para sa pagkuha ng kasalukuyang impormasyon sa lokasyon', 'appFunctionNeeds': 'Kailangan ng function ng app', 'authorized': 'Pinahintulutan', 'unauthorized': 'Hindi Pinahintulutan', @@ -913,45 +1000,71 @@ const Map tlPH = { 'unknownStatus': 'Hindi Malamang Katayuan', 'permissionGranted': 'Naibigay na ang pahintulot', 'permissionRequestError': 'Error sa paghiling ng pahintulot', - 'phonePermissionDetailDesc': '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', + 'phonePermissionDetailDesc': + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1074,8 @@ const Map tlPH = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1084,10 @@ const Map tlPH = { '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', // 无法打开应用商店提示 - 'updateErrorRetry': 'Nagkaroon ng error habang nag-a-update, pakisubukang muli mamaya', // 更新错误重试提示 + 'cannotOpenAppStore': + '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', // 更新错误重试提示 //国家列表 "邮箱": "Email", @@ -1107,7 +1223,8 @@ const Map tlPH = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1240,12 @@ const Map tlPH = { "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.", + "clearHistoryConfirm": + "Sigurado ka bang gusto mong burahin ang lahat ng kasaysayan ng pagsasalin? Hindi na ito maibabalik.", "unknownLanguage": "Hindi Kilalang Wika", "deleteSessionRecord": "Burahin ang Record ng Session", - "deleteSessionConfirm": "Sigurado ka bang gusto mong burahin ang lahat ng record ng pagsasalin para sa session na ito? Hindi na ito maibabalik.", + "deleteSessionConfirm": + "Sigurado ka bang gusto mong burahin ang lahat ng record ng pagsasalin para sa session na ito? Hindi na ito maibabalik.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1277,20 @@ const Map tlPH = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1313,8 @@ const Map tlPH = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Orihinal na Record", "recordSummary": "Buod ng Record", - "clickToGenerateSummary": "I-click ang button sa ibaba para bumuo ng buod ng session", + "clickToGenerateSummary": + "I-click ang button sa ibaba para bumuo ng buod ng session", "summaryContent": "Nilalaman ng Buod", "copied": "Nakopya", "summaryCopiledToClipboard": "Nakopya ang buod sa clipboard", @@ -1197,9 +1322,11 @@ const Map tlPH = { "summaryGenerated": "Nabuong buod", "generating": "Gumagawa...", "regenerate": "Muling buuin", - "summaryTimeoutMessage": "Nag-time out ang kahilingan sa pagbuo ng buod, maaaring dahil sa problema sa network o abala ang server.", + "summaryTimeoutMessage": + "Nag-time out ang kahilingan sa pagbuo ng buod, maaaring dahil sa problema sa network o abala ang server.", "deleteTranslationRecord": "Burahin ang Record ng Pagsasalin", - "deleteTranslationConfirm": "Sigurado ka bang gusto mong burahin ang record ng pagsasalin na ito? Hindi na ito maibabalik.", + "deleteTranslationConfirm": + "Sigurado ka bang gusto mong burahin ang record ng pagsasalin na ito? Hindi na ito maibabalik.", "originalText": "Orihinal na Teksto", "translatedText": "Isinaling Teksto", "sessionSummary": "Buod ng Session", @@ -1226,20 +1353,28 @@ const Map tlPH = { // 配对状态文本 "readyToPair": "Handa nang i-pair", - "preparingPairingEnvironment": "Inihahanda ang kapaligiran para sa pag-pair...", - "connectDeepSoundViaSystemBluetooth": "Mangyaring kumonekta muna sa Voitrans device sa pamamagitan ng system Bluetooth", + "preparingPairingEnvironment": + "Inihahanda ang kapaligiran para sa pag-pair...", + "connectDeepSoundViaSystemBluetooth": + "Mangyaring kumonekta muna sa Voitrans device sa pamamagitan ng system Bluetooth", "deviceBindingConfirm": "Kumpirmasyon sa pag-bind ng device...", "establishingDeviceAssociation": "Itinatatag ang ugnayan ng device...", "waitingCompletePairing": "Pakihintay, kinukumpleto ang pag-pair...", - "pairingSuccessRedirecting": "Matagumpay ang pag-pair! Papunta na sa home page...", + "pairingSuccessRedirecting": + "Matagumpay ang pag-pair! Papunta na sa home page...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Pakitiyak na konektado ka sa isang Voitrans device", - "deviceAlreadyBoundToOtherAccount": "Ang device na ito ay naka-bind na sa ibang account", - "deviceAssociationFailed": "Nabigo ang pag-uugnay ng device, pakisubukang muli", - "scanTimeoutEnsureDeviceNearby": "Nag-time out ang pag-scan, pakitiyak na malapit ang device", + "ensureConnectedDeepSoundDevice": + "Pakitiyak na konektado ka sa isang Voitrans device", + "deviceAlreadyBoundToOtherAccount": + "Ang device na ito ay naka-bind na sa ibang account", + "deviceAssociationFailed": + "Nabigo ang pag-uugnay ng device, pakisubukang muli", + "scanTimeoutEnsureDeviceNearby": + "Nag-time out ang pag-scan, pakitiyak na malapit ang device", "networkError": "Error sa Network", - "authorizationFailedCheckCode": "Nabigo ang awtorisasyon, pakisuri kung tama ang authorization code", + "authorizationFailedCheckCode": + "Nabigo ang awtorisasyon, pakisuri kung tama ang authorization code", "pairingFailedRetry": "Nabigo ang pag-pair, pakisubukang muli", // 配对控制器相关 @@ -1248,53 +1383,67 @@ const Map tlPH = { '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', + '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...', + 'needManualBindingAuthCode': + 'Kailangan ng manual binding authorization code...', 'pairingSuccessful': 'Matagumpay ang pag-pair!', 'enableBluetooth': 'Paganahin ang Bluetooth', 'grantPermissions': 'Magbigay ng mga Pahintulot', 'retryAssociation': 'Muling iugnay', 'retryAuthorization': 'Muling pahintulutan', - 'pleaseGrantNecessaryPermissions': 'Pakibigay ang mga kinakailangang pahintulot', + 'pleaseGrantNecessaryPermissions': + 'Pakibigay ang mga kinakailangang pahintulot', 'checkFailedRetry': 'Nabigo ang pagsuri, pakisubukang muli', 'pleaseConnectDeepSoundDevice': 'Pakikonekta ang isang Voitrans device', 'verificationFailedRetry': 'Nabigo ang pag-verify, pakisubukang muli', 'invalidDeviceAddress': 'Hindi wastong address ng device', 'bleDeviceAssociationFailed': 'Nabigo ang pag-uugnay ng BLE device', - 'deviceAssociationFailedRetry': 'Nabigo ang pag-uugnay ng device, pakisubukang muli', - 'bleConnectionTimeoutRetry': 'Nag-time out ang koneksyon ng BLE, pakisubukang muli', + 'deviceAssociationFailedRetry': + 'Nabigo ang pag-uugnay ng device, pakisubukang muli', + 'bleConnectionTimeoutRetry': + 'Nag-time out ang koneksyon ng BLE, pakisubukang muli', 'blePairingStartupFailed': 'Nabigo ang pagsisimula ng BLE pairing', 'bleConnectionFailed': 'Nabigo ang koneksyon ng BLE', - 'deviceAuthorizationFailedCheckCode': 'Nabigo ang awtorisasyon ng device, pakisuri ang authorization code', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', - 'feedbackDescription': 'Pakilarawan ang problemang naranasan o ang iyong suhestiyon', + 'feedbackDescription': + 'Pakilarawan ang problemang naranasan o ang iyong suhestiyon', 'feedbackHint': 'Pakilagay ang iyong feedback...', 'feedbackRequired': 'Pakilagay ang nilalaman ng feedback', 'contactInfo': 'Impormasyon sa Pakikipag-ugnayan', 'contactHint': 'Email/Numero ng telepono, para makontak ka namin', 'submit': 'Isumite', - 'feedbackSubmitSuccess': 'Matagumpay na naisumite ang feedback, salamat sa iyong feedback!', - 'feedbackSubmitFailed': 'Nabigong isumite ang feedback, pakisubukang muli mamaya', + 'feedbackSubmitSuccess': + 'Matagumpay na naisumite ang feedback, salamat sa iyong feedback!', + 'feedbackSubmitFailed': + 'Nabigong isumite ang feedback, pakisubukang muli mamaya', // OTA升级模块 - "upgradeExitConfirm": "Kasalukuyang nag-a-upgrade, ang pag-exit ay makakaantala sa proseso, sigurado ka bang gusto mong mag-exit?", + "upgradeExitConfirm": + "Kasalukuyang nag-a-upgrade, ang pag-exit ay makakaantala sa proseso, sigurado ka bang gusto mong mag-exit?", "deviceModel": "Modelo ng Device", "unknownDevice": "Hindi Kilalang Device", "currentFirmwareVersion": "Kasalukuyang Bersyon ng Firmware", @@ -1307,14 +1456,19 @@ const Map tlPH = { "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", + "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", "charging": "Nagcha-charge", "updateContent": "Nilalaman ng Update", - "removeEarbudsEnsureBattery": "Alisin ang parehong earbuds, at tiyaking parehong may 20% o higit pang baterya", + "removeEarbudsEnsureBattery": + "Alisin ang parehong earbuds, at tiyaking parehong may 20% o higit pang baterya", // 音乐列表页面 "noMusic": "Walang Musika", // 暂无音乐 @@ -1376,8 +1530,10 @@ const Map tlPH = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 ae652136b..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", @@ -71,7 +72,8 @@ const Map trTR = { // 登录页 "welcome": "Hoş Geldiniz", - "loginTips": "Lütfen telefon numaranızı veya e-postanızı kullanarak giriş yapın veya hesap oluşturun", + "loginTips": + "Lütfen telefon numaranızı veya e-postanızı kullanarak giriş yapın veya hesap oluşturun", "accountNumber": "Telefon Numarası veya E-posta", "verificationCode": "Doğrulama Kodu", "getCode": "Kodu Al", @@ -90,7 +92,8 @@ const Map trTR = { "tip": "İpucu", "pleaseEnterCompleteCode": "Lütfen tam doğrulama kodunu girin", "loginFailed": "Giriş başarısız, lütfen tekrar deneyin", - 'pleaseAcceptPrivacyPolicy': 'Lütfen önce Gizlilik Politikasını ve Kullanıcı Sözleşmesini okuyup kabul edin', + 'pleaseAcceptPrivacyPolicy': + 'Lütfen önce Gizlilik Politikasını ve Kullanıcı Sözleşmesini okuyup kabul edin', "enterVerificationCode": "Doğrulama kodunu girin", "verificationCodeSentTo": "Doğrulama kodu şuraya gönderildi:", "resendVerificationCode": "Doğrulama kodunu tekrar gönder", @@ -99,7 +102,8 @@ const Map trTR = { // 隐私政策弹窗 "loginDeclaration": "Voitrans Beyanı", // Voitrans 声明 - "welcomeToThisApp": "Voitrans'a hoş geldiniz, lütfen dikkatlice okuyun", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Voitrans'a hoş geldiniz, lütfen dikkatlice okuyun", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,17 +119,20 @@ const Map trTR = { "signal": "Sinyal", "deviceId": "Cihaz Kimliği", "firmwareVersion": "Donanım Yazılımı Sürümü", - "disconnectedDevice": "Bağlı cihaz yok, bağlanmak için aşağıdaki düğmeye tıklayın", + "disconnectedDevice": + "Bağlı cihaz yok, bağlanmak için aşağıdaki düğmeye tıklayın", "connectDevice": "Cihaz Bağla", "topAiExperiences": "En İyi Yapay Zeka Deneyimleri", "aiAssistant": "Her Şey Dahil Yapay Zeka Asistanı", "aiAssistantInfo": "Sorular ve tavsiyeler için 7/24 özel danışman", "interpretation": "Simultane Çeviri", - "simultaneousInterpretationInfo": "80'den fazla dil için gerçek zamanlı çeviri, sorunsuz yurt dışı seyahati", + "simultaneousInterpretationInfo": + "80'den fazla dil için gerçek zamanlı çeviri, sorunsuz yurt dışı seyahati", "aiCompanion": "Aile Arkadaşı", "aiCompanionInfo": "Sizi anlar ve sıcak bir arkadaşlık sunar", "homeSlogan": "Dünyayla bağlan, sesin ötesine geç", - "turnEarphones": "Lütfen kulaklık şarj kutusunu açın ve kulaklıkları kulaklarınıza takın", + "turnEarphones": + "Lütfen kulaklık şarj kutusunu açın ve kulaklıkları kulaklarınıza takın", "currentlyConnected": "Şu anda bağlı:", "unsystemSetup": "Sistem ayarlarına git", "talkLater": "Daha Sonra", @@ -175,7 +182,8 @@ const Map trTR = { "healthConsultant": "Çok Fonksiyonlu Yapay Zeka Sohbeti", "healthConsultantInfo": "Daha fazla yapay zeka sohbet özelliği sunar", "conferenceAssistant": "İş Toplantısı Asistanı", - "conferenceAssistantInfo": "Gerçek zamanlı toplantı tutanakları, çok dilli çeviri", + "conferenceAssistantInfo": + "Gerçek zamanlı toplantı tutanakları, çok dilli çeviri", "usageStats": "Kullanım İstatistikleri", "usageStatsInfo": "Kullanım istatistiklerinizi görüntüleyin", "scene": "Senaryo", @@ -218,7 +226,8 @@ const Map trTR = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +283,10 @@ const Map trTR = { '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.', + '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', @@ -284,27 +295,35 @@ const Map trTR = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +332,10 @@ const Map trTR = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +350,8 @@ const Map trTR = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Atla", @@ -355,7 +377,8 @@ const Map trTR = { '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”', + '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', @@ -405,7 +428,8 @@ const Map trTR = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +484,54 @@ const Map trTR = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +543,8 @@ const Map trTR = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +564,8 @@ const Map trTR = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +614,8 @@ const Map trTR = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,13 +640,15 @@ const Map trTR = { "cloudSync": "Bulut Sincronizasyonu", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Bağlı cihaz:", "accountId": "Hesap Kimliği:", "systemSetting": "Sistem Ayarları", "languageSetting": "Dil Ayarları", "darkMode": "Karanlık Mod", - "darkModeInfo": "Uygulamanın aydınlık ve karanlık temaları arasında geçiş yapın", + "darkModeInfo": + "Uygulamanın aydınlık ve karanlık temaları arasında geçiş yapın", "backups": "Yedekle ve Geri Yükle", "backupsInfo": "Ayarları ve yapay zeka etkileşim geçmişini yedekleyin", "lastBackup": "Son yedekleme:", @@ -621,9 +664,11 @@ const Map trTR = { "voiceServiceInfo": "Ses tanıma ve sentezleme hizmetini seçin", "selectVoiceService": "Ses Hizmeti Seç", "azureVoiceService": "Azure Ses Hizmeti", - "azureVoiceServiceInfo": "Yüksek kaliteli ses sentezi ve tanımayı destekleyen Microsoft bulut ses hizmeti", + "azureVoiceServiceInfo": + "Yüksek kaliteli ses sentezi ve tanımayı destekleyen Microsoft bulut ses hizmeti", "flutterVoiceService": "Flutter Yerel Ses Hizmeti", - "flutterVoiceServiceInfo": "Cihazın yerel ses hizmeti, internet bağlantısı olmadan kullanılabilir", + "flutterVoiceServiceInfo": + "Cihazın yerel ses hizmeti, internet bağlantısı olmadan kullanılabilir", 'timbreService': 'Ses Tonu Hizmeti', 'timbreServiceInfo': 'Ses sentezi için ses tonu hizmeti seçin', 'defaultTimbre': 'Varsayılan Ses Tonu', @@ -634,7 +679,8 @@ const Map trTR = { 'pleaseRead': 'Lütfen Yüksek Sesle Okuyun', 'completeRecording': 'Kaydı Tamamla', "firmwareUpgrade": "Donanım Yazılımı Güncellemesi", - "bleHeadsetFirmwareUpgrade": "BLE Kulaklık Donanım Yazılımı Sürüm Güncellemesi", + "bleHeadsetFirmwareUpgrade": + "BLE Kulaklık Donanım Yazılımı Sürüm Güncellemesi", "deviceManagement": "Cihaz Yönetimi", "manageConnectedDevices": "Bağlı Bluetooth cihazlarını yönetin", @@ -652,7 +698,8 @@ const Map trTR = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Gerçek Zamanlı Sesli Sohbet", - "realtimeVoiceChatInfo": "Akıllı sesli etkileşim özelliğini deneyimleyin (Özellik Önizlemesi)", + "realtimeVoiceChatInfo": + "Akıllı sesli etkileşim özelliğini deneyimleyin (Özellik Önizlemesi)", "loading": "Yükleniyor...", //设备管理页面 @@ -667,7 +714,8 @@ const Map trTR = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -713,7 +761,8 @@ const Map trTR = { "nearbyFood": "What delicious food is nearby?", // 美食 // Agent controller - 'welcomeMessage': 'Merhaba! Ben **Lily**, size şu konularda yardımcı olabilirim:\n\n' + 'welcomeMessage': + 'Merhaba! Ben **Lily**, size şu konularda yardımcı olabilirim:\n\n' '• Soruları yanıtlamak ve bilgi sağlamak\n\n' '• Gerçek zamanlı sesli çeviri\n\n' '• Müzik ve podcast önermek\n\n' @@ -721,10 +770,14 @@ const Map trTR = { '• Kulaklık fonksiyonlarını kontrol etmek\n\n' 'Size nasıl yardımcı olabilirim?', 'microphonePermission': 'Mikrofon', - 'voiceRecognitionPermissionText': 'Ses tanıma özelliği mikrofon erişimi gerektirir.', - 'voiceTranslationPermissionText': 'Ses tanıma ve çeviri özelliği mikrofon erişimi gerektirir.', - 'phoneCallPermissionText': 'Arama yapma özelliği sesli aramalar için mikrofon erişimi gerektirir.', - 'permissionDeniedText': 'Mikrofon iznini kalıcı olarak reddettiniz, lütfen sistem ayarlarından izni etkinleştirin.', + 'voiceRecognitionPermissionText': + 'Ses tanıma özelliği mikrofon erişimi gerektirir.', + 'voiceTranslationPermissionText': + 'Ses tanıma ve çeviri özelliği mikrofon erişimi gerektirir.', + 'phoneCallPermissionText': + 'Arama yapma özelliği sesli aramalar için mikrofon erişimi gerektirir.', + 'permissionDeniedText': + 'Mikrofon iznini kalıcı olarak reddettiniz, lütfen sistem ayarlarından izni etkinleştirin.', 'startVoiceInput': 'Sesli girişi başlat', 'startPhoneCallMode': 'Arama modunu başlat, sesli girişi başlat', @@ -747,7 +800,8 @@ const Map trTR = { 'privacyRelated': 'Gizlilikle İlgili', 'copyrightViolation': 'Telif hakkımı, itibarımı vb. ihlal ediyor', 'other': 'Diğer', - 'reportDescriptionHint': 'Şikayet nedeninizi öğrenmek istiyoruz, karşılaştığınız sorunu açıklayabilirsiniz.', + 'reportDescriptionHint': + 'Şikayet nedeninizi öğrenmek istiyoruz, karşılaştığınız sorunu açıklayabilirsiniz.', //'submit': '提交', //Message_bubble @@ -778,15 +832,24 @@ const Map trTR = { 'highest': 'En Yüksek', 'lowest': 'En Düşük', 'futureForecast': 'Gelecek Tahmini', - 'hotWeatherTip': 'Bugün hava sıcak, lütfen serin kalmaya ve güneş çarpmasını önlemek için bol su içmeye dikkat edin', - 'coldWeatherTip': 'Bugün hava soğuk, dışarı çıkarken üşütmemek için sıkı giyinin', - 'rainyWeatherTip': 'Bugün yağmurlu, dışarı çıkarken şemsiye alın ve dikkatli olun', - 'snowyWeatherTip': 'Bugün karlı, yollar kaygan, lütfen dikkatli olun ve sıcak kalmak için önlem alın', - 'foggyWeatherTip': 'Bugün sisli, görüş mesafesi düşük, dışarı çıkarken maske takın', - 'windyWeatherTip': 'Bugün rüzgarlı, dışarı çıkarken dikkatli olun ve eşyalarınızı sabitleyin', - 'sunnyWeatherTip': 'Bugün güneşli ve UV ışınları güçlü, dışarı çıkarken güneş kremi kullanın', - 'temperatureDifferenceTip': 'Bugün gece ile gündüz arasında büyük sıcaklık farkı var, giysilerinizi buna göre ayarlayın', - 'comfortableWeatherTip': 'Bugün hava güzel, dışarıda vakit geçirmek için harika bir zaman', + 'hotWeatherTip': + 'Bugün hava sıcak, lütfen serin kalmaya ve güneş çarpmasını önlemek için bol su içmeye dikkat edin', + 'coldWeatherTip': + 'Bugün hava soğuk, dışarı çıkarken üşütmemek için sıkı giyinin', + 'rainyWeatherTip': + 'Bugün yağmurlu, dışarı çıkarken şemsiye alın ve dikkatli olun', + 'snowyWeatherTip': + 'Bugün karlı, yollar kaygan, lütfen dikkatli olun ve sıcak kalmak için önlem alın', + 'foggyWeatherTip': + 'Bugün sisli, görüş mesafesi düşük, dışarı çıkarken maske takın', + 'windyWeatherTip': + 'Bugün rüzgarlı, dışarı çıkarken dikkatli olun ve eşyalarınızı sabitleyin', + 'sunnyWeatherTip': + 'Bugün güneşli ve UV ışınları güçlü, dışarı çıkarken güneş kremi kullanın', + 'temperatureDifferenceTip': + 'Bugün gece ile gündüz arasında büyük sıcaklık farkı var, giysilerinizi buna göre ayarlayın', + 'comfortableWeatherTip': + 'Bugün hava güzel, dışarıda vakit geçirmek için harika bir zaman', "monday": "Pzt", "tuesday": "Sal", "wednesday": "Çar", @@ -838,22 +901,28 @@ const Map trTR = { "logout": "Çıkış Yap", "logoutTips": "Mevcut hesaptan çıkmak istediğinizden emin misiniz?", 'deleteAccount': 'Hesabı Sil', - 'deleteAccountTips': 'Hesabınızı kalıcı olarak silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.', + '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': 'Ağ bağlantısı başarısız, lütfen ağ ayarlarını kontrol edip tekrar deneyin', - 'serverTemporarilyUnavailable': 'Sunucu geçici olarak yanıt vermiyor, lütfen daha sonra tekrar deneyin', + 'networkConnectionFailed': + 'Ağ bağlantısı başarısız, lütfen ağ ayarlarını kontrol edip tekrar deneyin', + 'serverTemporarilyUnavailable': + 'Sunucu geçici olarak yanıt vermiyor, lütfen daha sonra tekrar deneyin', 'loginExpiredPleaseRelogin': 'Oturum süresi doldu, lütfen tekrar giriş yapın', 'noPermissionForThisOperation': 'Bu işlemi gerçekleştirmek için izniniz yok', 'requestedResourceNotFound': 'İstenen kaynak bulunamadı', - 'imageProcessingFailedPleaseReselect': 'Resim işlenemedi, lütfen resmi yeniden seçin', + 'imageProcessingFailedPleaseReselect': + 'Resim işlenemedi, lütfen resmi yeniden seçin', 'operationFailedPleaseRetry': 'İşlem başarısız, lütfen tekrar deneyin', 'serverReturnedError': 'Sunucu bir hata döndürdü', 'serverError': 'Sunucu Hatası', - 'networkConnectionFailedCheckSettings': 'Ağ bağlantısı başarısız, lütfen ağ ayarlarını kontrol edin', - 'serverInternalErrorRetryLater': 'Sunucu iç hatası, lütfen daha sonra tekrar deneyin', + 'networkConnectionFailedCheckSettings': + 'Ağ bağlantısı başarısız, lütfen ağ ayarlarını kontrol edin', + 'serverInternalErrorRetryLater': + 'Sunucu iç hatası, lütfen daha sonra tekrar deneyin', // Profile 用户交互 //'error': '错误', @@ -872,13 +941,18 @@ const Map trTR = { // 账号服务相关 'clearUserDataFailed': 'Kullanıcı verileri temizlenemedi', // 清理用户数据失败 'deleteUserDataFailed': 'Kullanıcı verileri silinemedi', // 删除用户数据失败 - 'thirdPartyLogoutSuccess': 'Üçüncü taraf oturumu başarıyla kapatıldı', // 第三方登录退出成功 + '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', // 删除账号过程发生错误 + '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 已初始化 + 'allUserDataClearSuccess': + 'Tüm kullanıcı verileri başarıyla temizlendi', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Hesap Hizmeti başlatıldı', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'İzin durumu alınamadı', @@ -901,9 +975,12 @@ const Map trTR = { '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': 'Takvim etkinliklerini ve hatırlatıcıları okumak ve yönetmek 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': + 'Takvim etkinliklerini ve hatırlatıcıları okumak ve yönetmek için kullanılır', 'locationPermissionDesc': 'Mevcut konum bilgisini almak için kullanılır', 'appFunctionNeeds': 'Uygulama özelliğinin ihtiyacı var', 'authorized': 'Yetkilendirildi', @@ -915,43 +992,66 @@ 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', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1061,8 @@ const Map trTR = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1071,10 @@ const Map trTR = { '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', // 无法打开应用商店提示 - 'updateErrorRetry': 'Güncelleme sırasında bir hata oluştu, lütfen daha sonra tekrar deneyin', // 更新错误重试提示 + 'cannotOpenAppStore': + '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', // 更新错误重试提示 //国家列表 "邮箱": "E-posta", @@ -1107,7 +1210,8 @@ const Map trTR = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1227,12 @@ const Map trTR = { "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.", + "clearHistoryConfirm": + "Tüm çeviri geçmişini temizlemek istediğinizden emin misiniz? Bu işlem geri alınamaz.", "unknownLanguage": "Bilinmeyen Dil", "deleteSessionRecord": "Oturum Kaydını Sil", - "deleteSessionConfirm": "Bu oturumun tüm çeviri kayıtlarını silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", + "deleteSessionConfirm": + "Bu oturumun tüm çeviri kayıtlarını silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1264,20 @@ const Map trTR = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1300,8 @@ const Map trTR = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Orijinal Kayıt", "recordSummary": "Kayıt Özeti", - "clickToGenerateSummary": "Oturum özeti oluşturmak için aşağıdaki düğmeye tıklayın", + "clickToGenerateSummary": + "Oturum özeti oluşturmak için aşağıdaki düğmeye tıklayın", "summaryContent": "Özet İçeriği", "copied": "Kopyalandı", "summaryCopiledToClipboard": "Özet panoya kopyalandı", @@ -1197,9 +1309,11 @@ const Map trTR = { "summaryGenerated": "Özet oluşturuldu", "generating": "Oluşturuluyor...", "regenerate": "Yeniden Oluştur", - "summaryTimeoutMessage": "Özet oluşturma isteği zaman aşımına uğradı. Ağ sorunları veya sunucu yoğunluğu olabilir.", + "summaryTimeoutMessage": + "Özet oluşturma isteği zaman aşımına uğradı. Ağ sorunları veya sunucu yoğunluğu olabilir.", "deleteTranslationRecord": "Çeviri Kaydını Sil", - "deleteTranslationConfirm": "Bu çeviri kaydını silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", + "deleteTranslationConfirm": + "Bu çeviri kaydını silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", "originalText": "Orijinal Metin", "translatedText": "Çevrilmiş Metin", "sessionSummary": "Oturum Özeti", @@ -1227,19 +1341,24 @@ const Map trTR = { // 配对状态文本 "readyToPair": "Eşleştirmeye hazır", "preparingPairingEnvironment": "Eşleştirme ortamı hazırlanıyor...", - "connectDeepSoundViaSystemBluetooth": "Lütfen önce sistem Bluetooth'u üzerinden Voitrans cihazına bağlanın", + "connectDeepSoundViaSystemBluetooth": + "Lütfen önce sistem Bluetooth'u üzerinden Voitrans cihazına bağlanın", "deviceBindingConfirm": "Cihaz bağlama onayı...", "establishingDeviceAssociation": "Cihaz ilişkisi kuruluyor...", "waitingCompletePairing": "Lütfen bekleyin, eşleştirme tamamlanıyor...", - "pairingSuccessRedirecting": "Eşleştirme başarılı! Ana sayfaya yönlendiriliyor...", + "pairingSuccessRedirecting": + "Eşleştirme başarılı! Ana sayfaya yönlendiriliyor...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Lütfen bir Voitrans cihazına bağlı olduğunuzdan emin olun", + "ensureConnectedDeepSoundDevice": + "Lütfen bir Voitrans cihazına bağlı olduğunuzdan emin olun", "deviceAlreadyBoundToOtherAccount": "Bu cihaz başka bir hesaba zaten bağlı", "deviceAssociationFailed": "Cihaz ilişkisi kurulamadı, lütfen tekrar deneyin", - "scanTimeoutEnsureDeviceNearby": "Tarama zaman aşımına uğradı, lütfen cihazın yakında olduğundan emin olun", + "scanTimeoutEnsureDeviceNearby": + "Tarama zaman aşımına uğradı, lütfen cihazın yakında olduğundan emin olun", "networkError": "Ağ Hatası", - "authorizationFailedCheckCode": "Yetkilendirme başarısız, lütfen yetkilendirme kodunun doğru olup olmadığını kontrol edin", + "authorizationFailedCheckCode": + "Yetkilendirme başarısız, lütfen yetkilendirme kodunun doğru olup olmadığını kontrol edin", "pairingFailedRetry": "Eşleştirme başarısız, lütfen tekrar deneyin", // 配对控制器相关 @@ -1248,7 +1367,8 @@ const Map trTR = { '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', + 'ensureHeadsetOnAndPairingMode': + 'Lütfen kulaklığın açık ve eşleştirme modunda olduğundan emin olun', //'goToBluetoothSettings': '前往蓝牙设置', //'verifyingDevice': '正在验证设备...', //'confirmBinding': '确认绑定', @@ -1266,35 +1386,46 @@ const Map trTR = { 'verificationFailedRetry': 'Doğrulama başarısız, lütfen tekrar deneyin', 'invalidDeviceAddress': 'Geçersiz cihaz adresi', 'bleDeviceAssociationFailed': 'BLE cihaz ilişkisi kurulamadı', - 'deviceAssociationFailedRetry': 'Cihaz ilişkisi kurulamadı, lütfen tekrar deneyin', - 'bleConnectionTimeoutRetry': 'BLE bağlantısı zaman aşımına uğradı, lütfen tekrar deneyin', + 'deviceAssociationFailedRetry': + 'Cihaz ilişkisi kurulamadı, lütfen tekrar deneyin', + 'bleConnectionTimeoutRetry': + 'BLE bağlantısı zaman aşımına uğradı, lütfen tekrar deneyin', 'blePairingStartupFailed': 'BLE eşleştirmesi başlatılamadı', 'bleConnectionFailed': 'BLE bağlantısı başarısız', - 'deviceAuthorizationFailedCheckCode': 'Cihaz yetkilendirmesi başarısız, lütfen yetkilendirme kodunu kontrol edin', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', - 'feedbackDescription': 'Lütfen karşılaştığınız sorunu veya önerinizi açıklayın', + 'feedbackDescription': + 'Lütfen karşılaştığınız sorunu veya önerinizi açıklayın', 'feedbackHint': 'Lütfen geri bildiriminizi girin...', 'feedbackRequired': 'Lütfen geri bildirim içeriğini girin', 'contactInfo': 'İletişim Bilgileri', 'contactHint': 'E-posta/Telefon, sizinle iletişime geçebilmemiz için', 'submit': 'Gönder', - 'feedbackSubmitSuccess': 'Geri bildirim başarıyla gönderildi, geri bildiriminiz için teşekkür ederiz!', - 'feedbackSubmitFailed': 'Geri bildirim gönderilemedi, lütfen daha sonra tekrar deneyin', + 'feedbackSubmitSuccess': + 'Geri bildirim başarıyla gönderildi, geri bildiriminiz için teşekkür ederiz!', + 'feedbackSubmitFailed': + 'Geri bildirim gönderilemedi, lütfen daha sonra tekrar deneyin', // OTA升级模块 - "upgradeExitConfirm": "Yükseltme devam ediyor. Çıkmak işlemi kesecektir, çıkmak istediğinizden emin misiniz?", + "upgradeExitConfirm": + "Yükseltme devam ediyor. Çıkmak işlemi kesecektir, çıkmak istediğinizden emin misiniz?", "deviceModel": "Cihaz Modeli", "unknownDevice": "Bilinmeyen Cihaz", "currentFirmwareVersion": "Mevcut Donanım Yazılımı Sürümü", @@ -1307,14 +1438,19 @@ const Map trTR = { "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", + "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", "charging": "Şarj oluyor", "updateContent": "Güncelleme İçeriği", - "removeEarbudsEnsureBattery": "Her iki kulaklığı da çıkarın ve pil seviyelerinin %20'un üzerinde olduğundan emin olun", + "removeEarbudsEnsureBattery": + "Her iki kulaklığı da çıkarın ve pil seviyelerinin %20'un üzerinde olduğundan emin olun", // 音乐列表页面 "noMusic": "Müzik Yok", // 暂无音乐 @@ -1376,8 +1512,10 @@ const Map trTR = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 05fa55fad..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": "Французька", @@ -71,7 +72,8 @@ const Map ukUA = { // 登录页 "welcome": "Ласкаво просимо", - "loginTips": "Увійдіть або зареєструйтеся за допомогою номера телефону або електронної пошти", + "loginTips": + "Увійдіть або зареєструйтеся за допомогою номера телефону або електронної пошти", "accountNumber": "Номер телефону або Email", "verificationCode": "Код підтвердження", "getCode": "Отримати код", @@ -90,7 +92,8 @@ const Map ukUA = { "tip": "Підказка", "pleaseEnterCompleteCode": "Будь ласка, введіть повний код підтвердження", "loginFailed": "Помилка входу, спробуйте ще раз", - 'pleaseAcceptPrivacyPolicy': 'Будь ласка, спочатку прочитайте та погодьтеся з Політикою конфіденційності та Угодою користувача', + 'pleaseAcceptPrivacyPolicy': + 'Будь ласка, спочатку прочитайте та погодьтеся з Політикою конфіденційності та Угодою користувача', "enterVerificationCode": "Введіть код підтвердження", "verificationCodeSentTo": "Код підтвердження надіслано на", "resendVerificationCode": "Надіслати код ще раз", @@ -99,7 +102,8 @@ const Map ukUA = { // 隐私政策弹窗 "loginDeclaration": "Декларація Voitrans", // Voitrans 声明 - "welcomeToThisApp": "Ласкаво просимо до Voitrans, будь ласка, уважно прочитайте", // 欢迎使用Voitrans,请充分阅读 + "welcomeToThisApp": + "Ласкаво просимо до Voitrans, будь ласка, уважно прочитайте", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -115,24 +119,29 @@ const Map ukUA = { "signal": "Сигнал", "deviceId": "ID пристрою", "firmwareVersion": "Версія прошивки", - "disconnectedDevice": "Пристрій не підключено, натисніть кнопку нижче, щоб підключити", + "disconnectedDevice": + "Пристрій не підключено, натисніть кнопку нижче, щоб підключити", "connectDevice": "Підключити пристрій", "topAiExperiences": "Найкращі враження від AI", "aiAssistant": "Всемогутній помічник AI", - "aiAssistantInfo": "Ексклюзивний консультант 24/7, відповідає на запитання, надає поради", + "aiAssistantInfo": + "Ексклюзивний консультант 24/7, відповідає на запитання, надає поради", "interpretation": "Синхронний переклад", - "simultaneousInterpretationInfo": "Переклад у реальному часі на 80+ мов, безтурботні подорожі за кордон", + "simultaneousInterpretationInfo": + "Переклад у реальному часі на 80+ мов, безтурботні подорожі за кордон", "aiCompanion": "Сімейний компаньйон", "aiCompanionInfo": "Розуміє вас, тепла компанія", "homeSlogan": "З'єднуючи світ, перевершуючи звук", - "turnEarphones": "Будь ласка, відкрийте зарядний кейс для навушників і вставте навушники у вуха", + "turnEarphones": + "Будь ласка, відкрийте зарядний кейс для навушників і вставте навушники у вуха", "currentlyConnected": "Наразі підключено:", "unsystemSetup": "Перейти до налаштувань системи", "talkLater": "Пізніше", "initializing": "Ініціалізація...", "bluetoothInitializationFailure": "Помилка ініціалізації служби Bluetooth", "checkingPermissions": "Перевірка дозволів...", - "lackPermissions": "Відсутні дозволи Bluetooth і необхідно дозволити доступ до місцезнаходження", + "lackPermissions": + "Відсутні дозволи Bluetooth і необхідно дозволити доступ до місцезнаходження", "searchingDevice": "Пошук пристроїв...", "findConnectedDevice": "Знайдено підключений пристрій", "notFound": "Не знайдено підключеного пристрою Bluetooth", @@ -175,7 +184,8 @@ const Map ukUA = { "healthConsultant": "Багатофункціональний чат AI", "healthConsultantInfo": "Надає більше функцій чату AI", "conferenceAssistant": "Помічник для ділових зустрічей", - "conferenceAssistantInfo": "Запис протоколів у реальному часі, багатомовний переклад", + "conferenceAssistantInfo": + "Запис протоколів у реальному часі, багатомовний переклад", "usageStats": "Статистика використання", "usageStatsInfo": "Перегляньте статистику використання вашого пристрою", "scene": "Сценарій", @@ -218,7 +228,8 @@ const Map ukUA = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +285,10 @@ const Map ukUA = { '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.', + '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', @@ -284,27 +297,35 @@ const Map ukUA = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +334,10 @@ const Map ukUA = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +352,8 @@ const Map ukUA = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Пропустити", @@ -355,7 +379,8 @@ const Map ukUA = { '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”', + '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', @@ -405,7 +430,8 @@ const Map ukUA = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +486,54 @@ const Map ukUA = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +545,8 @@ const Map ukUA = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +566,8 @@ const Map ukUA = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +616,8 @@ const Map ukUA = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +642,8 @@ const Map ukUA = { "cloudSync": "Увімкнути синхронізацію в хмарі", "memberService": "Member Service", "bindRewardTitle": "Rewards", - "bindRewardSimpleDesc": "First bind device reward has been issued. Tap OK to close.", + "bindRewardSimpleDesc": + "First bind device reward has been issued. Tap OK to close.", "joinDevice": "Підключений пристрій:", "accountId": "ID облікового запису:", "systemSetting": "Системні налаштування", @@ -612,7 +656,8 @@ const Map ukUA = { "privacySettings": "Налаштування конфіденційності", "privacySettingsInfo": "Керування збором даних та дозволами", "permissionManagement": "Керування дозволами", // 权限管理 - "permissionManagementInfo": "Керування налаштуваннями дозволів програми", // 管理应用权限设置 + "permissionManagementInfo": + "Керування налаштуваннями дозволів програми", // 管理应用权限设置 "aboutApplication": "Про програму", "versions": "Версія", "checkUpdates": "Перевірити оновлення", @@ -621,9 +666,11 @@ const Map ukUA = { "voiceServiceInfo": "Вибір служби розпізнавання та синтезу мовлення", "selectVoiceService": "Вибрати голосову службу", "azureVoiceService": "Голосова служба Azure", - "azureVoiceServiceInfo": "Хмарна голосова служба Microsoft, що підтримує високоякісний синтез та розпізнавання мовлення", + "azureVoiceServiceInfo": + "Хмарна голосова служба Microsoft, що підтримує високоякісний синтез та розпізнавання мовлення", "flutterVoiceService": "Локальна голосова служба Flutter", - "flutterVoiceServiceInfo": "Локальна голосова служба пристрою, яку можна використовувати без підключення до Інтернету", + "flutterVoiceServiceInfo": + "Локальна голосова служба пристрою, яку можна використовувати без підключення до Інтернету", 'timbreService': 'Служба тембрів', 'timbreServiceInfo': 'Вибір служби синтезу мовлення з різними тембрами', 'defaultTimbre': 'Стандартний тембр', @@ -652,7 +699,8 @@ const Map ukUA = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Голосовий чат у реальному часі", - "realtimeVoiceChatInfo": "Спробуйте функцію інтелектуальної голосової взаємодії (попередній перегляд)", + "realtimeVoiceChatInfo": + "Спробуйте функцію інтелектуальної голосової взаємодії (попередній перегляд)", "loading": "Завантаження...", //设备管理页面 @@ -667,7 +715,8 @@ const Map ukUA = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -721,10 +770,14 @@ const Map ukUA = { '• Керувати функціями навушників\n\n' 'Чим я можу вам допомогти?', 'microphonePermission': 'Мікрофон', - 'voiceRecognitionPermissionText': 'Для розпізнавання мовлення потрібен доступ до мікрофона.', - 'voiceTranslationPermissionText': 'Для розпізнавання та перекладу мовлення потрібен доступ до мікрофона.', - 'phoneCallPermissionText': 'Для здійснення дзвінків потрібен доступ до мікрофона для голосових викликів.', - 'permissionDeniedText': 'Ви назавжди відмовили в доступі до мікрофона, будь ласка, увімкніть дозвіл у налаштуваннях системи.', + 'voiceRecognitionPermissionText': + 'Для розпізнавання мовлення потрібен доступ до мікрофона.', + 'voiceTranslationPermissionText': + 'Для розпізнавання та перекладу мовлення потрібен доступ до мікрофона.', + 'phoneCallPermissionText': + 'Для здійснення дзвінків потрібен доступ до мікрофона для голосових викликів.', + 'permissionDeniedText': + 'Ви назавжди відмовили в доступі до мікрофона, будь ласка, увімкніть дозвіл у налаштуваннях системи.', 'startVoiceInput': 'Почати голосове введення', 'startPhoneCallMode': 'Почати режим дзвінка, почати голосове введення', @@ -747,7 +800,8 @@ const Map ukUA = { 'privacyRelated': "Пов'язано з конфіденційністю", 'copyrightViolation': "Порушення моїх авторських прав, репутації тощо", 'other': 'Інше', - 'reportDescriptionHint': 'Ми хочемо знати причину вашої скарги, ви можете описати проблему, з якою зіткнулися.', + 'reportDescriptionHint': + 'Ми хочемо знати причину вашої скарги, ви можете описати проблему, з якою зіткнулися.', //'submit': '提交', //Message_bubble @@ -778,15 +832,24 @@ const Map ukUA = { 'highest': 'Макс.', 'lowest': 'Мін.', 'futureForecast': 'Прогноз на майбутнє', - 'hotWeatherTip': 'Сьогодні спекотно, будь ласка, уникайте перегріву та пийте більше води, щоб уникнути сонячного удару', - 'coldWeatherTip': 'Сьогодні температура низька, будь ласка, тепло одягайтеся, виходячи на вулицю, щоб не застудитися', - 'rainyWeatherTip': 'Сьогодні дощ, будь ласка, візьміть з собою парасольку та будьте обережні під час поїздок', - 'snowyWeatherTip': 'Сьогодні сніг, дороги слизькі, будьте обережні та тепло одягайтеся', - 'foggyWeatherTip': 'Сьогодні туман, видимість обмежена, будь ласка, надягайте маску, виходячи на вулицю', - 'windyWeatherTip': 'Сьогодні сильний вітер, будь ласка, будьте обережні та закріпіть свої речі, виходячи на вулицю', - 'sunnyWeatherTip': 'Сьогодні сонячно та сильне ультрафіолетове випромінювання, будь ласка, використовуйте сонцезахисний крем, виходячи на вулицю', - 'temperatureDifferenceTip': 'Сьогодні велика різниця температур між днем і ніччю, будь ласка, одягайтеся відповідно', - 'comfortableWeatherTip': 'Сьогодні приємна погода, чудовий час для активного відпочинку на свіжому повітрі', + 'hotWeatherTip': + 'Сьогодні спекотно, будь ласка, уникайте перегріву та пийте більше води, щоб уникнути сонячного удару', + 'coldWeatherTip': + 'Сьогодні температура низька, будь ласка, тепло одягайтеся, виходячи на вулицю, щоб не застудитися', + 'rainyWeatherTip': + 'Сьогодні дощ, будь ласка, візьміть з собою парасольку та будьте обережні під час поїздок', + 'snowyWeatherTip': + 'Сьогодні сніг, дороги слизькі, будьте обережні та тепло одягайтеся', + 'foggyWeatherTip': + 'Сьогодні туман, видимість обмежена, будь ласка, надягайте маску, виходячи на вулицю', + 'windyWeatherTip': + 'Сьогодні сильний вітер, будь ласка, будьте обережні та закріпіть свої речі, виходячи на вулицю', + 'sunnyWeatherTip': + 'Сьогодні сонячно та сильне ультрафіолетове випромінювання, будь ласка, використовуйте сонцезахисний крем, виходячи на вулицю', + 'temperatureDifferenceTip': + 'Сьогодні велика різниця температур між днем і ніччю, будь ласка, одягайтеся відповідно', + 'comfortableWeatherTip': + 'Сьогодні приємна погода, чудовий час для активного відпочинку на свіжому повітрі', "monday": "Пн", "tuesday": "Вт", "wednesday": "Ср", @@ -838,22 +901,29 @@ const Map ukUA = { "logout": "Вийти", "logoutTips": "Ви впевнені, що хочете вийти з поточного облікового запису?", 'deleteAccount': 'Видалити обліковий запис', - 'deleteAccountTips': 'Ви впевнені, що хочете назавжди видалити свій обліковий запис? Цю дію неможливо скасувати', + 'deleteAccountTips': + 'Ви впевнені, що хочете назавжди видалити свій обліковий запис? Цю дію неможливо скасувати', 'clean': 'Clear Cache', 'cleanTips': 'Are you sure you want to clear personal cache?', // Profile 错误信息 - 'networkConnectionFailed': 'Помилка мережевого підключення, перевірте налаштування мережі та спробуйте ще раз', - 'serverTemporarilyUnavailable': 'Сервер тимчасово недоступний, спробуйте ще раз пізніше', - 'loginExpiredPleaseRelogin': 'Термін дії сесії закінчився, будь ласка, увійдіть знову', + 'networkConnectionFailed': + 'Помилка мережевого підключення, перевірте налаштування мережі та спробуйте ще раз', + 'serverTemporarilyUnavailable': + 'Сервер тимчасово недоступний, спробуйте ще раз пізніше', + 'loginExpiredPleaseRelogin': + 'Термін дії сесії закінчився, будь ласка, увійдіть знову', 'noPermissionForThisOperation': 'Немає дозволу на виконання цієї операції', 'requestedResourceNotFound': 'Запитаний ресурс не знайдено', - 'imageProcessingFailedPleaseReselect': 'Не вдалося обробити зображення, будь ласка, виберіть інше зображення', + 'imageProcessingFailedPleaseReselect': + 'Не вдалося обробити зображення, будь ласка, виберіть інше зображення', 'operationFailedPleaseRetry': 'Операція не вдалася, спробуйте ще раз', 'serverReturnedError': 'Сервер повернув помилку', 'serverError': 'Помилка сервера', - 'networkConnectionFailedCheckSettings': 'Помилка мережевого підключення, перевірте налаштування мережі', - 'serverInternalErrorRetryLater': 'Внутрішня помилка сервера, спробуйте ще раз пізніше', + 'networkConnectionFailedCheckSettings': + 'Помилка мережевого підключення, перевірте налаштування мережі', + 'serverInternalErrorRetryLater': + 'Внутрішня помилка сервера, спробуйте ще раз пізніше', // Profile 用户交互 //'error': '错误', @@ -867,18 +937,24 @@ const Map ukUA = { 'loggedOut': 'Ви вийшли з системи', 'logoutFailedRetry': 'Не вдалося вийти, спробуйте ще раз', 'accountPermanentlyDeleted': 'Обліковий запис було назавжди видалено', - 'deleteAccountFailedRetry': 'Не вдалося видалити обліковий запис, спробуйте ще раз', + 'deleteAccountFailedRetry': + 'Не вдалося видалити обліковий запис, спробуйте ще раз', // 账号服务相关 'clearUserDataFailed': 'Не вдалося очистити дані користувача', // 清理用户数据失败 'deleteUserDataFailed': 'Не вдалося видалити дані користувача', // 删除用户数据失败 - 'thirdPartyLogoutSuccess': 'Вихід зі стороннього сервісу успішний', // 第三方登录退出成功 - 'thirdPartyLogoutFailed': 'Не вдалося вийти зі стороннього сервісу', // 第三方登录退出失败 + 'thirdPartyLogoutSuccess': + 'Вихід зі стороннього сервісу успішний', // 第三方登录退出成功 + 'thirdPartyLogoutFailed': + 'Не вдалося вийти зі стороннього сервісу', // 第三方登录退出失败 'signOutProcessError': 'Сталася помилка під час виходу з системи', // 登出过程发生错误 - 'deleteAccountProcessError': 'Сталася помилка під час видалення облікового запису', // 删除账号过程发生错误 + 'deleteAccountProcessError': + 'Сталася помилка під час видалення облікового запису', // 删除账号过程发生错误 'userDataClearSuccess': 'Дані користувача успішно очищено', // 用户数据清理成功 - 'allUserDataClearSuccess': 'Усі дані користувача успішно очищено', // 所有用户数据清理成功 - 'accountServiceInitialized': 'Службу облікових записів ініціалізовано', // AccountService 已初始化 + 'allUserDataClearSuccess': + 'Усі дані користувача успішно очищено', // 所有用户数据清理成功 + 'accountServiceInitialized': + 'Службу облікових записів ініціалізовано', // AccountService 已初始化 // 权限管理页面 'getPermissionStatusFailed': 'Не вдалося отримати статус дозволів', @@ -901,10 +977,14 @@ const Map ukUA = { 'locationInfo': 'Інформація про місцезнаходження', 'phonePermissionDesc': 'Використовується для здійснення дзвінків', 'smsPermissionDesc': 'Використовується для надсилання SMS', - 'alarmPermissionDesc': 'Used to set exact alarms to ensure reminders trigger on time', - 'calendarWritePermissionDesc': 'Використовується для створення подій та нагадувань у календарі', - 'calendarFullAccessPermissionDesc': 'Використовується для читання та керування подіями та нагадуваннями у календарі', - 'locationPermissionDesc': 'Використовується для отримання інформації про поточне місцезнаходження', + 'alarmPermissionDesc': + 'Used to set exact alarms to ensure reminders trigger on time', + 'calendarWritePermissionDesc': + 'Використовується для створення подій та нагадувань у календарі', + 'calendarFullAccessPermissionDesc': + 'Використовується для читання та керування подіями та нагадуваннями у календарі', + 'locationPermissionDesc': + 'Використовується для отримання інформації про поточне місцезнаходження', 'appFunctionNeeds': 'Функції програми потребують', 'authorized': 'Дозволено', 'unauthorized': 'Не дозволено', @@ -913,45 +993,71 @@ const Map ukUA = { 'unknownStatus': 'Невідомий статус', 'permissionGranted': 'Дозвіл надано', 'permissionRequestError': 'Помилка під час запиту дозволу', - 'phonePermissionDetailDesc': 'Для функції дзвінків потрібен дозвіл на доступ до телефону', - 'smsPermissionDetailDesc': 'Для функції надсилання SMS потрібен дозвіл на доступ до SMS', - 'alarmPermissionDetailDesc': 'This permission is required to set exact alarms and ensure reminders trigger on time', - 'calendarWritePermissionDetailDesc': 'Для створення подій у календарі потрібен дозвіл на запис до календаря', - 'calendarFullAccessPermissionDetailDesc': 'Для керування подіями у календарі потрібен повний доступ до календаря', - 'locationPermissionDetailDesc': 'Для отримання інформації про місцезнаходження потрібен дозвіл на доступ до місцезнаходження', + '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', + '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', + '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', + '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}, будь ласка, перейдіть до налаштувань програми, щоб увімкнути його', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1067,8 @@ const Map ukUA = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1077,10 @@ const Map ukUA = { 'updateNow': 'Оновити зараз', // 立即更新按钮 'checkUpdate': 'Перевірити оновлення', // 检查更新按钮 'updateFailed': 'Не вдалося оновити', // 更新失败提示 - 'cannotOpenAppStore': 'Не вдається відкрити App Store, будь ласка, перейдіть до App Store вручну, щоб оновити', // 无法打开应用商店提示 - 'updateErrorRetry': 'Сталася помилка під час оновлення, спробуйте ще раз пізніше', // 更新错误重试提示 + 'cannotOpenAppStore': + 'Не вдається відкрити App Store, будь ласка, перейдіть до App Store вручну, щоб оновити', // 无法打开应用商店提示 + 'updateErrorRetry': + 'Сталася помилка під час оновлення, спробуйте ще раз пізніше', // 更新错误重试提示 //国家列表 "邮箱": "Email", @@ -1107,7 +1216,8 @@ const Map ukUA = { "selectTargetLanguage": "Вибрати цільову мову", "me": "Me", "counterPart": "Counterpart", - "bluetoothCallStateError": "Please make sure the Bluetooth headset is connected to the phone and in a call state", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1233,12 @@ const Map ukUA = { "historyRecords": "History Records", "clearResults": "Clear Results", "clearHistory": "Очистити історію", - "clearHistoryConfirm": "Ви впевнені, що хочете очистити всю історію перекладів? Цю дію неможливо скасувати.", + "clearHistoryConfirm": + "Ви впевнені, що хочете очистити всю історію перекладів? Цю дію неможливо скасувати.", "unknownLanguage": "Невідома мова", "deleteSessionRecord": "Видалити запис сесії", - "deleteSessionConfirm": "Ви впевнені, що хочете видалити всі записи перекладів цієї сесії? Цю дію неможливо скасувати.", + "deleteSessionConfirm": + "Ви впевнені, що хочете видалити всі записи перекладів цієї сесії? Цю дію неможливо скасувати.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1270,20 @@ const Map ukUA = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1189,7 +1306,8 @@ const Map ukUA = { // 翻译详情页 (translation_detail_view.dart) "originalRecord": "Оригінальний запис", "recordSummary": "Підсумок запису", - "clickToGenerateSummary": "Натисніть кнопку нижче, щоб згенерувати підсумок сесії", + "clickToGenerateSummary": + "Натисніть кнопку нижче, щоб згенерувати підсумок сесії", "summaryContent": "Зміст підсумку", "copied": "Скопійовано", "summaryCopiledToClipboard": "Підсумок скопійовано до буфера обміну", @@ -1197,9 +1315,11 @@ const Map ukUA = { "summaryGenerated": "Підсумок згенеровано", "generating": "Генерація...", "regenerate": "Згенерувати знову", - "summaryTimeoutMessage": "Час очікування запиту на генерацію підсумку минув, можливо, через проблеми з мережею або завантаженість сервера.", + "summaryTimeoutMessage": + "Час очікування запиту на генерацію підсумку минув, можливо, через проблеми з мережею або завантаженість сервера.", "deleteTranslationRecord": "Видалити запис перекладу", - "deleteTranslationConfirm": "Ви впевнені, що хочете видалити цей запис перекладу? Цю дію неможливо скасувати.", + "deleteTranslationConfirm": + "Ви впевнені, що хочете видалити цей запис перекладу? Цю дію неможливо скасувати.", "originalText": "Оригінальний текст", "translatedText": "Перекладений текст", "sessionSummary": "Підсумок сесії", @@ -1227,19 +1347,25 @@ const Map ukUA = { // 配对状态文本 "readyToPair": "Готово до спарювання", "preparingPairingEnvironment": "Підготовка середовища для спарювання...", - "connectDeepSoundViaSystemBluetooth": "Будь ласка, спочатку підключіться до пристрою Voitrans через системний Bluetooth", + "connectDeepSoundViaSystemBluetooth": + "Будь ласка, спочатку підключіться до пристрою Voitrans через системний Bluetooth", "deviceBindingConfirm": "Підтвердження прив'язки пристрою...", "establishingDeviceAssociation": "Встановлення асоціації пристрою...", "waitingCompletePairing": "Будь ласка, зачекайте, завершується спарювання...", - "pairingSuccessRedirecting": "Спарювання успішне! Перенаправлення на головну сторінку...", + "pairingSuccessRedirecting": + "Спарювання успішне! Перенаправлення на головну сторінку...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Переконайтеся, що ви підключені до пристрою Voitrans", - "deviceAlreadyBoundToOtherAccount": "Цей пристрій вже прив'язаний до іншого облікового запису", + "ensureConnectedDeepSoundDevice": + "Переконайтеся, що ви підключені до пристрою Voitrans", + "deviceAlreadyBoundToOtherAccount": + "Цей пристрій вже прив'язаний до іншого облікового запису", "deviceAssociationFailed": "Не вдалося асоціювати пристрій, спробуйте ще раз", - "scanTimeoutEnsureDeviceNearby": "Час сканування минув, переконайтеся, що пристрій знаходиться поруч", + "scanTimeoutEnsureDeviceNearby": + "Час сканування минув, переконайтеся, що пристрій знаходиться поруч", "networkError": "Помилка мережі", - "authorizationFailedCheckCode": "Помилка авторизації, перевірте правильність коду авторизації", + "authorizationFailedCheckCode": + "Помилка авторизації, перевірте правильність коду авторизації", "pairingFailedRetry": "Не вдалося спарити, спробуйте ще раз", // 配对控制器相关 @@ -1248,13 +1374,15 @@ const Map ukUA = { 'deviceDisconnected': 'Пристрій відключено', 'readyToStartPairing': 'Готово до початку спарювання', 'checkingEnvironment': 'Перевірка середовища...', - 'ensureHeadsetOnAndPairingMode': 'Переконайтеся, що навушники увімкнені та знаходяться в режимі спарювання', + 'ensureHeadsetOnAndPairingMode': + 'Переконайтеся, що навушники увімкнені та знаходяться в режимі спарювання', //'goToBluetoothSettings': '前往蓝牙设置', //'verifyingDevice': '正在验证设备...', //'confirmBinding': '确认绑定', //'associatingDevice': '正在关联设备...', 'establishingSecureConnection': 'Встановлення безпечного з\'єднання...', - 'needManualBindingAuthCode': 'Потрібен код авторизації для ручної прив\'язки...', + 'needManualBindingAuthCode': + 'Потрібен код авторизації для ручної прив\'язки...', 'pairingSuccessful': 'Спарювання успішне!', 'enableBluetooth': 'Увімкнути Bluetooth', 'grantPermissions': 'Надати дозволи', @@ -1266,35 +1394,45 @@ const Map ukUA = { 'verificationFailedRetry': 'Перевірка не вдалася, спробуйте ще раз', 'invalidDeviceAddress': 'Недійсна адреса пристрою', 'bleDeviceAssociationFailed': 'Не вдалося асоціювати пристрій BLE', - 'deviceAssociationFailedRetry': 'Не вдалося асоціювати пристрій, спробуйте ще раз', - 'bleConnectionTimeoutRetry': 'Час очікування підключення BLE минув, спробуйте ще раз', + 'deviceAssociationFailedRetry': + 'Не вдалося асоціювати пристрій, спробуйте ще раз', + 'bleConnectionTimeoutRetry': + 'Час очікування підключення BLE минув, спробуйте ще раз', 'blePairingStartupFailed': 'Не вдалося розпочати спарювання BLE', 'bleConnectionFailed': 'Не вдалося підключитися через BLE', - 'deviceAuthorizationFailedCheckCode': 'Помилка авторизації пристрою, перевірте код авторизації', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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': 'Надати відгук або пропозицію', - 'feedbackDescription': 'Будь ласка, опишіть проблему, з якою ви зіткнулися, або вашу пропозицію', + 'feedbackDescription': + 'Будь ласка, опишіть проблему, з якою ви зіткнулися, або вашу пропозицію', 'feedbackHint': 'Будь ласка, введіть ваш відгук...', 'feedbackRequired': 'Будь ласка, введіть зміст відгуку', 'contactInfo': 'Контактна інформація', 'contactHint': 'Email/Телефон, щоб ми могли з вами зв\'язатися', 'submit': 'Надіслати', 'feedbackSubmitSuccess': 'Відгук успішно надіслано, дякуємо за ваш відгук!', - 'feedbackSubmitFailed': 'Не вдалося надіслати відгук, спробуйте ще раз пізніше', + 'feedbackSubmitFailed': + 'Не вдалося надіслати відгук, спробуйте ще раз пізніше', // OTA升级模块 - "upgradeExitConfirm": "Наразі триває оновлення, вихід перерве процес оновлення, ви впевнені, що хочете вийти?", + "upgradeExitConfirm": + "Наразі триває оновлення, вихід перерве процес оновлення, ви впевнені, що хочете вийти?", "deviceModel": "Модель пристрою", "unknownDevice": "Невідомий пристрій", "currentFirmwareVersion": "Поточна версія прошивки", @@ -1307,14 +1445,19 @@ const Map ukUA = { "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": "Будь ласка, тримайте пристрій підключеним, не закривайте програму", + "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": "Зарядка", "updateContent": "Зміст оновлення", - "removeEarbudsEnsureBattery": "Вийміть обидва навушники та переконайтеся, що заряд батареї в обох перевищує 20%", + "removeEarbudsEnsureBattery": + "Вийміть обидва навушники та переконайтеся, що заряд батареї в обох перевищує 20%", // 音乐列表页面 "noMusic": "Немає музики", // 暂无音乐 @@ -1376,8 +1519,10 @@ const Map ukUA = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 80bf7a966..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", @@ -90,7 +91,8 @@ const Map viVN = { "tip": "Gợi ý", "pleaseEnterCompleteCode": "Vui lòng nhập đầy đủ mã xác minh", "loginFailed": "Đăng nhập thất bại, vui lòng thử lại", - 'pleaseAcceptPrivacyPolicy': 'Vui lòng đọc và đồng ý với Chính sách bảo mật và Thỏa thuận người dùng trước', + 'pleaseAcceptPrivacyPolicy': + 'Vui lòng đọc và đồng ý với Chính sách bảo mật và Thỏa thuận người dùng trước', "enterVerificationCode": "Nhập mã xác minh", "verificationCodeSentTo": "Mã xác minh đã được gửi đến", "resendVerificationCode": "Gửi lại mã xác minh", @@ -99,7 +101,8 @@ const Map viVN = { // 隐私政策弹窗 "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,请充分阅读 + "welcomeToThisApp": + "Chào mừng bạn đến với Voitrans, vui lòng đọc kỹ", // 欢迎使用Voitrans,请充分阅读 // "privacyPolicy": "《隐私政策》", // 《隐私政策》 - 已存在,使用现有键 // "userAgreement": "《用户协议》", // 《用户协议》 - 已存在,使用现有键 "privacyPolicyText": @@ -119,9 +122,11 @@ const Map viVN = { "connectDevice": "Kết nối thiết bị", "topAiExperiences": "Trải nghiệm AI hàng đầu", "aiAssistant": "Trợ lý toàn năng AI", - "aiAssistantInfo": "Tư vấn viên độc quyền 24/7, trả lời câu hỏi, cung cấp đề xuất", + "aiAssistantInfo": + "Tư vấn viên độc quyền 24/7, trả lời câu hỏi, cung cấp đề xuất", "interpretation": "Phiên dịch đồng thời", - "simultaneousInterpretationInfo": "Dịch thời gian thực hơn 80 ngôn ngữ, du lịch nước ngoài không lo", + "simultaneousInterpretationInfo": + "Dịch thời gian thực hơn 80 ngôn ngữ, du lịch nước ngoài không lo", "aiCompanion": "Bạn đồng hành gia đình", "aiCompanionInfo": "Thấu hiểu bạn, đồng hành ấm áp", "homeSlogan": "Kết nối thế giới, vượt trên cả âm thanh", @@ -132,7 +137,8 @@ const Map viVN = { "initializing": "Đang khởi tạo...", "bluetoothInitializationFailure": "Khởi tạo dịch vụ Bluetooth thất bại", "checkingPermissions": "Đang kiểm tra quyền...", - "lackPermissions": "Thiếu quyền Bluetooth và cần phải cấp quyền truy cập vị trí", + "lackPermissions": + "Thiếu quyền Bluetooth và cần phải cấp quyền truy cập vị trí", "searchingDevice": "Đang tìm kiếm thiết bị...", "findConnectedDevice": "Đã tìm thấy thiết bị đã kết nối", "notFound": "Không tìm thấy thiết bị Bluetooth đã kết nối", @@ -175,7 +181,8 @@ const Map viVN = { "healthConsultant": "Trò chuyện AI đa chức năng", "healthConsultantInfo": "Cung cấp thêm chức năng trò chuyện AI", "conferenceAssistant": "Trợ lý hội nghị kinh doanh", - "conferenceAssistantInfo": "Ghi lại biên bản họp thời gian thực, dịch đa ngôn ngữ", + "conferenceAssistantInfo": + "Ghi lại biên bản họp thời gian thực, dịch đa ngôn ngữ", "usageStats": "Thống kê sử dụng", "usageStatsInfo": "Xem thống kê sử dụng của bạn", "scene": "Tình huống", @@ -218,7 +225,8 @@ const Map viVN = { "transcriptBytes": "Transcript Bytes", // 通知文案 "loadFailed": "Load Failed", - "statsLoadFailedTryLater": "Statistics failed to load. Please try again later.", + "statsLoadFailedTryLater": + "Statistics failed to load. Please try again later.", "cleanupComplete": "Cleanup Complete", "cleanedOldData": "Cleaned data older than 90 days", "exportFeature": "Export Feature", @@ -274,8 +282,10 @@ const Map viVN = { '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.', + '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', @@ -284,27 +294,35 @@ const Map viVN = { 'meetingTimelineJump': 'Timeline jump', 'meetingExportSummary': 'Export minutes', 'meetingMultiPlatformShare': 'Share across platforms', - 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', + 'meetingDisclaimer': + 'Use in quiet environments; performance depends on microphone and network.', // 同传/翻译商品页描述 - 'transHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', + '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', + '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.', + '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.', + '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', + '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', @@ -313,8 +331,10 @@ const Map viVN = { '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.', + 'templatedMessagesAndScheduleReminders': + 'Template messages and schedule reminders', + 'aiDisclaimer': + 'Features depend on device permissions, service availability, and network conditions.', // 会员商品页 'benefitsOverview': 'Benefits overview', @@ -329,7 +349,8 @@ const Map viVN = { '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.', + 'vipDisclaimer': + 'Actual benefits depend on the package details and may change with versions.', // 新手引导 / Onboarding 'skip': "Bỏ qua", @@ -355,7 +376,8 @@ const Map viVN = { '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”', + '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', @@ -405,7 +427,8 @@ const Map viVN = { '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', + 'downloadCompleteInfo': + 'Download complete, {count} files in total, returning automatically in 2 seconds', // Meeting模块 - 录音功能 'startRecording': 'Start Recording', @@ -460,40 +483,54 @@ const Map viVN = { '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.', + '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.', + '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.', + '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', + '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.', + 'validityNote': + 'Activated immediately after purchase, valid for 2 years after activation.', 'purchase': 'Purchase', // Meeting模块 - 模版和生成 @@ -505,7 +542,8 @@ const Map viVN = { '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.', + 'aiAnalysisDesc': + 'AI analysis identifies key events in recordings, allowing you to select important events for AI generation.', // Meeting模块 - 文件操作和状态 'importing': 'Importing...', @@ -525,7 +563,8 @@ const Map viVN = { // 权限相关 - Meeting相关 'meetingStoragePermission': 'Storage', - 'meetingStoragePermissionExplanation': 'We need access to storage permissions so you can select and upload audio files.', + '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.', @@ -574,7 +613,8 @@ const Map viVN = { 'recentlyUsedNames': 'Recently Used Names', 'applyToCurrentParagraph': 'Apply to Current Paragraph', 'totalTime': 'Total Time', - 'summarySpeakerWillBeUpdatedAutomatically': 'Summary speakers will be updated automatically', + 'summarySpeakerWillBeUpdatedAutomatically': + 'Summary speakers will be updated automatically', // Meeting模块 - 云端同步相关 'syncToCloud': 'Sync to Cloud', @@ -599,7 +639,8 @@ const Map viVN = { "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.", + "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", @@ -621,9 +662,11 @@ const Map viVN = { "voiceServiceInfo": "Chọn dịch vụ nhận dạng và tổng hợp giọng nói", "selectVoiceService": "Chọn dịch vụ giọng nói", "azureVoiceService": "Dịch vụ giọng nói Azure", - "azureVoiceServiceInfo": "Dịch vụ giọng nói đám mây của Microsoft, hỗ trợ tổng hợp và nhận dạng giọng nói chất lượng cao", + "azureVoiceServiceInfo": + "Dịch vụ giọng nói đám mây của Microsoft, hỗ trợ tổng hợp và nhận dạng giọng nói chất lượng cao", "flutterVoiceService": "Dịch vụ giọng nói cục bộ Flutter", - "flutterVoiceServiceInfo": "Dịch vụ giọng nói cục bộ trên thiết bị, có thể sử dụng mà không cần kết nối mạng", + "flutterVoiceServiceInfo": + "Dịch vụ giọng nói cục bộ trên thiết bị, có thể sử dụng mà không cần kết nối mạng", 'timbreService': 'Dịch vụ âm sắc', 'timbreServiceInfo': 'Chọn dịch vụ tổng hợp giọng nói âm sắc', 'defaultTimbre': 'Âm sắc mặc định', @@ -652,7 +695,8 @@ const Map viVN = { // 设置页面 - 实时语音对话 "realtimeVoiceChat": "Trò chuyện giọng nói thời gian thực", - "realtimeVoiceChatInfo": "Trải nghiệm chức năng tương tác giọng nói thông minh (xem trước chức năng)", + "realtimeVoiceChatInfo": + "Trải nghiệm chức năng tương tác giọng nói thông minh (xem trước chức năng)", "loading": "Đang tải...", //设备管理页面 @@ -667,7 +711,8 @@ const Map viVN = { "noMacAddress": "No MAC Address", "licenseCode": "License Code", "confirmUnbind": "Confirm Unbind", - "confirmUnbindMessage": "Are you sure you want to unbind device \"{deviceName}\"?", + "confirmUnbindMessage": + "Are you sure you want to unbind device \"{deviceName}\"?", "confirmUnbindAction": "Confirm Unbind", //Agent 模块 @@ -721,12 +766,17 @@ const Map viVN = { '• Điều khiển chức năng tai nghe\n\n' 'Tôi có thể giúp gì cho bạn?', 'microphonePermission': 'Microphone', - 'voiceRecognitionPermissionText': 'Chức năng nhận dạng giọng nói cần truy cập microphone.', - 'voiceTranslationPermissionText': 'Chức năng nhận dạng và dịch giọng nói cần truy cập microphone.', - 'phoneCallPermissionText': 'Chức năng gọi điện cần truy cập microphone để thực hiện cuộc gọi thoại.', - 'permissionDeniedText': 'Bạn đã từ chối vĩnh viễn quyền truy cập microphone, vui lòng vào cài đặt hệ thống để cấp quyền.', + 'voiceRecognitionPermissionText': + 'Chức năng nhận dạng giọng nói cần truy cập microphone.', + 'voiceTranslationPermissionText': + 'Chức năng nhận dạng và dịch giọng nói cần truy cập microphone.', + 'phoneCallPermissionText': + 'Chức năng gọi điện cần truy cập microphone để thực hiện cuộc gọi thoại.', + 'permissionDeniedText': + 'Bạn đã từ chối vĩnh viễn quyền truy cập microphone, vui lòng vào cài đặt hệ thống để cấp quyền.', 'startVoiceInput': 'Bắt đầu nhập liệu bằng giọng nói', - 'startPhoneCallMode': 'Bắt đầu chế độ gọi điện, bắt đầu nhập liệu bằng giọng nói', + 'startPhoneCallMode': + '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...', // 全屏编辑器输入提示 @@ -747,7 +797,8 @@ const Map viVN = { 'privacyRelated': 'Liên quan đến quyền riêng tư', 'copyrightViolation': 'Vi phạm bản quyền, danh dự của tôi, v.v.', '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.', + '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 @@ -778,15 +829,23 @@ const Map viVN = { 'highest': 'Cao nhất', 'lowest': 'Thấp nhất', 'futureForecast': 'Dự báo tương lai', - 'hotWeatherTip': 'Hôm nay trời nóng, chú ý chống nóng, uống nhiều nước để tránh say nắng', - 'coldWeatherTip': 'Hôm nay nhiệt độ thấp, ra ngoài chú ý giữ ấm, cẩn thận cảm lạnh', - 'rainyWeatherTip': 'Hôm nay có mưa, ra ngoài nhớ mang theo ô, chú ý an toàn khi đi lại', - 'snowyWeatherTip': 'Hôm nay có tuyết, đường trơn trượt chú ý an toàn, giữ ấm cơ thể', - 'foggyWeatherTip': 'Hôm nay có sương mù, tầm nhìn thấp, ra ngoài nhớ đeo khẩu trang', - 'windyWeatherTip': 'Hôm nay gió lớn, ra ngoài chú ý an toàn, buộc chặt đồ đạc', + 'hotWeatherTip': + 'Hôm nay trời nóng, chú ý chống nóng, uống nhiều nước để tránh say nắng', + 'coldWeatherTip': + 'Hôm nay nhiệt độ thấp, ra ngoài chú ý giữ ấm, cẩn thận cảm lạnh', + 'rainyWeatherTip': + 'Hôm nay có mưa, ra ngoài nhớ mang theo ô, chú ý an toàn khi đi lại', + 'snowyWeatherTip': + 'Hôm nay có tuyết, đường trơn trượt chú ý an toàn, giữ ấm cơ thể', + 'foggyWeatherTip': + 'Hôm nay có sương mù, tầm nhìn thấp, ra ngoài nhớ đeo khẩu trang', + 'windyWeatherTip': + 'Hôm nay gió lớn, ra ngoài chú ý an toàn, buộc chặt đồ đạc', 'sunnyWeatherTip': 'Hôm nay nắng đẹp, tia UV mạnh, ra ngoài nhớ chống nắng', - 'temperatureDifferenceTip': 'Hôm nay chênh lệch nhiệt độ ngày đêm lớn, chú ý thêm bớt quần áo cho phù hợp', - 'comfortableWeatherTip': 'Hôm nay thời tiết dễ chịu, là thời điểm tốt để hoạt động ngoài trời', + 'temperatureDifferenceTip': + 'Hôm nay chênh lệch nhiệt độ ngày đêm lớn, chú ý thêm bớt quần áo cho phù hợp', + 'comfortableWeatherTip': + 'Hôm nay thời tiết dễ chịu, là thời điểm tốt để hoạt động ngoài trời', "monday": "Thứ 2", "tuesday": "Thứ 3", "wednesday": "Thứ 4", @@ -836,23 +895,29 @@ const Map viVN = { "notSet": "Chưa đặt", "accountSetting": "Cài đặt tài khoản", "logout": "Đăng xuất", - "logoutTips": "Bạn có chắc chắn muốn đăng xuất khỏi tài khoản hiện tại không?", + "logoutTips": + "Bạn có chắc chắn muốn đăng xuất khỏi tài khoản hiện tại không?", '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', + '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': 'Kết nối mạng thất bại, vui lòng kiểm tra cài đặt mạng và thử lại', - 'serverTemporarilyUnavailable': 'Máy chủ tạm thời không khả dụng, vui lòng thử lại sau', + 'networkConnectionFailed': + 'Kết nối mạng thất bại, vui lòng kiểm tra cài đặt mạng và thử lại', + 'serverTemporarilyUnavailable': + 'Máy chủ tạm thời không khả dụng, vui lòng thử lại sau', 'loginExpiredPleaseRelogin': 'Đăng nhập đã hết hạn, vui lòng đăng nhập lại', 'noPermissionForThisOperation': 'Không có quyền thực hiện thao tác này', 'requestedResourceNotFound': 'Không tìm thấy tài nguyên được yêu cầu', - 'imageProcessingFailedPleaseReselect': 'Xử lý hình ảnh thất bại, vui lòng chọn lại hình ảnh', + 'imageProcessingFailedPleaseReselect': + 'Xử lý hình ảnh thất bại, vui lòng chọn lại hình ảnh', 'operationFailedPleaseRetry': 'Thao tác thất bại, vui lòng thử lại', 'serverReturnedError': 'Máy chủ trả về lỗi', 'serverError': 'Lỗi máy chủ', - 'networkConnectionFailedCheckSettings': 'Kết nối mạng thất bại, vui lòng kiểm tra cài đặt mạng', + 'networkConnectionFailedCheckSettings': + 'Kết nối mạng thất bại, vui lòng kiểm tra cài đặt mạng', 'serverInternalErrorRetryLater': 'Lỗi nội bộ máy chủ, vui lòng thử lại sau', // Profile 用户交互 @@ -875,10 +940,13 @@ const Map viVN = { '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', // 删除账号过程发生错误 + '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 已初始化 + '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', @@ -901,9 +969,11 @@ const Map viVN = { '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', + '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', + 'calendarFullAccessPermissionDesc': + 'Dùng để đọc và quản lý các sự kiện và lời nhắc trên lịch', 'locationPermissionDesc': 'Dùng để lấy thông tin vị trí hiện tại', 'appFunctionNeeds': 'Chức năng ứng dụng cần', 'authorized': 'Đã cấp quyền', @@ -913,45 +983,70 @@ const Map viVN = { 'unknownStatus': 'Trạng thái không xác định', 'permissionGranted': 'Quyền đã được cấp', 'permissionRequestError': 'Lỗi khi yêu cầu quyền', - 'phonePermissionDetailDesc': 'Chức năng gọi điện cần quyền truy cập điện thoại', + '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í', + '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', + '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', + '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', + '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', + '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.', + '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.', + '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.', + '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': @@ -961,7 +1056,8 @@ const Map viVN = { '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', + 'permissionUtilRestrictedMessage': + 'This feature is unavailable or restricted on the current device, please check device settings or system restrictions', 'permissionUtilConfirm': 'OK', // 版本更新对话框 @@ -970,8 +1066,10 @@ const Map viVN = { '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', // 无法打开应用商店提示 - 'updateErrorRetry': 'Đã xảy ra lỗi trong quá trình cập nhật, vui lòng thử lại sau', // 更新错误重试提示 + 'cannotOpenAppStore': + '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', // 更新错误重试提示 //国家列表 "邮箱": "Email", @@ -1107,7 +1205,8 @@ const Map viVN = { "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", + "bluetoothCallStateError": + "Please make sure the Bluetooth headset is connected to the phone and in a call state", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 @@ -1123,10 +1222,12 @@ const Map viVN = { "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.", + "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.", "unknownLanguage": "Ngôn ngữ không xác định", "deleteSessionRecord": "Xóa bản ghi phiên", - "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.", + "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.", // 图片翻译模块(Picture Translation) "selectImageSource": "Select Image Source", @@ -1158,15 +1259,20 @@ const Map viVN = { "translationCompleted": "Translation Completed", "allStepsCompleted": "All steps completed", "processingFailed": "Processing Failed", - "imageProcessingOrTranslationFailed": "Image processing or translation failed. Please retry.\nError: {error}", + "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", + "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", + "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", + "photoAlbumPermissionRequired": + "Photo album permission required to pick images", "translationDetails": "Translation Details", "originalImage": "Original Image", "sourceLanguage": "Source Language", @@ -1197,9 +1303,11 @@ const Map viVN = { "summaryGenerated": "Đã tạo tóm tắt", "generating": "Đang tạo...", "regenerate": "Tạo lại", - "summaryTimeoutMessage": "Yêu cầu tạo tóm tắt đã hết thời gian, có thể do sự cố mạng hoặc máy chủ bận.", + "summaryTimeoutMessage": + "Yêu cầu tạo tóm tắt đã hết thời gian, có thể do sự cố mạng hoặc máy chủ bận.", "deleteTranslationRecord": "Xóa bản ghi dịch", - "deleteTranslationConfirm": "Bạn có chắc muốn xóa bản ghi dịch này không? Thao tác này không thể hoàn tác.", + "deleteTranslationConfirm": + "Bạn có chắc muốn xóa bản ghi dịch này không? Thao tác này không thể hoàn tác.", "originalText": "Văn bản gốc", "translatedText": "Văn bản dịch", "sessionSummary": "Tóm tắt phiên", @@ -1227,19 +1335,25 @@ const Map viVN = { // 配对状态文本 "readyToPair": "Sẵn sàng để ghép nối", "preparingPairingEnvironment": "Đang chuẩn bị môi trường ghép nối...", - "connectDeepSoundViaSystemBluetooth": "Vui lòng kết nối với thiết bị Voitrans qua Bluetooth hệ thống trước", + "connectDeepSoundViaSystemBluetooth": + "Vui lòng kết nối với thiết bị Voitrans qua Bluetooth hệ thống trước", "deviceBindingConfirm": "Xác nhận liên kết thiết bị...", "establishingDeviceAssociation": "Đang thiết lập liên kết thiết bị...", "waitingCompletePairing": "Vui lòng đợi, đang hoàn tất ghép nối...", - "pairingSuccessRedirecting": "Ghép nối thành công! Sắp chuyển hướng đến trang chủ...", + "pairingSuccessRedirecting": + "Ghép nối thành công! Sắp chuyển hướng đến trang chủ...", // 配对错误状态文本 - "ensureConnectedDeepSoundDevice": "Vui lòng đảm bảo bạn đang kết nối với thiết bị Voitrans", - "deviceAlreadyBoundToOtherAccount": "Thiết bị này đã được liên kết với tài khoản khác", + "ensureConnectedDeepSoundDevice": + "Vui lòng đảm bảo bạn đang kết nối với thiết bị Voitrans", + "deviceAlreadyBoundToOtherAccount": + "Thiết bị này đã được liên kết với tài khoản khác", "deviceAssociationFailed": "Liên kết thiết bị thất bại, vui lòng thử lại", - "scanTimeoutEnsureDeviceNearby": "Quét hết thời gian, vui lòng đảm bảo thiết bị ở gần", + "scanTimeoutEnsureDeviceNearby": + "Quét hết thời gian, vui lòng đảm bảo thiết bị ở gần", "networkError": "Lỗi mạng", - "authorizationFailedCheckCode": "Ủy quyền thất bại, vui lòng kiểm tra xem mã ủy quyền có đúng không", + "authorizationFailedCheckCode": + "Ủy quyền thất bại, vui lòng kiểm tra xem mã ủy quyền có đúng không", "pairingFailedRetry": "Ghép nối thất bại, vui lòng thử lại", // 配对控制器相关 @@ -1248,7 +1362,8 @@ const Map viVN = { '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', + 'ensureHeadsetOnAndPairingMode': + 'Vui lòng đảm bảo tai nghe đã bật và ở chế độ ghép nối', //'goToBluetoothSettings': '前往蓝牙设置', //'verifyingDevice': '正在验证设备...', //'confirmBinding': '确认绑定', @@ -1266,19 +1381,25 @@ const Map viVN = { 'verificationFailedRetry': 'Xác minh thất bại, vui lòng thử lại', 'invalidDeviceAddress': 'Địa chỉ thiết bị không hợp lệ', 'bleDeviceAssociationFailed': 'Liên kết thiết bị BLE thất bại', - 'deviceAssociationFailedRetry': 'Liên kết thiết bị thất bại, vui lòng thử lại', + 'deviceAssociationFailedRetry': + 'Liên kết thiết bị thất bại, vui lòng thử lại', 'bleConnectionTimeoutRetry': 'Kết nối BLE hết thời gian, vui lòng thử lại', 'blePairingStartupFailed': 'Khởi động ghép nối BLE thất bại', 'bleConnectionFailed': 'Kết nối BLE thất bại', - 'deviceAuthorizationFailedCheckCode': 'Ủy quyền thiết bị thất bại, vui lòng kiểm tra mã ủy quyền', + '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', // 提示:也可以从控制中心长按蓝牙图标快速进入蓝牙设置 + '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', // 我知道了 //用户反馈页 @@ -1294,7 +1415,8 @@ const Map viVN = { 'feedbackSubmitFailed': 'Gửi phản hồi thất bại, vui lòng thử lại sau', // OTA升级模块 - "upgradeExitConfirm": "Đang nâng cấp, thoát sẽ làm gián đoạn quá trình nâng cấp, bạn có chắc chắn muốn thoát không?", + "upgradeExitConfirm": + "Đang nâng cấp, thoát sẽ làm gián đoạn quá trình nâng cấp, bạn có chắc chắn muốn thoát không?", "deviceModel": "Kiểu máy", "unknownDevice": "Thiết bị không xác định", "currentFirmwareVersion": "Phiên bản firmware hiện tại", @@ -1307,14 +1429,19 @@ const Map viVN = { "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", + "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", "charging": "Đang sạc", "updateContent": "Nội dung cập nhật", - "removeEarbudsEnsureBattery": "Lấy cả hai tai nghe ra và đảm bảo pin của cả hai đều trên 20%", + "removeEarbudsEnsureBattery": + "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", // 暂无音乐 @@ -1376,8 +1503,10 @@ const Map viVN = { "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "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.', + "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 fcfa4c0f8..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": "法语", diff --git a/lib/core/translations/language/zh_hk.dart b/lib/core/translations/language/zh_hk.dart index cfaf1c0bf..752892fb6 100644 --- a/lib/core/translations/language/zh_hk.dart +++ b/lib/core/translations/language/zh_hk.dart @@ -33,6 +33,7 @@ const Map zhHK = { "spanish": "西班牙語", "portuguese": "葡萄牙語", "traditionalChinese": "繁體中文", + "traditionalChineseHK": "繁體中文(HK)", "japanese": "日語", "korean": "韓語", "french": "法語", @@ -270,7 +271,7 @@ const Map zhHK = { // 商品页通用页脚 'appNameProvider': '應用名稱:Voitrans · 服務提供:Voitrans', - 'iapCustomerServiceQQLabel': '內购商品专属客服QQ:@qq', + 'iapCustomerServiceQQLabel': '內購商品專屬客服QQ:@qq', 'copyrightVoitrans': '© 2025 Voitrans Technologies', // 会议商品页描述 @@ -698,8 +699,8 @@ const Map zhHK = { "loadMoreMessages": "載入更多訊息...", "loadFailedClickRetry": "載入失敗,點擊重試", "swipeUpForMore": "向上滑動查看更多", - "callingTool": "正在帮您,请稍等!", // 正在帮您,请稍等! - "voice_interrupt": "语音打断", // 语音打断 + "callingTool": "正在幫您,請稍等!", // 正在帮您,请稍等! + "voice_interrupt": "語音打斷", // 语音打断 // 预设提示词 "presetMusic": '來點音樂', // 来点音乐 @@ -1310,7 +1311,7 @@ const Map zhHK = { "otaVersionInfoFailed": '獲取版本資訊失敗,請稍後重試', "otaDeviceInfoUnavailable": '無法獲取設備資訊,請檢查連接後重試', "otaProductInfoUnavailable": '無法識別當前設備,請重新連接後重試', - "otaFirmwareVersionInvalid": '設備固件版本異常,請重新連接後重試', + "otaFirmwareVersionInvalid": '設備韌體版本異常,請重新連接後重試', "keepConnectedDontClose": "請保持設備連接,不要關閉應用", "doNotDisconnect": "請勿斷開連接", "charging": "充電中", 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/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( From 77b5f769d483c6990ac02dcaa62042bfa5f0d059 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Sun, 4 Jan 2026 21:03:42 +0800 Subject: [PATCH 04/27] =?UTF-8?q?refactor(settings):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E6=9C=AA=E4=BD=BF=E7=94=A8=E7=9A=84=E8=AF=AD=E9=9F=B3=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=92=8CAI=E8=AE=BE=E7=BD=AE=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 清理settings模块中未使用的语音服务、AI设置和用户信息相关代码 简化语言模型注释并修复主题设置注释格式 --- lib/main.dart | 2 +- .../controllers/settings_controller.dart | 222 +------ .../settings/models/language_model.dart | 9 +- lib/modules/settings/views/settings_view.dart | 608 ++---------------- 4 files changed, 60 insertions(+), 781 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index b558250f6..8ceedabe1 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -111,7 +111,7 @@ class MainApp extends StatelessWidget { Widget build(BuildContext context) { // 在应用构建时立即初始化深链接处理 _initDeepLinkHandler(); -// 获取保存的主题设置 + // 获取保存的主题设置 final themeMode = ThemeService().getThemeMode(); return ScreenUtilInit( diff --git a/lib/modules/settings/controllers/settings_controller.dart b/lib/modules/settings/controllers/settings_controller.dart index 3a5860cd8..f8a156d0d 100644 --- a/lib/modules/settings/controllers/settings_controller.dart +++ b/lib/modules/settings/controllers/settings_controller.dart @@ -3,7 +3,6 @@ import 'dart:async'; import 'package:agent_service/agent_service.dart'; import 'package:get/get.dart'; import 'package:flutter/material.dart'; -import 'package:dio/dio.dart'; import 'package:get_storage/get_storage.dart'; import 'package:logger/logger.dart'; import 'package:package_info_plus/package_info_plus.dart'; @@ -11,10 +10,8 @@ import 'package:package_info_plus/package_info_plus.dart'; import '../../../core/themes/theme_service.dart'; import '../../../core/translations/app_translations.dart'; import '../../../data/services/network/dio_manager.dart'; -import '../../../data/services/speech_factory.dart'; import '../../../routes/app_routes.dart'; import '../models/language_model.dart'; -import '../../../data/services/ble_manager.dart'; import '../../../data/services/language_manager.dart'; import '../../../data/services/version_update_service.dart'; import '../../common/widgets/version_update_dialog.dart'; @@ -29,7 +26,9 @@ class SettingsController extends GetxController { LanguageModel( name: 'traditionalChinese', alias: '繁體中文', value: 'zh_TW'), // 添加繁体中文 LanguageModel( - name: 'traditionalChineseHK', alias: '繁體中文(HK)', value: 'zh_HK'), // 添加香港繁体中文 + name: 'traditionalChineseHK', + alias: '繁體中文(HK)', + value: 'zh_HK'), // 添加香港繁体中文 LanguageModel( name: 'spanish', alias: 'Español', value: 'es_ES'), // 添加西班牙语选项 LanguageModel( @@ -94,41 +93,6 @@ class SettingsController extends GetxController { // 是否是暗黑模式 final RxBool isDarkMode = false.obs; - // 翻译语言对 - final RxString sourceLanguage = '中文'.obs; - final RxString targetLanguage = '英文'.obs; - final List availableLanguages = [ - '中文', - '英文', - '日文', - '韩文', - '法文', - '德文', - '西班牙文', - '俄文' - ]; - - // 语音服务类型 - final Rx speechServiceType = SpeechServiceType.azure.obs; - final List> availableSpeechServices = [ - { - 'type': SpeechServiceType.azure, - 'name': 'azureVoiceService', // Azure 语音服务.tr - 'description': 'azureVoiceServiceInfo' // 微软云端语音服务,支持高质量语音合成和识别.tr - }, - { - 'type': SpeechServiceType.flutter, - 'name': 'flutterVoiceService', // Flutter 本地语音服务.tr - 'description': 'flutterVoiceServiceInfo' // 设备本地语音服务,无需联网即可使用.tr - }, - ]; - - RxString timbreName = 'defaultTimbre'.obs; - - //用户信息 - // static const String userKey = 'user_info'; - // final Rx userInfo = User.instance.obs; //使用单例实例 - // 添加版本信息变量 final appVersion = ''.obs; final buildNumber = ''.obs; @@ -148,17 +112,12 @@ class SettingsController extends GetxController { // 获取系统语言 _getLanguage(); - _getTimbre(); - // 从存储中加载上次保存的主题设置 final savedDarkMode = _themeService.isSavedDarkMode(); // 设置当前主题状态 isDarkMode.value = savedDarkMode; - // 获取当前语音服务类型 - _loadCurrentSpeechServiceType(); - //获取用户信息 // loadUserInfo(); @@ -178,111 +137,6 @@ class SettingsController extends GetxController { } } - // void loadUserInfo() { - // final userJson = _storage.read(userKey); - // Logger().d('加载用户信息: $userJson'); - - // if (userJson != null) { - // userInfo.value = User.instance; - // Logger().d('用户信息已加载: ${userInfo.value.toJson()}'); - - // if (userInfo.value.avatar.isNotEmpty) { - // Logger().d('开始下载头像'); - // _downloadAndSaveAvatar(userInfo.value.avatar); - // } else { - // Logger().d('用户没有头像'); - // } - // } else { - // Logger().d('没有找到用户信息'); - // } - // } - - // Future saveUserInfo() async { - // await _storage.write(userKey, userInfo.value.toJson()); - // } - - // 下载并保存远程头像 -// Future _downloadAndSaveAvatar(String url) async { -// try { -// Logger().d('开始下载头像: $url'); - -// final dio = Dio(BaseOptions( -// headers: { -// 'accept': '*/*', -// 'Authorization': _storage.read("logintoken"), -// }, -// )); - -// final response = await dio.get( -// url, -// options: Options(responseType: ResponseType.bytes), -// ); - -// Logger().d('下载状态: ${response.statusCode}'); - -// if (response.statusCode == 200) { -// // 保存到应用文档目录 -// final appDir = await getApplicationSupportDirectory(); -// final fileName = -// '/UserAvatar/avatar_${DateTime.now().millisecondsSinceEpoch}.jpg'; -// final localPath = '${appDir.path}/$fileName'; - -// // 确保目录存在 -// final file = File(localPath); -// await file.parent.create(recursive: true); - -// await file.writeAsBytes(response.data); - -// // 更新本地头像路径 -// //localAvatar.value = localPath; -// await _storage.write('local_avatar', localPath); -// Logger().d('头像已下载到本地: $localPath'); -// //Get.snackbar('头像', '头像已下载到本地'); -// } -// } catch (e) { -// Logger().e('下载头像失败: $e'); -// } -// } - - // Future updateUserAvatar() async { - // final XFile? image = await _picker.pickImage( - // source: ImageSource.gallery, - // maxWidth: 800, - // maxHeight: 800, - // imageQuality: 85, - // ); - - // if (image != null) { - // userInfo.update((user) { - // if (user != null) { - // user.avatar = image.path; - // } - // }); - // await saveUserInfo(); - // } - // } - - // Future updateUserName(String name) async { - // if (name.trim().isNotEmpty) { - // userInfo.update((user) { - // if (user != null) { - // user.name = name.trim(); - // } - // }); - // await saveUserInfo(); - // } - // } - -// Future updateDeviceName(String deviceName) async { -// userInfo.update((user) { -// if (user != null) { -// user.deviceName = deviceName; -// } -// }); -// await saveUserInfo(); -// } -// } - void _getLanguage() { String? languageValue = _storage.read('language'); LanguageModel data = languageList.firstWhere( @@ -292,21 +146,6 @@ class SettingsController extends GetxController { language.value = data; } - // 获取音色 - void _getTimbre() { - List? timbreList = _storage.read('timbreList'); - String? timbre = _storage.read('timbre'); - if (timbreList != null && timbre != null) { - Map data = timbreList.firstWhere( - (element) => element['type'] == timbre, - orElse: () => {}, - ); - if (data.isNotEmpty) { - timbreName.value = data['name']; - } - } - } - /// 设置语言 Future setLanguage(LanguageModel data) async { try { @@ -335,12 +174,12 @@ class SettingsController extends GetxController { if (targetLocale != null) { Get.updateLocale(targetLocale); - print("设置语言: ${data.value} -> ${targetLocale.toString()}"); + Logger().i("设置语言: ${data.value} -> ${targetLocale.toString()}"); } else { // 如果无法确定目标语言,使用智能fallback targetLocale = AppTranslations.getSmartFallbackLocale(); Get.updateLocale(targetLocale); - print("使用fallback语言: ${targetLocale.toString()}"); + Logger().i("使用fallback语言: ${targetLocale.toString()}"); } // 保存用户选择 @@ -351,12 +190,7 @@ class SettingsController extends GetxController { await _updateAgentLanguageSettings(data); // 显示语言切换成功提示 - // Get.snackbar( - // 'success'.tr, - // 'languageChanged'.tr, // 需要在语言文件中添加这个key - // snackPosition: SnackPosition.TOP, - // duration: const Duration(seconds: 2), - // ); + Logger().i("语言切换成功: ${data.value}"); // 延迟一下确保语言更新完成,然后重新进入应用 await Future.delayed(const Duration(milliseconds: 500)); @@ -365,14 +199,7 @@ class SettingsController extends GetxController { Get.offAllNamed(Routes.splash); Get.back(); } catch (e) { - print("设置语言时出错: $e"); - // Get.snackbar( - // 'error'.tr, - // 'languageChangeFailed'.tr, // 需要在语言文件中添加这个key - // snackPosition: SnackPosition.TOP, - // backgroundColor: Colors.red.withValues(alpha: 0.8), - // colorText: Colors.white, - // ); + Logger().e("设置语言时出错: $e"); } } @@ -437,16 +264,6 @@ class SettingsController extends GetxController { } } - // 加载当前语音服务类型 - void _loadCurrentSpeechServiceType() { - try { - final factory = Get.find(); - speechServiceType.value = factory.currentServiceType; - } catch (e) { - // 如果找不到SpeechFactory实例,使用默认值 - } - } - // 切换主题 Future toggleTheme() async { // 切换暗黑模式状态 @@ -459,31 +276,6 @@ class SettingsController extends GetxController { await _themeService.saveThemeMode(isDarkMode.value); } - // 设置语音服务类型 - void setSpeechServiceType(SpeechServiceType type) { - try { - final factory = Get.find(); - factory.setServiceType(type); - speechServiceType.value = type; - } catch (e) { - // 处理错误 - } - } - - void setSourceLanguage(String language) { - sourceLanguage.value = language; - } - - void setTargetLanguage(String language) { - targetLanguage.value = language; - } - - void swapLanguages() { - final temp = sourceLanguage.value; - sourceLanguage.value = targetLanguage.value; - targetLanguage.value = temp; - } - /// 清除BLE配对设备 // Future clearBleDevices() async { // // 显示确认对话框 diff --git a/lib/modules/settings/models/language_model.dart b/lib/modules/settings/models/language_model.dart index 8b635e18c..40e3bfae6 100644 --- a/lib/modules/settings/models/language_model.dart +++ b/lib/modules/settings/models/language_model.dart @@ -1,7 +1,10 @@ +/// 语言模型 +/// 包含语言的名称、别名和值 +/// 用于表示应用支持的不同语言 class LanguageModel { - final String name; - final String alias; - final String value; + final String name; //语言名称 + final String alias; //语言别名 + final String value; //语言代码 LanguageModel({ this.name = '', diff --git a/lib/modules/settings/views/settings_view.dart b/lib/modules/settings/views/settings_view.dart index cda1f4f10..0ab7e9f79 100644 --- a/lib/modules/settings/views/settings_view.dart +++ b/lib/modules/settings/views/settings_view.dart @@ -1,10 +1,7 @@ -import 'package:app_settings/app_settings.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'dart:ui'; -import 'dart:io'; -import '../../../core/theme/app_colors.dart'; import '../controllers/settings_controller.dart'; import '../../../core/widgets/common_bottom_nav.dart'; import '../../../routes/app_routes.dart'; @@ -67,8 +64,8 @@ class SettingsView extends GetView { gradient: LinearGradient( colors: isDarkMode ? [ - const Color(0xFF1A1A1A).withOpacity(0.7), - const Color(0xFF2A2A2A).withOpacity(0.7) + const Color(0xFF1A1A1A).withValues(alpha: 0.7), + const Color(0xFF2A2A2A).withValues(alpha: 0.7) ] : [const Color(0xFFE3F2FD), const Color(0xFFF3E5F5)], begin: Alignment.topLeft, @@ -78,8 +75,8 @@ class SettingsView extends GetView { boxShadow: [ BoxShadow( color: isDarkMode - ? Colors.black.withOpacity(0.2) - : Colors.black.withOpacity(0.05), + ? Colors.black.withValues(alpha: 0.2) + : Colors.black.withValues(alpha: 0.05), blurRadius: 10, offset: const Offset(0, 2), ), @@ -106,7 +103,7 @@ class SettingsView extends GetView { isDarkMode: isDarkMode, boxShadow: [ BoxShadow( - color: Colors.black.withOpacity(0.1), + color: Colors.black.withValues(alpha: 0.1), blurRadius: 8, offset: const Offset(0, 2), ), @@ -190,12 +187,12 @@ class SettingsView extends GetView { height: 32.w, decoration: BoxDecoration( color: isDarkMode - ? Colors.white.withOpacity(0.1) - : Colors.white.withOpacity(0.7), + ? Colors.white.withValues(alpha: 0.1) + : Colors.white.withValues(alpha: 0.7), borderRadius: BorderRadius.circular(16.r), boxShadow: [ BoxShadow( - color: Colors.black.withOpacity(0.05), + color: Colors.black.withValues(alpha: 0.05), blurRadius: 4, offset: const Offset(0, 1), ), @@ -225,8 +222,8 @@ class SettingsView extends GetView { gradient: LinearGradient( colors: isDarkMode ? [ - const Color(0xFF0D47A1).withOpacity(0.5), - const Color(0xFF1976D2).withOpacity(0.5) + const Color(0xFF0D47A1).withValues(alpha: 0.5), + const Color(0xFF1976D2).withValues(alpha: 0.5) ] : [const Color(0xFFE3F2FD), const Color(0xFFBBDEFB)], begin: Alignment.topLeft, @@ -236,8 +233,8 @@ class SettingsView extends GetView { boxShadow: [ BoxShadow( color: isDarkMode - ? Colors.black.withOpacity(0.2) - : Colors.black.withOpacity(0.05), + ? Colors.black.withValues(alpha: 0.2) + : Colors.black.withValues(alpha: 0.05), blurRadius: 10, offset: const Offset(0, 2), ), @@ -262,7 +259,7 @@ class SettingsView extends GetView { icon: Icons.workspace_premium, label: 'aiRecharge'.tr, //AI充值 iconBg: isDarkMode - ? Colors.amber[900]!.withOpacity(0.3) + ? Colors.amber[900]!.withValues(alpha: 0.3) : Colors.amber[100]!, iconColor: isDarkMode ? Colors.amber[300]! : Colors.amber[600]!, textColor: isDarkMode ? Colors.white : Colors.black87, @@ -272,7 +269,7 @@ class SettingsView extends GetView { icon: Icons.translate, label: 'translationRecharge'.tr, //翻译充值 iconBg: isDarkMode - ? Colors.indigo[900]!.withOpacity(0.3) + ? Colors.indigo[900]!.withValues(alpha: 0.3) : Colors.indigo[100]!, iconColor: isDarkMode ? Colors.indigo[300]! : Colors.indigo[600]!, @@ -283,7 +280,7 @@ class SettingsView extends GetView { icon: Icons.people, label: 'meetingAssistantRecharge'.tr, //会议充值 iconBg: isDarkMode - ? Colors.pink[900]!.withOpacity(0.3) + ? Colors.pink[900]!.withValues(alpha: 0.3) : Colors.pink[100]!, iconColor: isDarkMode ? Colors.pink[300]! : Colors.pink[600]!, textColor: isDarkMode ? Colors.white : Colors.black87, @@ -293,7 +290,7 @@ class SettingsView extends GetView { icon: Icons.analytics_outlined, label: 'usageStats'.tr, //用量统计 iconBg: isDarkMode - ? Colors.teal[900]!.withOpacity(0.3) + ? Colors.teal[900]!.withValues(alpha: 0.3) : Colors.teal[100]!, iconColor: isDarkMode ? Colors.teal[300]! : Colors.teal[600]!, textColor: isDarkMode ? Colors.white : Colors.black87, @@ -357,104 +354,6 @@ class SettingsView extends GetView { ); } - // AI设置 - Widget _buildAISettingsSection(bool isDarkMode) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only(left: 4.w, bottom: 8.h), - child: Text( - 'AIsettings'.tr, // AI设置 - style: TextStyle( - fontSize: 12.sp, - fontWeight: FontWeight.w500, - color: isDarkMode ? Colors.blue[400] : Colors.blue[600], - letterSpacing: 1, - ), - ), - ), - Container( - decoration: BoxDecoration( - color: isDarkMode ? Colors.white.withOpacity(0.05) : Colors.white, - borderRadius: BorderRadius.circular(16.r), - boxShadow: [ - BoxShadow( - color: isDarkMode - ? Colors.black.withOpacity(0.2) - : Colors.black.withOpacity(0.05), - blurRadius: 10, - offset: const Offset(0, 2), - ), - ], - ), - child: ClipRRect( - borderRadius: BorderRadius.circular(16.r), - child: BackdropFilter( - filter: isDarkMode - ? ImageFilter.blur(sigmaX: 5, sigmaY: 5) - : ImageFilter.blur(sigmaX: 0, sigmaY: 0), - child: Column( - children: [ - // 语音服务选择 - _buildSpeechServiceSetting(isDarkMode), - Divider( - height: 1, - color: isDarkMode - ? Colors.white.withOpacity(0.1) - : Colors.grey[200]), - Obx( - () => _buildNavigationSetting( - title: 'timbreService'.tr, // 音色服务 - subtitle: 'timbreServiceInfo'.tr, // 选择音色服务 - icon: Icons.photo_camera_front_outlined, - iconBgColor: isDarkMode - ? Colors.cyan[900]!.withOpacity(0.3) - : Colors.cyan[100]!, - iconColor: - isDarkMode ? Colors.cyan[300]! : Colors.cyan[600]!, - value: controller.timbreName.value.tr, // 当前音色 - valueStyle: TextStyle( - fontSize: 12.sp, - color: isDarkMode ? Colors.white70 : Colors.grey[500], - ), - onTap: () { - Get.toNamed(Routes.timbre); - }, - isDarkMode: isDarkMode, - ), - ), - Divider( - height: 1, - color: isDarkMode - ? Colors.white.withOpacity(0.1) - : Colors.grey[200]), - // 实时对话入口 - _buildSimpleNavigationSetting( - title: 'realtimeVoiceChat'.tr, // 实时语音对话 - subtitle: 'realtimeVoiceChatInfo'.tr, // 实时语音对话信息 - icon: Icons.chat_bubble_outline, - iconBgColor: isDarkMode - ? Colors.purple[900]!.withOpacity(0.3) - : Colors.purple[100]!, - iconColor: - isDarkMode ? Colors.purple[300]! : Colors.purple[600]!, - titleColor: isDarkMode ? Colors.white : null, - subtitleColor: isDarkMode ? Colors.white70 : null, - onTap: () { - Get.toNamed(Routes.realtime); - }, - isDarkMode: isDarkMode, - ), - ], - ), - ), - ), - ), - ], - ); - } - // 系统设置部分 Widget _buildSystemSettingsSection(bool isDarkMode) { return Column( @@ -474,13 +373,15 @@ class SettingsView extends GetView { // ), Container( decoration: BoxDecoration( - color: isDarkMode ? Colors.white.withOpacity(0.05) : Colors.white, + color: isDarkMode + ? Colors.white.withValues(alpha: 0.05) + : Colors.white, borderRadius: BorderRadius.circular(16.r), boxShadow: [ BoxShadow( color: isDarkMode - ? Colors.black.withOpacity(0.2) - : Colors.black.withOpacity(0.05), + ? Colors.black.withValues(alpha: 0.2) + : Colors.black.withValues(alpha: 0.05), blurRadius: 10, offset: const Offset(0, 2), ), @@ -501,7 +402,7 @@ class SettingsView extends GetView { subtitle: controller.language.value.name.tr, // 当前语言 icon: Icons.language, iconBgColor: isDarkMode - ? Colors.indigo[900]!.withOpacity(0.3) + ? Colors.indigo[900]!.withValues(alpha: 0.3) : Colors.indigo[100]!, iconColor: isDarkMode ? Colors.indigo[300]! @@ -517,7 +418,7 @@ class SettingsView extends GetView { Divider( height: 1, color: isDarkMode - ? Colors.white.withOpacity(0.1) + ? Colors.white.withValues(alpha: 0.1) : Colors.grey[200]), // 主题设置 @@ -526,7 +427,7 @@ class SettingsView extends GetView { subtitle: 'darkModeInfo'.tr, // 切换应用的明暗主题 icon: isDarkMode ? Icons.dark_mode : Icons.light_mode, iconBgColor: isDarkMode - ? Colors.indigo[900]!.withOpacity(0.3) + ? Colors.indigo[900]!.withValues(alpha: 0.3) : Colors.amber[100]!, iconColor: isDarkMode ? Colors.indigo[300]! : Colors.amber[600]!, @@ -539,7 +440,7 @@ class SettingsView extends GetView { Divider( height: 1, color: isDarkMode - ? Colors.white.withOpacity(0.1) + ? Colors.white.withValues(alpha: 0.1) : Colors.grey[200]), // 用户反馈 @@ -548,7 +449,7 @@ class SettingsView extends GetView { subtitle: 'feedbackInfo'.tr, // 提供反馈或建议 icon: Icons.feedback_outlined, iconBgColor: isDarkMode - ? Colors.orange[900]!.withOpacity(0.3) + ? Colors.orange[900]!.withValues(alpha: 0.3) : Colors.orange[100]!, iconColor: isDarkMode ? Colors.orange[300]! : Colors.orange[600]!, @@ -589,7 +490,7 @@ class SettingsView extends GetView { Divider( height: 1, color: isDarkMode - ? Colors.white.withOpacity(0.1) + ? Colors.white.withValues(alpha: 0.1) : Colors.grey[200]), // 配对设备管理 @@ -598,7 +499,7 @@ class SettingsView extends GetView { subtitle: 'manageConnectedDevices'.tr, // 管理已绑定的蓝牙设备 icon: Icons.device_hub, iconBgColor: isDarkMode - ? Colors.red[900]!.withOpacity(0.3) + ? Colors.red[900]!.withValues(alpha: 0.3) : Colors.red[100]!, iconColor: isDarkMode ? Colors.red[300]! : Colors.red[600]!, titleColor: isDarkMode ? Colors.white : null, @@ -609,7 +510,7 @@ class SettingsView extends GetView { Divider( height: 1, color: isDarkMode - ? Colors.white.withOpacity(0.1) + ? Colors.white.withValues(alpha: 0.1) : Colors.grey[200]), // // 杰理测试 @@ -665,7 +566,7 @@ class SettingsView extends GetView { subtitle: '测试opus解码', icon: Icons.bluetooth_searching, iconBgColor: isDarkMode - ? Colors.green[900]!.withOpacity(0.3) + ? Colors.green[900]!.withValues(alpha: 0.3) : Colors.green[100]!, iconColor: isDarkMode ? Colors.green[300]! @@ -749,7 +650,7 @@ class SettingsView extends GetView { subtitle: 'bleHeadsetFirmwareUpgrade'.tr, // BLE耳机固件版本升级 icon: Icons.system_update_alt, iconBgColor: isDarkMode - ? Colors.orange[900]!.withOpacity(0.3) + ? Colors.orange[900]!.withValues(alpha: 0.3) : Colors.orange[100]!, iconColor: isDarkMode ? Colors.orange[300]! : Colors.orange[600]!, @@ -761,7 +662,7 @@ class SettingsView extends GetView { Divider( height: 1, color: isDarkMode - ? Colors.white.withOpacity(0.1) + ? Colors.white.withValues(alpha: 0.1) : Colors.grey[200]), // 权限管理设置项 @@ -770,7 +671,7 @@ class SettingsView extends GetView { subtitle: 'permissionManagementInfo'.tr, // 管理应用权限设置 icon: Icons.security, iconBgColor: isDarkMode - ? Colors.orange[900]!.withOpacity(0.3) + ? Colors.orange[900]!.withValues(alpha: 0.3) : Colors.orange[100]!, iconColor: isDarkMode ? Colors.orange[300]! : Colors.orange[600]!, @@ -811,13 +712,15 @@ class SettingsView extends GetView { Container( padding: EdgeInsets.all(16.w), decoration: BoxDecoration( - color: isDarkMode ? Colors.white.withOpacity(0.05) : Colors.white, + color: isDarkMode + ? Colors.white.withValues(alpha: 0.05) + : Colors.white, borderRadius: BorderRadius.circular(16.r), boxShadow: [ BoxShadow( color: isDarkMode - ? Colors.black.withOpacity(0.2) - : Colors.black.withOpacity(0.05), + ? Colors.black.withValues(alpha: 0.2) + : Colors.black.withValues(alpha: 0.05), blurRadius: 10, offset: const Offset(0, 2), ), @@ -842,9 +745,9 @@ class SettingsView extends GetView { gradient: LinearGradient( colors: [ const Color(0xFF2196F3) - .withOpacity(isDarkMode ? 0.7 : 1.0), + .withValues(alpha: isDarkMode ? 0.7 : 1.0), const Color(0xFF9C27B0) - .withOpacity(isDarkMode ? 0.7 : 1.0) + .withValues(alpha: isDarkMode ? 0.7 : 1.0) ], begin: Alignment.topLeft, end: Alignment.bottomRight, @@ -908,7 +811,7 @@ class SettingsView extends GetView { ), decoration: BoxDecoration( color: isDarkMode - ? Colors.blue[900]!.withOpacity(0.3) + ? Colors.blue[900]!.withValues(alpha: 0.3) : Colors.blue[100], borderRadius: BorderRadius.circular(16.r), ), @@ -1089,114 +992,6 @@ class SettingsView extends GetView { ); } - // 带导航的设置项 - Widget _buildNavigationSetting({ - required String title, - String? subtitle, - required IconData icon, - required Color iconBgColor, - required Color iconColor, - required String value, - TextStyle? valueStyle, - required VoidCallback onTap, - required bool isDarkMode, - }) { - return InkWell( - onTap: onTap, - child: Padding( - padding: EdgeInsets.all(16.w), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - child: Row( - children: [ - Container( - width: 32.w, - height: 32.w, - decoration: BoxDecoration( - color: iconBgColor, - borderRadius: BorderRadius.circular(16.r), - ), - child: Icon( - icon, - size: 16.w, - color: iconColor, - ), - ), - SizedBox(width: 12.w), - Flexible( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - title, - style: TextStyle( - fontSize: 16.sp, - fontWeight: FontWeight.w500, - color: isDarkMode ? Colors.white : Colors.black87, - height: 1.2, // 设置行高,提升多行文本可读性 - ), - softWrap: true, // 启用软换行 - overflow: TextOverflow.visible, // 确保文本完全显示 - ), - if (subtitle != null) SizedBox(height: 2.h), - if (subtitle != null) - Text( - subtitle, - style: TextStyle( - fontSize: 12.sp, - color: - isDarkMode ? Colors.white70 : Colors.black54, - height: 1.3, // 设置行高,提升多行文本可读性 - ), - softWrap: true, // 启用软换行 - overflow: TextOverflow.visible, // 确保文本完全显示 - ), - ], - ), - ), - ], - ), - ), - Row( - mainAxisSize: MainAxisSize.min, - children: [ - Flexible( - child: Text( - value, - style: valueStyle ?? - TextStyle( - fontSize: 14.sp, - color: isDarkMode ? Colors.white : Colors.black87, - ), - overflow: TextOverflow.ellipsis, - ), - ), - SizedBox(width: 8.w), - Container( - width: 32.w, - height: 32.w, - decoration: BoxDecoration( - color: isDarkMode - ? Colors.white.withOpacity(0.05) - : Colors.grey[100], - borderRadius: BorderRadius.circular(16.r), - ), - child: Icon( - Icons.chevron_right, - size: 16.w, - color: isDarkMode ? Colors.white70 : Colors.grey[500], - ), - ), - ], - ), - ], - ), - ), - ); - } - // 简单导航设置项 Widget _buildSimpleNavigationSetting({ required String title, @@ -1275,7 +1070,7 @@ class SettingsView extends GetView { height: 32.w, decoration: BoxDecoration( color: isDarkMode - ? Colors.white.withOpacity(0.05) + ? Colors.white.withValues(alpha: 0.05) : Colors.grey[100], borderRadius: BorderRadius.circular(16.r), ), @@ -1291,244 +1086,6 @@ class SettingsView extends GetView { ); } - // 语音服务设置项 - Widget _buildSpeechServiceSetting(bool isDarkMode) { - return InkWell( - onTap: () { - _showSpeechServiceSelectionDialog(isDarkMode); - }, - child: Padding( - padding: EdgeInsets.all(16.w), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - child: Row( - children: [ - Container( - //语音服务图标 - width: 32.w, - height: 32.w, - decoration: BoxDecoration( - color: isDarkMode - ? Colors.teal[900]!.withOpacity(0.3) - : Colors.teal[100]!, - borderRadius: BorderRadius.circular(16.r), - ), - child: Icon( - Icons.record_voice_over, - size: 16.w, - color: isDarkMode ? Colors.teal[300]! : Colors.teal[600]!, - ), - ), - SizedBox(width: 12.w), - Flexible( - //语音服务标题和副标题 - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'voiceService'.tr, // 语音服务 - style: TextStyle( - fontSize: 16.sp, - fontWeight: FontWeight.w500, - color: isDarkMode ? Colors.white : Colors.black87, - ), - ), - SizedBox(height: 2.h), - Text( - 'voiceServiceInfo'.tr, // 选择语音识别和合成服务 - style: TextStyle( - fontSize: 12.sp, - color: isDarkMode ? Colors.white70 : Colors.black54, - ), - overflow: TextOverflow.ellipsis, - ), - ], - ), - ), - ], - ), - ), - Row( - mainAxisSize: MainAxisSize.min, - children: [ - Obx(() { - final serviceType = controller.speechServiceType.value; - final serviceName = controller.availableSpeechServices - .firstWhere((service) => service['type'] == serviceType, - orElse: () => {'name': 'unknown'})['name']; - return Container( - constraints: BoxConstraints(maxWidth: 120.w), // 限制最大宽度 - child: Text( - '$serviceName'.tr, // 语音服务名称 - style: TextStyle( - fontSize: 12.sp, - color: isDarkMode ? Colors.white70 : Colors.grey[600], - ), - overflow: TextOverflow.ellipsis, - ), - ); - }), - SizedBox(width: 8.w), - Container( - width: 32.w, - height: 32.w, - decoration: BoxDecoration( - color: isDarkMode - ? Colors.white.withOpacity(0.05) - : Colors.grey[100], - borderRadius: BorderRadius.circular(16.r), - ), - child: Icon( - Icons.chevron_right, - size: 16.w, - color: isDarkMode ? Colors.white70 : Colors.grey[500], - ), - ), - ], - ), - ], - ), - ), - ); - } - - // 显示语音服务选择对话框 - void _showSpeechServiceSelectionDialog(bool isDarkMode) { - Get.dialog( - Dialog( - backgroundColor: isDarkMode ? Colors.grey[900] : Colors.white, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(16.r), - ), - child: Padding( - padding: EdgeInsets.all(16.w), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'selectVoiceService'.tr, // 选择语音服务 - style: TextStyle( - fontSize: 18.sp, - fontWeight: FontWeight.w600, - color: isDarkMode ? Colors.white : Colors.black87, - ), - ), - SizedBox(height: 16.h), - ...controller.availableSpeechServices.map((service) { - return Obx(() { - final isSelected = - controller.speechServiceType.value == service['type']; - return GestureDetector( - onTap: () { - controller.setSpeechServiceType(service['type']); - Get.back(); - }, - child: Container( - margin: EdgeInsets.only(bottom: 12.h), - padding: EdgeInsets.all(12.w), - decoration: BoxDecoration( - color: isSelected - ? (isDarkMode - ? Colors.teal[900]!.withOpacity(0.3) - : Colors.teal[50]!) - : (isDarkMode - ? Colors.white.withOpacity(0.05) - : Colors.grey[100]!), - borderRadius: BorderRadius.circular(12.r), - border: Border.all( - color: isSelected - ? (isDarkMode - ? Colors.teal[300]! - : Colors.teal[600]!) - : Colors.transparent, - width: 1, - ), - ), - child: Row( - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - '${service['name']}'.tr, // 服务名称 - style: TextStyle( - fontSize: 16.sp, - fontWeight: FontWeight.w500, - color: isDarkMode - ? Colors.white - : Colors.black87, - ), - overflow: TextOverflow.ellipsis, - ), - SizedBox(height: 4.h), - Text( - '${service['description']}'.tr, // 服务描述 - style: TextStyle( - fontSize: 12.sp, - color: isDarkMode - ? Colors.white70 - : Colors.black54, - ), - overflow: TextOverflow.ellipsis, - maxLines: 2, - ), - ], - ), - ), - SizedBox(width: 12.w), - Container( - width: 24.w, - height: 24.w, - decoration: BoxDecoration( - color: isSelected - ? (isDarkMode - ? Colors.teal[300] - : Colors.teal[600]) - : (isDarkMode - ? Colors.white.withOpacity(0.1) - : Colors.grey[300]), - shape: BoxShape.circle, - ), - child: isSelected - ? Icon( - Icons.check, - size: 16.w, - color: Colors.white, - ) - : null, - ), - ], - ), - ), - ); - }); - }).toList(), - SizedBox(height: 16.h), - Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - TextButton( - onPressed: () => Get.back(), - child: Text( - 'cancel'.tr, // 取消 - style: TextStyle( - color: isDarkMode ? Colors.white70 : Colors.black54, - ), - ), - ), - ], - ), - ], - ), - ), - ), - ); - } - // 显示语言选择对话框 void _showLanguageSelectionDialog(bool isDarkMode) { Get.dialog( @@ -1572,10 +1129,10 @@ class SettingsView extends GetView { decoration: BoxDecoration( color: isSelected ? (isDarkMode - ? Colors.teal[900]!.withOpacity(0.3) + ? Colors.teal[900]!.withValues(alpha: 0.3) : Colors.teal[50]!) : (isDarkMode - ? Colors.white.withOpacity(0.05) + ? Colors.white.withValues(alpha: 0.05) : Colors.grey[100]!), borderRadius: BorderRadius.circular(12.r), border: Border.all( @@ -1621,7 +1178,8 @@ class SettingsView extends GetView { ? Colors.teal[300] : Colors.teal[600]) : (isDarkMode - ? Colors.white.withOpacity(0.1) + ? Colors.white + .withValues(alpha: 0.1) : Colors.grey[300]), shape: BoxShape.circle, ), @@ -1663,78 +1221,4 @@ class SettingsView extends GetView { ), ); } - - // 添加权限管理设置项 - Widget _buildSettingItem({ - required IconData icon, - required Color iconColor, - required String title, - required bool isDarkMode, - required VoidCallback onTap, - }) { - return InkWell( - onTap: onTap, - child: Padding( - padding: EdgeInsets.all(16.w), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - child: Row( - children: [ - Container( - width: 32.w, - height: 32.w, - decoration: BoxDecoration( - color: isDarkMode - ? Colors.white.withOpacity(0.05) - : Colors.grey[100], - borderRadius: BorderRadius.circular(16.r), - ), - child: Icon( - icon, - size: 16.w, - color: iconColor, - ), - ), - SizedBox(width: 12.w), - Flexible( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - title, - style: TextStyle( - fontSize: 16.sp, - fontWeight: FontWeight.w500, - color: isDarkMode ? Colors.white : Colors.black87, - ), - overflow: TextOverflow.ellipsis, - ), - ], - ), - ), - ], - ), - ), - Container( - width: 32.w, - height: 32.w, - decoration: BoxDecoration( - color: isDarkMode - ? Colors.white.withOpacity(0.05) - : Colors.grey[100], - borderRadius: BorderRadius.circular(16.r), - ), - child: Icon( - Icons.chevron_right, - size: 16.w, - color: isDarkMode ? Colors.white70 : Colors.grey[500], - ), - ), - ], - ), - ), - ); - } } From fac5c18c3a473c44558a69ed6f4ba3b5d8e84c0c Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Sun, 4 Jan 2026 21:22:48 +0800 Subject: [PATCH 05/27] =?UTF-8?q?refactor(settings):=20=E5=B0=86=E8=AF=AD?= =?UTF-8?q?=E8=A8=80=E5=88=97=E8=A1=A8=E6=8F=90=E5=8F=96=E5=88=B0=E5=8D=95?= =?UTF-8?q?=E7=8B=AC=E7=9A=84=E6=95=B0=E6=8D=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将原本在控制器中硬编码的语言列表提取到单独的settings_language_data.dart文件中 --- .../controllers/settings_controller.dart | 66 +------------------ .../models/settings_language_data.dart | 65 ++++++++++++++++++ lib/modules/settings/views/settings_view.dart | 2 - 3 files changed, 67 insertions(+), 66 deletions(-) create mode 100644 lib/modules/settings/models/settings_language_data.dart diff --git a/lib/modules/settings/controllers/settings_controller.dart b/lib/modules/settings/controllers/settings_controller.dart index f8a156d0d..245ac4e48 100644 --- a/lib/modules/settings/controllers/settings_controller.dart +++ b/lib/modules/settings/controllers/settings_controller.dart @@ -12,76 +12,14 @@ import '../../../core/translations/app_translations.dart'; import '../../../data/services/network/dio_manager.dart'; import '../../../routes/app_routes.dart'; import '../models/language_model.dart'; +import '../models/settings_language_data.dart'; import '../../../data/services/language_manager.dart'; import '../../../data/services/version_update_service.dart'; import '../../common/widgets/version_update_dialog.dart'; class SettingsController extends GetxController { // 语言设置 - final List languageList = [ - LanguageModel( - name: 'followingSystem', alias: '', value: 'system'), // 跟随系统.tr - LanguageModel(name: 'english', alias: 'English', value: 'en_US'), // 英语.tr - LanguageModel(name: 'chinese', alias: '中文', value: 'zh_CN'), // 中文.tr - LanguageModel( - name: 'traditionalChinese', alias: '繁體中文', value: 'zh_TW'), // 添加繁体中文 - LanguageModel( - name: 'traditionalChineseHK', - alias: '繁體中文(HK)', - value: 'zh_HK'), // 添加香港繁体中文 - LanguageModel( - name: 'spanish', alias: 'Español', value: 'es_ES'), // 添加西班牙语选项 - LanguageModel( - name: 'portuguese', alias: 'Português', value: 'pt_PT'), // 添加葡萄牙语 - LanguageModel(name: 'japanese', alias: '日本語', value: 'ja_JP'), // 添加日语选项 - LanguageModel(name: 'korean', alias: '한국어', value: 'ko_KR'), // 添加韩语选项 - LanguageModel(name: 'french', alias: 'Français', value: 'fr_FR'), // 添加法语选项 - LanguageModel(name: 'german', alias: 'Deutsch', value: 'de_DE'), // 添加德语选项 - LanguageModel(name: 'russian', alias: 'Русский', value: 'ru_RU'), // 添加俄语选项 - LanguageModel(name: 'arabic', alias: 'العربية', value: 'ar_SA'), // 阿拉伯语 - LanguageModel(name: 'persian', alias: 'فارسی', value: 'fa_IR'), // 波斯语 - - LanguageModel( - name: 'vietnamese', alias: 'Tiếng Việt', value: 'vi_VN'), // 添加越南语选项 - LanguageModel( - name: 'italian', alias: 'Italiano', value: 'it_IT'), // 添加意大利语选项 - LanguageModel( - name: 'hindi', alias: 'हिन्दी', value: 'hi_IN'), // 添加印度语(印地语)选项 - LanguageModel( - name: 'indonesian', - alias: 'Bahasa Indonesia', - value: 'id_ID'), // 添加印尼语选项 - LanguageModel(name: 'thai', alias: 'ไทย', value: 'th_TH'), // 添加泰语选项 - LanguageModel( - name: 'malay', alias: 'Bahasa Melayu', value: 'ms_MY'), // 添加马来语选项 - LanguageModel(name: 'turkish', alias: 'Türkçe', value: 'tr_TR'), // 添加土耳其语选项 - LanguageModel(name: 'polish', alias: 'Polski', value: 'pl_PL'), // 添加波兰语选项 - LanguageModel(name: 'filipino', alias: 'Filipino', value: 'tl_PH'), // 菲律宾语 - LanguageModel(name: 'dutch', alias: 'Nederlands', value: 'nl_NL'), // 荷兰语 - LanguageModel(name: 'swedish', alias: 'Svenska', value: 'sv_SE'), // 瑞典语 - LanguageModel(name: 'danish', alias: 'Dansk', value: 'da_DK'), // 丹麦语 - LanguageModel(name: 'finnish', alias: 'Suomi', value: 'fi_FI'), // 芬兰语 - LanguageModel(name: 'czech', alias: 'Čeština', value: 'cs_CZ'), // 捷克语 - LanguageModel(name: 'hungarian', alias: 'Magyar', value: 'hu_HU'), // 匈牙利语 - LanguageModel(name: 'norwegian', alias: 'Norsk', value: 'nb_NO'), // 挪威语 - LanguageModel(name: 'romanian', alias: 'Română', value: 'ro_RO'), // 罗马尼亚语 - LanguageModel( - name: 'ukrainian', alias: 'Українська', value: 'uk_UA'), // 乌克兰语 - LanguageModel(name: 'greek', alias: 'Ελληνικά', value: 'el_GR'), // 希腊语 - LanguageModel( - name: 'bulgarian', alias: 'Български', value: 'bg_BG'), // 保加利亚语 - LanguageModel(name: 'croatian', alias: 'Hrvatski', value: 'hr_HR'), // 克罗地亚语 - LanguageModel(name: 'slovak', alias: 'Slovenský', value: 'sk_SK'), // 斯洛伐克语 - LanguageModel( - name: 'slovenian', alias: 'Slovenščina', value: 'sl_SI'), // 斯洛文尼亚语 - LanguageModel( - name: 'lithuanian', alias: 'Lietuvių', value: 'lt_LT'), // 立陶宛语 - LanguageModel(name: 'latvian', alias: 'Latviešu', value: 'lv_LV'), // 拉脱维亚语 - LanguageModel(name: 'estonian', alias: 'Eesti', value: 'et_EE'), // 爱沙尼亚语 - LanguageModel( - name: 'serbian', alias: 'Srpski', value: 'sr_RS'), // 塞尔维亚语(拉丁) - LanguageModel(name: 'icelandic', alias: 'Íslenska', value: 'is_IS'), // 冰岛语 - ]; + final List languageList = settingsLanguageList; Rx language = LanguageModel().obs; diff --git a/lib/modules/settings/models/settings_language_data.dart b/lib/modules/settings/models/settings_language_data.dart new file mode 100644 index 000000000..86afc5aa1 --- /dev/null +++ b/lib/modules/settings/models/settings_language_data.dart @@ -0,0 +1,65 @@ +import 'language_model.dart'; + +final List settingsLanguageList = List.unmodifiable([ + LanguageModel(name: 'followingSystem', alias: '', value: 'system'), // 跟随系统.tr + LanguageModel(name: 'english', alias: 'English', value: 'en_US'), // 英语.tr + LanguageModel(name: 'chinese', alias: '中文', value: 'zh_CN'), // 中文.tr + LanguageModel( + name: 'traditionalChinese', alias: '繁體中文', value: 'zh_TW'), // 添加繁体中文 + LanguageModel( + name: 'traditionalChineseHK', + alias: '繁體中文(HK)', + value: 'zh_HK'), // 添加香港繁体中文 + LanguageModel( + name: 'spanish', alias: 'Español', value: 'es_ES'), // 添加西班牙语选项 + LanguageModel( + name: 'portuguese', alias: 'Português', value: 'pt_PT'), // 添加葡萄牙语 + LanguageModel(name: 'japanese', alias: '日本語', value: 'ja_JP'), // 添加日语选项 + LanguageModel(name: 'korean', alias: '한국어', value: 'ko_KR'), // 添加韩语选项 + LanguageModel(name: 'french', alias: 'Français', value: 'fr_FR'), // 添加法语选项 + LanguageModel(name: 'german', alias: 'Deutsch', value: 'de_DE'), // 添加德语选项 + LanguageModel(name: 'russian', alias: 'Русский', value: 'ru_RU'), // 添加俄语选项 + LanguageModel(name: 'arabic', alias: 'العربية', value: 'ar_SA'), // 阿拉伯语 + LanguageModel(name: 'persian', alias: 'فارسی', value: 'fa_IR'), // 波斯语 + LanguageModel( + name: 'vietnamese', alias: 'Tiếng Việt', value: 'vi_VN'), // 添加越南语选项 + LanguageModel( + name: 'italian', alias: 'Italiano', value: 'it_IT'), // 添加意大利语选项 + LanguageModel( + name: 'hindi', alias: 'हिन्दी', value: 'hi_IN'), // 添加印度语(印地语)选项 + LanguageModel( + name: 'indonesian', + alias: 'Bahasa Indonesia', + value: 'id_ID'), // 添加印尼语选项 + LanguageModel(name: 'thai', alias: 'ไทย', value: 'th_TH'), // 添加泰语选项 + LanguageModel( + name: 'malay', alias: 'Bahasa Melayu', value: 'ms_MY'), // 添加马来语选项 + LanguageModel(name: 'turkish', alias: 'Türkçe', value: 'tr_TR'), // 添加土耳其语选项 + LanguageModel(name: 'polish', alias: 'Polski', value: 'pl_PL'), // 添加波兰语选项 + LanguageModel(name: 'filipino', alias: 'Filipino', value: 'tl_PH'), // 菲律宾语 + LanguageModel(name: 'dutch', alias: 'Nederlands', value: 'nl_NL'), // 荷兰语 + LanguageModel(name: 'swedish', alias: 'Svenska', value: 'sv_SE'), // 瑞典语 + LanguageModel(name: 'danish', alias: 'Dansk', value: 'da_DK'), // 丹麦语 + LanguageModel(name: 'finnish', alias: 'Suomi', value: 'fi_FI'), // 芬兰语 + LanguageModel(name: 'czech', alias: 'Čeština', value: 'cs_CZ'), // 捷克语 + LanguageModel(name: 'hungarian', alias: 'Magyar', value: 'hu_HU'), // 匈牙利语 + LanguageModel(name: 'norwegian', alias: 'Norsk', value: 'nb_NO'), // 挪威语 + LanguageModel(name: 'romanian', alias: 'Română', value: 'ro_RO'), // 罗马尼亚语 + LanguageModel( + name: 'ukrainian', alias: 'Українська', value: 'uk_UA'), // 乌克兰语 + LanguageModel(name: 'greek', alias: 'Ελληνικά', value: 'el_GR'), // 希腊语 + LanguageModel( + name: 'bulgarian', alias: 'Български', value: 'bg_BG'), // 保加利亚语 + LanguageModel(name: 'croatian', alias: 'Hrvatski', value: 'hr_HR'), // 克罗地亚语 + LanguageModel(name: 'slovak', alias: 'Slovenský', value: 'sk_SK'), // 斯洛伐克语 + LanguageModel( + name: 'slovenian', alias: 'Slovenščina', value: 'sl_SI'), // 斯洛文尼亚语 + LanguageModel( + name: 'lithuanian', alias: 'Lietuvių', value: 'lt_LT'), // 立陶宛语 + LanguageModel(name: 'latvian', alias: 'Latviešu', value: 'lv_LV'), // 拉脱维亚语 + LanguageModel(name: 'estonian', alias: 'Eesti', value: 'et_EE'), // 爱沙尼亚语 + LanguageModel( + name: 'serbian', alias: 'Srpski', value: 'sr_RS'), // 塞尔维亚语(拉丁) + LanguageModel(name: 'icelandic', alias: 'Íslenska', value: 'is_IS'), // 冰岛语 +]); + diff --git a/lib/modules/settings/views/settings_view.dart b/lib/modules/settings/views/settings_view.dart index 0ab7e9f79..5845336a0 100644 --- a/lib/modules/settings/views/settings_view.dart +++ b/lib/modules/settings/views/settings_view.dart @@ -39,8 +39,6 @@ class SettingsView extends GetView { _buildUserInfoCard(isDarkMode), SizedBox(height: 12.h), _buildVipPurchaseCard(isDarkMode), - // SizedBox(height: 20.h), - // _buildAISettingsSection(isDarkMode), SizedBox(height: 16.h), _buildSystemSettingsSection(isDarkMode), SizedBox(height: 20.h), From e2c4575cb80db163d81c19a347b0b36d79ac5d29 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Mon, 5 Jan 2026 10:49:38 +0800 Subject: [PATCH 06/27] =?UTF-8?q?refactor(settings):=20=E9=87=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E8=AF=AD=E8=A8=80=E5=8F=98=E9=87=8F=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E8=AF=AD=E8=A8=80=E8=AE=BE=E7=BD=AE=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将`language`重命名为`currentLanguage`以提高可读性 优化语言设置逻辑,添加详细注释说明 整理语言列表的代码格式 --- .../controllers/settings_controller.dart | 51 +++++++++++-------- .../models/settings_language_data.dart | 28 ++++------ lib/modules/settings/views/settings_view.dart | 6 ++- 3 files changed, 44 insertions(+), 41 deletions(-) diff --git a/lib/modules/settings/controllers/settings_controller.dart b/lib/modules/settings/controllers/settings_controller.dart index 245ac4e48..54b40fb96 100644 --- a/lib/modules/settings/controllers/settings_controller.dart +++ b/lib/modules/settings/controllers/settings_controller.dart @@ -21,7 +21,7 @@ class SettingsController extends GetxController { // 语言设置 final List languageList = settingsLanguageList; - Rx language = LanguageModel().obs; + Rx currentLanguage = LanguageModel().obs; // 当前选择的语言 final GetStorage _storage = GetStorage(); @@ -56,9 +56,6 @@ class SettingsController extends GetxController { // 设置当前主题状态 isDarkMode.value = savedDarkMode; - //获取用户信息 - // loadUserInfo(); - // 获取应用版本信息 getAppVersion(); } @@ -75,31 +72,42 @@ class SettingsController extends GetxController { } } + /// 获取系统语言 + /// 从存储中读取用户上次选择的语言 + /// 如果没有保存记录,则默认使用第一个语言 void _getLanguage() { - String? languageValue = _storage.read('language'); - LanguageModel data = languageList.firstWhere( - (element) => element.value == languageValue, + String? storedLanguageCode = _storage.read('language'); + //在语言列表中查找匹配的语言 + LanguageModel languageToApply = languageList.firstWhere( + //查找条件:元素的value属性与从存储中读取的值匹配 + (element) => element.value == storedLanguageCode, + //如果没有找到匹配的语言,返回第一个语言作为默认值 orElse: () => languageList[0], ); - language.value = data; + currentLanguage.value = languageToApply; } - /// 设置语言 - Future setLanguage(LanguageModel data) async { + /// 设置应用语言 + /// 1. 更新Flutter的Locale设置 + /// 2. 保存用户选择到本地存储 + /// 3. 更新agent服务的语音识别语言设置 + /// 4. 显示语言切换成功提示 + /// 5. 延迟一下确保语言更新完成,然后重新进入应用 + Future setLanguage(LanguageModel selectedLanguage) async { try { // 如果用户选择的语言与当前语言一致,则直接返回,避免重复设置 - // print('lxm--设置语言: ${data.value}'); - // print('lxm--当前语言: ${language.value.value}'); - if (data.value == language.value.value) { + // print('lxm--设置语言: ${selectedLanguage.value}'); + // print('lxm--当前语言: ${currentLanguage.value.value}'); + if (selectedLanguage.value == currentLanguage.value.value) { return; } Locale? targetLocale; - // print('lxm--设置语言: ${data.value}'); + // print('lxm--设置语言: ${selectedLanguage.value}'); - if (data.value != 'system') { + if (selectedLanguage.value != 'system') { // 用户手动选择的语言 - List languageList = data.value.split('_'); + List languageList = selectedLanguage.value.split('_'); targetLocale = Locale(languageList[0], languageList[1]); } else { // 跟随系统语言,使用智能匹配 @@ -112,7 +120,8 @@ class SettingsController extends GetxController { if (targetLocale != null) { Get.updateLocale(targetLocale); - Logger().i("设置语言: ${data.value} -> ${targetLocale.toString()}"); + Logger() + .i("设置语言: ${selectedLanguage.value} -> ${targetLocale.toString()}"); } else { // 如果无法确定目标语言,使用智能fallback targetLocale = AppTranslations.getSmartFallbackLocale(); @@ -121,14 +130,14 @@ class SettingsController extends GetxController { } // 保存用户选择 - language.value = data; - await _storage.write('language', data.value); + currentLanguage.value = selectedLanguage; + await _storage.write('language', selectedLanguage.value); // 更新agent服务的语音识别语言设置 - await _updateAgentLanguageSettings(data); + await _updateAgentLanguageSettings(selectedLanguage); // 显示语言切换成功提示 - Logger().i("语言切换成功: ${data.value}"); + Logger().i("语言切换成功: ${selectedLanguage.value}"); // 延迟一下确保语言更新完成,然后重新进入应用 await Future.delayed(const Duration(milliseconds: 500)); diff --git a/lib/modules/settings/models/settings_language_data.dart b/lib/modules/settings/models/settings_language_data.dart index 86afc5aa1..91e16250e 100644 --- a/lib/modules/settings/models/settings_language_data.dart +++ b/lib/modules/settings/models/settings_language_data.dart @@ -1,5 +1,7 @@ import 'language_model.dart'; +/// App界面支持的语言列表 +/// 包含跟随系统、英语、中文、繁体中文、香港繁体中文、西班牙语、葡萄牙语、日语、韩语、法语、德语、俄语、阿拉伯语、波斯语、越南语、意大利语、印地语、印尼语、泰语、马来语等语言选项 final List settingsLanguageList = List.unmodifiable([ LanguageModel(name: 'followingSystem', alias: '', value: 'system'), // 跟随系统.tr LanguageModel(name: 'english', alias: 'English', value: 'en_US'), // 英语.tr @@ -10,8 +12,7 @@ final List settingsLanguageList = List.unmodifiable([ name: 'traditionalChineseHK', alias: '繁體中文(HK)', value: 'zh_HK'), // 添加香港繁体中文 - LanguageModel( - name: 'spanish', alias: 'Español', value: 'es_ES'), // 添加西班牙语选项 + LanguageModel(name: 'spanish', alias: 'Español', value: 'es_ES'), // 添加西班牙语选项 LanguageModel( name: 'portuguese', alias: 'Português', value: 'pt_PT'), // 添加葡萄牙语 LanguageModel(name: 'japanese', alias: '日本語', value: 'ja_JP'), // 添加日语选项 @@ -23,14 +24,10 @@ final List settingsLanguageList = List.unmodifiable([ LanguageModel(name: 'persian', alias: 'فارسی', value: 'fa_IR'), // 波斯语 LanguageModel( name: 'vietnamese', alias: 'Tiếng Việt', value: 'vi_VN'), // 添加越南语选项 + LanguageModel(name: 'italian', alias: 'Italiano', value: 'it_IT'), // 添加意大利语选项 + LanguageModel(name: 'hindi', alias: 'हिन्दी', value: 'hi_IN'), // 添加印度语(印地语)选项 LanguageModel( - name: 'italian', alias: 'Italiano', value: 'it_IT'), // 添加意大利语选项 - LanguageModel( - name: 'hindi', alias: 'हिन्दी', value: 'hi_IN'), // 添加印度语(印地语)选项 - LanguageModel( - name: 'indonesian', - alias: 'Bahasa Indonesia', - value: 'id_ID'), // 添加印尼语选项 + name: 'indonesian', alias: 'Bahasa Indonesia', value: 'id_ID'), // 添加印尼语选项 LanguageModel(name: 'thai', alias: 'ไทย', value: 'th_TH'), // 添加泰语选项 LanguageModel( name: 'malay', alias: 'Bahasa Melayu', value: 'ms_MY'), // 添加马来语选项 @@ -45,21 +42,16 @@ final List settingsLanguageList = List.unmodifiable([ LanguageModel(name: 'hungarian', alias: 'Magyar', value: 'hu_HU'), // 匈牙利语 LanguageModel(name: 'norwegian', alias: 'Norsk', value: 'nb_NO'), // 挪威语 LanguageModel(name: 'romanian', alias: 'Română', value: 'ro_RO'), // 罗马尼亚语 - LanguageModel( - name: 'ukrainian', alias: 'Українська', value: 'uk_UA'), // 乌克兰语 + LanguageModel(name: 'ukrainian', alias: 'Українська', value: 'uk_UA'), // 乌克兰语 LanguageModel(name: 'greek', alias: 'Ελληνικά', value: 'el_GR'), // 希腊语 - LanguageModel( - name: 'bulgarian', alias: 'Български', value: 'bg_BG'), // 保加利亚语 + LanguageModel(name: 'bulgarian', alias: 'Български', value: 'bg_BG'), // 保加利亚语 LanguageModel(name: 'croatian', alias: 'Hrvatski', value: 'hr_HR'), // 克罗地亚语 LanguageModel(name: 'slovak', alias: 'Slovenský', value: 'sk_SK'), // 斯洛伐克语 LanguageModel( name: 'slovenian', alias: 'Slovenščina', value: 'sl_SI'), // 斯洛文尼亚语 - LanguageModel( - name: 'lithuanian', alias: 'Lietuvių', value: 'lt_LT'), // 立陶宛语 + LanguageModel(name: 'lithuanian', alias: 'Lietuvių', value: 'lt_LT'), // 立陶宛语 LanguageModel(name: 'latvian', alias: 'Latviešu', value: 'lv_LV'), // 拉脱维亚语 LanguageModel(name: 'estonian', alias: 'Eesti', value: 'et_EE'), // 爱沙尼亚语 - LanguageModel( - name: 'serbian', alias: 'Srpski', value: 'sr_RS'), // 塞尔维亚语(拉丁) + LanguageModel(name: 'serbian', alias: 'Srpski', value: 'sr_RS'), // 塞尔维亚语(拉丁) LanguageModel(name: 'icelandic', alias: 'Íslenska', value: 'is_IS'), // 冰岛语 ]); - diff --git a/lib/modules/settings/views/settings_view.dart b/lib/modules/settings/views/settings_view.dart index 5845336a0..b06d3c7b9 100644 --- a/lib/modules/settings/views/settings_view.dart +++ b/lib/modules/settings/views/settings_view.dart @@ -397,7 +397,8 @@ class SettingsView extends GetView { Obx( () => _buildSimpleNavigationSetting( title: 'languageSetting'.tr, // 语言设置 - subtitle: controller.language.value.name.tr, // 当前语言 + subtitle: + controller.currentLanguage.value.name.tr, // 当前语言 icon: Icons.language, iconBgColor: isDarkMode ? Colors.indigo[900]!.withValues(alpha: 0.3) @@ -1115,7 +1116,8 @@ class SettingsView extends GetView { children: controller.languageList.map((language) { return Obx(() { final isSelected = - controller.language.value.value == language.value; + controller.currentLanguage.value.value == + language.value; return GestureDetector( onTap: () { controller.setLanguage(language); From ba0f4a385a5466f634a4931ace190762474a949b Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Mon, 5 Jan 2026 14:34:16 +0800 Subject: [PATCH 07/27] =?UTF-8?q?refactor(settings):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E6=94=AF=E6=8C=81=E6=A8=A1=E5=9D=97=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将settings_language_data重命名为app_supported_languages以更准确表达用途 - 更新LanguageModel注释以更清晰地描述字段用途 - 优化settings_view中的语言选择逻辑和变量命名 - 将getSomeAppData重命名为getSomeAppInfo以提高可读性 --- .../controllers/settings_controller.dart | 8 ++++---- ..._data.dart => app_supported_languages.dart} | 5 ++++- .../settings/models/language_model.dart | 6 +++--- lib/modules/settings/views/settings_view.dart | 18 +++++++++--------- 4 files changed, 20 insertions(+), 17 deletions(-) rename lib/modules/settings/models/{settings_language_data.dart => app_supported_languages.dart} (97%) diff --git a/lib/modules/settings/controllers/settings_controller.dart b/lib/modules/settings/controllers/settings_controller.dart index 54b40fb96..4d6bb0ddc 100644 --- a/lib/modules/settings/controllers/settings_controller.dart +++ b/lib/modules/settings/controllers/settings_controller.dart @@ -12,14 +12,14 @@ import '../../../core/translations/app_translations.dart'; import '../../../data/services/network/dio_manager.dart'; import '../../../routes/app_routes.dart'; import '../models/language_model.dart'; -import '../models/settings_language_data.dart'; +import '../models/app_supported_languages.dart'; import '../../../data/services/language_manager.dart'; import '../../../data/services/version_update_service.dart'; import '../../common/widgets/version_update_dialog.dart'; class SettingsController extends GetxController { // 语言设置 - final List languageList = settingsLanguageList; + final List languageList = appSupportedLanguages; // 应用支持的语言列表 Rx currentLanguage = LanguageModel().obs; // 当前选择的语言 @@ -375,8 +375,8 @@ class SettingsController extends GetxController { } } - /// 获取当前应用数据 - String getSomeAppData() { + /// 获取当前应用信息 + String getSomeAppInfo() { try { final versionService = Get.find(); return ''' diff --git a/lib/modules/settings/models/settings_language_data.dart b/lib/modules/settings/models/app_supported_languages.dart similarity index 97% rename from lib/modules/settings/models/settings_language_data.dart rename to lib/modules/settings/models/app_supported_languages.dart index 91e16250e..efc466615 100644 --- a/lib/modules/settings/models/settings_language_data.dart +++ b/lib/modules/settings/models/app_supported_languages.dart @@ -2,9 +2,11 @@ import 'language_model.dart'; /// App界面支持的语言列表 /// 包含跟随系统、英语、中文、繁体中文、香港繁体中文、西班牙语、葡萄牙语、日语、韩语、法语、德语、俄语、阿拉伯语、波斯语、越南语、意大利语、印地语、印尼语、泰语、马来语等语言选项 -final List settingsLanguageList = List.unmodifiable([ +final List appSupportedLanguages = List.unmodifiable([ + // 跟随系统 LanguageModel(name: 'followingSystem', alias: '', value: 'system'), // 跟随系统.tr LanguageModel(name: 'english', alias: 'English', value: 'en_US'), // 英语.tr + //中文相关 LanguageModel(name: 'chinese', alias: '中文', value: 'zh_CN'), // 中文.tr LanguageModel( name: 'traditionalChinese', alias: '繁體中文', value: 'zh_TW'), // 添加繁体中文 @@ -12,6 +14,7 @@ final List settingsLanguageList = List.unmodifiable([ name: 'traditionalChineseHK', alias: '繁體中文(HK)', value: 'zh_HK'), // 添加香港繁体中文 + LanguageModel(name: 'spanish', alias: 'Español', value: 'es_ES'), // 添加西班牙语选项 LanguageModel( name: 'portuguese', alias: 'Português', value: 'pt_PT'), // 添加葡萄牙语 diff --git a/lib/modules/settings/models/language_model.dart b/lib/modules/settings/models/language_model.dart index 40e3bfae6..d47a58816 100644 --- a/lib/modules/settings/models/language_model.dart +++ b/lib/modules/settings/models/language_model.dart @@ -2,9 +2,9 @@ /// 包含语言的名称、别名和值 /// 用于表示应用支持的不同语言 class LanguageModel { - final String name; //语言名称 - final String alias; //语言别名 - final String value; //语言代码 + final String name; //翻译键,用于显示用户友好的语言名称 + final String alias; //语言的本地名称,用于在界面上展示 + final String value; //语言代码,用于系统识别和国际化 LanguageModel({ this.name = '', diff --git a/lib/modules/settings/views/settings_view.dart b/lib/modules/settings/views/settings_view.dart index b06d3c7b9..a07f10888 100644 --- a/lib/modules/settings/views/settings_view.dart +++ b/lib/modules/settings/views/settings_view.dart @@ -1,11 +1,11 @@ +import 'dart:ui'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'dart:ui'; + import '../controllers/settings_controller.dart'; import '../../../core/widgets/common_bottom_nav.dart'; import '../../../routes/app_routes.dart'; -//import '../../../data/models/user_Info.dart'; import '../../common/webview_page.dart'; import '../../../modules/profile/controllers/profile_controller.dart'; import '../../profile/views/unified_avatar.dart'; @@ -431,7 +431,7 @@ class SettingsView extends GetView { iconColor: isDarkMode ? Colors.indigo[300]! : Colors.amber[600]!, value: isDarkMode, - onChanged: (value) { + onChanged: (isThemeChanged) { controller.toggleTheme(); }, isDarkMode: isDarkMode, @@ -900,7 +900,7 @@ class SettingsView extends GetView { ), SizedBox(height: 8.h), Text( - controller.getSomeAppData(), + controller.getSomeAppInfo(), style: TextStyle( fontSize: 10.sp, fontFamily: 'monospace', @@ -1113,14 +1113,14 @@ class SettingsView extends GetView { child: SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min, - children: controller.languageList.map((language) { + children: controller.languageList.map((languageOption) { return Obx(() { final isSelected = controller.currentLanguage.value.value == - language.value; + languageOption.value; return GestureDetector( onTap: () { - controller.setLanguage(language); + controller.setLanguage(languageOption); Get.back(); }, child: Container( @@ -1148,7 +1148,7 @@ class SettingsView extends GetView { children: [ Expanded( child: Text( - language.name.tr, // 语言名称 + languageOption.name.tr, // 语言名称 style: TextStyle( fontSize: 16.sp, fontWeight: FontWeight.w500, @@ -1160,7 +1160,7 @@ class SettingsView extends GetView { ), ), Text( - language.alias, // 语言别名(原始名称,不加.tr) + languageOption.alias, // 语言别名(原始名称,不加.tr) style: TextStyle( fontSize: 14.sp, color: isDarkMode From c3c6d4edddef103d61ca69f7c129ea5eb0f2b9fc Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Mon, 5 Jan 2026 14:42:41 +0800 Subject: [PATCH 08/27] =?UTF-8?q?fix(music):=20=E4=BC=98=E5=8C=96=E9=9F=B3?= =?UTF-8?q?=E4=B9=90=E6=92=AD=E6=94=BE=E5=99=A8=E6=8B=96=E5=8A=A8=E8=BF=9B?= =?UTF-8?q?=E5=BA=A6=E6=9D=A1=E7=9A=84=E8=A1=8C=E4=B8=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复音乐播放器拖动进度条时UI更新和实际跳转不同步的问题 在iOS端添加seek操作的幂等检查避免重复跳转 移除Android端多余的日志输出 调整Swift代码中媒体控制中心的更新逻辑 --- lib/modules/music/views/music_playlist_view.dart | 7 +++++++ .../yunqiinnovation/agent_service/AgentService.kt | 2 +- .../Sources/agent_service/AgentServiceImpl.swift | 4 ++-- .../ios/chat_api/Sources/chat_api/MCPClient.swift | 2 +- .../Sources/music_service/MusicService.swift | 14 ++++++++------ 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/lib/modules/music/views/music_playlist_view.dart b/lib/modules/music/views/music_playlist_view.dart index e6b6d00f0..16a7dfaf5 100644 --- a/lib/modules/music/views/music_playlist_view.dart +++ b/lib/modules/music/views/music_playlist_view.dart @@ -546,6 +546,13 @@ class MusicPlaylistView extends StatelessWidget { child: Slider( value: controller.progress.value.clamp(0.0, 1.0), onChanged: (value) { + // 拖动中仅更新UI显示,不触发实际跳转 + controller.progress.value = value; + controller.currentPosition.value = + (controller.duration.value * value).round(); + }, + onChangeEnd: (value) { + // 松开时再执行跳转,确保拖动自然 final targetPosition = (controller.duration.value * value).round(); controller.seekToPosition(targetPosition); 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 22c510c59..fb10d82f8 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 @@ -426,7 +426,7 @@ object AgentService : CoroutineScope { setPackage(context.packageName) } context.sendBroadcast(intent) - Log.e(TAG, "QQ 音乐暂停播放") + // Log.e(TAG, "QQ 音乐暂停播放") autopauseMusic() // QQMusicSingleton.getInstance().autopauseMusic { result -> // if (result.isSuccess) { 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 09a71692e..506a596bd 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 @@ -182,8 +182,8 @@ class AgentServiceImpl: NSObject { self.config = config if let navigationMode = config["navigationMode"] as? String { - self.navigationMode = navigationMode - } + self.navigationMode = navigationMode + } if let callingToolText = config["callingToolText"] as? String { self.callingToolText = callingToolText diff --git a/local_plugins/chat_api/ios/chat_api/Sources/chat_api/MCPClient.swift b/local_plugins/chat_api/ios/chat_api/Sources/chat_api/MCPClient.swift index cf9ed3bde..c2da48b8d 100644 --- a/local_plugins/chat_api/ios/chat_api/Sources/chat_api/MCPClient.swift +++ b/local_plugins/chat_api/ios/chat_api/Sources/chat_api/MCPClient.swift @@ -431,7 +431,7 @@ public class MCPClient { public init(musicServiceType: String) { initializeSystemFunctions() - + print("musicServiceType: \(musicServiceType)") switch musicServiceType { case "WY": initializeMusicSystemFunction() // 更明确的命名 diff --git a/local_plugins/music_service/ios/music_service/Sources/music_service/MusicService.swift b/local_plugins/music_service/ios/music_service/Sources/music_service/MusicService.swift index 88c258c8c..c13217297 100644 --- a/local_plugins/music_service/ios/music_service/Sources/music_service/MusicService.swift +++ b/local_plugins/music_service/ios/music_service/Sources/music_service/MusicService.swift @@ -565,7 +565,14 @@ public class MusicService: NSObject { // 记录当前播放状态 let wasPlaying = isPlaying - let time = CMTime(seconds: Double(positionMs) / 1000.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) + // 幂等短路:相同位置重复seek直接忽略 + let currentSeconds = CMTimeGetSeconds(player.currentTime()) + if !currentSeconds.isNaN && !currentSeconds.isInfinite { + let currentMs = Int(currentSeconds * 1000) + if currentMs == positionMs { return } + } + + let time: CMTime = CMTime(seconds: Double(positionMs) / 1000.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) player.seek(to: time) { [weak self] completed in if completed { @@ -575,15 +582,10 @@ public class MusicService: NSObject { if wasPlaying { self?.player?.play() self?.isPlaying = true - self?.updateMediaSessionPlaybackState(isPlaying: true) - self?.startProgressTimer() } // 立即更新进度信息到系统媒体控制中心 self?.updateProgressInfoImmediately() - - // 通知Flutter层 - self?.flutterChannel?.invokeMethod("onMediaSessionSeekTo", arguments: ["position": positionMs]) } } } From 0ebaf2e26247c20f7ef15713bdd8f59caebe46a1 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Mon, 5 Jan 2026 17:50:53 +0800 Subject: [PATCH 09/27] =?UTF-8?q?feat(=E8=AF=AD=E9=9F=B3=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?):=20=E6=94=B9=E8=BF=9B=E8=AF=AD=E8=A8=80=E5=A4=84=E7=90=86?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BB=A5=E6=94=AF=E6=8C=81=E6=9B=B4=E5=A4=9A?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E5=9C=BA=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构语音服务中的语言处理逻辑,统一处理中文地区代码并支持从配置获取首选语言 优化语言匹配逻辑,确保在不同场景下都能正确设置语音合成参数 --- lib/data/services/ble_manager.dart | 43 +++++++++++++------ .../controllers/profile_controller.dart | 15 +++---- .../controllers/settings_controller.dart | 24 +++++++---- .../agent_service/AgentService.kt | 10 ++++- .../agent_service/AgentServiceImpl.swift | 5 ++- 5 files changed, 64 insertions(+), 33 deletions(-) diff --git a/lib/data/services/ble_manager.dart b/lib/data/services/ble_manager.dart index c0afa44cf..2b8a6ffa8 100644 --- a/lib/data/services/ble_manager.dart +++ b/lib/data/services/ble_manager.dart @@ -12,6 +12,7 @@ import '../models/user_Info.dart' as userInfo; import '/data/models/appconfig_model.dart'; import '../../data/models/appconfig.dart'; +import '../../core/translations/app_translations.dart'; import '../../core/utils/logger.dart'; import 'bluetooth_manager.dart'; import 'language_manager.dart'; @@ -900,30 +901,44 @@ class BleManager extends GetxService { // 用户设置了特定语言 final parts = savedLanguage.split('_'); if (parts.length == 2) { - final asrCode = languageManager.getAsrCodeByShortCode(parts[0]); - if (asrCode != null) { - supportedLanguages.add(asrCode); + final lang = parts[0]; + final country = parts[1].toUpperCase(); + + if (lang == 'zh' && + (country == 'HK' || country == 'TW' || country == 'CN')) { + supportedLanguages.add('zh-$country'); } else { - // 直接使用语言-国家格式 - supportedLanguages.add('${parts[0]}-${parts[1]}'); + final asrCode = languageManager.getAsrCodeByShortCode(lang); + if (asrCode != null) { + supportedLanguages.add(asrCode); + } else { + supportedLanguages.add('$lang-$country'); + } } } } else { // 跟随系统语言或未设置 - final appLocale = Get.locale; + final appLocale = Get.locale ?? AppTranslations.deviceLocale(); if (appLocale != null) { final lang = appLocale.languageCode; final country = appLocale.countryCode; - // 尝试从语言管理器获取对应的ASR代码 - final asrCode = languageManager.getAsrCodeByShortCode(lang); - if (asrCode != null) { - supportedLanguages.add(asrCode); - } else if (country != null && country.isNotEmpty) { - // 构造 Azure SDK 需要的格式 (e.g., 'en-US') - supportedLanguages.add('$lang-$country'); + if (lang.toLowerCase() == 'zh' && + country != null && + country.isNotEmpty && + (country.toUpperCase() == 'HK' || + country.toUpperCase() == 'TW' || + country.toUpperCase() == 'CN')) { + supportedLanguages.add('zh-${country.toUpperCase()}'); } else { - supportedLanguages.add('en-US'); // 默认英语 + final asrCode = languageManager.getAsrCodeByShortCode(lang); + if (asrCode != null) { + supportedLanguages.add(asrCode); + } else if (country != null && country.isNotEmpty) { + supportedLanguages.add('$lang-$country'); + } else { + supportedLanguages.add('en-US'); + } } } } diff --git a/lib/modules/profile/controllers/profile_controller.dart b/lib/modules/profile/controllers/profile_controller.dart index 50493ad08..1acc3db48 100644 --- a/lib/modules/profile/controllers/profile_controller.dart +++ b/lib/modules/profile/controllers/profile_controller.dart @@ -1,23 +1,22 @@ -import '/data/services/user_portrait.dart'; +import 'dart:io'; + import 'package:dio/dio.dart' as dio; import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:logger/logger.dart'; -import '../../../data/models/user_Info.dart'; -import 'dart:io'; -//import 'dart:convert'; import 'package:flutter_image_compress/flutter_image_compress.dart'; import 'package:path_provider/path_provider.dart'; -import '../../../data/services/network/api.dart'; import 'package:dio/dio.dart'; + +import '../../../data/models/user_Info.dart'; +import '../../../data/services/user_portrait.dart'; +import '../../../data/services/network/api.dart'; import '../../../routes/app_routes.dart'; -//import '../../../modules/login/controllers/googleLogin.dart'; -//import '../../../modules/login/controllers/facebookLogin.dart'; import '../../../data/services/account_service.dart'; -//import 'package:http_parser/http_parser.dart'; // 新增此导入 +/// 个人资料页面控制器 class ProfileController extends GetxController { static ProfileController get to => Get.find(); diff --git a/lib/modules/settings/controllers/settings_controller.dart b/lib/modules/settings/controllers/settings_controller.dart index 4d6bb0ddc..ad328427c 100644 --- a/lib/modules/settings/controllers/settings_controller.dart +++ b/lib/modules/settings/controllers/settings_controller.dart @@ -137,7 +137,7 @@ class SettingsController extends GetxController { await _updateAgentLanguageSettings(selectedLanguage); // 显示语言切换成功提示 - Logger().i("语言切换成功: ${selectedLanguage.value}"); + Logger().i("lxm--语言切换成功: ${selectedLanguage.value}"); // 延迟一下确保语言更新完成,然后重新进入应用 await Future.delayed(const Duration(milliseconds: 500)); @@ -161,8 +161,9 @@ class SettingsController extends GetxController { // 跟随系统语言 final deviceLocale = Get.deviceLocale; if (deviceLocale != null) { - final lang = deviceLocale.languageCode; - final country = deviceLocale.countryCode; + final matchedLocale = AppTranslations.getMatchedLocale(deviceLocale); + final lang = matchedLocale.languageCode; + final country = matchedLocale.countryCode; if (country != null && country.isNotEmpty) { supportedLanguages.add('$lang-$country'); } else { @@ -181,12 +182,19 @@ class SettingsController extends GetxController { // 根据选择的语言值映射到ASR代码 final parts = languageModel.value.split('_'); if (parts.length == 2) { - final asrCode = languageManager.getAsrCodeByShortCode(parts[0]); - if (asrCode != null) { - supportedLanguages.add(asrCode); + final lang = parts[0]; + final country = parts[1].toUpperCase(); + + if (lang == 'zh' && + (country == 'HK' || country == 'TW' || country == 'CN')) { + supportedLanguages.add('zh-$country'); } else { - // 直接使用语言-国家格式 - supportedLanguages.add('${parts[0]}-${parts[1]}'); + final asrCode = languageManager.getAsrCodeByShortCode(lang); + if (asrCode != null) { + supportedLanguages.add(asrCode); + } else { + supportedLanguages.add('$lang-$country'); + } } } } 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 7b71a8058..cfe3c3461 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 @@ -380,7 +380,10 @@ object AgentService : CoroutineScope { // 从配置中获取TTS参数 val ttsAppId = config["volcanoAppId"]?.toString() ?: "" val ttsAppToken = config["volcanoToken"]?.toString() ?: "" - val ttsLanguage = config["ttsLanguage"]?.toString() ?: "zh-CN" + val supportedLanguages = (config["supportedLanguages"] as? List<*>)?.mapNotNull { it as? String } + val ttsLanguage = config["ttsLanguage"]?.toString()?.takeIf { it.isNotBlank() } + ?: supportedLanguages?.firstOrNull() + ?: "zh-CN" // 创建并初始化BytedanceTTS val azureTtsHelper = AzureTtsHelper(context) @@ -396,6 +399,11 @@ object AgentService : CoroutineScope { if (!success) { Log.e(TAG, "Bytedance TTS服务初始化失败") + } else { + val voiceName = getTtsVoiceNameByAsrCode(ttsLanguage) + if (voiceName.isNotEmpty()) { + ttsService?.setVoice(voiceName) + } } // 添加TTS事件监听 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 10d2d58e1..b75f9ede4 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 @@ -311,6 +311,7 @@ class AgentServiceImpl: NSObject { // 获取支持的语言列表,支持从配置中读取 let supportedLanguages = config["supportedLanguages"] as? [String] ?? ["zh-CN"] + let primaryLanguage = supportedLanguages.first ?? "zh-CN" guard let asrSuccess = azureAsrHelper?.initialize( subscriptionKey: azureSpeechKey, @@ -335,13 +336,13 @@ class AgentServiceImpl: NSObject { ttsAppId: "", ttsAppToken: azureSpeechKey, ttsResource: azureSpeechRegion, - language: "zh-CN" + language: primaryLanguage ), ttsSuccess else { sendError("初始化语音合成服务失败", code: "TTS_INIT_ERROR") return false } - _ = azureTtsHelper?.setVoice("zh-CN-XiaoxiaoNeural") + _ = azureTtsHelper?.setVoice(getTtsVoiceNameByAsrCode(primaryLanguage)) return true } From 6f455d84cae2063bb0f0015f521d86ec8ac41422 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Mon, 5 Jan 2026 18:01:00 +0800 Subject: [PATCH 10/27] =?UTF-8?q?feat(=E8=AF=AD=E9=9F=B3=E6=94=AF=E6=8C=81?= =?UTF-8?q?):=20=E6=96=B0=E5=A2=9E=E5=A4=9A=E7=A7=8D=E8=AF=AD=E8=A8=80?= =?UTF-8?q?=E5=92=8C=E6=96=B9=E8=A8=80=E7=9A=84=E8=AF=AD=E9=9F=B3=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加葡萄牙语(葡萄牙)、保加利亚语、斯洛伐克语、斯洛文尼亚语、立陶宛语、拉脱维亚语、爱沙尼亚语、塞尔维亚语、冰岛语、阿拉伯语(沙特)和菲律宾语的语音支持 统一处理语言代码大小写转换,特别处理菲律宾语(tl-PH)映射为fil-PH --- lib/data/services/ble_manager.dart | 37 ++++++++++--------- .../controllers/settings_controller.dart | 19 ++++++---- .../agent_service/AgentService.kt | 11 ++++++ .../agent_service/AgentServiceImpl.swift | 22 +++++++++++ 4 files changed, 64 insertions(+), 25 deletions(-) diff --git a/lib/data/services/ble_manager.dart b/lib/data/services/ble_manager.dart index 2b8a6ffa8..a98989bdb 100644 --- a/lib/data/services/ble_manager.dart +++ b/lib/data/services/ble_manager.dart @@ -2,8 +2,6 @@ import 'dart:async'; import 'dart:convert'; import 'dart:io'; -import 'package:firebase_auth/firebase_auth.dart'; -import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:get_storage/get_storage.dart'; import 'package:get/get.dart'; import 'package:ble_service/ble_service.dart'; @@ -882,7 +880,7 @@ class BleManager extends GetxService { AppConfig.env('XUNFEI_ASR_ACCESS_KEY_SECRET') ?? ''; // 从Flutter资源包中加载.mcp.json final jsonData = AppConfig.mcpConfig(); - Logger.info('启动BLE服务,musicServiceType: ${musicServiceType}'); + Logger.info('启动BLE服务,musicServiceType: $musicServiceType'); final isTtsInterruptEnabled = await _loadTtsInterrupe(); final vipExpiryTime = userInfo.User.instance.vipexptime; @@ -901,26 +899,24 @@ class BleManager extends GetxService { // 用户设置了特定语言 final parts = savedLanguage.split('_'); if (parts.length == 2) { - final lang = parts[0]; + final lang = parts[0].toLowerCase(); final country = parts[1].toUpperCase(); if (lang == 'zh' && (country == 'HK' || country == 'TW' || country == 'CN')) { supportedLanguages.add('zh-$country'); + } else if (lang == 'tl' && country == 'PH') { + // 菲律宾语特殊处理,映射为azure语言码 + supportedLanguages.add('fil-PH'); } else { - final asrCode = languageManager.getAsrCodeByShortCode(lang); - if (asrCode != null) { - supportedLanguages.add(asrCode); - } else { - supportedLanguages.add('$lang-$country'); - } + supportedLanguages.add('$lang-$country'); } } } else { // 跟随系统语言或未设置 final appLocale = Get.locale ?? AppTranslations.deviceLocale(); if (appLocale != null) { - final lang = appLocale.languageCode; + final lang = appLocale.languageCode.toLowerCase(); final country = appLocale.countryCode; if (lang.toLowerCase() == 'zh' && @@ -931,13 +927,20 @@ class BleManager extends GetxService { country.toUpperCase() == 'CN')) { supportedLanguages.add('zh-${country.toUpperCase()}'); } else { - final asrCode = languageManager.getAsrCodeByShortCode(lang); - if (asrCode != null) { - supportedLanguages.add(asrCode); - } else if (country != null && country.isNotEmpty) { - supportedLanguages.add('$lang-$country'); + if (country != null && country.isNotEmpty) { + final normalizedCountry = country.toUpperCase(); + if (lang == 'tl' && normalizedCountry == 'PH') { + supportedLanguages.add('fil-PH'); + } else { + supportedLanguages.add('$lang-$normalizedCountry'); + } } else { - supportedLanguages.add('en-US'); + final asrCode = languageManager.getAsrCodeByShortCode(lang); + if (asrCode != null) { + supportedLanguages.add(asrCode); + } else { + supportedLanguages.add('en-US'); + } } } } diff --git a/lib/modules/settings/controllers/settings_controller.dart b/lib/modules/settings/controllers/settings_controller.dart index ad328427c..a81b53f26 100644 --- a/lib/modules/settings/controllers/settings_controller.dart +++ b/lib/modules/settings/controllers/settings_controller.dart @@ -165,7 +165,13 @@ class SettingsController extends GetxController { final lang = matchedLocale.languageCode; final country = matchedLocale.countryCode; if (country != null && country.isNotEmpty) { - supportedLanguages.add('$lang-$country'); + final normalizedLang = lang.toLowerCase(); + final normalizedCountry = country.toUpperCase(); + if (normalizedLang == 'tl' && normalizedCountry == 'PH') { + supportedLanguages.add('fil-PH'); + } else { + supportedLanguages.add('$normalizedLang-$normalizedCountry'); + } } else { // 根据语言代码映射到对应的ASR代码 final asrCode = languageManager.getAsrCodeByShortCode(lang); @@ -182,19 +188,16 @@ class SettingsController extends GetxController { // 根据选择的语言值映射到ASR代码 final parts = languageModel.value.split('_'); if (parts.length == 2) { - final lang = parts[0]; + final lang = parts[0].toLowerCase(); final country = parts[1].toUpperCase(); if (lang == 'zh' && (country == 'HK' || country == 'TW' || country == 'CN')) { supportedLanguages.add('zh-$country'); + } else if (lang == 'tl' && country == 'PH') { + supportedLanguages.add('fil-PH'); } else { - final asrCode = languageManager.getAsrCodeByShortCode(lang); - if (asrCode != null) { - supportedLanguages.add(asrCode); - } else { - supportedLanguages.add('$lang-$country'); - } + supportedLanguages.add('$lang-$country'); } } } 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 cfe3c3461..a0ad63e1e 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 @@ -1547,6 +1547,7 @@ object AgentService : CoroutineScope { "fr-FR" -> "fr-FR-DeniseNeural" "es-ES" -> "es-ES-ElviraNeural" "pt-BR" -> "pt-BR-FranciscaNeural" + "pt-PT" -> "pt-PT-RaquelNeural" "it-IT" -> "it-IT-ElsaNeural" "de-DE" -> "de-DE-KatjaNeural" "ru-RU" -> "ru-RU-SvetlanaNeural" @@ -1563,10 +1564,20 @@ object AgentService : CoroutineScope { "nb-NO" -> "nb-NO-IselinNeural" "hr-HR" -> "hr-HR-GabrijelaNeural" "ca-ES" -> "ca-ES-JoanaNeural" + "bg-BG" -> "bg-BG-KalinaNeural" + "sk-SK" -> "sk-SK-ViktoriaNeural" + "sl-SI" -> "sl-SI-PetraNeural" + "lt-LT" -> "lt-LT-OnaNeural" + "lv-LV" -> "lv-LV-EveritaNeural" + "et-EE" -> "et-EE-AnuNeural" + "sr-RS" -> "sr-RS-SophieNeural" + "is-IS" -> "is-IS-GudrunNeural" // 阿拉伯语和非洲语言 "ar-EG" -> "ar-EG-SalmaNeural" + "ar-SA" -> "ar-SA-ZariyahNeural" "sw-KE" -> "sw-KE-ZuriNeural" + "fil-PH" -> "fil-PH-BlessicaNeural" else -> { Log.w(TAG, "未支持的语言代码: $asrCode,使用默认英语语音") 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 b75f9ede4..713c28723 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 @@ -1608,6 +1608,8 @@ private func jsonToString(_ json: [String: Any]) -> String? { return "es-ES-ElviraNeural" case "pt-BR": return "pt-BR-FranciscaNeural" + case "pt-PT": + return "pt-PT-RaquelNeural" case "it-IT": return "it-IT-ElsaNeural" case "de-DE": @@ -1640,12 +1642,32 @@ private func jsonToString(_ json: [String: Any]) -> String? { return "hr-HR-GabrijelaNeural" case "ca-ES": return "ca-ES-JoanaNeural" + case "bg-BG": + return "bg-BG-KalinaNeural" + case "sk-SK": + return "sk-SK-ViktoriaNeural" + case "sl-SI": + return "sl-SI-PetraNeural" + case "lt-LT": + return "lt-LT-OnaNeural" + case "lv-LV": + return "lv-LV-EveritaNeural" + case "et-EE": + return "et-EE-AnuNeural" + case "sr-RS": + return "sr-RS-SophieNeural" + case "is-IS": + return "is-IS-GudrunNeural" // 阿拉伯语和非洲语言 case "ar-EG": return "ar-EG-SalmaNeural" + case "ar-SA": + return "ar-SA-ZariyahNeural" case "sw-KE": return "sw-KE-ZuriNeural" + case "fil-PH": + return "fil-PH-BlessicaNeural" default: os_log("未支持的语言代码: %{public}@,使用默认英语语音", log: logger, type: .error, asrCode) From c8e7c6895cb5059dc30e17b1726dbcc5eeae398f Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Tue, 6 Jan 2026 10:50:05 +0800 Subject: [PATCH 11/27] =?UTF-8?q?fix:=20=E5=B0=86=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=88=B3=E8=BD=AC=E6=8D=A2=E4=B8=BA=E6=9C=AC=E5=9C=B0=E6=97=B6?= =?UTF-8?q?=E5=8C=BA=E5=B9=B6=E6=B7=BB=E5=8A=A0=E8=B0=83=E8=AF=95=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在AgentController和MessageModel中将时间戳转换为本地时区 在iOS和Android的ChatStorageHelper中添加调试日志以便追踪历史记录读取 --- lib/data/models/message_model.dart | 2 +- lib/modules/agent/controllers/agent_controller.dart | 2 +- .../com/yunqiinnovation/chat_storage/ChatStorageHelper.kt | 3 +++ .../chat_storage/Sources/chat_storage/ChatStorageHelper.swift | 1 + 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/data/models/message_model.dart b/lib/data/models/message_model.dart index e15c07314..c19fe9f81 100644 --- a/lib/data/models/message_model.dart +++ b/lib/data/models/message_model.dart @@ -34,7 +34,7 @@ class Message { sessionid: json['sessionid'] as String, // 会话ID isUser: json['isUser'] as bool, text: json['text'] as String, - timestamp: DateTime.parse(json['timestamp'] as String), + timestamp: DateTime.parse(json['timestamp'] as String).toLocal(), isRecognizing: json['isRecognizing'] as bool? ?? false, hasImage: json['hasImage'] as bool? ?? false, imagePath: json['imagePath'] as String?, diff --git a/lib/modules/agent/controllers/agent_controller.dart b/lib/modules/agent/controllers/agent_controller.dart index f4af0edf5..df79a7cbc 100644 --- a/lib/modules/agent/controllers/agent_controller.dart +++ b/lib/modules/agent/controllers/agent_controller.dart @@ -496,7 +496,7 @@ class AgentController extends GetxController with WidgetsBindingObserver { isUser: msg.sender == 'user', text: msg.message, meta: meta, - timestamp: DateTime.parse(msg.timestamp), + timestamp: DateTime.parse(msg.timestamp).toLocal(), hasImage: hasImage, imagePath: imagePath, ); diff --git a/local_plugins/chat_storage/android/src/main/kotlin/com/yunqiinnovation/chat_storage/ChatStorageHelper.kt b/local_plugins/chat_storage/android/src/main/kotlin/com/yunqiinnovation/chat_storage/ChatStorageHelper.kt index 15def6f51..2bee4b6e6 100644 --- a/local_plugins/chat_storage/android/src/main/kotlin/com/yunqiinnovation/chat_storage/ChatStorageHelper.kt +++ b/local_plugins/chat_storage/android/src/main/kotlin/com/yunqiinnovation/chat_storage/ChatStorageHelper.kt @@ -295,6 +295,9 @@ class ChatStorageHelper(context: Context) { val metadataIndex = cursor.getColumnIndex(ChatDatabaseHelper.COLUMN_METADATA) while (cursor.moveToNext()) { + val timestamp = cursor.getString(timestampIndex) // 👈 提前取出 timestamp + Log.d(TAG, "getMessages: 读取历史记录: $timestamp") // 👈 与 iOS 对齐的 log + val jsonObject = JSONObject().apply { put("id", cursor.getInt(idIndex)) put("agentId", cursor.getString(agentIdIndex)) diff --git a/local_plugins/chat_storage/ios/chat_storage/Sources/chat_storage/ChatStorageHelper.swift b/local_plugins/chat_storage/ios/chat_storage/Sources/chat_storage/ChatStorageHelper.swift index b79f17bed..9591dfe11 100644 --- a/local_plugins/chat_storage/ios/chat_storage/Sources/chat_storage/ChatStorageHelper.swift +++ b/local_plugins/chat_storage/ios/chat_storage/Sources/chat_storage/ChatStorageHelper.swift @@ -175,6 +175,7 @@ public class ChatStorageHelper { let date = Date(timeIntervalSince1970: TimeInterval(createdAt)) let formatter = ISO8601DateFormatter() let timestamp = formatter.string(from: date) + os_log("getMessages: 读取历史记录: %{public}@", log: logger, type: .info, timestamp) var messageDict: [String: Any] = [ "id": id, From b33b098f5ee18171648efac257a8d6d2ee85b285 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Tue, 6 Jan 2026 11:48:48 +0800 Subject: [PATCH 12/27] =?UTF-8?q?feat(agent=5Fview):=20=E4=BB=85=E5=9C=A8?= =?UTF-8?q?=E5=AE=98=E6=96=B9=E6=B8=A0=E9=81=93=E6=98=BE=E7=A4=BA=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E5=BC=80=E5=85=B3=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加条件判断,使工具开关选项仅在官方频道显示。移除未使用的导入以优化代码结构。 --- lib/modules/agent/views/agent_view.dart | 73 +++++++++++++------------ 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/lib/modules/agent/views/agent_view.dart b/lib/modules/agent/views/agent_view.dart index 03b237d94..6472a2805 100644 --- a/lib/modules/agent/views/agent_view.dart +++ b/lib/modules/agent/views/agent_view.dart @@ -4,16 +4,15 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:flutter_intro/flutter_intro.dart'; import 'package:get/get.dart'; -import 'package:haptic_feedback/haptic_feedback.dart'; import '../../../core/widgets/intro_overlay_builder.dart'; -import '../../../data/models/user_Info.dart'; +import '../../../data/models/channel_app_model.dart'; +import '../../../data/services/version_update_service.dart'; import '../controllers/agent_controller.dart'; import '../controllers/message_action_controller.dart'; import 'message_bubble.dart'; import '../widgets/full_screen_editor.dart'; import '../widgets/sound_bar_widget.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:intl/intl.dart'; class AgentView extends StatefulWidget { const AgentView({Key? key}) : super(key: key); @@ -64,6 +63,8 @@ class _AgentViewState extends State with WidgetsBindingObserver { final primaryColor = theme.primaryColor; final backgroundColor = theme.scaffoldBackgroundColor; final isDarkMode = Theme.of(context).brightness == Brightness.dark; + final isOfficialChannel = Get.isRegistered() && + VersionUpdateService.to.cachedChannel == UserChannel.OFFICIAL; return Scaffold( appBar: AppBar( @@ -199,38 +200,40 @@ class _AgentViewState extends State with WidgetsBindingObserver { ), color: isDarkMode ? Colors.grey[800] : Colors.white, itemBuilder: (context) => [ - // 显示工具开关选项 - PopupMenuItem( - child: Obx(() => Row( - children: [ - Icon( - controller.isShowToolInterruptEnabled.value - ? Icons.build_circle - : Icons.build_circle_outlined, - color: controller.isShowToolInterruptEnabled.value - ? primaryColor - : (isDarkMode ? Colors.grey[400] : Colors.grey), - size: 20.sp, - ), - SizedBox(width: 8.w), - Text( - //'ttsInterruptToggle'.tr, - "显示工具", - style: TextStyle(fontSize: 14.sp), - ), - const Spacer(), - Switch( - value: controller.isShowToolInterruptEnabled.value, - onChanged: (value) => - controller.toggleShowAIToolInterrupt(), - activeColor: primaryColor, - materialTapTargetSize: - MaterialTapTargetSize.shrinkWrap, - ), - ], - )), - onTap: () => controller.toggleTtsInterrupt(), - ), + if (isOfficialChannel) + PopupMenuItem( + child: Obx(() => Row( + children: [ + Icon( + controller.isShowToolInterruptEnabled.value + ? Icons.build_circle + : Icons.build_circle_outlined, + color: controller.isShowToolInterruptEnabled.value + ? primaryColor + : (isDarkMode + ? Colors.grey[400] + : Colors.grey), + size: 20.sp, + ), + SizedBox(width: 8.w), + Text( + "显示工具", + style: TextStyle(fontSize: 14.sp), + ), + const Spacer(), + Switch( + value: + controller.isShowToolInterruptEnabled.value, + onChanged: (value) => + controller.toggleShowAIToolInterrupt(), + activeColor: primaryColor, + materialTapTargetSize: + MaterialTapTargetSize.shrinkWrap, + ), + ], + )), + onTap: () => controller.toggleTtsInterrupt(), + ), // 播报打断开关选项 PopupMenuItem( From 3ffcaa09ffd1ac8d90cae617d9e09d9de5a60b8c Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Tue, 6 Jan 2026 12:08:42 +0800 Subject: [PATCH 13/27] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E5=BE=BD=E7=AB=A0=E8=AE=BE=E7=BD=AE=E5=B9=B6=E5=9C=A8?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E6=BF=80=E6=B4=BB=E6=97=B6=E9=87=8D=E7=BD=AE?= =?UTF-8?q?=E5=BE=BD=E7=AB=A0=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除SetReminderHandler中的通知徽章设置,避免重复显示 在AppDelegate中添加应用启动和激活时的徽章数重置逻辑 --- ios/Runner/AppDelegate.swift | 6 ++++++ .../chat_api/Sources/chat_api/SystemFunctionHandler.swift | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index e04182a8a..c89921208 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -7,9 +7,15 @@ import UIKit _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { + application.applicationIconBadgeNumber = 0 GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } + + override func applicationDidBecomeActive(_ application: UIApplication) { + application.applicationIconBadgeNumber = 0 + super.applicationDidBecomeActive(application) + } // 添加URL回调监听 override func application( diff --git a/local_plugins/chat_api/ios/chat_api/Sources/chat_api/SystemFunctionHandler.swift b/local_plugins/chat_api/ios/chat_api/Sources/chat_api/SystemFunctionHandler.swift index cc7613322..9112f82f8 100644 --- a/local_plugins/chat_api/ios/chat_api/Sources/chat_api/SystemFunctionHandler.swift +++ b/local_plugins/chat_api/ios/chat_api/Sources/chat_api/SystemFunctionHandler.swift @@ -823,7 +823,6 @@ private class SetReminderHandler: FunctionHandler { let notificationContent = UNMutableNotificationContent() notificationContent.title = title notificationContent.body = content - notificationContent.badge = 1 // 关键配置:闹钟级声音(突破静音,最大音量) notificationContent.sound = UNNotificationSound.criticalSoundNamed( From 2e9b8547fe3987584670422527b89fb7ca4f4234 Mon Sep 17 00:00:00 2001 From: fdp <1286779656@qq.com> Date: Tue, 6 Jan 2026 14:05:30 +0800 Subject: [PATCH 14/27] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=A2=91=E7=B9=81?= =?UTF-8?q?=E6=8C=89=E7=9D=80=E6=9D=BE=E5=BC=80=E5=A5=94=E6=BA=83=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../speech_impl/azure_asr_service.dart | 9 +++------ .../agent_service/lib/agent_service.dart | 18 ++++++++++-------- .../tools/AudioRecordingForegroundService.kt | 17 ++++++++++++++--- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/lib/data/services/speech_impl/azure_asr_service.dart b/lib/data/services/speech_impl/azure_asr_service.dart index e3d66e411..a196a5ddc 100644 --- a/lib/data/services/speech_impl/azure_asr_service.dart +++ b/lib/data/services/speech_impl/azure_asr_service.dart @@ -252,12 +252,9 @@ class AzureAsrService extends GetxService implements AsrService { /// - 若当前不在识别中,直接返回 true; /// - 调用成功后立即将内部状态置为 false(同时事件通道回调仍会再次校正)。 Future stopContinuousRecognition() async { - // 防抖判断:短时间内重复调用直接拦截 - final now = DateTime.now(); - if (_lastStopAt != null && now.difference(_lastStopAt!) < _debounce) { - return false; - } - _lastStopAt = now; + // 移除防抖判断,确保停止操作总是被执行 + // 这与 AgentService 的逻辑保持一致,防止“松开还在录”的问题 + _lastStopAt = DateTime.now(); if (!_isInitialized || !_isContinuousRecognitionActive) { return true; diff --git a/local_plugins/agent_service/lib/agent_service.dart b/local_plugins/agent_service/lib/agent_service.dart index 6d1017ae9..bccb5db71 100644 --- a/local_plugins/agent_service/lib/agent_service.dart +++ b/local_plugins/agent_service/lib/agent_service.dart @@ -258,11 +258,17 @@ class AgentService { if (_lastStartConversationAt != null && now.difference(_lastStartConversationAt!) < _conversationDebounce) { // 函数级注释:当在冷却时间内再次调用时,直接返回 false 表示此次调用被防抖拦截 + // 对于启动操作,如果被防抖拦截,意味着用户点击太快。 + // 返回 false 是正确的,因为我们确实没有启动新的会话。 return false; } _lastStartConversationAt = now; try { + // 在启动新对话前,确保之前的对话已完全停止 + // 这不仅可以清理状态,还能避免因快速切换导致的资源冲突 + await stopConversation(); + final bool result = await _channel.invokeMethod('startConversation', { 'mode': mode, }); @@ -328,14 +334,10 @@ class AgentService { /// 停止语音识别 /// 返回是否成功停止对话 static Future stopConversation() async { - // 防抖:短时间内重复点击直接忽略(冷却式防抖) - final now = DateTime.now(); - if (_lastStopConversationAt != null && - now.difference(_lastStopConversationAt!) < _conversationDebounce) { - // 函数级注释:当在冷却时间内再次调用时,直接返回 false 表示此次调用被防抖拦截 - return false; - } - _lastStopConversationAt = now; + // 移除防抖拦截! + // 停止操作是安全且必要的,不应该被拦截。 + // 即使频繁调用,Native 层也能处理(我们已经修复了 Native 层的并发问题)。 + _lastStopConversationAt = DateTime.now(); try { final bool result = await _channel.invokeMethod('stopConversation'); diff --git a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/tools/AudioRecordingForegroundService.kt b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/tools/AudioRecordingForegroundService.kt index 4b03f4ec3..0b1d1b1fb 100644 --- a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/tools/AudioRecordingForegroundService.kt +++ b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/tools/AudioRecordingForegroundService.kt @@ -23,6 +23,7 @@ class AudioRecordingForegroundService : Service() { private const val NOTIFICATION_ID = 1001 private const val CHANNEL_ID = "audio_recording_channel" private const val CHANNEL_NAME = "音频录制服务" + private const val ACTION_STOP = "com.yunqiinnovation.azure_speech.tools.STOP_SERVICE" /** * 启动前台服务 @@ -44,8 +45,9 @@ class AudioRecordingForegroundService : Service() { */ fun stopService(context: Context) { val intent = Intent(context, AudioRecordingForegroundService::class.java) - context.stopService(intent) - Log.d(TAG, "音频录制前台服务已停止") + intent.action = ACTION_STOP + context.startService(intent) + Log.d(TAG, "发送停止音频录制前台服务指令") } } @@ -56,12 +58,21 @@ class AudioRecordingForegroundService : Service() { } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { - Log.d(TAG, "AudioRecordingForegroundService onStartCommand") + Log.d(TAG, "AudioRecordingForegroundService onStartCommand action=${intent?.action}") // 创建前台通知 val notification = createNotification() + // 必须立即调用 startForeground 以满足 Android 8.0+ 的要求 startForeground(NOTIFICATION_ID, notification) + // 检查是否是停止指令 + if (intent?.action == ACTION_STOP) { + Log.d(TAG, "收到停止指令,停止服务") + stopForeground(true) + stopSelf() + return START_NOT_STICKY + } + // 返回START_STICKY确保服务被系统杀死后会重启 return START_STICKY } From 4b2c9c2f3bf5b7eebf5ac2cfd67dda1d46306543 Mon Sep 17 00:00:00 2001 From: fdp <1286779656@qq.com> Date: Tue, 6 Jan 2026 14:55:07 +0800 Subject: [PATCH 15/27] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=89=E4=B8=AA?= =?UTF-8?q?=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agent_service/AgentService.kt | 58 ++++++++++--------- 1 file changed, 30 insertions(+), 28 deletions(-) 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 dc68c6d7b..9b4921350 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 @@ -155,6 +155,7 @@ object AgentService : CoroutineScope { //是否保留最终结果 private var isKeepResult = true; // 识别结果 + private var currentRecognitionResult = "" private var recognitionResult = "" private var pendingProcessJob: Job? = null @@ -633,26 +634,7 @@ object AgentService : CoroutineScope { return false } Log.d("TAG", "开始语音识别startRecognition?") - stopRecognition() - - - // if (isRecognitionActive&&audioSourceType==AzureAsrHelper.AudioSourceType.MICROPHONE){ - // Log.d(TAG, "开始语音识别stopRecognition") - // // BleService.closeCodec() - // stopRecognition() - - // } - // if((isExternalActive&&audioSourceType==AzureAsrHelper.AudioSourceType.MICROPHONE)||!isRecognitionActive) - // { - // Log.d(TAG, "开始语音识别BleService.openEncoder") - // BleService.openEncoder() - - // } - // if(isRecognitionActive) - // { - // Log.d(TAG, "开始语音识别azureAsrHelper?.startContinuousRecognition(audioSourceType)") - // return true - // } + // 检查录音权限 if (!isExternalActive && !checkRecordAudioPermission()) { Log.e(TAG, "需要录音权限") @@ -712,7 +694,9 @@ object AgentService : CoroutineScope { if(currsessionAsrId.isEmpty()) { currsessionAsrId = sessionid } + var text = recognitionResult + recognizing + currentRecognitionResult = text sendEvent( "recognizing", mapOf( "sessionid" to currsessionAsrId, @@ -755,11 +739,19 @@ object AgentService : CoroutineScope { if (currsessionAsrId.isEmpty()) { currsessionAsrId = sessionid } + var text = result - if(recognitionResult.isEmpty()) { + if(text.isNotEmpty()) + { text = text.replace(Regex("^[,。?、!, . ? !]+"), "") + recognitionResult += text + } + else{ + recognitionResult= currentRecognitionResult + currentRecognitionResult= "" } - recognitionResult += text + if (recognitionResult.isNotEmpty()) + { if (currentRecognitionMode == "push_to_talk") { //按住说话 sendEvent( "recognizing", mapOf( @@ -779,21 +771,26 @@ object AgentService : CoroutineScope { ) pendingProcessJob = launch { delay(1500) - if (recognitionResult.isNotEmpty()) { - sendEvent( + sendEvent( "recognition_result", mapOf( "sessionid" to currsessionAsrId, "text" to recognitionResult, "language" to detectedLanguage ) ) - processWithChatApi(currsessionAsrId, recognitionResult) - recognitionResult = "" + recognitionResult = "" currsessionAsrId = "" - } + + processWithChatApi(currsessionAsrId, recognitionResult) + } } } + else + { + Log.d(TAG, "liwei-------- onResult: $sessionid $result $currentRecognitionMode 空字符串") + } + // } _hasSpeechDetected.set(false) restartIdleCheck() @@ -805,6 +802,7 @@ object AgentService : CoroutineScope { sendEvent("recognition_started", mapOf("sessionid" to sessionid, "status" to "started")) // 使用模式感知的空闲检测启动方法 recognitionResult = "" + currentRecognitionResult = "" currsessionAsrId = "" pendingProcessJob?.cancel() audioPlayer?.playAudio(R.raw.start) @@ -815,6 +813,7 @@ object AgentService : CoroutineScope { override fun onSessionStopped(sessionid:String) { Log.d(TAG, "liwei-------- onSessionStopped: $sessionid $currsessionAsrId $recognitionResult $currentRecognitionMode") if (currentRecognitionMode == "push_to_talk") { //按住说话 + if (recognitionResult.isNotEmpty()){ sendEvent( "recognition_result", mapOf( @@ -824,6 +823,9 @@ object AgentService : CoroutineScope { ) processWithChatApi(currsessionAsrId, recognitionResult) } + else{ + Log.d(TAG, "liwei-------- onSessionStopped: $sessionid $currsessionAsrId $recognitionResult $currentRecognitionMode 空字符串") + } sendEvent("recognition_stopped", mapOf("sessionid" to currsessionAsrId, "status" to "stopped")) }else{ sendEvent("recognition_stopped", mapOf("sessionid" to sessionid, "status" to "stopped")) @@ -908,7 +910,7 @@ object AgentService : CoroutineScope { fun interruptCurrentResponse() { if (isAiStreaming || isTtsSpeaking) { val startTime = System.currentTimeMillis() - + stopRecognition() // 并行执行停止操作,加快响应速度 stopTts() stopAiStream() From 099d0cc6e98a103e0d578c9c78c7ee52f6f94c39 Mon Sep 17 00:00:00 2001 From: fdp <1286779656@qq.com> Date: Tue, 6 Jan 2026 15:08:06 +0800 Subject: [PATCH 16/27] 2 --- .../agent_service/AgentService.kt | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) 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 9b4921350..ede19fb21 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 @@ -747,7 +747,7 @@ object AgentService : CoroutineScope { recognitionResult += text } else{ - recognitionResult= currentRecognitionResult + recognitionResult+= currentRecognitionResult currentRecognitionResult= "" } if (recognitionResult.isNotEmpty()) @@ -814,18 +814,18 @@ object AgentService : CoroutineScope { Log.d(TAG, "liwei-------- onSessionStopped: $sessionid $currsessionAsrId $recognitionResult $currentRecognitionMode") if (currentRecognitionMode == "push_to_talk") { //按住说话 - if (recognitionResult.isNotEmpty()){ - sendEvent( - "recognition_result", mapOf( - "sessionid" to currsessionAsrId, - "text" to recognitionResult - ) - ) - processWithChatApi(currsessionAsrId, recognitionResult) - } - else{ - Log.d(TAG, "liwei-------- onSessionStopped: $sessionid $currsessionAsrId $recognitionResult $currentRecognitionMode 空字符串") + if (recognitionResult.isEmpty()){ + recognitionResult+= currentRecognitionResult + currentRecognitionResult = "" } + sendEvent( + "recognition_result", mapOf( + "sessionid" to currsessionAsrId, + "text" to recognitionResult + ) + ) + processWithChatApi(currsessionAsrId, recognitionResult) + sendEvent("recognition_stopped", mapOf("sessionid" to currsessionAsrId, "status" to "stopped")) }else{ sendEvent("recognition_stopped", mapOf("sessionid" to sessionid, "status" to "stopped")) From 13205fb3d4523734d567c7816391909be060d3dc Mon Sep 17 00:00:00 2001 From: fdp <1286779656@qq.com> Date: Tue, 6 Jan 2026 15:21:40 +0800 Subject: [PATCH 17/27] 3 --- .../kotlin/com/yunqiinnovation/agent_service/AgentService.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 ede19fb21..4068b7255 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 @@ -815,9 +815,12 @@ object AgentService : CoroutineScope { if (currentRecognitionMode == "push_to_talk") { //按住说话 if (recognitionResult.isEmpty()){ + Log.d(TAG, "liwei-------- onSessionStopped:currentRecognitionResult $currentRecognitionResult") recognitionResult+= currentRecognitionResult currentRecognitionResult = "" } + if(recognitionResult.isNotEmpty()) + { sendEvent( "recognition_result", mapOf( "sessionid" to currsessionAsrId, @@ -825,7 +828,7 @@ object AgentService : CoroutineScope { ) ) processWithChatApi(currsessionAsrId, recognitionResult) - + } sendEvent("recognition_stopped", mapOf("sessionid" to currsessionAsrId, "status" to "stopped")) }else{ sendEvent("recognition_stopped", mapOf("sessionid" to sessionid, "status" to "stopped")) From 1770eb89da09c7486b74d79b60b47f83ebdf0ca3 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Tue, 6 Jan 2026 16:08:08 +0800 Subject: [PATCH 18/27] =?UTF-8?q?style(agent=5Fservice):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=BB=A3=E7=A0=81=E7=BC=A9=E8=BF=9B=E5=92=8C=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agent_service/AgentService.kt | 72 +++++++++---------- 1 file changed, 36 insertions(+), 36 deletions(-) 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 4068b7255..fedf86d19 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 @@ -741,8 +741,8 @@ object AgentService : CoroutineScope { } var text = result - if(text.isNotEmpty()) - { + if(text.isNotEmpty()) + { text = text.replace(Regex("^[,。?、!, . ? !]+"), "") recognitionResult += text } @@ -752,45 +752,45 @@ object AgentService : CoroutineScope { } if (recognitionResult.isNotEmpty()) { - if (currentRecognitionMode == "push_to_talk") { //按住说话 - sendEvent( - "recognizing", mapOf( - "sessionid" to currsessionAsrId, - "text" to recognitionResult, - "language" to detectedLanguage + if (currentRecognitionMode == "push_to_talk") { //按住说话 + sendEvent( + "recognizing", mapOf( + "sessionid" to currsessionAsrId, + "text" to recognitionResult, + "language" to detectedLanguage + ) ) - ) - }else{ - pendingProcessJob?.cancel() - sendEvent( - "recognizing", mapOf( - "sessionid" to currsessionAsrId, - "text" to recognitionResult, - "language" to detectedLanguage + }else{ + pendingProcessJob?.cancel() + sendEvent( + "recognizing", mapOf( + "sessionid" to currsessionAsrId, + "text" to recognitionResult, + "language" to detectedLanguage + ) ) - ) - pendingProcessJob = launch { - delay(1500) - sendEvent( - "recognition_result", mapOf( - "sessionid" to currsessionAsrId, - "text" to recognitionResult, - "language" to detectedLanguage + pendingProcessJob = launch { + delay(1500) + sendEvent( + "recognition_result", mapOf( + "sessionid" to currsessionAsrId, + "text" to recognitionResult, + "language" to detectedLanguage + ) ) - ) - recognitionResult = "" - currsessionAsrId = "" - - processWithChatApi(currsessionAsrId, recognitionResult) - + recognitionResult = "" + currsessionAsrId = "" + + processWithChatApi(currsessionAsrId, recognitionResult) + + } } } - } - else - { - Log.d(TAG, "liwei-------- onResult: $sessionid $result $currentRecognitionMode 空字符串") - } - // } + else + { + Log.d(TAG, "liwei-------- onResult: $sessionid $result $currentRecognitionMode 空字符串") + } + } _hasSpeechDetected.set(false) restartIdleCheck() From d6ad8869447e09ca7ab5da6986e069266dcf7f06 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Tue, 6 Jan 2026 16:54:41 +0800 Subject: [PATCH 19/27] =?UTF-8?q?fix(login):=20=E4=BF=AE=E5=A4=8D=E5=90=84?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=96=B9=E5=BC=8FisLoading=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E8=BF=87=E6=97=A9=E7=BB=93=E6=9D=9F=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../login/controllers/login_controller.dart | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/modules/login/controllers/login_controller.dart b/lib/modules/login/controllers/login_controller.dart index ff506e4a9..6a2f51a31 100644 --- a/lib/modules/login/controllers/login_controller.dart +++ b/lib/modules/login/controllers/login_controller.dart @@ -533,7 +533,7 @@ class LoginController extends GetxController { ); break; } - requestLogin({ + await requestLogin({ "mail": contactController.text, "phone": "", "stype": loginType, @@ -558,7 +558,7 @@ class LoginController extends GetxController { ); break; } - requestLogin({ + await requestLogin({ "mail": "", "phone": selectedCountryCode + contactController.text, "stype": loginType, @@ -587,7 +587,7 @@ class LoginController extends GetxController { //SettingsController().avatar = Google().email; // 验证成功,跳转到配对页面 - requestLogin({ + await requestLogin({ "mail": facebook.email, "phone": "", "stype": loginType, @@ -616,7 +616,7 @@ class LoginController extends GetxController { // SettingsController().userName = Google().displayName!; // //SettingsController().avatar = Google().email; // SettingsController().userId = Google().id!; - requestLogin({ + await requestLogin({ "mail": google.email, "phone": "", "stype": loginType, @@ -650,7 +650,7 @@ class LoginController extends GetxController { // SettingsController().userName = FlWX().nickname; // SettingsController().avatar = FlWX().headimgurl; // SettingsController().userId = FlWX().openid; - requestLogin({ + await requestLogin({ "mail": "", "phone": "", "stype": loginType, @@ -690,7 +690,7 @@ class LoginController extends GetxController { Logger().d("发送登录数据: $loginData"); // 直接调用现有的requestLogin方法 - requestLogin(loginData); + await requestLogin(loginData); } else { Logger().e("Apple登录失败"); Get.snackbar( @@ -705,7 +705,7 @@ class LoginController extends GetxController { } case 6: //游客登录 { - requestLogin({ + await requestLogin({ "mail": "", "phone": "", "stype": loginType, From cf0ff772602af031fd6b377f0237475402ea38e5 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Wed, 7 Jan 2026 14:36:54 +0800 Subject: [PATCH 20/27] =?UTF-8?q?feat(azure=5Fspeech):=20=E5=85=AC?= =?UTF-8?q?=E5=BC=80setSpeechParams=E6=96=B9=E6=B3=95=E5=B9=B6=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E9=BB=98=E8=AE=A4=E8=AF=AD=E9=9F=B3=E5=8F=82=E6=95=B0?= =?UTF-8?q?=20fix(agent=5Fservice):=E5=B0=86agent=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E7=9A=84tts=E6=8F=90=E9=AB=9825%=E7=9A=84=E6=92=AD=E6=8A=A5?= =?UTF-8?q?=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将iOS和Android平台的setSpeechParams方法从private改为public 在agent_service中调用setSpeechParams设置默认语音参数 添加Flutter插件接口支持设置语音参数 --- .../yunqiinnovation/agent_service/AgentService.kt | 2 ++ .../Sources/agent_service/AgentServiceImpl.swift | 2 ++ .../azure_speech/AzureSpeechPlugin.kt | 10 +++++++++- .../yunqiinnovation/azure_speech/AzureTtsHelper.kt | 4 ++-- .../Sources/azure_speech/AzureSpeechPlugin.swift | 14 ++++++++++++-- .../Sources/azure_speech/AzureTtsHelper.swift | 2 +- 6 files changed, 28 insertions(+), 6 deletions(-) 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 fedf86d19..24d28b51f 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 @@ -401,6 +401,7 @@ object AgentService : CoroutineScope { if (!success) { Log.e(TAG, "Bytedance TTS服务初始化失败") } else { + ttsService?.setSpeechParams(rate = 25, pitch = 0, volume = 100) val voiceName = getTtsVoiceNameByAsrCode(ttsLanguage) if (voiceName.isNotEmpty()) { ttsService?.setVoice(voiceName) @@ -1394,6 +1395,7 @@ object AgentService : CoroutineScope { restartIdleCheck() // 状态变化,重启检测 // 直接调用TTS,无需协程包装 + ttsService?.setSpeechParams(rate = 25, pitch = 0, volume = 100) ttsService?.speakOnce(text) } 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 7c67417b2..6d1553ee7 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 @@ -343,6 +343,7 @@ class AgentServiceImpl: NSObject { } _ = azureTtsHelper?.setVoice(getTtsVoiceNameByAsrCode(primaryLanguage)) + _ = azureTtsHelper?.setSpeechParams(rate: 25, pitch: 0, volume: 100) return true } @@ -604,6 +605,7 @@ class AgentServiceImpl: NSObject { return false } + _ = azureTtsHelper?.setSpeechParams(rate: 25, pitch: 0, volume: 100) return azureTtsHelper?.speakOnce(sessionid:sessionid,text) ?? false } 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 a2d922b2e..abc20de31 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 @@ -668,6 +668,7 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin { "initialize" -> { val subscriptionKey = call.argument("subscriptionKey") ?: "" val region = call.argument("region") ?: "" + val language = call.argument("language") ?: "zh-CN" val useCustomAudioOutput = call.argument("useCustomAudioOutput") ?: false @@ -677,7 +678,7 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin { ttsAppId = "", // Azure TTS不需要appId ttsAppToken = subscriptionKey, ttsResource = region, - language = "zh-CN" + language = language ) // 如果初始化成功且需要使用自定义音频输出,则设置自定义音频播放器 @@ -703,6 +704,13 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin { } } + "setSpeechParams" -> { + val rate = call.argument("rate") ?: 0 + val pitch = call.argument("pitch") ?: 0 + val volume = call.argument("volume") ?: 100 + result.success(azureTtsHelper.setSpeechParams(rate = rate, pitch = pitch, volume = volume)) + } + "setVoice" -> { val voiceName = call.argument("voiceName") ?: return result.error("INVALID_ARGUMENTS", "语音名称不能为空", null) diff --git a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureTtsHelper.kt b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureTtsHelper.kt index 4b47782aa..05223bd8d 100644 --- a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureTtsHelper.kt +++ b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureTtsHelper.kt @@ -437,7 +437,7 @@ class AzureTtsHelper(private val context: Context) : ITtsService { /** * 设置语音参数 */ - private fun setSpeechParams(rate: Int = 0, pitch: Int = 0, volume: Int = 100): Boolean { + fun setSpeechParams(rate: Int = 0, pitch: Int = 0, volume: Int = 100): Boolean { if (!isInitialized) return false try { @@ -762,4 +762,4 @@ class AzureTtsHelper(private val context: Context) : ITtsService { * 是否正在播放 */ fun isSpeaking(): Boolean = isSpeaking -} \ No newline at end of file +} 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 2484ab79e..a3c9cc9b3 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 @@ -631,6 +631,18 @@ private func sendAstEvent(_ event: [String: Any]) { let success = azureTtsHelper.setVoice(voiceName) result(success) + + case "setSpeechParams": + guard let args = call.arguments as? [String: Any] else { + result(FlutterError(code: "INVALID_ARGUMENTS", message: "参数不能为空", details: nil)) + return + } + + let rate = args["rate"] as? Int ?? 0 + let pitch = args["pitch"] as? Int ?? 0 + let volume = args["volume"] as? Int ?? 100 + let success = azureTtsHelper.setSpeechParams(rate: rate, pitch: pitch, volume: volume) + result(success) case "speakText": guard let args = call.arguments as? [String: Any], @@ -1366,5 +1378,3 @@ private class AsrCallbackWrapper: AzureAsrHelper.ContinuousRecognizeCallback { ]) } } - - diff --git a/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureTtsHelper.swift b/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureTtsHelper.swift index 9a0b5f639..9e7bb5abc 100644 --- a/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureTtsHelper.swift +++ b/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/AzureTtsHelper.swift @@ -645,7 +645,7 @@ public class AzureTtsHelper: NSObject, ITtsService { /** * 设置语音参数 */ - private func setSpeechParams(rate: Int = 0, pitch: Int = 0, volume: Int = 100) -> Bool { + public func setSpeechParams(rate: Int = 0, pitch: Int = 0, volume: Int = 100) -> Bool { currentRate = rate >= 0 ? "+\(rate)%" : "\(rate)%" currentPitch = pitch >= 0 ? "+\(pitch)%" : "\(pitch)%" currentVolume = "\(min(max(volume, 0), 100))%" From 8f76ede475d6a53b3cf730260da84cdb8203e373 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Wed, 7 Jan 2026 17:02:37 +0800 Subject: [PATCH 21/27] =?UTF-8?q?feat(tts):=20=E6=96=B0=E5=A2=9ETTS?= =?UTF-8?q?=E8=AF=AD=E9=80=9F=E8=B0=83=E8=8A=82=E5=8A=9F=E8=83=BD=E5=B9=B6?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9A=E8=AF=AD=E8=A8=80=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为TTS功能添加语速调节支持,包括: 1. 新增语速设置接口和实现 2. 添加多语言翻译文本 3. 实现语速设置持久化存储 4. 在UI中添加语速调节对话框 5. 支持Android/iOS平台语速设置同步 --- lib/core/translations/language/ar_sa.dart | 2 + lib/core/translations/language/bg_bg.dart | 2 + lib/core/translations/language/cs_cz.dart | 2 + lib/core/translations/language/da_dk.dart | 2 + lib/core/translations/language/de_de.dart | 2 + lib/core/translations/language/el_gr.dart | 2 + lib/core/translations/language/en_us.dart | 2 + lib/core/translations/language/es_es.dart | 2 + lib/core/translations/language/et_ee.dart | 2 + lib/core/translations/language/fa_ir.dart | 2 + lib/core/translations/language/fi_fi.dart | 2 + lib/core/translations/language/fr_fr.dart | 2 + lib/core/translations/language/hi_in.dart | 2 + lib/core/translations/language/hr_hr.dart | 2 + lib/core/translations/language/hu_hu.dart | 2 + lib/core/translations/language/id_id.dart | 2 + lib/core/translations/language/is_is.dart | 2 + lib/core/translations/language/it_it.dart | 2 + lib/core/translations/language/ja_jp.dart | 2 + lib/core/translations/language/ko_kr.dart | 2 + lib/core/translations/language/lt_lt.dart | 2 + lib/core/translations/language/lv_lv.dart | 2 + lib/core/translations/language/ms_my.dart | 2 + lib/core/translations/language/nb_no.dart | 2 + lib/core/translations/language/nl_nl.dart | 2 + lib/core/translations/language/pl_pl.dart | 2 + lib/core/translations/language/pt_pt.dart | 2 + lib/core/translations/language/ro_ro.dart | 2 + lib/core/translations/language/ru_ru.dart | 2 + lib/core/translations/language/sk_sk.dart | 2 + lib/core/translations/language/sl_si.dart | 2 + lib/core/translations/language/sr_rs.dart | 2 + lib/core/translations/language/sv_se.dart | 2 + lib/core/translations/language/th_th.dart | 2 + lib/core/translations/language/tl_ph.dart | 2 + lib/core/translations/language/tr_tr.dart | 2 + lib/core/translations/language/uk_ua.dart | 2 + lib/core/translations/language/vi_vn.dart | 2 + lib/core/translations/language/zh_cn.dart | 2 + lib/core/translations/language/zh_hk.dart | 2 + lib/core/translations/language/zh_tw.dart | 2 + .../agent/controllers/agent_controller.dart | 49 ++++++++ lib/modules/agent/views/agent_view.dart | 118 +++++++++++++++--- .../agent_service/AgentService.kt | 48 ++++++- .../agent_service/AgentServicePlugin.kt | 17 ++- .../agent_service/AgentServiceImpl.swift | 28 ++++- .../agent_service/AgentServicePlugin.swift | 8 ++ .../agent_service/lib/agent_service.dart | 15 ++- 48 files changed, 341 insertions(+), 24 deletions(-) diff --git a/lib/core/translations/language/ar_sa.dart b/lib/core/translations/language/ar_sa.dart index e0042d85f..9ce3ca106 100644 --- a/lib/core/translations/language/ar_sa.dart +++ b/lib/core/translations/language/ar_sa.dart @@ -718,6 +718,8 @@ const Map arSA = { "Lily": "Lily", "clearChatHistory": "مسح سجل الدردشة", "online": "متصل", + "ttsSpeed": "سرعة الكلام", + "ttsSpeedDefaultHint": "الإعداد الافتراضي +25٪", "inputMessage": "أدخل رسالة...", "imListening": "أنا أستمع...", "canStartTalking": "يمكنك بدء التحدث", diff --git a/lib/core/translations/language/bg_bg.dart b/lib/core/translations/language/bg_bg.dart index 02e1ce8eb..e8b6a3699 100644 --- a/lib/core/translations/language/bg_bg.dart +++ b/lib/core/translations/language/bg_bg.dart @@ -731,6 +731,8 @@ const Map bgBG = { "Lily": "Lily", "clearChatHistory": "Изчисти историята на чата", "online": "Онлайн", + "ttsSpeed": "Скорост на речта", + "ttsSpeedDefaultHint": "По подразбиране +25%", "inputMessage": "Въведете съобщение...", "imListening": "Слушам...", "canStartTalking": "Можете да започнете да говорите", diff --git a/lib/core/translations/language/cs_cz.dart b/lib/core/translations/language/cs_cz.dart index ce5ea20bc..1d5cac588 100644 --- a/lib/core/translations/language/cs_cz.dart +++ b/lib/core/translations/language/cs_cz.dart @@ -721,6 +721,8 @@ const Map csCZ = { "Lily": "Lily", "clearChatHistory": "Vymazat historii chatu", "online": "Online", + "ttsSpeed": "Rychlost řeči", + "ttsSpeedDefaultHint": "Výchozí +25 %", "inputMessage": "Zadejte zprávu...", "imListening": "Poslouchám...", "canStartTalking": "Můžete začít mluvit", diff --git a/lib/core/translations/language/da_dk.dart b/lib/core/translations/language/da_dk.dart index 16a2021b3..efd0010fe 100644 --- a/lib/core/translations/language/da_dk.dart +++ b/lib/core/translations/language/da_dk.dart @@ -726,6 +726,8 @@ const Map daDK = { "Lily": "Lily", "clearChatHistory": "Ryd chathistorik", "online": "Online", + "ttsSpeed": "Talefart", + "ttsSpeedDefaultHint": "Standard +25%", "inputMessage": "Indtast besked...", "imListening": "Lytter...", "canStartTalking": "Du kan begynde at tale", diff --git a/lib/core/translations/language/de_de.dart b/lib/core/translations/language/de_de.dart index d303138e1..99afb8e0d 100644 --- a/lib/core/translations/language/de_de.dart +++ b/lib/core/translations/language/de_de.dart @@ -735,6 +735,8 @@ const Map deDE = { "Lily": "Lily", "clearChatHistory": "Chat-Verlauf löschen", "online": "Online", + "ttsSpeed": "Sprachgeschwindigkeit", + "ttsSpeedDefaultHint": "Standard +25 %", "inputMessage": "Nachricht eingeben...", "imListening": "Ich höre zu...", "canStartTalking": "Sie können anfangen zu sprechen", diff --git a/lib/core/translations/language/el_gr.dart b/lib/core/translations/language/el_gr.dart index 5e3c95e20..24c3ca033 100644 --- a/lib/core/translations/language/el_gr.dart +++ b/lib/core/translations/language/el_gr.dart @@ -740,6 +740,8 @@ const Map elGR = { "Lily": "Lily", "clearChatHistory": "Εκκαθάριση ιστορικού συνομιλίας", "online": "Σε σύνδεση", + "ttsSpeed": "Ταχύτητα ομιλίας", + "ttsSpeedDefaultHint": "Προεπιλογή +25%", "inputMessage": "Εισάγετε μήνυμα...", "imListening": "Ακούω...", "canStartTalking": "Μπορείτε να αρχίσετε να μιλάτε", diff --git a/lib/core/translations/language/en_us.dart b/lib/core/translations/language/en_us.dart index 13a914ebb..2e340c301 100644 --- a/lib/core/translations/language/en_us.dart +++ b/lib/core/translations/language/en_us.dart @@ -722,6 +722,8 @@ const Map enUS = { "Lily": "Lily", "clearChatHistory": "Clear Chat History", "online": "Online", + "ttsSpeed": "Speech speed", + "ttsSpeedDefaultHint": "Default +25%", "inputMessage": "Type a message...", "imListening": "Listening...", "canStartTalking": "You may start speaking", diff --git a/lib/core/translations/language/es_es.dart b/lib/core/translations/language/es_es.dart index 102fb786f..3bac21821 100644 --- a/lib/core/translations/language/es_es.dart +++ b/lib/core/translations/language/es_es.dart @@ -725,6 +725,8 @@ const Map esES = { "Lily": "Lily", "clearChatHistory": "Limpiar historial de chat", "online": "En línea", + "ttsSpeed": "Velocidad de voz", + "ttsSpeedDefaultHint": "Predeterminado +25%", "inputMessage": "Ingresa mensaje...", "imListening": "Estoy escuchando...", "canStartTalking": "Puedes empezar a hablar", diff --git a/lib/core/translations/language/et_ee.dart b/lib/core/translations/language/et_ee.dart index c569c3d2e..56923f71c 100644 --- a/lib/core/translations/language/et_ee.dart +++ b/lib/core/translations/language/et_ee.dart @@ -718,6 +718,8 @@ const Map etEE = { "Lily": "Lily", "clearChatHistory": "Tühjenda vestluse ajalugu", "online": "Võrgus", + "ttsSpeed": "Kõnekiirus", + "ttsSpeedDefaultHint": "Vaikimisi +25%", "inputMessage": "Sisesta sõnum...", "imListening": "Kuulan...", "canStartTalking": "Võid hakata rääkima", diff --git a/lib/core/translations/language/fa_ir.dart b/lib/core/translations/language/fa_ir.dart index d9ba2fa8d..d59fa840b 100644 --- a/lib/core/translations/language/fa_ir.dart +++ b/lib/core/translations/language/fa_ir.dart @@ -720,6 +720,8 @@ const Map faIR = { "Lily": "Lily", "clearChatHistory": "پاک کردن تاریخچه چت", "online": "آنلاین", + "ttsSpeed": "سرعت گفتار", + "ttsSpeedDefaultHint": "پیش‌فرض +25٪", "inputMessage": "پیامی تایپ کنید...", "imListening": "در حال شنیدن...", "canStartTalking": "می‌توانید شروع به صحبت کنید", diff --git a/lib/core/translations/language/fi_fi.dart b/lib/core/translations/language/fi_fi.dart index e69482122..059654e55 100644 --- a/lib/core/translations/language/fi_fi.dart +++ b/lib/core/translations/language/fi_fi.dart @@ -725,6 +725,8 @@ const Map fiFI = { "Lily": "Lily", "clearChatHistory": "Tyhjennä keskusteluhistoria", "online": "Online", + "ttsSpeed": "Puhenopeus", + "ttsSpeedDefaultHint": "Oletus +25 %", "inputMessage": "Kirjoita viesti...", "imListening": "Kuuntelen...", "canStartTalking": "Voit aloittaa puhumisen", diff --git a/lib/core/translations/language/fr_fr.dart b/lib/core/translations/language/fr_fr.dart index 49086705a..8cb7dd6ae 100644 --- a/lib/core/translations/language/fr_fr.dart +++ b/lib/core/translations/language/fr_fr.dart @@ -727,6 +727,8 @@ const Map frFR = { "Lily": "Lily", "clearChatHistory": "Effacer l'historique de chat", "online": "En ligne", + "ttsSpeed": "Vitesse de la voix", + "ttsSpeedDefaultHint": "Par défaut +25%", "inputMessage": "Saisir un message...", "imListening": "J'écoute...", "canStartTalking": "Vous pouvez commencer à parler", diff --git a/lib/core/translations/language/hi_in.dart b/lib/core/translations/language/hi_in.dart index 2f53fc831..8ada8fef2 100644 --- a/lib/core/translations/language/hi_in.dart +++ b/lib/core/translations/language/hi_in.dart @@ -721,6 +721,8 @@ const Map hiIN = { "Lily": "Lily", "clearChatHistory": "चैट इतिहास साफ़ करें", "online": "ऑनलाइन", + "ttsSpeed": "आवाज़ की गति", + "ttsSpeedDefaultHint": "डिफ़ॉल्ट +25%", "inputMessage": "संदेश दर्ज करें...", "imListening": "सुन रहा हूँ...", "canStartTalking": "आप बात करना शुरू कर सकते हैं", diff --git a/lib/core/translations/language/hr_hr.dart b/lib/core/translations/language/hr_hr.dart index 05def5efe..3dd043490 100644 --- a/lib/core/translations/language/hr_hr.dart +++ b/lib/core/translations/language/hr_hr.dart @@ -726,6 +726,8 @@ const Map hrHR = { "Lily": "Lily", "clearChatHistory": "Obriši povijest razgovora", "online": "Na mreži", + "ttsSpeed": "Brzina govora", + "ttsSpeedDefaultHint": "Zadano +25%", "inputMessage": "Unesite poruku...", "imListening": "Slušam...", "canStartTalking": "Možete početi govoriti", diff --git a/lib/core/translations/language/hu_hu.dart b/lib/core/translations/language/hu_hu.dart index 5eaf7e422..df31ee0b4 100644 --- a/lib/core/translations/language/hu_hu.dart +++ b/lib/core/translations/language/hu_hu.dart @@ -727,6 +727,8 @@ const Map huHU = { "Lily": "Lily", "clearChatHistory": "Csevegési előzmények törlése", "online": "Online", + "ttsSpeed": "Beszédsebesség", + "ttsSpeedDefaultHint": "Alapértelmezett +25%", "inputMessage": "Üzenet beírása...", "imListening": "Hallgatom...", "canStartTalking": "Elkezdhet beszélni", diff --git a/lib/core/translations/language/id_id.dart b/lib/core/translations/language/id_id.dart index d3199b9c9..fc3aebc32 100644 --- a/lib/core/translations/language/id_id.dart +++ b/lib/core/translations/language/id_id.dart @@ -721,6 +721,8 @@ const Map idID = { "Lily": "Lily", "clearChatHistory": "Hapus Riwayat Obrolan", "online": "Online", + "ttsSpeed": "Kecepatan suara", + "ttsSpeedDefaultHint": "Bawaan +25%", "inputMessage": "Masukkan pesan...", "imListening": "Mendengarkan...", "canStartTalking": "Anda bisa mulai berbicara", diff --git a/lib/core/translations/language/is_is.dart b/lib/core/translations/language/is_is.dart index dee55b3ae..8066513bf 100644 --- a/lib/core/translations/language/is_is.dart +++ b/lib/core/translations/language/is_is.dart @@ -723,6 +723,8 @@ const Map isIS = { "Lily": "Lily", "clearChatHistory": "Hreinsa spjallsögu", "online": "Á netinu", + "ttsSpeed": "Talhraði", + "ttsSpeedDefaultHint": "Sjálfgefið +25%", "inputMessage": "Sláðu inn skilaboð...", "imListening": "Hlusta...", "canStartTalking": "Þú getur byrjað að tala", diff --git a/lib/core/translations/language/it_it.dart b/lib/core/translations/language/it_it.dart index 69400531d..37530321c 100644 --- a/lib/core/translations/language/it_it.dart +++ b/lib/core/translations/language/it_it.dart @@ -732,6 +732,8 @@ const Map itIT = { "Lily": "Lily", "clearChatHistory": "Cancella cronologia chat", "online": "Online", + "ttsSpeed": "Velocità della voce", + "ttsSpeedDefaultHint": "Predefinito +25%", "inputMessage": "Inserisci messaggio...", "imListening": "Sto ascoltando...", "canStartTalking": "Puoi iniziare a parlare", diff --git a/lib/core/translations/language/ja_jp.dart b/lib/core/translations/language/ja_jp.dart index 40a10581c..33f8be765 100644 --- a/lib/core/translations/language/ja_jp.dart +++ b/lib/core/translations/language/ja_jp.dart @@ -711,6 +711,8 @@ const Map jaJP = { "Lily": "Lily", "clearChatHistory": "チャット履歴をクリア", "online": "オンライン", + "ttsSpeed": "話速", + "ttsSpeedDefaultHint": "デフォルト +25%", "inputMessage": "メッセージを入力...", "imListening": "聞いています...", "canStartTalking": "話し始めることができます", diff --git a/lib/core/translations/language/ko_kr.dart b/lib/core/translations/language/ko_kr.dart index 6a1f3efaa..fc03a6514 100644 --- a/lib/core/translations/language/ko_kr.dart +++ b/lib/core/translations/language/ko_kr.dart @@ -707,6 +707,8 @@ const Map koKR = { "Lily": "Lily", "clearChatHistory": "채팅 기록 지우기", "online": "온라인", + "ttsSpeed": "음성 속도", + "ttsSpeedDefaultHint": "기본값 +25%", "inputMessage": "메시지 입력...", "imListening": "듣고 있습니다...", "canStartTalking": "말씀을 시작할 수 있습니다", diff --git a/lib/core/translations/language/lt_lt.dart b/lib/core/translations/language/lt_lt.dart index c31f48ef0..314934882 100644 --- a/lib/core/translations/language/lt_lt.dart +++ b/lib/core/translations/language/lt_lt.dart @@ -727,6 +727,8 @@ const Map ltLT = { "Lily": "Lily", "clearChatHistory": "Išvalyti pokalbių istoriją", "online": "Prisijungęs", + "ttsSpeed": "Kalbėjimo greitis", + "ttsSpeedDefaultHint": "Numatytasis +25%", "inputMessage": "Įveskite žinutę...", "imListening": "Klausausi...", "canStartTalking": "Galite pradėti kalbėti", diff --git a/lib/core/translations/language/lv_lv.dart b/lib/core/translations/language/lv_lv.dart index cd2a604ec..15a67fc17 100644 --- a/lib/core/translations/language/lv_lv.dart +++ b/lib/core/translations/language/lv_lv.dart @@ -726,6 +726,8 @@ const Map lvLV = { "Lily": "Lily", "clearChatHistory": "Notīrīt tērzēšanas vēsturi", "online": "Tiešsaistē", + "ttsSpeed": "Runas ātrums", + "ttsSpeedDefaultHint": "Noklusējums +25%", "inputMessage": "Ievadiet ziņu...", "imListening": "Klausos...", "canStartTalking": "Jūs varat sākt runāt", diff --git a/lib/core/translations/language/ms_my.dart b/lib/core/translations/language/ms_my.dart index 8ec840b47..6b0bfe761 100644 --- a/lib/core/translations/language/ms_my.dart +++ b/lib/core/translations/language/ms_my.dart @@ -723,6 +723,8 @@ const Map msMY = { "Lily": "Lily", "clearChatHistory": "Kosongkan Sejarah Sembang", "online": "Dalam Talian", + "ttsSpeed": "Kelajuan suara", + "ttsSpeedDefaultHint": "Lalai +25%", "inputMessage": "Masukkan mesej...", "imListening": "Mendengar...", "canStartTalking": "Anda boleh mula bercakap", diff --git a/lib/core/translations/language/nb_no.dart b/lib/core/translations/language/nb_no.dart index b83d3bdd0..07f931048 100644 --- a/lib/core/translations/language/nb_no.dart +++ b/lib/core/translations/language/nb_no.dart @@ -725,6 +725,8 @@ const Map nbNO = { "Lily": "Lily", "clearChatHistory": "Tøm chat-historikk", "online": "Online", + "ttsSpeed": "Talefart", + "ttsSpeedDefaultHint": "Standard +25 %", "inputMessage": "Skriv melding...", "imListening": "Lytter...", "canStartTalking": "Du kan begynne å snakke", diff --git a/lib/core/translations/language/nl_nl.dart b/lib/core/translations/language/nl_nl.dart index 0f3297e05..8c7b3e90a 100644 --- a/lib/core/translations/language/nl_nl.dart +++ b/lib/core/translations/language/nl_nl.dart @@ -724,6 +724,8 @@ const Map nlNL = { "Lily": "Lily", "clearChatHistory": "Chatgeschiedenis wissen", "online": "Online", + "ttsSpeed": "Spreeksnelheid", + "ttsSpeedDefaultHint": "Standaard +25%", "inputMessage": "Voer bericht in...", "imListening": "Ik luister...", "canStartTalking": "U kunt beginnen met praten", diff --git a/lib/core/translations/language/pl_pl.dart b/lib/core/translations/language/pl_pl.dart index f28194e01..95eb2d547 100644 --- a/lib/core/translations/language/pl_pl.dart +++ b/lib/core/translations/language/pl_pl.dart @@ -727,6 +727,8 @@ const Map plPL = { "Lily": "Lily", "clearChatHistory": "Wyczyść historię czatu", "online": "Online", + "ttsSpeed": "Prędkość mowy", + "ttsSpeedDefaultHint": "Domyślnie +25%", "inputMessage": "Wpisz wiadomość...", "imListening": "Słucham...", "canStartTalking": "Możesz zacząć mówić", diff --git a/lib/core/translations/language/pt_pt.dart b/lib/core/translations/language/pt_pt.dart index 9d37853d9..3324adea9 100644 --- a/lib/core/translations/language/pt_pt.dart +++ b/lib/core/translations/language/pt_pt.dart @@ -731,6 +731,8 @@ const Map ptPT = { "Lily": "Lily", "clearChatHistory": "Limpar Histórico de Chat", "online": "Online", + "ttsSpeed": "Velocidade da voz", + "ttsSpeedDefaultHint": "Padrão +25%", "inputMessage": "Introduzir mensagem...", "imListening": "A ouvir...", "canStartTalking": "Pode começar a falar", diff --git a/lib/core/translations/language/ro_ro.dart b/lib/core/translations/language/ro_ro.dart index 9969fe884..66a0783cc 100644 --- a/lib/core/translations/language/ro_ro.dart +++ b/lib/core/translations/language/ro_ro.dart @@ -727,6 +727,8 @@ const Map roRO = { "Lily": "Lily", "clearChatHistory": "Șterge istoricul chatului", "online": "Online", + "ttsSpeed": "Viteza vocii", + "ttsSpeedDefaultHint": "Implicit +25%", "inputMessage": "Introduceți mesaj...", "imListening": "Ascult...", "canStartTalking": "Puteți începe să vorbiți", diff --git a/lib/core/translations/language/ru_ru.dart b/lib/core/translations/language/ru_ru.dart index ba935ca20..a7b06f671 100644 --- a/lib/core/translations/language/ru_ru.dart +++ b/lib/core/translations/language/ru_ru.dart @@ -727,6 +727,8 @@ const Map ruRU = { "Lily": "Lily", "clearChatHistory": "Очистить историю чата", "online": "В сети", + "ttsSpeed": "Скорость речи", + "ttsSpeedDefaultHint": "По умолчанию +25%", "inputMessage": "Введите сообщение...", "imListening": "Слушаю...", "canStartTalking": "Можете начинать говорить", diff --git a/lib/core/translations/language/sk_sk.dart b/lib/core/translations/language/sk_sk.dart index 80bb2bc57..dc88afea1 100644 --- a/lib/core/translations/language/sk_sk.dart +++ b/lib/core/translations/language/sk_sk.dart @@ -724,6 +724,8 @@ const Map skSK = { "Lily": "Lily", "clearChatHistory": "Vymazať históriu chatu", "online": "Online", + "ttsSpeed": "Rýchlosť reči", + "ttsSpeedDefaultHint": "Predvolené +25%", "inputMessage": "Zadajte správu...", "imListening": "Počúvam...", "canStartTalking": "Môžete začať hovoriť", diff --git a/lib/core/translations/language/sl_si.dart b/lib/core/translations/language/sl_si.dart index bc70cfd3c..2b3a3f3df 100644 --- a/lib/core/translations/language/sl_si.dart +++ b/lib/core/translations/language/sl_si.dart @@ -726,6 +726,8 @@ const Map slSI = { "Lily": "Lily", "clearChatHistory": "Počisti zgodovino klepeta", "online": "Na spletu", + "ttsSpeed": "Hitrost govora", + "ttsSpeedDefaultHint": "Privzeto +25%", "inputMessage": "Vnesite sporočilo...", "imListening": "Poslušam...", "canStartTalking": "Lahko začnete govoriti", diff --git a/lib/core/translations/language/sr_rs.dart b/lib/core/translations/language/sr_rs.dart index bf2feb6b0..ba350d2ab 100644 --- a/lib/core/translations/language/sr_rs.dart +++ b/lib/core/translations/language/sr_rs.dart @@ -724,6 +724,8 @@ const Map srRS = { "Lily": "Lily", "clearChatHistory": "Obriši istoriju ćaskanja", "online": "Na mreži", + "ttsSpeed": "Brzina govora", + "ttsSpeedDefaultHint": "Podrazumevano +25%", "inputMessage": "Unesite poruku...", "imListening": "Slušam...", "canStartTalking": "Možete početi da govorite", diff --git a/lib/core/translations/language/sv_se.dart b/lib/core/translations/language/sv_se.dart index 64041c6e7..341116fb0 100644 --- a/lib/core/translations/language/sv_se.dart +++ b/lib/core/translations/language/sv_se.dart @@ -724,6 +724,8 @@ const Map svSE = { "Lily": "Lily", "clearChatHistory": "Rensa chatthistorik", "online": "Online", + "ttsSpeed": "Talthastighet", + "ttsSpeedDefaultHint": "Standard +25%", "inputMessage": "Skriv meddelande...", "imListening": "Lyssnar...", "canStartTalking": "Du kan börja prata", diff --git a/lib/core/translations/language/th_th.dart b/lib/core/translations/language/th_th.dart index a35ff8181..4046c535d 100644 --- a/lib/core/translations/language/th_th.dart +++ b/lib/core/translations/language/th_th.dart @@ -718,6 +718,8 @@ const Map thTH = { "Lily": "Lily", "clearChatHistory": "ล้างประวัติการแชท", "online": "ออนไลน์", + "ttsSpeed": "ความเร็วคำพูด", + "ttsSpeedDefaultHint": "ค่าเริ่มต้น +25%", "inputMessage": "ป้อนข้อความ...", "imListening": "กำลังฟัง...", "canStartTalking": "คุณสามารถเริ่มพูดได้", diff --git a/lib/core/translations/language/tl_ph.dart b/lib/core/translations/language/tl_ph.dart index 7754df114..fa233db16 100644 --- a/lib/core/translations/language/tl_ph.dart +++ b/lib/core/translations/language/tl_ph.dart @@ -728,6 +728,8 @@ const Map tlPH = { "Lily": "Lily", "clearChatHistory": "Burahin ang Kasaysayan ng Chat", "online": "Online", + "ttsSpeed": "Bilis ng pagsasalita", + "ttsSpeedDefaultHint": "Default +25%", "inputMessage": "Mag-type ng mensahe...", "imListening": "Nakikinig...", "canStartTalking": "Maaari ka nang magsalita", diff --git a/lib/core/translations/language/tr_tr.dart b/lib/core/translations/language/tr_tr.dart index 190a4cdc8..e361eb949 100644 --- a/lib/core/translations/language/tr_tr.dart +++ b/lib/core/translations/language/tr_tr.dart @@ -723,6 +723,8 @@ const Map trTR = { "Lily": "Lily", "clearChatHistory": "Sohbet Geçmişini Temizle", "online": "Çevrimiçi", + "ttsSpeed": "Konuşma hızı", + "ttsSpeedDefaultHint": "Varsayılan +25%", "inputMessage": "Mesaj girin...", "imListening": "Dinliyorum...", "canStartTalking": "Konuşmaya başlayabilirsiniz", diff --git a/lib/core/translations/language/uk_ua.dart b/lib/core/translations/language/uk_ua.dart index a933b00a0..9062d5d42 100644 --- a/lib/core/translations/language/uk_ua.dart +++ b/lib/core/translations/language/uk_ua.dart @@ -724,6 +724,8 @@ const Map ukUA = { "Lily": "Lily", "clearChatHistory": "Очистити історію чату", "online": "В мережі", + "ttsSpeed": "Швидкість мовлення", + "ttsSpeedDefaultHint": "Типово +25%", "inputMessage": "Введіть повідомлення...", "imListening": "Слухаю...", "canStartTalking": "Можете починати говорити", diff --git a/lib/core/translations/language/vi_vn.dart b/lib/core/translations/language/vi_vn.dart index 4ecda89d1..6aaf28569 100644 --- a/lib/core/translations/language/vi_vn.dart +++ b/lib/core/translations/language/vi_vn.dart @@ -720,6 +720,8 @@ const Map viVN = { "Lily": "Lily", "clearChatHistory": "Xóa lịch sử trò chuyện", "online": "Trực tuyến", + "ttsSpeed": "Tốc độ giọng nói", + "ttsSpeedDefaultHint": "Mặc định +25%", "inputMessage": "Nhập tin nhắn...", "imListening": "Đang lắng nghe...", "canStartTalking": "Bạn có thể bắt đầu nói", diff --git a/lib/core/translations/language/zh_cn.dart b/lib/core/translations/language/zh_cn.dart index a7da9384f..aaeecfba8 100644 --- a/lib/core/translations/language/zh_cn.dart +++ b/lib/core/translations/language/zh_cn.dart @@ -676,6 +676,8 @@ const Map zhCN = { "Lily": "Lily", "clearChatHistory": "清空聊天记录", "online": "在线", + "ttsSpeed": "语速", + "ttsSpeedDefaultHint": "默认 +25%", "inputMessage": "输入消息...", "imListening": "正在聆听...", "canStartTalking": "你可以开始说话", diff --git a/lib/core/translations/language/zh_hk.dart b/lib/core/translations/language/zh_hk.dart index 752892fb6..cea725017 100644 --- a/lib/core/translations/language/zh_hk.dart +++ b/lib/core/translations/language/zh_hk.dart @@ -677,6 +677,8 @@ const Map zhHK = { "Lily": "Lily", "clearChatHistory": "清空聊天記錄", "online": "在線", + "ttsSpeed": "語速", + "ttsSpeedDefaultHint": "預設 +25%", "inputMessage": "輸入訊息...", "imListening": "正在聆聽...", "canStartTalking": "你可以開始說話", diff --git a/lib/core/translations/language/zh_tw.dart b/lib/core/translations/language/zh_tw.dart index c8692be3a..fb94954ef 100644 --- a/lib/core/translations/language/zh_tw.dart +++ b/lib/core/translations/language/zh_tw.dart @@ -677,6 +677,8 @@ const Map zhTW = { "Lily": "Lily", "clearChatHistory": "清空聊天記錄", "online": "在線", + "ttsSpeed": "語速", + "ttsSpeedDefaultHint": "預設 +25%", "inputMessage": "輸入訊息...", "imListening": "正在聆聽...", "canStartTalking": "你可以開始說話", diff --git a/lib/modules/agent/controllers/agent_controller.dart b/lib/modules/agent/controllers/agent_controller.dart index df79a7cbc..c76ab1c54 100644 --- a/lib/modules/agent/controllers/agent_controller.dart +++ b/lib/modules/agent/controllers/agent_controller.dart @@ -81,6 +81,7 @@ class AgentController extends GetxController with WidgetsBindingObserver { final isProcessing = false.obs; // TTS启用状态 final isTtsEnabled = true.obs; + final ttsRatePercent = 25.obs; // TTS播报打断启用状态 final isTtsInterruptEnabled = false.obs; // 是否显示工具调用 @@ -179,6 +180,7 @@ class AgentController extends GetxController with WidgetsBindingObserver { }); _initAppDir(); _loadTtsPreference(); //加载TTS偏好设置 + _loadTtsRatePreference(); _loadTtsInterrupe(); //加载TTS播报打断偏好设置 // 监听存储中的“agent_tts_interrupe”键变化,实现跨页面状态同步 // 中文注释:当 Home 页或 Agent 页任意一处切换时,另一处可以通过监听存储自动刷新 UI @@ -269,6 +271,30 @@ class AgentController extends GetxController with WidgetsBindingObserver { } } + Future _loadTtsRatePreference() async { + try { + final value = _storage.read('agent_tts_rate_percent'); + if (value is int) { + ttsRatePercent.value = value; + } else if (value is String) { + final parsed = int.tryParse(value); + if (parsed != null) { + ttsRatePercent.value = parsed; + } + } else { + ttsRatePercent.value = 25; + } + } catch (e) { + ttsRatePercent.value = 25; + } + + try { + await AgentService.setTtsRate(ttsRatePercent.value); + } catch (e) { + Logger.e(TAG, '同步TTS语速失败: $e'); + } + } + // 切换TTS状态 Future toggleTts() async { isTtsEnabled.toggle(); @@ -287,6 +313,29 @@ class AgentController extends GetxController with WidgetsBindingObserver { } } + Future updateTtsRate(int rate) async { + final newRate = rate.clamp(0, 100); + ttsRatePercent.value = newRate; + + if (isSpeaking.value) { + try { + await AgentService.stopTts(); + } catch (_) {} + } + + try { + await AgentService.setTtsRate(newRate); + } catch (e) { + Logger.e(TAG, '设置TTS语速失败: $e'); + } + + try { + await _storage.write('agent_tts_rate_percent', newRate); + } catch (e) { + Logger.e(TAG, '保存TTS语速偏好设置失败: $e'); + } + } + // 加载TTS偏好设置 Future _loadTtsInterrupe() async { try { diff --git a/lib/modules/agent/views/agent_view.dart b/lib/modules/agent/views/agent_view.dart index 6472a2805..8a3674b0c 100644 --- a/lib/modules/agent/views/agent_view.dart +++ b/lib/modules/agent/views/agent_view.dart @@ -29,6 +29,77 @@ class _AgentViewState extends State with WidgetsBindingObserver { // 👇 新增:用于控制 TextField 焦点 final FocusNode _textFocusNode = FocusNode(); + void _showTtsSpeedDialog() { + final primaryColor = Theme.of(context).primaryColor; + final isDarkMode = Theme.of(context).brightness == Brightness.dark; + final RxInt tempRate = controller.ttsRatePercent.value.obs; + + Get.dialog( + AlertDialog( + backgroundColor: isDarkMode ? Colors.grey[850] : Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12.w), + ), + title: Text( + 'ttsSpeed'.tr, // 语速 + style: TextStyle(fontSize: 16.sp), + ), + content: Obx(() { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + Align( + alignment: Alignment.centerLeft, + child: Text( + 'ttsSpeedDefaultHint'.tr, // 默认 +25% + style: TextStyle( + fontSize: 12.sp, + color: isDarkMode ? Colors.grey[400] : Colors.grey[600], + ), + ), + ), + SizedBox(height: 12.h), + Text( + '+${tempRate.value}%', + style: TextStyle( + fontSize: 20.sp, + fontWeight: FontWeight.w600, + color: primaryColor, + ), + ), + SizedBox(height: 8.h), + Slider( + value: tempRate.value.toDouble(), + min: 0, + max: 100, + divisions: 20, + label: '+${tempRate.value}%', + activeColor: primaryColor, + onChanged: (value) { + tempRate.value = value.round(); + }, + ), + ], + ); + }), + actions: [ + TextButton( + onPressed: () => Get.back(), + child: Text('cancel'.tr), + ), + TextButton( + onPressed: () async { + Get.back(); + await controller.updateTtsRate(tempRate.value); + }, + child: Text('confirm'.tr), + ), + ], + ), + barrierDismissible: true, + ); + } + @override void initState() { super.initState(); @@ -86,7 +157,7 @@ class _AgentViewState extends State with WidgetsBindingObserver { borderRadius: BorderRadius.circular(20.w), boxShadow: [ BoxShadow( - color: Colors.black.withOpacity(0.1), + color: Colors.black.withValues(alpha: 0.1), blurRadius: 3.w, offset: const Offset(0, 1), ), @@ -179,13 +250,14 @@ class _AgentViewState extends State with WidgetsBindingObserver { height: 34.w, margin: EdgeInsets.only(right: 8.w), decoration: BoxDecoration( - color: - isDarkMode ? Colors.white.withOpacity(0.1) : Colors.grey[100], + color: isDarkMode + ? Colors.white.withValues(alpha: 0.1) + : Colors.grey[100], shape: BoxShape.circle, boxShadow: [ if (!isDarkMode) BoxShadow( - color: Colors.black.withOpacity(0.05), + color: Colors.black.withValues(alpha: 0.05), blurRadius: 2.w, spreadRadius: 0.5.w, ), @@ -268,6 +340,21 @@ class _AgentViewState extends State with WidgetsBindingObserver { onTap: () => controller.toggleTtsInterrupt(), ), + PopupMenuItem( + child: Row( + children: [ + Icon(Icons.speed, color: primaryColor, size: 20.sp), + SizedBox(width: 8.w), + Text('ttsSpeed'.tr, // 语速 + style: TextStyle(fontSize: 14.sp)), + ], + ), + onTap: () => Future.delayed( + const Duration(milliseconds: 100), + () => _showTtsSpeedDialog(), + ), + ), + // 清除聊天记录选项 PopupMenuItem( child: Row( @@ -448,14 +535,14 @@ class _AgentViewState extends State with WidgetsBindingObserver { color: backgroundColor, boxShadow: [ BoxShadow( - color: Colors.black.withOpacity(0.06), + color: Colors.black.withValues(alpha: 0.06), blurRadius: 8.w, offset: const Offset(0, -1), ), ], border: Border( top: BorderSide( - color: Colors.grey.withOpacity(0.15), + color: Colors.grey.withValues(alpha: 0.15), width: 1.w, ), ), @@ -489,7 +576,8 @@ class _AgentViewState extends State with WidgetsBindingObserver { child: Container( padding: EdgeInsets.all(4.w), decoration: BoxDecoration( - color: Colors.black.withOpacity(0.6), + color: Colors.black + .withValues(alpha: 0.6), shape: BoxShape.circle, ), child: Icon( @@ -635,7 +723,7 @@ class _AgentViewState extends State with WidgetsBindingObserver { final isTextMode = controller.isTextInputMode.value; - if (controller.isTextInputMode.value) { + if (isTextMode) { // 文本输入模式 - 限制最大高度并只向上扩展 return IntroStepBuilder( group: 'ai', @@ -686,7 +774,8 @@ class _AgentViewState extends State with WidgetsBindingObserver { border: Border.all( color: isDarkMode ? Colors.grey[800]! - : Colors.grey.withOpacity(0.1), + : Colors.grey + .withValues(alpha: 0.1), width: 1.w, ), ), @@ -748,7 +837,6 @@ class _AgentViewState extends State with WidgetsBindingObserver { ), ); } else { - Timer? _holdTimer; // 增加延迟触发的计时器 // 语音输入模式 - 按住说话模式 return Listener( onPointerDown: (_) { @@ -775,8 +863,6 @@ class _AgentViewState extends State with WidgetsBindingObserver { child: Obx(() { final isPushToTalkActive = controller.isPushToTalkActive.value; - final isListening = - controller.isListening.value; return Container( height: 48.w, @@ -795,8 +881,8 @@ class _AgentViewState extends State with WidgetsBindingObserver { BorderRadius.circular(22.w), boxShadow: [ BoxShadow( - color: - Colors.black.withOpacity(0.2), + color: Colors.black + .withValues(alpha: 0.2), spreadRadius: 1, blurRadius: 2, offset: const Offset(0, 1), @@ -1127,10 +1213,10 @@ class _AgentViewState extends State with WidgetsBindingObserver { child: Container( padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 8.h), decoration: BoxDecoration( - color: primaryColor.withOpacity(0.08), + color: primaryColor.withValues(alpha: 0.08), borderRadius: BorderRadius.circular(16.w), border: Border.all( - color: primaryColor.withOpacity(0.2), + color: primaryColor.withValues(alpha: 0.2), width: 1.w, ), ), 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 24d28b51f..3667179df 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 @@ -68,8 +68,10 @@ object AgentService : CoroutineScope { // SharedPreferences 相关常量 private const val PREF_NAME = "agent_service_prefs" private const val KEY_IS_INTERRUPT = "is_interrupt" + private const val KEY_TTS_RATE = "tts_rate_percent" private var _isInterrupt = AtomicBoolean(false) + private var ttsRatePercent: Int = 25 private var azureSpeechKey: String = "" private var azureSpeechRegion: String = "" @@ -224,6 +226,7 @@ object AgentService : CoroutineScope { // 从 SharedPreferences 读取 _isInterrupt 状态 loadIsInterruptFromCache() + loadTtsRateFromCache() if (config["isttsinterrupt"] != null){ _isInterrupt.set(config["isttsinterrupt"]?.toString() == "true") } @@ -401,7 +404,7 @@ object AgentService : CoroutineScope { if (!success) { Log.e(TAG, "Bytedance TTS服务初始化失败") } else { - ttsService?.setSpeechParams(rate = 25, pitch = 0, volume = 100) + applyTtsSpeechParams() val voiceName = getTtsVoiceNameByAsrCode(ttsLanguage) if (voiceName.isNotEmpty()) { ttsService?.setVoice(voiceName) @@ -620,6 +623,14 @@ object AgentService : CoroutineScope { return isInterrupt } + + fun setTtsRate(rate: Int): Boolean { + val clampedRate = rate.coerceIn(-100, 100) + ttsRatePercent = clampedRate + saveTtsRateToCache(clampedRate) + applyTtsSpeechParams() + return true + } /** * 开始语音识别 * @param isExternalActive 是否使用外部音频源(蓝牙) @@ -1395,7 +1406,7 @@ object AgentService : CoroutineScope { restartIdleCheck() // 状态变化,重启检测 // 直接调用TTS,无需协程包装 - ttsService?.setSpeechParams(rate = 25, pitch = 0, volume = 100) + applyTtsSpeechParams() ttsService?.speakOnce(text) } @@ -2797,6 +2808,39 @@ object AgentService : CoroutineScope { } } + private fun applyTtsSpeechParams() { + try { + ttsService?.setSpeechParams(rate = ttsRatePercent, pitch = 0, volume = 100) + } catch (e: Exception) { + Log.e(TAG, "应用TTS语速参数失败: ${e.message}", e) + } + } + + private fun loadTtsRateFromCache() { + try { + if (::context.isInitialized) { + val prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE) + val cachedValue = prefs.getInt(KEY_TTS_RATE, 25) + ttsRatePercent = cachedValue.coerceIn(-100, 100) + Log.d(TAG, "从缓存加载 ttsRatePercent: $ttsRatePercent") + } + } catch (e: Exception) { + Log.e(TAG, "加载TTS语速缓存状态时发生异常: ${e.message}", e) + } + } + + private fun saveTtsRateToCache(rate: Int) { + try { + if (::context.isInitialized) { + val prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE) + prefs.edit().putInt(KEY_TTS_RATE, rate).apply() + Log.d(TAG, "保存 ttsRatePercent 到缓存: $rate") + } + } catch (e: Exception) { + Log.e(TAG, "保存TTS语速缓存状态时发生异常: ${e.message}", 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 e3b464226..254b63f12 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 @@ -294,6 +294,21 @@ class AgentServicePlugin : FlutterPlugin, MethodCallHandler, EventChannel.Stream } } + "setTtsRate" -> { + try { + val rate = call.argument("rate") + if (rate == null) { + result.error("INVALID_ARGUMENTS", "rate参数不能为空", null) + return + } + val isSuccess = AgentService.setTtsRate(rate) + result.success(isSuccess) + } catch (e: Exception) { + Log.e(TAG, "设置TTS语速失败", e) + result.error("SET_TTS_RATE_ERROR", "设置TTS语速失败: ${e.message}", null) + } + } + "clearChatHistory" -> { try { AgentService.clearChatHistory { success -> @@ -361,4 +376,4 @@ class AgentServicePlugin : FlutterPlugin, MethodCallHandler, EventChannel.Stream eventChannel.setStreamHandler(null) AgentService.removeListener(this) } -} \ No newline at end of file +} 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 6d1553ee7..d0e87a0b3 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 @@ -30,6 +30,7 @@ class AgentServiceImpl: NSObject { // UserDefaults 相关常量 private let PREF_NAME = "agent_service_prefs" private let KEY_IS_INTERRUPT = "is_interrupt" + private let KEY_TTS_RATE = "tts_rate_percent" private var listeners = [AgentServiceListener]() private let listenersLock = NSLock() @@ -89,6 +90,7 @@ class AgentServiceImpl: NSObject { // 新增:是否在识别过程中被中断 public var isInterrupt: Bool = true + private var ttsRatePercent: Int = 25 var currsessionId: String = "" var language: String = "" @@ -208,6 +210,7 @@ class AgentServiceImpl: NSObject { //加载 isInterrupt 状态 loadIsInterruptFromCache() + loadTtsRateFromCache() if let isttsinterrupt = config["isttsinterrupt"] as? String { if (isttsinterrupt == "true"){ self.isInterrupt = true @@ -343,7 +346,7 @@ class AgentServiceImpl: NSObject { } _ = azureTtsHelper?.setVoice(getTtsVoiceNameByAsrCode(primaryLanguage)) - _ = azureTtsHelper?.setSpeechParams(rate: 25, pitch: 0, volume: 100) + _ = azureTtsHelper?.setSpeechParams(rate: ttsRatePercent, pitch: 0, volume: 100) return true } @@ -605,9 +608,17 @@ class AgentServiceImpl: NSObject { return false } - _ = azureTtsHelper?.setSpeechParams(rate: 25, pitch: 0, volume: 100) + _ = azureTtsHelper?.setSpeechParams(rate: ttsRatePercent, pitch: 0, volume: 100) return azureTtsHelper?.speakOnce(sessionid:sessionid,text) ?? false } + + func setTtsRate(_ rate: Int) -> Bool { + let clampedRate = max(-100, min(100, rate)) + ttsRatePercent = clampedRate + saveTtsRateToCache(clampedRate) + _ = azureTtsHelper?.setSpeechParams(rate: ttsRatePercent, pitch: 0, volume: 100) + return true + } func stopTts() -> Bool { if !isSpeaking { @@ -2422,4 +2433,17 @@ extension AgentServiceImpl: AzureAsrHelper.ContinuousRecognizeCallback { userDefaults.set(isInterrupt, forKey: KEY_IS_INTERRUPT) os_log("保存 isInterrupt 状态到缓存: %{public}@", log: logger, type: .info, String(isInterrupt)) } + + private func loadTtsRateFromCache() { + let userDefaults = UserDefaults.standard + let cachedValue = userDefaults.object(forKey: KEY_TTS_RATE) as? Int ?? 25 + ttsRatePercent = max(-100, min(100, cachedValue)) + os_log("从缓存加载 ttsRatePercent: %{public}@", log: logger, type: .info, String(ttsRatePercent)) + } + + private func saveTtsRateToCache(_ rate: Int) { + let userDefaults = UserDefaults.standard + userDefaults.set(rate, forKey: KEY_TTS_RATE) + os_log("保存 ttsRatePercent 到缓存: %{public}@", log: logger, type: .info, String(rate)) + } } diff --git a/local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServicePlugin.swift b/local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServicePlugin.swift index cad33bcb4..88ed6f736 100644 --- a/local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServicePlugin.swift +++ b/local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServicePlugin.swift @@ -186,6 +186,14 @@ public class AgentServicePlugin: NSObject, FlutterPlugin { } let success = impl.setVipExptime(vipexptime) result(success) + case "setTtsRate": + guard let arguments = call.arguments as? [String: Any], + let rate = arguments["rate"] as? Int else { + result(FlutterError(code: "INVALID_ARGUMENTS", message: "rate参数不能为空", details: nil)) + return + } + let success = impl.setTtsRate(rate) + result(success) default: result(FlutterMethodNotImplemented) } diff --git a/local_plugins/agent_service/lib/agent_service.dart b/local_plugins/agent_service/lib/agent_service.dart index bccb5db71..4ba2084c3 100644 --- a/local_plugins/agent_service/lib/agent_service.dart +++ b/local_plugins/agent_service/lib/agent_service.dart @@ -1,6 +1,5 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:ffi'; import 'package:flutter/services.dart'; @@ -249,7 +248,6 @@ class AgentService { // 防抖相关静态字段(全局统一防抖) // 说明:用于限制 startConversation/stopConversation 在极短时间内的重复触发 static DateTime? _lastStartConversationAt; - static DateTime? _lastStopConversationAt; static const Duration _conversationDebounce = Duration(milliseconds: 600); static Future startConversation({String mode = 'normal'}) async { @@ -337,7 +335,6 @@ class AgentService { // 移除防抖拦截! // 停止操作是安全且必要的,不应该被拦截。 // 即使频繁调用,Native 层也能处理(我们已经修复了 Native 层的并发问题)。 - _lastStopConversationAt = DateTime.now(); try { final bool result = await _channel.invokeMethod('stopConversation'); @@ -406,6 +403,18 @@ class AgentService { } } + /// 设置TTS语速 + static Future setTtsRate(int rate) async { + try { + final bool result = await _channel.invokeMethod('setTtsRate', { + 'rate': rate, + }); + return result; + } on PlatformException catch (e) { + throw AgentServiceException(e.code, e.message ?? '设置TTS语速失败', e.details); + } + } + /// 停止语音合成 static Future stopAiSteam() async { try { From 68a5117dd42f7941ed995e1ed801ce635faa7193 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Wed, 7 Jan 2026 17:29:25 +0800 Subject: [PATCH 22/27] =?UTF-8?q?fix(agent=5Fservice):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E8=AF=AD=E9=9F=B3=E8=AF=86=E5=88=AB=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E5=A4=84=E7=90=86=E9=A1=BA=E5=BA=8F=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 确保在清空识别结果和会话ID前调用聊天API处理 --- .../kotlin/com/yunqiinnovation/agent_service/AgentService.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) 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 3667179df..9e2ade544 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 @@ -790,11 +790,9 @@ object AgentService : CoroutineScope { "language" to detectedLanguage ) ) + processWithChatApi(currsessionAsrId, recognitionResult) recognitionResult = "" currsessionAsrId = "" - - processWithChatApi(currsessionAsrId, recognitionResult) - } } } From 9a4e9227cf17174fef72f6a8d6b14b818c2161d3 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Wed, 7 Jan 2026 19:07:59 +0800 Subject: [PATCH 23/27] =?UTF-8?q?fix(agent=5Fservice):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E7=A9=BA=E9=97=B2=E6=A3=80=E6=B5=8B=E4=B8=AD=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E5=88=A4=E6=96=AD=E5=92=8C=E4=BA=8B=E4=BB=B6=E5=8F=91?= =?UTF-8?q?=E9=80=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将模式判断变量从`mode`改为`currentRecognitionMode`以保持一致性 移除`auto_stop`事件发送,改为发送`recognition_result`事件 --- .../agent_service/AgentService.kt | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) 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 9e2ade544..e7c4fc3bb 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 @@ -570,17 +570,24 @@ object AgentService : CoroutineScope { if (isActive && isRecognitionActive && !isTtsSpeaking && !isAiStreaming) { Log.d(TAG, "空闲检测触发自动停止,模式: $currentRecognitionMode") BleService.closeCodec() - if (mode != "phone_call"){ + if (currentRecognitionMode != "phone_call"){ stopRecognition() } sendEvent( - "auto_stop", - mapOf( - "reason" to "idle_timeout", - "seconds" to idleSeconds, - "mode" to currentRecognitionMode + "recognition_result", mapOf( + "sessionid" to currsessionAsrId, + "text" to recognitionResult, + // "language" to detectedLanguage ) ) + // sendEvent( + // "auto_stop", + // mapOf( + // "reason" to "idle_timeout", + // "seconds" to idleSeconds, + // "mode" to currentRecognitionMode + // ) + // ) } } catch (e: CancellationException) { // 协程被取消,正常行为 From 19dd3ee0f5390264b24b3b0db2abe87bd632d1ba Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Thu, 8 Jan 2026 16:45:38 +0800 Subject: [PATCH 24/27] =?UTF-8?q?refactor(meeting):=20=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=B3=A2=E5=BD=A2=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E4=B8=BAaudio=5Fwaveforms=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除自定义波形动画和数据处理逻辑,改用audio_waveforms库实现 简化控制器代码,移除未使用的变量和动画控制器 更新视图层以适配新的波形显示组件 --- .../meeting_record_controller.dart | 225 +++-------- .../meeting/views/meeting_record_view.dart | 349 ++++++------------ 2 files changed, 175 insertions(+), 399 deletions(-) diff --git a/lib/modules/meeting/controllers/meeting_record_controller.dart b/lib/modules/meeting/controllers/meeting_record_controller.dart index 792618710..277c1c998 100644 --- a/lib/modules/meeting/controllers/meeting_record_controller.dart +++ b/lib/modules/meeting/controllers/meeting_record_controller.dart @@ -5,6 +5,7 @@ import 'dart:math'; import 'dart:typed_data'; import '/core/utils/logger.dart'; import '/core/utils/permission_util.dart'; +import 'package:audio_waveforms/audio_waveforms.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; @@ -40,7 +41,9 @@ class MeetingRecordController extends GetxController final RxBool showTextContent = false.obs; final RxBool isRecording = false.obs; //final RxBool isVoiceRecognitionActive = false.obs; - final RxList waveData = [].obs; + final RxDouble rms = 0.0.obs; + + final RecorderController waveformController = RecorderController(); // Transcription content final RxString intermediateContent = ''.obs; @@ -61,46 +64,23 @@ class MeetingRecordController extends GetxController // 移除了未使用的变量和TabController StreamSubscription? _audioDataSubscription; - // 简化的音波数据管理 - final int frameIntervalMs = 300; // 300ms间隔,更稳定的帧率 - int maxVisibleBars = 60; // 最大可见波形条数量 - Timer? _audioFrameTimer; // 音频帧定时器 - double _currentFrameAmplitude = 0.0; // 当前帧累积振幅 - int _currentFrameSamples = 0; // 当前帧样本数量 - - // 性能优化:音频处理采样控制 - int _audioProcessCounter = 0; - static const int _audioProcessInterval = 1; // 每1个音频包处理1次 - - // 波形流动动画控制器 - late AnimationController waveformAnimationController; - late Animation waveformAnimation; - - // 数据更新控制器 - 统一管理数据更新和动画 - late AnimationController _dataUpdateController; - late Animation _dataUpdateAnimation; - // 设置最大可见波形条数量(根据屏幕宽度) - void setMaxVisibleBars(double screenWidth) { - const barWidth = 3.0; // 波形条宽度 - const barSpacing = 1.0; // 波形条间距 - maxVisibleBars = (screenWidth / (barWidth + barSpacing)).floor(); - } + double _smoothedRms = 0.0; + double _latestRms = 0.0; + Timer? _waveformTimer; + static const Duration _waveformTick = Duration(milliseconds: 40); + static const int _maxWaveSamples = 1200; @override void onInit() { super.onInit(); _initializeComponents(); _setupFromArguments(); - _initializeWaveformAnimation(); //generateWaveData(); } @override void onClose() { _cleanupResources(); - // 清理两个AnimationController - waveformAnimationController.dispose(); - _dataUpdateController.dispose(); super.onClose(); } @@ -134,56 +114,6 @@ class MeetingRecordController extends GetxController titleFocusNode.addListener(_handleTitleFocusChange); } - /// 初始化波形流动动画和数据更新控制器 - void _initializeWaveformAnimation() { - // 1. 数据更新控制器 - 控制数据提交频率 - _dataUpdateController = AnimationController( - duration: Duration(milliseconds: frameIntervalMs), // 250ms 一次数据更新 - vsync: this, - ); - - _dataUpdateAnimation = - Tween(begin: 0.0, end: 1.0).animate(_dataUpdateController); - - // 监听数据更新动画,每个周期结束时提交数据 - _dataUpdateAnimation.addListener(() { - if (!isRecording.value) return; - - // 每个动画周期结束时,才提交一次数据 - if (_dataUpdateController.value >= 1.0) { - _commitAudioFrame(); - - // 重置动画,继续循环 - _dataUpdateController.reset(); - if (isRecording.value) { - _dataUpdateController.forward(); - } - } - }); - - // 2. 波形流动动画控制器 - 控制视觉流动效果 - waveformAnimationController = AnimationController( - duration: Duration(milliseconds: frameIntervalMs), // 与数据更新同步 - vsync: this, - ); - - waveformAnimation = Tween( - begin: 0.0, - end: 1.0, - ).animate(CurvedAnimation( - parent: waveformAnimationController, - curve: Curves.linear, // 线性动画确保匀速流动 - )); - - // 监听动画完成,实现连续循环 - waveformAnimationController.addStatusListener((status) { - if (status == AnimationStatus.completed && isRecording.value) { - waveformAnimationController.reset(); - waveformAnimationController.forward(); - } - }); - } - /// Sets up initial state from navigation arguments void _setupFromArguments() { final Map args = Get.arguments ?? {}; @@ -207,8 +137,7 @@ class MeetingRecordController extends GetxController /// Cleans up resources when controller is disposed void _cleanupResources() { _timer?.cancel(); - _audioFrameTimer?.cancel(); // 清理音频帧定时器 - // AnimationController在onClose中统一清理 + _stopWaveformTimer(); _recognitionSubscription?.cancel(); _recognitionSubscription = null; _audioDataSubscription?.cancel(); @@ -220,6 +149,11 @@ class MeetingRecordController extends GetxController } _asrService.stopRecord(true); isRecording.value = false; + rms.value = 0.0; + _smoothedRms = 0.0; + _latestRms = 0.0; + waveformController.reset(); + waveformController.dispose(); } /// Handles focus changes in title text field @@ -321,8 +255,6 @@ class MeetingRecordController extends GetxController // 1. 实时音频可视化 // 2. 音频质量检测 // 3. 发送到其他服务 - Logger.d("AudioData", "接收到音频数据: ${audioData.length} 字节"); - // 处理音频数据的逻辑 _processAudioData(audioData); }); @@ -333,12 +265,10 @@ class MeetingRecordController extends GetxController newName.value = fullFileName; titleEditingController.text = fullFileName; - // 启动波形动画和音频帧定时器 - _startWaveformAnimation(); - _startAudioFrameTimer(); - // Start hardware components _startHardwareServices(); + _resetWaveform(); + _startWaveformTimer(); startTimer(); } @@ -362,55 +292,59 @@ class MeetingRecordController extends GetxController /// Pauses current recording session Future _pauseRecording() async { await _asrService.pauseRecord(); - _stopWaveformAnimation(); // 暂停时停止动画 - _stopAudioFrameTimer(); // 停止音频帧定时器 + _stopWaveformTimer(); + rms.value = 0.0; pauseTimer(); } /// Resumes paused recording session Future _resumeRecording() async { await _asrService.resumeRecord(); - _startWaveformAnimation(); // 恢复时启动动画 - _startAudioFrameTimer(); // 重启音频帧定时器 + _startWaveformTimer(); startTimer(); } - /// 处理原始Uint8List音频数据 - 只累积,不更新UI,性能优化 + /// 处理原始Uint8List音频数据 void _processAudioData(Uint8List audioData) { if (!isRecording.value) return; - - // 性能优化:不是每个音频包都处理,减少CPU占用 - _audioProcessCounter++; - if (_audioProcessCounter % _audioProcessInterval != 0) { - return; // 跳过这次处理 + final next = _calculateAmplitude(audioData); + if (_smoothedRms == 0.0) { + _smoothedRms = next; + } else { + _smoothedRms = _smoothedRms * 0.8 + next * 0.2; } + rms.value = _smoothedRms; + _latestRms = _smoothedRms; + } - // 将音频数据转换为振幅值并累积到当前帧 - final amplitude = _calculateAmplitude(audioData); - _currentFrameAmplitude += amplitude; - _currentFrameSamples++; + void _resetWaveform() { + waveformController.reset(); + waveformController.updateFrequency = _waveformTick; } - /// 提交音频帧数据到波形显示 - void _commitAudioFrame() { - // 计算当前帧的平均振幅 - double frameAmplitude = 0.0; - if (_currentFrameSamples > 0) { - frameAmplitude = _currentFrameAmplitude / _currentFrameSamples; - } + void _startWaveformTimer() { + _waveformTimer?.cancel(); + _waveformTimer = Timer.periodic(_waveformTick, (_) { + if (!isRecording.value) return; + if (timerStatus.value != TimerStatus.running) return; + _appendWaveSample(_latestRms); + }); + } - // 转换为显示数据 - final newAmplitude = frameAmplitude * 800.0; + void _stopWaveformTimer() { + _waveformTimer?.cancel(); + _waveformTimer = null; + } - // 更新波形数据 - if (waveData.length >= maxVisibleBars) { - waveData.removeAt(0); + void _appendWaveSample(double value) { + final normalized = value.clamp(0.0, 1.0); + final eased = sqrt(normalized); + final data = waveformController.waveData; + data.add(eased); + if (data.length > _maxWaveSamples) { + data.removeRange(0, data.length - _maxWaveSamples); } - waveData.add(newAmplitude); - - // 重置当前帧数据 - _currentFrameAmplitude = 0.0; - _currentFrameSamples = 0; + waveformController.notifyListeners(); } /// 计算音频数据的振幅 @@ -436,48 +370,10 @@ class MeetingRecordController extends GetxController return (rms / 32768.0).clamp(0.0, 1.0); } - /// 启动数据更新控制器 - 替代Timer - void _startAudioFrameTimer() { - _audioFrameTimer?.cancel(); // 清理旧的Timer(如果有) - _audioFrameTimer = null; - - // 启动数据更新控制器 - _dataUpdateController.forward(); - } - - /// 停止数据更新控制器 - void _stopAudioFrameTimer() { - _audioFrameTimer?.cancel(); - _audioFrameTimer = null; - - // 停止数据更新控制器 - _dataUpdateController.stop(); - _dataUpdateController.reset(); - - // 重置当前帧数据和计数器 - _currentFrameAmplitude = 0.0; - _currentFrameSamples = 0; - _audioProcessCounter = 0; // 重置音频处理计数器 - } - - /// 启动波形流动动画 - void _startWaveformAnimation() { - if (isRecording.value && !waveformAnimationController.isAnimating) { - waveformAnimationController.forward(); - } - } - - /// 停止波形动画 - void _stopWaveformAnimation() { - waveformAnimationController.stop(); - waveformAnimationController.reset(); - } - /// Saves recording and cleans up resources Future saveRecording() async { resetTimer(); - _stopWaveformAnimation(); // 停止波形动画 - _stopAudioFrameTimer(); // 停止音频帧定时器 + _stopWaveformTimer(); if (audioType.value != 0) { _bleManager.closeCodec(); } @@ -506,6 +402,10 @@ class MeetingRecordController extends GetxController _resetToDefaultState(); isRecording.value = false; + rms.value = 0.0; + _smoothedRms = 0.0; + _latestRms = 0.0; + _resetWaveform(); } /// Resets controller to initial state @@ -571,15 +471,4 @@ class MeetingRecordController extends GetxController seconds.value = 0; timerStatus.value = TimerStatus.stopped; } - - /// UI HELPERS SECTION /// - - /// Generates mock waveform data for visualization - void generateWaveData() { - waveData.value = List.generate(120, (i) { - final rand = (i % 20) / 20; - final baseHeight = (sin(i / 5) * 0.5 + 0.5) * 25; - return baseHeight + rand * 10; - }); - } } diff --git a/lib/modules/meeting/views/meeting_record_view.dart b/lib/modules/meeting/views/meeting_record_view.dart index d0128b749..8456c1fd6 100644 --- a/lib/modules/meeting/views/meeting_record_view.dart +++ b/lib/modules/meeting/views/meeting_record_view.dart @@ -1,5 +1,5 @@ -import 'dart:async'; -import 'dart:math' as math; +import 'dart:ui' as ui; +import 'package:audio_waveforms/audio_waveforms.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; @@ -108,16 +108,21 @@ class MeetingRecordView extends GetView { // 使用LayoutBuilder获取准确的屏幕宽度 final screenWidth = constraints.maxWidth; - // 初始化最大可见波形条数量 - controller.setMaxVisibleBars(screenWidth); - return Column( children: [ - SizedBox(height: 24.h), + SizedBox(height: 16.h), + Padding( + padding: EdgeInsets.symmetric(horizontal: 16.w), + child: Align( + alignment: Alignment.centerLeft, + child: _buildRecordTypeBadge(isDarkMode), + ), + ), + SizedBox(height: 12.h), // 实时流动波形显示区域 Container( height: 200.h, - margin: EdgeInsets.symmetric(horizontal: 16.w), + margin: EdgeInsets.zero, decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topCenter, @@ -155,12 +160,49 @@ class MeetingRecordView extends GetView { borderRadius: BorderRadius.circular(12.r), child: Stack( children: [ - // 实时流动波形绘制组件 - _WaveformWidget( - controller: controller, - isDarkMode: isDarkMode, - size: Size(screenWidth - 32.w, 200.h), - ), + Obx(() { + final size = Size(screenWidth, 200.h); + final waveColor = + isDarkMode ? Colors.white : Colors.black87; + final shader = ui.Gradient.linear( + const Offset(0, 0), + Offset(size.width, 0), + [ + waveColor.withValues(alpha: 0.0), + waveColor.withValues(alpha: 0.25), + waveColor.withValues(alpha: 0.6), + waveColor.withValues(alpha: 0.95), + ], + const [0.0, 0.55, 0.8, 1.0], + ); + + return Center( + child: AudioWaveforms( + size: size, + recorderController: controller.waveformController, + backgroundColor: Colors.transparent, + waveStyle: WaveStyle( + waveThickness: 1.w, + spacing: 2.w, + waveCap: StrokeCap.round, + showMiddleLine: true, + middleLineColor: Colors.redAccent.withValues( + alpha: controller.timerStatus.value == + TimerStatus.running + ? 0.9 + : 0.0, + ), + middleLineThickness: 1.w, + showTop: true, + showBottom: true, + extendWaveform: true, + // gradient: shader, + waveColor: waveColor, + scaleFactor: 90, + ), + ), + ); + }), // 录音状态指示器 Obx(() { @@ -217,7 +259,7 @@ class MeetingRecordView extends GetView { fontWeight: FontWeight.normal, color: isDarkMode ? Colors.white : Colors.black87, fontFeatures: const [ - FontFeature.tabularFigures() + ui.FontFeature.tabularFigures() ], // 使用等宽数字,避免跳动 ), )), @@ -250,6 +292,7 @@ class MeetingRecordView extends GetView { tooltip: controller.isMarked.value ? 'unmarkFavorite'.tr : 'markFavorite'.tr, + isDarkMode: isDarkMode, ), // 录音按钮 _buildActionButton( @@ -265,6 +308,7 @@ class MeetingRecordView extends GetView { tooltip: controller.timerStatus.value == TimerStatus.running ? 'pauseRecording'.tr : 'startRecording'.tr, + isDarkMode: isDarkMode, ), // 完成按钮 _buildActionButton( @@ -276,6 +320,7 @@ class MeetingRecordView extends GetView { ), radius: 32.w, tooltip: 'finishRecording'.tr, + isDarkMode: isDarkMode, ), ], ), @@ -288,11 +333,14 @@ class MeetingRecordView extends GetView { required Widget child, required double radius, required String tooltip, + required bool isDarkMode, }) { + final Color bgColor = isDarkMode ? const Color(0xFF1E1E1E) : Colors.white; + return Tooltip( message: tooltip, child: Material( - color: Colors.white, + color: bgColor, shape: const CircleBorder(), elevation: 4, child: InkWell( @@ -300,7 +348,7 @@ class MeetingRecordView extends GetView { customBorder: const CircleBorder(), child: CircleAvatar( radius: radius, - backgroundColor: Colors.white, + backgroundColor: bgColor, child: child, ), ), @@ -308,6 +356,60 @@ class MeetingRecordView extends GetView { ); } + Widget _buildRecordTypeBadge(bool isDarkMode) { + return Obx(() { + String label; + IconData icon; + Color color; + + switch (controller.audioType.value) { + case 0: + label = 'liveRecording'.tr; + icon = Icons.mic_rounded; + color = Colors.red; + break; + case 1: + label = 'audioVideoRecording'.tr; + icon = Icons.videocam_rounded; + color = Colors.green; + break; + case 2: + default: + label = 'callRecording'.tr; + icon = Icons.phone_in_talk_rounded; + color = Colors.orange; + break; + } + + return Container( + padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 6.h), + decoration: BoxDecoration( + color: color.withValues(alpha: isDarkMode ? 0.25 : 0.12), + borderRadius: BorderRadius.circular(999.r), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + icon, + size: 18.sp, + color: isDarkMode ? Colors.white : color, + ), + SizedBox(width: 6.w), + Text( + label, + style: TextStyle( + fontSize: 13.sp, + fontWeight: FontWeight.w500, + color: isDarkMode ? Colors.white : Colors.black87, + ), + ), + ], + ), + ); + }); + } + // 底部编辑弹窗 void _bottomSheet(BuildContext context, bool isDarkMode) { Get.bottomSheet( @@ -450,218 +552,3 @@ class MeetingRecordView extends GetView { ); } } - -/// 简化的实时流动波形绘制器 -class RealTimeWaveformPainter extends CustomPainter { - final List waveData; - final bool isDarkMode; - final bool isRecording; - final double animationValue; // 动画值,用于流动效果 - - RealTimeWaveformPainter({ - required this.waveData, - required this.isDarkMode, - required this.isRecording, - this.animationValue = 0.0, - }); - - @override - void paint(Canvas canvas, Size size) { - final centerY = size.height / 2; - - // 绘制中央基准线 - _drawCenterLine(canvas, size, centerY); - - // 只在录音状态下且有波形数据时才绘制波形 - if (isRecording && waveData.isNotEmpty) { - _drawWaveform(canvas, size, centerY); - } - } - - /// 绘制中央基准线 - void _drawCenterLine(Canvas canvas, Size size, double centerY) { - final linePaint = Paint() - ..color = - (isDarkMode ? Colors.white : Colors.black).withValues(alpha: 0.15) - ..strokeWidth = 1.0; - - canvas.drawLine( - Offset(0, centerY), - Offset(size.width, centerY), - linePaint, - ); - } - - /// 绘制简化的流动波形 - void _drawWaveform(Canvas canvas, Size size, double centerY) { - const double barWidth = 3.0; // 波形条宽度 - const double barSpacing = 1.0; // 波形条间距 - const double totalBarWidth = barWidth + barSpacing; - - // 计算可显示的波形条数量 - final maxBars = (size.width / totalBarWidth).floor(); - final visibleBars = waveData.length > maxBars ? maxBars : waveData.length; - - // 计算流动偏移量(从右向左移动) - final flowOffset = animationValue * totalBarWidth; - - // 从右到左绘制波形条 - for (int i = 0; i < visibleBars; i++) { - final dataIndex = waveData.length - 1 - i; - final amplitude = waveData[dataIndex]; - - // 计算波形条的x位置(从右侧开始,向左排列) - final x = size.width - (i + 1) * totalBarWidth + flowOffset; - - // 跳过屏幕外的波形条 - if (x < -barWidth || x > size.width) continue; - - _drawWaveBar( - canvas, x, centerY, amplitude, i.toDouble(), visibleBars.toDouble()); - } - } - - /// 绘制单个波形条 - void _drawWaveBar(Canvas canvas, double x, double centerY, double amplitude, - double index, double totalBars) { - const double barWidth = 2.0; - const double maxHeight = 200.0; - const double minHeight = 4.0; // 最小基础高度 - const double containerPadding = 10.0; // 容器内边距,防止超出边界 - - // 计算可用的最大高度(考虑容器边界) - final availableHeight = (centerY - containerPadding) * 2; // 上下对称 - final effectiveMaxHeight = math.min(maxHeight, availableHeight); - - // 优化波形条高度计算:确保有基础高度 + 振幅变化 - final normalizedAmplitude = (amplitude / 100.0).clamp(0.0, 1.0); - final dynamicHeight = - normalizedAmplitude * (effectiveMaxHeight - minHeight); - final barHeight = minHeight + dynamicHeight; - - // 计算透明度(越新的波形条越不透明) - //final opacity = (1.0 - (index / totalBars) * 0.6).clamp(0.3, 1.0); - - // 创建波形条矩形 - final rect = RRect.fromRectAndRadius( - Rect.fromCenter( - center: Offset(x + barWidth / 2, centerY), - width: barWidth, - height: barHeight, // 使用优化后的高度 - ), - const Radius.circular(1.5), - ); - - // 创建渐变颜色 - final Color baseColor = isDarkMode - ? Colors.grey[500]! // 深灰色 - : Colors.grey[600]!; // 更深灰色 - - final paint = Paint() - ..color = baseColor - ..style = PaintingStyle.fill; - - canvas.drawRRect(rect, paint); - } - - @override - bool shouldRepaint(covariant RealTimeWaveformPainter oldDelegate) { - // 只有在以下情况才重绘 - if (oldDelegate.isDarkMode != isDarkMode || - oldDelegate.isRecording != isRecording) { - return true; - } - - // 数据长度变化才重绘 - if (oldDelegate.waveData.length != waveData.length) { - return true; - } - - // 数据内容变化(比较最后一个值) - if (waveData.isNotEmpty && - oldDelegate.waveData.isNotEmpty && - (waveData.last - oldDelegate.waveData.last).abs() > 0.1) { - return true; - } - - // 动画值每 0.1 变化才重绘(避免每帧都重绘) - return (animationValue - oldDelegate.animationValue).abs() > 0.1; - } -} - -/// 优化的波形Widget,避免双重响应式更新 -class _WaveformWidget extends StatefulWidget { - final MeetingRecordController controller; - final bool isDarkMode; - final Size size; - - const _WaveformWidget({ - required this.controller, - required this.isDarkMode, - required this.size, - }); - - @override - State<_WaveformWidget> createState() => _WaveformWidgetState(); -} - -class _WaveformWidgetState extends State<_WaveformWidget> { - late List _waveData; - late bool _isRecording; - StreamSubscription? _waveDataSubscription; - StreamSubscription? _isRecordingSubscription; - - @override - void initState() { - super.initState(); - _waveData = List.from(widget.controller.waveData); - _isRecording = widget.controller.isRecording.value; - - // 监听 waveData 变化 - _waveDataSubscription = widget.controller.waveData.listen((data) { - if (mounted) { - setState(() { - _waveData = List.from(data); - }); - } - }); - - // 监听 isRecording 变化 - _isRecordingSubscription = widget.controller.isRecording.listen((value) { - if (mounted) { - setState(() { - _isRecording = value; - }); - } - }); - } - - @override - void dispose() { - _waveDataSubscription?.cancel(); - _isRecordingSubscription?.cancel(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return RepaintBoundary( - child: AnimatedBuilder( - animation: widget.controller.waveformAnimation, - builder: (context, child) { - return CustomPaint( - size: widget.size, - painter: RealTimeWaveformPainter( - waveData: _waveData, - isDarkMode: widget.isDarkMode, - isRecording: _isRecording, - animationValue: widget.controller.waveformAnimation.value, - ), - isComplex: true, // 告诉 Flutter 这个绘制较复杂,可缓存 - willChange: false, // 数据不会频繁变化(我们已优化) - ); - }, - ), - ); - } -} From 837b87064495272a5e4216f9a5c7e1cd96dbd76c Mon Sep 17 00:00:00 2001 From: fdp <1286779656@qq.com> Date: Fri, 9 Jan 2026 12:24:16 +0800 Subject: [PATCH 25/27] =?UTF-8?q?=E6=8F=90=E5=89=8D=E5=90=A7=E5=90=88?= =?UTF-8?q?=E6=88=90=E6=95=B0=E6=8D=AE=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../azure_speech/AzureAsrToAsr.kt | 54 +++++++++++++++---- .../azure_speech/AzureSpeechPlugin.kt | 8 +-- .../azure_speech/AzureSpeechPlugin.swift | 8 +-- .../IntegratedSpeechTranslationService.swift | 54 ++++++++++++++----- 4 files changed, 95 insertions(+), 29 deletions(-) diff --git a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrToAsr.kt b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrToAsr.kt index b8e5e3056..070b042ed 100644 --- a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrToAsr.kt +++ b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrToAsr.kt @@ -80,6 +80,36 @@ class IntegratedSpeechTranslationService( // 语音映射缓存 private val voiceCache = ConcurrentHashMap() + + + // TTS合成中的音频缓存 + private var ttsdata: ByteArray = ByteArray(0) + + /** + * 处理合成音频分片(按1280字节对齐) + * 输入的音频数据会追加到缓存;仅当累计长度达到`multiple`的整数倍时, + * 将该整数倍长度的部分通过`onSynthesisAudioGenerated`发送;余数保留在缓存等待下次。 + */ + private fun processSynthesisAudioChunk( + text: String, + incoming: ByteArray, + multiple: Int = 1280 + ) { + if (incoming.isNotEmpty()) { + ttsdata = ttsdata + incoming + } + + val sendLen = (ttsdata.size / multiple) * multiple + if (sendLen > 0) { + val chunk = ttsdata.copyOfRange(0, sendLen) + Log.d(TAG, "按${multiple}字节对齐发送音频: ${chunk.size} 字节,缓存剩余: ${ttsdata.size - sendLen}") + eventCallback?.onSynthesisAudioGenerated(text, chunk) + ttsdata = ttsdata.copyOfRange(sendLen, ttsdata.size) + } else { + Log.d(TAG, "暂未够${multiple}字节,当前缓存: ${ttsdata.size}") + } + } + /** * 服务配置类 */ @@ -399,6 +429,7 @@ class IntegratedSpeechTranslationService( // 合成开始事件 SynthesisStarted.addEventListener { _, _ -> Log.d(TAG, "合成开始事件") + ttsdata = ByteArray(0) serviceState.isSynthesizing.set(true) eventCallback?.onStateChanged("Synthesis", true) } @@ -406,9 +437,11 @@ class IntegratedSpeechTranslationService( // 合成进行中事件 Synthesizing.addEventListener { _, event -> Log.d(TAG, "合成进行中事件") - // 计算进度(简化版) - val progress = 0.5f // 实际应用中可以根据音频数据计算 + // 计算进度(简化版) + val progress = 0.5f // 实际应用中可以根据音频数据计算 eventCallback?.onSynthesisProgress("", progress) + val incoming = event.result.audioData ?: ByteArray(0) + processSynthesisAudioChunk("", incoming, 1280) } // 合成完成事件 @@ -421,6 +454,7 @@ class IntegratedSpeechTranslationService( // 合成取消事件 SynthesisCanceled.addEventListener { _, event -> Log.d(TAG, "合成取消事件") + ttsdata = ByteArray(0) serviceState.isSynthesizing.set(false) val reason = event.result.reason eventCallback?.onError("Synthesis", "语音合成取消: $reason") @@ -605,6 +639,7 @@ class IntegratedSpeechTranslationService( try { Log.d(TAG, "开始语音合成: $text") serviceState.isSynthesizing.set(true) + eventCallback?.onSynthesisStarted(text) val ssml = generateOptimizedSsml(text) @@ -618,12 +653,13 @@ class IntegratedSpeechTranslationService( // 获取音频数据 val audioData = result.audioData - if (audioData != null && audioData.isNotEmpty()) { - // 通过回调返回音频数据 - eventCallback?.onSynthesisAudioGenerated(text, audioData) - Log.d(TAG, "音频数据大小: ${audioData.size} 字节") - } - + // if (audioData != null && audioData.isNotEmpty()) { + // // 通过回调返回音频数据 + // eventCallback?.onSynthesisAudioGenerated(text, audioData) + // Log.d(TAG, "音频数据大小: ${audioData.size} 字节") + // } + eventCallback?.onSynthesisAudioGenerated(text, ttsdata) + ttsdata = ByteArray(0) return audioData } else { Log.e(TAG, "语音合成失败: ${result?.reason}") @@ -1733,4 +1769,4 @@ class VolcanoTranslationServiceImpl : Log.e(TAG, "清理资源失败", e) } } -} \ 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 abc20de31..c5846713c 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 @@ -1027,10 +1027,10 @@ class AzureSpeechPlugin : BleService.Callback, FlutterPlugin { override fun onSynthesisAudioGenerated(text: String, audioData: ByteArray) { FileLogger.d(tag, "语音合成音频生成,文本=${text},音频数据大小=${audioData.size}") // Azure TTS返回的是RIFF WAV格式,需要去除文件头 - val pcmData = extractPcmFromWav(audioData) - if (pcmData.isNotEmpty()) { - FileLogger.d(tag, "提取PCM数据,大小=${pcmData.size}字节") - BleService.writeExternalAudioData(pcmData) + //val pcmData = extractPcmFromWav(audioData) + if (audioData.isNotEmpty()) { + FileLogger.d(tag, "提取PCM数据,大小=${audioData.size}字节") + BleService.writeExternalAudioData(audioData) } else { FileLogger.e(tag, "提取PCM数据失败,音频数据可能不是WAV格式") 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 a3c9cc9b3..0c065cedf 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 @@ -1039,10 +1039,10 @@ private class AstEventCallback: IntegratedSpeechTranslationService.ServiceEventC os_log("语音合成音频生成,文本=%@,音频数据大小=%d", log: plugin.log, type: .info, text, audioData.count) // Azure TTS返回的是RIFF WAV格式,需要去除文件头提取PCM数据 - let pcmData = plugin.extractPcmFromWav(audioData) - if !pcmData.isEmpty { - os_log("提取PCM数据,大小=%d字节", log: plugin.log, type: .info, pcmData.count) - BleService.shared.writeExternalAudioData(data: pcmData) + // let pcmData = plugin.extractPcmFromWav(audioData) + if !audioData.isEmpty { + os_log("提取PCM数据,大小=%d字节", log: plugin.log, type: .info, audioData.count) + BleService.shared.writeExternalAudioData(data: audioData) } else { os_log("提取PCM数据失败,音频数据可能不是WAV格式", log: plugin.log, type: .error) } diff --git a/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/IntegratedSpeechTranslationService.swift b/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/IntegratedSpeechTranslationService.swift index 97db886f4..a404cf89a 100644 --- a/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/IntegratedSpeechTranslationService.swift +++ b/local_plugins/azure_speech/ios/azure_speech/Sources/azure_speech/IntegratedSpeechTranslationService.swift @@ -66,6 +66,9 @@ import os.log // 处理队列 private let processingQueue = DispatchQueue(label: "com.azure.speech.processing", qos: .userInitiated) + // 合成中的音频缓存 + private var ttsBuffer = Data() + // MARK: - Configuration Structures /** @@ -478,6 +481,7 @@ import os.log // 合成开始事件 synthesizer?.addSynthesisStartedEventHandler { [weak self] (synthesizer, event) in guard let self = self else { return } + self.ttsBuffer = Data() os_log("合成开始事件", log: self.log, type: .info) self.serviceState.isSynthesizing = true @@ -487,7 +491,7 @@ import os.log } } - // 合成进行中事件 - 修改为返回音频数据 + // 合成进行中事件 - 增量发送音频分片(按1280字节对齐) synthesizer?.addSynthesizingEventHandler { [weak self] (synthesizer, event) in guard let self = self else { return } // 安全解包audioData @@ -495,8 +499,8 @@ import os.log os_log("合成进行中事件,音频数据为空", log: self.log, type: .debug) return } - os_log("合成进行中事件,音频数据长度: %d bytes", log: self.log, type: .debug, audioData.count) - + self.processSynthesisAudioChunk(text: "", incoming: audioData, multiple: 1280) + os_log("合成进行中事件,累计缓存长度: %d bytes", log: self.log, type: .debug, self.ttsBuffer.count) } // 合成完成事件 @@ -505,16 +509,14 @@ import os.log os_log("合成完成事件", log: self.log, type: .info) // 安全解包audioData - guard let audioData = event.result.audioData else { - os_log("合成完成事件,音频数据为空", log: self.log, type: .debug) - return - } - os_log("合成完成事件,音频数据长度: %d bytes", log: self.log, type: .debug, audioData.count) + + // 发送缓存中的剩余数据(可能非1280对齐的余量) + let remaining = self.ttsBuffer + self.ttsBuffer = Data() DispatchQueue.main.async { - self.serviceState.isSynthesizing = false - // 立即返回当前生成的音频数据 - self.eventCallback?.onSynthesisAudioGenerated(text: "", audioData: audioData) - self.eventCallback?.onStateChanged(component: "Synthesis", isActive: false) + self.serviceState.isSynthesizing = false + self.eventCallback?.onSynthesisAudioGenerated(text: "", audioData: remaining) + self.eventCallback?.onStateChanged(component: "Synthesis", isActive: false) } } @@ -525,6 +527,8 @@ import os.log os_log("合成取消事件", log: self.log, type: .info) self.serviceState.isSynthesizing = false + // 取消时清空缓存,避免脏数据 + self.ttsBuffer = Data() // 修复:移除可选链,因为event.result不是可选类型 let reason = event.result.reason @@ -542,6 +546,32 @@ import os.log } } + /** + * 处理合成音频分片(按multiple字节对齐,默认1280) + * - 参数 text: 正在合成的文本 + * - 参数 incoming: 新到达的音频数据块 + * - 参数 multiple: 对齐字节倍数(例如16000Hz/16bit/mono下常用1280) + * 将incoming追加到缓存,仅当累计长度达到multiple的整数倍时, + * 发送对齐部分;余数继续保留在缓存,等待后续数据到来或合成完成时一次性发送。 + */ + private func processSynthesisAudioChunk(text: String, incoming: Data?, multiple: Int = 1280) { + guard let incoming = incoming, !incoming.isEmpty else { return } + // 追加到缓存 + ttsBuffer.append(incoming) + // 计算可发送的对齐长度 + let sendLen = (ttsBuffer.count / multiple) * multiple + if sendLen > 0 { + let chunk = ttsBuffer.prefix(sendLen) + // 发送对齐部分 + let toSend = Data(chunk) + DispatchQueue.main.async { [weak self] in + self?.eventCallback?.onSynthesisAudioGenerated(text: text, audioData: toSend) + } + // 保留余数 + ttsBuffer = Data(ttsBuffer.suffix(ttsBuffer.count - sendLen)) + } + } + // MARK: - Public Methods /** From 514727f346b169ed25b67cb7db37cd783f1a14f0 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Fri, 9 Jan 2026 16:19:23 +0800 Subject: [PATCH 26/27] =?UTF-8?q?fix(meeting):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E6=93=8D=E4=BD=9C=E6=97=B6=E6=9C=AA=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E5=BD=95=E9=9F=B3=E5=92=8C=E6=A0=87=E9=A2=98=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改返回逻辑,确保在返回前保存录音和标题变更 修复底部弹窗显示时未暂停录音的问题 --- .../meeting_record_controller.dart | 48 +++++++++---------- .../meeting/views/meeting_record_view.dart | 26 +++++----- 2 files changed, 36 insertions(+), 38 deletions(-) diff --git a/lib/modules/meeting/controllers/meeting_record_controller.dart b/lib/modules/meeting/controllers/meeting_record_controller.dart index 277c1c998..e3f867cac 100644 --- a/lib/modules/meeting/controllers/meeting_record_controller.dart +++ b/lib/modules/meeting/controllers/meeting_record_controller.dart @@ -25,7 +25,7 @@ enum TimerStatus { /// 负责会议记录的状态管理、音频处理、语音识别和UI交互 class MeetingRecordController extends GetxController with GetTickerProviderStateMixin { - // Services + // 服务 final AsrService _asrService = Get.find(); final BleManager _bleManager = Get.find(); @@ -45,7 +45,7 @@ class MeetingRecordController extends GetxController final RecorderController waveformController = RecorderController(); - // Transcription content + // 转写内容 final RxString intermediateContent = ''.obs; final RxString finalContent = ''.obs; @@ -57,7 +57,7 @@ class MeetingRecordController extends GetxController late FocusNode titleFocusNode; final Future appDocDir = getApplicationDocumentsDirectory(); - // Timing variables + // 计时变量 Timer? _timer; int _elapsedMilliseconds = 0; int? _lastStartTime; @@ -107,19 +107,19 @@ class MeetingRecordController extends GetxController } } - /// Initializes UI controllers and focus nodes + /// 初始化 UI 控制器和焦点节点 void _initializeComponents() { titleEditingController = TextEditingController(text: fileName.value); titleFocusNode = FocusNode(); titleFocusNode.addListener(_handleTitleFocusChange); } - /// Sets up initial state from navigation arguments + /// 根据路由参数设置初始状态 void _setupFromArguments() { final Map args = Get.arguments ?? {}; audioType.value = args['audioTypes'] ?? 0; - // Set default filename based on audio type + // 根据音频类型设置默认文件名 switch (audioType.value) { case 0: fileName.value = "liveRecording".tr; //对应中文:现场录音 @@ -134,7 +134,7 @@ class MeetingRecordController extends GetxController newName.value = fileName.value; } - /// Cleans up resources when controller is disposed + /// 控制器销毁时清理资源 void _cleanupResources() { _timer?.cancel(); _stopWaveformTimer(); @@ -156,14 +156,14 @@ class MeetingRecordController extends GetxController waveformController.dispose(); } - /// Handles focus changes in title text field + /// 处理标题输入框焦点变化 void _handleTitleFocusChange() { if (!titleFocusNode.hasFocus && isEditingTitle.value) { saveTitleChange(); } } - /// Starts title editing mode + /// 开始标题编辑模式 void startTitleEditing() { isEditingTitle.value = true; titleEditingController.text = fileName.value; @@ -173,7 +173,7 @@ class MeetingRecordController extends GetxController }); } - /// Saves new title and exits editing mode + /// 保存新标题后退出编辑状态 Future saveTitleChange() async { isEditingTitle.value = true; if (isEditingTitle.value) { @@ -183,12 +183,12 @@ class MeetingRecordController extends GetxController } } - /// Toggles visibility of transcribed text content + /// 切换转写文本内容的显示状态 Future toggleTextDisplay() async { showTextContent.toggle(); } - /// Toggles important mark status + /// 切换重要标记状态 void toggleMarked() => isMarked.toggle(); /// 格式化时间为 MM:SS.S 显示格式 @@ -204,7 +204,7 @@ class MeetingRecordController extends GetxController '.${centiseconds.toString()}'; } - /// Starts/resumes recording based on current state + /// 根据当前状态开始或恢复录音 Future toggleRecording() async { // 等待权限请求完成并获取结果 final bool granted = await _requestRecordPermission(); @@ -229,7 +229,7 @@ class MeetingRecordController extends GetxController } } - /// Starts recording session + /// 开始录音会话 Future _startRecording() async { // Prepare storage directory final appDir = await appDocDir; @@ -260,7 +260,7 @@ class MeetingRecordController extends GetxController }); isRecording.value = true; - // Update state + // 更新录音状态 fileName.value = fullFileName; newName.value = fullFileName; titleEditingController.text = fullFileName; @@ -272,7 +272,7 @@ class MeetingRecordController extends GetxController startTimer(); } - /// Activates appropriate hardware service based on audio type + /// 根据音频类型启动对应的硬件服务 void _startHardwareServices() { switch (audioType.value) { case 0: @@ -289,7 +289,7 @@ class MeetingRecordController extends GetxController } } - /// Pauses current recording session + /// 暂停当前录音会话 Future _pauseRecording() async { await _asrService.pauseRecord(); _stopWaveformTimer(); @@ -297,7 +297,7 @@ class MeetingRecordController extends GetxController pauseTimer(); } - /// Resumes paused recording session + /// 恢复已暂停的录音会话 Future _resumeRecording() async { await _asrService.resumeRecord(); _startWaveformTimer(); @@ -370,7 +370,7 @@ class MeetingRecordController extends GetxController return (rms / 32768.0).clamp(0.0, 1.0); } - /// Saves recording and cleans up resources + /// 保存录音并清理相关资源 Future saveRecording() async { resetTimer(); _stopWaveformTimer(); @@ -380,7 +380,7 @@ class MeetingRecordController extends GetxController if (!isRecording.value) return; await _asrService.stopRecord(true); - // Rename file if title was edited + // 如果标题被修改则重命名文件 if (fileName.value != newName.value) { final appDir = await appDocDir; final dir = Directory("${appDir.path}/MeetingAudio/"); @@ -408,7 +408,7 @@ class MeetingRecordController extends GetxController _resetWaveform(); } - /// Resets controller to initial state + /// 将控制器重置到初始状态 void _resetToDefaultState() { switch (audioType.value) { case 0: @@ -427,7 +427,7 @@ class MeetingRecordController extends GetxController isMarked.value = false; } - /// TIMER CONTROL SECTION /// + /// 计时器控制部分 /// /// 启动定时器 void startTimer() { @@ -449,7 +449,7 @@ class MeetingRecordController extends GetxController } } - /// Pauses active timer + /// 暂停当前计时器 void pauseTimer() { if (timerStatus.value == TimerStatus.running) { timerStatus.value = TimerStatus.paused; @@ -462,7 +462,7 @@ class MeetingRecordController extends GetxController } } - /// Resets timer to initial state + /// 将计时器重置到初始状态 void resetTimer() { _timer?.cancel(); _timer = null; diff --git a/lib/modules/meeting/views/meeting_record_view.dart b/lib/modules/meeting/views/meeting_record_view.dart index 8456c1fd6..356fb7565 100644 --- a/lib/modules/meeting/views/meeting_record_view.dart +++ b/lib/modules/meeting/views/meeting_record_view.dart @@ -13,13 +13,11 @@ class MeetingRecordView extends GetView { Widget build(BuildContext context) { final isDarkMode = Theme.of(context).brightness == Brightness.dark; - return PopScope( - onPopInvokedWithResult: (didPop, result) async { - if (didPop) { - // 在返回时执行保存操作 - //controller.saveTitleChange(); - //await controller.saveRecording(); - } + return WillPopScope( + onWillPop: () async { + await controller.saveTitleChange(); + await controller.saveRecording(); + return true; }, child: Scaffold( appBar: AppBar( @@ -29,12 +27,7 @@ class MeetingRecordView extends GetView { color: isDarkMode ? Colors.white : Colors.black, size: 20.sp, ), - onPressed: () async { - // 在返回按钮点击时执行保存操作 - controller.saveTitleChange(); - await controller.saveRecording(); - Get.back(); - }, + onPressed: () => Navigator.of(context).maybePop(), ), title: Obx(() { if (controller.isEditingTitle.value) { @@ -411,7 +404,12 @@ class MeetingRecordView extends GetView { } // 底部编辑弹窗 - void _bottomSheet(BuildContext context, bool isDarkMode) { + void _bottomSheet(BuildContext context, bool isDarkMode) async { + //如果当前计时器在运行,先暂停录音,避免编辑时继续录音 + if (controller.timerStatus.value == TimerStatus.running) { + await controller.toggleRecording(); + } + Get.bottomSheet( Container( padding: EdgeInsets.only( From 75089df6bd040e8af21823018415545a6aafca44 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Fri, 9 Jan 2026 17:11:20 +0800 Subject: [PATCH 27/27] =?UTF-8?q?feat(meeting):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BC=9A=E8=AE=AE=E5=BD=95=E9=9F=B3=E9=80=80=E5=87=BA=E7=A1=AE?= =?UTF-8?q?=E8=AE=A4=E5=AF=B9=E8=AF=9D=E6=A1=86=E5=8F=8A=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E5=BD=95=E9=9F=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实现会议录音页面的退出确认对话框,提供保存并退出、不保存退出和后台继续录音选项 修改控制器逻辑以支持后台录音状态和不同的退出行为 添加多语言支持用于退出对话框的文本显示 禁用页面返回手势以避免误操作 --- lib/core/translations/language/en_us.dart | 6 + lib/core/translations/language/zh_cn.dart | 5 + .../bindings/meeting_record_binding.dart | 4 +- .../meeting_record_controller.dart | 29 ++- .../navigation_bar_bottom_sheet.dart | 18 +- .../meeting/views/meeting_record_view.dart | 223 +++++++++++++++++- lib/routes/app_pages.dart | 1 + 7 files changed, 272 insertions(+), 14 deletions(-) diff --git a/lib/core/translations/language/en_us.dart b/lib/core/translations/language/en_us.dart index 2e340c301..f9fef5ba7 100644 --- a/lib/core/translations/language/en_us.dart +++ b/lib/core/translations/language/en_us.dart @@ -437,6 +437,12 @@ const Map enUS = { 'audioVideoRecording': 'Audio/Video Recording', 'callRecording': 'Call Recording', 'importAudio': 'Import Audio', + 'meetingRecordExitTitle': 'Exit Recording', // 退出录音 + 'meetingRecordExitMessage': 'Choose what to do before leaving', // 请选择离开后的操作 + 'meetingRecordEndAndSave': 'End recording and save', // 结束录音并保存 + 'meetingRecordEndWithoutSave': 'End recording without saving', // 结束录音不保存 + 'meetingRecordContinueInBackground': + 'Continue recording in background', // 后台继续录音 'transcribing': 'Transcribing...', 'summarizing': 'Summarizing...', 'analyzing': 'Analyzing...', diff --git a/lib/core/translations/language/zh_cn.dart b/lib/core/translations/language/zh_cn.dart index aaeecfba8..afb01b8fa 100644 --- a/lib/core/translations/language/zh_cn.dart +++ b/lib/core/translations/language/zh_cn.dart @@ -414,6 +414,11 @@ const Map zhCN = { 'audioVideoRecording': '音、视频录音', 'callRecording': '通话录音', 'importAudio': '导入音频', + 'meetingRecordExitTitle': '退出录音', // 退出录音 + 'meetingRecordExitMessage': '请选择离开后的操作', // 请选择离开后的操作 + 'meetingRecordEndAndSave': '结束录音并保存', // 结束录音并保存 + 'meetingRecordEndWithoutSave': '结束录音不保存', // 结束录音不保存 + 'meetingRecordContinueInBackground': '后台继续录音', // 后台继续录音 'transcribing': '正在转写...', 'summarizing': '正在总结...', 'analyzing': '正在分析...', diff --git a/lib/modules/meeting/bindings/meeting_record_binding.dart b/lib/modules/meeting/bindings/meeting_record_binding.dart index f4880d510..e6f60e6ca 100644 --- a/lib/modules/meeting/bindings/meeting_record_binding.dart +++ b/lib/modules/meeting/bindings/meeting_record_binding.dart @@ -5,7 +5,7 @@ import '../controllers/meeting_record_controller.dart'; class MeetingRecordBinding extends Bindings { @override void dependencies() { - // 延迟注册 MeetingRecordController 控制器 - Get.lazyPut(() => MeetingRecordController()); + Get.put(MeetingRecordController(), + permanent: true); } } diff --git a/lib/modules/meeting/controllers/meeting_record_controller.dart b/lib/modules/meeting/controllers/meeting_record_controller.dart index e3f867cac..ffcf6740c 100644 --- a/lib/modules/meeting/controllers/meeting_record_controller.dart +++ b/lib/modules/meeting/controllers/meeting_record_controller.dart @@ -84,6 +84,14 @@ class MeetingRecordController extends GetxController super.onClose(); } + void applyRouteArgumentsIfIdle() { + if (isEditingTitle.value) return; + if (isRecording.value) return; + if (timerStatus.value != TimerStatus.stopped) return; + _setupFromArguments(); + titleEditingController.text = newName.value; + } + // 请求录音权限 Future _requestRecordPermission() async { try { @@ -147,7 +155,9 @@ class MeetingRecordController extends GetxController if (audioType.value != 0) { _bleManager.closeCodec(); } - _asrService.stopRecord(true); + if (isRecording.value) { + _asrService.stopRecord(true); + } isRecording.value = false; rms.value = 0.0; _smoothedRms = 0.0; @@ -408,6 +418,23 @@ class MeetingRecordController extends GetxController _resetWaveform(); } + Future discardRecording() async { + resetTimer(); + _stopWaveformTimer(); + if (audioType.value != 0) { + _bleManager.closeCodec(); + } + if (isRecording.value) { + await _asrService.stopRecord(false); + } + _resetToDefaultState(); + isRecording.value = false; + rms.value = 0.0; + _smoothedRms = 0.0; + _latestRms = 0.0; + _resetWaveform(); + } + /// 将控制器重置到初始状态 void _resetToDefaultState() { switch (audioType.value) { diff --git a/lib/modules/meeting/views/bottomSheet/navigation_bar_bottom_sheet.dart b/lib/modules/meeting/views/bottomSheet/navigation_bar_bottom_sheet.dart index 6700edd92..e41e7d0aa 100644 --- a/lib/modules/meeting/views/bottomSheet/navigation_bar_bottom_sheet.dart +++ b/lib/modules/meeting/views/bottomSheet/navigation_bar_bottom_sheet.dart @@ -30,10 +30,12 @@ class NavigationBarBottomSheet extends GetView { Colors.red, onTap: () async { Get.back(); - await Get.toNamed(Routes.meetingRecord, arguments: { + final result = await Get.toNamed(Routes.meetingRecord, arguments: { 'audioTypes': 0, }); - controller.addMeetingAudio(); + if (result != 'meeting_record_background') { + controller.addMeetingAudio(); + } }, ), if (controller.meetingController.type == 1) @@ -45,10 +47,12 @@ class NavigationBarBottomSheet extends GetView { onTap: controller.bleManager.isConnected ? () async { Get.back(); - await Get.toNamed(Routes.meetingRecord, arguments: { + final result = await Get.toNamed(Routes.meetingRecord, arguments: { 'audioTypes': 1, }); - controller.addMeetingAudio(); + if (result != 'meeting_record_background') { + controller.addMeetingAudio(); + } } : null, ), @@ -61,10 +65,12 @@ class NavigationBarBottomSheet extends GetView { onTap: controller.bleManager.isConnected ? () async { Get.back(); - await Get.toNamed(Routes.meetingRecord, arguments: { + final result = await Get.toNamed(Routes.meetingRecord, arguments: { 'audioTypes': 2, }); - controller.addMeetingAudio(); + if (result != 'meeting_record_background') { + controller.addMeetingAudio(); + } } : null, ), diff --git a/lib/modules/meeting/views/meeting_record_view.dart b/lib/modules/meeting/views/meeting_record_view.dart index 356fb7565..9c2a74634 100644 --- a/lib/modules/meeting/views/meeting_record_view.dart +++ b/lib/modules/meeting/views/meeting_record_view.dart @@ -6,18 +6,231 @@ import 'package:get/get.dart'; import '../controllers/meeting_record_controller.dart'; import '../../../core/theme/app_colors.dart'; +enum _MeetingRecordExitAction { + saveAndEnd, + endWithoutSave, + continueInBackground, + cancel, +} + class MeetingRecordView extends GetView { const MeetingRecordView({super.key}); + Future<_MeetingRecordExitAction?> _showExitConfirmDialog(bool isDarkMode) { + return Get.dialog<_MeetingRecordExitAction>( + Dialog( + insetPadding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 24.h), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.r), + ), + backgroundColor: isDarkMode ? AppColors.cardBackground : Colors.white, + child: Container( + width: 320.w, + padding: EdgeInsets.all(20.w), + decoration: BoxDecoration( + color: isDarkMode ? AppColors.cardBackground : Colors.white, + borderRadius: BorderRadius.circular(16.r), + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + width: 56.w, + height: 56.w, + decoration: BoxDecoration( + color: (isDarkMode ? Colors.white : Colors.blue) + .withValues(alpha: 0.12), + borderRadius: BorderRadius.circular(28.r), + ), + child: Icon( + Icons.mic_rounded, + size: 28.sp, + color: isDarkMode ? Colors.white : Colors.blue, + ), + ), + SizedBox(height: 14.h), + Text( + 'meetingRecordExitTitle'.tr, // 对应中文:退出录音 + style: TextStyle( + fontSize: 18.sp, + fontWeight: FontWeight.bold, + color: isDarkMode ? Colors.white : Colors.black87, + ), + ), + SizedBox(height: 8.h), + Text( + 'meetingRecordExitMessage'.tr, // 对应中文:请选择离开后的操作 + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 14.sp, + height: 1.4, + color: isDarkMode ? Colors.white70 : Colors.black54, + ), + ), + SizedBox(height: 18.h), + SizedBox( + width: double.infinity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + ElevatedButton( + onPressed: () => Get.back( + result: _MeetingRecordExitAction.saveAndEnd, + ), + style: ElevatedButton.styleFrom( + backgroundColor: + isDarkMode ? AppColors.primary : Colors.blue, + foregroundColor: Colors.white, + padding: EdgeInsets.symmetric(vertical: 12.h), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12.r), + ), + elevation: 0, + ), + child: Text( + 'meetingRecordEndAndSave'.tr, // 对应中文:结束录音并保存 + style: TextStyle( + fontSize: 14.sp, + fontWeight: FontWeight.w600, + ), + ), + ), + SizedBox(height: 10.h), + OutlinedButton( + onPressed: () => Get.back( + result: _MeetingRecordExitAction.continueInBackground, + ), + style: OutlinedButton.styleFrom( + foregroundColor: + isDarkMode ? Colors.white70 : Colors.grey[800], + side: BorderSide( + color: + isDarkMode ? Colors.white30 : Colors.grey[400]!, + ), + padding: EdgeInsets.symmetric(vertical: 12.h), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12.r), + ), + ), + child: Text( + 'meetingRecordContinueInBackground'.tr, // 对应中文:后台继续录音 + style: TextStyle( + fontSize: 14.sp, + fontWeight: FontWeight.w500, + ), + ), + ), + SizedBox(height: 10.h), + OutlinedButton( + onPressed: () => Get.back( + result: _MeetingRecordExitAction.endWithoutSave, + ), + style: OutlinedButton.styleFrom( + foregroundColor: + isDarkMode ? Colors.red[300] : Colors.red[600], + side: BorderSide( + color: + isDarkMode ? Colors.red[300]! : Colors.red[300]!, + ), + padding: EdgeInsets.symmetric(vertical: 12.h), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12.r), + ), + ), + child: Text( + 'meetingRecordEndWithoutSave'.tr, // 对应中文:结束录音不保存 + style: TextStyle( + fontSize: 14.sp, + fontWeight: FontWeight.w500, + ), + ), + ), + SizedBox(height: 10.h), + TextButton( + onPressed: () => + Get.back(result: _MeetingRecordExitAction.cancel), + style: TextButton.styleFrom( + padding: EdgeInsets.symmetric(vertical: 12.h), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12.r), + side: BorderSide( + color: + isDarkMode ? Colors.white24 : Colors.grey[300]!, + ), + ), + ), + child: Text( + 'cancel'.tr, // 对应中文:取消 + style: TextStyle( + fontSize: 14.sp, + fontWeight: FontWeight.w500, + color: isDarkMode ? Colors.white70 : Colors.grey[700], + ), + ), + ), + ], + ), + ), + ], + ), + ), + ), + barrierDismissible: true, + ); + } + @override Widget build(BuildContext context) { final isDarkMode = Theme.of(context).brightness == Brightness.dark; + controller.applyRouteArgumentsIfIdle(); + + return PopScope( + canPop: false, + onPopInvokedWithResult: (didPop, result) async { + if (didPop) return; + + if (!controller.isRecording.value) { + Get.back(); + Future.microtask(() { + if (Get.isRegistered()) { + Get.delete(force: true); + } + }); + return; + } - return WillPopScope( - onWillPop: () async { - await controller.saveTitleChange(); - await controller.saveRecording(); - return true; + final action = await _showExitConfirmDialog(isDarkMode); + if (action == null || action == _MeetingRecordExitAction.cancel) { + return; + } + + switch (action) { + case _MeetingRecordExitAction.saveAndEnd: + await controller.saveTitleChange(); + await controller.saveRecording(); + Get.back(result: 'meeting_record_saved'); + Future.microtask(() { + if (Get.isRegistered()) { + Get.delete(force: true); + } + }); + return; + case _MeetingRecordExitAction.endWithoutSave: + await controller.discardRecording(); + Get.back(result: 'meeting_record_discarded'); + Future.microtask(() { + if (Get.isRegistered()) { + Get.delete(force: true); + } + }); + return; + case _MeetingRecordExitAction.continueInBackground: + await controller.saveTitleChange(); + Get.back(result: 'meeting_record_background'); + return; + case _MeetingRecordExitAction.cancel: + return; + } }, child: Scaffold( appBar: AppBar( diff --git a/lib/routes/app_pages.dart b/lib/routes/app_pages.dart index c9b6ec60c..de6142ab3 100644 --- a/lib/routes/app_pages.dart +++ b/lib/routes/app_pages.dart @@ -237,6 +237,7 @@ abstract class AppPages { name: Routes.meetingRecord, page: () => const MeetingRecordView(), binding: MeetingRecordBinding(), + popGesture: false, transition: Transition.rightToLeft, transitionDuration: Duration(milliseconds: 250), ),