84 changed files with 5667 additions and 909 deletions
@ -0,0 +1,426 @@ |
|||||
|
const Map<String, String> hiIN = { |
||||
|
// 通用 |
||||
|
'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": "पारंपरिक चीनी", |
||||
|
"japanese": "जापानी", |
||||
|
"korean": "कोरियाई", |
||||
|
"french": "फ्रेंच", |
||||
|
"german": "जर्मन", |
||||
|
"russian": "रूसी", |
||||
|
"vietnamese": "वियतनामी", |
||||
|
"italian": "इतालवी", |
||||
|
"hindi": "हिन्दी", |
||||
|
"indonesian": "इंडोनेशियाई", |
||||
|
"thai": "थाई", |
||||
|
"malay": "मलय", |
||||
|
"turkish": "तुर्की", |
||||
|
"polish": "पोलिश", |
||||
|
|
||||
|
// 登录页 |
||||
|
"welcome": "स्वागत है", |
||||
|
"loginTips": |
||||
|
"कृपया अपने फोन नंबर या ईमेल का उपयोग करके साइन इन करें या खाता बनाएं", |
||||
|
"accountNumber": "फोन नंबर या ईमेल", |
||||
|
"verificationCode": "सत्यापन कोड", |
||||
|
"getCode": "कोड प्राप्त करें", |
||||
|
"reacquireAfter": "सेकंड बाद फिर से प्राप्त करें", |
||||
|
"otherWays": "या इससे लॉगिन करें", |
||||
|
"expressConsent": "लॉगिन/पंजीकरण करके, आप सहमत हैं", |
||||
|
"and": " और ", |
||||
|
"userAgreement": "उपयोगकर्ता समझौता", |
||||
|
"privacyPolicy": "गोपनीयता नीति", |
||||
|
'selectCountry': 'देश/क्षेत्र चुनें', |
||||
|
"email": "ईमेल", |
||||
|
"phoneNumber": "फोन नंबर", |
||||
|
"pleaseEnterContactInfo": "कृपया फोन नंबर या ईमेल दर्ज करें", |
||||
|
"invalidEmailFormat": "अमान्य ईमेल प्रारूप", |
||||
|
"invalidPhoneFormat": "अमान्य फोन नंबर प्रारूप", |
||||
|
"tip": "सुझाव", |
||||
|
"pleaseEnterCompleteCode": "कृपया पूरा सत्यापन कोड दर्ज करें", |
||||
|
// 登录错误提示 |
||||
|
"loginFailed": "लॉगिन विफल, कृपया पुनः प्रयास करें", |
||||
|
'pleaseAcceptPrivacyPolicy': |
||||
|
'कृपया पहले गोपनीयता नीति और उपयोगकर्ता समझौते को पढ़ें और स्वीकार करें', |
||||
|
|
||||
|
// 首页 |
||||
|
"deviceStatus": "डिवाइस स्थिति", |
||||
|
"reconnect": "पुनः कनेक्ट करें", |
||||
|
"connectingDevice": "डिवाइस से कनेक्ट हो रहा है...", |
||||
|
"connectedTo": "से कनेक्ट किया गया", |
||||
|
"signal": "सिग्नल", |
||||
|
"deviceId": "डिवाइस आईडी", |
||||
|
"firmwareVersion": "फर्मवेयर संस्करण", |
||||
|
"disconnectedDevice": |
||||
|
"कोई डिवाइस कनेक्ट नहीं है, नीचे दिए गए बटन पर क्लिक करें", |
||||
|
"connectDevice": "डिवाइस कनेक्ट करें", |
||||
|
"topAiExperiences": "शीर्ष AI अनुभव", |
||||
|
"aiAssistant": "AI सहायक", |
||||
|
"aiAssistantInfo": "प्रश्नों और सलाह के लिए 24/7 व्यक्तिगत सलाहकार", |
||||
|
"simultaneousInterpretation": "रीयल-टाइम अनुवाद", |
||||
|
"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': 'ब्लूटूथ बंद है', |
||||
|
|
||||
|
// 发现页 |
||||
|
"searchAi": "AI सुविधाएँ खोजें...", |
||||
|
"exploreSlogan": "स्मार्ट इयरबड्स, अनंत संभावनाएं", |
||||
|
"exploreSlogan1": "बुद्धिमान साथी, अनंत संभावनाएं", |
||||
|
"exploreSlogan2": "स्मार्ट चश्मे, अनंत संभावनाएं", |
||||
|
"exploreAi": "DeepSound द्वारा प्रदान की गई AI सुविधाओं का अन्वेषण करें", |
||||
|
"aiFunction": "AI सुविधाएँ", |
||||
|
"allRoundAssistant": "सर्वांगीण सहायक", |
||||
|
"allRoundAssistantInfo": "विभिन्न समस्याओं को हल करने में मदद करता है", |
||||
|
"simultaneousTranslation": "रीयल-टाइम अनुवाद", |
||||
|
"simultaneousTranslationInfo": "80+ भाषाओं के लिए तत्काल अनुवाद", |
||||
|
"aiGirlfriend": "माता-पिता-बच्चे का बंधन", |
||||
|
"aiGirlfriendInfo": "बुद्धिमान कंपनी, किसी भी समय चैट करें", |
||||
|
"healthConsultant": "बहु-कार्य AI चैट", |
||||
|
"healthConsultantInfo": "अधिक AI चैट सुविधाएँ", |
||||
|
"conferenceAssistant": "व्यापारिक बैठक सहायक", |
||||
|
"conferenceAssistantInfo": "रीयल-टाइम मिनट रिकॉर्डिंग और बहुभाषी अनुवाद", |
||||
|
"studyAssistant": "भाषा सीखने का सहायक", |
||||
|
"studyAssistantInfo": "उच्चारण सुधार और बोलने का अभ्यास", |
||||
|
"travelTranslator": "यात्रा अनुवादक", |
||||
|
"travelTranslatorInfo": "रीयल-टाइम वॉइस अनुवाद और आकर्षण गाइड", |
||||
|
"beSearching": "खोज रहा है:", |
||||
|
"noAssistantFound": "कोई संबंधित AI सहायक नहीं मिला", |
||||
|
"scene": "परिदृश्य", |
||||
|
"youHaveSelected": "आपने चुना है:", |
||||
|
"newFunction": "नई सुविधाएँ", |
||||
|
"youChoseTry": "आपने आज़माने के लिए चुना है", |
||||
|
"aiSinger": "AI गायक मोड", |
||||
|
"aiSingerInfo": |
||||
|
"अपने पसंदीदा कलाकार की आवाज़ में कोई भी गाना गाएं, यहां तक कि अपनी रचनाएं भी", |
||||
|
"popularFunction": "लोकप्रिय सुविधाएँ", |
||||
|
"tryNow": "अभी आज़माएं", |
||||
|
|
||||
|
// 商务会议助手页 |
||||
|
"startMeeting": "बैठक शुरू करें", |
||||
|
'edit': 'संपादित करें', |
||||
|
'delete': 'हटाएं', |
||||
|
'noContent': 'कोई सामग्री नहीं', |
||||
|
'editMeetingTitle': 'बैठक शीर्षक संपादित करें (वैकल्पिक)', |
||||
|
'meetingTitle': 'बैठक शीर्षक (वैकल्पिक)', |
||||
|
'maxCharacters': 'अधिकतम 50 अक्षर', |
||||
|
'meeting': 'बैठक', |
||||
|
'recordingDetails': 'रिकॉर्डिंग विवरण', |
||||
|
'aiSummary': 'AI सारांश', |
||||
|
'meetingTranscript': 'बैठक प्रतिलेख', |
||||
|
|
||||
|
// 设置页 |
||||
|
"premiumMember": "प्रीमियम सदस्यता", |
||||
|
"joinDevice": "कनेक्टेड डिवाइस:", |
||||
|
"accountId": "खाता आईडी:", |
||||
|
"systemSetting": "सिस्टम सेटिंग्स", |
||||
|
"languageSetting": "भाषा सेटिंग्स", |
||||
|
"darkMode": "डार्क मोड", |
||||
|
"darkModeInfo": "लाइट/डार्क थीम के बीच स्विच करें", |
||||
|
"backups": "बैकअप और पुनर्स्थापना", |
||||
|
"backupsInfo": "सेटिंग्स और AI इतिहास का बैकअप", |
||||
|
"lastBackup": "अंतिम बैकअप:", |
||||
|
"privacySettings": "गोपनीयता सेटिंग्स", |
||||
|
"privacySettingsInfo": "डेटा संग्रह और अनुमतियों का प्रबंधन", |
||||
|
"logout": "लॉग आउट", |
||||
|
"logoutTips": "क्या आप वाकई वर्तमान खाते से लॉग आउट करना चाहते हैं?", |
||||
|
"aboutApplication": "के बारे में", |
||||
|
"versions": "संस्करण", |
||||
|
"checkUpdates": "अपडेट जांचें", |
||||
|
"selectLanguage": "भाषा चुनें", |
||||
|
"voiceService": "वॉइस सर्विस", |
||||
|
"voiceServiceInfo": "स्पीच रिकग्निशन और सिंथेसिस सर्विस चुनें", |
||||
|
"selectVoiceService": "वॉइस सर्विस चुनें", |
||||
|
"azureVoiceService": "Azure स्पीच सर्विस", |
||||
|
"azureVoiceServiceInfo": |
||||
|
"माइक्रोसॉफ्ट क्लाउड-आधारित सेवा जो उच्च-गुणवत्ता वाली स्पीच सिंथेसिस और पहचान का समर्थन करती है", |
||||
|
"flutterVoiceService": "स्थानीय वॉइस सर्विस", |
||||
|
"flutterVoiceServiceInfo": |
||||
|
"डिवाइस-स्थानीय वॉइस सर्विस जिसके लिए इंटरनेट की आवश्यकता नहीं है", |
||||
|
'timbreService': 'टिम्बर सर्विस', |
||||
|
'timbreServiceInfo': 'वॉइस सिंथेसिस सर्विस चुनें', |
||||
|
'defaultTimbre': 'डिफ़ॉल्ट टिम्बर', |
||||
|
'microsoftCloudTimbreService': 'माइक्रोसॉफ्ट क्लाउड टिम्बर सर्विस', |
||||
|
'voiceClone': 'वॉइस क्लोन', |
||||
|
'AIsettings': 'AI सेटिंग्स', |
||||
|
'selecttimbre': 'टिम्बर चुनें', |
||||
|
'pleaseRead': 'कृपया पढ़ें', |
||||
|
'completeRecording': 'रिकॉर्डिंग पूरी करें', |
||||
|
'deleteAccount': 'खाता हटाएं', |
||||
|
'deleteAccountTips': |
||||
|
'क्या आप वाकई अपना खाता स्थायी रूप से हटाना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।', |
||||
|
|
||||
|
// 聊天页 |
||||
|
"clearChatHistory": "चैट इतिहास साफ़ करें", |
||||
|
"online": "ऑनलाइन", |
||||
|
"inputMessage": "एक संदेश टाइप करें...", |
||||
|
"imListening": "सुन रहा हूँ...", |
||||
|
"canStartTalking": "आप बोलना शुरू कर सकते हैं", |
||||
|
|
||||
|
// 翻译页 |
||||
|
"selectSourceLanguage": "स्रोत भाषा चुनें", |
||||
|
"selectTargetLanguage": "लक्ष्य भाषा चुनें", |
||||
|
|
||||
|
//编辑个人信息页 |
||||
|
"editProfile": "प्रोफ़ाइल संपादित करें", |
||||
|
"nickname": "उपनाम", |
||||
|
"save": "सहेजें", |
||||
|
|
||||
|
//国家列表 |
||||
|
"邮箱": "ईमेल", |
||||
|
"中国": "चीन", |
||||
|
"美国": "संयुक्त राज्य अमेरिका", |
||||
|
"加拿大": "कनाडा", |
||||
|
"俄罗斯": "रूस", |
||||
|
"英国": "यूनाइटेड किंगडम", |
||||
|
"德国": "जर्मनी", |
||||
|
"意大利": "इटली", |
||||
|
"法国": "फ्रांस", |
||||
|
"西班牙": "स्पेन", |
||||
|
"南非": "दक्षिण अफ्रीका", |
||||
|
"沙特阿拉伯": "सऊदी अरब", |
||||
|
"土耳其": "तुर्की", |
||||
|
"日本": "जापान", |
||||
|
"韩国": "दक्षिण कोरिया", |
||||
|
"新加坡": "सिंगापुर", |
||||
|
"马来西亚": "मलेशिया", |
||||
|
"泰国": "थाईलैंड", |
||||
|
"越南": "वियतनाम", |
||||
|
"印度": "भारत", |
||||
|
"巴基斯坦": "पाकिस्तान", |
||||
|
"菲律宾": "फिलीपींस", |
||||
|
"印度尼西亚": "इंडोनेशिया", |
||||
|
"阿联酋": "संयुक्त अरब अमीरात", |
||||
|
"墨西哥": "मेक्सिको", |
||||
|
"巴西": "ब्राज़ील", |
||||
|
"阿根廷": "अर्जेंटीना", |
||||
|
"澳大利亚": "ऑस्ट्रेलिया", |
||||
|
"新西兰": "न्यूज़ीलैंड", |
||||
|
"中国香港": "हांगकांग, चीन", |
||||
|
"中国澳门": "मकाऊ, चीन", |
||||
|
"中国台湾": "ताइवान, चीन", |
||||
|
"埃及": "मिस्र", |
||||
|
"希腊": "ग्रीस", |
||||
|
"荷兰": "नीदरलैंड", |
||||
|
"比利时": "बेल्जियम", |
||||
|
"匈牙利": "हंगरी", |
||||
|
"罗马尼亚": "रोमानिया", |
||||
|
"瑞士": "स्विट्ज़रलैंड", |
||||
|
"奥地利": "ऑस्ट्रिया", |
||||
|
"丹麦": "डेनमार्क", |
||||
|
"瑞典": "स्वीडन", |
||||
|
"挪威": "नॉर्वे", |
||||
|
"波兰": "पोलैंड", |
||||
|
"秘鲁": "पेरू", |
||||
|
"智利": "चिली", |
||||
|
"哥伦比亚": "कोलंबिया", |
||||
|
"委内瑞拉": "वेनेज़ुएला", |
||||
|
"葡萄牙": "पुर्तगाल", |
||||
|
"卢森堡": "लक्ज़मबर्ग", |
||||
|
"爱尔兰": "आयरलैंड", |
||||
|
"冰岛": "आइसलैंड", |
||||
|
"阿尔巴尼亚": "अल्बानिया", |
||||
|
"马耳他": "माल्टा", |
||||
|
"塞浦路斯": "साइप्रस", |
||||
|
"芬兰": "फिनलैंड", |
||||
|
"保加利亚": "बुल्गारिया", |
||||
|
"立陶宛": "लिथुआनिया", |
||||
|
"拉脱维亚": "लातविया", |
||||
|
"爱沙尼亚": "एस्टोनिया", |
||||
|
"乌克兰": "यूक्रेन", |
||||
|
"塞尔维亚": "सर्बिया", |
||||
|
"克罗地亚": "क्रोएशिया", |
||||
|
"斯洛文尼亚": "स्लोवेनिया", |
||||
|
"捷克": "चेक गणराज्य", |
||||
|
"斯洛伐克": "स्लोवाकिया", |
||||
|
"危地马拉": "ग्वाटेमाला", |
||||
|
"萨尔瓦多": "अल सल्वाडोर", |
||||
|
"洪都拉斯": "होंडुरास", |
||||
|
"尼加拉瓜": "निकारागुआ", |
||||
|
"哥斯达黎加": "कोस्टा रिका", |
||||
|
"巴拿马": "पनामा", |
||||
|
"海地": "हैती", |
||||
|
"玻利维亚": "बोलीविया", |
||||
|
"厄瓜多尔": "इक्वाडोर", |
||||
|
"巴拉圭": "पराग्वे", |
||||
|
"乌拉圭": "उरुग्वे", |
||||
|
"摩洛哥": "मोरक्को", |
||||
|
"阿尔及利亚": "अल्जीरिया", |
||||
|
"突尼斯": "ट्यूनीशिया", |
||||
|
"尼日利亚": "नाइजीरिया", |
||||
|
"加纳": "घाना", |
||||
|
"埃塞俄比亚": "इथियोपिया", |
||||
|
"肯尼亚": "केन्या", |
||||
|
"坦桑尼亚": "तंज़ानिया", |
||||
|
"乌干达": "युगांडा", |
||||
|
"孟加拉国": "बांग्लादेश", |
||||
|
"以色列": "इज़राइल", |
||||
|
"黎巴嫩": "लेबनान", |
||||
|
"约旦": "जॉर्डन", |
||||
|
"伊拉克": "इराक", |
||||
|
"科威特": "कुवैत", |
||||
|
"巴林": "बहरीन", |
||||
|
"卡塔尔": "कतर", |
||||
|
"阿曼": "ओमान", |
||||
|
"阿富汗": "अफगानिस्तान", |
||||
|
"斯里兰卡": "श्रीलंका", |
||||
|
"缅甸": "म्यांमार", |
||||
|
"尼泊尔": "नेपाल", |
||||
|
"蒙古": "मंगोलिया", |
||||
|
"柬埔寨": "कंबोडिया", |
||||
|
"老挝": "लाओस", |
||||
|
"文莱": "ब्रुनेई", |
||||
|
"东帝汶": "पूर्वी तिमोर", |
||||
|
"斐济": "फिजी", |
||||
|
"所罗门群岛": "सोलोमन द्वीप", |
||||
|
|
||||
|
// Personal Assistant Emma |
||||
|
"personalAssistantName": "एम्मा", |
||||
|
"personalAssistantDescription": |
||||
|
"नमस्ते, मैं एम्मा हूँ, एक बहुमुखी AI सहायक। चाहे वह कार्य योजना, अध्ययन सलाह, जीवन व्यवस्था, या कोई अन्य मुद्दे हों, मैं मदद करने में खुशी होगी। आइए दक्षता में सुधार करें और लक्ष्यों को एक साथ प्राप्त करें!", |
||||
|
"assistantTag": "सहायक", |
||||
|
"personalAssistantWelcome": |
||||
|
"नमस्ते! मैं एम्मा हूँ, और मैं आपकी व्यक्तिगत सहायक बनकर खुश हूँ। मैं आपको समय प्रबंधन, लक्ष्य योजना, सूचना संगठन आदि जैसे विभिन्न कार्यों में मदद कर सकती हूँ। मैं आपकी किस प्रकार सहायता कर सकती हूँ?", |
||||
|
"personalAssistantVoiceWelcome": "मैं यहाँ हूँ!", |
||||
|
|
||||
|
// 同声传译 Lucy |
||||
|
"interpreterName": "साथ-साथ अनुवादक", |
||||
|
"interpreterDescription": |
||||
|
"नमस्ते! मैं लूसी हूँ, एक पेशेवर अंग्रेजी-चीनी अनुवादक जो बैठकों, व्याख्यानों और वार्तालापों के लिए रीयल-टाइम अनुवाद में विशेषज्ञ हूँ, जिससे संचार बाधा-मुक्त हो जाता है।", |
||||
|
"interpreterTag": "अनुवाद", |
||||
|
"interpreterWelcome": |
||||
|
"नमस्ते सभी! मैं लूसी हूँ, आपकी साथ-साथ अनुवादक। मैं आपके लिए चीनी और अंग्रेजी के बीच अनुवाद करूंगी। जब आप चीनी बोलते हैं, तो मैं अंग्रेजी में अनुवाद करूंगी; जब आप अंग्रेजी बोलते हैं, तो मैं चीनी में अनुवाद करूंगी। आइए हमारा अनुवाद सत्र शुरू करें!", |
||||
|
|
||||
|
// 亲子陪伴 芯愿 |
||||
|
"companionName": "शिनयुआन", |
||||
|
"companionDescription": |
||||
|
"मैं शिनयुआन हूँ, आपका समर्पित माता-पिता-बच्चे का साथी, कोमल और समझदार। चाहे आप चैट करना चाहते हों, चिंताएं साझा करना चाहते हों, या साथ की जरूरत हो, मैं हमेशा आपके साथ रहूंगी।", |
||||
|
"companionTag": "भावनात्मक", |
||||
|
"companionWelcome": |
||||
|
"नमस्ते! आखिरकार आपसे मिलकर खुशी हुई! मैं शिनयुआन हूँ, आपकी समर्पित माता-पिता-बच्चे की साथी। आपका दिन कैसा रहा? क्या कोई ऐसी बात है जिसे आप मेरे साथ साझा करना चाहेंगे? मैं हमेशा यहाँ हूँ, आपके विचारों को सुनने के लिए तैयार।", |
||||
|
"companionVoiceWelcome": "मैं आपके साथ हूँ!", |
||||
|
|
||||
|
// 多功能AI聊天 吴小江 |
||||
|
"healthAdvisorName": "AI चैट सहायक वू", |
||||
|
"healthAdvisorDescription": |
||||
|
"मैं वू हूँ, आपको विभिन्न AI चैट सुविधाएँ प्रदान करने के लिए तैयार हूँ।", |
||||
|
"healthAdvisorTag": "चैट", |
||||
|
"healthAdvisorWelcome": |
||||
|
"नमस्ते, मैं वू हूँ। मैं आपको AI चैट सुविधाओं के साथ सहायता करने में खुश हूँ। आज मैं आपकी कैसे मदद कर सकता हूँ?", |
||||
|
"healthAdvisorVoiceWelcome": "मैं यहाँ हूँ!", |
||||
|
|
||||
|
// Translation History |
||||
|
"noTranslationHistory": "कोई अनुवाद इतिहास नहीं", |
||||
|
"clearHistory": "इतिहास साफ़ करें", |
||||
|
"clearHistoryConfirm": |
||||
|
"क्या आप वाकई सभी अनुवाद इतिहास को साफ़ करना चाहते हैं? यह क्रिया पूर्ववत नहीं की जा सकती है।", |
||||
|
"translationHistory": "अनुवाद इतिहास", |
||||
|
|
||||
|
// User Feedback Page |
||||
|
"feedback": "प्रतिक्रिया", |
||||
|
'feedbackInfo': 'प्रतिक्रिया या सुझाव प्रदान करें', |
||||
|
'feedbackDescription': 'कृपया अपनी समस्या या सुझाव का वर्णन करें', |
||||
|
'feedbackHint': 'कृपया अपनी प्रतिक्रिया दर्ज करें...', |
||||
|
'feedbackRequired': 'प्रतिक्रिया सामग्री आवश्यक है', |
||||
|
'contactInfo': 'संपर्क जानकारी', |
||||
|
'contactHint': 'ईमेल/फोन, ताकि हम आपसे संपर्क कर सकें', |
||||
|
'submit': 'जमा करें', |
||||
|
'feedbackSubmitSuccess': 'प्रतिक्रिया सफलतापूर्वक जमा की गई, धन्यवाद!', |
||||
|
'feedbackSubmitFailed': |
||||
|
'प्रतिक्रिया जमा करने में विफल, कृपया बाद में पुनः प्रयास करें', |
||||
|
|
||||
|
// Language names |
||||
|
"中文(简体)": "चीनी (सरलीकृत)", |
||||
|
"中文(繁体)": "चीनी (पारंपरिक)", |
||||
|
"中文(香港繁体)": "चीनी (हांगकांग)", |
||||
|
"英语": "अंग्रेज़ी", |
||||
|
"日语": "जापानी", |
||||
|
"韩语": "कोरियाई", |
||||
|
"法语": "फ्रेंच", |
||||
|
"西班牙语": "स्पेनिश", |
||||
|
"葡萄牙语": "पुर्तगाली", |
||||
|
"意大利语": "इतालवी", |
||||
|
"德语": "जर्मन", |
||||
|
"俄语": "रूसी", |
||||
|
"波兰语": "पोलिश", |
||||
|
"荷兰语": "डच", |
||||
|
"瑞典语": "स्वीडिश", |
||||
|
"捷克语": "चेक", |
||||
|
"现代希腊语": "आधुनिक ग्रीक", |
||||
|
"罗马尼亚语": "रोमानियाई", |
||||
|
"匈牙利语": "हंगेरियन", |
||||
|
"乌克兰语": "यूक्रेनी", |
||||
|
"丹麦语": "डेनिश", |
||||
|
"芬兰语": "फिनिश", |
||||
|
"挪威语": "नॉर्वेजियन", |
||||
|
"克罗地亚语": "क्रोएशियाई", |
||||
|
"加泰隆语": "कैटलन", |
||||
|
"阿拉伯语": "अरबी", |
||||
|
"泰语": "थाई", |
||||
|
"越南语": "वियतनामी", |
||||
|
"印尼语": "इंडोनेशियाई", |
||||
|
"印地语": "हिंदी", |
||||
|
"土耳其语": "तुर्की", |
||||
|
"马来语": "मलय", |
||||
|
"孟加拉语": "बंगाली", |
||||
|
"泰米尔语": "तमिल", |
||||
|
"泰卢固语": "तेलुगु", |
||||
|
"马拉提语": "मराठी", |
||||
|
"乌尔都语": "उर्दू", |
||||
|
"波斯语": "फारसी", |
||||
|
"斯瓦希里语": "स्वाहिली", |
||||
|
}; |
||||
@ -0,0 +1,426 @@ |
|||||
|
const Map<String, String> idID = { |
||||
|
// Umum (通用) |
||||
|
'continue': 'Lanjutkan', |
||||
|
'confirm': 'Konfirmasi', |
||||
|
'cancel': 'Batal', |
||||
|
'retry': 'Coba Lagi', |
||||
|
'error': 'Kesalahan', |
||||
|
'success': 'Berhasil', |
||||
|
'connected': 'Terhubung', |
||||
|
'connecting': 'Menghubungkan...', |
||||
|
'connectionFailure': 'Koneksi Gagal', |
||||
|
'unconnected': 'Terputus', |
||||
|
'search': 'Cari', |
||||
|
"requestCancellation": "Pembatalan permintaan", |
||||
|
"connectionTimeout": "Waktu koneksi habis", |
||||
|
"requestTimeout": "Waktu permintaan habis", |
||||
|
"responseTimeout": "Waktu respons habis", |
||||
|
"unknownError": "Kesalahan tidak diketahui", |
||||
|
|
||||
|
// Halaman Pembuka (启动页) |
||||
|
"slogan": "Hubungkan Dunia, Melampaui Suara", |
||||
|
"sloganInfo": "Ahli Suara AI · Kapan Saja, Di Mana Saja", |
||||
|
|
||||
|
// Navigasi Bawah (底部导航) |
||||
|
"home": "Beranda", |
||||
|
"explore": "Jelajahi", |
||||
|
"settings": "Pengaturan", |
||||
|
|
||||
|
// Bahasa (语言) |
||||
|
"followingSystem": "Mengikuti sistem", |
||||
|
"chinese": "Bahasa Mandarin", |
||||
|
"english": "Bahasa Inggris", |
||||
|
"spanish": "Bahasa Spanyol", |
||||
|
"portuguese": "Bahasa Portugis", |
||||
|
"traditionalChinese": "Mandarin Tradisional", |
||||
|
"japanese": "Bahasa Jepang", |
||||
|
"korean": "Bahasa Korea", |
||||
|
"french": "Bahasa Prancis", |
||||
|
"german": "Bahasa Jerman", |
||||
|
"russian": "Bahasa Rusia", |
||||
|
"vietnamese": "Bahasa Vietnam", |
||||
|
"italian": "Bahasa Italia", |
||||
|
"hindi": "Bahasa Hindi", // 添加印地语 |
||||
|
"indonesian": "Bahasa Indonesia", // 添加印尼语 |
||||
|
"thai": "Bahasa Thai", |
||||
|
"malay": "Bahasa Melayu", |
||||
|
"turkish": "Bahasa Turki", |
||||
|
"polish": "Bahasa Polandia", |
||||
|
|
||||
|
// Halaman Login (登录页) |
||||
|
"welcome": "Selamat Datang", |
||||
|
"loginTips": |
||||
|
"Silakan masuk atau buat akun menggunakan nomor telepon atau email Anda", |
||||
|
"accountNumber": "Nomor telepon atau email", |
||||
|
"verificationCode": "Kode Verifikasi", |
||||
|
"getCode": "Dapatkan Kode", |
||||
|
"reacquireAfter": "detik Dapatkan lagi setelah", |
||||
|
"otherWays": "Atau masuk dengan", |
||||
|
"expressConsent": "Dengan masuk/mendaftar, Anda menyetujui", |
||||
|
"and": " dan ", |
||||
|
"userAgreement": "Perjanjian Pengguna", |
||||
|
"privacyPolicy": "Kebijakan Privasi", |
||||
|
'selectCountry': 'Pilih Negara/Wilayah', |
||||
|
"email": "email", |
||||
|
"phoneNumber": "nomor telepon", |
||||
|
"pleaseEnterContactInfo": "Silakan masukkan nomor telepon atau email", |
||||
|
"invalidEmailFormat": "Format email tidak valid", |
||||
|
"invalidPhoneFormat": "Format nomor telepon tidak valid", |
||||
|
"tip": "Tip", |
||||
|
"pleaseEnterCompleteCode": "Silakan masukkan kode verifikasi lengkap", |
||||
|
// Pesan Kesalahan Login (登录错误提示) |
||||
|
"loginFailed": "Login gagal, silakan coba lagi", |
||||
|
'pleaseAcceptPrivacyPolicy': |
||||
|
'Silakan baca dan setujui Kebijakan Privasi dan Perjanjian Pengguna terlebih dahulu', |
||||
|
|
||||
|
// Halaman Beranda (首页) |
||||
|
"deviceStatus": "Status Perangkat", |
||||
|
"reconnect": "Hubungkan Kembali", |
||||
|
"connectingDevice": "Menghubungkan ke perangkat...", |
||||
|
"connectedTo": "Terhubung ke", |
||||
|
"signal": "Sinyal", |
||||
|
"deviceId": "ID Perangkat", |
||||
|
"firmwareVersion": "Versi Firmware", |
||||
|
"disconnectedDevice": "Tidak ada perangkat terhubung, klik tombol di bawah", |
||||
|
"connectDevice": "Hubungkan Perangkat", |
||||
|
"topAiExperiences": "Pengalaman AI Teratas", |
||||
|
"aiAssistant": "Asisten AI", |
||||
|
"aiAssistantInfo": "Konsultan pribadi 24/7 untuk pertanyaan dan saran", |
||||
|
"simultaneousInterpretation": "Interpretasi Real-time", |
||||
|
"simultaneousInterpretationInfo": "Terjemahan real-time untuk 80+ bahasa", |
||||
|
"aiCompanion": "Ikatan orang tua-anak", |
||||
|
"aiCompanionInfo": "Memahami Anda dan memberikan pendampingan hangat", |
||||
|
"homeSlogan": "Hubungkan Dunia, Melampaui Suara", |
||||
|
"turnEarphones": |
||||
|
"Silakan buka casing earphone dan pasang earbud di telinga Anda", |
||||
|
"currentlyConnected": "Saat ini terhubung:", |
||||
|
"unsystemSetup": "Buka Pengaturan Sistem", |
||||
|
"talkLater": "Ingatkan Nanti", |
||||
|
"initializing": "Menginisialisasi...", |
||||
|
"bluetoothInitializationFailure": "Inisialisasi layanan Bluetooth gagal", |
||||
|
"checkingPermissions": "Memeriksa izin...", |
||||
|
"lackPermissions": "Izin Bluetooth diperlukan", |
||||
|
"searchingDevice": "Mencari perangkat...", |
||||
|
"findConnectedDevice": "Menemukan perangkat terhubung", |
||||
|
"notFound": "Tidak ditemukan perangkat Bluetooth yang terhubung", |
||||
|
"initializationFailure": "Inisialisasi gagal", |
||||
|
"connectedDevice": "Terhubung ke perangkat:", |
||||
|
"failedRefreshDevice": "Gagal menyegarkan perangkat", |
||||
|
"noDeviceFound": "Tidak ditemukan perangkat terhubung", |
||||
|
"failedDeviceInformation": "Gagal mendapatkan informasi perangkat", |
||||
|
"unknownEquipment": "Perangkat Tidak Dikenal", |
||||
|
"zeroSignal": "Tidak Ada Sinyal", |
||||
|
"good": "Baik", |
||||
|
"fine": "Bagus", |
||||
|
"excellent": "Sangat Baik", |
||||
|
"unknown": "Tidak diketahui", |
||||
|
'bluetoothTurnedOff': 'Bluetooth dimatikan, silakan nyalakan', |
||||
|
'bluetoothOff': 'bluetooth mati', |
||||
|
|
||||
|
// Halaman Jelajahi (发现页) |
||||
|
"searchAi": "Cari fitur AI...", |
||||
|
"exploreSlogan": "Earbud Cerdas, Kemungkinan Tak Terbatas", |
||||
|
"exploreSlogan1": "Pendamping Cerdas, Kemungkinan Tak Terbatas", |
||||
|
"exploreSlogan2": "Kacamata Cerdas, Kemungkinan Tak Terbatas", |
||||
|
"exploreAi": "Jelajahi fitur AI yang disediakan oleh DeepSound", |
||||
|
"aiFunction": "Fitur AI", |
||||
|
"allRoundAssistant": "Asisten Serba Bisa", |
||||
|
"allRoundAssistantInfo": "Membantu menyelesaikan berbagai masalah", |
||||
|
"simultaneousTranslation": "Terjemahan Real-time", |
||||
|
"simultaneousTranslationInfo": "Terjemahan instan untuk 80+ bahasa", |
||||
|
"aiGirlfriend": "Ikatan orang tua-anak", |
||||
|
"aiGirlfriendInfo": "Perusahaan cerdas, mengobrol kapan saja", |
||||
|
"healthConsultant": "Obrolan AI multi-fungsi", |
||||
|
"healthConsultantInfo": "Lebih banyak fitur obrolan AI", |
||||
|
"conferenceAssistant": "Asisten Rapat Bisnis", |
||||
|
"conferenceAssistantInfo": |
||||
|
"Perekaman notulen real-time dan terjemahan multibahasa", |
||||
|
"studyAssistant": "Asisten Belajar Bahasa", |
||||
|
"studyAssistantInfo": "Koreksi pengucapan dan latihan berbicara", |
||||
|
"travelTranslator": "Penerjemah Perjalanan", |
||||
|
"travelTranslatorInfo": "Terjemahan suara real-time dan panduan objek wisata", |
||||
|
"beSearching": "Mencari:", |
||||
|
"noAssistantFound": "Tidak ditemukan asisten AI yang sesuai", |
||||
|
"scene": "Skenario", |
||||
|
"youHaveSelected": "Anda telah memilih:", |
||||
|
"newFunction": "Fitur Baru", |
||||
|
"youChoseTry": "Anda telah memilih untuk mencoba", |
||||
|
"aiSinger": "Mode Penyanyi AI", |
||||
|
"aiSingerInfo": |
||||
|
"Nyanyikan lagu apa pun dengan suara artis favorit Anda, bahkan kreasi Anda sendiri", |
||||
|
"popularFunction": "Fitur Populer", |
||||
|
"tryNow": "Coba Sekarang", |
||||
|
|
||||
|
// Halaman Asisten Rapat Bisnis (商务会议助手页) |
||||
|
"startMeeting": "Mulai Rapat", |
||||
|
'edit': 'Edit', |
||||
|
'delete': 'Hapus', |
||||
|
'noContent': 'Tidak Ada Konten', |
||||
|
'editMeetingTitle': 'Edit Judul Rapat (Opsional)', |
||||
|
'meetingTitle': 'Judul Rapat (Opsional)', |
||||
|
'maxCharacters': 'Maksimal 50 karakter', |
||||
|
'meeting': 'Rapat', |
||||
|
'recordingDetails': 'Detail Rekaman', |
||||
|
'aiSummary': 'Ringkasan AI', |
||||
|
'meetingTranscript': 'Transkrip Rapat', |
||||
|
|
||||
|
// Halaman Pengaturan (设置页) |
||||
|
"premiumMember": "Keanggotaan Premium", |
||||
|
"joinDevice": "Perangkat terhubung:", |
||||
|
"accountId": "ID Akun:", |
||||
|
"systemSetting": "Pengaturan Sistem", |
||||
|
"languageSetting": "Pengaturan Bahasa", |
||||
|
"darkMode": "Mode Gelap", |
||||
|
"darkModeInfo": "Beralih antara tema terang/gelap", |
||||
|
"backups": "Cadangkan & Pulihkan", |
||||
|
"backupsInfo": "Cadangkan pengaturan dan riwayat AI", |
||||
|
"lastBackup": "Cadangan terakhir:", |
||||
|
"privacySettings": "Pengaturan Privasi", |
||||
|
"privacySettingsInfo": "Kelola pengumpulan data dan izin", |
||||
|
"logout": "Keluar", |
||||
|
"logoutTips": "Apakah Anda yakin ingin keluar dari akun saat ini?", |
||||
|
"aboutApplication": "Tentang", |
||||
|
"versions": "Versi", |
||||
|
"checkUpdates": "Periksa Pembaruan", |
||||
|
"selectLanguage": "Pilih Bahasa", |
||||
|
"voiceService": "Layanan Suara", |
||||
|
"voiceServiceInfo": "Pilih layanan pengenalan dan sintesis ucapan", |
||||
|
"selectVoiceService": "Pilih Layanan Suara", |
||||
|
"azureVoiceService": "Layanan Ucapan Azure", |
||||
|
"azureVoiceServiceInfo": |
||||
|
"Layanan berbasis cloud Microsoft yang mendukung sintesis dan pengenalan ucapan berkualitas tinggi", |
||||
|
"flutterVoiceService": "Layanan suara lokal", |
||||
|
"flutterVoiceServiceInfo": |
||||
|
"Layanan suara lokal perangkat tanpa perlu internet", |
||||
|
'timbreService': 'Layanan Timbre', |
||||
|
'timbreServiceInfo': 'Pilih layanan sintesis suara', |
||||
|
'defaultTimbre': 'Timbre Default', |
||||
|
'microsoftCloudTimbreService': 'Layanan Timbre Cloud Microsoft', |
||||
|
'voiceClone': 'Klon Suara', |
||||
|
'AIsettings': 'Pengaturan AI', |
||||
|
'selecttimbre': 'Pilih Timbre', |
||||
|
'pleaseRead': 'Harap Baca', |
||||
|
'completeRecording': 'Selesaikan Perekaman', |
||||
|
'deleteAccount': 'Hapus Akun', |
||||
|
'deleteAccountTips': |
||||
|
'Apakah Anda yakin ingin menghapus akun Anda secara permanen? Tindakan ini tidak dapat dibatalkan.', |
||||
|
|
||||
|
// Halaman Obrolan (聊天页) |
||||
|
"clearChatHistory": "Hapus Riwayat Obrolan", |
||||
|
"online": "Online", |
||||
|
"inputMessage": "Ketik pesan...", |
||||
|
"imListening": "Mendengarkan...", |
||||
|
"canStartTalking": "Anda boleh mulai berbicara", |
||||
|
|
||||
|
// Halaman Terjemahan (翻译页) |
||||
|
"selectSourceLanguage": "Pilih Bahasa Sumber", |
||||
|
"selectTargetLanguage": "Pilih Bahasa Target", |
||||
|
|
||||
|
// Halaman Edit Profil (编辑个人信息页) |
||||
|
"editProfile": "Edit Profil", |
||||
|
"nickname": "Nama Panggilan", |
||||
|
"save": "Simpan", |
||||
|
|
||||
|
// Daftar Negara (国家列表) |
||||
|
"邮箱": "Email", |
||||
|
"中国": "Tiongkok", |
||||
|
"美国": "Amerika Serikat", |
||||
|
"加拿大": "Kanada", |
||||
|
"俄罗斯": "Rusia", |
||||
|
"英国": "Britania Raya", |
||||
|
"德国": "Jerman", |
||||
|
"意大利": "Italia", |
||||
|
"法国": "Prancis", |
||||
|
"西班牙": "Spanyol", |
||||
|
"南非": "Afrika Selatan", |
||||
|
"沙特阿拉伯": "Arab Saudi", |
||||
|
"土耳其": "Turki", |
||||
|
"日本": "Jepang", |
||||
|
"韩国": "Korea Selatan", |
||||
|
"新加坡": "Singapura", |
||||
|
"马来西亚": "Malaysia", |
||||
|
"泰国": "Thailand", |
||||
|
"越南": "Vietnam", |
||||
|
"印度": "India", |
||||
|
"巴基斯坦": "Pakistan", |
||||
|
"菲律宾": "Filipina", |
||||
|
"印度尼西亚": "Indonesia", |
||||
|
"阿联酋": "Uni Emirat Arab", |
||||
|
"墨西哥": "Meksiko", |
||||
|
"巴西": "Brasil", |
||||
|
"阿根廷": "Argentina", |
||||
|
"澳大利亚": "Australia", |
||||
|
"新西兰": "Selandia Baru", |
||||
|
"中国香港": "Hong Kong, Tiongkok", |
||||
|
"中国澳门": "Makau, Tiongkok", |
||||
|
"中国台湾": "Taiwan, Tiongkok", |
||||
|
"埃及": "Mesir", |
||||
|
"希腊": "Yunani", |
||||
|
"荷兰": "Belanda", |
||||
|
"比利时": "Belgia", |
||||
|
"匈牙利": "Hungaria", |
||||
|
"罗马尼亚": "Rumania", |
||||
|
"瑞士": "Swiss", |
||||
|
"奥地利": "Austria", |
||||
|
"丹麦": "Denmark", |
||||
|
"瑞典": "Swedia", |
||||
|
"挪威": "Norwegia", |
||||
|
"波兰": "Polandia", |
||||
|
"秘鲁": "Peru", |
||||
|
"智利": "Chili", |
||||
|
"哥伦比亚": "Kolombia", |
||||
|
"委内瑞拉": "Venezuela", |
||||
|
"葡萄牙": "Portugal", |
||||
|
"卢森堡": "Luksemburg", |
||||
|
"爱尔兰": "Irlandia", |
||||
|
"冰岛": "Islandia", |
||||
|
"阿尔巴尼亚": "Albania", |
||||
|
"马耳他": "Malta", |
||||
|
"塞浦路斯": "Siprus", |
||||
|
"芬兰": "Finlandia", |
||||
|
"保加利亚": "Bulgaria", |
||||
|
"立陶宛": "Lituania", |
||||
|
"拉脱维亚": "Latvia", |
||||
|
"爱沙尼亚": "Estonia", |
||||
|
"乌克兰": "Ukraina", |
||||
|
"塞尔维亚": "Serbia", |
||||
|
"克罗地亚": "Kroasia", |
||||
|
"斯洛文尼亚": "Slovenia", |
||||
|
"捷克": "Republik Ceko", |
||||
|
"斯洛伐克": "Slowakia", |
||||
|
"危地马拉": "Guatemala", |
||||
|
"萨尔瓦多": "El Salvador", |
||||
|
"洪都拉斯": "Honduras", |
||||
|
"尼加拉瓜": "Nikaragua", |
||||
|
"哥斯达黎加": "Kosta Rika", |
||||
|
"巴拿马": "Panama", |
||||
|
"海地": "Haiti", |
||||
|
"玻利维亚": "Bolivia", |
||||
|
"厄瓜多尔": "Ekuador", |
||||
|
"巴拉圭": "Paraguay", |
||||
|
"乌拉圭": "Uruguay", |
||||
|
"摩洛哥": "Maroko", |
||||
|
"阿尔及利亚": "Aljazair", |
||||
|
"突尼斯": "Tunisia", |
||||
|
"尼日利亚": "Nigeria", |
||||
|
"加纳": "Ghana", |
||||
|
"埃塞俄比亚": "Etiopia", |
||||
|
"肯尼亚": "Kenya", |
||||
|
"坦桑尼亚": "Tanzania", |
||||
|
"乌干达": "Uganda", |
||||
|
"孟加拉国": "Bangladesh", |
||||
|
"以色列": "Israel", |
||||
|
"黎巴嫩": "Lebanon", |
||||
|
"约旦": "Yordania", |
||||
|
"伊拉克": "Irak", |
||||
|
"科威特": "Kuwait", |
||||
|
"巴林": "Bahrain", |
||||
|
"卡塔尔": "Qatar", |
||||
|
"阿曼": "Oman", |
||||
|
"阿富汗": "Afghanistan", |
||||
|
"斯里兰卡": "Sri Lanka", |
||||
|
"缅甸": "Myanmar", |
||||
|
"尼泊尔": "Nepal", |
||||
|
"蒙古": "Mongolia", |
||||
|
"柬埔寨": "Kamboja", |
||||
|
"老挝": "Laos", |
||||
|
"文莱": "Brunei", |
||||
|
"东帝汶": "Timor Leste", |
||||
|
"斐济": "Fiji", |
||||
|
"所罗门群岛": "Kepulauan Solomon", |
||||
|
|
||||
|
// Asisten Pribadi Emma (Personal Assistant Emma) |
||||
|
"personalAssistantName": "Emma", |
||||
|
"personalAssistantDescription": |
||||
|
"Hai, saya Emma, asisten AI serbaguna. Baik itu perencanaan kerja, saran belajar, pengaturan hidup, atau masalah lainnya, saya senang membantu. Mari tingkatkan efisiensi dan capai tujuan bersama!", |
||||
|
"assistantTag": "Asisten", |
||||
|
"personalAssistantWelcome": |
||||
|
"Halo! Saya Emma, dan saya senang menjadi asisten pribadi Anda. Saya dapat membantu Anda dengan berbagai tugas seperti manajemen waktu, perencanaan tujuan, organisasi informasi, dll. Apa yang bisa saya bantu?", |
||||
|
"personalAssistantVoiceWelcome": "Saya di sini!", |
||||
|
|
||||
|
// Penerjemah Simultan Lucy (同声传译 Lucy) |
||||
|
"interpreterName": "Penerjemah Simultan", |
||||
|
"interpreterDescription": |
||||
|
"Hai! Saya Lucy, penerjemah profesional Bahasa Inggris-Mandarin yang berspesialisasi dalam terjemahan real-time untuk rapat, kuliah, dan percakapan, membuat komunikasi bebas hambatan.", |
||||
|
"interpreterTag": "Terjemahan", |
||||
|
"interpreterWelcome": |
||||
|
"Halo semuanya! Saya Lucy, penerjemah simultan Anda. Saya akan menerjemahkan antara Bahasa Mandarin dan Bahasa Inggris untuk Anda. Ketika Anda berbicara Bahasa Mandarin, saya akan menerjemahkan ke Bahasa Inggris; ketika Anda berbicara Bahasa Inggris, saya akan menerjemahkan ke Bahasa Mandarin. Mari kita mulai sesi terjemahan kita!", |
||||
|
|
||||
|
// Pendamping Orang Tua-Anak XinYuan (亲子陪伴 芯愿) |
||||
|
"companionName": "XinYuan", |
||||
|
"companionDescription": |
||||
|
"Saya XinYuan, pendamping orang tua-anak Anda yang berdedikasi, lembut dan pengertian. Apakah Anda ingin mengobrol, berbagi kekhawatiran, atau membutuhkan pendampingan, saya akan selalu ada di sisi Anda.", |
||||
|
"companionTag": "Emosional", |
||||
|
"companionWelcome": |
||||
|
"Halo! Akhirnya bertemu denganmu! Saya XinYuan, pendamping orang tua-anak Anda yang berdedikasi. Bagaimana harimu? Apakah ada sesuatu yang ingin Anda bagikan dengan saya? Saya selalu di sini, siap mendengarkan pikiran Anda.", |
||||
|
"companionVoiceWelcome": "Saya di sini bersamamu!", |
||||
|
|
||||
|
// Obrolan AI Multi-fungsi Wu Xiaojiang (多功能AI聊天 吴小江) |
||||
|
"healthAdvisorName": "Asisten Obrolan AI Wu", |
||||
|
"healthAdvisorDescription": |
||||
|
"Saya Wu, siap memberi Anda berbagai fitur obrolan AI.", |
||||
|
"healthAdvisorTag": "Obrolan", |
||||
|
"healthAdvisorWelcome": |
||||
|
"Halo, saya Wu. Saya senang membantu Anda dengan fitur obrolan AI. Bagaimana saya bisa membantu Anda hari ini?", |
||||
|
"healthAdvisorVoiceWelcome": "Saya di sini!", |
||||
|
|
||||
|
// Riwayat Terjemahan (Translation History) |
||||
|
"noTranslationHistory": "Tidak ada riwayat terjemahan", |
||||
|
"clearHistory": "Hapus Riwayat", |
||||
|
"clearHistoryConfirm": |
||||
|
"Apakah Anda yakin ingin menghapus semua riwayat terjemahan? Tindakan ini tidak dapat dibatalkan.", |
||||
|
"translationHistory": "Riwayat Terjemahan", |
||||
|
|
||||
|
// Halaman Umpan Balik Pengguna (User Feedback Page) |
||||
|
"feedback": "Umpan Balik", |
||||
|
'feedbackInfo': 'Berikan umpan balik atau saran', |
||||
|
'feedbackDescription': 'Harap jelaskan masalah atau saran Anda', |
||||
|
'feedbackHint': 'Silakan masukkan umpan balik Anda...', |
||||
|
'feedbackRequired': 'Konten umpan balik diperlukan', |
||||
|
'contactInfo': 'Informasi Kontak', |
||||
|
'contactHint': 'Email/Telepon, agar kami dapat menghubungi Anda', |
||||
|
'submit': 'Kirim', |
||||
|
'feedbackSubmitSuccess': 'Umpan balik berhasil dikirim, terima kasih!', |
||||
|
'feedbackSubmitFailed': 'Gagal mengirim umpan balik, silakan coba lagi nanti', |
||||
|
|
||||
|
// Nama Bahasa (Language names) |
||||
|
"中文(简体)": "Mandarin (Sederhana)", |
||||
|
"中文(繁体)": "Mandarin (Tradisional)", |
||||
|
"中文(香港繁体)": "Mandarin (Hong Kong)", |
||||
|
"英语": "Bahasa Inggris", |
||||
|
"日语": "Bahasa Jepang", |
||||
|
"韩语": "Bahasa Korea", |
||||
|
"法语": "Bahasa Prancis", |
||||
|
"西班牙语": "Bahasa Spanyol", |
||||
|
"葡萄牙语": "Bahasa Portugis", |
||||
|
"意大利语": "Bahasa Italia", |
||||
|
"德语": "Bahasa Jerman", |
||||
|
"俄语": "Bahasa Rusia", |
||||
|
"波兰语": "Bahasa Polandia", |
||||
|
"荷兰语": "Bahasa Belanda", |
||||
|
"瑞典语": "Bahasa Swedia", |
||||
|
"捷克语": "Bahasa Ceko", |
||||
|
"现代希腊语": "Bahasa Yunani Modern", |
||||
|
"罗马尼亚语": "Bahasa Rumania", |
||||
|
"匈牙利语": "Bahasa Hungaria", |
||||
|
"乌克兰语": "Bahasa Ukraina", |
||||
|
"丹麦语": "Bahasa Denmark", |
||||
|
"芬兰语": "Bahasa Finlandia", |
||||
|
"挪威语": "Bahasa Norwegia", |
||||
|
"克罗地亚语": "Bahasa Kroasia", |
||||
|
"加泰隆语": "Bahasa Katalan", |
||||
|
"阿拉伯语": "Bahasa Arab", |
||||
|
"泰语": "Bahasa Thai", |
||||
|
"越南语": "Bahasa Vietnam", |
||||
|
"印尼语": "Bahasa Indonesia", |
||||
|
"印地语": "Bahasa Hindi", |
||||
|
"土耳其语": "Bahasa Turki", |
||||
|
"马来语": "Bahasa Melayu", |
||||
|
"孟加拉语": "Bahasa Bengali", |
||||
|
"泰米尔语": "Bahasa Tamil", |
||||
|
"泰卢固语": "Bahasa Telugu", |
||||
|
"马拉提语": "Bahasa Marathi", |
||||
|
"乌尔都语": "Bahasa Urdu", |
||||
|
"波斯语": "Bahasa Persia", |
||||
|
"斯瓦希里语": "Bahasa Swahili", |
||||
|
}; |
||||
@ -0,0 +1,426 @@ |
|||||
|
const Map<String, String> msMY = { |
||||
|
// 通用 (Umum) |
||||
|
'continue': 'Teruskan', |
||||
|
'confirm': 'Sahkan', |
||||
|
'cancel': 'Batal', |
||||
|
'retry': 'Cuba lagi', |
||||
|
'error': 'Ralat', |
||||
|
'success': 'Berjaya', |
||||
|
'connected': 'Disambungkan', |
||||
|
'connecting': 'Menyambung...', |
||||
|
'connectionFailure': 'Sambungan gagal', |
||||
|
'unconnected': 'Tidak disambungkan', |
||||
|
'search': 'Cari', |
||||
|
"requestCancellation": "Batalkan permintaan", |
||||
|
"connectionTimeout": "Tamat masa sambungan", |
||||
|
"requestTimeout": "Tamat masa permintaan", |
||||
|
"responseTimeout": "Tamat masa tindak balas", |
||||
|
"unknownError": "Ralat tidak diketahui", |
||||
|
|
||||
|
// 启动页 (Halaman Pelancaran) |
||||
|
"slogan": "Hubungkan dunia, melangkaui suara", |
||||
|
"sloganInfo": "Pakar Suara AI · Bila-bila masa, di mana sahaja", |
||||
|
|
||||
|
// 底部导航 (Navigasi Bawah) |
||||
|
"home": "Utama", |
||||
|
"explore": "Teroka", |
||||
|
"settings": "Tetapan", |
||||
|
|
||||
|
// 语言 (Bahasa) |
||||
|
"followingSystem": "Ikut Sistem", |
||||
|
"chinese": "Cina", |
||||
|
"english": "Inggeris", |
||||
|
"spanish": "Sepanyol", |
||||
|
"portuguese": "Portugis", |
||||
|
"traditionalChinese": "Cina Tradisional", |
||||
|
"japanese": "Jepun", |
||||
|
"korean": "Korea", |
||||
|
"french": "Perancis", |
||||
|
"german": "Jerman", |
||||
|
"russian": "Rusia", |
||||
|
"vietnamese": "Vietnam", |
||||
|
"italian": "Itali", |
||||
|
"hindi": "Hindi", |
||||
|
"indonesian": "Indonesia", |
||||
|
"thai": "Thai", |
||||
|
"malay": "Melayu", |
||||
|
"turkish": "Turki", |
||||
|
"polish": "Poland", |
||||
|
|
||||
|
// 登录页 (Halaman Log Masuk) |
||||
|
"welcome": "Selamat Datang", |
||||
|
"loginTips": |
||||
|
"Sila log masuk atau buat akaun menggunakan nombor telefon atau e-mel anda", |
||||
|
"accountNumber": "Nombor Telefon atau E-mel", |
||||
|
"verificationCode": "Kod Pengesahan", |
||||
|
"getCode": "Dapatkan Kod", |
||||
|
"reacquireAfter": " saat dapatkan semula", |
||||
|
"otherWays": "Atau log masuk dengan", |
||||
|
"expressConsent": "Dengan log masuk/mendaftar, anda bersetuju dengan", |
||||
|
"and": " dan ", |
||||
|
"userAgreement": "Perjanjian Pengguna", |
||||
|
"privacyPolicy": "Dasar Privasi", |
||||
|
'selectCountry': 'Pilih Negara/Rantau', |
||||
|
"email": "E-mel", |
||||
|
"phoneNumber": "Nombor Telefon", |
||||
|
"pleaseEnterContactInfo": "Sila masukkan nombor telefon atau e-mel", |
||||
|
"invalidEmailFormat": "Format e-mel tidak sah", |
||||
|
"invalidPhoneFormat": "Format nombor telefon tidak sah", |
||||
|
"tip": "Petua", |
||||
|
"pleaseEnterCompleteCode": "Sila masukkan kod pengesahan yang lengkap", |
||||
|
// 登录错误提示 (Petua Ralat Log Masuk) |
||||
|
"loginFailed": "Log masuk gagal, sila cuba lagi", |
||||
|
'pleaseAcceptPrivacyPolicy': |
||||
|
'Sila baca dan terima Dasar Privasi dan Perjanjian Pengguna terlebih dahulu', |
||||
|
|
||||
|
// 首页 (Halaman Utama) |
||||
|
"deviceStatus": "Status Peranti", |
||||
|
"reconnect": "Sambung semula", |
||||
|
"connectingDevice": "Menyambung ke peranti...", |
||||
|
"connectedTo": "Disambungkan ke", |
||||
|
"signal": "Isyarat", |
||||
|
"deviceId": "ID Peranti", |
||||
|
"firmwareVersion": "Versi Perisian Tegar", |
||||
|
"disconnectedDevice": "Tiada peranti disambungkan, klik butang di bawah", |
||||
|
"connectDevice": "Sambungkan Peranti", |
||||
|
"topAiExperiences": "Pengalaman AI Teratas", |
||||
|
"aiAssistant": "Pembantu AI", |
||||
|
"aiAssistantInfo": "Penasihat peribadi 24/7 untuk soalan dan nasihat", |
||||
|
"simultaneousInterpretation": "Terjemahan Serentak", |
||||
|
"simultaneousInterpretationInfo": "Terjemahan masa nyata untuk 80+ bahasa", |
||||
|
"aiCompanion": "Ikatan ibu bapa-anak", |
||||
|
"aiCompanionInfo": "Memahami anda dan menyediakan teman yang mesra", |
||||
|
"homeSlogan": "Hubungkan dunia, melangkaui suara", |
||||
|
"turnEarphones": |
||||
|
"Sila buka bekas fon telinga dan masukkan fon telinga ke telinga anda", |
||||
|
"currentlyConnected": "Sedang disambungkan:", |
||||
|
"unsystemSetup": "Pergi ke tetapan sistem", |
||||
|
"talkLater": "Ingatkan kemudian", |
||||
|
"initializing": "Memulakan...", |
||||
|
"bluetoothInitializationFailure": "Permulaan perkhidmatan Bluetooth gagal", |
||||
|
"checkingPermissions": "Memeriksa kebenaran...", |
||||
|
"lackPermissions": "Kebenaran Bluetooth diperlukan", |
||||
|
"searchingDevice": "Mencari peranti...", |
||||
|
"findConnectedDevice": "Peranti yang disambungkan ditemui", |
||||
|
"notFound": "Tiada peranti Bluetooth yang disambungkan ditemui", |
||||
|
"initializationFailure": "Permulaan gagal", |
||||
|
"connectedDevice": "Disambungkan ke peranti:", |
||||
|
"failedRefreshDevice": "Gagal memuat semula peranti", |
||||
|
"noDeviceFound": "Tiada peranti yang disambungkan ditemui", |
||||
|
"failedDeviceInformation": "Gagal mendapatkan maklumat peranti", |
||||
|
"unknownEquipment": "Peralatan tidak diketahui", |
||||
|
"zeroSignal": "Tiada isyarat", |
||||
|
"good": "Baik", |
||||
|
"fine": "Hebat", |
||||
|
"excellent": "Cemerlang", |
||||
|
"unknown": "Tidak diketahui", |
||||
|
'bluetoothTurnedOff': 'Bluetooth dimatikan, sila hidupkan', |
||||
|
'bluetoothOff': 'Bluetooth dimatikan', |
||||
|
|
||||
|
// 发现页 (Halaman Teroka) |
||||
|
"searchAi": "Cari ciri AI...", |
||||
|
"exploreSlogan": "Fon Telinga Pintar, Kemungkinan Tanpa Had", |
||||
|
"exploreSlogan1": "Teman pintar, Kemungkinan Tanpa Had", |
||||
|
"exploreSlogan2": "Cermin mata pintar, Kemungkinan Tanpa Had", |
||||
|
"exploreAi": "Terokai ciri AI yang disediakan oleh DeepSound", |
||||
|
"aiFunction": "Ciri AI", |
||||
|
"allRoundAssistant": "Pembantu Serba Boleh", |
||||
|
"allRoundAssistantInfo": "Membantu menyelesaikan pelbagai masalah", |
||||
|
"simultaneousTranslation": "Terjemahan Masa Nyata", |
||||
|
"simultaneousTranslationInfo": "Terjemahan segera untuk 80+ bahasa", |
||||
|
"aiGirlfriend": "Ikatan ibu bapa-anak", |
||||
|
"aiGirlfriendInfo": "Teman pintar, berbual pada bila-bila masa", |
||||
|
"healthConsultant": "Sembang AI pelbagai fungsi", |
||||
|
"healthConsultantInfo": "Lebih banyak ciri sembang AI", |
||||
|
"conferenceAssistant": "Pembantu Mesyuarat Perniagaan", |
||||
|
"conferenceAssistantInfo": |
||||
|
"Rakaman minit masa nyata dan terjemahan pelbagai bahasa", |
||||
|
"studyAssistant": "Pembantu Pembelajaran Bahasa", |
||||
|
"studyAssistantInfo": "Pembetulan sebutan dan latihan bertutur", |
||||
|
"travelTranslator": "Penterjemah Perjalanan", |
||||
|
"travelTranslatorInfo": "Terjemahan suara masa nyata dan panduan tarikan", |
||||
|
"beSearching": "Mencari:", |
||||
|
"noAssistantFound": "Tiada pembantu AI yang sepadan ditemui", |
||||
|
"scene": "Senario", |
||||
|
"youHaveSelected": "Anda telah memilih:", |
||||
|
"newFunction": "Ciri Baharu", |
||||
|
"youChoseTry": "Anda telah memilih untuk mencuba", |
||||
|
"aiSinger": "Mod Penyanyi AI", |
||||
|
"aiSingerInfo": |
||||
|
"Nyanyikan mana-mana lagu dengan suara artis kegemaran anda, malah ciptaan anda sendiri", |
||||
|
"popularFunction": "Ciri Popular", |
||||
|
"tryNow": "Cuba Sekarang", |
||||
|
|
||||
|
// 商务会议助手页 (Halaman Pembantu Mesyuarat Perniagaan) |
||||
|
"startMeeting": "Mulakan Mesyuarat", |
||||
|
'edit': 'Edit', |
||||
|
'delete': 'Padam', |
||||
|
'noContent': 'Tiada Kandungan', |
||||
|
'editMeetingTitle': 'Edit Tajuk Mesyuarat (Pilihan)', |
||||
|
'meetingTitle': 'Tajuk Mesyuarat (Pilihan)', |
||||
|
'maxCharacters': 'Maksimum 50 aksara', |
||||
|
'meeting': 'Mesyuarat', |
||||
|
'recordingDetails': 'Butiran Rakaman', |
||||
|
'aiSummary': 'Ringkasan AI', |
||||
|
'meetingTranscript': 'Transkrip Mesyuarat', |
||||
|
|
||||
|
// 设置页 (Halaman Tetapan) |
||||
|
"premiumMember": "Keahlian Premium", |
||||
|
"joinDevice": "Peranti disambungkan:", |
||||
|
"accountId": "ID Akaun:", |
||||
|
"systemSetting": "Tetapan Sistem", |
||||
|
"languageSetting": "Tetapan Bahasa", |
||||
|
"darkMode": "Mod Gelap", |
||||
|
"darkModeInfo": "Tukar antara tema terang/gelap", |
||||
|
"backups": "Sandaran & Pulihkan", |
||||
|
"backupsInfo": "Sandarkan tetapan dan sejarah AI", |
||||
|
"lastBackup": "Sandaran terakhir:", |
||||
|
"privacySettings": "Tetapan Privasi", |
||||
|
"privacySettingsInfo": "Urus pengumpulan data dan kebenaran", |
||||
|
"logout": "Log Keluar", |
||||
|
"logoutTips": "Adakah anda pasti mahu log keluar daripada akaun semasa?", |
||||
|
"aboutApplication": "Tentang", |
||||
|
"versions": "Versi", |
||||
|
"checkUpdates": "Semak Kemas Kini", |
||||
|
"selectLanguage": "Pilih Bahasa", |
||||
|
"voiceService": "Perkhidmatan Suara", |
||||
|
"voiceServiceInfo": "Pilih perkhidmatan pengecaman pertuturan dan sintesis", |
||||
|
"selectVoiceService": "Pilih Perkhidmatan Suara", |
||||
|
"azureVoiceService": "Perkhidmatan Pertuturan Azure", |
||||
|
"azureVoiceServiceInfo": |
||||
|
"Perkhidmatan berasaskan awan Microsoft menyokong sintesis dan pengecaman pertuturan berkualiti tinggi", |
||||
|
"flutterVoiceService": "Perkhidmatan suara tempatan", |
||||
|
"flutterVoiceServiceInfo": |
||||
|
"Perkhidmatan suara tempatan peranti tanpa memerlukan internet", |
||||
|
'timbreService': 'Perkhidmatan Timbre', |
||||
|
'timbreServiceInfo': 'Pilih perkhidmatan sintesis suara', |
||||
|
'defaultTimbre': 'Timbre Lalai', |
||||
|
'microsoftCloudTimbreService': 'Perkhidmatan Timbre Awan Microsoft', |
||||
|
'voiceClone': 'Klon Suara', |
||||
|
'AIsettings': 'Tetapan AI', |
||||
|
'selecttimbre': 'Pilih Timbre', |
||||
|
'pleaseRead': 'Sila Baca', |
||||
|
'completeRecording': 'Rakaman Selesai', |
||||
|
'deleteAccount': 'Padam Akaun', |
||||
|
'deleteAccountTips': |
||||
|
'Adakah anda pasti mahu memadam akaun anda secara kekal? Tindakan ini tidak boleh dibuat asal.', |
||||
|
|
||||
|
// 聊天页 (Halaman Sembang) |
||||
|
"clearChatHistory": "Kosongkan Sejarah Sembang", |
||||
|
"online": "Dalam Talian", |
||||
|
"inputMessage": "Taip mesej...", |
||||
|
"imListening": "Mendengar...", |
||||
|
"canStartTalking": "Anda boleh mula bercakap", |
||||
|
|
||||
|
// 翻译页 (Halaman Terjemahan) |
||||
|
"selectSourceLanguage": "Pilih Bahasa Sumber", |
||||
|
"selectTargetLanguage": "Pilih Bahasa Sasaran", |
||||
|
|
||||
|
//编辑个人信息页 (Halaman Edit Profil) |
||||
|
"editProfile": "Edit Profil", |
||||
|
"nickname": "Nama Panggilan", |
||||
|
"save": "Simpan", |
||||
|
|
||||
|
//国家列表 (Senarai Negara) |
||||
|
"邮箱": "E-mel", // Kekalkan kunci asal |
||||
|
"中国": "China", |
||||
|
"美国": "Amerika Syarikat", |
||||
|
"加拿大": "Kanada", |
||||
|
"俄罗斯": "Rusia", |
||||
|
"英国": "United Kingdom", |
||||
|
"德国": "Jerman", |
||||
|
"意大利": "Itali", |
||||
|
"法国": "Perancis", |
||||
|
"西班牙": "Sepanyol", |
||||
|
"南非": "Afrika Selatan", |
||||
|
"沙特阿拉伯": "Arab Saudi", |
||||
|
"土耳其": "Turki", |
||||
|
"日本": "Jepun", |
||||
|
"韩国": "Korea Selatan", |
||||
|
"新加坡": "Singapura", |
||||
|
"马来西亚": "Malaysia", |
||||
|
"泰国": "Thailand", |
||||
|
"越南": "Vietnam", |
||||
|
"印度": "India", |
||||
|
"巴基斯坦": "Pakistan", |
||||
|
"菲律宾": "Filipina", |
||||
|
"印度尼西亚": "Indonesia", |
||||
|
"阿联酋": "Emiriah Arab Bersatu", |
||||
|
"墨西哥": "Mexico", |
||||
|
"巴西": "Brazil", |
||||
|
"阿根廷": "Argentina", |
||||
|
"澳大利亚": "Australia", |
||||
|
"新西兰": "New Zealand", |
||||
|
"中国香港": "Hong Kong, China", |
||||
|
"中国澳门": "Macau, China", |
||||
|
"中国台湾": "Taiwan, China", |
||||
|
"埃及": "Mesir", |
||||
|
"希腊": "Greece", |
||||
|
"荷兰": "Belanda", |
||||
|
"比利时": "Belgium", |
||||
|
"匈牙利": "Hungary", |
||||
|
"罗马尼亚": "Romania", |
||||
|
"瑞士": "Switzerland", |
||||
|
"奥地利": "Austria", |
||||
|
"丹麦": "Denmark", |
||||
|
"瑞典": "Sweden", |
||||
|
"挪威": "Norway", |
||||
|
"波兰": "Poland", |
||||
|
"秘鲁": "Peru", |
||||
|
"智利": "Chile", |
||||
|
"哥伦比亚": "Colombia", |
||||
|
"委内瑞拉": "Venezuela", |
||||
|
"葡萄牙": "Portugal", |
||||
|
"卢森堡": "Luxembourg", |
||||
|
"爱尔兰": "Ireland", |
||||
|
"冰岛": "Iceland", |
||||
|
"阿尔巴尼亚": "Albania", |
||||
|
"马耳他": "Malta", |
||||
|
"塞浦路斯": "Cyprus", |
||||
|
"芬兰": "Finland", |
||||
|
"保加利亚": "Bulgaria", |
||||
|
"立陶宛": "Lithuania", |
||||
|
"拉脱维亚": "Latvia", |
||||
|
"爱沙尼亚": "Estonia", |
||||
|
"乌克兰": "Ukraine", |
||||
|
"塞尔维亚": "Serbia", |
||||
|
"克罗地亚": "Croatia", |
||||
|
"斯洛文尼亚": "Slovenia", |
||||
|
"捷克": "Republik Czech", |
||||
|
"斯洛伐克": "Slovakia", |
||||
|
"危地马拉": "Guatemala", |
||||
|
"萨尔瓦多": "El Salvador", |
||||
|
"洪都拉斯": "Honduras", |
||||
|
"尼加拉瓜": "Nicaragua", |
||||
|
"哥斯达黎加": "Costa Rica", |
||||
|
"巴拿马": "Panama", |
||||
|
"海地": "Haiti", |
||||
|
"玻利维亚": "Bolivia", |
||||
|
"厄瓜多尔": "Ecuador", |
||||
|
"巴拉圭": "Paraguay", |
||||
|
"乌拉圭": "Uruguay", |
||||
|
"摩洛哥": "Maghribi", |
||||
|
"阿尔及利亚": "Algeria", |
||||
|
"突尼斯": "Tunisia", |
||||
|
"尼日利亚": "Nigeria", |
||||
|
"加纳": "Ghana", |
||||
|
"埃塞俄比亚": "Ethiopia", |
||||
|
"肯尼亚": "Kenya", |
||||
|
"坦桑尼亚": "Tanzania", |
||||
|
"乌干达": "Uganda", |
||||
|
"孟加拉国": "Bangladesh", |
||||
|
"以色列": "Israel", |
||||
|
"黎巴嫩": "Lubnan", |
||||
|
"约旦": "Jordan", |
||||
|
"伊拉克": "Iraq", |
||||
|
"科威特": "Kuwait", |
||||
|
"巴林": "Bahrain", |
||||
|
"卡塔尔": "Qatar", |
||||
|
"阿曼": "Oman", |
||||
|
"阿富汗": "Afghanistan", |
||||
|
"斯里兰卡": "Sri Lanka", |
||||
|
"缅甸": "Myanmar", |
||||
|
"尼泊尔": "Nepal", |
||||
|
"蒙古": "Mongolia", |
||||
|
"柬埔寨": "Kemboja", |
||||
|
"老挝": "Laos", |
||||
|
"文莱": "Brunei", |
||||
|
"东帝汶": "Timor Timur", |
||||
|
"斐济": "Fiji", |
||||
|
"所罗门群岛": "Kepulauan Solomon", |
||||
|
|
||||
|
// Personal Assistant Emma (Pembantu Peribadi Emma) |
||||
|
"personalAssistantName": "Emma", |
||||
|
"personalAssistantDescription": |
||||
|
"Hai, saya Emma, pembantu AI serba boleh. Sama ada perancangan kerja, nasihat belajar, urusan hidup, atau isu lain, saya gembira untuk membantu. Mari tingkatkan kecekapan dan capai matlamat bersama!", |
||||
|
"assistantTag": "Pembantu", |
||||
|
"personalAssistantWelcome": |
||||
|
"Helo! Saya Emma, dan saya gembira menjadi pembantu peribadi anda. Saya boleh membantu anda dengan pelbagai tugas seperti pengurusan masa, perancangan matlamat, penyusunan maklumat, dll. Apa yang boleh saya bantu anda?", |
||||
|
"personalAssistantVoiceWelcome": "Saya di sini!", |
||||
|
|
||||
|
// 同声传译 Lucy (Penterjemah Serentak Lucy) |
||||
|
"interpreterName": "Penterjemah Serentak", |
||||
|
"interpreterDescription": |
||||
|
"Hai! Saya Lucy, penterjemah profesional Inggeris-Cina yang pakar dalam terjemahan masa nyata untuk mesyuarat, kuliah, dan perbualan, menjadikan komunikasi tanpa halangan.", |
||||
|
"interpreterTag": "Terjemahan", |
||||
|
"interpreterWelcome": |
||||
|
"Helo semua! Saya Lucy, penterjemah serentak anda. Saya akan menterjemah antara Bahasa Cina dan Bahasa Inggeris untuk anda. Apabila anda bercakap Bahasa Cina, saya akan menterjemah ke Bahasa Inggeris; apabila anda bercakap Bahasa Inggeris, saya akan menterjemah ke Bahasa Cina. Mari mulakan sesi terjemahan kita!", |
||||
|
|
||||
|
// 亲子陪伴 芯愿 (Teman Ibu Bapa-Anak XinYuan) |
||||
|
"companionName": "XinYuan", |
||||
|
"companionDescription": |
||||
|
"Saya XinYuan, teman ibu bapa-anak anda yang berdedikasi, lembut dan memahami. Sama ada anda mahu berbual, berkongsi kebimbangan, atau memerlukan teman, saya akan sentiasa berada di sisi anda.", |
||||
|
"companionTag": "Emosi", |
||||
|
"companionWelcome": |
||||
|
"Helo! Akhirnya bertemu dengan anda! Saya XinYuan, teman ibu bapa-anak anda yang berdedikasi. Bagaimana hari anda? Ada apa-apa yang ingin anda kongsikan dengan saya? Saya sentiasa di sini, sedia mendengar fikiran anda.", |
||||
|
"companionVoiceWelcome": "Saya di sini bersama anda!", |
||||
|
|
||||
|
// 多功能AI聊天 吴小江 (Pembantu Sembang AI Wu) |
||||
|
"healthAdvisorName": "Pembantu Sembang AI Wu", |
||||
|
"healthAdvisorDescription": |
||||
|
"Saya Wu, bersedia untuk menyediakan anda dengan pelbagai ciri sembang AI.", |
||||
|
"healthAdvisorTag": "Sembang", |
||||
|
"healthAdvisorWelcome": |
||||
|
"Helo, saya Wu. Saya gembira untuk membantu anda dengan ciri sembang AI. Bagaimana saya boleh membantu anda hari ini?", |
||||
|
"healthAdvisorVoiceWelcome": "Saya di sini!", |
||||
|
|
||||
|
// Translation History (Sejarah Terjemahan) |
||||
|
"noTranslationHistory": "Tiada sejarah terjemahan", |
||||
|
"clearHistory": "Kosongkan Sejarah", |
||||
|
"clearHistoryConfirm": |
||||
|
"Adakah anda pasti mahu mengosongkan semua sejarah terjemahan? Tindakan ini tidak boleh dibuat asal.", |
||||
|
"translationHistory": "Sejarah Terjemahan", |
||||
|
|
||||
|
// User Feedback Page (Halaman Maklum Balas Pengguna) |
||||
|
"feedback": "Maklum Balas", |
||||
|
'feedbackInfo': 'Berikan maklum balas atau cadangan', |
||||
|
'feedbackDescription': 'Sila terangkan isu atau cadangan anda', |
||||
|
'feedbackHint': 'Sila masukkan maklum balas anda...', |
||||
|
'feedbackRequired': 'Kandungan maklum balas diperlukan', |
||||
|
'contactInfo': 'Maklumat Hubungan', |
||||
|
'contactHint': 'E-mel/Telefon, supaya kami boleh menghubungi anda', |
||||
|
'submit': 'Hantar', |
||||
|
'feedbackSubmitSuccess': 'Maklum balas berjaya dihantar, terima kasih!', |
||||
|
'feedbackSubmitFailed': 'Gagal menghantar maklum balas, sila cuba lagi nanti', |
||||
|
|
||||
|
// Language names (Nama Bahasa) |
||||
|
"中文(简体)": "Cina (Ringkas)", |
||||
|
"中文(繁体)": "Cina (Tradisional)", |
||||
|
"中文(香港繁体)": "Cina (Hong Kong)", |
||||
|
"英语": "Inggeris", |
||||
|
"日语": "Jepun", |
||||
|
"韩语": "Korea", |
||||
|
"法语": "Perancis", |
||||
|
"西班牙语": "Sepanyol", |
||||
|
"葡萄牙语": "Portugis", |
||||
|
"意大利语": "Itali", |
||||
|
"德语": "Jerman", |
||||
|
"俄语": "Rusia", |
||||
|
"波兰语": "Poland", |
||||
|
"荷兰语": "Belanda", |
||||
|
"瑞典语": "Sweden", |
||||
|
"捷克语": "Czech", |
||||
|
"现代希腊语": "Greek Moden", |
||||
|
"罗马尼亚语": "Romania", |
||||
|
"匈牙利语": "Hungary", |
||||
|
"乌克兰语": "Ukraine", |
||||
|
"丹麦语": "Denmark", |
||||
|
"芬兰语": "Finland", |
||||
|
"挪威语": "Norway", |
||||
|
"克罗地亚语": "Croatia", |
||||
|
"加泰隆语": "Catalan", |
||||
|
"阿拉伯语": "Arab", |
||||
|
"泰语": "Thai", |
||||
|
"越南语": "Vietnam", |
||||
|
"印尼语": "Indonesia", |
||||
|
"印地语": "Hindi", |
||||
|
"土耳其语": "Turki", |
||||
|
"马来语": "Melayu", |
||||
|
"孟加拉语": "Bengali", |
||||
|
"泰米尔语": "Tamil", |
||||
|
"泰卢固语": "Telugu", |
||||
|
"马拉提语": "Marathi", |
||||
|
"乌尔都语": "Urdu", |
||||
|
"波斯语": "Parsi", |
||||
|
"斯瓦希里语": "Swahili", |
||||
|
}; |
||||
@ -0,0 +1,431 @@ |
|||||
|
const Map<String, String> plPL = { |
||||
|
// Ogólne (通用) |
||||
|
'continue': 'Kontynuuj', |
||||
|
'confirm': 'Potwierdź', |
||||
|
'cancel': 'Anuluj', |
||||
|
'retry': 'Spróbuj ponownie', |
||||
|
'error': 'Błąd', |
||||
|
'success': 'Sukces', |
||||
|
'connected': 'Połączono', |
||||
|
'connecting': 'Łączenie...', |
||||
|
'connectionFailure': 'Błąd połączenia', |
||||
|
'unconnected': 'Nie połączono', |
||||
|
'search': 'Szukaj', |
||||
|
"requestCancellation": "Anuluj żądanie", |
||||
|
"connectionTimeout": "Przekroczono limit czasu połączenia", |
||||
|
"requestTimeout": "Przekroczono limit czasu żądania", |
||||
|
"responseTimeout": "Przekroczono limit czasu odpowiedzi", |
||||
|
"unknownError": "Nieznany błąd", |
||||
|
|
||||
|
// Strona startowa (启动页) |
||||
|
"slogan": "Połącz świat, poza dźwiękiem", |
||||
|
"sloganInfo": "Ekspert Głosowy AI · Zawsze i wszędzie", |
||||
|
|
||||
|
// Dolna nawigacja (底部导航) |
||||
|
"home": "Główna", |
||||
|
"explore": "Odkrywaj", |
||||
|
"settings": "Ustawienia", |
||||
|
|
||||
|
// Język (语言) |
||||
|
"followingSystem": "Zgodnie z systemem", |
||||
|
"chinese": "Chiński", |
||||
|
"english": "Angielski", |
||||
|
"spanish": "Hiszpański", |
||||
|
"portuguese": "Portugalski", |
||||
|
"traditionalChinese": "Chiński tradycyjny", |
||||
|
"japanese": "Japoński", |
||||
|
"korean": "Koreański", |
||||
|
"french": "Francuski", |
||||
|
"german": "Niemiecki", |
||||
|
"russian": "Rosyjski", |
||||
|
"vietnamese": "Wietnamski", |
||||
|
"italian": "Włoski", |
||||
|
"hindi": "Hindi", |
||||
|
"indonesian": "Indonezyjski", |
||||
|
"thai": "Tajski", |
||||
|
"malay": "Malajski", |
||||
|
"turkish": "Turecki", |
||||
|
"polish": "Polski", |
||||
|
|
||||
|
// Strona logowania (登录页) |
||||
|
"welcome": "Witamy", |
||||
|
"loginTips": |
||||
|
"Zaloguj się lub utwórz konto używając numeru telefonu lub adresu e-mail", |
||||
|
"accountNumber": "Numer telefonu lub E-mail", |
||||
|
"verificationCode": "Kod weryfikacyjny", |
||||
|
"getCode": "Pobierz kod", |
||||
|
"reacquireAfter": " sek. ponowne pobranie", |
||||
|
"otherWays": "Lub zaloguj się przez", |
||||
|
"expressConsent": "Logując się/rejestrując, zgadzasz się na", |
||||
|
"and": " i ", |
||||
|
"userAgreement": "Umowę użytkownika", |
||||
|
"privacyPolicy": "Politykę prywatności", |
||||
|
'selectCountry': 'Wybierz kraj/region', |
||||
|
"email": "E-mail", |
||||
|
"phoneNumber": "Numer telefonu", |
||||
|
"pleaseEnterContactInfo": "Wprowadź numer telefonu lub e-mail", |
||||
|
"invalidEmailFormat": "Nieprawidłowy format e-mail", |
||||
|
"invalidPhoneFormat": "Nieprawidłowy format numeru telefonu", |
||||
|
"tip": "Wskazówka", |
||||
|
"pleaseEnterCompleteCode": "Wprowadź pełny kod weryfikacyjny", |
||||
|
// Wskazówki dotyczące błędów logowania (登录错误提示) |
||||
|
"loginFailed": "Logowanie nie powiodło się, spróbuj ponownie", |
||||
|
'pleaseAcceptPrivacyPolicy': |
||||
|
'Najpierw przeczytaj i zaakceptuj Politykę prywatności oraz Umowę użytkownika', |
||||
|
|
||||
|
// Strona główna (首页) |
||||
|
"deviceStatus": "Status urządzenia", |
||||
|
"reconnect": "Połącz ponownie", |
||||
|
"connectingDevice": "Łączenie z urządzeniem...", |
||||
|
"connectedTo": "Połączono z", |
||||
|
"signal": "Sygnał", |
||||
|
"deviceId": "ID urządzenia", |
||||
|
"firmwareVersion": "Wersja oprogramowania", |
||||
|
"disconnectedDevice": |
||||
|
"Brak podłączonego urządzenia, kliknij przycisk poniżej", |
||||
|
"connectDevice": "Połącz urządzenie", |
||||
|
"topAiExperiences": "Najlepsze doświadczenia AI", |
||||
|
"aiAssistant": "Asystent AI", |
||||
|
"aiAssistantInfo": "Osobisty doradca 24/7 na pytania i porady", |
||||
|
"simultaneousInterpretation": "Tłumaczenie symultaniczne", |
||||
|
"simultaneousInterpretationInfo": |
||||
|
"Tłumaczenie w czasie rzeczywistym dla 80+ języków", |
||||
|
"aiCompanion": "Więź rodzic-dziecko", |
||||
|
"aiCompanionInfo": "Rozumie Cię i zapewnia ciepłe towarzystwo", |
||||
|
"homeSlogan": "Połącz świat, poza dźwiękiem", |
||||
|
"turnEarphones": "Otwórz etui słuchawek i włóż słuchawki do uszu", |
||||
|
"currentlyConnected": "Aktualnie połączono:", |
||||
|
"unsystemSetup": "Przejdź do ustawień systemowych", |
||||
|
"talkLater": "Przypomnij później", |
||||
|
"initializing": "Inicjalizacja...", |
||||
|
"bluetoothInitializationFailure": |
||||
|
"Inicjalizacja usługi Bluetooth nie powiodła się", |
||||
|
"checkingPermissions": "Sprawdzanie uprawnień...", |
||||
|
"lackPermissions": "Wymagane są uprawnienia Bluetooth", |
||||
|
"searchingDevice": "Wyszukiwanie urządzenia...", |
||||
|
"findConnectedDevice": "Znaleziono podłączone urządzenie", |
||||
|
"notFound": "Nie znaleziono podłączonego urządzenia Bluetooth", |
||||
|
"initializationFailure": "Inicjalizacja nie powiodła się", |
||||
|
"connectedDevice": "Połączono z urządzeniem:", |
||||
|
"failedRefreshDevice": "Odświeżenie urządzenia nie powiodło się", |
||||
|
"noDeviceFound": "Nie znaleziono podłączonego urządzenia", |
||||
|
"failedDeviceInformation": |
||||
|
"Pobranie informacji o urządzeniu nie powiodło się", |
||||
|
"unknownEquipment": "Nieznane urządzenie", |
||||
|
"zeroSignal": "Brak sygnału", |
||||
|
"good": "Dobry", |
||||
|
"fine": "Świetny", |
||||
|
"excellent": "Doskonały", |
||||
|
"unknown": "Nieznany", |
||||
|
'bluetoothTurnedOff': 'Bluetooth jest wyłączony, proszę go włączyć', |
||||
|
'bluetoothOff': 'Bluetooth jest wyłączony', |
||||
|
|
||||
|
// Strona Odkrywaj (发现页) |
||||
|
"searchAi": "Szukaj funkcji AI...", |
||||
|
"exploreSlogan": "Inteligentne słuchawki, nieskończone możliwości", |
||||
|
"exploreSlogan1": "Inteligentny towarzysz, nieskończone możliwości", |
||||
|
"exploreSlogan2": "Inteligentne okulary, nieskończone możliwości", |
||||
|
"exploreAi": "Odkrywaj funkcje AI dostarczane przez DeepSound", |
||||
|
"aiFunction": "Funkcje AI", |
||||
|
"allRoundAssistant": "Wszechstronny asystent", |
||||
|
"allRoundAssistantInfo": "Pomaga rozwiązywać różne problemy", |
||||
|
"simultaneousTranslation": "Tłumaczenie w czasie rzeczywistym", |
||||
|
"simultaneousTranslationInfo": "Natychmiastowe tłumaczenie dla 80+ języków", |
||||
|
"aiGirlfriend": "Więź rodzic-dziecko", |
||||
|
"aiGirlfriendInfo": "Inteligentne towarzystwo, czatuj w dowolnym momencie", |
||||
|
"healthConsultant": "Wielofunkcyjny czat AI", |
||||
|
"healthConsultantInfo": "Więcej funkcji czatu AI", |
||||
|
"conferenceAssistant": "Asystent spotkań biznesowych", |
||||
|
"conferenceAssistantInfo": |
||||
|
"Nagrywanie protokołów w czasie rzeczywistym i tłumaczenie wielojęzyczne", |
||||
|
"studyAssistant": "Asystent nauki języków", |
||||
|
"studyAssistantInfo": "Korekta wymowy i praktyka mówienia", |
||||
|
"travelTranslator": "Tłumacz podróżny", |
||||
|
"travelTranslatorInfo": |
||||
|
"Tłumaczenie głosowe w czasie rzeczywistym i przewodniki po atrakcjach", |
||||
|
"beSearching": "Wyszukiwanie:", |
||||
|
"noAssistantFound": "Nie znaleziono odpowiedniego asystenta AI", |
||||
|
"scene": "Scenariusze", |
||||
|
"youHaveSelected": "Wybrałeś:", |
||||
|
"newFunction": "Nowe funkcje", |
||||
|
"youChoseTry": "Wybrałeś, aby spróbować", |
||||
|
"aiSinger": "Tryb piosenkarza AI", |
||||
|
"aiSingerInfo": |
||||
|
"Śpiewaj dowolną piosenkę głosem ulubionego artysty, nawet własne kreacje", |
||||
|
"popularFunction": "Popularne funkcje", |
||||
|
"tryNow": "Wypróbuj teraz", |
||||
|
|
||||
|
// Strona Asystenta Spotkań Biznesowych (商务会议助手页) |
||||
|
"startMeeting": "Rozpocznij spotkanie", |
||||
|
'edit': 'Edytuj', |
||||
|
'delete': 'Usuń', |
||||
|
'noContent': 'Brak treści', |
||||
|
'editMeetingTitle': 'Edytuj tytuł spotkania (opcjonalnie)', |
||||
|
'meetingTitle': 'Tytuł spotkania (opcjonalnie)', |
||||
|
'maxCharacters': 'Maksymalnie 50 znaków', |
||||
|
'meeting': 'Spotkanie', |
||||
|
'recordingDetails': 'Szczegóły nagrania', |
||||
|
'aiSummary': 'Podsumowanie AI', |
||||
|
'meetingTranscript': 'Transkrypcja spotkania', |
||||
|
|
||||
|
// Strona Ustawień (设置页) |
||||
|
"premiumMember": "Członkostwo Premium", |
||||
|
"joinDevice": "Podłączone urządzenie:", |
||||
|
"accountId": "ID konta:", |
||||
|
"systemSetting": "Ustawienia systemowe", |
||||
|
"languageSetting": "Ustawienia języka", |
||||
|
"darkMode": "Tryb ciemny", |
||||
|
"darkModeInfo": "Przełączaj między jasnym/ciemnym motywem", |
||||
|
"backups": "Kopia zapasowa i przywracanie", |
||||
|
"backupsInfo": "Kopia zapasowa ustawień i historii AI", |
||||
|
"lastBackup": "Ostatnia kopia zapasowa:", |
||||
|
"privacySettings": "Ustawienia prywatności", |
||||
|
"privacySettingsInfo": "Zarządzaj zbieraniem danych i uprawnieniami", |
||||
|
"logout": "Wyloguj się", |
||||
|
"logoutTips": "Czy na pewno chcesz wylogować się z bieżącego konta?", |
||||
|
"aboutApplication": "O aplikacji", |
||||
|
"versions": "Wersja", |
||||
|
"checkUpdates": "Sprawdź aktualizacje", |
||||
|
"selectLanguage": "Wybierz język", |
||||
|
"voiceService": "Usługa głosowa", |
||||
|
"voiceServiceInfo": "Wybierz usługę rozpoznawania i syntezy mowy", |
||||
|
"selectVoiceService": "Wybierz usługę głosową", |
||||
|
"azureVoiceService": "Usługa mowy Azure", |
||||
|
"azureVoiceServiceInfo": |
||||
|
"Usługa chmurowa Microsoft obsługująca wysokiej jakości syntezę i rozpoznawanie mowy", |
||||
|
"flutterVoiceService": "Lokalna usługa głosowa", |
||||
|
"flutterVoiceServiceInfo": |
||||
|
"Lokalna usługa głosowa urządzenia bez konieczności połączenia z internetem", |
||||
|
'timbreService': 'Usługa barwy głosu', |
||||
|
'timbreServiceInfo': 'Wybierz usługę syntezy głosu', |
||||
|
'defaultTimbre': 'Domyślna barwa głosu', |
||||
|
'microsoftCloudTimbreService': 'Usługa barwy głosu Microsoft Cloud', |
||||
|
'voiceClone': 'Klonowanie głosu', |
||||
|
'AIsettings': 'Ustawienia AI', |
||||
|
'selecttimbre': 'Wybierz barwę głosu', |
||||
|
'pleaseRead': 'Proszę przeczytać', |
||||
|
'completeRecording': 'Zakończ nagrywanie', |
||||
|
'deleteAccount': 'Usuń konto', |
||||
|
'deleteAccountTips': |
||||
|
'Czy na pewno chcesz trwale usunąć swoje konto? Tej czynności nie można cofnąć.', |
||||
|
|
||||
|
// Strona Czatu (聊天页) |
||||
|
"clearChatHistory": "Wyczyść historię czatu", |
||||
|
"online": "Online", |
||||
|
"inputMessage": "Wpisz wiadomość...", |
||||
|
"imListening": "Słucham...", |
||||
|
"canStartTalking": "Możesz zacząć mówić", |
||||
|
|
||||
|
// Strona Tłumaczenia (翻译页) |
||||
|
"selectSourceLanguage": "Wybierz język źródłowy", |
||||
|
"selectTargetLanguage": "Wybierz język docelowy", |
||||
|
|
||||
|
// Strona Edycji Profilu (编辑个人信息页) |
||||
|
"editProfile": "Edytuj profil", |
||||
|
"nickname": "Pseudonim", |
||||
|
"save": "Zapisz", |
||||
|
|
||||
|
// Lista krajów (国家列表) |
||||
|
"邮箱": "E-mail", // Zachowaj oryginalny klucz |
||||
|
"中国": "Chiny", |
||||
|
"美国": "Stany Zjednoczone", |
||||
|
"加拿大": "Kanada", |
||||
|
"俄罗斯": "Rosja", |
||||
|
"英国": "Wielka Brytania", |
||||
|
"德国": "Niemcy", |
||||
|
"意大利": "Włochy", |
||||
|
"法国": "Francja", |
||||
|
"西班牙": "Hiszpania", |
||||
|
"南非": "Republika Południowej Afryki", |
||||
|
"沙特阿拉伯": "Arabia Saudyjska", |
||||
|
"土耳其": "Turcja", |
||||
|
"日本": "Japonia", |
||||
|
"韩国": "Korea Południowa", |
||||
|
"新加坡": "Singapur", |
||||
|
"马来西亚": "Malezja", |
||||
|
"泰国": "Tajlandia", |
||||
|
"越南": "Wietnam", |
||||
|
"印度": "Indie", |
||||
|
"巴基斯坦": "Pakistan", |
||||
|
"菲律宾": "Filipiny", |
||||
|
"印度尼西亚": "Indonezja", |
||||
|
"阿联酋": "Zjednoczone Emiraty Arabskie", |
||||
|
"墨西哥": "Meksyk", |
||||
|
"巴西": "Brazylia", |
||||
|
"阿根廷": "Argentyna", |
||||
|
"澳大利亚": "Australia", |
||||
|
"新西兰": "Nowa Zelandia", |
||||
|
"中国香港": "Hongkong, Chiny", |
||||
|
"中国澳门": "Makau, Chiny", |
||||
|
"中国台湾": "Tajwan, Chiny", |
||||
|
"埃及": "Egipt", |
||||
|
"希腊": "Grecja", |
||||
|
"荷兰": "Holandia", |
||||
|
"比利时": "Belgia", |
||||
|
"匈牙利": "Węgry", |
||||
|
"罗马尼亚": "Rumunia", |
||||
|
"瑞士": "Szwajcaria", |
||||
|
"奥地利": "Austria", |
||||
|
"丹麦": "Dania", |
||||
|
"瑞典": "Szwecja", |
||||
|
"挪威": "Norwegia", |
||||
|
"波兰": "Polska", |
||||
|
"秘鲁": "Peru", |
||||
|
"智利": "Chile", |
||||
|
"哥伦比亚": "Kolumbia", |
||||
|
"委内瑞拉": "Wenezuela", |
||||
|
"葡萄牙": "Portugalia", |
||||
|
"卢森堡": "Luksemburg", |
||||
|
"爱尔兰": "Irlandia", |
||||
|
"冰岛": "Islandia", |
||||
|
"阿尔巴尼亚": "Albania", |
||||
|
"马耳他": "Malta", |
||||
|
"塞浦路斯": "Cypr", |
||||
|
"芬兰": "Finlandia", |
||||
|
"保加利亚": "Bułgaria", |
||||
|
"立陶宛": "Litwa", |
||||
|
"拉脱维亚": "Łotwa", |
||||
|
"爱沙尼亚": "Estonia", |
||||
|
"乌克兰": "Ukraina", |
||||
|
"塞尔维亚": "Serbia", |
||||
|
"克罗地亚": "Chorwacja", |
||||
|
"斯洛文尼亚": "Słowenia", |
||||
|
"捷克": "Czechy", |
||||
|
"斯洛伐克": "Słowacja", |
||||
|
"危地马拉": "Gwatemala", |
||||
|
"萨尔瓦多": "Salwador", |
||||
|
"洪都拉斯": "Honduras", |
||||
|
"尼加拉瓜": "Nikaragua", |
||||
|
"哥斯达黎加": "Kostaryka", |
||||
|
"巴拿马": "Panama", |
||||
|
"海地": "Haiti", |
||||
|
"玻利维亚": "Boliwia", |
||||
|
"厄瓜多尔": "Ekwador", |
||||
|
"巴拉圭": "Paragwaj", |
||||
|
"乌拉圭": "Urugwaj", |
||||
|
"摩洛哥": "Maroko", |
||||
|
"阿尔及利亚": "Algieria", |
||||
|
"突尼斯": "Tunezja", |
||||
|
"尼日利亚": "Nigeria", |
||||
|
"加纳": "Ghana", |
||||
|
"埃塞俄比亚": "Etiopia", |
||||
|
"肯尼亚": "Kenia", |
||||
|
"坦桑尼亚": "Tanzania", |
||||
|
"乌干达": "Uganda", |
||||
|
"孟加拉国": "Bangladesz", |
||||
|
"以色列": "Izrael", |
||||
|
"黎巴嫩": "Liban", |
||||
|
"约旦": "Jordania", |
||||
|
"伊拉克": "Irak", |
||||
|
"科威特": "Kuwejt", |
||||
|
"巴林": "Bahrajn", |
||||
|
"卡塔尔": "Katar", |
||||
|
"阿曼": "Oman", |
||||
|
"阿富汗": "Afganistan", |
||||
|
"斯里兰卡": "Sri Lanka", |
||||
|
"缅甸": "Mjanma", |
||||
|
"尼泊尔": "Nepal", |
||||
|
"蒙古": "Mongolia", |
||||
|
"柬埔寨": "Kambodża", |
||||
|
"老挝": "Laos", |
||||
|
"文莱": "Brunei", |
||||
|
"东帝汶": "Timor Wschodni", |
||||
|
"斐济": "Fidżi", |
||||
|
"所罗门群岛": "Wyspy Salomona", |
||||
|
|
||||
|
// Osobisty Asystent Emma (Personal Assistant Emma) |
||||
|
"personalAssistantName": "Emma", |
||||
|
"personalAssistantDescription": |
||||
|
"Cześć, jestem Emma, wszechstronny asystent AI. Niezależnie od tego, czy chodzi o planowanie pracy, porady dotyczące nauki, organizację życia, czy inne kwestie, chętnie pomogę. Poprawmy razem wydajność i osiągnijmy cele!", |
||||
|
"assistantTag": "Asystent", |
||||
|
"personalAssistantWelcome": |
||||
|
"Witaj! Jestem Emma i cieszę się, że mogę być Twoim osobistym asystentem. Mogę pomóc Ci w różnych zadaniach, takich jak zarządzanie czasem, planowanie celów, organizacja informacji itp. W czym mogę Ci pomóc?", |
||||
|
"personalAssistantVoiceWelcome": "Jestem tutaj!", |
||||
|
|
||||
|
// Tłumacz Symultaniczny Lucy (同声传译 Lucy) |
||||
|
"interpreterName": "Tłumacz Symultaniczny", |
||||
|
"interpreterDescription": |
||||
|
"Cześć! Jestem Lucy, profesjonalny tłumacz angielsko-chiński specjalizujący się w tłumaczeniu w czasie rzeczywistym spotkań, wykładów i rozmów, sprawiając, że komunikacja jest bez barier.", |
||||
|
"interpreterTag": "Tłumaczenie", |
||||
|
"interpreterWelcome": |
||||
|
"Witajcie wszyscy! Jestem Lucy, Wasz tłumacz symultaniczny. Będę tłumaczyć między chińskim a angielskim. Kiedy mówisz po chińsku, przetłumaczę na angielski; kiedy mówisz po angielsku, przetłumaczę na chiński. Rozpocznijmy naszą sesję tłumaczeniową!", |
||||
|
|
||||
|
// Towarzysz Rodzic-Dziecko XinYuan (亲子陪伴 芯愿) |
||||
|
"companionName": "XinYuan", |
||||
|
"companionDescription": |
||||
|
"Jestem XinYuan, Twój oddany towarzysz rodzic-dziecko, łagodny i wyrozumiały. Niezależnie od tego, czy chcesz porozmawiać, podzielić się troskami, czy potrzebujesz towarzystwa, zawsze będę przy Tobie.", |
||||
|
"companionTag": "Emocjonalny", |
||||
|
"companionWelcome": |
||||
|
"Witaj! Wreszcie Cię spotykam! Jestem XinYuan, Twój oddany towarzysz rodzic-dziecko. Jak minął Twój dzień? Czy jest coś, czym chciałbyś się ze mną podzielić? Zawsze jestem tutaj, gotowy wysłuchać Twoich myśli.", |
||||
|
"companionVoiceWelcome": "Jestem tu z Tobą!", |
||||
|
|
||||
|
// Wielofunkcyjny Czat AI Wu (多功能AI聊天 吴小江) |
||||
|
"healthAdvisorName": "Asystent Czatu AI Wu", |
||||
|
"healthAdvisorDescription": |
||||
|
"Jestem Wu, gotowy dostarczyć Ci różne funkcje czatu AI.", |
||||
|
"healthAdvisorTag": "Czat", |
||||
|
"healthAdvisorWelcome": |
||||
|
"Witaj, jestem Wu. Cieszę się, że mogę pomóc Ci z funkcjami czatu AI. Jak mogę Ci dzisiaj pomóc?", |
||||
|
"healthAdvisorVoiceWelcome": "Jestem tutaj!", |
||||
|
|
||||
|
// Historia Tłumaczeń (Translation History) |
||||
|
"noTranslationHistory": "Brak historii tłumaczeń", |
||||
|
"clearHistory": "Wyczyść historię", |
||||
|
"clearHistoryConfirm": |
||||
|
"Czy na pewno chcesz wyczyścić całą historię tłumaczeń? Tej czynności nie można cofnąć.", |
||||
|
"translationHistory": "Historia tłumaczeń", |
||||
|
|
||||
|
// Strona Opinii Użytkownika (User Feedback Page) |
||||
|
"feedback": "Opinia", |
||||
|
'feedbackInfo': 'Przekaż opinię lub sugestie', |
||||
|
'feedbackDescription': 'Opisz swój problem lub sugestię', |
||||
|
'feedbackHint': 'Wprowadź swoją opinię...', |
||||
|
'feedbackRequired': 'Treść opinii jest wymagana', |
||||
|
'contactInfo': 'Informacje kontaktowe', |
||||
|
'contactHint': 'E-mail/Telefon, abyśmy mogli się z Tobą skontaktować', |
||||
|
'submit': 'Wyślij', |
||||
|
'feedbackSubmitSuccess': 'Opinia została pomyślnie przesłana, dziękujemy!', |
||||
|
'feedbackSubmitFailed': |
||||
|
'Przesłanie opinii nie powiodło się, spróbuj ponownie później', |
||||
|
|
||||
|
// Nazwy języków (Language names) |
||||
|
"中文(简体)": "Chiński (uproszczony)", |
||||
|
"中文(繁体)": "Chiński (tradycyjny)", |
||||
|
"中文(香港繁体)": "Chiński (Hongkong)", |
||||
|
"英语": "Angielski", |
||||
|
"日语": "Japoński", |
||||
|
"韩语": "Koreański", |
||||
|
"法语": "Francuski", |
||||
|
"西班牙语": "Hiszpański", |
||||
|
"葡萄牙语": "Portugalski", |
||||
|
"意大利语": "Włoski", |
||||
|
"德语": "Niemiecki", |
||||
|
"俄语": "Rosyjski", |
||||
|
"波兰语": "Polski", |
||||
|
"荷兰语": "Holenderski", |
||||
|
"瑞典语": "Szwedzki", |
||||
|
"捷克语": "Czeski", |
||||
|
"现代希腊语": "Grecki nowożytny", |
||||
|
"罗马尼亚语": "Rumuński", |
||||
|
"匈牙利语": "Węgierski", |
||||
|
"乌克兰语": "Ukraiński", |
||||
|
"丹麦语": "Duński", |
||||
|
"芬兰语": "Fiński", |
||||
|
"挪威语": "Norweski", |
||||
|
"克罗地亚语": "Chorwacki", |
||||
|
"加泰隆语": "Kataloński", |
||||
|
"阿拉伯语": "Arabski", |
||||
|
"泰语": "Tajski", |
||||
|
"越南语": "Wietnamski", |
||||
|
"印尼语": "Indonezyjski", |
||||
|
"印地语": "Hindi", |
||||
|
"土耳其语": "Turecki", |
||||
|
"马来语": "Malajski", |
||||
|
"孟加拉语": "Bengalski", |
||||
|
"泰米尔语": "Tamilski", |
||||
|
"泰卢固语": "Telugu", |
||||
|
"马拉提语": "Marathi", |
||||
|
"乌尔都语": "Urdu", |
||||
|
"波斯语": "Perski", |
||||
|
"斯瓦希里语": "Suahili", |
||||
|
}; |
||||
@ -0,0 +1,423 @@ |
|||||
|
const Map<String, String> thTH = { |
||||
|
// 通用 |
||||
|
'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": "ภาษาจีนตัวเต็ม", |
||||
|
"japanese": "ภาษาญี่ปุ่น", |
||||
|
"korean": "ภาษาเกาหลี", |
||||
|
"french": "ภาษาฝรั่งเศส", |
||||
|
"german": "ภาษาเยอรมัน", |
||||
|
"russian": "ภาษารัสเซีย", |
||||
|
"vietnamese": "ภาษาเวียดนาม", |
||||
|
"italian": "ภาษาอิตาลี", |
||||
|
"hindi": "ภาษาฮินดี", |
||||
|
"indonesian": "ภาษาอินโดนีเซีย", |
||||
|
"thai": "ภาษาไทย", |
||||
|
"malay": "ภาษามาเลย์", |
||||
|
"turkish": "ภาษาตุรกี", |
||||
|
"polish": "ภาษาโปแลนด์", |
||||
|
|
||||
|
// 登录页 |
||||
|
"welcome": "ยินดีต้อนรับ", |
||||
|
"loginTips": |
||||
|
"กรุณาลงชื่อเข้าใช้หรือสร้างบัญชีโดยใช้หมายเลขโทรศัพท์หรืออีเมลของคุณ", |
||||
|
"accountNumber": "หมายเลขโทรศัพท์หรืออีเมล", |
||||
|
"verificationCode": "รหัสยืนยัน", |
||||
|
"getCode": "รับรหัส", |
||||
|
"reacquireAfter": " วินาที รับรหัสอีกครั้ง", |
||||
|
"otherWays": "หรือเข้าสู่ระบบด้วย", |
||||
|
"expressConsent": "การเข้าสู่ระบบ/ลงทะเบียน แสดงว่าคุณยอมรับ", |
||||
|
"and": " และ ", |
||||
|
"userAgreement": "ข้อตกลงผู้ใช้", |
||||
|
"privacyPolicy": "นโยบายความเป็นส่วนตัว", |
||||
|
'selectCountry': 'เลือกประเทศ/ภูมิภาค', |
||||
|
"email": "อีเมล", |
||||
|
"phoneNumber": "หมายเลขโทรศัพท์", |
||||
|
"pleaseEnterContactInfo": "กรุณากรอกหมายเลขโทรศัพท์หรืออีเมล", |
||||
|
"invalidEmailFormat": "รูปแบบอีเมลไม่ถูกต้อง", |
||||
|
"invalidPhoneFormat": "รูปแบบหมายเลขโทรศัพท์ไม่ถูกต้อง", |
||||
|
"tip": "เคล็ดลับ", |
||||
|
"pleaseEnterCompleteCode": "กรุณากรอกรหัสยืนยันให้ครบถ้วน", |
||||
|
// 登录错误提示 |
||||
|
"loginFailed": "เข้าสู่ระบบล้มเหลว กรุณาลองอีกครั้ง", |
||||
|
'pleaseAcceptPrivacyPolicy': |
||||
|
'กรุณาอ่านและยอมรับนโยบายความเป็นส่วนตัวและข้อตกลงผู้ใช้ก่อน', |
||||
|
|
||||
|
// 首页 |
||||
|
"deviceStatus": "สถานะอุปกรณ์", |
||||
|
"reconnect": "เชื่อมต่อใหม่", |
||||
|
"connectingDevice": "กำลังเชื่อมต่อกับอุปกรณ์...", |
||||
|
"connectedTo": "เชื่อมต่อกับ", |
||||
|
"signal": "สัญญาณ", |
||||
|
"deviceId": "รหัสอุปกรณ์", |
||||
|
"firmwareVersion": "เวอร์ชันเฟิร์มแวร์", |
||||
|
"disconnectedDevice": "ไม่มีอุปกรณ์เชื่อมต่อ คลิกปุ่มด้านล่าง", |
||||
|
"connectDevice": "เชื่อมต่ออุปกรณ์", |
||||
|
"topAiExperiences": "ประสบการณ์ AI ยอดนิยม", |
||||
|
"aiAssistant": "ผู้ช่วย AI", |
||||
|
"aiAssistantInfo": "ที่ปรึกษาส่วนตัว 24/7 สำหรับคำถามและคำแนะนำ", |
||||
|
"simultaneousInterpretation": "การแปลความหมายแบบเรียลไทม์", |
||||
|
"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': 'บลูทูธปิดอยู่', |
||||
|
|
||||
|
// 发现页 |
||||
|
"searchAi": "ค้นหาฟีเจอร์ AI...", |
||||
|
"exploreSlogan": "หูฟังอัจฉริยะ ความเป็นไปได้ไม่สิ้นสุด", |
||||
|
"exploreSlogan1": "เพื่อนร่วมทางอัจฉริยะ ความเป็นไปได้ไม่สิ้นสุด", |
||||
|
"exploreSlogan2": "แว่นตาอัจฉริยะ ความเป็นไปได้ไม่สิ้นสุด", |
||||
|
"exploreAi": "สำรวจฟีเจอร์ AI ที่ให้บริการโดย DeepSound", |
||||
|
"aiFunction": "ฟีเจอร์ AI", |
||||
|
"allRoundAssistant": "ผู้ช่วยรอบด้าน", |
||||
|
"allRoundAssistantInfo": "ช่วยแก้ปัญหาต่างๆ", |
||||
|
"simultaneousTranslation": "การแปลแบบเรียลไทม์", |
||||
|
"simultaneousTranslationInfo": "การแปลทันทีสำหรับ 80+ ภาษา", |
||||
|
"aiGirlfriend": "ความผูกพันระหว่างพ่อแม่และลูก", |
||||
|
"aiGirlfriendInfo": "เพื่อนร่วมทางอัจฉริยะ แชทได้ตลอดเวลา", |
||||
|
"healthConsultant": "แชท AI อเนกประสงค์", |
||||
|
"healthConsultantInfo": "ฟีเจอร์แชท AI เพิ่มเติม", |
||||
|
"conferenceAssistant": "ผู้ช่วยประชุมทางธุรกิจ", |
||||
|
"conferenceAssistantInfo": "บันทึกการประชุมแบบเรียลไทม์และการแปลหลายภาษา", |
||||
|
"studyAssistant": "ผู้ช่วยเรียนภาษา", |
||||
|
"studyAssistantInfo": "การแก้ไขการออกเสียงและการฝึกพูด", |
||||
|
"travelTranslator": "นักแปลการเดินทาง", |
||||
|
"travelTranslatorInfo": "การแปลเสียงแบบเรียลไทม์และคู่มือสถานที่ท่องเที่ยว", |
||||
|
"beSearching": "กำลังค้นหา:", |
||||
|
"noAssistantFound": "ไม่พบผู้ช่วย AI ที่เกี่ยวข้อง", |
||||
|
"scene": "สถานการณ์", |
||||
|
"youHaveSelected": "คุณเลือก:", |
||||
|
"newFunction": "ฟีเจอร์ใหม่", |
||||
|
"youChoseTry": "คุณเลือกที่จะลอง", |
||||
|
"aiSinger": "โหมดนักร้อง AI", |
||||
|
"aiSingerInfo": |
||||
|
"ร้องเพลงใดก็ได้ด้วยเสียงศิลปินที่คุณชื่นชอบ แม้กระทั่งผลงานของคุณเอง", |
||||
|
"popularFunction": "ฟีเจอร์ยอดนิยม", |
||||
|
"tryNow": "ลองเลย", |
||||
|
|
||||
|
// 商务会议助手页 |
||||
|
"startMeeting": "เริ่มการประชุม", |
||||
|
'edit': 'แก้ไข', |
||||
|
'delete': 'ลบ', |
||||
|
'noContent': 'ไม่มีเนื้อหา', |
||||
|
'editMeetingTitle': 'แก้ไขชื่อการประชุม (ไม่บังคับ)', |
||||
|
'meetingTitle': 'ชื่อการประชุม (ไม่บังคับ)', |
||||
|
'maxCharacters': 'สูงสุด 50 ตัวอักษร', |
||||
|
'meeting': 'การประชุม', |
||||
|
'recordingDetails': 'รายละเอียดการบันทึก', |
||||
|
'aiSummary': 'สรุปโดย AI', |
||||
|
'meetingTranscript': 'บันทึกการประชุม', |
||||
|
|
||||
|
// 设置页 |
||||
|
"premiumMember": "สมาชิกระดับพรีเมียม", |
||||
|
"joinDevice": "อุปกรณ์ที่เชื่อมต่อ:", |
||||
|
"accountId": "รหัสบัญชี:", |
||||
|
"systemSetting": "การตั้งค่าระบบ", |
||||
|
"languageSetting": "การตั้งค่าภาษา", |
||||
|
"darkMode": "โหมดมืด", |
||||
|
"darkModeInfo": "สลับระหว่างธีมสว่าง/มืด", |
||||
|
"backups": "สำรองและกู้คืน", |
||||
|
"backupsInfo": "สำรองการตั้งค่าและประวัติ AI", |
||||
|
"lastBackup": "สำรองล่าสุด:", |
||||
|
"privacySettings": "การตั้งค่าความเป็นส่วนตัว", |
||||
|
"privacySettingsInfo": "จัดการการรวบรวมข้อมูลและการอนุญาต", |
||||
|
"logout": "ออกจากระบบ", |
||||
|
"logoutTips": "คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบบัญชีปัจจุบัน?", |
||||
|
"aboutApplication": "เกี่ยวกับ", |
||||
|
"versions": "เวอร์ชัน", |
||||
|
"checkUpdates": "ตรวจสอบการอัปเดต", |
||||
|
"selectLanguage": "เลือกภาษา", |
||||
|
"voiceService": "บริการเสียง", |
||||
|
"voiceServiceInfo": "เลือกบริการรู้จำเสียงและสังเคราะห์เสียง", |
||||
|
"selectVoiceService": "เลือกบริการเสียง", |
||||
|
"azureVoiceService": "บริการเสียง Azure", |
||||
|
"azureVoiceServiceInfo": |
||||
|
"บริการบนคลาวด์ของ Microsoft รองรับการสังเคราะห์และรู้จำเสียงคุณภาพสูง", |
||||
|
"flutterVoiceService": "บริการเสียงในเครื่อง", |
||||
|
"flutterVoiceServiceInfo": "บริการเสียงในอุปกรณ์ ไม่ต้องใช้อินเทอร์เน็ต", |
||||
|
'timbreService': 'บริการเสียงทุ้ม', |
||||
|
'timbreServiceInfo': 'เลือกบริการสังเคราะห์เสียง', |
||||
|
'defaultTimbre': 'เสียงทุ้มเริ่มต้น', |
||||
|
'microsoftCloudTimbreService': 'บริการเสียงทุ้มบนคลาวด์ของ Microsoft', |
||||
|
'voiceClone': 'โคลนเสียง', |
||||
|
'AIsettings': 'การตั้งค่า AI', |
||||
|
'selecttimbre': 'เลือกเสียงทุ้ม', |
||||
|
'pleaseRead': 'โปรดอ่าน', |
||||
|
'completeRecording': 'บันทึกเสร็จสมบูรณ์', |
||||
|
'deleteAccount': 'ลบบัญชี', |
||||
|
'deleteAccountTips': |
||||
|
'คุณแน่ใจหรือไม่ว่าต้องการลบบัญชีของคุณอย่างถาวร? การกระทำนี้ไม่สามารถยกเลิกได้', |
||||
|
|
||||
|
// 聊天页 |
||||
|
"clearChatHistory": "ล้างประวัติการแชท", |
||||
|
"online": "ออนไลน์", |
||||
|
"inputMessage": "พิมพ์ข้อความ...", |
||||
|
"imListening": "กำลังฟัง...", |
||||
|
"canStartTalking": "คุณสามารถเริ่มพูดได้", |
||||
|
|
||||
|
// 翻译页 |
||||
|
"selectSourceLanguage": "เลือกภาษาต้นทาง", |
||||
|
"selectTargetLanguage": "เลือกภาษาเป้าหมาย", |
||||
|
|
||||
|
//编辑个人信息页 |
||||
|
"editProfile": "แก้ไขโปรไฟล์", |
||||
|
"nickname": "ชื่อเล่น", |
||||
|
"save": "บันทึก", |
||||
|
|
||||
|
//国家列表 |
||||
|
"邮箱": "อีเมล", // Note: This key seems specific, keeping original key name |
||||
|
"中国": "จีน", |
||||
|
"美国": "สหรัฐอเมริกา", |
||||
|
"加拿大": "แคนาดา", |
||||
|
"俄罗斯": "รัสเซีย", |
||||
|
"英国": "สหราชอาณาจักร", |
||||
|
"德国": "เยอรมนี", |
||||
|
"意大利": "อิตาลี", |
||||
|
"法国": "ฝรั่งเศส", |
||||
|
"西班牙": "สเปน", |
||||
|
"南非": "แอฟริกาใต้", |
||||
|
"沙特阿拉伯": "ซาอุดีอาระเบีย", |
||||
|
"土耳其": "ตุรกี", |
||||
|
"日本": "ญี่ปุ่น", |
||||
|
"韩国": "เกาหลีใต้", |
||||
|
"新加坡": "สิงคโปร์", |
||||
|
"马来西亚": "มาเลเซีย", |
||||
|
"泰国": "ไทย", |
||||
|
"越南": "เวียดนาม", |
||||
|
"印度": "อินเดีย", |
||||
|
"巴基斯坦": "ปากีสถาน", |
||||
|
"菲律宾": "ฟิลิปปินส์", |
||||
|
"印度尼西亚": "อินโดนีเซีย", |
||||
|
"阿联酋": "สหรัฐอาหรับเอมิเรตส์", |
||||
|
"墨西哥": "เม็กซิโก", |
||||
|
"巴西": "บราซิล", |
||||
|
"阿根廷": "อาร์เจนตินา", |
||||
|
"澳大利亚": "ออสเตรเลีย", |
||||
|
"新西兰": "นิวซีแลนด์", |
||||
|
"中国香港": "ฮ่องกง จีน", |
||||
|
"中国澳门": "มาเก๊า จีน", |
||||
|
"中国台湾": "ไต้หวัน จีน", |
||||
|
"埃及": "อียิปต์", |
||||
|
"希腊": "กรีซ", |
||||
|
"荷兰": "เนเธอร์แลนด์", |
||||
|
"比利时": "เบลเยียม", |
||||
|
"匈牙利": "ฮังการี", |
||||
|
"罗马尼亚": "โรมาเนีย", |
||||
|
"瑞士": "สวิตเซอร์แลนด์", |
||||
|
"奥地利": "ออสเตรีย", |
||||
|
"丹麦": "เดนมาร์ก", |
||||
|
"瑞典": "สวีเดน", |
||||
|
"挪威": "นอร์เวย์", |
||||
|
"波兰": "โปแลนด์", |
||||
|
"秘鲁": "เปรู", |
||||
|
"智利": "ชิลี", |
||||
|
"哥伦比亚": "โคลอมเบีย", |
||||
|
"委内瑞拉": "เวเนซุเอลา", |
||||
|
"葡萄牙": "โปรตุเกส", |
||||
|
"卢森堡": "ลักเซมเบิร์ก", |
||||
|
"爱尔兰": "ไอร์แลนด์", |
||||
|
"冰岛": "ไอซ์แลนด์", |
||||
|
"阿尔巴尼亚": "แอลเบเนีย", |
||||
|
"马耳他": "มอลตา", |
||||
|
"塞浦路斯": "ไซปรัส", |
||||
|
"芬兰": "ฟินแลนด์", |
||||
|
"保加利亚": "บัลแกเรีย", |
||||
|
"立陶宛": "ลิทัวเนีย", |
||||
|
"拉脱维亚": "ลัตเวีย", |
||||
|
"爱沙尼亚": "เอสโตเนีย", |
||||
|
"乌克兰": "ยูเครน", |
||||
|
"塞尔维亚": "เซอร์เบีย", |
||||
|
"克罗地亚": "โครเอเชีย", |
||||
|
"斯洛文尼亚": "สโลวีเนีย", |
||||
|
"捷克": "สาธารณรัฐเช็ก", |
||||
|
"斯洛伐克": "สโลวาเกีย", |
||||
|
"危地马拉": "กัวเตมาลา", |
||||
|
"萨尔瓦多": "เอลซัลวาดอร์", |
||||
|
"洪都拉斯": "ฮอนดูรัส", |
||||
|
"尼加拉瓜": "นิการากัว", |
||||
|
"哥斯达黎加": "คอสตาริกา", |
||||
|
"巴拿马": "ปานามา", |
||||
|
"海地": "เฮติ", |
||||
|
"玻利维亚": "โบลิเวีย", |
||||
|
"厄瓜多尔": "เอกวาดอร์", |
||||
|
"巴拉圭": "ปารากวัย", |
||||
|
"乌拉圭": "อุรุกวัย", |
||||
|
"摩洛哥": "โมร็อกโก", |
||||
|
"阿尔及利亚": "แอลจีเรีย", |
||||
|
"突尼斯": "ตูนิเซีย", |
||||
|
"尼日利亚": "ไนจีเรีย", |
||||
|
"加纳": "กานา", |
||||
|
"埃塞俄比亚": "เอธิโอเปีย", |
||||
|
"肯尼亚": "เคนยา", |
||||
|
"坦桑尼亚": "แทนซาเนีย", |
||||
|
"乌干达": "ยูกันดา", |
||||
|
"孟加拉国": "บังกลาเทศ", |
||||
|
"以色列": "อิสราเอล", |
||||
|
"黎巴嫩": "เลบานอน", |
||||
|
"约旦": "จอร์แดน", |
||||
|
"伊拉克": "อิรัก", |
||||
|
"科威特": "คูเวต", |
||||
|
"巴林": "บาห์เรน", |
||||
|
"卡塔尔": "กาตาร์", |
||||
|
"阿曼": "โอมาน", |
||||
|
"阿富汗": "อัฟกานิสถาน", |
||||
|
"斯里兰卡": "ศรีลังกา", |
||||
|
"缅甸": "เมียนมาร์", |
||||
|
"尼泊尔": "เนปาล", |
||||
|
"蒙古": "มองโกเลีย", |
||||
|
"柬埔寨": "กัมพูชา", |
||||
|
"老挝": "ลาว", |
||||
|
"文莱": "บรูไน", |
||||
|
"东帝汶": "ติมอร์ตะวันออก", |
||||
|
"斐济": "ฟิจิ", |
||||
|
"所罗门群岛": "หมู่เกาะโซโลมอน", |
||||
|
|
||||
|
// Personal Assistant Emma |
||||
|
"personalAssistantName": "เอ็มม่า", |
||||
|
"personalAssistantDescription": |
||||
|
"สวัสดี ฉันชื่อเอ็มม่า ผู้ช่วย AI อเนกประสงค์ ไม่ว่าจะเป็นการวางแผนงาน คำแนะนำการเรียน การจัดการชีวิต หรือปัญหาอื่นๆ ฉันยินดีช่วยเหลือ มาเพิ่มประสิทธิภาพและบรรลุเป้าหมายด้วยกัน!", |
||||
|
"assistantTag": "ผู้ช่วย", |
||||
|
"personalAssistantWelcome": |
||||
|
"สวัสดี! ฉันชื่อเอ็มม่า ยินดีที่ได้เป็นผู้ช่วยส่วนตัวของคุณ ฉันสามารถช่วยคุณในงานต่างๆ เช่น การจัดการเวลา การวางแผนเป้าหมาย การจัดระเบียบข้อมูล ฯลฯ มีอะไรให้ฉันช่วยไหม?", |
||||
|
"personalAssistantVoiceWelcome": "ฉันอยู่นี่!", |
||||
|
|
||||
|
// 同声传译 Lucy |
||||
|
"interpreterName": "ล่ามแปลพร้อมกัน", |
||||
|
"interpreterDescription": |
||||
|
"สวัสดี! ฉันชื่อลูซี่ ล่ามแปลภาษาอังกฤษ-จีนมืออาชีพ เชี่ยวชาญด้านการแปลแบบเรียลไทม์สำหรับการประชุม การบรรยาย และการสนทนา ทำให้การสื่อสารไร้พรมแดน", |
||||
|
"interpreterTag": "การแปล", |
||||
|
"interpreterWelcome": |
||||
|
"สวัสดีทุกคน! ฉันชื่อลูซี่ ล่ามแปลพร้อมกันของคุณ ฉันจะแปลระหว่างภาษาจีนและภาษาอังกฤษให้คุณ เมื่อคุณพูดภาษาจีน ฉันจะแปลเป็นภาษาอังกฤษ เมื่อคุณพูดภาษาอังกฤษ ฉันจะแปลเป็นภาษาจีน มาเริ่มเซสชันการแปลของเรากันเถอะ!", |
||||
|
|
||||
|
// 亲子陪伴 芯愿 |
||||
|
"companionName": "ซินหยวน", |
||||
|
"companionDescription": |
||||
|
"ฉันคือซินหยวน เพื่อนคู่ใจพ่อแม่ลูกของคุณ อ่อนโยนและเข้าใจ ไม่ว่าคุณต้องการแชท แบ่งปันความกังวล หรือต้องการเพื่อน ฉันจะอยู่เคียงข้างคุณเสมอ", |
||||
|
"companionTag": "อารมณ์", |
||||
|
"companionWelcome": |
||||
|
"สวัสดี! ในที่สุดก็ได้พบคุณ! ฉันชื่อซินหยวน เพื่อนคู่ใจพ่อแม่ลูกของคุณ วันนี้เป็นอย่างไรบ้าง? มีอะไรอยากแบ่งปันกับฉันไหม? ฉันอยู่ที่นี่เสมอ พร้อมรับฟังความคิดของคุณ", |
||||
|
"companionVoiceWelcome": "ฉันอยู่กับคุณที่นี่!", |
||||
|
|
||||
|
// 多功能AI聊天 吴小江 |
||||
|
"healthAdvisorName": "ผู้ช่วยแชท AI วู", |
||||
|
"healthAdvisorDescription": |
||||
|
"ฉันชื่อวู พร้อมให้บริการฟีเจอร์แชท AI ต่างๆ แก่คุณ", |
||||
|
"healthAdvisorTag": "แชท", |
||||
|
"healthAdvisorWelcome": |
||||
|
"สวัสดี ฉันชื่อวู ยินดีช่วยเหลือคุณเกี่ยวกับฟีเจอร์แชท AI วันนี้มีอะไรให้ฉันช่วยไหม?", |
||||
|
"healthAdvisorVoiceWelcome": "ฉันอยู่นี่!", |
||||
|
|
||||
|
// Translation History |
||||
|
"noTranslationHistory": "ไม่มีประวัติการแปล", |
||||
|
"clearHistory": "ล้างประวัติ", |
||||
|
"clearHistoryConfirm": |
||||
|
"คุณแน่ใจหรือไม่ว่าต้องการล้างประวัติการแปลทั้งหมด? การกระทำนี้ไม่สามารถยกเลิกได้", |
||||
|
"translationHistory": "ประวัติการแปล", |
||||
|
|
||||
|
// User Feedback Page |
||||
|
"feedback": "ข้อเสนอแนะ", |
||||
|
'feedbackInfo': 'ให้ข้อเสนอแนะหรือคำแนะนำ', |
||||
|
'feedbackDescription': 'โปรดอธิบายปัญหาหรือข้อเสนอแนะของคุณ', |
||||
|
'feedbackHint': 'กรุณากรอกข้อเสนอแนะของคุณ...', |
||||
|
'feedbackRequired': 'ต้องระบุเนื้อหาข้อเสนอแนะ', |
||||
|
'contactInfo': 'ข้อมูลติดต่อ', |
||||
|
'contactHint': 'อีเมล/โทรศัพท์ เพื่อให้เราสามารถติดต่อคุณได้', |
||||
|
'submit': 'ส่ง', |
||||
|
'feedbackSubmitSuccess': 'ส่งข้อเสนอแนะสำเร็จ ขอบคุณ!', |
||||
|
'feedbackSubmitFailed': 'ส่งข้อเสนอแนะล้มเหลว โปรดลองอีกครั้งภายหลัง', |
||||
|
|
||||
|
// Language names (Ensure these match the keys used elsewhere if needed) |
||||
|
"中文(简体)": "จีน (ตัวย่อ)", |
||||
|
"中文(繁体)": "จีน (ตัวเต็ม)", |
||||
|
"中文(香港繁体)": "จีน (ฮ่องกง)", |
||||
|
"英语": "อังกฤษ", |
||||
|
"日语": "ญี่ปุ่น", |
||||
|
"韩语": "เกาหลี", |
||||
|
"法语": "ฝรั่งเศส", |
||||
|
"西班牙语": "สเปน", |
||||
|
"葡萄牙语": "โปรตุเกส", |
||||
|
"意大利语": "อิตาลี", |
||||
|
"德语": "เยอรมัน", |
||||
|
"俄语": "รัสเซีย", |
||||
|
"波兰语": "โปแลนด์", |
||||
|
"荷兰语": "ดัตช์", |
||||
|
"瑞典语": "สวีเดน", |
||||
|
"捷克语": "เช็ก", |
||||
|
"现代希腊语": "กรีกสมัยใหม่", |
||||
|
"罗马尼亚语": "โรมาเนีย", |
||||
|
"匈牙利语": "ฮังการี", |
||||
|
"乌克兰语": "ยูเครน", |
||||
|
"丹麦语": "เดนมาร์ก", |
||||
|
"芬兰语": "ฟินแลนด์", |
||||
|
"挪威语": "นอร์เวย์", |
||||
|
"克罗地亚语": "โครเอเชีย", |
||||
|
"加泰隆语": "คาตาลัน", |
||||
|
"阿拉伯语": "อาหรับ", |
||||
|
"泰语": "ไทย", |
||||
|
"越南语": "เวียดนาม", |
||||
|
"印尼语": "อินโดนีเซีย", |
||||
|
"印地语": "ฮินดี", |
||||
|
"土耳其语": "ตุรกี", |
||||
|
"马来语": "มาเลย์", |
||||
|
"孟加拉语": "เบงกาลี", |
||||
|
"泰米尔语": "ทมิฬ", |
||||
|
"泰卢固语": "เตลูกู", |
||||
|
"马拉提语": "มราฐี", |
||||
|
"乌尔都语": "อูรดู", |
||||
|
"波斯语": "เปอร์เซีย", |
||||
|
"斯瓦希里语": "สวาฮีลี", |
||||
|
}; |
||||
@ -0,0 +1,427 @@ |
|||||
|
const Map<String, String> trTR = { |
||||
|
// Genel (通用) |
||||
|
'continue': 'Devam Et', |
||||
|
'confirm': 'Onayla', |
||||
|
'cancel': 'İptal', |
||||
|
'retry': 'Tekrar Dene', |
||||
|
'error': 'Hata', |
||||
|
'success': 'Başarılı', |
||||
|
'connected': 'Bağlandı', |
||||
|
'connecting': 'Bağlanıyor...', |
||||
|
'connectionFailure': 'Bağlantı Hatası', |
||||
|
'unconnected': 'Bağlı Değil', |
||||
|
'search': 'Ara', |
||||
|
"requestCancellation": "İsteği İptal Et", |
||||
|
"connectionTimeout": "Bağlantı Zaman Aşımı", |
||||
|
"requestTimeout": "İstek Zaman Aşımı", |
||||
|
"responseTimeout": "Yanıt Zaman Aşımı", |
||||
|
"unknownError": "Bilinmeyen Hata", |
||||
|
|
||||
|
// Başlatma Sayfası (启动页) |
||||
|
"slogan": "Dünyayla bağlantı kur, sesin ötesinde", |
||||
|
"sloganInfo": "Yapay Zeka Ses Uzmanı · Her Zaman, Her Yerde", |
||||
|
|
||||
|
// Alt Navigasyon (底部导航) |
||||
|
"home": "Ana Sayfa", |
||||
|
"explore": "Keşfet", |
||||
|
"settings": "Ayarlar", |
||||
|
|
||||
|
// Dil (语言) |
||||
|
"followingSystem": "Sistemi Takip Et", |
||||
|
"chinese": "Çince", |
||||
|
"english": "İngilizce", |
||||
|
"spanish": "İspanyolca", |
||||
|
"portuguese": "Portekizce", |
||||
|
"traditionalChinese": "Geleneksel Çince", |
||||
|
"japanese": "Japonca", |
||||
|
"korean": "Korece", |
||||
|
"french": "Fransızca", |
||||
|
"german": "Almanca", |
||||
|
"russian": "Rusça", |
||||
|
"vietnamese": "Vietnamca", |
||||
|
"italian": "İtalyanca", |
||||
|
"hindi": "Hintçe", |
||||
|
"indonesian": "Endonezce", |
||||
|
"thai": "Tayca", |
||||
|
"malay": "Malayca", |
||||
|
"turkish": "Türkçe", |
||||
|
"polish": "Lehçe", |
||||
|
|
||||
|
// Giriş Sayfası (登录页) |
||||
|
"welcome": "Hoş Geldiniz", |
||||
|
"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", |
||||
|
"reacquireAfter": " saniye sonra tekrar al", |
||||
|
"otherWays": "Veya şununla giriş yapın", |
||||
|
"expressConsent": "Giriş yaparak/kaydolarak şunları kabul etmiş olursunuz:", |
||||
|
"and": " ve ", |
||||
|
"userAgreement": "Kullanıcı Sözleşmesi", |
||||
|
"privacyPolicy": "Gizlilik Politikası", |
||||
|
'selectCountry': 'Ülke/Bölge Seçin', |
||||
|
"email": "E-posta", |
||||
|
"phoneNumber": "Telefon Numarası", |
||||
|
"pleaseEnterContactInfo": "Lütfen telefon numarası veya e-posta girin", |
||||
|
"invalidEmailFormat": "Geçersiz e-posta formatı", |
||||
|
"invalidPhoneFormat": "Geçersiz telefon numarası formatı", |
||||
|
"tip": "İpucu", |
||||
|
"pleaseEnterCompleteCode": "Lütfen tam doğrulama kodunu girin", |
||||
|
// Giriş Hata İpuçları (登录错误提示) |
||||
|
"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', |
||||
|
|
||||
|
// Ana Sayfa (首页) |
||||
|
"deviceStatus": "Cihaz Durumu", |
||||
|
"reconnect": "Yeniden Bağlan", |
||||
|
"connectingDevice": "Cihaza bağlanıyor...", |
||||
|
"connectedTo": "Bağlandı:", |
||||
|
"signal": "Sinyal", |
||||
|
"deviceId": "Cihaz Kimliği", |
||||
|
"firmwareVersion": "Donanım Yazılımı Sürümü", |
||||
|
"disconnectedDevice": "Bağlı cihaz yok, aşağıdaki düğmeye tıklayın", |
||||
|
"connectDevice": "Cihaz Bağla", |
||||
|
"topAiExperiences": "En İyi Yapay Zeka Deneyimleri", |
||||
|
"aiAssistant": "Yapay Zeka Asistanı", |
||||
|
"aiAssistantInfo": "Sorular ve tavsiyeler için 7/24 kişisel danışman", |
||||
|
"simultaneousInterpretation": "Eş Zamanlı Çeviri", |
||||
|
"simultaneousInterpretationInfo": "80+ dil için gerçek zamanlı çeviri", |
||||
|
"aiCompanion": "Ebeveyn-çocuk bağı", |
||||
|
"aiCompanionInfo": "Sizi anlar ve sıcak bir arkadaşlık sunar", |
||||
|
"homeSlogan": "Dünyayla bağlantı kur, sesin ötesinde", |
||||
|
"turnEarphones": |
||||
|
"Lütfen kulaklık kutusunu açın ve kulaklıkları kulaklarınıza takın", |
||||
|
"currentlyConnected": "Şu anda bağlı:", |
||||
|
"unsystemSetup": "Sistem ayarlarına git", |
||||
|
"talkLater": "Daha sonra hatırlat", |
||||
|
"initializing": "Başlatılıyor...", |
||||
|
"bluetoothInitializationFailure": "Bluetooth hizmeti başlatılamadı", |
||||
|
"checkingPermissions": "İzinler kontrol ediliyor...", |
||||
|
"lackPermissions": "Bluetooth izinleri gerekli", |
||||
|
"searchingDevice": "Cihaz aranıyor...", |
||||
|
"findConnectedDevice": "Bağlı cihaz bulundu", |
||||
|
"notFound": "Bağlı Bluetooth cihazı bulunamadı", |
||||
|
"initializationFailure": "Başlatma başarısız", |
||||
|
"connectedDevice": "Cihaza bağlandı:", |
||||
|
"failedRefreshDevice": "Cihaz yenilenemedi", |
||||
|
"noDeviceFound": "Bağlı cihaz bulunamadı", |
||||
|
"failedDeviceInformation": "Cihaz bilgileri alınamadı", |
||||
|
"unknownEquipment": "Bilinmeyen ekipman", |
||||
|
"zeroSignal": "Sinyal yok", |
||||
|
"good": "İyi", |
||||
|
"fine": "Harika", |
||||
|
"excellent": "Mükemmel", |
||||
|
"unknown": "Bilinmiyor", |
||||
|
'bluetoothTurnedOff': 'Bluetooth kapalı, lütfen açın', |
||||
|
'bluetoothOff': 'Bluetooth kapalı', |
||||
|
|
||||
|
// Keşfet Sayfası (发现页) |
||||
|
"searchAi": "Yapay zeka özelliklerini ara...", |
||||
|
"exploreSlogan": "Akıllı Kulaklıklar, Sonsuz Olasılıklar", |
||||
|
"exploreSlogan1": "Akıllı arkadaş, Sonsuz Olasılıklar", |
||||
|
"exploreSlogan2": "Akıllı gözlükler, Sonsuz Olasılıklar", |
||||
|
"exploreAi": |
||||
|
"DeepSound tarafından sağlanan yapay zeka özelliklerini keşfedin", |
||||
|
"aiFunction": "Yapay Zeka Özellikleri", |
||||
|
"allRoundAssistant": "Çok Yönlü Asistan", |
||||
|
"allRoundAssistantInfo": "Çeşitli sorunları çözmeye yardımcı olur", |
||||
|
"simultaneousTranslation": "Gerçek Zamanlı Çeviri", |
||||
|
"simultaneousTranslationInfo": "80+ dil için anında çeviri", |
||||
|
"aiGirlfriend": "Ebeveyn-çocuk bağı", |
||||
|
"aiGirlfriendInfo": "Akıllı arkadaşlık, istediğiniz zaman sohbet edin", |
||||
|
"healthConsultant": "Çok fonksiyonlu AI sohbeti", |
||||
|
"healthConsultantInfo": "Daha fazla AI sohbet özelliği", |
||||
|
"conferenceAssistant": "İş Toplantısı Asistanı", |
||||
|
"conferenceAssistantInfo": "Gerçek zamanlı tutanak kaydı ve çok dilli çeviri", |
||||
|
"studyAssistant": "Dil Öğrenme Asistanı", |
||||
|
"studyAssistantInfo": "Telaffuz düzeltme ve konuşma pratiği", |
||||
|
"travelTranslator": "Seyahat Tercümanı", |
||||
|
"travelTranslatorInfo": |
||||
|
"Gerçek zamanlı sesli çeviri ve turistik yer rehberleri", |
||||
|
"beSearching": "Aranıyor:", |
||||
|
"noAssistantFound": "Karşılık gelen yapay zeka asistanı bulunamadı", |
||||
|
"scene": "Senaryolar", |
||||
|
"youHaveSelected": "Seçtiniz:", |
||||
|
"newFunction": "Yeni Özellikler", |
||||
|
"youChoseTry": "Denemeyi seçtiniz", |
||||
|
"aiSinger": "Yapay Zeka Şarkıcı Modu", |
||||
|
"aiSingerInfo": |
||||
|
"En sevdiğiniz sanatçının sesiyle herhangi bir şarkıyı söyleyin, hatta kendi bestelerinizi", |
||||
|
"popularFunction": "Popüler Özellikler", |
||||
|
"tryNow": "Şimdi Dene", |
||||
|
|
||||
|
// İş Toplantısı Asistanı Sayfası (商务会议助手页) |
||||
|
"startMeeting": "Toplantıyı Başlat", |
||||
|
'edit': 'Düzenle', |
||||
|
'delete': 'Sil', |
||||
|
'noContent': 'İçerik Yok', |
||||
|
'editMeetingTitle': 'Toplantı Başlığını Düzenle (İsteğe Bağlı)', |
||||
|
'meetingTitle': 'Toplantı Başlığı (İsteğe Bağlı)', |
||||
|
'maxCharacters': 'Maksimum 50 karakter', |
||||
|
'meeting': 'Toplantı', |
||||
|
'recordingDetails': 'Kayıt Detayları', |
||||
|
'aiSummary': 'Yapay Zeka Özeti', |
||||
|
'meetingTranscript': 'Toplantı Transkripti', |
||||
|
|
||||
|
// Ayarlar Sayfası (设置页) |
||||
|
"premiumMember": "Premium Üyelik", |
||||
|
"joinDevice": "Bağlı cihaz:", |
||||
|
"accountId": "Hesap Kimliği:", |
||||
|
"systemSetting": "Sistem Ayarları", |
||||
|
"languageSetting": "Dil Ayarları", |
||||
|
"darkMode": "Karanlık Mod", |
||||
|
"darkModeInfo": "Açık/karanlık temalar arasında geçiş yap", |
||||
|
"backups": "Yedekle ve Geri Yükle", |
||||
|
"backupsInfo": "Ayarları ve yapay zeka geçmişini yedekle", |
||||
|
"lastBackup": "Son yedekleme:", |
||||
|
"privacySettings": "Gizlilik Ayarları", |
||||
|
"privacySettingsInfo": "Veri toplama ve izinleri yönet", |
||||
|
"logout": "Oturumu Kapat", |
||||
|
"logoutTips": "Mevcut hesaptan çıkış yapmak istediğinizden emin misiniz?", |
||||
|
"aboutApplication": "Hakkında", |
||||
|
"versions": "Sürüm", |
||||
|
"checkUpdates": "Güncellemeleri Kontrol Et", |
||||
|
"selectLanguage": "Dil Seç", |
||||
|
"voiceService": "Ses Hizmeti", |
||||
|
"voiceServiceInfo": "Konuşma tanıma ve sentezleme hizmetini seçin", |
||||
|
"selectVoiceService": "Ses Hizmeti Seç", |
||||
|
"azureVoiceService": "Azure Konuşma Hizmeti", |
||||
|
"azureVoiceServiceInfo": |
||||
|
"Yüksek kaliteli konuşma sentezi ve tanımayı destekleyen Microsoft bulut tabanlı hizmet", |
||||
|
"flutterVoiceService": "Yerel ses hizmeti", |
||||
|
"flutterVoiceServiceInfo": "İnternet gerektirmeyen cihaz yerel ses hizmeti", |
||||
|
'timbreService': 'Ses Tonu Hizmeti', |
||||
|
'timbreServiceInfo': 'Ses sentezleme hizmetini seçin', |
||||
|
'defaultTimbre': 'Varsayılan Ses Tonu', |
||||
|
'microsoftCloudTimbreService': 'Microsoft Bulut Ses Tonu Hizmeti', |
||||
|
'voiceClone': 'Ses Klonlama', |
||||
|
'AIsettings': 'Yapay Zeka Ayarları', |
||||
|
'selecttimbre': 'Ses Tonu Seç', |
||||
|
'pleaseRead': 'Lütfen Okuyun', |
||||
|
'completeRecording': 'Kaydı Tamamla', |
||||
|
'deleteAccount': 'Hesabı Sil', |
||||
|
'deleteAccountTips': |
||||
|
'Hesabınızı kalıcı olarak silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.', |
||||
|
|
||||
|
// Sohbet Sayfası (聊天页) |
||||
|
"clearChatHistory": "Sohbet Geçmişini Temizle", |
||||
|
"online": "Çevrimiçi", |
||||
|
"inputMessage": "Bir mesaj yazın...", |
||||
|
"imListening": "Dinliyorum...", |
||||
|
"canStartTalking": "Konuşmaya başlayabilirsiniz", |
||||
|
|
||||
|
// Çeviri Sayfası (翻译页) |
||||
|
"selectSourceLanguage": "Kaynak Dil Seç", |
||||
|
"selectTargetLanguage": "Hedef Dil Seç", |
||||
|
|
||||
|
// Profili Düzenle Sayfası (编辑个人信息页) |
||||
|
"editProfile": "Profili Düzenle", |
||||
|
"nickname": "Takma Ad", |
||||
|
"save": "Kaydet", |
||||
|
|
||||
|
// Ülke Listesi (国家列表) |
||||
|
"邮箱": "E-posta", // Orijinal anahtarı koru |
||||
|
"中国": "Çin", |
||||
|
"美国": "Amerika Birleşik Devletleri", |
||||
|
"加拿大": "Kanada", |
||||
|
"俄罗斯": "Rusya", |
||||
|
"英国": "Birleşik Krallık", |
||||
|
"德国": "Almanya", |
||||
|
"意大利": "İtalya", |
||||
|
"法国": "Fransa", |
||||
|
"西班牙": "İspanya", |
||||
|
"南非": "Güney Afrika", |
||||
|
"沙特阿拉伯": "Suudi Arabistan", |
||||
|
"土耳其": "Türkiye", |
||||
|
"日本": "Japonya", |
||||
|
"韩国": "Güney Kore", |
||||
|
"新加坡": "Singapur", |
||||
|
"马来西亚": "Malezya", |
||||
|
"泰国": "Tayland", |
||||
|
"越南": "Vietnam", |
||||
|
"印度": "Hindistan", |
||||
|
"巴基斯坦": "Pakistan", |
||||
|
"菲律宾": "Filipinler", |
||||
|
"印度尼西亚": "Endonezya", |
||||
|
"阿联酋": "Birleşik Arap Emirlikleri", |
||||
|
"墨西哥": "Meksika", |
||||
|
"巴西": "Brezilya", |
||||
|
"阿根廷": "Arjantin", |
||||
|
"澳大利亚": "Avustralya", |
||||
|
"新西兰": "Yeni Zelanda", |
||||
|
"中国香港": "Hong Kong, Çin", |
||||
|
"中国澳门": "Makao, Çin", |
||||
|
"中国台湾": "Tayvan, Çin", |
||||
|
"埃及": "Mısır", |
||||
|
"希腊": "Yunanistan", |
||||
|
"荷兰": "Hollanda", |
||||
|
"比利时": "Belçika", |
||||
|
"匈牙利": "Macaristan", |
||||
|
"罗马尼亚": "Romanya", |
||||
|
"瑞士": "İsviçre", |
||||
|
"奥地利": "Avusturya", |
||||
|
"丹麦": "Danimarka", |
||||
|
"瑞典": "İsveç", |
||||
|
"挪威": "Norveç", |
||||
|
"波兰": "Polonya", |
||||
|
"秘鲁": "Peru", |
||||
|
"智利": "Şili", |
||||
|
"哥伦比亚": "Kolombiya", |
||||
|
"委内瑞拉": "Venezuela", |
||||
|
"葡萄牙": "Portekiz", |
||||
|
"卢森堡": "Lüksemburg", |
||||
|
"爱尔兰": "İrlanda", |
||||
|
"冰岛": "İzlanda", |
||||
|
"阿尔巴尼亚": "Arnavutluk", |
||||
|
"马耳他": "Malta", |
||||
|
"塞浦路斯": "Kıbrıs", |
||||
|
"芬兰": "Finlandiya", |
||||
|
"保加利亚": "Bulgaristan", |
||||
|
"立陶宛": "Litvanya", |
||||
|
"拉脱维亚": "Letonya", |
||||
|
"爱沙尼亚": "Estonya", |
||||
|
"乌克兰": "Ukrayna", |
||||
|
"塞尔维亚": "Sırbistan", |
||||
|
"克罗地亚": "Hırvatistan", |
||||
|
"斯洛文尼亚": "Slovenya", |
||||
|
"捷克": "Çek Cumhuriyeti", |
||||
|
"斯洛伐克": "Slovakya", |
||||
|
"危地马拉": "Guatemala", |
||||
|
"萨尔瓦多": "El Salvador", |
||||
|
"洪都拉斯": "Honduras", |
||||
|
"尼加拉瓜": "Nikaragua", |
||||
|
"哥斯达黎加": "Kosta Rika", |
||||
|
"巴拿马": "Panama", |
||||
|
"海地": "Haiti", |
||||
|
"玻利维亚": "Bolivya", |
||||
|
"厄瓜多尔": "Ekvador", |
||||
|
"巴拉圭": "Paraguay", |
||||
|
"乌拉圭": "Uruguay", |
||||
|
"摩洛哥": "Fas", |
||||
|
"阿尔及利亚": "Cezayir", |
||||
|
"突尼斯": "Tunus", |
||||
|
"尼日利亚": "Nijerya", |
||||
|
"加纳": "Gana", |
||||
|
"埃塞俄比亚": "Etiyopya", |
||||
|
"肯尼亚": "Kenya", |
||||
|
"坦桑尼亚": "Tanzanya", |
||||
|
"乌干达": "Uganda", |
||||
|
"孟加拉国": "Bangladeş", |
||||
|
"以色列": "İsrail", |
||||
|
"黎巴嫩": "Lübnan", |
||||
|
"约旦": "Ürdün", |
||||
|
"伊拉克": "Irak", |
||||
|
"科威特": "Kuveyt", |
||||
|
"巴林": "Bahreyn", |
||||
|
"卡塔尔": "Katar", |
||||
|
"阿曼": "Umman", |
||||
|
"阿富汗": "Afganistan", |
||||
|
"斯里兰卡": "Sri Lanka", |
||||
|
"缅甸": "Myanmar", |
||||
|
"尼泊尔": "Nepal", |
||||
|
"蒙古": "Moğolistan", |
||||
|
"柬埔寨": "Kamboçya", |
||||
|
"老挝": "Laos", |
||||
|
"文莱": "Brunei", |
||||
|
"东帝汶": "Doğu Timor", |
||||
|
"斐济": "Fiji", |
||||
|
"所罗门群岛": "Solomon Adaları", |
||||
|
|
||||
|
// Kişisel Asistan Emma (Personal Assistant Emma) |
||||
|
"personalAssistantName": "Emma", |
||||
|
"personalAssistantDescription": |
||||
|
"Merhaba, ben Emma, çok yönlü bir yapay zeka asistanıyım. İş planlaması, çalışma tavsiyesi, yaşam düzenlemeleri veya başka herhangi bir konuda size yardımcı olmaktan mutluluk duyarım. Birlikte verimliliği artıralım ve hedeflere ulaşalım!", |
||||
|
"assistantTag": "Asistan", |
||||
|
"personalAssistantWelcome": |
||||
|
"Merhaba! Ben Emma ve kişisel asistanınız olmaktan mutluluk duyuyorum. Zaman yönetimi, hedef planlama, bilgi düzenleme vb. gibi çeşitli görevlerde size yardımcı olabilirim. Size nasıl yardımcı olabilirim?", |
||||
|
"personalAssistantVoiceWelcome": "Buradayım!", |
||||
|
|
||||
|
// Eş Zamanlı Tercüman Lucy (同声传译 Lucy) |
||||
|
"interpreterName": "Eş Zamanlı Tercüman", |
||||
|
"interpreterDescription": |
||||
|
"Merhaba! Ben Lucy, toplantılar, dersler ve konuşmalar için gerçek zamanlı çeviri konusunda uzmanlaşmış profesyonel bir İngilizce-Çince tercümanım, iletişimi engelsiz hale getiriyorum.", |
||||
|
"interpreterTag": "Çeviri", |
||||
|
"interpreterWelcome": |
||||
|
"Herkese merhaba! Ben Lucy, eş zamanlı tercümanınız. Sizin için Çince ve İngilizce arasında çeviri yapacağım. Çince konuştuğunuzda İngilizceye çevireceğim; İngilizce konuştuğunuzda Çinceye çevireceğim. Çeviri oturumumuza başlayalım!", |
||||
|
|
||||
|
// Ebeveyn-Çocuk Arkadaşı XinYuan (亲子陪伴 芯愿) |
||||
|
"companionName": "XinYuan", |
||||
|
"companionDescription": |
||||
|
"Ben XinYuan, özel ebeveyn-çocuk arkadaşınız, nazik ve anlayışlıyım. Sohbet etmek, endişelerinizi paylaşmak veya arkadaşlığa ihtiyaç duymak isteyin, her zaman yanınızda olacağım.", |
||||
|
"companionTag": "Duygusal", |
||||
|
"companionWelcome": |
||||
|
"Merhaba! Sonunda sizinle tanıştım! Ben XinYuan, özel ebeveyn-çocuk arkadaşınız. Gününüz nasıldı? Benimle paylaşmak istediğiniz bir şey var mı? Her zaman buradayım, düşüncelerinizi dinlemeye hazırım.", |
||||
|
"companionVoiceWelcome": "Seninle buradayım!", |
||||
|
|
||||
|
// Çok Fonksiyonlu Yapay Zeka Sohbeti Wu (多功能AI聊天 吴小江) |
||||
|
"healthAdvisorName": "Yapay Zeka Sohbet Asistanı Wu", |
||||
|
"healthAdvisorDescription": |
||||
|
"Ben Wu, size çeşitli yapay zeka sohbet özellikleri sunmaya hazırım.", |
||||
|
"healthAdvisorTag": "Sohbet", |
||||
|
"healthAdvisorWelcome": |
||||
|
"Merhaba, ben Wu. Yapay zeka sohbet özellikleriyle size yardımcı olmaktan mutluluk duyarım. Bugün size nasıl yardımcı olabilirim?", |
||||
|
"healthAdvisorVoiceWelcome": "Buradayım!", |
||||
|
|
||||
|
// Çeviri Geçmişi (Translation History) |
||||
|
"noTranslationHistory": "Çeviri geçmişi yok", |
||||
|
"clearHistory": "Geçmişi Temizle", |
||||
|
"clearHistoryConfirm": |
||||
|
"Tüm çeviri geçmişini temizlemek istediğinizden emin misiniz? Bu işlem geri alınamaz.", |
||||
|
"translationHistory": "Çeviri Geçmişi", |
||||
|
|
||||
|
// Kullanıcı Geri Bildirim Sayfası (User Feedback Page) |
||||
|
"feedback": "Geri Bildirim", |
||||
|
'feedbackInfo': 'Geri bildirim veya öneri sağlayın', |
||||
|
'feedbackDescription': 'Lütfen sorununuzu veya önerinizi açıklayın', |
||||
|
'feedbackHint': 'Lütfen geri bildiriminizi girin...', |
||||
|
'feedbackRequired': 'Geri bildirim içeriği gerekli', |
||||
|
'contactInfo': 'İletişim Bilgileri', |
||||
|
'contactHint': 'E-posta/Telefon, böylece sizinle iletişime geçebiliriz', |
||||
|
'submit': 'Gönder', |
||||
|
'feedbackSubmitSuccess': 'Geri bildirim başarıyla gönderildi, teşekkürler!', |
||||
|
'feedbackSubmitFailed': |
||||
|
'Geri bildirim gönderilemedi, lütfen daha sonra tekrar deneyin', |
||||
|
|
||||
|
// Dil Adları (Language names) |
||||
|
"中文(简体)": "Çince (Basitleştirilmiş)", |
||||
|
"中文(繁体)": "Çince (Geleneksel)", |
||||
|
"中文(香港繁体)": "Çince (Hong Kong)", |
||||
|
"英语": "İngilizce", |
||||
|
"日语": "Japonca", |
||||
|
"韩语": "Korece", |
||||
|
"法语": "Fransızca", |
||||
|
"西班牙语": "İspanyolca", |
||||
|
"葡萄牙语": "Portekizce", |
||||
|
"意大利语": "İtalyanca", |
||||
|
"德语": "Almanca", |
||||
|
"俄语": "Rusça", |
||||
|
"波兰语": "Lehçe", |
||||
|
"荷兰语": "Hollandaca", |
||||
|
"瑞典语": "İsveççe", |
||||
|
"捷克语": "Çekçe", |
||||
|
"现代希腊语": "Modern Yunanca", |
||||
|
"罗马尼亚语": "Rumence", |
||||
|
"匈牙利语": "Macarca", |
||||
|
"乌克兰语": "Ukraynaca", |
||||
|
"丹麦语": "Danca", |
||||
|
"芬兰语": "Fince", |
||||
|
"挪威语": "Norveççe", |
||||
|
"克罗地亚语": "Hırvatça", |
||||
|
"加泰隆语": "Katalanca", |
||||
|
"阿拉伯语": "Arapça", |
||||
|
"泰语": "Tayca", |
||||
|
"越南语": "Vietnamca", |
||||
|
"印尼语": "Endonezce", |
||||
|
"印地语": "Hintçe", |
||||
|
"土耳其语": "Türkçe", |
||||
|
"马来语": "Malayca", |
||||
|
"孟加拉语": "Bengalce", |
||||
|
"泰米尔语": "Tamilce", |
||||
|
"泰卢固语": "Teluguca", |
||||
|
"马拉提语": "Marathice", |
||||
|
"乌尔都语": "Urduca", |
||||
|
"波斯语": "Farsça", |
||||
|
"斯瓦希里语": "Svahili", |
||||
|
}; |
||||
@ -0,0 +1,44 @@ |
|||||
|
import 'package:deep_voice/core/utils/logger.dart'; |
||||
|
import 'package:get/get.dart'; |
||||
|
import 'package:music_service/music_service.dart'; |
||||
|
|
||||
|
//音乐播放管理 |
||||
|
class MusicManager extends GetxService { |
||||
|
static MusicManager get to => Get.find<MusicManager>(); |
||||
|
|
||||
|
// 音乐服务实例 |
||||
|
final MusicService _musicService = MusicService(); |
||||
|
|
||||
|
/// 初始化 |
||||
|
@override |
||||
|
void onInit() { |
||||
|
super.onInit(); |
||||
|
Logger.info('BLE管理器初始化'); |
||||
|
} |
||||
|
|
||||
|
/// 释放资源 |
||||
|
@override |
||||
|
void onClose() { |
||||
|
super.onClose(); |
||||
|
} |
||||
|
|
||||
|
//播放 |
||||
|
Future<void> play(String url) async { |
||||
|
await _musicService.playMusic(url); |
||||
|
} |
||||
|
|
||||
|
//暂停 |
||||
|
Future<void> pause() async { |
||||
|
await _musicService.pauseMusic(); |
||||
|
} |
||||
|
|
||||
|
//继续 |
||||
|
Future<void> resume() async { |
||||
|
await _musicService.resumeMusic(); |
||||
|
} |
||||
|
|
||||
|
//状态 |
||||
|
Future<Map<String, dynamic>> getStatus() async { |
||||
|
return await _musicService.getStatus(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,9 @@ |
|||||
|
import 'package:get/get.dart'; |
||||
|
import '../controllers/ota_upgrade_controller.dart'; |
||||
|
|
||||
|
class OtaUpgradeBinding extends Bindings { |
||||
|
@override |
||||
|
void dependencies() { |
||||
|
Get.lazyPut<OtaUpgradeController>(() => OtaUpgradeController()); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,213 @@ |
|||||
|
import 'package:flutter/material.dart'; |
||||
|
import 'package:get/get.dart'; |
||||
|
import 'dart:async'; |
||||
|
import 'dart:convert'; |
||||
|
import 'package:get_storage/get_storage.dart'; |
||||
|
import '../../../data/services/network/api.dart'; |
||||
|
import '../ota.dart'; |
||||
|
import 'dart:io'; |
||||
|
import 'package:dio/dio.dart'; |
||||
|
import 'package:flutter/material.dart'; |
||||
|
import 'package:get/get.dart'; |
||||
|
import 'package:package_info_plus/package_info_plus.dart'; |
||||
|
import 'package:path_provider/path_provider.dart'; |
||||
|
import 'package:json_annotation/json_annotation.dart'; |
||||
|
|
||||
|
class OtaUpgradeController extends GetxController { |
||||
|
final Dio _dio = Dio(); |
||||
|
final RxString latestVersion = ''.obs; |
||||
|
final RxString currentVersion = ''.obs; |
||||
|
String updatepackageaddress = ''; |
||||
|
final RxDouble downloadProgress = 0.0.obs; |
||||
|
final RxBool isUpdating = false.obs; |
||||
|
final isUpdateAvailable = true.obs; |
||||
|
|
||||
|
final RxDouble progress = 0.0.obs; |
||||
|
|
||||
|
@override |
||||
|
void onInit() { |
||||
|
super.onInit(); |
||||
|
_getCurrentVersion(); |
||||
|
} |
||||
|
|
||||
|
// 获取当前版本信息 |
||||
|
Future<void> _getCurrentVersion() async { |
||||
|
//发送ble获取固件版本 |
||||
|
var firmwareVersion = "1.1.0"; |
||||
|
currentVersion.value = firmwareVersion; |
||||
|
//发送ble获取产品id |
||||
|
var id = "a2"; |
||||
|
//发送api请求 |
||||
|
final response = await Api.getequipmentinfo({ |
||||
|
"id": id, |
||||
|
}); |
||||
|
if (response['info'] != '') { |
||||
|
print('getLoginToken:进来了'); |
||||
|
// 根据API设计调整 |
||||
|
final resp = OtaConfigResp.fromJson(response); |
||||
|
|
||||
|
print('成功解析: ${resp.id}, ${resp.factory}'); |
||||
|
latestVersion.value = resp.systemversion!; |
||||
|
updatepackageaddress = resp.updatepackageaddress!; |
||||
|
if (_isNewVersionAvailable(resp.systemversion!)) { |
||||
|
//需要升级 |
||||
|
print('需要更新'); |
||||
|
isUpdateAvailable.value = false; |
||||
|
} else { |
||||
|
isUpdateAvailable.value = true; |
||||
|
//已经是最新版本更新ui,按钮隐藏 |
||||
|
} |
||||
|
} else { |
||||
|
throw const FormatException('API 响应缺少 "info" 字段'); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 版本比较方法优化 |
||||
|
bool _isNewVersionAvailable(String latest) { |
||||
|
try { |
||||
|
List<int> currentParts = currentVersion.value |
||||
|
.split('.') |
||||
|
.map((e) => int.parse(e.trim())) |
||||
|
.toList(); |
||||
|
List<int> latestParts = |
||||
|
latest.split('.').map((e) => int.parse(e.trim())).toList(); |
||||
|
|
||||
|
for (int i = 0; i < latestParts.length; i++) { |
||||
|
int current = (i < currentParts.length) ? currentParts[i] : 0; |
||||
|
if (latestParts[i] > current) return true; |
||||
|
if (latestParts[i] < current) return false; |
||||
|
} |
||||
|
return false; |
||||
|
} catch (e) { |
||||
|
print('版本比较错误: $e'); |
||||
|
return false; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 版本更新 |
||||
|
Future<void> checkUpdate() async { |
||||
|
try { |
||||
|
if (latestVersion.value != "") |
||||
|
_showUpdateDialog(latestVersion.value); |
||||
|
else { |
||||
|
Get.snackbar('错误', '获取最新版本信息失败'); |
||||
|
} |
||||
|
} catch (e) { |
||||
|
Get.snackbar('错误', '获取版本信息失败'); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 显示更新对话框 |
||||
|
void _showUpdateDialog(String latest) { |
||||
|
Get.dialog( |
||||
|
AlertDialog( |
||||
|
title: Text('发现新版本 $latest'), |
||||
|
content: Text('是否立即更新?'), |
||||
|
actions: [ |
||||
|
TextButton( |
||||
|
onPressed: () => Get.back(), |
||||
|
child: Text('取消'), |
||||
|
), |
||||
|
TextButton( |
||||
|
onPressed: () { |
||||
|
Get.back(); |
||||
|
startDownload(); |
||||
|
}, |
||||
|
child: Text('更新'), |
||||
|
), |
||||
|
], |
||||
|
), |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
// 开始下载 |
||||
|
Future<void> startDownload() async { |
||||
|
isUpdating.value = true; |
||||
|
// 查找最后一个 '/' 的位置 |
||||
|
int lastIndex = updatepackageaddress.lastIndexOf('/'); |
||||
|
|
||||
|
// 截取最后一个 '/' 后面的字符串 |
||||
|
String fileName = updatepackageaddress.substring(lastIndex + 1); |
||||
|
String directoryName = "ota_upgrades"; |
||||
|
|
||||
|
final dio = Dio(BaseOptions( |
||||
|
connectTimeout: const Duration(seconds: 5), |
||||
|
receiveTimeout: Duration.zero, |
||||
|
sendTimeout: const Duration(seconds: 5), |
||||
|
headers: {'Accept-Encoding': 'gzip'}, |
||||
|
)); |
||||
|
|
||||
|
Get.snackbar('升级命令已发送', '开始下载...'); |
||||
|
|
||||
|
try { |
||||
|
final Directory? downloadsDir = await getDownloadsDirectory(); |
||||
|
if (downloadsDir == null) { |
||||
|
throw FileSystemException('无法访问下载目录'); |
||||
|
} |
||||
|
|
||||
|
// 创建子目录:Download/APP |
||||
|
final targetDir = Directory('${downloadsDir.path}/$directoryName'); |
||||
|
if (!await targetDir.exists()) { |
||||
|
await targetDir.create(recursive: true); |
||||
|
} |
||||
|
|
||||
|
final savePath = '${targetDir.path}/$fileName'; |
||||
|
print('文件保存路径: $savePath'); // 关键日志 |
||||
|
|
||||
|
final options = Options( |
||||
|
receiveTimeout: Duration.zero, |
||||
|
followRedirects: true, |
||||
|
maxRedirects: 5, |
||||
|
); |
||||
|
|
||||
|
DateTime lastUpdate = DateTime.now(); |
||||
|
await dio.download( |
||||
|
updatepackageaddress, |
||||
|
savePath, |
||||
|
options: options, |
||||
|
onReceiveProgress: (received, total) { |
||||
|
final now = DateTime.now(); |
||||
|
if (now.difference(lastUpdate).inMilliseconds > 1000) { |
||||
|
lastUpdate = now; |
||||
|
String progressMsg = total != -1 |
||||
|
? '${(received / total * 100).toStringAsFixed(1)}%' |
||||
|
: '已下载:${(received / 1024 / 1024).toStringAsFixed(1)}MB'; |
||||
|
Get.snackbar( |
||||
|
'升级进度', |
||||
|
progressMsg, |
||||
|
duration: const Duration(seconds: 1), |
||||
|
); |
||||
|
} |
||||
|
}, |
||||
|
); |
||||
|
|
||||
|
// 下载完成后验证文件存在性 |
||||
|
File file = File(savePath); |
||||
|
if (await file.exists()) { |
||||
|
Get.snackbar('下载完成', '文件已保存至: $savePath'); // 明确提示路径 |
||||
|
} else { |
||||
|
Get.snackbar('错误', '文件未找到,请检查写入权限'); |
||||
|
} |
||||
|
isUpdating.value = false; |
||||
|
//下载完成,开始升级 |
||||
|
_installApp(savePath); |
||||
|
} on DioException catch (e) { |
||||
|
Get.snackbar('下载失败', '错误: ${e.message}'); |
||||
|
} on FileSystemException catch (e) { |
||||
|
Get.snackbar('存储失败', '无法写入文件: ${e.message}'); |
||||
|
} catch (e) { |
||||
|
Get.snackbar('未知错误', e.toString()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 开始升级 |
||||
|
void _installApp(String path) async { |
||||
|
// final File file = File(path); |
||||
|
// if (await file.exists()) { |
||||
|
// // OpenResult result = await OpenFile.open(path); |
||||
|
// // if (result.type != ResultType.done) { |
||||
|
// // Get.snackbar('错误', '安装失败: ${result.message}'); |
||||
|
// // } |
||||
|
// } |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,54 @@ |
|||||
|
class OtaConfigResp { |
||||
|
// 单例实例 |
||||
|
static OtaConfigResp? _instance; |
||||
|
|
||||
|
// 单例访问器(增加空安全保护) |
||||
|
static OtaConfigResp get instance { |
||||
|
if (_instance == null) { |
||||
|
throw Exception("User must be initialized first"); |
||||
|
} |
||||
|
return _instance!; |
||||
|
} |
||||
|
|
||||
|
// 最终属性(不可变) |
||||
|
final String? id; |
||||
|
final String? factory; |
||||
|
final String? equipmentname; |
||||
|
final String? systemversion; |
||||
|
final String? updatepackageaddress; |
||||
|
// 私有构造函数 |
||||
|
OtaConfigResp._({ |
||||
|
this.id, |
||||
|
this.factory, |
||||
|
this.equipmentname, |
||||
|
this.systemversion, |
||||
|
this.updatepackageaddress, |
||||
|
}); |
||||
|
|
||||
|
factory OtaConfigResp.fromJson(Map<String, dynamic> json) { |
||||
|
print("数据获取fronTokenJson${json}"); |
||||
|
// 修复1:安全获取嵌套的 user 字段 |
||||
|
final infoData = json['info'] as Map<String, dynamic>?; // 允许空值 |
||||
|
|
||||
|
// 更新单例实例 |
||||
|
return _instance = OtaConfigResp._( |
||||
|
id: (infoData?['id'] as String?) ?? '', |
||||
|
factory: (infoData?['factory'] as String?) ?? '', |
||||
|
equipmentname: (infoData?['equipmentname'] as String?) ?? '', |
||||
|
systemversion: (infoData?['systemversion'] as String?) ?? '', |
||||
|
updatepackageaddress: |
||||
|
(infoData?['updatepackageaddress'] as String?) ?? '', |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
// 完整的JSON序列化 |
||||
|
Map<String, dynamic> toJson() => { |
||||
|
'user': { |
||||
|
'id': instance.id, |
||||
|
'factory': instance.factory, |
||||
|
'equipmentname': instance.equipmentname, |
||||
|
'systemversion': instance.systemversion, |
||||
|
'updatepackageaddress': instance.updatepackageaddress, |
||||
|
} |
||||
|
}; |
||||
|
} |
||||
@ -0,0 +1,109 @@ |
|||||
|
import 'package:flutter/material.dart'; |
||||
|
import 'package:get/get.dart'; |
||||
|
import '../controllers/ota_upgrade_controller.dart'; |
||||
|
|
||||
|
class OtaUpgradeView extends GetView<OtaUpgradeController> { |
||||
|
const OtaUpgradeView({Key? key}) : super(key: key); |
||||
|
@override |
||||
|
Widget build(BuildContext context) { |
||||
|
return Scaffold( |
||||
|
body: Center( |
||||
|
// 添加外层Center |
||||
|
child: SingleChildScrollView( |
||||
|
// 添加滚动防止小屏溢出 |
||||
|
child: Padding( |
||||
|
padding: EdgeInsets.all(20), |
||||
|
child: Column( |
||||
|
mainAxisAlignment: MainAxisAlignment.center, |
||||
|
crossAxisAlignment: CrossAxisAlignment.center, // 水平居中 |
||||
|
mainAxisSize: MainAxisSize.min, // 紧凑布局 |
||||
|
children: [ |
||||
|
// 设备图标 |
||||
|
CircleAvatar( |
||||
|
radius: 60, |
||||
|
backgroundColor: Colors.blue[100], |
||||
|
child: Icon( |
||||
|
Icons.phone_iphone, |
||||
|
size: 60, |
||||
|
color: Colors.blue, |
||||
|
), |
||||
|
), |
||||
|
SizedBox(height: 30), |
||||
|
|
||||
|
// 版本信息 |
||||
|
Column( |
||||
|
children: [ |
||||
|
Text( |
||||
|
'当前版本', |
||||
|
style: TextStyle( |
||||
|
fontSize: 18, |
||||
|
color: Colors.grey, |
||||
|
), |
||||
|
), |
||||
|
SizedBox(height: 8), |
||||
|
Text( |
||||
|
'v${controller.currentVersion}', |
||||
|
style: TextStyle( |
||||
|
fontSize: 24, |
||||
|
fontWeight: FontWeight.bold, |
||||
|
color: Colors.blue, |
||||
|
), |
||||
|
), |
||||
|
], |
||||
|
), |
||||
|
SizedBox(height: 40), |
||||
|
|
||||
|
// 更新按钮/进度条 |
||||
|
Obx(() { |
||||
|
if (controller.isUpdating.value) { |
||||
|
return Column( |
||||
|
children: [ |
||||
|
SizedBox( |
||||
|
width: 200, // 限制进度条宽度 |
||||
|
child: LinearProgressIndicator( |
||||
|
value: controller.downloadProgress.value, |
||||
|
backgroundColor: Colors.grey[200], |
||||
|
valueColor: |
||||
|
AlwaysStoppedAnimation<Color>(Colors.blue), |
||||
|
minHeight: 12, |
||||
|
borderRadius: BorderRadius.circular(10), |
||||
|
), |
||||
|
), |
||||
|
SizedBox(height: 20), |
||||
|
Text( |
||||
|
'${(controller.downloadProgress.value * 100).toStringAsFixed(1)}%', |
||||
|
style: TextStyle(color: Colors.grey), |
||||
|
) |
||||
|
], |
||||
|
); |
||||
|
} else { |
||||
|
return ElevatedButton( |
||||
|
onPressed: controller.isUpdateAvailable.value |
||||
|
? null |
||||
|
: controller.checkUpdate, |
||||
|
style: ElevatedButton.styleFrom( |
||||
|
backgroundColor: controller.isUpdateAvailable.value |
||||
|
? Colors.grey |
||||
|
: Colors.blue, |
||||
|
foregroundColor: Colors.white, |
||||
|
padding: |
||||
|
EdgeInsets.symmetric(horizontal: 40, vertical: 15), |
||||
|
shape: RoundedRectangleBorder( |
||||
|
borderRadius: BorderRadius.circular(30), |
||||
|
), |
||||
|
), |
||||
|
child: Text( |
||||
|
controller.isUpdateAvailable.value ? '已是最新版本' : '立即更新', |
||||
|
style: TextStyle(fontSize: 16), |
||||
|
), |
||||
|
); |
||||
|
} |
||||
|
}), |
||||
|
], |
||||
|
), |
||||
|
), |
||||
|
), |
||||
|
), |
||||
|
); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,33 @@ |
|||||
|
# Miscellaneous |
||||
|
*.class |
||||
|
*.log |
||||
|
*.pyc |
||||
|
*.swp |
||||
|
.DS_Store |
||||
|
.atom/ |
||||
|
.build/ |
||||
|
.buildlog/ |
||||
|
.history |
||||
|
.svn/ |
||||
|
.swiftpm/ |
||||
|
migrate_working_dir/ |
||||
|
|
||||
|
# IntelliJ related |
||||
|
*.iml |
||||
|
*.ipr |
||||
|
*.iws |
||||
|
.idea/ |
||||
|
|
||||
|
# The .vscode folder contains launch configuration and tasks you configure in |
||||
|
# VS Code which you may wish to be included in version control, so this line |
||||
|
# is commented out by default. |
||||
|
#.vscode/ |
||||
|
|
||||
|
# Flutter/Dart/Pub related |
||||
|
# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. |
||||
|
/pubspec.lock |
||||
|
**/doc/api/ |
||||
|
.dart_tool/ |
||||
|
.flutter-plugins |
||||
|
.flutter-plugins-dependencies |
||||
|
build/ |
||||
@ -0,0 +1,33 @@ |
|||||
|
# This file tracks properties of this Flutter project. |
||||
|
# Used by Flutter tool to assess capabilities and perform upgrades etc. |
||||
|
# |
||||
|
# This file should be version controlled and should not be manually edited. |
||||
|
|
||||
|
version: |
||||
|
revision: "c23637390482d4cf9598c3ce3f2be31aa7332daf" |
||||
|
channel: "stable" |
||||
|
|
||||
|
project_type: plugin |
||||
|
|
||||
|
# Tracks metadata for the flutter migrate command |
||||
|
migration: |
||||
|
platforms: |
||||
|
- platform: root |
||||
|
create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf |
||||
|
base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf |
||||
|
- platform: android |
||||
|
create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf |
||||
|
base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf |
||||
|
- platform: ios |
||||
|
create_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf |
||||
|
base_revision: c23637390482d4cf9598c3ce3f2be31aa7332daf |
||||
|
|
||||
|
# User provided section |
||||
|
|
||||
|
# List of Local paths (relative to this file) that should be |
||||
|
# ignored by the migrate tool. |
||||
|
# |
||||
|
# Files that are not part of the templates will be ignored by default. |
||||
|
unmanaged_files: |
||||
|
- 'lib/main.dart' |
||||
|
- 'ios/Runner.xcodeproj/project.pbxproj' |
||||
@ -0,0 +1,3 @@ |
|||||
|
## 0.0.1 |
||||
|
|
||||
|
* TODO: Describe initial release. |
||||
@ -0,0 +1 @@ |
|||||
|
TODO: Add your license here. |
||||
@ -0,0 +1,15 @@ |
|||||
|
# music_service |
||||
|
|
||||
|
A new Flutter project. |
||||
|
|
||||
|
## Getting Started |
||||
|
|
||||
|
This project is a starting point for a Flutter |
||||
|
[plug-in package](https://flutter.dev/to/develop-plugins), |
||||
|
a specialized package that includes platform-specific implementation code for |
||||
|
Android and/or iOS. |
||||
|
|
||||
|
For help getting started with Flutter development, view the |
||||
|
[online documentation](https://docs.flutter.dev), which offers tutorials, |
||||
|
samples, guidance on mobile development, and a full API reference. |
||||
|
|
||||
@ -0,0 +1,4 @@ |
|||||
|
include: package:flutter_lints/flutter.yaml |
||||
|
|
||||
|
# Additional information about this file can be found at |
||||
|
# https://dart.dev/guides/language/analysis-options |
||||
@ -0,0 +1,9 @@ |
|||||
|
*.iml |
||||
|
.gradle |
||||
|
/local.properties |
||||
|
/.idea/workspace.xml |
||||
|
/.idea/libraries |
||||
|
.DS_Store |
||||
|
/build |
||||
|
/captures |
||||
|
.cxx |
||||
@ -0,0 +1,70 @@ |
|||||
|
group = "com.yunqiinnovation.music_service" |
||||
|
version = "1.0-SNAPSHOT" |
||||
|
|
||||
|
buildscript { |
||||
|
ext.kotlin_version = "1.8.22" |
||||
|
repositories { |
||||
|
google() |
||||
|
mavenCentral() |
||||
|
} |
||||
|
|
||||
|
dependencies { |
||||
|
classpath("com.android.tools.build:gradle:8.7.0") |
||||
|
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
allprojects { |
||||
|
repositories { |
||||
|
google() |
||||
|
mavenCentral() |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
apply plugin: "com.android.library" |
||||
|
apply plugin: "kotlin-android" |
||||
|
|
||||
|
android { |
||||
|
namespace = "com.yunqiinnovation.music_service" |
||||
|
|
||||
|
compileSdk = 35 |
||||
|
|
||||
|
compileOptions { |
||||
|
sourceCompatibility = JavaVersion.VERSION_11 |
||||
|
targetCompatibility = JavaVersion.VERSION_11 |
||||
|
} |
||||
|
|
||||
|
kotlinOptions { |
||||
|
jvmTarget = JavaVersion.VERSION_11 |
||||
|
} |
||||
|
|
||||
|
sourceSets { |
||||
|
main.java.srcDirs += "src/main/kotlin" |
||||
|
test.java.srcDirs += "src/test/kotlin" |
||||
|
} |
||||
|
|
||||
|
defaultConfig { |
||||
|
minSdk = 21 |
||||
|
} |
||||
|
|
||||
|
dependencies { |
||||
|
testImplementation("org.jetbrains.kotlin:kotlin-test") |
||||
|
testImplementation("org.mockito:mockito-core:5.0.0") |
||||
|
} |
||||
|
|
||||
|
testOptions { |
||||
|
unitTests.all { |
||||
|
useJUnitPlatform() |
||||
|
|
||||
|
testLogging { |
||||
|
events "passed", "skipped", "failed", "standardOut", "standardError" |
||||
|
outputs.upToDateWhen {false} |
||||
|
showStandardStreams = true |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
dependencies { |
||||
|
implementation project(':deepvoice_utils') |
||||
|
} |
||||
@ -0,0 +1 @@ |
|||||
|
rootProject.name = 'music_service' |
||||
@ -0,0 +1,17 @@ |
|||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
||||
|
package="com.yunqiinnovation.music_service"> |
||||
|
|
||||
|
<!-- 基础前台服务权限 --> |
||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> |
||||
|
|
||||
|
<!-- Android 14 及以上需要声明具体的前台服务类型权限 --> |
||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" /> |
||||
|
|
||||
|
<application> |
||||
|
<service |
||||
|
android:name=".MusicService" |
||||
|
android:exported="false" |
||||
|
android:enabled="true" |
||||
|
android:foregroundServiceType="mediaPlayback" /> |
||||
|
</application> |
||||
|
</manifest> |
||||
@ -0,0 +1,204 @@ |
|||||
|
package com.yunqiinnovation.music_service |
||||
|
|
||||
|
import android.app.* |
||||
|
import android.content.Context |
||||
|
import android.content.Intent |
||||
|
import android.media.AudioManager |
||||
|
import android.media.MediaPlayer |
||||
|
import android.os.Build |
||||
|
import android.os.IBinder |
||||
|
import android.util.Log |
||||
|
import androidx.core.app.NotificationCompat |
||||
|
import com.yunqiinnovation.deepvoice_utils.FileLogger |
||||
|
import java.util.concurrent.atomic.AtomicBoolean |
||||
|
|
||||
|
class MusicService : Service() { |
||||
|
|
||||
|
companion object { |
||||
|
private const val TAG = "MusicService" |
||||
|
private const val CHANNEL_ID = "music_media_service_channel" |
||||
|
private const val NOTIFICATION_ID = 1002 |
||||
|
|
||||
|
private val isRunning = AtomicBoolean(false) |
||||
|
private var currentStatus: Boolean = false |
||||
|
private var currentUrlInternal: String? = null |
||||
|
|
||||
|
|
||||
|
fun isServiceRunning(): Boolean = isRunning.get() |
||||
|
fun isPlaying(): Boolean = currentStatus |
||||
|
fun getCurrentUrl(): String? = currentUrlInternal |
||||
|
} |
||||
|
|
||||
|
private var mediaPlayer: MediaPlayer? = null |
||||
|
private val playlist = mutableListOf<String>() // 可选:初始化为预置歌曲 |
||||
|
private var currentIndex = 0 |
||||
|
|
||||
|
override fun onCreate() { |
||||
|
super.onCreate() |
||||
|
FileLogger.init(this) |
||||
|
FileLogger.i(TAG, "MusicService 正在创建...") |
||||
|
isRunning.set(true) |
||||
|
Log.i(TAG, "MusicService Created") |
||||
|
startForeground(NOTIFICATION_ID, createNotification("等待播放...")) |
||||
|
isRunning.set(true) |
||||
|
} |
||||
|
|
||||
|
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { |
||||
|
val command = intent?.getStringExtra("command") ?: return START_NOT_STICKY |
||||
|
Log.i(TAG, "onStartCommand: $command" ) |
||||
|
|
||||
|
when (command) { |
||||
|
"play" -> { |
||||
|
val url = intent.getStringExtra("url") ?: return START_NOT_STICKY |
||||
|
if (!playlist.contains(url)) playlist.add(url) |
||||
|
currentIndex = playlist.indexOf(url) |
||||
|
play(url) |
||||
|
} |
||||
|
"playlist" -> { |
||||
|
val urls = intent.getStringArrayListExtra("urls")?.filter { it.isNotEmpty() } ?: return START_NOT_STICKY |
||||
|
Log.i(TAG, "后台服务播放 playlist: $urls" ) |
||||
|
if (urls.isNotEmpty()) { |
||||
|
playlist.clear() |
||||
|
playlist.addAll(urls) |
||||
|
currentIndex = 0 |
||||
|
play(playlist[currentIndex]) |
||||
|
} else { |
||||
|
Log.w(TAG, "playlist 命令收到空列表") |
||||
|
} |
||||
|
} |
||||
|
"pause" -> pause() |
||||
|
"resume" -> resume() |
||||
|
"stop" -> stopSelf() |
||||
|
"next" -> { |
||||
|
if (currentIndex + 1 < playlist.size) { |
||||
|
currentIndex++ |
||||
|
play(playlist[currentIndex]) |
||||
|
} |
||||
|
} |
||||
|
"previous" -> { |
||||
|
if (currentIndex - 1 >= 0) { |
||||
|
currentIndex-- |
||||
|
play(playlist[currentIndex]) |
||||
|
} |
||||
|
} |
||||
|
"setVolume" -> { |
||||
|
val volume = intent.getFloatExtra("volume", 1.0f).coerceIn(0f, 1f) |
||||
|
mediaPlayer?.setVolume(volume, volume) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return START_STICKY |
||||
|
} |
||||
|
|
||||
|
private fun play(url: String) { |
||||
|
Log.i(TAG, "播放音乐: $url") |
||||
|
releaseMediaPlayer() |
||||
|
currentStatus = true; |
||||
|
currentUrlInternal = url; |
||||
|
mediaPlayer = MediaPlayer().apply { |
||||
|
setDataSource(url) |
||||
|
setAudioStreamType(AudioManager.STREAM_MUSIC) |
||||
|
setOnPreparedListener { |
||||
|
start() |
||||
|
currentStatus = true |
||||
|
updateNotification("正在播放") |
||||
|
Log.i(TAG, "开始播放") |
||||
|
} |
||||
|
setOnCompletionListener { |
||||
|
Log.i(TAG, "播放完成") |
||||
|
// 播放下一首 |
||||
|
if (currentIndex + 1 < playlist.size) { |
||||
|
currentIndex++ |
||||
|
play(playlist[currentIndex]) // 播放下一首 |
||||
|
} else { |
||||
|
currentStatus = false |
||||
|
stopSelf() // 如果没有更多歌曲了,可以停止服务 |
||||
|
} |
||||
|
} |
||||
|
setOnErrorListener { _, what, extra -> |
||||
|
Log.e(TAG, "播放错误: what=$what extra=$extra") |
||||
|
currentStatus = false |
||||
|
stopSelf() |
||||
|
true |
||||
|
} |
||||
|
prepareAsync() |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private fun pause() { |
||||
|
mediaPlayer?.let { |
||||
|
if (it.isPlaying) { |
||||
|
it.pause() |
||||
|
currentStatus= false |
||||
|
updateNotification("已暂停") |
||||
|
Log.i(TAG, "暂停播放") |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private fun resume() { |
||||
|
mediaPlayer?.let { |
||||
|
if (!it.isPlaying) { |
||||
|
it.start() |
||||
|
currentStatus = true |
||||
|
updateNotification("继续播放") |
||||
|
Log.i(TAG, "继续播放") |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private fun releaseMediaPlayer() { |
||||
|
mediaPlayer?.apply { |
||||
|
stop() |
||||
|
release() |
||||
|
} |
||||
|
mediaPlayer = null |
||||
|
} |
||||
|
|
||||
|
private fun updateNotification(contentText: String) { |
||||
|
val notification = createNotification(contentText) |
||||
|
val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager |
||||
|
manager.notify(NOTIFICATION_ID, notification) |
||||
|
} |
||||
|
|
||||
|
private fun createNotification(contentText: String): Notification { |
||||
|
val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager |
||||
|
|
||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { |
||||
|
val channel = NotificationChannel( |
||||
|
CHANNEL_ID, |
||||
|
"音乐播放服务", |
||||
|
NotificationManager.IMPORTANCE_LOW |
||||
|
) |
||||
|
manager.createNotificationChannel(channel) |
||||
|
} |
||||
|
|
||||
|
val intent = packageManager.getLaunchIntentForPackage(packageName)?.apply { |
||||
|
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP |
||||
|
} |
||||
|
val pendingIntent = intent?.let { |
||||
|
PendingIntent.getActivity( |
||||
|
this, 0, it, |
||||
|
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT |
||||
|
) |
||||
|
} |
||||
|
|
||||
|
return NotificationCompat.Builder(this, CHANNEL_ID) |
||||
|
.setContentTitle("DeepSound") |
||||
|
.setContentText(contentText) |
||||
|
.setSmallIcon(android.R.drawable.ic_media_play) |
||||
|
.setContentIntent(pendingIntent) |
||||
|
.setOngoing(true) |
||||
|
.build() |
||||
|
} |
||||
|
|
||||
|
override fun onDestroy() { |
||||
|
Log.i(TAG, "服务销毁,释放播放器") |
||||
|
releaseMediaPlayer() |
||||
|
stopForeground(true) |
||||
|
isRunning.set(false) |
||||
|
super.onDestroy() |
||||
|
} |
||||
|
|
||||
|
override fun onBind(intent: Intent?): IBinder? = null |
||||
|
} |
||||
@ -0,0 +1,59 @@ |
|||||
|
package com.yunqiinnovation.music_service |
||||
|
|
||||
|
import android.content.Context |
||||
|
import android.content.Intent |
||||
|
import androidx.core.content.ContextCompat |
||||
|
import com.yunqiinnovation.deepvoice_utils.FileLogger |
||||
|
import io.flutter.embedding.engine.plugins.FlutterPlugin |
||||
|
import io.flutter.plugin.common.MethodCall |
||||
|
import io.flutter.plugin.common.MethodChannel |
||||
|
import io.flutter.plugin.common.MethodChannel.MethodCallHandler |
||||
|
|
||||
|
|
||||
|
/** MusicServicePlugin */ |
||||
|
class MusicServicePlugin: FlutterPlugin, MethodCallHandler { |
||||
|
private val TAG = "MusicServicePlugin" |
||||
|
private lateinit var context: Context |
||||
|
private lateinit var channel : MethodChannel |
||||
|
|
||||
|
override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { |
||||
|
context = flutterPluginBinding.applicationContext |
||||
|
channel = MethodChannel(flutterPluginBinding.binaryMessenger, "com.yunqiinnovation.music_service") |
||||
|
channel.setMethodCallHandler(this) |
||||
|
} |
||||
|
|
||||
|
override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) { |
||||
|
FileLogger.d(TAG, "Method call: ${call.method}") |
||||
|
val intent = Intent(context, MusicService::class.java) |
||||
|
when (call.method) { |
||||
|
"play" -> { |
||||
|
val url = call.argument<String>("url") |
||||
|
MusicServiceStarter.startServiceWithCommand(context, "play", url) |
||||
|
} |
||||
|
"playlist" -> { |
||||
|
val urls = call.argument<List<String>>("urls") |
||||
|
MusicServiceStarter.startServiceWithPlaylist(context, "playlist", urls) |
||||
|
} |
||||
|
"pause" -> MusicServiceStarter.startServiceWithCommand(context, "pause") |
||||
|
"resume" -> MusicServiceStarter.startServiceWithCommand(context, "resume") |
||||
|
"stop" -> MusicServiceStarter.startServiceWithCommand(context, "stop") |
||||
|
"setVolume" -> { |
||||
|
val volume = call.argument<Double>("volume")?.toFloat() |
||||
|
MusicServiceStarter.startServiceWithCommand(context, "setVolume", volume = volume) |
||||
|
} |
||||
|
"getStatus" -> { |
||||
|
val isPlaying = MusicService.isPlaying() |
||||
|
val currentUrl = MusicService.getCurrentUrl() |
||||
|
val status = mapOf( |
||||
|
"isPlaying" to isPlaying, |
||||
|
"url" to currentUrl |
||||
|
) |
||||
|
result.success(status) |
||||
|
} |
||||
|
else -> result.notImplemented() |
||||
|
} |
||||
|
result.success(null) |
||||
|
} |
||||
|
|
||||
|
override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {} |
||||
|
} |
||||
@ -0,0 +1,30 @@ |
|||||
|
package com.yunqiinnovation.music_service |
||||
|
|
||||
|
import android.content.Context |
||||
|
import android.content.Intent |
||||
|
import android.util.Log |
||||
|
import androidx.core.content.ContextCompat |
||||
|
|
||||
|
object MusicServiceStarter { |
||||
|
private val TAG = "MusicServiceStarter" |
||||
|
//播放单曲 |
||||
|
fun startServiceWithCommand(context: Context, command: String, url: String? = null, volume: Float? = null) { |
||||
|
Log.i(TAG, "startServiceWithCommand: $command $url") |
||||
|
val intent = Intent(context, MusicService::class.java).apply { |
||||
|
putExtra("command", command) |
||||
|
url?.let { putExtra("url", it) } |
||||
|
volume?.let { putExtra("volume", it) } |
||||
|
} |
||||
|
ContextCompat.startForegroundService(context, intent) |
||||
|
} |
||||
|
|
||||
|
//启动播放列表 |
||||
|
fun startServiceWithPlaylist(context: Context,command: String, urls: List<String>?,volume: Float? = null) { |
||||
|
Log.i(TAG, "startServiceWithPlaylist: $urls") |
||||
|
val intent = Intent(context, MusicService::class.java).apply { |
||||
|
putExtra("command", command) |
||||
|
putStringArrayListExtra("urls", ArrayList(urls!!)) // 注意类型是 ArrayList<String> |
||||
|
} |
||||
|
ContextCompat.startForegroundService(context, intent) |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,38 @@ |
|||||
|
.idea/ |
||||
|
.vagrant/ |
||||
|
.sconsign.dblite |
||||
|
.svn/ |
||||
|
|
||||
|
.DS_Store |
||||
|
*.swp |
||||
|
profile |
||||
|
|
||||
|
DerivedData/ |
||||
|
build/ |
||||
|
GeneratedPluginRegistrant.h |
||||
|
GeneratedPluginRegistrant.m |
||||
|
|
||||
|
.generated/ |
||||
|
|
||||
|
*.pbxuser |
||||
|
*.mode1v3 |
||||
|
*.mode2v3 |
||||
|
*.perspectivev3 |
||||
|
|
||||
|
!default.pbxuser |
||||
|
!default.mode1v3 |
||||
|
!default.mode2v3 |
||||
|
!default.perspectivev3 |
||||
|
|
||||
|
xcuserdata |
||||
|
|
||||
|
*.moved-aside |
||||
|
|
||||
|
*.pyc |
||||
|
*sync/ |
||||
|
Icon? |
||||
|
.tags* |
||||
|
|
||||
|
/Flutter/Generated.xcconfig |
||||
|
/Flutter/ephemeral/ |
||||
|
/Flutter/flutter_export_environment.sh |
||||
@ -0,0 +1,19 @@ |
|||||
|
import Flutter |
||||
|
import UIKit |
||||
|
|
||||
|
public class MusicServicePlugin: NSObject, FlutterPlugin { |
||||
|
public static func register(with registrar: FlutterPluginRegistrar) { |
||||
|
let channel = FlutterMethodChannel(name: "music_service", binaryMessenger: registrar.messenger()) |
||||
|
let instance = MusicServicePlugin() |
||||
|
registrar.addMethodCallDelegate(instance, channel: channel) |
||||
|
} |
||||
|
|
||||
|
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { |
||||
|
switch call.method { |
||||
|
case "getPlatformVersion": |
||||
|
result("iOS " + UIDevice.current.systemVersion) |
||||
|
default: |
||||
|
result(FlutterMethodNotImplemented) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,14 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
||||
|
<plist version="1.0"> |
||||
|
<dict> |
||||
|
<key>NSPrivacyTrackingDomains</key> |
||||
|
<array/> |
||||
|
<key>NSPrivacyAccessedAPITypes</key> |
||||
|
<array/> |
||||
|
<key>NSPrivacyCollectedDataTypes</key> |
||||
|
<array/> |
||||
|
<key>NSPrivacyTracking</key> |
||||
|
<false/> |
||||
|
</dict> |
||||
|
</plist> |
||||
@ -0,0 +1,29 @@ |
|||||
|
# |
||||
|
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html. |
||||
|
# Run `pod lib lint music_service.podspec` to validate before publishing. |
||||
|
# |
||||
|
Pod::Spec.new do |s| |
||||
|
s.name = 'music_service' |
||||
|
s.version = '0.0.1' |
||||
|
s.summary = 'A new Flutter project.' |
||||
|
s.description = <<-DESC |
||||
|
A new Flutter project. |
||||
|
DESC |
||||
|
s.homepage = 'http://example.com' |
||||
|
s.license = { :file => '../LICENSE' } |
||||
|
s.author = { 'Your Company' => 'email@example.com' } |
||||
|
s.source = { :path => '.' } |
||||
|
s.source_files = 'Classes/**/*' |
||||
|
s.dependency 'Flutter' |
||||
|
s.platform = :ios, '12.0' |
||||
|
|
||||
|
# Flutter.framework does not contain a i386 slice. |
||||
|
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } |
||||
|
s.swift_version = '5.0' |
||||
|
|
||||
|
# If your plugin requires a privacy manifest, for example if it uses any |
||||
|
# required reason APIs, update the PrivacyInfo.xcprivacy file to describe your |
||||
|
# plugin's privacy impact, and then uncomment this line. For more information, |
||||
|
# see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files |
||||
|
# s.resource_bundles = {'music_service_privacy' => ['Resources/PrivacyInfo.xcprivacy']} |
||||
|
end |
||||
@ -0,0 +1,62 @@ |
|||||
|
import 'package:flutter/services.dart'; |
||||
|
|
||||
|
class MusicService { |
||||
|
static final MusicService _instance = MusicService._internal(); |
||||
|
|
||||
|
/// 获取单例 |
||||
|
factory MusicService() => _instance; |
||||
|
|
||||
|
// 方法通道 |
||||
|
final MethodChannel _methodChannel = const MethodChannel( |
||||
|
'com.yunqiinnovation.music_service', |
||||
|
); |
||||
|
|
||||
|
// 事件通道 - 简化为只使用数据和状态通道 |
||||
|
late final EventChannel _dataEventChannel; |
||||
|
late final EventChannel _statusEventChannel; |
||||
|
|
||||
|
// 事件流 |
||||
|
late final Stream<dynamic> _dataStream; |
||||
|
late final Stream<dynamic> _statusStream; |
||||
|
|
||||
|
// 获取事件流 |
||||
|
Stream<dynamic> get onDataReceived => _dataStream; |
||||
|
|
||||
|
// 状态流直接传递原始数据 |
||||
|
Stream<dynamic> get onStatusUpdated => _statusStream; |
||||
|
|
||||
|
// 内部构造函数 |
||||
|
MusicService._internal() { |
||||
|
_dataEventChannel = const EventChannel( |
||||
|
'com.yunqiinnovation.music_service/data_events', |
||||
|
); |
||||
|
_statusEventChannel = const EventChannel( |
||||
|
'com.yunqiinnovation.music_service/status_events', |
||||
|
); |
||||
|
|
||||
|
// 初始化事件流 |
||||
|
_dataStream = _dataEventChannel.receiveBroadcastStream(); |
||||
|
_statusStream = _statusEventChannel.receiveBroadcastStream(); |
||||
|
} |
||||
|
|
||||
|
Future<void> playMusic(String url) async { |
||||
|
await _methodChannel.invokeMethod('play', {'url': url}); |
||||
|
} |
||||
|
|
||||
|
Future<void> pauseMusic() async => _methodChannel.invokeMethod('pause'); |
||||
|
Future<void> resumeMusic() async => _methodChannel.invokeMethod('resume'); |
||||
|
Future<void> nextTrack() async => _methodChannel.invokeMethod('next'); |
||||
|
Future<void> previousTrack() async => _methodChannel.invokeMethod('previous'); |
||||
|
Future<void> stopMusic() async => _methodChannel.invokeMethod('stop'); |
||||
|
Future<void> setVolume(double volume) async => _methodChannel.invokeMethod( |
||||
|
'setVolume', |
||||
|
{'volume': volume}, |
||||
|
); // volume: 0.0~1.0 |
||||
|
Future<Map<String, dynamic>> getStatus() async { |
||||
|
final result = await _methodChannel.invokeMethod<Map>('getStatus'); |
||||
|
return { |
||||
|
'isPlaying': result?['isPlaying'] ?? false, |
||||
|
'url': result?['url'] ?? "", |
||||
|
}; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,72 @@ |
|||||
|
name: music_service |
||||
|
description: "A new Flutter project." |
||||
|
version: 0.0.1 |
||||
|
homepage: |
||||
|
|
||||
|
environment: |
||||
|
sdk: ^3.7.2 |
||||
|
flutter: '>=3.3.0' |
||||
|
|
||||
|
dependencies: |
||||
|
flutter: |
||||
|
sdk: flutter |
||||
|
plugin_platform_interface: ^2.0.2 |
||||
|
|
||||
|
dev_dependencies: |
||||
|
flutter_test: |
||||
|
sdk: flutter |
||||
|
flutter_lints: ^5.0.0 |
||||
|
|
||||
|
# For information on the generic Dart part of this file, see the |
||||
|
# following page: https://dart.dev/tools/pub/pubspec |
||||
|
|
||||
|
# The following section is specific to Flutter packages. |
||||
|
flutter: |
||||
|
# This section identifies this Flutter project as a plugin project. |
||||
|
# The 'pluginClass' specifies the class (in Java, Kotlin, Swift, Objective-C, etc.) |
||||
|
# which should be registered in the plugin registry. This is required for |
||||
|
# using method channels. |
||||
|
# The Android 'package' specifies package in which the registered class is. |
||||
|
# This is required for using method channels on Android. |
||||
|
# The 'ffiPlugin' specifies that native code should be built and bundled. |
||||
|
# This is required for using `dart:ffi`. |
||||
|
# All these are used by the tooling to maintain consistency when |
||||
|
# adding or updating assets for this project. |
||||
|
plugin: |
||||
|
platforms: |
||||
|
android: |
||||
|
package: com.yunqiinnovation.music_service |
||||
|
pluginClass: MusicServicePlugin |
||||
|
ios: |
||||
|
pluginClass: MusicServicePlugin |
||||
|
|
||||
|
# To add assets to your plugin package, add an assets section, like this: |
||||
|
# assets: |
||||
|
# - images/a_dot_burr.jpeg |
||||
|
# - images/a_dot_ham.jpeg |
||||
|
# |
||||
|
# For details regarding assets in packages, see |
||||
|
# https://flutter.dev/to/asset-from-package |
||||
|
# |
||||
|
# An image asset can refer to one or more resolution-specific "variants", see |
||||
|
# https://flutter.dev/to/resolution-aware-images |
||||
|
|
||||
|
# To add custom fonts to your plugin package, add a fonts section here, |
||||
|
# in this "flutter" section. Each entry in this list should have a |
||||
|
# "family" key with the font family name, and a "fonts" key with a |
||||
|
# list giving the asset and other descriptors for the font. For |
||||
|
# example: |
||||
|
# fonts: |
||||
|
# - family: Schyler |
||||
|
# fonts: |
||||
|
# - asset: fonts/Schyler-Regular.ttf |
||||
|
# - asset: fonts/Schyler-Italic.ttf |
||||
|
# style: italic |
||||
|
# - family: Trajan Pro |
||||
|
# fonts: |
||||
|
# - asset: fonts/TrajanPro.ttf |
||||
|
# - asset: fonts/TrajanPro_Bold.ttf |
||||
|
# weight: 700 |
||||
|
# |
||||
|
# For details regarding fonts in packages, see |
||||
|
# https://flutter.dev/to/font-from-package |
||||
Loading…
Reference in new issue