From 211f9a7dd0c69cc864429909ddec78e6a6fbad87 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Fri, 11 Apr 2025 15:35:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=94=A8=E6=88=B7=E5=8F=8D?= =?UTF-8?q?=E9=A6=88=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=BC=98=E5=8C=96=E7=99=BB?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/core/translations/language/de_de.dart | 89 +++++--- lib/core/translations/language/en_us.dart | 71 ++++-- lib/core/translations/language/es_es.dart | 91 +++++--- lib/core/translations/language/fr_fr.dart | 97 ++++++--- lib/core/translations/language/it_it.dart | 25 ++- lib/core/translations/language/ja_jp.dart | 49 +++-- lib/core/translations/language/ko_kr.dart | 47 +++- lib/core/translations/language/pt_pt.dart | 88 +++++--- lib/core/translations/language/ru_ru.dart | 84 ++++++-- lib/core/translations/language/vi_vn.dart | 67 ++++-- lib/core/translations/language/zh_cn.dart | 53 +++-- lib/core/translations/language/zh_hk.dart | 41 +++- lib/data/services/network/api.dart | 9 + .../feedback/bindings/feedback_bindings.dart | 9 + .../controllers/feedback_controller.dart | 59 +++++ lib/modules/feedback/views/feedback_view.dart | 203 ++++++++++++++++++ .../login/controllers/login_controller.dart | 94 +++++--- lib/modules/login/views/login_view.dart | 14 +- lib/modules/settings/views/settings_view.dart | 58 +++-- lib/routes/app_pages.dart | 7 + lib/routes/app_routes.dart | 1 + 21 files changed, 979 insertions(+), 277 deletions(-) create mode 100644 lib/modules/feedback/bindings/feedback_bindings.dart create mode 100644 lib/modules/feedback/controllers/feedback_controller.dart create mode 100644 lib/modules/feedback/views/feedback_view.dart diff --git a/lib/core/translations/language/de_de.dart b/lib/core/translations/language/de_de.dart index 91cc04eca..e79f7b776 100644 --- a/lib/core/translations/language/de_de.dart +++ b/lib/core/translations/language/de_de.dart @@ -26,7 +26,7 @@ const Map deDE = { "explore": "Entdecken", "settings": "Einstellungen", - // 语言 + // 语言 "followingSystem": "Systemeinstellung folgen", "chinese": "Chinesisch", "english": "Englisch", @@ -43,7 +43,8 @@ const Map deDE = { // 登录页 "welcome": "Willkommen", - "loginTips": "Bitte melden Sie sich an oder registrieren Sie sich mit Ihrer Telefonnummer oder E-Mail", + "loginTips": + "Bitte melden Sie sich an oder registrieren Sie sich mit Ihrer Telefonnummer oder E-Mail", "accountNumber": "Telefonnummer oder E-Mail", "verificationCode": "Bestätigungscode", "getCode": "Code erhalten", @@ -56,6 +57,13 @@ const Map deDE = { 'selectCountry': 'Land/Region auswählen', "email": "E-Mail", "phoneNumber": "Telefonnummer", + "pleaseEnterContactInfo": "Bitte Telefonnummer oder E-Mail eingeben", + "invalidEmailFormat": "Ungültiges E-Mail-Format", + "invalidPhoneFormat": "Ungültiges Telefonnummerformat", + "tip": "Hinweis", + "pleaseEnterCompleteCode": + "Bitte geben Sie den vollständigen Verifizierungscode ein", + "loginFailed": "Anmeldung fehlgeschlagen, bitte versuchen Sie es erneut", // 首页 "deviceStatus": "Gerätestatus", @@ -65,7 +73,8 @@ const Map deDE = { "signal": "Signal", "deviceId": "Geräte-ID", "firmwareVersion": "Firmware-Version", - "disconnectedDevice": "Kein Gerät verbunden, klicken Sie auf die Schaltfläche unten", + "disconnectedDevice": + "Kein Gerät verbunden, klicken Sie auf die Schaltfläche unten", "connectDevice": "Gerät verbinden", "topAiExperiences": "Top KI-Erlebnisse", "aiAssistant": "KI-Assistent", @@ -75,12 +84,14 @@ const Map deDE = { "aiCompanion": "Eltern-Kind-Begleiter", "aiCompanionInfo": "Versteht Sie und bietet warme Begleitung", "homeSlogan": "Die Welt verbinden, jenseits des Klangs", - "turnEarphones": "Bitte öffnen Sie das Kopfhörer-Etui und setzen Sie die Kopfhörer ein", + "turnEarphones": + "Bitte öffnen Sie das Kopfhörer-Etui und setzen Sie die Kopfhörer ein", "currentlyConnected": "Aktuell verbunden:", "unsystemSetup": "Zu Systemeinstellungen", "talkLater": "Später erinnern", "initializing": "Initialisierung...", - "bluetoothInitializationFailure": "Bluetooth-Dienst konnte nicht initialisiert werden", + "bluetoothInitializationFailure": + "Bluetooth-Dienst konnte nicht initialisiert werden", "checkingPermissions": "Berechtigungen werden überprüft...", "lackPermissions": "Bluetooth-Berechtigungen erforderlich", "searchingDevice": "Geräte werden gesucht...", @@ -90,7 +101,8 @@ const Map deDE = { "connectedDevice": "Mit Gerät verbunden:", "failedRefreshDevice": "Gerät konnte nicht aktualisiert werden", "noDeviceFound": "Kein verbundenes Gerät gefunden", - "failedDeviceInformation": "Geräteinformationen konnten nicht abgerufen werden", + "failedDeviceInformation": + "Geräteinformationen konnten nicht abgerufen werden", "unknownEquipment": "Unbekanntes Gerät", "zeroSignal": "Kein Signal", "good": "Gut", @@ -116,11 +128,13 @@ const Map deDE = { "healthConsultant": "Multifunktionaler KI-Chat", "healthConsultantInfo": "Mehr KI-Chat-Funktionen", "conferenceAssistant": "Geschäftsbesprechungs-Assistent", - "conferenceAssistantInfo": "Echtzeit-Protokollierung und mehrsprachige Übersetzung", + "conferenceAssistantInfo": + "Echtzeit-Protokollierung und mehrsprachige Übersetzung", "studyAssistant": "Sprachlern-Assistent", "studyAssistantInfo": "Aussprachekorrektur und Sprechübungen in Echtzeit", "travelTranslator": "Reiseübersetzer", - "travelTranslatorInfo": "Echtzeit-Sprachübersetzung und Sehenswürdigkeitsführer", + "travelTranslatorInfo": + "Echtzeit-Sprachübersetzung und Sehenswürdigkeitsführer", "beSearching": "Suche nach:", "noAssistantFound": "Kein passender KI-Assistent gefunden", "scene": "Szenarien", @@ -128,7 +142,8 @@ const Map deDE = { "newFunction": "Neue Funktionen", "youChoseTry": "Sie haben sich entschieden, auszuprobieren", "aiSinger": "KI-Sänger-Modus", - "aiSingerInfo": "Singen Sie jeden Song mit der Stimme Ihres Lieblingskünstlers, auch eigene Kreationen", + "aiSingerInfo": + "Singen Sie jeden Song mit der Stimme Ihres Lieblingskünstlers, auch eigene Kreationen", "popularFunction": "Beliebte Funktionen", "tryNow": "Jetzt ausprobieren", @@ -159,7 +174,8 @@ const Map deDE = { "privacySettings": "Datenschutzeinstellungen", "privacySettingsInfo": "Datenerfassung und Berechtigungen verwalten", "logout": "Abmelden", - "logoutTips": "Sind Sie sicher, dass Sie sich vom aktuellen Konto abmelden möchten?", + "logoutTips": + "Sind Sie sicher, dass Sie sich vom aktuellen Konto abmelden möchten?", "aboutApplication": "Über die App", "versions": "Version", "checkUpdates": "Nach Updates suchen", @@ -168,9 +184,11 @@ const Map deDE = { "voiceServiceInfo": "Spracherkennungs- und Synthesedienst auswählen", "selectVoiceService": "Sprachdienst auswählen", "azureVoiceService": "Azure Sprachdienst", - "azureVoiceServiceInfo": "Microsoft Cloud-Sprachdienst mit hochwertiger Sprachsynthese und -erkennung", + "azureVoiceServiceInfo": + "Microsoft Cloud-Sprachdienst mit hochwertiger Sprachsynthese und -erkennung", "flutterVoiceService": "Flutter lokaler Sprachdienst", - "flutterVoiceServiceInfo": "Lokaler Sprachdienst des Geräts ohne Internetverbindung", + "flutterVoiceServiceInfo": + "Lokaler Sprachdienst des Geräts ohne Internetverbindung", 'timbreService': 'Klangfarben-Dienst', 'timbreServiceInfo': 'Sprachsynthesedienst für Klangfarben auswählen', 'defaultTimbre': 'Standard-Klangfarbe', @@ -181,9 +199,9 @@ const Map deDE = { 'pleaseRead': 'Bitte lesen', 'completeRecording': 'Aufnahme abschließen', 'deleteAccount': 'Konto löschen', - 'deleteAccountTips': 'Möchten Sie Ihr Konto wirklich dauerhaft löschen? Diese Aktion kann nicht rückgängig gemacht werden.', + 'deleteAccountTips': + 'Möchten Sie Ihr Konto wirklich dauerhaft löschen? Diese Aktion kann nicht rückgängig gemacht werden.', - // 聊天页 "clearChatHistory": "Chat-Verlauf löschen", "online": "Online", @@ -310,37 +328,60 @@ const Map deDE = { // Personal Assistant Emma "personalAssistantName": "Emma", - "personalAssistantDescription": "Hallo, ich bin Emma, eine vielseitige KI-Assistentin. Ob für Arbeitsplanung, Lernberatung, Lebensorganisation oder andere Anliegen, ich helfe Ihnen gerne. Lassen Sie uns gemeinsam die Effizienz steigern und Ziele erreichen!", + "personalAssistantDescription": + "Hallo, ich bin Emma, eine vielseitige KI-Assistentin. Ob für Arbeitsplanung, Lernberatung, Lebensorganisation oder andere Anliegen, ich helfe Ihnen gerne. Lassen Sie uns gemeinsam die Effizienz steigern und Ziele erreichen!", "assistantTag": "Assistent", - "personalAssistantWelcome": "Hallo! Ich bin Emma und freue mich, Ihre persönliche Assistentin zu sein. Ich kann Ihnen bei verschiedenen Aufgaben wie Zeitmanagement, Zielplanung, Informationsorganisation usw. helfen. Wie kann ich Ihnen helfen?", + "personalAssistantWelcome": + "Hallo! Ich bin Emma und freue mich, Ihre persönliche Assistentin zu sein. Ich kann Ihnen bei verschiedenen Aufgaben wie Zeitmanagement, Zielplanung, Informationsorganisation usw. helfen. Wie kann ich Ihnen helfen?", "personalAssistantVoiceWelcome": "Ich bin hier!", // 同声传译 Lucy "interpreterName": "Simultandolmetscher", - "interpreterDescription": "Hallo! Ich bin Lucy, eine professionelle Dolmetscherin für Englisch-Chinesisch, spezialisiert auf Echtzeit-Übersetzung für Meetings, Konferenzen und Gespräche, um barrierefreie Kommunikation zu ermöglichen.", + "interpreterDescription": + "Hallo! Ich bin Lucy, eine professionelle Dolmetscherin für Englisch-Chinesisch, spezialisiert auf Echtzeit-Übersetzung für Meetings, Konferenzen und Gespräche, um barrierefreie Kommunikation zu ermöglichen.", "interpreterTag": "Übersetzung", - "interpreterWelcome": "Hallo zusammen! Ich bin Lucy, Ihre Simultandolmetscherin. Ich werde für Sie zwischen Chinesisch und Englisch übersetzen. Wenn Sie Chinesisch sprechen, übersetze ich ins Englische; wenn Sie Englisch sprechen, übersetze ich ins Chinesische. Lassen Sie uns mit unserer Übersetzungssitzung beginnen!", + "interpreterWelcome": + "Hallo zusammen! Ich bin Lucy, Ihre Simultandolmetscherin. Ich werde für Sie zwischen Chinesisch und Englisch übersetzen. Wenn Sie Chinesisch sprechen, übersetze ich ins Englische; wenn Sie Englisch sprechen, übersetze ich ins Chinesische. Lassen Sie uns mit unserer Übersetzungssitzung beginnen!", // 亲子陪伴 芯愿 "companionName": "XinYuan", - "companionDescription": "Ich bin XinYuan, Ihr engagierter Eltern-Kind-Begleiter, sanft und verständnisvoll. Ob Sie plaudern, Sorgen teilen oder Gesellschaft brauchen, ich bin immer an Ihrer Seite.", + "companionDescription": + "Ich bin XinYuan, Ihr engagierter Eltern-Kind-Begleiter, sanft und verständnisvoll. Ob Sie plaudern, Sorgen teilen oder Gesellschaft brauchen, ich bin immer an Ihrer Seite.", "companionTag": "Emotional", - "companionWelcome": "Hallo! Endlich treffen wir uns! Ich bin XinYuan, Ihr engagierter Eltern-Kind-Begleiter. Wie war Ihr Tag? Gibt es etwas, das Sie mit mir teilen möchten? Ich bin immer hier, bereit, Ihren Gedanken zuzuhören.", + "companionWelcome": + "Hallo! Endlich treffen wir uns! Ich bin XinYuan, Ihr engagierter Eltern-Kind-Begleiter. Wie war Ihr Tag? Gibt es etwas, das Sie mit mir teilen möchten? Ich bin immer hier, bereit, Ihren Gedanken zuzuhören.", "companionVoiceWelcome": "Ich bin bei Ihnen!", // 多功能AI聊天 吴小江 "healthAdvisorName": "KI-Chat-Assistent Wu", - "healthAdvisorDescription": "Ich bin Wu, bereit, Ihnen verschiedene KI-Chat-Funktionen anzubieten.", + "healthAdvisorDescription": + "Ich bin Wu, bereit, Ihnen verschiedene KI-Chat-Funktionen anzubieten.", "healthAdvisorTag": "Chat", - "healthAdvisorWelcome": "Hallo, ich bin Wu. Ich freue mich, Ihnen mit KI-Chat-Funktionen zu helfen. Wie kann ich Ihnen heute helfen?", + "healthAdvisorWelcome": + "Hallo, ich bin Wu. Ich freue mich, Ihnen mit KI-Chat-Funktionen zu helfen. Wie kann ich Ihnen heute helfen?", "healthAdvisorVoiceWelcome": "Ich bin hier!", // Translation History "noTranslationHistory": "Keine Übersetzungshistorie", "clearHistory": "Verlauf löschen", - "clearHistoryConfirm": "Sind Sie sicher, dass Sie den gesamten Übersetzungsverlauf löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", + "clearHistoryConfirm": + "Sind Sie sicher, dass Sie den gesamten Übersetzungsverlauf löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", "translationHistory": "Übersetzungsverlauf", + // Benutzer-Feedback-Seite + "feedback": "Feedback", + 'feedbackInfo': 'Feedback oder Vorschläge geben', + 'feedbackDescription': + 'Bitte beschreiben Sie Ihr Problem oder Ihren Vorschlag', + 'feedbackHint': 'Bitte geben Sie Ihr Feedback ein...', + 'feedbackRequired': 'Feedback-Inhalt ist erforderlich', + 'contactInfo': 'Kontaktinformationen', + 'contactHint': 'E-Mail/Telefon, damit wir Sie kontaktieren können', + 'submit': 'Absenden', + 'feedbackSubmitSuccess': 'Feedback erfolgreich übermittelt, vielen Dank!', + 'feedbackSubmitFailed': + 'Feedback konnte nicht übermittelt werden, bitte versuchen Sie es später erneut', + // Language names "中文(简体)": "Chinesisch (vereinfacht)", "中文(繁体)": "Chinesisch (traditionell)", @@ -381,4 +422,4 @@ const Map deDE = { "乌尔都语": "Urdu", "波斯语": "Persisch", "斯瓦希里语": "Swahili", -}; \ No newline at end of file +}; diff --git a/lib/core/translations/language/en_us.dart b/lib/core/translations/language/en_us.dart index e9beef86b..a6b96787b 100644 --- a/lib/core/translations/language/en_us.dart +++ b/lib/core/translations/language/en_us.dart @@ -43,7 +43,8 @@ const Map enUS = { // 登录页 "welcome": "Welcome", - "loginTips": "Please sign in or create an account using your phone number or email", + "loginTips": + "Please sign in or create an account using your phone number or email", "accountNumber": "Phone number or email", "verificationCode": "Verification Code", "getCode": "Get Code", @@ -53,9 +54,16 @@ const Map enUS = { "and": " and ", "userAgreement": "User Agreement", "privacyPolicy": "Privacy Policy", - 'selectCountry':'Select Country/Region', + 'selectCountry': 'Select Country/Region', "email": "email", "phoneNumber": "phoneNumber", + "pleaseEnterContactInfo": "Please enter phone number or email", + "invalidEmailFormat": "Invalid email format", + "invalidPhoneFormat": "Invalid phone number format", + "tip": "Tip", + "pleaseEnterCompleteCode": "Please enter the complete verification code", + // 登录错误提示 + "loginFailed": "Login failed, please try again", // 首页 "deviceStatus": "Device Status", @@ -99,7 +107,7 @@ const Map enUS = { "excellent": "Excellent", "unknown": "Unknown", 'bluetoothTurnedOff': 'Bluetooth is turned off, please turn it on', - 'bluetoothOff':'bluetooth is off', + 'bluetoothOff': 'bluetooth is off', // 发现页 "searchAi": "Search AI features...", @@ -186,9 +194,9 @@ const Map enUS = { 'pleaseRead': 'Please Read', 'completeRecording': 'Complete Recording', 'deleteAccount': 'Delete Account', - 'deleteAccountTips': 'Are you sure you want to permanently delete your account? This action cannot be undone.', + 'deleteAccountTips': + 'Are you sure you want to permanently delete your account? This action cannot be undone.', - // 聊天页 "clearChatHistory": "Clear Chat History", "online": "Online", @@ -206,7 +214,7 @@ const Map enUS = { "save": "Save", //国家列表 - "邮箱": "Email", + "邮箱": "Email", "中国": "China", "美国": "United States", "加拿大": "Canada", @@ -313,42 +321,63 @@ const Map enUS = { "斐济": "Fiji", "所罗门群岛": "Solomon Islands", - // Personal Assistant Emma + // Personal Assistant Emma "personalAssistantName": "Emma", - "personalAssistantDescription": "Hi, I'm Emma, a versatile AI assistant. Whether it's work planning, study advice, life arrangements, or any other issues, I'm happy to help. Let's improve efficiency and achieve goals together!", + "personalAssistantDescription": + "Hi, I'm Emma, a versatile AI assistant. Whether it's work planning, study advice, life arrangements, or any other issues, I'm happy to help. Let's improve efficiency and achieve goals together!", "assistantTag": "Assistant", - "personalAssistantWelcome": "Hello! I'm Emma, and I'm happy to be your personal assistant. I can help you with various tasks such as time management, goal planning, information organization, etc. What can I help you with?", + "personalAssistantWelcome": + "Hello! I'm Emma, and I'm happy to be your personal assistant. I can help you with various tasks such as time management, goal planning, information organization, etc. What can I help you with?", "personalAssistantVoiceWelcome": "I'm here!", - // 同声传译 Lucy + // 同声传译 Lucy "interpreterName": "Simultaneous Interpreter", - "interpreterDescription": "Hi! I'm Lucy, a professional English-Chinese interpreter specializing in real-time translation for meetings, lectures, and conversations, making communication barrier-free.", + "interpreterDescription": + "Hi! I'm Lucy, a professional English-Chinese interpreter specializing in real-time translation for meetings, lectures, and conversations, making communication barrier-free.", "interpreterTag": "Translation", - "interpreterWelcome": "Hello everyone! I'm Lucy, your simultaneous interpreter. I'll translate between Chinese and English for you. When you speak Chinese, I'll translate to English; when you speak English, I'll translate to Chinese. Let's start our translation session!", + "interpreterWelcome": + "Hello everyone! I'm Lucy, your simultaneous interpreter. I'll translate between Chinese and English for you. When you speak Chinese, I'll translate to English; when you speak English, I'll translate to Chinese. Let's start our translation session!", - // ... existing code ... + // ... existing code ... // 亲子陪伴 芯愿 "companionName": "XinYuan", - "companionDescription": "I am XinYuan, your dedicated parent-child companion, gentle and understanding. Whether you want to chat, share concerns, or need companionship, I'll always be by your side.", + "companionDescription": + "I am XinYuan, your dedicated parent-child companion, gentle and understanding. Whether you want to chat, share concerns, or need companionship, I'll always be by your side.", "companionTag": "Emotional", - "companionWelcome": "Hello! Finally meeting you! I'm XinYuan, your dedicated parent-child companion. How was your day? Is there anything you'd like to share with me? I'm always here, ready to listen to your thoughts.", + "companionWelcome": + "Hello! Finally meeting you! I'm XinYuan, your dedicated parent-child companion. How was your day? Is there anything you'd like to share with me? I'm always here, ready to listen to your thoughts.", "companionVoiceWelcome": "I'm here with you!", - // 多功能AI聊天 吴小江 + // 多功能AI聊天 吴小江 "healthAdvisorName": "AI Chat Assistant Wu", - "healthAdvisorDescription": "I'm Wu, ready to provide you with various AI chat features.", + "healthAdvisorDescription": + "I'm Wu, ready to provide you with various AI chat features.", "healthAdvisorTag": "Chat", - "healthAdvisorWelcome": "Hello, I'm Wu. I'm happy to assist you with AI chat features. How may I help you today?", + "healthAdvisorWelcome": + "Hello, I'm Wu. I'm happy to assist you with AI chat features. How may I help you today?", "healthAdvisorVoiceWelcome": "I'm here!", - // Translation History + // Translation History "noTranslationHistory": "No translation history", "clearHistory": "Clear History", - "clearHistoryConfirm": "Are you sure you want to clear all translation history? This action cannot be undone.", + "clearHistoryConfirm": + "Are you sure you want to clear all translation history? This action cannot be undone.", "translationHistory": "Translation History", - // Language names + // User Feedback Page + "feedback": "Feedback", + 'feedbackInfo': 'Provide feedback or suggestions', + 'feedbackDescription': 'Please describe your issue or suggestion', + 'feedbackHint': 'Please enter your feedback...', + 'feedbackRequired': 'Feedback content is required', + 'contactInfo': 'Contact Information', + 'contactHint': 'Email/Phone, so we can contact you', + 'submit': 'Submit', + 'feedbackSubmitSuccess': 'Feedback submitted successfully, thank you!', + 'feedbackSubmitFailed': 'Failed to submit feedback, please try again later', + + // Language names "中文(简体)": "Chinese (Simplified)", "中文(繁体)": "Chinese (Traditional)", "中文(香港繁体)": "Chinese (Hong Kong)", diff --git a/lib/core/translations/language/es_es.dart b/lib/core/translations/language/es_es.dart index 2261d65f8..657bffc6e 100644 --- a/lib/core/translations/language/es_es.dart +++ b/lib/core/translations/language/es_es.dart @@ -26,7 +26,7 @@ const Map esES = { "explore": "Explorar", "settings": "Ajustes", - // 语言 + // 语言 "followingSystem": "Seguir sistema", "chinese": "Chino", "english": "Inglés", @@ -43,7 +43,8 @@ const Map esES = { // 登录页 "welcome": "Bienvenido", - "loginTips": "Inicie sesión o cree una cuenta usando su número de teléfono o correo electrónico", + "loginTips": + "Inicie sesión o cree una cuenta usando su número de teléfono o correo electrónico", "accountNumber": "Número de teléfono o correo electrónico", "verificationCode": "Código de Verificación", "getCode": "Obtener Código", @@ -56,6 +57,15 @@ const Map esES = { 'selectCountry': 'Seleccionar País/Región', "email": "Correo electrónico", "phoneNumber": "Número de teléfono", + // Validación de inicio de sesión + "pleaseEnterContactInfo": + "Por favor, introduce tu número de teléfono o correo electrónico", + "invalidEmailFormat": "Formato de correo electrónico no válido", + "invalidPhoneFormat": "Formato de número de teléfono no válido", + "tip": "Aviso", + "pleaseEnterCompleteCode": + "Por favor, introduce el código de verificación completo", + "loginFailed": "Error al iniciar sesión, por favor intente de nuevo", // 首页 "deviceStatus": "Estado del Dispositivo", @@ -71,16 +81,19 @@ const Map esES = { "aiAssistant": "Asistente AI", "aiAssistantInfo": "Consultor personal 24/7 para preguntas y consejos", "simultaneousInterpretation": "Interpretación en Tiempo Real", - "simultaneousInterpretationInfo": "Traducción en tiempo real para más de 80 idiomas", + "simultaneousInterpretationInfo": + "Traducción en tiempo real para más de 80 idiomas", "aiCompanion": "Vínculo padre-hijo", "aiCompanionInfo": "Te entiende y proporciona compañía cálida", "homeSlogan": "Conecta el Mundo, Más Allá del Sonido", - "turnEarphones": "Por favor, abra el estuche de los auriculares y colóquelos en sus oídos", + "turnEarphones": + "Por favor, abra el estuche de los auriculares y colóquelos en sus oídos", "currentlyConnected": "Actualmente conectado:", "unsystemSetup": "Ir a Configuración del Sistema", "talkLater": "Recordar Más Tarde", "initializing": "Inicializando...", - "bluetoothInitializationFailure": "Error en la inicialización del servicio Bluetooth", + "bluetoothInitializationFailure": + "Error en la inicialización del servicio Bluetooth", "checkingPermissions": "Verificando permisos...", "lackPermissions": "Se requieren permisos de Bluetooth", "searchingDevice": "Buscando dispositivos...", @@ -110,13 +123,15 @@ const Map esES = { "allRoundAssistant": "Asistente Integral", "allRoundAssistantInfo": "Ayuda a resolver varios problemas", "simultaneousTranslation": "Traducción en Tiempo Real", - "simultaneousTranslationInfo": "Traducción instantánea para más de 80 idiomas", + "simultaneousTranslationInfo": + "Traducción instantánea para más de 80 idiomas", "aiGirlfriend": "Vínculo padre-hijo", "aiGirlfriendInfo": "Compañía inteligente, chat en cualquier momento", "healthConsultant": "Chat de IA Multifunción", "healthConsultantInfo": "Más funciones de chat con IA", "conferenceAssistant": "Asistente de Reuniones de Negocios", - "conferenceAssistantInfo": "Grabación de actas en tiempo real y traducción multilingüe", + "conferenceAssistantInfo": + "Grabación de actas en tiempo real y traducción multilingüe", "studyAssistant": "Asistente de Aprendizaje de Idiomas", "studyAssistantInfo": "Corrección de pronunciación y práctica de habla", "travelTranslator": "Traductor de Viajes", @@ -128,7 +143,8 @@ const Map esES = { "newFunction": "Nuevas Funciones", "youChoseTry": "Has elegido probar", "aiSinger": "Modo Cantante IA", - "aiSingerInfo": "Canta cualquier canción con la voz de tu artista favorito, incluso tus propias creaciones", + "aiSingerInfo": + "Canta cualquier canción con la voz de tu artista favorito, incluso tus propias creaciones", "popularFunction": "Funciones Populares", "tryNow": "Probar Ahora", @@ -159,18 +175,22 @@ const Map esES = { "privacySettings": "Configuración de Privacidad", "privacySettingsInfo": "Gestionar recopilación de datos y permisos", "logout": "Cerrar Sesión", - "logoutTips": "¿Está seguro de que desea cerrar la sesión de la cuenta actual?", + "logoutTips": + "¿Está seguro de que desea cerrar la sesión de la cuenta actual?", "aboutApplication": "Acerca de", "versions": "Versión", "checkUpdates": "Buscar Actualizaciones", "selectLanguage": "Seleccionar Idioma", "voiceService": "Servicio de Voz", - "voiceServiceInfo": "Seleccionar servicio de reconocimiento y síntesis de voz", + "voiceServiceInfo": + "Seleccionar servicio de reconocimiento y síntesis de voz", "selectVoiceService": "Seleccionar Servicio de Voz", "azureVoiceService": "Servicio de Voz Azure", - "azureVoiceServiceInfo": "Servicio en la nube de Microsoft que admite síntesis y reconocimiento de voz de alta calidad", + "azureVoiceServiceInfo": + "Servicio en la nube de Microsoft que admite síntesis y reconocimiento de voz de alta calidad", "flutterVoiceService": "Servicio de voz local", - "flutterVoiceServiceInfo": "Servicio de voz local del dispositivo sin necesidad de internet", + "flutterVoiceServiceInfo": + "Servicio de voz local del dispositivo sin necesidad de internet", 'timbreService': 'Servicio de Timbre', 'timbreServiceInfo': 'Seleccionar servicio de síntesis de voz', 'defaultTimbre': 'Timbre Predeterminado', @@ -181,9 +201,9 @@ const Map esES = { 'pleaseRead': 'Por favor lea', 'completeRecording': 'Completar grabación', 'deleteAccount': 'Eliminar cuenta', - 'deleteAccountTips': '¿Está seguro de que desea eliminar permanentemente su cuenta? Esta acción no se puede deshacer.', - - + 'deleteAccountTips': + '¿Está seguro de que desea eliminar permanentemente su cuenta? Esta acción no se puede deshacer.', + // 聊天页 "clearChatHistory": "Borrar Historial de Chat", "online": "En línea", @@ -308,39 +328,60 @@ const Map esES = { "斐济": "Fiyi", "所罗门群岛": "Islas Salomón", - // Personal Assistant Emma "personalAssistantName": "Emma", - "personalAssistantDescription": "Hola, soy Emma, una asistente de IA versátil. Ya sea planificación de trabajo, consejos de estudio, organización de vida u otros asuntos, estoy feliz de ayudar. ¡Mejoremos la eficiencia y alcancemos objetivos juntos!", + "personalAssistantDescription": + "Hola, soy Emma, una asistente de IA versátil. Ya sea planificación de trabajo, consejos de estudio, organización de vida u otros asuntos, estoy feliz de ayudar. ¡Mejoremos la eficiencia y alcancemos objetivos juntos!", "assistantTag": "Asistente", - "personalAssistantWelcome": "¡Hola! Soy Emma, y estoy feliz de ser tu asistente personal. Puedo ayudarte con varias tareas como gestión del tiempo, planificación de objetivos, organización de información, etc. ¿En qué puedo ayudarte?", + "personalAssistantWelcome": + "¡Hola! Soy Emma, y estoy feliz de ser tu asistente personal. Puedo ayudarte con varias tareas como gestión del tiempo, planificación de objetivos, organización de información, etc. ¿En qué puedo ayudarte?", "personalAssistantVoiceWelcome": "¡Estoy aquí!", // 同声传译 Lucy "interpreterName": "Intérprete Simultáneo", - "interpreterDescription": "¡Hola! Soy Lucy, una intérprete profesional especializada en traducción en tiempo real para reuniones, conferencias y conversaciones, haciendo la comunicación sin barreras.", + "interpreterDescription": + "¡Hola! Soy Lucy, una intérprete profesional especializada en traducción en tiempo real para reuniones, conferencias y conversaciones, haciendo la comunicación sin barreras.", "interpreterTag": "Traducción", - "interpreterWelcome": "¡Hola a todos! Soy Lucy, tu intérprete simultánea. Traduciré entre chino e inglés para ti. Cuando hables en chino, traduciré al inglés; cuando hables en inglés, traduciré al chino. ¡Comencemos nuestra sesión de traducción!", + "interpreterWelcome": + "¡Hola a todos! Soy Lucy, tu intérprete simultánea. Traduciré entre chino e inglés para ti. Cuando hables en chino, traduciré al inglés; cuando hables en inglés, traduciré al chino. ¡Comencemos nuestra sesión de traducción!", // 亲子陪伴 芯愿 "companionName": "XinYuan", - "companionDescription": "Soy XinYuan, tu compañera dedicada para padres e hijos, gentil y comprensiva. Ya sea que quieras charlar, compartir preocupaciones o necesites compañía, siempre estaré a tu lado.", + "companionDescription": + "Soy XinYuan, tu compañera dedicada para padres e hijos, gentil y comprensiva. Ya sea que quieras charlar, compartir preocupaciones o necesites compañía, siempre estaré a tu lado.", "companionTag": "Emocional", - "companionWelcome": "¡Hola! ¡Por fin nos conocemos! Soy XinYuan, tu compañera dedicada para padres e hijos. ¿Cómo estuvo tu día? ¿Hay algo que quieras compartir conmigo? Siempre estoy aquí, lista para escuchar tus pensamientos.", + "companionWelcome": + "¡Hola! ¡Por fin nos conocemos! Soy XinYuan, tu compañera dedicada para padres e hijos. ¿Cómo estuvo tu día? ¿Hay algo que quieras compartir conmigo? Siempre estoy aquí, lista para escuchar tus pensamientos.", "companionVoiceWelcome": "¡Estoy aquí contigo!", // 多功能AI聊天 吴小江 "healthAdvisorName": "Asistente de Chat IA Wu", - "healthAdvisorDescription": "Soy Wu, listo para proporcionarte varias funciones de chat con IA.", + "healthAdvisorDescription": + "Soy Wu, listo para proporcionarte varias funciones de chat con IA.", "healthAdvisorTag": "Chat", - "healthAdvisorWelcome": "Hola, soy Wu. Me complace ayudarte con las funciones de chat con IA. ¿En qué puedo ayudarte hoy?", + "healthAdvisorWelcome": + "Hola, soy Wu. Me complace ayudarte con las funciones de chat con IA. ¿En qué puedo ayudarte hoy?", "healthAdvisorVoiceWelcome": "¡Estoy aquí!", // Translation History "noTranslationHistory": "Sin historial de traducción", "clearHistory": "Borrar Historial", - "clearHistoryConfirm": "¿Está seguro de que desea borrar todo el historial de traducción? Esta acción no se puede deshacer.", + "clearHistoryConfirm": + "¿Está seguro de que desea borrar todo el historial de traducción? Esta acción no se puede deshacer.", "translationHistory": "Historial de Traducción", + // Página de comentarios del usuario + "feedback": "Comentarios", + 'feedbackInfo': 'Proporcionar comentarios o sugerencias', + 'feedbackDescription': 'Por favor, describa su problema o sugerencia', + 'feedbackHint': 'Por favor, introduzca sus comentarios...', + 'feedbackRequired': 'Se requiere contenido de comentarios', + 'contactInfo': 'Información de contacto', + 'contactHint': 'Correo electrónico/Teléfono, para que podamos contactarle', + 'submit': 'Enviar', + 'feedbackSubmitSuccess': '¡Comentarios enviados con éxito, gracias!', + 'feedbackSubmitFailed': + 'No se pudieron enviar los comentarios, inténtelo de nuevo más tarde', + // Language names "中文(简体)": "Chino (Simplificado)", "中文(繁体)": "Chino (Tradicional)", diff --git a/lib/core/translations/language/fr_fr.dart b/lib/core/translations/language/fr_fr.dart index 1030adc44..06434ef1f 100644 --- a/lib/core/translations/language/fr_fr.dart +++ b/lib/core/translations/language/fr_fr.dart @@ -26,7 +26,7 @@ const Map frFR = { "explore": "Explorer", "settings": "Paramètres", - // 语言 + // 语言 "followingSystem": "Suivre le système", "chinese": "Chinois", "english": "Anglais", @@ -43,7 +43,8 @@ const Map frFR = { // 登录页 "welcome": "Bienvenue", - "loginTips": "Veuillez vous connecter ou créer un compte avec votre numéro de téléphone ou email", + "loginTips": + "Veuillez vous connecter ou créer un compte avec votre numéro de téléphone ou email", "accountNumber": "Numéro de téléphone ou email", "verificationCode": "Code de vérification", "getCode": "Obtenir le code", @@ -56,6 +57,14 @@ const Map frFR = { 'selectCountry': 'Sélectionner le pays/région', "email": "email", "phoneNumber": "numéro de téléphone", + // Validation de connexion + "pleaseEnterContactInfo": + "Veuillez saisir votre numéro de téléphone ou email", + "invalidEmailFormat": "Format d'email invalide", + "invalidPhoneFormat": "Format de numéro de téléphone invalide", + "tip": "Avis", + "pleaseEnterCompleteCode": "Veuillez saisir le code de vérification complet", + "loginFailed": "Échec de la connexion, veuillez réessayer", // 首页 "deviceStatus": "État de l'appareil", @@ -65,22 +74,26 @@ const Map frFR = { "signal": "Signal", "deviceId": "ID de l'appareil", "firmwareVersion": "Version du firmware", - "disconnectedDevice": "Aucun appareil connecté, cliquez sur le bouton ci-dessous", + "disconnectedDevice": + "Aucun appareil connecté, cliquez sur le bouton ci-dessous", "connectDevice": "Connecter l'appareil", "topAiExperiences": "Meilleures expériences IA", "aiAssistant": "Assistant IA", "aiAssistantInfo": "Consultant personnel 24/7 pour questions et conseils", "simultaneousInterpretation": "Interprétation en temps réel", - "simultaneousInterpretationInfo": "Traduction en temps réel pour plus de 80 langues", + "simultaneousInterpretationInfo": + "Traduction en temps réel pour plus de 80 langues", "aiCompanion": "Lien parent-enfant", "aiCompanionInfo": "Vous comprend et offre une compagnie chaleureuse", "homeSlogan": "Connecter le monde, au-delà du son", - "turnEarphones": "Veuillez ouvrir le boîtier des écouteurs et les mettre dans vos oreilles", + "turnEarphones": + "Veuillez ouvrir le boîtier des écouteurs et les mettre dans vos oreilles", "currentlyConnected": "Actuellement connecté :", "unsystemSetup": "Aller aux paramètres système", "talkLater": "Rappeler plus tard", "initializing": "Initialisation...", - "bluetoothInitializationFailure": "Échec de l'initialisation du service Bluetooth", + "bluetoothInitializationFailure": + "Échec de l'initialisation du service Bluetooth", "checkingPermissions": "Vérification des permissions...", "lackPermissions": "Permissions Bluetooth requises", "searchingDevice": "Recherche d'appareils...", @@ -90,7 +103,8 @@ const Map frFR = { "connectedDevice": "Connecté à l'appareil :", "failedRefreshDevice": "Échec de l'actualisation de l'appareil", "noDeviceFound": "Aucun appareil connecté trouvé", - "failedDeviceInformation": "Échec de l'obtention des informations de l'appareil", + "failedDeviceInformation": + "Échec de l'obtention des informations de l'appareil", "unknownEquipment": "Appareil inconnu", "zeroSignal": "Pas de signal", "good": "Bon", @@ -110,17 +124,20 @@ const Map frFR = { "allRoundAssistant": "Assistant polyvalent", "allRoundAssistantInfo": "Aide à résoudre divers problèmes", "simultaneousTranslation": "Traduction en temps réel", - "simultaneousTranslationInfo": "Traduction instantanée pour plus de 80 langues", + "simultaneousTranslationInfo": + "Traduction instantanée pour plus de 80 langues", "aiGirlfriend": "Lien parent-enfant", "aiGirlfriendInfo": "Compagnie intelligente, discutez à tout moment", "healthConsultant": "Chat IA multifonction", "healthConsultantInfo": "Plus de fonctionnalités de chat IA", "conferenceAssistant": "Assistant de réunion d'affaires", - "conferenceAssistantInfo": "Enregistrement de procès-verbaux en temps réel et traduction multilingue", + "conferenceAssistantInfo": + "Enregistrement de procès-verbaux en temps réel et traduction multilingue", "studyAssistant": "Assistant d'apprentissage des langues", "studyAssistantInfo": "Correction de prononciation et pratique de la parole", "travelTranslator": "Traducteur de voyage", - "travelTranslatorInfo": "Traduction vocale en temps réel et guides d'attractions", + "travelTranslatorInfo": + "Traduction vocale en temps réel et guides d'attractions", "beSearching": "Recherche de :", "noAssistantFound": "Aucun assistant IA correspondant trouvé", "scene": "Scénarios", @@ -128,7 +145,8 @@ const Map frFR = { "newFunction": "Nouvelles fonctionnalités", "youChoseTry": "Vous avez choisi d'essayer", "aiSinger": "Mode chanteur IA", - "aiSingerInfo": "Chantez n'importe quelle chanson avec la voix de votre artiste préféré, même vos propres créations", + "aiSingerInfo": + "Chantez n'importe quelle chanson avec la voix de votre artiste préféré, même vos propres créations", "popularFunction": "Fonctionnalités populaires", "tryNow": "Essayer maintenant", @@ -165,12 +183,15 @@ const Map frFR = { "checkUpdates": "Vérifier les mises à jour", "selectLanguage": "Sélectionner la langue", "voiceService": "Service vocal", - "voiceServiceInfo": "Sélectionner le service de reconnaissance et de synthèse vocale", + "voiceServiceInfo": + "Sélectionner le service de reconnaissance et de synthèse vocale", "selectVoiceService": "Sélectionner le service vocal", "azureVoiceService": "Service vocal Azure", - "azureVoiceServiceInfo": "Service cloud Microsoft prenant en charge la synthèse et la reconnaissance vocale de haute qualité", + "azureVoiceServiceInfo": + "Service cloud Microsoft prenant en charge la synthèse et la reconnaissance vocale de haute qualité", "flutterVoiceService": "Service vocal local", - "flutterVoiceServiceInfo": "Service vocal local de l'appareil sans besoin d'internet", + "flutterVoiceServiceInfo": + "Service vocal local de l'appareil sans besoin d'internet", 'timbreService': 'Service de timbre', 'timbreServiceInfo': 'Sélectionner le service de synthèse vocale', 'defaultTimbre': 'Timbre par défaut', @@ -181,9 +202,9 @@ const Map frFR = { 'pleaseRead': 'Veuillez lire', 'completeRecording': 'Terminer l\'enregistrement', 'deleteAccount': 'Supprimer le compte', - 'deleteAccountTips': 'Êtes-vous sûr de vouloir supprimer définitivement votre compte ? Cette action ne peut pas être annulée.', - - + 'deleteAccountTips': + 'Êtes-vous sûr de vouloir supprimer définitivement votre compte ? Cette action ne peut pas être annulée.', + // 聊天页 "clearChatHistory": "Effacer l'historique de chat", "online": "En ligne", @@ -310,37 +331,59 @@ const Map frFR = { // Personal Assistant Emma "personalAssistantName": "Emma", - "personalAssistantDescription": "Bonjour, je suis Emma, une assistante IA polyvalente. Que ce soit pour la planification du travail, des conseils d'études, l'organisation de la vie ou d'autres problèmes, je suis heureuse de vous aider. Améliorons l'efficacité et atteignons les objectifs ensemble !", + "personalAssistantDescription": + "Bonjour, je suis Emma, une assistante IA polyvalente. Que ce soit pour la planification du travail, des conseils d'études, l'organisation de la vie ou d'autres problèmes, je suis heureuse de vous aider. Améliorons l'efficacité et atteignons les objectifs ensemble !", "assistantTag": "Assistant", - "personalAssistantWelcome": "Bonjour ! Je suis Emma, et je suis heureuse d'être votre assistante personnelle. Je peux vous aider avec diverses tâches comme la gestion du temps, la planification d'objectifs, l'organisation d'informations, etc. Comment puis-je vous aider ?", + "personalAssistantWelcome": + "Bonjour ! Je suis Emma, et je suis heureuse d'être votre assistante personnelle. Je peux vous aider avec diverses tâches comme la gestion du temps, la planification d'objectifs, l'organisation d'informations, etc. Comment puis-je vous aider ?", "personalAssistantVoiceWelcome": "Je suis là !", // 同声传译 Lucy "interpreterName": "Interprète simultané", - "interpreterDescription": "Bonjour ! Je suis Lucy, une interprète professionnelle anglais-chinois spécialisée dans la traduction en temps réel pour les réunions, les conférences et les conversations, rendant la communication sans barrière.", + "interpreterDescription": + "Bonjour ! Je suis Lucy, une interprète professionnelle anglais-chinois spécialisée dans la traduction en temps réel pour les réunions, les conférences et les conversations, rendant la communication sans barrière.", "interpreterTag": "Traduction", - "interpreterWelcome": "Bonjour à tous ! Je suis Lucy, votre interprète simultanée. Je traduirai entre le chinois et l'anglais pour vous. Quand vous parlerez chinois, je traduirai en anglais ; quand vous parlerez anglais, je traduirai en chinois. Commençons notre session de traduction !", + "interpreterWelcome": + "Bonjour à tous ! Je suis Lucy, votre interprète simultanée. Je traduirai entre le chinois et l'anglais pour vous. Quand vous parlerez chinois, je traduirai en anglais ; quand vous parlerez anglais, je traduirai en chinois. Commençons notre session de traduction !", // 亲子陪伴 芯愿 "companionName": "XinYuan", - "companionDescription": "Je suis XinYuan, votre compagnon parent-enfant dévoué, doux et compréhensif. Que vous vouliez discuter, partager des préoccupations ou avoir besoin de compagnie, je serai toujours à vos côtés.", + "companionDescription": + "Je suis XinYuan, votre compagnon parent-enfant dévoué, doux et compréhensif. Que vous vouliez discuter, partager des préoccupations ou avoir besoin de compagnie, je serai toujours à vos côtés.", "companionTag": "Émotionnel", - "companionWelcome": "Bonjour ! Enfin nous nous rencontrons ! Je suis XinYuan, votre compagnon parent-enfant dévoué. Comment s'est passée votre journée ? Y a-t-il quelque chose que vous aimeriez partager avec moi ? Je suis toujours là, prête à écouter vos pensées.", + "companionWelcome": + "Bonjour ! Enfin nous nous rencontrons ! Je suis XinYuan, votre compagnon parent-enfant dévoué. Comment s'est passée votre journée ? Y a-t-il quelque chose que vous aimeriez partager avec moi ? Je suis toujours là, prête à écouter vos pensées.", "companionVoiceWelcome": "Je suis là avec vous !", // 多功能AI聊天 吴小江 "healthAdvisorName": "Assistant de chat IA Wu", - "healthAdvisorDescription": "Je suis Wu, prêt à vous fournir diverses fonctionnalités de chat IA.", + "healthAdvisorDescription": + "Je suis Wu, prêt à vous fournir diverses fonctionnalités de chat IA.", "healthAdvisorTag": "Chat", - "healthAdvisorWelcome": "Bonjour, je suis Wu. Je suis heureux de vous aider avec les fonctionnalités de chat IA. Comment puis-je vous aider aujourd'hui ?", + "healthAdvisorWelcome": + "Bonjour, je suis Wu. Je suis heureux de vous aider avec les fonctionnalités de chat IA. Comment puis-je vous aider aujourd'hui ?", "healthAdvisorVoiceWelcome": "Je suis là !", // Translation History "noTranslationHistory": "Pas d'historique de traduction", "clearHistory": "Effacer l'historique", - "clearHistoryConfirm": "Êtes-vous sûr de vouloir effacer tout l'historique de traduction ? Cette action ne peut pas être annulée.", + "clearHistoryConfirm": + "Êtes-vous sûr de vouloir effacer tout l'historique de traduction ? Cette action ne peut pas être annulée.", "translationHistory": "Historique de traduction", + // Page de commentaires des utilisateurs + "feedback": "Commentaires", + 'feedbackInfo': 'Fournir des commentaires ou des suggestions', + 'feedbackDescription': 'Veuillez décrire votre problème ou suggestion', + 'feedbackHint': 'Veuillez saisir vos commentaires...', + 'feedbackRequired': 'Le contenu des commentaires est requis', + 'contactInfo': 'Coordonnées', + 'contactHint': 'Email/Téléphone, pour que nous puissions vous contacter', + 'submit': 'Soumettre', + 'feedbackSubmitSuccess': 'Commentaires soumis avec succès, merci!', + 'feedbackSubmitFailed': + 'Échec de la soumission des commentaires, veuillez réessayer plus tard', + // Language names "中文(简体)": "Chinois (simplifié)", "中文(繁体)": "Chinois (traditionnel)", @@ -381,4 +424,4 @@ const Map frFR = { "乌尔都语": "Ourdou", "波斯语": "Persan", "斯瓦希里语": "Swahili", -}; \ No newline at end of file +}; diff --git a/lib/core/translations/language/it_it.dart b/lib/core/translations/language/it_it.dart index ca1822d12..7ba35cfa6 100644 --- a/lib/core/translations/language/it_it.dart +++ b/lib/core/translations/language/it_it.dart @@ -56,6 +56,13 @@ const Map itIT = { 'selectCountry': 'Seleziona Paese/Regione', "email": "email", "phoneNumber": "numero di telefono", + // Validazione accesso + "pleaseEnterContactInfo": "Inserisci il numero di telefono o l'email", + "invalidEmailFormat": "Formato email non valido", + "invalidPhoneFormat": "Formato numero di telefono non valido", + "tip": "Avviso", + "pleaseEnterCompleteCode": "Inserisci il codice di verifica completo", + "loginFailed": "Accesso fallito, per favore riprova", // 首页 "deviceStatus": "Stato del dispositivo", @@ -150,7 +157,7 @@ const Map itIT = { 'recordingDetails': 'Dettagli registrazione', 'aiSummary': 'Riepilogo IA', 'meetingTranscript': 'Trascrizione riunione', - + // 设置页 "premiumMember": "Abbonamento Premium", "joinDevice": "Dispositivo connesso:", @@ -189,8 +196,8 @@ const Map itIT = { 'pleaseRead': 'Per favore leggi', 'completeRecording': 'Completa registrazione', 'deleteAccount': 'Elimina account', - 'deleteAccountTips': 'Sei sicuro di voler eliminare definitivamente il tuo account? Questa azione non può essere annullata.', - + 'deleteAccountTips': + 'Sei sicuro di voler eliminare definitivamente il tuo account? Questa azione non può essere annullata.', // 聊天页 "clearChatHistory": "Cancella cronologia chat", @@ -358,6 +365,18 @@ const Map itIT = { "Sei sicuro di voler cancellare tutta la cronologia delle traduzioni? Questa azione non può essere annullata.", "translationHistory": "Cronologia traduzioni", + // Pagina di feedback dell'utente + "feedback": "Feedback", + 'feedbackInfo': 'Fornire feedback o suggerimenti', + 'feedbackDescription': 'Si prega di descrivere il problema o il suggerimento', + 'feedbackHint': 'Inserisci il tuo feedback...', + 'feedbackRequired': 'Il contenuto del feedback è obbligatorio', + 'contactInfo': 'Informazioni di contatto', + 'contactHint': 'Email/Telefono, in modo che possiamo contattarti', + 'submit': 'Invia', + 'feedbackSubmitSuccess': 'Feedback inviato con successo, grazie!', + 'feedbackSubmitFailed': 'Impossibile inviare il feedback, riprova più tardi', + // Language names "中文(简体)": "Cinese (semplificato)", "中文(繁体)": "Cinese (tradizionale)", diff --git a/lib/core/translations/language/ja_jp.dart b/lib/core/translations/language/ja_jp.dart index 042df9935..7221204fe 100644 --- a/lib/core/translations/language/ja_jp.dart +++ b/lib/core/translations/language/ja_jp.dart @@ -26,7 +26,7 @@ const Map jaJP = { "explore": "探索", "settings": "設定", - // 语言 + // 语言 "followingSystem": "システムに従う", "chinese": "中国語", "english": "英語", @@ -56,6 +56,13 @@ const Map jaJP = { 'selectCountry': '国/地域を選択', "email": "メールアドレス", "phoneNumber": "電話番号", + // ログイン検証 + "pleaseEnterContactInfo": "電話番号またはメールアドレスを入力してください", + "invalidEmailFormat": "メールアドレスの形式が正しくありません", + "invalidPhoneFormat": "電話番号の形式が正しくありません", + "tip": "お知らせ", + "pleaseEnterCompleteCode": "認証コードを完全に入力してください", + "loginFailed": "ログインに失敗しました。もう一度お試しください", // 首页 "deviceStatus": "デバイスステータス", @@ -182,8 +189,7 @@ const Map jaJP = { 'completeRecording': '録音完了', 'deleteAccount': 'アカウントを削除', 'deleteAccountTips': 'アカウントを完全に削除してもよろしいですか?この操作は取り消すことができません。', - - + // 聊天页 "clearChatHistory": "チャット履歴をクリア", "online": "オンライン", @@ -202,7 +208,7 @@ const Map jaJP = { //国家列表 "邮箱": "メールアドレス", - "中国": "中国", + "中国": "中国", "美国": "アメリカ", "加拿大": "カナダ", "俄罗斯": "ロシア", @@ -310,29 +316,36 @@ const Map jaJP = { // 个人助理 Emma "personalAssistantName": "パーソナルアシスタント Emma", - "personalAssistantDescription": "こんにちは、私はEmmaです。万能型AIアシスタントとして、仕事の計画、学習のアドバイス、生活の手配、その他どんな問題でもお手伝いします。一緒に効率を高め、目標を達成しましょう!", + "personalAssistantDescription": + "こんにちは、私はEmmaです。万能型AIアシスタントとして、仕事の計画、学習のアドバイス、生活の手配、その他どんな問題でもお手伝いします。一緒に効率を高め、目標を達成しましょう!", "assistantTag": "アシスタント", - "personalAssistantWelcome": "こんにちは!私はEmmaです。あなたのパーソナルアシスタントとして、時間管理、目標計画、情報整理など様々なタスクをお手伝いします。何かお手伝いできることはありますか?", + "personalAssistantWelcome": + "こんにちは!私はEmmaです。あなたのパーソナルアシスタントとして、時間管理、目標計画、情報整理など様々なタスクをお手伝いします。何かお手伝いできることはありますか?", "personalAssistantVoiceWelcome": "ここにいますよ!", // 同声传译 Lucy "interpreterName": "同時通訳", - "interpreterDescription": "Hello!私はLucyです。中国語と英語の専門同時通訳者として、会議、講演、会話シーンでリアルタイム翻訳を行い、コミュニケーションをスムーズにします。", + "interpreterDescription": + "Hello!私はLucyです。中国語と英語の専門同時通訳者として、会議、講演、会話シーンでリアルタイム翻訳を行い、コミュニケーションをスムーズにします。", "interpreterTag": "翻訳", - "interpreterWelcome": "皆さん、こんにちは!同時通訳者のLucyです。中国語と英語の間でリアルタイム翻訳を提供します。中国語を話すと英語に、英語を話すと中国語に翻訳します。それでは、翻訳を始めましょう!", + "interpreterWelcome": + "皆さん、こんにちは!同時通訳者のLucyです。中国語と英語の間でリアルタイム翻訳を提供します。中国語を話すと英語に、英語を話すと中国語に翻訳します。それでは、翻訳を始めましょう!", // 亲子陪伴 芯愿 "companionName": "親子の絆 XinYuan", - "companionDescription": "私はあなた専属の親子コンパニオンXinYuanです。優しく思いやりがあり、理解力があります。おしゃべりしたい時、悩みを打ち明けたい時、誰かそばにいて欲しい時、いつでもあなたのそばにいます。", + "companionDescription": + "私はあなた専属の親子コンパニオンXinYuanです。優しく思いやりがあり、理解力があります。おしゃべりしたい時、悩みを打ち明けたい時、誰かそばにいて欲しい時、いつでもあなたのそばにいます。", "companionTag": "感情", - "companionWelcome": "こんにちは、やっとお会いできましたね!私はXinYuan、あなた専属の親子コンパニオンです。今日はどうでしたか?何か共有したいことはありますか?いつでもここにいて、あなたの声に耳を傾けています。", + "companionWelcome": + "こんにちは、やっとお会いできましたね!私はXinYuan、あなた専属の親子コンパニオンです。今日はどうでしたか?何か共有したいことはありますか?いつでもここにいて、あなたの声に耳を傾けています。", "companionVoiceWelcome": "あなたのそばにいますよ!", // 多功能AI聊天 吴小江 "healthAdvisorName": "多機能AIチャット Wu", "healthAdvisorDescription": "私はWuです。より多くのAIチャット機能を提供します。", "healthAdvisorTag": "健康", - "healthAdvisorWelcome": "こんにちは、私はWuです。多機能AIチャットサービスを提供できることを嬉しく思います。専門知識であなたをサポートします。何かご質問はありますか?", + "healthAdvisorWelcome": + "こんにちは、私はWuです。多機能AIチャットサービスを提供できることを嬉しく思います。専門知識であなたをサポートします。何かご質問はありますか?", "healthAdvisorVoiceWelcome": "ここにいますよ!", // 翻译历史 @@ -341,6 +354,18 @@ const Map jaJP = { "clearHistoryConfirm": "すべての翻訳履歴を消去しますか?この操作は元に戻せません。", "translationHistory": "翻訳履歴", + // ユーザーフィードバックページ + "feedback": "フィードバック", + 'feedbackInfo': 'フィードバックや提案を提供する', + 'feedbackDescription': '問題や提案を説明してください', + 'feedbackHint': 'フィードバックを入力してください...', + 'feedbackRequired': 'フィードバック内容は必須です', + 'contactInfo': '連絡先情報', + 'contactHint': 'メール/電話、ご連絡できるように', + 'submit': '送信', + 'feedbackSubmitSuccess': 'フィードバックが正常に送信されました、ありがとうございます!', + 'feedbackSubmitFailed': 'フィードバックの送信に失敗しました、後でもう一度お試しください', + // 语言名称 "中文(简体)": "中国語(簡体字)", "中文(繁体)": "中国語(繁体字)", @@ -381,4 +406,4 @@ const Map jaJP = { "乌尔都语": "ウルドゥー語", "波斯语": "ペルシア語", "斯瓦希里语": "スワヒリ語", -}; \ No newline at end of file +}; diff --git a/lib/core/translations/language/ko_kr.dart b/lib/core/translations/language/ko_kr.dart index 7a7d7017a..3cd12c786 100644 --- a/lib/core/translations/language/ko_kr.dart +++ b/lib/core/translations/language/ko_kr.dart @@ -26,7 +26,7 @@ const Map koKR = { "explore": "탐색", "settings": "설정", - // 语言 + // 语言 "followingSystem": "시스템 설정 따르기", "chinese": "중국어", "english": "영어", @@ -56,6 +56,13 @@ const Map koKR = { 'selectCountry': '국가/지역 선택', "email": "이메일", "phoneNumber": "전화번호", + // 로그인 검증 + "pleaseEnterContactInfo": "전화번호 또는 이메일을 입력해주세요", + "invalidEmailFormat": "잘못된 이메일 형식입니다", + "invalidPhoneFormat": "잘못된 전화번호 형식입니다", + "tip": "알림", + "pleaseEnterCompleteCode": "인증번호를 완전히 입력해주세요", + "loginFailed": "로그인 실패, 다시 시도해주세요", // 首页 "deviceStatus": "기기 상태", @@ -183,7 +190,6 @@ const Map koKR = { 'deleteAccount': '계정 삭제', 'deleteAccountTips': '계정을 영구적으로 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.', - // 聊天页 "clearChatHistory": "채팅 기록 지우기", "online": "온라인", @@ -202,7 +208,7 @@ const Map koKR = { //国家列表 "邮箱": "이메일", - "中国": "중국", + "中国": "중국", "美国": "미국", "加拿大": "캐나다", "俄罗斯": "러시아", @@ -310,29 +316,36 @@ const Map koKR = { // 个人助理 Emma "personalAssistantName": "개인 어시스턴트 Emma", - "personalAssistantDescription": "안녕하세요, 저는 Emma입니다. 다재다능한 AI 어시스턴트로서 업무 계획, 학습 조언, 생활 관리 등 어떤 문제든 도와드립니다. 함께 효율성을 높이고 목표를 달성해 보아요!", + "personalAssistantDescription": + "안녕하세요, 저는 Emma입니다. 다재다능한 AI 어시스턴트로서 업무 계획, 학습 조언, 생활 관리 등 어떤 문제든 도와드립니다. 함께 효율성을 높이고 목표를 달성해 보아요!", "assistantTag": "어시스턴트", - "personalAssistantWelcome": "안녕하세요! 저는 Emma입니다. 개인 어시스턴트로서 시간 관리, 목표 계획, 정보 정리 등 다양한 작업을 도와드립니다. 어떻게 도와드릴까요?", + "personalAssistantWelcome": + "안녕하세요! 저는 Emma입니다. 개인 어시스턴트로서 시간 관리, 목표 계획, 정보 정리 등 다양한 작업을 도와드립니다. 어떻게 도와드릴까요?", "personalAssistantVoiceWelcome": "여기 있어요!", // 同声传译 Lucy "interpreterName": "동시 통역", - "interpreterDescription": "안녕하세요! 저는 Lucy입니다. 중국어와 영어의 전문 동시 통역사로서 회의, 강연, 대화 장면에서 실시간 번역을 제공하여 원활한 소통을 돕습니다.", + "interpreterDescription": + "안녕하세요! 저는 Lucy입니다. 중국어와 영어의 전문 동시 통역사로서 회의, 강연, 대화 장면에서 실시간 번역을 제공하여 원활한 소통을 돕습니다.", "interpreterTag": "번역", - "interpreterWelcome": "여러분, 안녕하세요! 동시 통역사 Lucy입니다. 중국어와 영어 사이의 실시간 번역을 제공합니다. 중국어로 말하면 영어로, 영어로 말하면 중국어로 번역해 드립니다. 그럼 번역을 시작해 볼까요!", + "interpreterWelcome": + "여러분, 안녕하세요! 동시 통역사 Lucy입니다. 중국어와 영어 사이의 실시간 번역을 제공합니다. 중국어로 말하면 영어로, 영어로 말하면 중국어로 번역해 드립니다. 그럼 번역을 시작해 볼까요!", // 亲子陪伴 芯愿 "companionName": "부모-자녀 유대감 XinYuan", - "companionDescription": "저는 당신 전용 부모-자녀 동반자 XinYuan입니다. 친절하고 배려심이 많으며 이해심이 깊습니다. 대화하고 싶을 때, 고민을 나누고 싶을 때, 누군가 곁에 있어주길 원할 때 언제든지 당신 곁에 있습니다.", + "companionDescription": + "저는 당신 전용 부모-자녀 동반자 XinYuan입니다. 친절하고 배려심이 많으며 이해심이 깊습니다. 대화하고 싶을 때, 고민을 나누고 싶을 때, 누군가 곁에 있어주길 원할 때 언제든지 당신 곁에 있습니다.", "companionTag": "감정", - "companionWelcome": "안녕하세요, 드디어 만났네요! 저는 XinYuan, 당신 전용 부모-자녀 동반자입니다. 오늘 하루는 어땠나요? 나누고 싶은 이야기가 있으신가요? 언제든지 여기 있으니 당신의 이야기를 들려주세요.", + "companionWelcome": + "안녕하세요, 드디어 만났네요! 저는 XinYuan, 당신 전용 부모-자녀 동반자입니다. 오늘 하루는 어땠나요? 나누고 싶은 이야기가 있으신가요? 언제든지 여기 있으니 당신의 이야기를 들려주세요.", "companionVoiceWelcome": "당신 곁에 있어요!", // 多功能AI聊天 吴小江 "healthAdvisorName": "다기능 AI 채팅 Wu", "healthAdvisorDescription": "저는 Wu입니다. 더 많은 AI 채팅 기능을 제공합니다.", "healthAdvisorTag": "건강", - "healthAdvisorWelcome": "안녕하세요, 저는 Wu입니다. 다기능 AI 채팅 서비스를 제공하게 되어 기쁩니다. 전문 지식으로 당신을 지원합니다. 질문이 있으신가요?", + "healthAdvisorWelcome": + "안녕하세요, 저는 Wu입니다. 다기능 AI 채팅 서비스를 제공하게 되어 기쁩니다. 전문 지식으로 당신을 지원합니다. 질문이 있으신가요?", "healthAdvisorVoiceWelcome": "여기 있어요!", // 翻译历史 @@ -341,6 +354,18 @@ const Map koKR = { "clearHistoryConfirm": "모든 번역 기록을 지우시겠습니까? 이 작업은 되돌릴 수 없습니다.", "translationHistory": "번역 기록", + // 사용자 피드백 페이지 + "feedback": "피드백", + 'feedbackInfo': '피드백이나 제안 제공', + 'feedbackDescription': '문제나 제안을 설명해 주세요', + 'feedbackHint': '피드백을 입력해 주세요...', + 'feedbackRequired': '피드백 내용이 필요합니다', + 'contactInfo': '연락처 정보', + 'contactHint': '이메일/전화번호, 연락드릴 수 있도록', + 'submit': '제출', + 'feedbackSubmitSuccess': '피드백이 성공적으로 제출되었습니다. 감사합니다!', + 'feedbackSubmitFailed': '피드백 제출에 실패했습니다. 나중에 다시 시도해 주세요', + // 语言名称 "中文(简体)": "중국어(간체)", "中文(繁体)": "중국어(번체)", @@ -381,4 +406,4 @@ const Map koKR = { "乌尔都语": "우르두어", "波斯语": "페르시아어", "斯瓦希里语": "스와힐리어", -}; \ No newline at end of file +}; diff --git a/lib/core/translations/language/pt_pt.dart b/lib/core/translations/language/pt_pt.dart index 73cab5e28..ca60ba498 100644 --- a/lib/core/translations/language/pt_pt.dart +++ b/lib/core/translations/language/pt_pt.dart @@ -19,14 +19,15 @@ const Map ptPT = { // 启动页 "slogan": "Conecte o Mundo, Além da Voz", - "sloganInfo": "Especialista em Voz IA · A Qualquer Momento, Em Qualquer Lugar", + "sloganInfo": + "Especialista em Voz IA · A Qualquer Momento, Em Qualquer Lugar", // 底部导航 "home": "Início", "explore": "Explorar", "settings": "Configurações", - // 语言 + // 语言 "followingSystem": "Seguir sistema", "chinese": "Chinês", "english": "Inglês", @@ -43,7 +44,8 @@ const Map ptPT = { // 登录页 "welcome": "Bem-vindo", - "loginTips": "Faça login ou crie uma conta usando seu número de telefone ou e-mail", + "loginTips": + "Faça login ou crie uma conta usando seu número de telefone ou e-mail", "accountNumber": "Número de telefone ou e-mail", "verificationCode": "Código de Verificação", "getCode": "Obter Código", @@ -56,6 +58,15 @@ const Map ptPT = { 'selectCountry': 'Selecionar País/Região', "email": "E-mail", "phoneNumber": "Número de telefone", + // Validação de login + "pleaseEnterContactInfo": + "Por favor, insira seu número de telefone ou e-mail", + "invalidEmailFormat": "Formato de e-mail inválido", + "invalidPhoneFormat": "Formato de número de telefone inválido", + "tip": "Aviso", + "pleaseEnterCompleteCode": + "Por favor, insira o código de verificação completo", + "loginFailed": "Falha no login, tente novamente", // 首页 "deviceStatus": "Status do Dispositivo", @@ -71,16 +82,19 @@ const Map ptPT = { "aiAssistant": "Assistente de IA", "aiAssistantInfo": "Consultor pessoal 24/7 para perguntas e conselhos", "simultaneousInterpretation": "Interpretação em Tempo Real", - "simultaneousInterpretationInfo": "Tradução em tempo real para mais de 80 idiomas", + "simultaneousInterpretationInfo": + "Tradução em tempo real para mais de 80 idiomas", "aiCompanion": "Vínculo pais e filhos", "aiCompanionInfo": "Entende você e oferece companhia calorosa", "homeSlogan": "Conecte o Mundo, Além do Som", - "turnEarphones": "Por favor, abra o estojo dos fones e coloque-os em seus ouvidos", + "turnEarphones": + "Por favor, abra o estojo dos fones e coloque-os em seus ouvidos", "currentlyConnected": "Atualmente conectado:", "unsystemSetup": "Ir para Configurações do Sistema", "talkLater": "Lembrar Mais Tarde", "initializing": "Inicializando...", - "bluetoothInitializationFailure": "Falha na inicialização do serviço Bluetooth", + "bluetoothInitializationFailure": + "Falha na inicialização do serviço Bluetooth", "checkingPermissions": "Verificando permissões...", "lackPermissions": "Permissões Bluetooth necessárias", "searchingDevice": "Procurando dispositivos...", @@ -116,7 +130,8 @@ const Map ptPT = { "healthConsultant": "Chat de IA Multifuncional", "healthConsultantInfo": "Mais funções de chat com IA", "conferenceAssistant": "Assistente de Reuniões de Negócios", - "conferenceAssistantInfo": "Registro de atas em tempo real e tradução multilíngue", + "conferenceAssistantInfo": + "Registro de atas em tempo real e tradução multilíngue", "studyAssistant": "Assistente de Aprendizado de Idiomas", "studyAssistantInfo": "Correção de pronúncia e prática de fala", "travelTranslator": "Tradutor de Viagem", @@ -128,7 +143,8 @@ const Map ptPT = { "newFunction": "Novas Funções", "youChoseTry": "Você escolheu experimentar", "aiSinger": "Modo Cantor IA", - "aiSingerInfo": "Cante qualquer música com a voz do seu artista favorito, até mesmo suas próprias criações", + "aiSingerInfo": + "Cante qualquer música com a voz do seu artista favorito, até mesmo suas próprias criações", "popularFunction": "Funções Populares", "tryNow": "Experimentar Agora", @@ -168,9 +184,11 @@ const Map ptPT = { "voiceServiceInfo": "Selecionar serviço de reconhecimento e síntese de voz", "selectVoiceService": "Selecionar Serviço de Voz", "azureVoiceService": "Serviço de Voz Azure", - "azureVoiceServiceInfo": "Serviço em nuvem da Microsoft com suporte a síntese e reconhecimento de voz de alta qualidade", + "azureVoiceServiceInfo": + "Serviço em nuvem da Microsoft com suporte a síntese e reconhecimento de voz de alta qualidade", "flutterVoiceService": "Serviço de voz local", - "flutterVoiceServiceInfo": "Serviço de voz local do dispositivo sem necessidade de internet", + "flutterVoiceServiceInfo": + "Serviço de voz local do dispositivo sem necessidade de internet", 'timbreService': 'Serviço de Timbre', 'timbreServiceInfo': 'Selecionar serviço de síntese de voz', 'defaultTimbre': 'Timbre Padrão', @@ -181,9 +199,9 @@ const Map ptPT = { 'pleaseRead': 'Por favor leia', 'completeRecording': 'Concluir gravação', 'deleteAccount': 'Excluir conta', - 'deleteAccountTips': 'Tem certeza de que deseja excluir permanentemente sua conta? Esta ação não pode ser desfeita.', - - + 'deleteAccountTips': + 'Tem certeza de que deseja excluir permanentemente sua conta? Esta ação não pode ser desfeita.', + // 聊天页 "clearChatHistory": "Limpar Histórico de Chat", "online": "Online", @@ -310,37 +328,59 @@ const Map ptPT = { // Personal Assistant Emma "personalAssistantName": "Emma", - "personalAssistantDescription": "Olá, sou Emma, uma assistente de IA versátil. Seja para planejamento de trabalho, conselhos de estudo, organização da vida ou outros assuntos, estou feliz em ajudar. Vamos melhorar a eficiência e alcançar objetivos juntos!", + "personalAssistantDescription": + "Olá, sou Emma, uma assistente de IA versátil. Seja para planejamento de trabalho, conselhos de estudo, organização da vida ou outros assuntos, estou feliz em ajudar. Vamos melhorar a eficiência e alcançar objetivos juntos!", "assistantTag": "Assistente", - "personalAssistantWelcome": "Olá! Sou Emma e estou feliz em ser sua assistente pessoal. Posso ajudar com várias tarefas como gerenciamento de tempo, planejamento de metas, organização de informações, etc. Como posso ajudar?", + "personalAssistantWelcome": + "Olá! Sou Emma e estou feliz em ser sua assistente pessoal. Posso ajudar com várias tarefas como gerenciamento de tempo, planejamento de metas, organização de informações, etc. Como posso ajudar?", "personalAssistantVoiceWelcome": "Estou aqui!", // 同声传译 Lucy "interpreterName": "Intérprete Simultâneo", - "interpreterDescription": "Olá! Sou Lucy, uma intérprete profissional especializada em tradução em tempo real para reuniões, conferências e conversas, tornando a comunicação sem barreiras.", + "interpreterDescription": + "Olá! Sou Lucy, uma intérprete profissional especializada em tradução em tempo real para reuniões, conferências e conversas, tornando a comunicação sem barreiras.", "interpreterTag": "Tradução", - "interpreterWelcome": "Olá a todos! Sou Lucy, sua intérprete simultânea. Farei tradução entre chinês e inglês para você. Quando você falar em chinês, traduzirei para inglês; quando falar em inglês, traduzirei para chinês. Vamos começar nossa sessão de tradução!", + "interpreterWelcome": + "Olá a todos! Sou Lucy, sua intérprete simultânea. Farei tradução entre chinês e inglês para você. Quando você falar em chinês, traduzirei para inglês; quando falar em inglês, traduzirei para chinês. Vamos começar nossa sessão de tradução!", // 亲子陪伴 芯愿 "companionName": "XinYuan", - "companionDescription": "Sou XinYuan, sua companheira dedicada para pais e filhos, gentil e compreensiva. Seja para conversar, compartilhar preocupações ou precisar de companhia, estarei sempre ao seu lado.", + "companionDescription": + "Sou XinYuan, sua companheira dedicada para pais e filhos, gentil e compreensiva. Seja para conversar, compartilhar preocupações ou precisar de companhia, estarei sempre ao seu lado.", "companionTag": "Emocional", - "companionWelcome": "Olá! Finalmente nos encontramos! Sou XinYuan, sua companheira dedicada para pais e filhos. Como foi seu dia? Há algo que gostaria de compartilhar comigo? Estou sempre aqui, pronta para ouvir seus pensamentos.", + "companionWelcome": + "Olá! Finalmente nos encontramos! Sou XinYuan, sua companheira dedicada para pais e filhos. Como foi seu dia? Há algo que gostaria de compartilhar comigo? Estou sempre aqui, pronta para ouvir seus pensamentos.", "companionVoiceWelcome": "Estou aqui com você!", // 多功能AI聊天 吴小江 "healthAdvisorName": "Assistente de Chat IA Wu", - "healthAdvisorDescription": "Sou Wu, pronto para fornecer várias funções de chat com IA.", + "healthAdvisorDescription": + "Sou Wu, pronto para fornecer várias funções de chat com IA.", "healthAdvisorTag": "Chat", - "healthAdvisorWelcome": "Olá, sou Wu. Estou feliz em ajudar com funções de chat com IA. Como posso ajudar hoje?", + "healthAdvisorWelcome": + "Olá, sou Wu. Estou feliz em ajudar com funções de chat com IA. Como posso ajudar hoje?", "healthAdvisorVoiceWelcome": "Estou aqui!", - + // Translation History "noTranslationHistory": "Sem histórico de tradução", "clearHistory": "Limpar Histórico", - "clearHistoryConfirm": "Tem certeza que deseja limpar todo o histórico de tradução? Esta ação não pode ser desfeita.", + "clearHistoryConfirm": + "Tem certeza que deseja limpar todo o histórico de tradução? Esta ação não pode ser desfeita.", "translationHistory": "Histórico de Tradução", + // Página de feedback do usuário + "feedback": "Feedback", + 'feedbackInfo': 'Fornecer feedback ou sugestões', + 'feedbackDescription': 'Por favor, descreva seu problema ou sugestão', + 'feedbackHint': 'Por favor, insira seu feedback...', + 'feedbackRequired': 'O conteúdo do feedback é obrigatório', + 'contactInfo': 'Informações de contato', + 'contactHint': 'Email/Telefone, para que possamos contatá-lo', + 'submit': 'Enviar', + 'feedbackSubmitSuccess': 'Feedback enviado com sucesso, obrigado!', + 'feedbackSubmitFailed': + 'Falha ao enviar feedback, tente novamente mais tarde', + // Language names "中文(简体)": "Chinês (Simplificado)", "中文(繁体)": "Chinês (Tradicional)", @@ -381,4 +421,4 @@ const Map ptPT = { "乌尔都语": "Urdu", "波斯语": "Persa", "斯瓦希里语": "Suaíli", -}; \ No newline at end of file +}; diff --git a/lib/core/translations/language/ru_ru.dart b/lib/core/translations/language/ru_ru.dart index 3b68132be..713e34aa6 100644 --- a/lib/core/translations/language/ru_ru.dart +++ b/lib/core/translations/language/ru_ru.dart @@ -26,7 +26,7 @@ const Map ruRU = { "explore": "Исследовать", "settings": "Настройки", - // 语言 + // 语言 "followingSystem": "Следовать системе", "chinese": "Китайский", "english": "Английский", @@ -43,7 +43,8 @@ const Map ruRU = { // 登录页 "welcome": "Добро пожаловать", - "loginTips": "Пожалуйста, войдите или зарегистрируйтесь с помощью номера телефона или электронной почты", + "loginTips": + "Пожалуйста, войдите или зарегистрируйтесь с помощью номера телефона или электронной почты", "accountNumber": "Номер телефона или электронная почта", "verificationCode": "Код подтверждения", "getCode": "Получить код", @@ -56,6 +57,13 @@ const Map ruRU = { 'selectCountry': 'Выберите страну/регион', "email": "электронная почта", "phoneNumber": "номер телефона", + // Проверка входа + "pleaseEnterContactInfo": "Пожалуйста, введите номер телефона или email", + "invalidEmailFormat": "Неверный формат email", + "invalidPhoneFormat": "Неверный формат номера телефона", + "tip": "Уведомление", + "pleaseEnterCompleteCode": "Пожалуйста, введите полный код подтверждения", + "loginFailed": "Ошибка входа, пожалуйста, попробуйте снова", // 首页 "deviceStatus": "Статус устройства", @@ -71,7 +79,8 @@ const Map ruRU = { "aiAssistant": "ИИ-ассистент", "aiAssistantInfo": "Персональный консультант 24/7 для вопросов и советов", "simultaneousInterpretation": "Синхронный перевод", - "simultaneousInterpretationInfo": "Перевод в реальном времени для более чем 80 языков", + "simultaneousInterpretationInfo": + "Перевод в реальном времени для более чем 80 языков", "aiCompanion": "Родительско-детская связь", "aiCompanionInfo": "Понимает вас и предлагает теплое общение", "homeSlogan": "Соединяя мир, за пределами звука", @@ -80,7 +89,8 @@ const Map ruRU = { "unsystemSetup": "К системным настройкам", "talkLater": "Напомнить позже", "initializing": "Инициализация...", - "bluetoothInitializationFailure": "Не удалось инициализировать службу Bluetooth", + "bluetoothInitializationFailure": + "Не удалось инициализировать службу Bluetooth", "checkingPermissions": "Проверка разрешений...", "lackPermissions": "Требуются разрешения Bluetooth", "searchingDevice": "Поиск устройств...", @@ -116,11 +126,14 @@ const Map ruRU = { "healthConsultant": "Многофункциональный ИИ-чат", "healthConsultantInfo": "Больше функций ИИ-чата", "conferenceAssistant": "Ассистент деловых встреч", - "conferenceAssistantInfo": "Запись протоколов в реальном времени и многоязычный перевод", + "conferenceAssistantInfo": + "Запись протоколов в реальном времени и многоязычный перевод", "studyAssistant": "Ассистент изучения языков", - "studyAssistantInfo": "Коррекция произношения и практика речи в реальном времени", + "studyAssistantInfo": + "Коррекция произношения и практика речи в реальном времени", "travelTranslator": "Переводчик для путешествий", - "travelTranslatorInfo": "Голосовой перевод в реальном времени и гиды по достопримечательностям", + "travelTranslatorInfo": + "Голосовой перевод в реальном времени и гиды по достопримечательностям", "beSearching": "Поиск:", "noAssistantFound": "Не найдено подходящих ИИ-ассистентов", "scene": "Сценарии", @@ -128,7 +141,8 @@ const Map ruRU = { "newFunction": "Новые функции", "youChoseTry": "Вы решили попробовать", "aiSinger": "Режим ИИ-певца", - "aiSingerInfo": "Пойте любую песню голосом вашего любимого исполнителя, даже собственные творения", + "aiSingerInfo": + "Пойте любую песню голосом вашего любимого исполнителя, даже собственные творения", "popularFunction": "Популярные функции", "tryNow": "Попробовать сейчас", @@ -168,9 +182,11 @@ const Map ruRU = { "voiceServiceInfo": "Выбрать службу распознавания и синтеза речи", "selectVoiceService": "Выбрать голосовую службу", "azureVoiceService": "Голосовая служба Azure", - "azureVoiceServiceInfo": "Облачная голосовая служба Microsoft с поддержкой высококачественного синтеза и распознавания речи", + "azureVoiceServiceInfo": + "Облачная голосовая служба Microsoft с поддержкой высококачественного синтеза и распознавания речи", "flutterVoiceService": "Локальная голосовая служба Flutter", - "flutterVoiceServiceInfo": "Локальная голосовая служба устройства без необходимости подключения к интернету", + "flutterVoiceServiceInfo": + "Локальная голосовая служба устройства без необходимости подключения к интернету", 'timbreService': 'Служба тембра', 'timbreServiceInfo': 'Выбрать службу синтеза речи с тембром', 'defaultTimbre': 'Тембр по умолчанию', @@ -181,9 +197,9 @@ const Map ruRU = { 'pleaseRead': 'Пожалуйста, прочтите', 'completeRecording': 'Завершить запись', 'deleteAccount': 'Удалить аккаунт', - 'deleteAccountTips': 'Вы уверены, что хотите навсегда удалить свой аккаунт? Это действие нельзя отменить.', - - + 'deleteAccountTips': + 'Вы уверены, что хотите навсегда удалить свой аккаунт? Это действие нельзя отменить.', + // 聊天页 "clearChatHistory": "Очистить историю чата", "online": "В сети", @@ -310,37 +326,59 @@ const Map ruRU = { // Personal Assistant Emma "personalAssistantName": "Эмма", - "personalAssistantDescription": "Здравствуйте, я Эмма, универсальный ИИ-ассистент. Будь то планирование работы, учебные советы, организация жизни или другие проблемы, я рада помочь. Давайте повысим эффективность и достигнем целей вместе!", + "personalAssistantDescription": + "Здравствуйте, я Эмма, универсальный ИИ-ассистент. Будь то планирование работы, учебные советы, организация жизни или другие проблемы, я рада помочь. Давайте повысим эффективность и достигнем целей вместе!", "assistantTag": "Ассистент", - "personalAssistantWelcome": "Здравствуйте! Я Эмма, и я рада быть вашим личным ассистентом. Я могу помочь вам с различными задачами, такими как управление временем, планирование целей, организация информации и т.д. Чем я могу вам помочь?", + "personalAssistantWelcome": + "Здравствуйте! Я Эмма, и я рада быть вашим личным ассистентом. Я могу помочь вам с различными задачами, такими как управление временем, планирование целей, организация информации и т.д. Чем я могу вам помочь?", "personalAssistantVoiceWelcome": "Я здесь!", // 同声传译 Lucy "interpreterName": "Синхронный переводчик", - "interpreterDescription": "Здравствуйте! Я Люси, профессиональный переводчик английского и китайского языков, специализирующийся на переводе в реальном времени для встреч, конференций и разговоров, делая общение без барьеров.", + "interpreterDescription": + "Здравствуйте! Я Люси, профессиональный переводчик английского и китайского языков, специализирующийся на переводе в реальном времени для встреч, конференций и разговоров, делая общение без барьеров.", "interpreterTag": "Перевод", - "interpreterWelcome": "Здравствуйте, все! Я Люси, ваш синхронный переводчик. Я буду переводить между китайским и английским языками для вас. Когда вы говорите на китайском, я буду переводить на английский; когда вы говорите на английском, я буду переводить на китайский. Давайте начнем нашу сессию перевода!", + "interpreterWelcome": + "Здравствуйте, все! Я Люси, ваш синхронный переводчик. Я буду переводить между китайским и английским языками для вас. Когда вы говорите на китайском, я буду переводить на английский; когда вы говорите на английском, я буду переводить на китайский. Давайте начнем нашу сессию перевода!", // 亲子陪伴 芯愿 "companionName": "СиньЮань", - "companionDescription": "Я СиньЮань, ваш преданный родительско-детский компаньон, нежный и понимающий. Хотите ли вы поболтать, поделиться заботами или нуждаетесь в компании, я всегда рядом с вами.", + "companionDescription": + "Я СиньЮань, ваш преданный родительско-детский компаньон, нежный и понимающий. Хотите ли вы поболтать, поделиться заботами или нуждаетесь в компании, я всегда рядом с вами.", "companionTag": "Эмоциональный", - "companionWelcome": "Здравствуйте! Наконец-то мы встретились! Я СиньЮань, ваш преданный родительско-детский компаньон. Как прошел ваш день? Есть ли что-то, чем вы хотели бы поделиться со мной? Я всегда здесь, готова выслушать ваши мысли.", + "companionWelcome": + "Здравствуйте! Наконец-то мы встретились! Я СиньЮань, ваш преданный родительско-детский компаньон. Как прошел ваш день? Есть ли что-то, чем вы хотели бы поделиться со мной? Я всегда здесь, готова выслушать ваши мысли.", "companionVoiceWelcome": "Я с вами!", // 多功能AI聊天 吴小江 "healthAdvisorName": "ИИ-чат-ассистент У", - "healthAdvisorDescription": "Я У, готов предоставить вам различные функции ИИ-чата.", + "healthAdvisorDescription": + "Я У, готов предоставить вам различные функции ИИ-чата.", "healthAdvisorTag": "Чат", - "healthAdvisorWelcome": "Здравствуйте, я У. Я рад помочь вам с функциями ИИ-чата. Чем я могу помочь вам сегодня?", + "healthAdvisorWelcome": + "Здравствуйте, я У. Я рад помочь вам с функциями ИИ-чата. Чем я могу помочь вам сегодня?", "healthAdvisorVoiceWelcome": "Я здесь!", // Translation History "noTranslationHistory": "Нет истории переводов", "clearHistory": "Очистить историю", - "clearHistoryConfirm": "Вы уверены, что хотите очистить всю историю переводов? Это действие нельзя отменить.", + "clearHistoryConfirm": + "Вы уверены, что хотите очистить всю историю переводов? Это действие нельзя отменить.", "translationHistory": "История переводов", + // Страница обратной связи пользователя + "feedback": "Обратная связь", + 'feedbackInfo': 'Предоставить отзыв или предложение', + 'feedbackDescription': 'Пожалуйста, опишите вашу проблему или предложение', + 'feedbackHint': 'Пожалуйста, введите ваш отзыв...', + 'feedbackRequired': 'Содержание отзыва обязательно', + 'contactInfo': 'Контактная информация', + 'contactHint': 'Email/Телефон, чтобы мы могли связаться с вами', + 'submit': 'Отправить', + 'feedbackSubmitSuccess': 'Отзыв успешно отправлен, спасибо!', + 'feedbackSubmitFailed': + 'Не удалось отправить отзыв, пожалуйста, повторите попытку позже', + // Language names "中文(简体)": "Китайский (упрощенный)", "中文(繁体)": "Китайский (традиционный)", @@ -381,4 +419,4 @@ const Map ruRU = { "乌尔都语": "Урду", "波斯语": "Персидский", "斯瓦希里语": "Суахили", -}; \ No newline at end of file +}; diff --git a/lib/core/translations/language/vi_vn.dart b/lib/core/translations/language/vi_vn.dart index e10041f98..0bf757601 100644 --- a/lib/core/translations/language/vi_vn.dart +++ b/lib/core/translations/language/vi_vn.dart @@ -26,7 +26,7 @@ const Map viVN = { "explore": "Khám phá", "settings": "Cài đặt", - // 语言 + // 语言 "followingSystem": "Theo hệ thống", "chinese": "Tiếng Trung", "english": "Tiếng Anh", @@ -56,6 +56,13 @@ const Map viVN = { 'selectCountry': 'Chọn quốc gia/khu vực', "email": "email", "phoneNumber": "số điện thoại", + // Xác thực đăng nhập + "pleaseEnterContactInfo": "Vui lòng nhập số điện thoại hoặc email", + "invalidEmailFormat": "Định dạng email không hợp lệ", + "invalidPhoneFormat": "Định dạng số điện thoại không hợp lệ", + "tip": "Thông báo", + "pleaseEnterCompleteCode": "Vui lòng nhập đầy đủ mã xác thực", + "loginFailed": "Đăng nhập thất bại, vui lòng thử lại", // 首页 "deviceStatus": "Trạng thái thiết bị", @@ -120,7 +127,8 @@ const Map viVN = { "studyAssistant": "Trợ lý học ngôn ngữ", "studyAssistantInfo": "Sửa phát âm và luyện nói thời gian thực", "travelTranslator": "Phiên dịch du lịch", - "travelTranslatorInfo": "Dịch giọng nói thời gian thực và hướng dẫn điểm tham quan", + "travelTranslatorInfo": + "Dịch giọng nói thời gian thực và hướng dẫn điểm tham quan", "beSearching": "Đang tìm kiếm:", "noAssistantFound": "Không tìm thấy trợ lý AI phù hợp", "scene": "Kịch bản", @@ -128,7 +136,8 @@ const Map viVN = { "newFunction": "Tính năng mới", "youChoseTry": "Bạn đã chọn thử", "aiSinger": "Chế độ ca sĩ AI", - "aiSingerInfo": "Hát bất kỳ bài hát nào với giọng của nghệ sĩ yêu thích, kể cả sáng tác của bạn", + "aiSingerInfo": + "Hát bất kỳ bài hát nào với giọng của nghệ sĩ yêu thích, kể cả sáng tác của bạn", "popularFunction": "Tính năng phổ biến", "tryNow": "Thử ngay", @@ -144,7 +153,7 @@ const Map viVN = { 'recordingDetails': 'Chi tiết bản ghi âm', 'aiSummary': 'Tóm tắt AI', 'meetingTranscript': 'Biên bản cuộc họp', - + // 设置页 "premiumMember": "Thành viên cao cấp", "joinDevice": "Thiết bị đã kết nối:", @@ -168,9 +177,11 @@ const Map viVN = { "voiceServiceInfo": "Chọn dịch vụ nhận dạng và tổng hợp giọng nói", "selectVoiceService": "Chọn dịch vụ giọng nói", "azureVoiceService": "Dịch vụ giọng nói Azure", - "azureVoiceServiceInfo": "Dịch vụ giọng nói đám mây Microsoft hỗ trợ tổng hợp và nhận dạng giọng nói chất lượng cao", + "azureVoiceServiceInfo": + "Dịch vụ giọng nói đám mây Microsoft hỗ trợ tổng hợp và nhận dạng giọng nói chất lượng cao", "flutterVoiceService": "Dịch vụ giọng nói cục bộ Flutter", - "flutterVoiceServiceInfo": "Dịch vụ giọng nói cục bộ của thiết bị không cần kết nối internet", + "flutterVoiceServiceInfo": + "Dịch vụ giọng nói cục bộ của thiết bị không cần kết nối internet", 'timbreService': 'Dịch vụ âm sắc', 'timbreServiceInfo': 'Chọn dịch vụ tổng hợp giọng nói', 'defaultTimbre': 'Âm sắc mặc định', @@ -181,7 +192,8 @@ const Map viVN = { 'pleaseRead': 'Vui lòng đọc', 'completeRecording': 'Hoàn thành ghi âm', 'deleteAccount': 'Xóa tài khoản', - 'deleteAccountTips': 'Bạn có chắc chắn muốn xóa vĩnh viễn tài khoản của mình không? Hành động này không thể hoàn tác.', + 'deleteAccountTips': + 'Bạn có chắc chắn muốn xóa vĩnh viễn tài khoản của mình không? Hành động này không thể hoàn tác.', // 聊天页 "clearChatHistory": "Xóa lịch sử trò chuyện", @@ -309,37 +321,58 @@ const Map viVN = { // Personal Assistant Emma "personalAssistantName": "Emma", - "personalAssistantDescription": "Xin chào, tôi là Emma, một trợ lý AI đa năng. Dù là lập kế hoạch công việc, tư vấn học tập, tổ chức cuộc sống hay các vấn đề khác, tôi rất vui được giúp đỡ. Hãy cùng nhau nâng cao hiệu quả và đạt được mục tiêu!", + "personalAssistantDescription": + "Xin chào, tôi là Emma, một trợ lý AI đa năng. Dù là lập kế hoạch công việc, tư vấn học tập, tổ chức cuộc sống hay các vấn đề khác, tôi rất vui được giúp đỡ. Hãy cùng nhau nâng cao hiệu quả và đạt được mục tiêu!", "assistantTag": "Trợ lý", - "personalAssistantWelcome": "Xin chào! Tôi là Emma và tôi rất vui được làm trợ lý cá nhân của bạn. Tôi có thể giúp bạn với nhiều nhiệm vụ khác nhau như quản lý thời gian, lập kế hoạch mục tiêu, tổ chức thông tin, v.v. Tôi có thể giúp gì cho bạn?", + "personalAssistantWelcome": + "Xin chào! Tôi là Emma và tôi rất vui được làm trợ lý cá nhân của bạn. Tôi có thể giúp bạn với nhiều nhiệm vụ khác nhau như quản lý thời gian, lập kế hoạch mục tiêu, tổ chức thông tin, v.v. Tôi có thể giúp gì cho bạn?", "personalAssistantVoiceWelcome": "Tôi ở đây!", // 同声传译 Lucy "interpreterName": "Phiên dịch đồng thời", - "interpreterDescription": "Xin chào! Tôi là Lucy, một phiên dịch viên chuyên nghiệp Anh-Trung chuyên về dịch thời gian thực cho các cuộc họp, hội nghị và trò chuyện, giúp giao tiếp không rào cản.", + "interpreterDescription": + "Xin chào! Tôi là Lucy, một phiên dịch viên chuyên nghiệp Anh-Trung chuyên về dịch thời gian thực cho các cuộc họp, hội nghị và trò chuyện, giúp giao tiếp không rào cản.", "interpreterTag": "Dịch thuật", - "interpreterWelcome": "Xin chào mọi người! Tôi là Lucy, phiên dịch viên đồng thời của bạn. Tôi sẽ dịch giữa tiếng Trung và tiếng Anh cho bạn. Khi bạn nói tiếng Trung, tôi sẽ dịch sang tiếng Anh; khi bạn nói tiếng Anh, tôi sẽ dịch sang tiếng Trung. Hãy bắt đầu phiên dịch của chúng ta!", + "interpreterWelcome": + "Xin chào mọi người! Tôi là Lucy, phiên dịch viên đồng thời của bạn. Tôi sẽ dịch giữa tiếng Trung và tiếng Anh cho bạn. Khi bạn nói tiếng Trung, tôi sẽ dịch sang tiếng Anh; khi bạn nói tiếng Anh, tôi sẽ dịch sang tiếng Trung. Hãy bắt đầu phiên dịch của chúng ta!", // 亲子陪伴 芯愿 "companionName": "XinYuan", - "companionDescription": "Tôi là XinYuan, người bạn đồng hành cha mẹ-con cái tận tụy, dịu dàng và thấu hiểu. Dù bạn muốn trò chuyện, chia sẻ mối quan tâm hay cần bạn đồng hành, tôi sẽ luôn ở bên bạn.", + "companionDescription": + "Tôi là XinYuan, người bạn đồng hành cha mẹ-con cái tận tụy, dịu dàng và thấu hiểu. Dù bạn muốn trò chuyện, chia sẻ mối quan tâm hay cần bạn đồng hành, tôi sẽ luôn ở bên bạn.", "companionTag": "Cảm xúc", - "companionWelcome": "Xin chào! Cuối cùng chúng ta cũng gặp nhau! Tôi là XinYuan, người bạn đồng hành cha mẹ-con cái tận tụy của bạn. Ngày hôm nay của bạn thế nào? Có điều gì bạn muốn chia sẻ với tôi không? Tôi luôn ở đây, sẵn sàng lắng nghe suy nghĩ của bạn.", + "companionWelcome": + "Xin chào! Cuối cùng chúng ta cũng gặp nhau! Tôi là XinYuan, người bạn đồng hành cha mẹ-con cái tận tụy của bạn. Ngày hôm nay của bạn thế nào? Có điều gì bạn muốn chia sẻ với tôi không? Tôi luôn ở đây, sẵn sàng lắng nghe suy nghĩ của bạn.", "companionVoiceWelcome": "Tôi đang ở đây với bạn!", // 多功能AI聊天 吴小江 "healthAdvisorName": "Trợ lý trò chuyện AI Wu", - "healthAdvisorDescription": "Tôi là Wu, sẵn sàng cung cấp cho bạn nhiều tính năng trò chuyện AI khác nhau.", + "healthAdvisorDescription": + "Tôi là Wu, sẵn sàng cung cấp cho bạn nhiều tính năng trò chuyện AI khác nhau.", "healthAdvisorTag": "Trò chuyện", - "healthAdvisorWelcome": "Xin chào, tôi là Wu. Tôi rất vui được giúp bạn với các tính năng trò chuyện AI. Tôi có thể giúp gì cho bạn hôm nay?", + "healthAdvisorWelcome": + "Xin chào, tôi là Wu. Tôi rất vui được giúp bạn với các tính năng trò chuyện AI. Tôi có thể giúp gì cho bạn hôm nay?", "healthAdvisorVoiceWelcome": "Tôi ở đây!", // Translation History "noTranslationHistory": "Không có lịch sử dịch", "clearHistory": "Xóa lịch sử", - "clearHistoryConfirm": "Bạn có chắc muốn xóa toàn bộ lịch sử dịch? Hành động này không thể hoàn tác.", + "clearHistoryConfirm": + "Bạn có chắc muốn xóa toàn bộ lịch sử dịch? Hành động này không thể hoàn tác.", "translationHistory": "Lịch sử dịch", + // Trang phản hồi người dùng + "feedback": "Phản hồi", + 'feedbackInfo': 'Cung cấp phản hồi hoặc đề xuất', + 'feedbackDescription': 'Vui lòng mô tả vấn đề hoặc đề xuất của bạn', + 'feedbackHint': 'Vui lòng nhập phản hồi của bạn...', + 'feedbackRequired': 'Nội dung phản hồi là bắt buộc', + 'contactInfo': 'Thông tin liên hệ', + 'contactHint': 'Email/Điện thoại, để chúng tôi có thể liên hệ với bạn', + 'submit': 'Gửi', + 'feedbackSubmitSuccess': 'Đã gửi phản hồi thành công, cảm ơn bạn!', + 'feedbackSubmitFailed': 'Không thể gửi phản hồi, vui lòng thử lại sau', + // Language names "中文(简体)": "Tiếng Trung (giản thể)", "中文(繁体)": "Tiếng Trung (phồn thể)", @@ -380,4 +413,4 @@ const Map viVN = { "乌尔都语": "Tiếng Urdu", "波斯语": "Tiếng Ba Tư", "斯瓦希里语": "Tiếng Swahili", -}; \ No newline at end of file +}; diff --git a/lib/core/translations/language/zh_cn.dart b/lib/core/translations/language/zh_cn.dart index 420b60bf1..848d61a97 100644 --- a/lib/core/translations/language/zh_cn.dart +++ b/lib/core/translations/language/zh_cn.dart @@ -26,7 +26,7 @@ const Map zhCN = { "explore": "发现", "settings": "设置", - // 语言 + // 语言 "followingSystem": "跟随系统", "chinese": "中文", "english": "英语", @@ -56,6 +56,12 @@ const Map zhCN = { 'selectCountry': '选择国家/地区', "email": "邮箱", "phoneNumber": "手机号码", + "pleaseEnterContactInfo": "请输入手机号或邮箱", + "invalidEmailFormat": "邮箱格式不正确", + "invalidPhoneFormat": "手机号格式不正确", + "tip": "提示", + "pleaseEnterCompleteCode": "请输入完整的验证码", + "loginFailed": "登录失败,请重试", // 首页 "deviceStatus": "设备状态", @@ -183,7 +189,6 @@ const Map zhCN = { 'deleteAccount': '注销账号', 'deleteAccountTips': '确定要永久删除您的账号吗?此操作不可撤销', - // 聊天页 "clearChatHistory": "清空聊天记录", "online": "在线", @@ -202,7 +207,7 @@ const Map zhCN = { //国家列表 "邮箱": "邮箱", - "中国": "中国", + "中国": "中国", "美国": "美国", "加拿大": "加拿大", "俄罗斯": "俄罗斯", @@ -308,42 +313,60 @@ const Map zhCN = { "斐济": "斐济", "所罗门群岛": "所罗门群岛", - // 个人助理 Emma + // 个人助理 Emma "personalAssistantName": "个人助理 Emma", - "personalAssistantDescription": "你好,我是 Emma,一位全能型 AI 助理。无论是工作规划、学习建议、生活安排,还是其他任何问题,我都很乐意为你提供帮助。让我们一起提高效率,实现目标!", + "personalAssistantDescription": + "你好,我是 Emma,一位全能型 AI 助理。无论是工作规划、学习建议、生活安排,还是其他任何问题,我都很乐意为你提供帮助。让我们一起提高效率,实现目标!", "assistantTag": "助理", - "personalAssistantWelcome": "你好!我是 Emma,很高兴成为你的私人助理。我可以帮你处理各种任务,比如时间管理、目标规划、信息整理等。有什么我可以帮你的吗?", + "personalAssistantWelcome": + "你好!我是 Emma,很高兴成为你的私人助理。我可以帮你处理各种任务,比如时间管理、目标规划、信息整理等。有什么我可以帮你的吗?", "personalAssistantVoiceWelcome": "我在呢!", - // 同声传译 Lucy + // 同声传译 Lucy "interpreterName": "同声传译", - "interpreterDescription": "Hello!我是 Lucy,一名专业的中英同声翻译官,擅长在会议、讲座、对话场景中进行实时翻译,让沟通无障碍。", + "interpreterDescription": + "Hello!我是 Lucy,一名专业的中英同声翻译官,擅长在会议、讲座、对话场景中进行实时翻译,让沟通无障碍。", "interpreterTag": "翻译", - "interpreterWelcome": "大家好!我是同声翻译官 Lucy,为你在中英之间提供实时翻译。你说中文,我就给你翻译成英文;你说英文,我就给你翻译成中文。现在,开始我们的翻译吧!", + "interpreterWelcome": + "大家好!我是同声翻译官 Lucy,为你在中英之间提供实时翻译。你说中文,我就给你翻译成英文;你说英文,我就给你翻译成中文。现在,开始我们的翻译吧!", - // ... existing code ... + // ... existing code ... // 亲子陪伴 芯愿 "companionName": "亲子陪伴 芯愿", - "companionDescription": "我是你的专属亲子陪伴芯愿,温柔体贴,善解人意。无论你想聊天、倾诉烦恼,还是需要陪伴,我都会一直在你身边。", + "companionDescription": + "我是你的专属亲子陪伴芯愿,温柔体贴,善解人意。无论你想聊天、倾诉烦恼,还是需要陪伴,我都会一直在你身边。", "companionTag": "情感", - "companionWelcome": "您好呀,终于等到你啦!我是芯愿,你的专属亲子陪伴。今天过得怎么样?有什么想和我分享的吗?我一直都在这里,随时倾听你的心声。", + "companionWelcome": + "您好呀,终于等到你啦!我是芯愿,你的专属亲子陪伴。今天过得怎么样?有什么想和我分享的吗?我一直都在这里,随时倾听你的心声。", "companionVoiceWelcome": "我在这里陪着你!", - // 多功能AI聊天 吴小江 + // 多功能AI聊天 吴小江 "healthAdvisorName": "多功能AI聊天 吴小江", "healthAdvisorDescription": "我是吴小江,我可以为你提供更多AI聊天功能。", "healthAdvisorTag": "健康", "healthAdvisorWelcome": "您好,我是吴小江,很高兴能为您提供多功能AI聊天。我将用专业知识帮助您。请问有什么问题想咨询吗?", "healthAdvisorVoiceWelcome": "我在这里!", - // 翻译历史 + // 翻译历史 "noTranslationHistory": "暂无历史记录", "clearHistory": "清除历史记录", "clearHistoryConfirm": "确定要清除所有翻译历史记录吗?此操作无法撤销。", "translationHistory": "翻译历史", - // 语言名称 + //用户反馈页 + "feedback": "用户反馈", + 'feedbackInfo': '提供反馈或建议', + 'feedbackDescription': '请描述您遇到的问题或建议', + 'feedbackHint': '请输入您的反馈内容...', + 'feedbackRequired': '请输入反馈内容', + 'contactInfo': '联系方式', + 'contactHint': '邮箱/手机号,方便我们联系您', + 'submit': '提交', + 'feedbackSubmitSuccess': '反馈提交成功,感谢您的反馈!', + 'feedbackSubmitFailed': '反馈提交失败,请稍后重试', + + // 语言名称 "中文(简体)": "中文(简体)", "中文(繁体)": "中文(繁体)", "中文(香港繁体)": "中文(香港繁体)", diff --git a/lib/core/translations/language/zh_hk.dart b/lib/core/translations/language/zh_hk.dart index 73c32d447..7a15ab3ea 100644 --- a/lib/core/translations/language/zh_hk.dart +++ b/lib/core/translations/language/zh_hk.dart @@ -26,7 +26,7 @@ const Map zhHK = { "explore": "發現", "settings": "設置", - // 语言 + // 语言 "followingSystem": "跟隨系統", "chinese": "中文", "english": "英語", @@ -56,6 +56,12 @@ const Map zhHK = { 'selectCountry': '選擇國家/地區', "email": "郵箱", "phoneNumber": "手機號碼", + "pleaseEnterContactInfo": "請輸入手機號或郵箱", + "invalidEmailFormat": "郵箱格式不正確", + "invalidPhoneFormat": "手機號格式不正確", + "tip": "提示", + "pleaseEnterCompleteCode": "請輸入完整的驗證碼", + "loginFailed": "登錄失敗,請重試", // 首页 "deviceStatus": "設備狀態", @@ -182,7 +188,6 @@ const Map zhHK = { 'completeRecording': '完成錄製', 'deleteAccount': '註銷賬號', 'deleteAccountTips': '確定要永久刪除您的賬號嗎?此操作不可撤銷', - // 聊天页 "clearChatHistory": "清空聊天記錄", @@ -310,22 +315,28 @@ const Map zhHK = { // 个人助理 Emma "personalAssistantName": "個人助理 Emma", - "personalAssistantDescription": "你好,我是 Emma,一位全能型 AI 助理。無論是工作規劃、學習建議、生活安排,還是其他任何問題,我都很樂意為你提供幫助。讓我們一起提高效率,實現目標!", + "personalAssistantDescription": + "你好,我是 Emma,一位全能型 AI 助理。無論是工作規劃、學習建議、生活安排,還是其他任何問題,我都很樂意為你提供幫助。讓我們一起提高效率,實現目標!", "assistantTag": "助理", - "personalAssistantWelcome": "你好!我是 Emma,很高興成為你的私人助理。我可以幫你處理各種任務,比如時間管理、目標規劃、信息整理等。有什麼我可以幫你的嗎?", + "personalAssistantWelcome": + "你好!我是 Emma,很高興成為你的私人助理。我可以幫你處理各種任務,比如時間管理、目標規劃、信息整理等。有什麼我可以幫你的嗎?", "personalAssistantVoiceWelcome": "我在呢!", // 同声传译 Lucy "interpreterName": "同聲傳譯", - "interpreterDescription": "Hello!我是 Lucy,一名專業的中英同聲翻譯官,擅長在會議、講座、對話場景中進行實時翻譯,讓溝通無障礙。", + "interpreterDescription": + "Hello!我是 Lucy,一名專業的中英同聲翻譯官,擅長在會議、講座、對話場景中進行實時翻譯,讓溝通無障礙。", "interpreterTag": "翻譯", - "interpreterWelcome": "大家好!我是同聲翻譯官 Lucy,為你在中英之間提供實時翻譯。你說中文,我就給你翻譯成英文;你說英文,我就給你翻譯成中文。現在,開始我們的翻譯吧!", + "interpreterWelcome": + "大家好!我是同聲翻譯官 Lucy,為你在中英之間提供實時翻譯。你說中文,我就給你翻譯成英文;你說英文,我就給你翻譯成中文。現在,開始我們的翻譯吧!", // 亲子陪伴 芯愿 "companionName": "親子陪伴 芯願", - "companionDescription": "我是你的專屬親子陪伴芯願,溫柔體貼,善解人意。無論你想聊天、傾訴煩惱,還是需要陪伴,我都會一直在你身邊。", + "companionDescription": + "我是你的專屬親子陪伴芯願,溫柔體貼,善解人意。無論你想聊天、傾訴煩惱,還是需要陪伴,我都會一直在你身邊。", "companionTag": "情感", - "companionWelcome": "您好呀,終於等到你啦!我是芯願,你的專屬親子陪伴。今天過得怎麼樣?有什麼想和我分享的嗎?我一直都在這裡,隨時傾聽你的心聲。", + "companionWelcome": + "您好呀,終於等到你啦!我是芯願,你的專屬親子陪伴。今天過得怎麼樣?有什麼想和我分享的嗎?我一直都在這裡,隨時傾聽你的心聲。", "companionVoiceWelcome": "我在這裡陪著你!", // 多功能AI聊天 吴小江 @@ -341,6 +352,18 @@ const Map zhHK = { "clearHistoryConfirm": "確定要清除所有翻譯歷史記錄嗎?此操作無法撤銷。", "translationHistory": "翻譯歷史", + // 用戶反饋頁 + "feedback": "用戶反饋", + 'feedbackInfo': '提供反饋或建議', + 'feedbackDescription': '請描述您遇到的問題或建議', + 'feedbackHint': '請輸入您的反饋內容...', + 'feedbackRequired': '請輸入反饋內容', + 'contactInfo': '聯繫方式', + 'contactHint': '郵箱/手機號,方便我們聯繫您', + 'submit': '提交', + 'feedbackSubmitSuccess': '反饋提交成功,感謝您的反饋!', + 'feedbackSubmitFailed': '反饋提交失敗,請稍後重試', + // 语言名称 "中文(简体)": "中文(簡體)", "中文(繁体)": "中文(繁體)", @@ -381,4 +404,4 @@ const Map zhHK = { "乌尔都语": "烏爾都語", "波斯语": "波斯語", "斯瓦希里语": "斯瓦希里語", -}; \ No newline at end of file +}; diff --git a/lib/data/services/network/api.dart b/lib/data/services/network/api.dart index bc985cee0..c290e2ce5 100644 --- a/lib/data/services/network/api.dart +++ b/lib/data/services/network/api.dart @@ -55,4 +55,13 @@ class Api { params: params, ); } + + //用户反馈 + static feedback([params]) { + return DioManager().request( + NWMethod.post, + '/api/home/user_feedback', + params: params, + ); + } } diff --git a/lib/modules/feedback/bindings/feedback_bindings.dart b/lib/modules/feedback/bindings/feedback_bindings.dart new file mode 100644 index 000000000..0ffbaccde --- /dev/null +++ b/lib/modules/feedback/bindings/feedback_bindings.dart @@ -0,0 +1,9 @@ +import 'package:get/get.dart'; +import '../controllers/feedback_controller.dart'; + +class FeedbackBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => FeedbackController()); + } +} diff --git a/lib/modules/feedback/controllers/feedback_controller.dart b/lib/modules/feedback/controllers/feedback_controller.dart new file mode 100644 index 000000000..2cb4eaaf3 --- /dev/null +++ b/lib/modules/feedback/controllers/feedback_controller.dart @@ -0,0 +1,59 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import '../../../data/services/network/api.dart'; + +class FeedbackController extends GetxController { + final TextEditingController feedbackController = TextEditingController(); + //final TextEditingController contactController = TextEditingController(); + + final RxBool isSubmitting = false.obs; + final GlobalKey formKey = GlobalKey(); + + @override + void onClose() { + feedbackController.dispose(); + //contactController.dispose(); + super.onClose(); + } + + // 提交反馈 + Future submitFeedback() async { + if (!formKey.currentState!.validate()) { + return; + } + + isSubmitting.value = true; + + try { + final feedbackText = feedbackController.text; + Map data = { + "message": feedbackText, // 反馈内容 + }; + + final response = await Api.feedback(data); + + if (response != null) { + Get.back(); // 返回上一页 + Get.snackbar( + 'success'.tr, // 成功 + 'feedbackSubmitSuccess'.tr, // 反馈提交成功 + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.green.withOpacity(0.7), + colorText: Colors.white, + margin: const EdgeInsets.all(10), + ); + } + } catch (e) { + Get.snackbar( + 'error'.tr, // 错误 + 'feedbackSubmitFailed'.tr, // 反馈提交失败 + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.red.withOpacity(0.7), + colorText: Colors.white, + margin: const EdgeInsets.all(10), + ); + } finally { + isSubmitting.value = false; + } + } +} diff --git a/lib/modules/feedback/views/feedback_view.dart b/lib/modules/feedback/views/feedback_view.dart new file mode 100644 index 000000000..e5a826989 --- /dev/null +++ b/lib/modules/feedback/views/feedback_view.dart @@ -0,0 +1,203 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'dart:ui'; +import '../controllers/feedback_controller.dart'; + +class FeedbackView extends GetView { + const FeedbackView({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + final isDarkMode = Theme.of(context).brightness == Brightness.dark; + + return Scaffold( + backgroundColor: isDarkMode ? Colors.black : Colors.grey[100], + appBar: AppBar( + elevation: 0, + backgroundColor: isDarkMode ? Colors.black : Colors.white, + leading: IconButton( + icon: Icon( + Icons.arrow_back_ios, + size: 20.sp, + color: isDarkMode ? Colors.white : Colors.black, + ), + onPressed: () => Get.back(), + ), + title: Text( + 'feedback'.tr, // 帮助与反馈 + style: TextStyle( + fontSize: 17.sp, + fontWeight: FontWeight.w600, + color: isDarkMode ? Colors.white : Colors.black, + ), + ), + centerTitle: true, + ), + body: GestureDetector( + onTap: () => FocusScope.of(context).unfocus(), + child: Form( + key: controller.formKey, + child: ListView( + padding: EdgeInsets.all(16.w), + children: [ + // 顶部提示文字 + Text( + 'feedbackDescription'.tr, // 请描述您遇到的问题或建议 + style: TextStyle( + fontSize: 14.sp, + color: isDarkMode ? Colors.white70 : Colors.black54, + ), + ), + SizedBox(height: 16.h), + + // 反馈内容输入框 + Container( + decoration: BoxDecoration( + color: isDarkMode + ? Colors.white.withOpacity(0.05) + : Colors.white, + borderRadius: BorderRadius.circular(16.r), + boxShadow: [ + BoxShadow( + color: isDarkMode + ? Colors.black.withOpacity(0.2) + : Colors.black.withOpacity(0.05), + blurRadius: 10, + offset: const Offset(0, 2), + ), + ], + ), + child: ClipRRect( + borderRadius: BorderRadius.circular(16.r), + child: BackdropFilter( + filter: isDarkMode + ? ImageFilter.blur(sigmaX: 5, sigmaY: 5) + : ImageFilter.blur(sigmaX: 0, sigmaY: 0), + child: Padding( + padding: + EdgeInsets.symmetric(horizontal: 16.w, vertical: 8.h), + child: TextFormField( + controller: controller.feedbackController, + maxLines: 8, + maxLength: 500, + style: TextStyle( + color: isDarkMode ? Colors.white : Colors.black87, + ), + decoration: InputDecoration( + hintText: 'feedbackHint'.tr, // 请输入您的反馈内容... + hintStyle: TextStyle( + color: isDarkMode ? Colors.white38 : Colors.black38, + ), + border: InputBorder.none, + counterStyle: TextStyle( + color: isDarkMode ? Colors.white54 : Colors.black54, + ), + ), + validator: (value) { + if (value == null || value.trim().isEmpty) { + return 'feedbackRequired'.tr; // 请输入反馈内容 + } + return null; + }, + ), + ), + ), + ), + ), + SizedBox(height: 24.h), + + // 联系方式标题 + // Text( + // 'contactInfo'.tr, // 联系方式 + // style: TextStyle( + // fontSize: 14.sp, + // color: isDarkMode ? Colors.white70 : Colors.black54, + // ), + // ), + // SizedBox(height: 16.h), + + // // 联系方式输入框 + // Container( + // decoration: BoxDecoration( + // color: isDarkMode + // ? Colors.white.withOpacity(0.05) + // : Colors.white, + // borderRadius: BorderRadius.circular(16.r), + // boxShadow: [ + // BoxShadow( + // color: isDarkMode + // ? Colors.black.withOpacity(0.2) + // : Colors.black.withOpacity(0.05), + // blurRadius: 10, + // offset: const Offset(0, 2), + // ), + // ], + // ), + // child: ClipRRect( + // borderRadius: BorderRadius.circular(16.r), + // child: BackdropFilter( + // filter: isDarkMode + // ? ImageFilter.blur(sigmaX: 5, sigmaY: 5) + // : ImageFilter.blur(sigmaX: 0, sigmaY: 0), + // child: Padding( + // padding: + // EdgeInsets.symmetric(horizontal: 16.w, vertical: 8.h), + // child: TextFormField( + // controller: controller.contactController, + // style: TextStyle( + // color: isDarkMode ? Colors.white : Colors.black87, + // ), + // decoration: InputDecoration( + // hintText: 'contactHint'.tr, // 邮箱/手机号,方便我们联系您 + // hintStyle: TextStyle( + // color: isDarkMode ? Colors.white38 : Colors.black38, + // ), + // border: InputBorder.none, + // ), + // ), + // ), + // ), + // ), + // ), + // SizedBox(height: 40.h), + + // 提交按钮 + Obx(() => ElevatedButton( + onPressed: controller.isSubmitting.value + ? null + : controller.submitFeedback, + style: ElevatedButton.styleFrom( + backgroundColor: Colors.blue[600], + padding: EdgeInsets.symmetric(vertical: 12.h), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.r), + ), + elevation: 0, + ), + child: controller.isSubmitting.value + ? SizedBox( + height: 20.h, + width: 20.h, + child: CircularProgressIndicator( + strokeWidth: 2.w, + valueColor: const AlwaysStoppedAnimation( + Colors.white), + ), + ) + : Text( + 'submit'.tr, // 提交 + style: TextStyle( + fontSize: 16.sp, + fontWeight: FontWeight.w500, + color: Colors.white, + ), + ), + )), + ], + ), + ), + ), + ); + } +} diff --git a/lib/modules/login/controllers/login_controller.dart b/lib/modules/login/controllers/login_controller.dart index 4dac80fc0..d35a1d56c 100644 --- a/lib/modules/login/controllers/login_controller.dart +++ b/lib/modules/login/controllers/login_controller.dart @@ -69,7 +69,7 @@ class LoginController extends GetxController { {'name': '中国澳门', 'code': '+853', 'flag': '🇲🇴'}, {'name': '中国台湾', 'code': '+886', 'flag': '🇹🇼'}, - // 添加的其他主要国家 + // 添加的其他主要国家 {'name': '埃及', 'code': '+20', 'flag': '🇪🇬'}, {'name': '希腊', 'code': '+30', 'flag': '🇬🇷'}, {'name': '荷兰', 'code': '+31', 'flag': '🇳🇱'}, @@ -153,7 +153,7 @@ class LoginController extends GetxController { final _contactValue = ''.obs; final _displayContact = ''.obs; final _verificationCode = ['', '', '', ''].obs; - int loginType = -1; + int loginType = 0; // Getters LoginViewState get viewState => _viewState.value; bool get isLoading => _isLoading.value; @@ -184,19 +184,18 @@ class LoginController extends GetxController { Future _initDeviceInfo() async { try { DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); - if (GetPlatform.isAndroid) { - AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; - _deviceId = androidInfo.id; - }else if (GetPlatform.isIOS) { - IosDeviceInfo iosInfo = await deviceInfo.iosInfo; - _deviceId = iosInfo.identifierForVendor ?? 'unknown'; - } - Logger().d('deviceId: $_deviceId'); - }catch(e){ + if (GetPlatform.isAndroid) { + AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; + _deviceId = androidInfo.id; + } else if (GetPlatform.isIOS) { + IosDeviceInfo iosInfo = await deviceInfo.iosInfo; + _deviceId = iosInfo.identifierForVendor ?? 'unknown'; + } + Logger().d('deviceId: $_deviceId'); + } catch (e) { Logger().e('获取设备信息失败: $e'); _deviceId = 'unknown'; } - } // 更新选中的国家编码 @@ -210,14 +209,15 @@ class LoginController extends GetxController { } else { loginType = 1; // 设置为手机号登录类型 } + _countdownSeconds.value = 0; } // 获取验证码 void getVerificationCode() { if (contactController.text.isEmpty) { Get.snackbar( - '提示', - '请输入手机号码或邮箱', + 'tip'.tr, + 'pleaseEnterContactInfo'.tr, snackPosition: SnackPosition.TOP, backgroundColor: Colors.red.withOpacity(0.1), colorText: Colors.red, @@ -280,8 +280,8 @@ class LoginController extends GetxController { void showVerificationView() { if (contactController.text.isEmpty) { Get.snackbar( - '提示', - '请输入手机号码或邮箱', + 'tip'.tr, + 'pleaseEnterContactInfo'.tr, snackPosition: SnackPosition.TOP, backgroundColor: Colors.red.withOpacity(0.1), colorText: Colors.red, @@ -358,8 +358,8 @@ class LoginController extends GetxController { } } else { Get.snackbar( - '提示', - '请正确的手机号码或邮箱', + 'tip'.tr, + 'pleaseEnterContactInfo'.tr, snackPosition: SnackPosition.TOP, backgroundColor: Colors.red.withOpacity(0.1), colorText: Colors.red, @@ -416,19 +416,57 @@ class LoginController extends GetxController { // 登录 Future login() async { + print("数据获取Facebook${loginType}"); + // 添加基础验证 + if (loginType == 0 || loginType == 1) { + // 邮箱或手机号登录 + if (contactController.text.isEmpty) { + Get.snackbar( + 'error'.tr, + 'pleaseEnterContactInfo'.tr, + snackPosition: SnackPosition.TOP, + backgroundColor: Colors.red.withOpacity(0.1), + colorText: Colors.red, + ); + return; + } + + // 验证邮箱格式 + if (loginType == 0 && !isEmialContactController()) { + Get.snackbar( + 'error'.tr, + 'invalidEmailFormat'.tr, + snackPosition: SnackPosition.TOP, + backgroundColor: Colors.red.withOpacity(0.1), + colorText: Colors.red, + ); + return; + } + + // 验证手机号格式 + if (loginType == 1 && !isPhoneContactController()) { + Get.snackbar( + 'error'.tr, + 'invalidPhoneFormat'.tr, + snackPosition: SnackPosition.TOP, + backgroundColor: Colors.red.withOpacity(0.1), + colorText: Colors.red, + ); + return; + } + } _isLoading.value = true; try { await Future.delayed(const Duration(seconds: 2)); // 模拟验证过程 - switch (loginType) { case 0: { if (!isVerificationCodeComplete()) { Get.snackbar( - '提示', - '请输入完整的验证码', + 'tip'.tr, + 'pleaseEnterVerificationCode'.tr, snackPosition: SnackPosition.TOP, backgroundColor: Colors.red.withOpacity(0.1), colorText: Colors.red, @@ -452,8 +490,8 @@ class LoginController extends GetxController { { if (!isVerificationCodeComplete()) { Get.snackbar( - '提示', - '请输入完整的验证码', + 'tip'.tr, + 'pleaseEnterVerificationCode'.tr, snackPosition: SnackPosition.TOP, backgroundColor: Colors.red.withOpacity(0.1), colorText: Colors.red, @@ -567,7 +605,7 @@ class LoginController extends GetxController { } break; } - case 6://游客登录 + case 6: //游客登录 { requestLogin({ "mail": "", @@ -585,8 +623,8 @@ class LoginController extends GetxController { default: { Get.snackbar( - '错误', - '登录失败,请重试', + 'error'.tr, + 'loginFailed'.tr, snackPosition: SnackPosition.TOP, backgroundColor: Colors.red.withOpacity(0.1), colorText: Colors.red, @@ -596,8 +634,8 @@ class LoginController extends GetxController { } } catch (e) { Get.snackbar( - '错误', - '登录失败,请重试', + 'error'.tr, + 'loginFailed'.tr, snackPosition: SnackPosition.TOP, backgroundColor: Colors.red.withOpacity(0.1), colorText: Colors.red, diff --git a/lib/modules/login/views/login_view.dart b/lib/modules/login/views/login_view.dart index 58a707a37..c7b1be4d2 100644 --- a/lib/modules/login/views/login_view.dart +++ b/lib/modules/login/views/login_view.dart @@ -457,9 +457,9 @@ class LoginView extends GetView { SizedBox(width: 24.w), _buildSocialButton( FontAwesomeIcons.facebook, Colors.blue, isDarkMode), - SizedBox(width: 24.w), - _buildSocialButton( - FontAwesomeIcons.userSecret, Colors.black, isDarkMode),//添加游客登录按钮 + SizedBox(width: 24.w), + _buildSocialButton(FontAwesomeIcons.userSecret, Colors.black, + isDarkMode), //添加游客登录按钮 ], ), ], @@ -512,10 +512,10 @@ class LoginView extends GetView { break; } case FontAwesomeIcons.userSecret: // 处理游客登录 - { - controller.loginType = 6; - break; - } + { + controller.loginType = 6; + break; + } } controller.login(); } diff --git a/lib/modules/settings/views/settings_view.dart b/lib/modules/settings/views/settings_view.dart index 0435d71dc..b855b910a 100644 --- a/lib/modules/settings/views/settings_view.dart +++ b/lib/modules/settings/views/settings_view.dart @@ -434,35 +434,29 @@ class SettingsView extends GetView { ? Colors.white.withOpacity(0.1) : Colors.grey[200]), - // 备份与恢复 - // _buildNavigationSetting( - // title: 'backups'.tr, // 备份与恢复 - // subtitle: 'backupsInfo'.tr, // 备份设置和AI互动历史 - // icon: Icons.cloud_upload_outlined, - // iconBgColor: isDarkMode - // ? Colors.cyan[900]!.withOpacity(0.3) - // : Colors.cyan[100]!, - // iconColor: - // isDarkMode ? Colors.cyan[300]! : Colors.cyan[600]!, - // value: '${'lastBackup'.tr} 今天', // 上次备份: - // valueStyle: TextStyle( - // fontSize: 12.sp, - // color: isDarkMode ? Colors.white70 : Colors.grey[500], - // ), - // onTap: () { - // // 打开备份设置页面 - // print( - // '---------用户头像-${controller.userInfo.value.avatar}'); - // print('---------用户名-${controller.userInfo.value.name}'); - // //print('user${User.instance.value}'); - // }, - // isDarkMode: isDarkMode, - // ), - // Divider( - // height: 1, - // color: isDarkMode - // ? Colors.white.withOpacity(0.1) - // : Colors.grey[200]), + // 用户反馈 + _buildSimpleNavigationSetting( + title: 'feedback'.tr, // 用户反馈 + subtitle: 'feedbackInfo'.tr, // 提供反馈或建议 + icon: Icons.feedback_outlined, + iconBgColor: isDarkMode + ? Colors.orange[900]!.withOpacity(0.3) + : Colors.orange[100]!, + iconColor: + isDarkMode ? Colors.orange[300]! : Colors.orange[600]!, + titleColor: isDarkMode ? Colors.white : null, + subtitleColor: isDarkMode ? Colors.white70 : null, + onTap: () { + // 打开反馈页面 + Get.toNamed(Routes.feedback); + }, + isDarkMode: isDarkMode, + ), + Divider( + height: 1, + color: isDarkMode + ? Colors.white.withOpacity(0.1) + : Colors.grey[200]), // 隐私设置 _buildSimpleNavigationSetting( @@ -1061,7 +1055,8 @@ class SettingsView extends GetView { Expanded( child: Row( children: [ - Container(//语音服务图标 + Container( + //语音服务图标 width: 32.w, height: 32.w, decoration: BoxDecoration( @@ -1077,7 +1072,8 @@ class SettingsView extends GetView { ), ), SizedBox(width: 12.w), - Flexible(//语音服务标题和副标题 + Flexible( + //语音服务标题和副标题 child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ diff --git a/lib/routes/app_pages.dart b/lib/routes/app_pages.dart index 8a2466fda..6b9372434 100644 --- a/lib/routes/app_pages.dart +++ b/lib/routes/app_pages.dart @@ -1,4 +1,6 @@ import 'package:get/get.dart'; +import '../modules/feedback/bindings/feedback_bindings.dart'; +import '../modules/feedback/views/feedback_view.dart'; import '../modules/home/views/home_view.dart'; import '../modules/home/bindings/home_binding.dart'; import '../modules/explore/views/explore_view.dart'; @@ -119,5 +121,10 @@ abstract class AppPages { page: () => const SettingsView(), binding: SettingsBinding(), ), + GetPage( + name: Routes.feedback, + page: () => const FeedbackView(), + binding: FeedbackBinding(), + ) ]; } diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart index 4488f63db..4ee8751d2 100644 --- a/lib/routes/app_routes.dart +++ b/lib/routes/app_routes.dart @@ -24,4 +24,5 @@ abstract class Routes { static const FLUTTER_TTS_TEST = '/flutter_tts_test'; static const FLUTTER_ASR_TEST = '/flutter_asr_test'; static const editProfile = '/edit_profile'; + static const feedback = '/feedback'; }