Browse Source

添加商务会议助手页的多语言支持

同时修复了部分UI组件的国际化问题,确保在不同语言环境下显示一致。
weicu
lxm 2 years ago
parent
commit
c1af65b6ad
  1. 16
      lib/core/translations/language/de_de.dart
  2. 16
      lib/core/translations/language/en_us.dart
  3. 16
      lib/core/translations/language/es_es.dart
  4. 16
      lib/core/translations/language/fr_fr.dart
  5. 66
      lib/core/translations/language/it_it.dart
  6. 15
      lib/core/translations/language/ja_jp.dart
  7. 16
      lib/core/translations/language/ko_kr.dart
  8. 16
      lib/core/translations/language/pt_pt.dart
  9. 16
      lib/core/translations/language/ru_ru.dart
  10. 16
      lib/core/translations/language/vi_vn.dart
  11. 16
      lib/core/translations/language/zh_cn.dart
  12. 16
      lib/core/translations/language/zh_hk.dart
  13. 17
      lib/modules/chat/views/chat_view.dart
  14. 4
      lib/modules/meeting/views/meeting_details_view.dart
  15. 4
      lib/modules/meeting/views/meeting_edit_view.dart
  16. 18
      lib/modules/meeting/views/meeting_view.dart
  17. 3
      lib/modules/settings/views/settings_view.dart
  18. 12
      lib/modules/timbre/views/timbre_view.dart
  19. 94
      lib/modules/translation/views/translation_view.dart

16
lib/core/translations/language/de_de.dart

@ -131,7 +131,19 @@ const Map<String, String> deDE = {
"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", "popularFunction": "Beliebte Funktionen",
"tryNow": "Jetzt ausprobieren", "tryNow": "Jetzt ausprobieren",
//商务会议助手页
"startMeeting": "Besprechung starten", "startMeeting": "Besprechung starten",
'edit': 'Bearbeiten',
'delete': 'Löschen',
'noContent': 'Kein Inhalt',
'editMeetingTitle': 'Besprechungstitel bearbeiten (Optional)',
'meetingTitle': 'Besprechungstitel (Optional)',
'maxCharacters': 'Maximal 50 Zeichen',
'meeting': 'Besprechung',
'recordingDetails': 'Aufnahmedetails',
'aiSummary': 'KI-Zusammenfassung',
'meetingTranscript': 'Besprechungsprotokoll',
// 设置页 // 设置页
"premiumMember": "Premium-Mitgliedschaft", "premiumMember": "Premium-Mitgliedschaft",
@ -165,6 +177,10 @@ const Map<String, String> deDE = {
'microsoftCloudTimbreService': 'Microsoft Cloud-Klangfarben-Dienst', 'microsoftCloudTimbreService': 'Microsoft Cloud-Klangfarben-Dienst',
'voiceClone': 'Stimmklon', 'voiceClone': 'Stimmklon',
'AIsettings': 'KI-Einstellungen', 'AIsettings': 'KI-Einstellungen',
'selecttimbre': 'Klangfarbe Wählen',
'pleaseRead': 'Bitte lesen',
'completeRecording': 'Aufnahme abschließen',
// 聊天页 // 聊天页
"clearChatHistory": "Chat-Verlauf löschen", "clearChatHistory": "Chat-Verlauf löschen",

16
lib/core/translations/language/en_us.dart

@ -134,7 +134,19 @@ const Map<String, String> enUS = {
"Sing any song in your favorite artist's voice, even your own creations", "Sing any song in your favorite artist's voice, even your own creations",
"popularFunction": "Popular Features", "popularFunction": "Popular Features",
"tryNow": "Try Now", "tryNow": "Try Now",
// 商务会议助手页
"startMeeting": "Start Meeting", "startMeeting": "Start Meeting",
'edit': 'Edit',
'delete': 'Delete',
'noContent': 'No Content',
'editMeetingTitle': 'Edit Meeting Title (Optional)',
'meetingTitle': 'Meeting Title (Optional)',
'maxCharacters': 'Maximum 50 characters',
'meeting': 'Meeting',
'recordingDetails': 'Recording Details',
'aiSummary': 'AI Summary',
'meetingTranscript': 'Meeting Transcript',
// 设置页 // 设置页
"premiumMember": "Premium Membership", "premiumMember": "Premium Membership",
@ -170,6 +182,10 @@ const Map<String, String> enUS = {
'microsoftCloudTimbreService': 'Microsoft Cloud Timbre Service', 'microsoftCloudTimbreService': 'Microsoft Cloud Timbre Service',
'voiceClone': 'Voice Clone', 'voiceClone': 'Voice Clone',
'AIsettings': 'AI Settings', 'AIsettings': 'AI Settings',
'selecttimbre': 'Select Timbre',
'pleaseRead': 'Please Read',
'completeRecording': 'Complete Recording',
// 聊天页 // 聊天页
"clearChatHistory": "Clear Chat History", "clearChatHistory": "Clear Chat History",

16
lib/core/translations/language/es_es.dart

@ -131,7 +131,19 @@ const Map<String, String> esES = {
"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", "popularFunction": "Funciones Populares",
"tryNow": "Probar Ahora", "tryNow": "Probar Ahora",
//商务会议助手页
"startMeeting": "Iniciar Reunión", "startMeeting": "Iniciar Reunión",
'edit': 'Editar',
'delete': 'Eliminar',
'noContent': 'Sin contenido',
'editMeetingTitle': 'Editar título de reunión (Opcional)',
'meetingTitle': 'Título de reunión (Opcional)',
'maxCharacters': 'Máximo 50 caracteres',
'meeting': 'Reunión',
'recordingDetails': 'Detalles de la grabación',
'aiSummary': 'Resumen de IA',
'meetingTranscript': 'Transcripción de la reunión',
// 设置页 // 设置页
"premiumMember": "Membresía Premium", "premiumMember": "Membresía Premium",
@ -165,6 +177,10 @@ const Map<String, String> esES = {
'microsoftCloudTimbreService': 'Servicio de Timbre en la Nube de Microsoft', 'microsoftCloudTimbreService': 'Servicio de Timbre en la Nube de Microsoft',
'voiceClone': 'Clonación de Voz', 'voiceClone': 'Clonación de Voz',
'AIsettings': 'Configuración de IA', 'AIsettings': 'Configuración de IA',
'selecttimbre': 'Seleccionar Timbre',
'pleaseRead': 'Por favor lea',
'completeRecording': 'Completar grabación',
// 聊天页 // 聊天页
"clearChatHistory": "Borrar Historial de Chat", "clearChatHistory": "Borrar Historial de Chat",

16
lib/core/translations/language/fr_fr.dart

@ -131,7 +131,19 @@ const Map<String, String> frFR = {
"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", "popularFunction": "Fonctionnalités populaires",
"tryNow": "Essayer maintenant", "tryNow": "Essayer maintenant",
//商务会议助手页
"startMeeting": "Démarrer la réunion", "startMeeting": "Démarrer la réunion",
'edit': 'Modifier',
'delete': 'Supprimer',
'noContent': 'Pas de contenu',
'editMeetingTitle': 'Modifier le titre de la réunion (Optionnel)',
'meetingTitle': 'Titre de la réunion (Optionnel)',
'maxCharacters': 'Maximum 50 caractères',
'meeting': 'Réunion',
'recordingDetails': 'Détails de l\'enregistrement',
'aiSummary': 'Résumé IA',
'meetingTranscript': 'Transcription de la réunion',
// 设置页 // 设置页
"premiumMember": "Abonnement Premium", "premiumMember": "Abonnement Premium",
@ -165,6 +177,10 @@ const Map<String, String> frFR = {
'microsoftCloudTimbreService': 'Service de timbre cloud Microsoft', 'microsoftCloudTimbreService': 'Service de timbre cloud Microsoft',
'voiceClone': 'Clone vocal', 'voiceClone': 'Clone vocal',
'AIsettings': 'Paramètres IA', 'AIsettings': 'Paramètres IA',
'selecttimbre': 'Sélectionner le Timbre',
'pleaseRead': 'Veuillez lire',
'completeRecording': 'Terminer l\'enregistrement',
// 聊天页 // 聊天页
"clearChatHistory": "Effacer l'historique de chat", "clearChatHistory": "Effacer l'historique de chat",

66
lib/core/translations/language/it_it.dart

@ -71,7 +71,8 @@ const Map<String, String> itIT = {
"aiAssistant": "Assistente AI", "aiAssistant": "Assistente AI",
"aiAssistantInfo": "Consulente personale 24/7 per domande e consigli", "aiAssistantInfo": "Consulente personale 24/7 per domande e consigli",
"simultaneousInterpretation": "Interpretazione in tempo reale", "simultaneousInterpretation": "Interpretazione in tempo reale",
"simultaneousInterpretationInfo": "Traduzione in tempo reale per oltre 80 lingue", "simultaneousInterpretationInfo":
"Traduzione in tempo reale per oltre 80 lingue",
"aiCompanion": "Legame genitore-figlio", "aiCompanion": "Legame genitore-figlio",
"aiCompanionInfo": "Ti comprende e offre compagnia calorosa", "aiCompanionInfo": "Ti comprende e offre compagnia calorosa",
"homeSlogan": "Connetti il mondo, oltre il suono", "homeSlogan": "Connetti il mondo, oltre il suono",
@ -80,7 +81,8 @@ const Map<String, String> itIT = {
"unsystemSetup": "Vai alle impostazioni di sistema", "unsystemSetup": "Vai alle impostazioni di sistema",
"talkLater": "Ricorda più tardi", "talkLater": "Ricorda più tardi",
"initializing": "Inizializzazione...", "initializing": "Inizializzazione...",
"bluetoothInitializationFailure": "Inizializzazione del servizio Bluetooth fallita", "bluetoothInitializationFailure":
"Inizializzazione del servizio Bluetooth fallita",
"checkingPermissions": "Controllo permessi...", "checkingPermissions": "Controllo permessi...",
"lackPermissions": "Permessi Bluetooth richiesti", "lackPermissions": "Permessi Bluetooth richiesti",
"searchingDevice": "Ricerca dispositivi...", "searchingDevice": "Ricerca dispositivi...",
@ -90,7 +92,8 @@ const Map<String, String> itIT = {
"connectedDevice": "Connesso al dispositivo:", "connectedDevice": "Connesso al dispositivo:",
"failedRefreshDevice": "Impossibile aggiornare il dispositivo", "failedRefreshDevice": "Impossibile aggiornare il dispositivo",
"noDeviceFound": "Nessun dispositivo connesso trovato", "noDeviceFound": "Nessun dispositivo connesso trovato",
"failedDeviceInformation": "Impossibile ottenere informazioni sul dispositivo", "failedDeviceInformation":
"Impossibile ottenere informazioni sul dispositivo",
"unknownEquipment": "Dispositivo sconosciuto", "unknownEquipment": "Dispositivo sconosciuto",
"zeroSignal": "Nessun segnale", "zeroSignal": "Nessun segnale",
"good": "Buono", "good": "Buono",
@ -116,9 +119,11 @@ const Map<String, String> itIT = {
"healthConsultant": "Chat AI multifunzione", "healthConsultant": "Chat AI multifunzione",
"healthConsultantInfo": "Più funzionalità di chat AI", "healthConsultantInfo": "Più funzionalità di chat AI",
"conferenceAssistant": "Assistente per riunioni di lavoro", "conferenceAssistant": "Assistente per riunioni di lavoro",
"conferenceAssistantInfo": "Registrazione verbali in tempo reale e traduzione multilingue", "conferenceAssistantInfo":
"Registrazione verbali in tempo reale e traduzione multilingue",
"studyAssistant": "Assistente per l'apprendimento delle lingue", "studyAssistant": "Assistente per l'apprendimento delle lingue",
"studyAssistantInfo": "Correzione della pronuncia ed esercitazione del parlato", "studyAssistantInfo":
"Correzione della pronuncia ed esercitazione del parlato",
"travelTranslator": "Traduttore da viaggio", "travelTranslator": "Traduttore da viaggio",
"travelTranslatorInfo": "Traduzione vocale in tempo reale e guide turistiche", "travelTranslatorInfo": "Traduzione vocale in tempo reale e guide turistiche",
"beSearching": "Ricerca di:", "beSearching": "Ricerca di:",
@ -128,10 +133,23 @@ const Map<String, String> itIT = {
"newFunction": "Nuove funzionalità", "newFunction": "Nuove funzionalità",
"youChoseTry": "Hai scelto di provare", "youChoseTry": "Hai scelto di provare",
"aiSinger": "Modalità cantante AI", "aiSinger": "Modalità cantante AI",
"aiSingerInfo": "Canta qualsiasi canzone con la voce del tuo artista preferito, anche tue creazioni", "aiSingerInfo":
"Canta qualsiasi canzone con la voce del tuo artista preferito, anche tue creazioni",
"popularFunction": "Funzionalità popolari", "popularFunction": "Funzionalità popolari",
"tryNow": "Prova ora", "tryNow": "Prova ora",
//商务会议助手页
"startMeeting": "Inizia riunione", "startMeeting": "Inizia riunione",
'edit': 'Modifica',
'delete': 'Elimina',
'noContent': 'Nessun contenuto',
'editMeetingTitle': 'Modifica titolo riunione (Opzionale)',
'meetingTitle': 'Titolo riunione (Opzionale)',
'maxCharacters': 'Massimo 50 caratteri',
'meeting': 'Riunione',
'recordingDetails': 'Dettagli registrazione',
'aiSummary': 'Riepilogo IA',
'meetingTranscript': 'Trascrizione riunione',
// 设置页 // 设置页
"premiumMember": "Abbonamento Premium", "premiumMember": "Abbonamento Premium",
@ -156,15 +174,20 @@ const Map<String, String> itIT = {
"voiceServiceInfo": "Seleziona servizio di riconoscimento e sintesi vocale", "voiceServiceInfo": "Seleziona servizio di riconoscimento e sintesi vocale",
"selectVoiceService": "Seleziona servizio vocale", "selectVoiceService": "Seleziona servizio vocale",
"azureVoiceService": "Servizio vocale Azure", "azureVoiceService": "Servizio vocale Azure",
"azureVoiceServiceInfo": "Servizio cloud Microsoft con supporto per sintesi e riconoscimento vocale di alta qualità", "azureVoiceServiceInfo":
"Servizio cloud Microsoft con supporto per sintesi e riconoscimento vocale di alta qualità",
"flutterVoiceService": "Servizio vocale locale", "flutterVoiceService": "Servizio vocale locale",
"flutterVoiceServiceInfo": "Servizio vocale locale del dispositivo senza necessità di internet", "flutterVoiceServiceInfo":
"Servizio vocale locale del dispositivo senza necessità di internet",
'timbreService': 'Servizio timbro vocale', 'timbreService': 'Servizio timbro vocale',
'timbreServiceInfo': 'Seleziona servizio di sintesi vocale', 'timbreServiceInfo': 'Seleziona servizio di sintesi vocale',
'defaultTimbre': 'Timbro predefinito', 'defaultTimbre': 'Timbro predefinito',
'microsoftCloudTimbreService': 'Servizio timbro vocale cloud Microsoft', 'microsoftCloudTimbreService': 'Servizio timbro vocale cloud Microsoft',
'voiceClone': 'Clonazione vocale', 'voiceClone': 'Clonazione vocale',
'AIsettings': 'Impostazioni AI', 'AIsettings': 'Impostazioni AI',
'selecttimbre': 'Seleziona timbro vocale',
'pleaseRead': 'Per favore leggi',
'completeRecording': 'Completa registrazione',
// 聊天页 // 聊天页
"clearChatHistory": "Cancella cronologia chat", "clearChatHistory": "Cancella cronologia chat",
@ -292,35 +315,44 @@ const Map<String, String> itIT = {
// Personal Assistant Emma // Personal Assistant Emma
"personalAssistantName": "Emma", "personalAssistantName": "Emma",
"personalAssistantDescription": "Ciao, sono Emma, un'assistente AI versatile. Che si tratti di pianificazione del lavoro, consigli di studio, organizzazione della vita o qualsiasi altro problema, sono felice di aiutare. Miglioriamo l'efficienza e raggiungiamo gli obiettivi insieme!", "personalAssistantDescription":
"Ciao, sono Emma, un'assistente AI versatile. Che si tratti di pianificazione del lavoro, consigli di studio, organizzazione della vita o qualsiasi altro problema, sono felice di aiutare. Miglioriamo l'efficienza e raggiungiamo gli obiettivi insieme!",
"assistantTag": "Assistente", "assistantTag": "Assistente",
"personalAssistantWelcome": "Ciao! Sono Emma e sono felice di essere la tua assistente personale. Posso aiutarti con varie attività come gestione del tempo, pianificazione degli obiettivi, organizzazione delle informazioni, ecc. Come posso aiutarti?", "personalAssistantWelcome":
"Ciao! Sono Emma e sono felice di essere la tua assistente personale. Posso aiutarti con varie attività come gestione del tempo, pianificazione degli obiettivi, organizzazione delle informazioni, ecc. Come posso aiutarti?",
"personalAssistantVoiceWelcome": "Sono qui!", "personalAssistantVoiceWelcome": "Sono qui!",
// 同声传译 Lucy // 同声传译 Lucy
"interpreterName": "Interprete simultaneo", "interpreterName": "Interprete simultaneo",
"interpreterDescription": "Ciao! Sono Lucy, un'interprete professionale inglese-cinese specializzata in traduzione in tempo reale per riunioni, conferenze e conversazioni, rendendo la comunicazione senza barriere.", "interpreterDescription":
"Ciao! Sono Lucy, un'interprete professionale inglese-cinese specializzata in traduzione in tempo reale per riunioni, conferenze e conversazioni, rendendo la comunicazione senza barriere.",
"interpreterTag": "Traduzione", "interpreterTag": "Traduzione",
"interpreterWelcome": "Salve a tutti! Sono Lucy, la vostra interprete simultanea. Tradurrò tra cinese e inglese per voi. Quando parlate in cinese, tradurrò in inglese; quando parlate in inglese, tradurrò in cinese. Iniziamo la nostra sessione di traduzione!", "interpreterWelcome":
"Salve a tutti! Sono Lucy, la vostra interprete simultanea. Tradurrò tra cinese e inglese per voi. Quando parlate in cinese, tradurrò in inglese; quando parlate in inglese, tradurrò in cinese. Iniziamo la nostra sessione di traduzione!",
// 亲子陪伴 芯愿 // 亲子陪伴 芯愿
"companionName": "XinYuan", "companionName": "XinYuan",
"companionDescription": "Sono XinYuan, la tua compagna genitore-figlio dedicata, gentile e comprensiva. Che tu voglia chiacchierare, condividere preoccupazioni o avere compagnia, sarò sempre al tuo fianco.", "companionDescription":
"Sono XinYuan, la tua compagna genitore-figlio dedicata, gentile e comprensiva. Che tu voglia chiacchierare, condividere preoccupazioni o avere compagnia, sarò sempre al tuo fianco.",
"companionTag": "Emotivo", "companionTag": "Emotivo",
"companionWelcome": "Ciao! Finalmente ci incontriamo! Sono XinYuan, la tua compagna genitore-figlio dedicata. Com'è stata la tua giornata? C'è qualcosa che vorresti condividere con me? Sono sempre qui, pronta ad ascoltare i tuoi pensieri.", "companionWelcome":
"Ciao! Finalmente ci incontriamo! Sono XinYuan, la tua compagna genitore-figlio dedicata. Com'è stata la tua giornata? C'è qualcosa che vorresti condividere con me? Sono sempre qui, pronta ad ascoltare i tuoi pensieri.",
"companionVoiceWelcome": "Sono qui con te!", "companionVoiceWelcome": "Sono qui con te!",
// 多功能AI聊天 吴小江 // 多功能AI聊天 吴小江
"healthAdvisorName": "Assistente chat AI Wu", "healthAdvisorName": "Assistente chat AI Wu",
"healthAdvisorDescription": "Sono Wu, pronto a fornirti varie funzionalità di chat AI.", "healthAdvisorDescription":
"Sono Wu, pronto a fornirti varie funzionalità di chat AI.",
"healthAdvisorTag": "Chat", "healthAdvisorTag": "Chat",
"healthAdvisorWelcome": "Ciao, sono Wu. Sono felice di assisterti con le funzionalità di chat AI. Come posso aiutarti oggi?", "healthAdvisorWelcome":
"Ciao, sono Wu. Sono felice di assisterti con le funzionalità di chat AI. Come posso aiutarti oggi?",
"healthAdvisorVoiceWelcome": "Sono qui!", "healthAdvisorVoiceWelcome": "Sono qui!",
// Translation History // Translation History
"noTranslationHistory": "Nessuna cronologia di traduzione", "noTranslationHistory": "Nessuna cronologia di traduzione",
"clearHistory": "Cancella cronologia", "clearHistory": "Cancella cronologia",
"clearHistoryConfirm": "Sei sicuro di voler cancellare tutta la cronologia delle traduzioni? Questa azione non può essere annullata.", "clearHistoryConfirm":
"Sei sicuro di voler cancellare tutta la cronologia delle traduzioni? Questa azione non può essere annullata.",
"translationHistory": "Cronologia traduzioni", "translationHistory": "Cronologia traduzioni",
// Language names // Language names

15
lib/core/translations/language/ja_jp.dart

@ -131,7 +131,19 @@ const Map<String, String> jaJP = {
"aiSingerInfo": "好きな歌手の声で任意の曲を歌う、自分で作った曲でも", "aiSingerInfo": "好きな歌手の声で任意の曲を歌う、自分で作った曲でも",
"popularFunction": "人気の機能シーン", "popularFunction": "人気の機能シーン",
"tryNow": "今すぐ試す", "tryNow": "今すぐ試す",
//商务会议助手页
"startMeeting": "会議を開始", "startMeeting": "会議を開始",
'edit': '編集',
'delete': '削除',
'noContent': 'コンテンツなし',
'editMeetingTitle': '会議タイトルを編集(任意)',
'meetingTitle': '会議タイトル(任意)',
'maxCharacters': '最大50文字',
'meeting': '会議',
'recordingDetails': '録音詳細',
'aiSummary': 'AI要約',
'meetingTranscript': '会議の文字起こし',
// 设置页 // 设置页
"premiumMember": "プレミアムメンバー", "premiumMember": "プレミアムメンバー",
@ -165,6 +177,9 @@ const Map<String, String> jaJP = {
'microsoftCloudTimbreService': 'マイクロソフトクラウド音色サービス', 'microsoftCloudTimbreService': 'マイクロソフトクラウド音色サービス',
'voiceClone': '音声クローン', 'voiceClone': '音声クローン',
'AIsettings': 'AI設定', 'AIsettings': 'AI設定',
'selecttimbre': '音色を選択',
'pleaseRead': '読んでください',
'completeRecording': '録音完了',
// 聊天页 // 聊天页
"clearChatHistory": "チャット履歴をクリア", "clearChatHistory": "チャット履歴をクリア",

16
lib/core/translations/language/ko_kr.dart

@ -131,7 +131,19 @@ const Map<String, String> koKR = {
"aiSingerInfo": "좋아하는 가수의 목소리로 어떤 노래든 부를 수 있으며, 자신이 만든 노래도 가능", "aiSingerInfo": "좋아하는 가수의 목소리로 어떤 노래든 부를 수 있으며, 자신이 만든 노래도 가능",
"popularFunction": "인기 기능 장면", "popularFunction": "인기 기능 장면",
"tryNow": "지금 시도", "tryNow": "지금 시도",
//商务会议助手页
"startMeeting": "회의 시작", "startMeeting": "회의 시작",
'edit': '편집',
'delete': '삭제',
'noContent': '내용 없음',
'editMeetingTitle': '회의 제목 수정 (선택사항)',
'meetingTitle': '회의 제목 (선택사항)',
'maxCharacters': '최대 50자',
'meeting': '회의',
'recordingDetails': '녹음 상세',
'aiSummary': 'AI 요약',
'meetingTranscript': '회의 기록',
// 设置页 // 设置页
"premiumMember": "프리미엄 회원", "premiumMember": "프리미엄 회원",
@ -165,6 +177,10 @@ const Map<String, String> koKR = {
'microsoftCloudTimbreService': '마이크로소프트 클라우드 음색 서비스', 'microsoftCloudTimbreService': '마이크로소프트 클라우드 음색 서비스',
'voiceClone': '음성 복제', 'voiceClone': '음성 복제',
'AIsettings': 'AI 설정', 'AIsettings': 'AI 설정',
'selecttimbre': '음색 선택',
'pleaseRead': '읽어주세요',
'completeRecording': '녹음 완료',
// 聊天页 // 聊天页
"clearChatHistory": "채팅 기록 지우기", "clearChatHistory": "채팅 기록 지우기",

16
lib/core/translations/language/pt_pt.dart

@ -131,7 +131,19 @@ const Map<String, String> ptPT = {
"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", "popularFunction": "Funções Populares",
"tryNow": "Experimentar Agora", "tryNow": "Experimentar Agora",
//商务会议助手页
"startMeeting": "Iniciar Reunião", "startMeeting": "Iniciar Reunião",
'edit': 'Editar',
'delete': 'Excluir',
'noContent': 'Sem conteúdo',
'editMeetingTitle': 'Editar título da reunião (Opcional)',
'meetingTitle': 'Título da reunião (Opcional)',
'maxCharacters': 'Máximo de 50 caracteres',
'meeting': 'Reunião',
'recordingDetails': 'Detalhes da gravação',
'aiSummary': 'Resumo IA',
'meetingTranscript': 'Transcrição da reunião',
// 设置页 // 设置页
"premiumMember": "Assinatura Premium", "premiumMember": "Assinatura Premium",
@ -165,6 +177,10 @@ const Map<String, String> ptPT = {
'microsoftCloudTimbreService': 'Serviço de Timbre na Nuvem Microsoft', 'microsoftCloudTimbreService': 'Serviço de Timbre na Nuvem Microsoft',
'voiceClone': 'Clonagem de Voz', 'voiceClone': 'Clonagem de Voz',
'AIsettings': 'Configurações de IA', 'AIsettings': 'Configurações de IA',
'selecttimbre': 'Selecionar timbre',
'pleaseRead': 'Por favor leia',
'completeRecording': 'Concluir gravação',
// 聊天页 // 聊天页
"clearChatHistory": "Limpar Histórico de Chat", "clearChatHistory": "Limpar Histórico de Chat",

16
lib/core/translations/language/ru_ru.dart

@ -131,7 +131,19 @@ const Map<String, String> ruRU = {
"aiSingerInfo": "Пойте любую песню голосом вашего любимого исполнителя, даже собственные творения", "aiSingerInfo": "Пойте любую песню голосом вашего любимого исполнителя, даже собственные творения",
"popularFunction": "Популярные функции", "popularFunction": "Популярные функции",
"tryNow": "Попробовать сейчас", "tryNow": "Попробовать сейчас",
//商务会议助手页
"startMeeting": "Начать встречу", "startMeeting": "Начать встречу",
'edit': 'Редактировать',
'delete': 'Удалить',
'noContent': 'Нет содержания',
'editMeetingTitle': 'Изменить название встречи (Необязательно)',
'meetingTitle': 'Название встречи (Необязательно)',
'maxCharacters': 'Максимум 50 символов',
'meeting': 'Встреча',
'recordingDetails': 'Детали записи',
'aiSummary': 'AI-резюме',
'meetingTranscript': 'Стенограмма встречи',
// 设置页 // 设置页
"premiumMember": "Премиум-подписка", "premiumMember": "Премиум-подписка",
@ -165,6 +177,10 @@ const Map<String, String> ruRU = {
'microsoftCloudTimbreService': 'Облачная служба тембра Microsoft', 'microsoftCloudTimbreService': 'Облачная служба тембра Microsoft',
'voiceClone': 'Клонирование голоса', 'voiceClone': 'Клонирование голоса',
'AIsettings': 'Настройки ИИ', 'AIsettings': 'Настройки ИИ',
'selecttimbre': 'Выбрать тембр',
'pleaseRead': 'Пожалуйста, прочтите',
'completeRecording': 'Завершить запись',
// 聊天页 // 聊天页
"clearChatHistory": "Очистить историю чата", "clearChatHistory": "Очистить историю чата",

16
lib/core/translations/language/vi_vn.dart

@ -131,7 +131,19 @@ const Map<String, String> viVN = {
"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", "popularFunction": "Tính năng phổ biến",
"tryNow": "Thử ngay", "tryNow": "Thử ngay",
//商务会议助手页
"startMeeting": "Bắt đầu cuộc họp", "startMeeting": "Bắt đầu cuộc họp",
'edit': 'Chỉnh sửa',
'delete': 'Xóa',
'noContent': 'Không có nội dung',
'editMeetingTitle': 'Sửa tiêu đề cuộc họp (Tùy chọn)',
'meetingTitle': 'Tiêu đề cuộc họp (Tùy chọn)',
'maxCharacters': 'Tối đa 50 ký tự',
'meeting': 'Cuộc họp',
'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", "premiumMember": "Thành viên cao cấp",
@ -165,6 +177,10 @@ const Map<String, String> viVN = {
'microsoftCloudTimbreService': 'Dịch vụ âm sắc đám mây Microsoft', 'microsoftCloudTimbreService': 'Dịch vụ âm sắc đám mây Microsoft',
'voiceClone': 'Nhân bản giọng nói', 'voiceClone': 'Nhân bản giọng nói',
'AIsettings': 'Cài đặt AI', 'AIsettings': 'Cài đặt AI',
'selecttimbre': 'Seleziona timbro vocale',
'pleaseRead': 'Vui lòng đọc',
'completeRecording': 'Hoàn thành ghi âm',
// 聊天页 // 聊天页
"clearChatHistory": "Xóa lịch sử trò chuyện", "clearChatHistory": "Xóa lịch sử trò chuyện",

16
lib/core/translations/language/zh_cn.dart

@ -131,7 +131,19 @@ const Map<String, String> zhCN = {
"aiSingerInfo": "用你喜欢的歌手声音演唱任何歌曲,甚至是你自己创作的歌曲", "aiSingerInfo": "用你喜欢的歌手声音演唱任何歌曲,甚至是你自己创作的歌曲",
"popularFunction": "热门功能场景", "popularFunction": "热门功能场景",
"tryNow": "立即尝试", "tryNow": "立即尝试",
// 商务会议助手页
"startMeeting": "开始会议", "startMeeting": "开始会议",
'edit': '编辑',
'delete': '删除',
'noContent': '无内容',
'editMeetingTitle': '修改会议标题(非必填)',
'meetingTitle': '会议标题(非必填)',
'maxCharacters': '最多50个字符',
'meeting': '会议',
'recordingDetails': '录音详情',
'aiSummary': 'AI总结',
'meetingTranscript': '会议原文',
// 设置页 // 设置页
"premiumMember": "高级会员", "premiumMember": "高级会员",
@ -165,7 +177,9 @@ const Map<String, String> zhCN = {
'microsoftCloudTimbreService': '微软云端音色服务', 'microsoftCloudTimbreService': '微软云端音色服务',
'voiceClone': '声音复刻', 'voiceClone': '声音复刻',
'AIsettings': 'AI设置', 'AIsettings': 'AI设置',
'selecttimbre': '选择音色',
'pleaseRead': '请朗读',
'completeRecording': '完成录制',
// 聊天页 // 聊天页
"clearChatHistory": "清空聊天记录", "clearChatHistory": "清空聊天记录",

16
lib/core/translations/language/zh_hk.dart

@ -131,7 +131,19 @@ const Map<String, String> zhHK = {
"aiSingerInfo": "用你喜歡的歌手聲音演唱任何歌曲,甚至是你自己創作的歌曲", "aiSingerInfo": "用你喜歡的歌手聲音演唱任何歌曲,甚至是你自己創作的歌曲",
"popularFunction": "熱門功能場景", "popularFunction": "熱門功能場景",
"tryNow": "立即嘗試", "tryNow": "立即嘗試",
//商务会议助手页
"startMeeting": "開始會議", "startMeeting": "開始會議",
'edit': '編輯',
'delete': '刪除',
'noContent': '無內容',
'editMeetingTitle': '修改會議標題(非必填)',
'meetingTitle': '會議標題(非必填)',
'maxCharacters': '最多50個字符',
'meeting': '會議',
'recordingDetails': '錄音詳情',
'aiSummary': 'AI總結',
'meetingTranscript': '會議原文',
// 设置页 // 设置页
"premiumMember": "高級會員", "premiumMember": "高級會員",
@ -165,6 +177,10 @@ const Map<String, String> zhHK = {
'microsoftCloudTimbreService': '微軟雲端音色服務', 'microsoftCloudTimbreService': '微軟雲端音色服務',
'voiceClone': '聲音複刻', 'voiceClone': '聲音複刻',
'AIsettings': 'AI設置', 'AIsettings': 'AI設置',
'selecttimbre': '選擇音色',
'pleaseRead': '請朗讀',
'completeRecording': '完成錄製',
// 聊天页 // 聊天页
"clearChatHistory": "清空聊天記錄", "clearChatHistory": "清空聊天記錄",

17
lib/modules/chat/views/chat_view.dart

@ -719,15 +719,20 @@ class ChatView extends GetView<ChatController> {
String _formatTime(DateTime time) { String _formatTime(DateTime time) {
final now = DateTime.now(); final now = DateTime.now();
final today = DateTime(now.year, now.month, now.day); final today = DateTime(now.year, now.month, now.day);
final yesterday = today.subtract(const Duration(days: 1)); //final yesterday = today.subtract(const Duration(days: 1));
final messageDate = DateTime(time.year, time.month, time.day); final messageDate = DateTime(time.year, time.month, time.day);
String timeStr = '${time.hour.toString().padLeft(2, '0')}:${time.minute.toString().padLeft(2, '0')}';
if (messageDate == today) { if (messageDate == today) {
return '今天 ${time.hour.toString().padLeft(2, '0')}:${time.minute.toString().padLeft(2, '0')}'; return timeStr; // 只显示时间,如 "14:30"
} else if (messageDate == yesterday) { }
return '昨天 ${time.hour.toString().padLeft(2, '0')}:${time.minute.toString().padLeft(2, '0')}'; // else if (messageDate == yesterday) {
} else { // return 'Yesterday $timeStr'; // 如 "Yesterday 14:30"
return '${time.month}月${time.day}日 ${time.hour.toString().padLeft(2, '0')}:${time.minute.toString().padLeft(2, '0')}'; // }
else {
// 国际通用日期格式 "MM-dd HH:mm"
return '${time.month.toString().padLeft(2, '0')}-${time.day.toString().padLeft(2, '0')} $timeStr';
} }
} }
} }

4
lib/modules/meeting/views/meeting_details_view.dart

@ -38,7 +38,7 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
onPressed: () => Get.back(), onPressed: () => Get.back(),
), ),
title: Text( title: Text(
'录音详情', 'recordingDetails'.tr,//录音详情
style: TextStyle( style: TextStyle(
fontSize: 17.sp, fontSize: 17.sp,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
@ -253,7 +253,7 @@ class MeetingDetailsView extends GetView<MeetingDetailsController> {
indicatorColor: isDarkMode ? AppColors.primary : Colors.blue, indicatorColor: isDarkMode ? AppColors.primary : Colors.blue,
labelColor: isDarkMode ? AppColors.primary : Colors.blue, labelColor: isDarkMode ? AppColors.primary : Colors.blue,
labelStyle: TextStyle( labelStyle: TextStyle(
color: isDarkMode ? Colors.white : Colors.black87, color: isDarkMode ? Colors.white : const Color.fromARGB(221, 197, 196, 196),
fontSize: 14.sp, fontSize: 14.sp,
), ),
tabs: const [ tabs: const [

4
lib/modules/meeting/views/meeting_edit_view.dart

@ -43,7 +43,7 @@ class MeetingEditView extends GetView<MeetingEditController> {
vertical: 6.w, vertical: 6.w,
), ),
child: Text( child: Text(
'保存', 'save'.tr,
style: TextStyle( style: TextStyle(
color: isDarkMode ? AppColors.primary : Colors.blue, color: isDarkMode ? AppColors.primary : Colors.blue,
fontSize: 18.sp, fontSize: 18.sp,
@ -86,7 +86,7 @@ class MeetingEditView extends GetView<MeetingEditController> {
fontSize: 16.sp, fontSize: 16.sp,
), ),
decoration: InputDecoration( decoration: InputDecoration(
hintText: '最多50个字符', hintText: 'maxCharacters'.tr,
hintStyle: TextStyle( hintStyle: TextStyle(
color: isDarkMode ? Colors.white70 : Colors.black54, color: isDarkMode ? Colors.white70 : Colors.black54,
fontSize: 16.sp, fontSize: 16.sp,

18
lib/modules/meeting/views/meeting_view.dart

@ -72,7 +72,7 @@ class MeetingView extends GetView<MeetingController> {
//width: 130.w, //width: 130.w,
height: 48.w, height: 48.w,
margin: EdgeInsets.symmetric(vertical: 20.w), margin: EdgeInsets.symmetric(vertical: 20.w),
padding: EdgeInsets.symmetric(horizontal: 20.w), padding: EdgeInsets.symmetric(horizontal: 14.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: isDarkMode ? AppColors.primary : Colors.blue, color: isDarkMode ? AppColors.primary : Colors.blue,
borderRadius: BorderRadius.circular(12.w), borderRadius: BorderRadius.circular(12.w),
@ -129,7 +129,7 @@ class MeetingView extends GetView<MeetingController> {
Icons.edit_calendar, Icons.edit_calendar,
color: isDarkMode ? Colors.white : Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
), ),
'编辑', 'edit'.tr,// 编辑
isDarkMode ? Colors.white : Colors.black87, isDarkMode ? Colors.white : Colors.black87,
() { () {
controller.titleController.text = data.title; controller.titleController.text = data.title;
@ -138,7 +138,7 @@ class MeetingView extends GetView<MeetingController> {
), ),
_popupMenuEntry( _popupMenuEntry(
const Icon(Icons.delete_outline, color: Colors.red), const Icon(Icons.delete_outline, color: Colors.red),
'删除', 'delete'.tr,// 删除
isDarkMode ? Colors.white : Colors.black87, isDarkMode ? Colors.white : Colors.black87,
() { () {
controller.deleteMeeting(data.id); controller.deleteMeeting(data.id);
@ -197,7 +197,7 @@ class MeetingView extends GetView<MeetingController> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
data.content.isNotEmpty ? data.content : '无内容', data.content.isNotEmpty ? data.content : 'noContent'.tr,// 无内容
style: TextStyle( style: TextStyle(
color: isDarkMode ? Colors.white70 : Colors.black54, color: isDarkMode ? Colors.white70 : Colors.black54,
fontSize: 12.sp, fontSize: 12.sp,
@ -298,7 +298,7 @@ class MeetingView extends GetView<MeetingController> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
id != null ? '修改会议标题(非必填)' : '会议标题(非必填)', id != null ? 'editMeetingTitle'.tr : 'meetingTitle'.tr, // 编辑会议标题
style: TextStyle( style: TextStyle(
color: isDarkMode ? Colors.white : Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
fontSize: 16.sp, fontSize: 16.sp,
@ -330,7 +330,7 @@ class MeetingView extends GetView<MeetingController> {
fontSize: 16.sp, fontSize: 16.sp,
), ),
decoration: InputDecoration( decoration: InputDecoration(
hintText: '最多50个字符', hintText: 'maxCharacters'.tr,
hintStyle: TextStyle( hintStyle: TextStyle(
color: isDarkMode ? Colors.white70 : Colors.black54, color: isDarkMode ? Colors.white70 : Colors.black54,
fontSize: 16.sp, fontSize: 16.sp,
@ -363,7 +363,7 @@ class MeetingView extends GetView<MeetingController> {
borderRadius: BorderRadius.circular(12.w), borderRadius: BorderRadius.circular(12.w),
), ),
child: Text( child: Text(
'取消', 'cancel'.tr,// 取消
style: TextStyle( style: TextStyle(
fontSize: 14.sp, fontSize: 14.sp,
color: color:
@ -381,7 +381,7 @@ class MeetingView extends GetView<MeetingController> {
} else { } else {
if (title.isEmpty) { if (title.isEmpty) {
title = title =
'${DateUtil.formatDateMs(time, format: DateFormats.y_mo_d)} 会议'; '${DateUtil.formatDateMs(time, format: DateFormats.y_mo_d)} ${'meeting'.tr}';
} }
Get.back(); Get.back();
Get.toNamed(Routes.meetingRecord, arguments: { Get.toNamed(Routes.meetingRecord, arguments: {
@ -398,7 +398,7 @@ class MeetingView extends GetView<MeetingController> {
borderRadius: BorderRadius.circular(12.w), borderRadius: BorderRadius.circular(12.w),
), ),
child: Text( child: Text(
'确定', 'confirm'.tr,// 确认
style: TextStyle( style: TextStyle(
color: Colors.white, color: Colors.white,
fontSize: 14.sp, fontSize: 14.sp,

3
lib/modules/settings/views/settings_view.dart

@ -674,7 +674,8 @@ class SettingsView extends GetView<SettingsController> {
'checkUpdates'.tr, 'checkUpdates'.tr,
style: TextStyle( style: TextStyle(
fontSize: 12.sp, fontSize: 12.sp,
color: isDarkMode ? Colors.blue[300] : Colors.blue[600], color:
isDarkMode ? Colors.blue[300] : Colors.blue[600],
), ),
overflow: TextOverflow.ellipsis, // 添加省略号 overflow: TextOverflow.ellipsis, // 添加省略号
maxLines: 1, // 限制为单行 maxLines: 1, // 限制为单行

12
lib/modules/timbre/views/timbre_view.dart

@ -32,7 +32,7 @@ class TimbreView extends GetView<TimbreController> {
onPressed: () => Get.back(), onPressed: () => Get.back(),
), ),
title: Text( title: Text(
'选择音色', 'selecttimbre'.tr, // 选择音色
style: TextStyle( style: TextStyle(
fontSize: 17.sp, fontSize: 17.sp,
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
@ -67,7 +67,7 @@ class TimbreView extends GetView<TimbreController> {
AlertDialog( AlertDialog(
backgroundColor: isDarkMode ? Colors.grey[900] : Colors.white, backgroundColor: isDarkMode ? Colors.grey[900] : Colors.white,
title: Text( title: Text(
'请朗读', 'pleaseRead'.tr, // 请大声朗读
style: TextStyle( style: TextStyle(
color: isDarkMode ? Colors.white : Colors.black87, color: isDarkMode ? Colors.white : Colors.black87,
), ),
@ -110,7 +110,7 @@ class TimbreView extends GetView<TimbreController> {
controller.completeRecorder(); controller.completeRecorder();
}, },
child: Text( child: Text(
'完成录制', 'completeRecording'.tr, // 完成录音
style: TextStyle( style: TextStyle(
color: isDarkMode color: isDarkMode
? Colors.red[300] ? Colors.red[300]
@ -124,15 +124,17 @@ class TimbreView extends GetView<TimbreController> {
); );
}, },
child: Container( child: Container(
width: 130.w, //width: 130.w,
height: 48.w, height: 48.w,
margin: EdgeInsets.symmetric(vertical: 20.w), margin: EdgeInsets.symmetric(vertical: 20.w),
padding: EdgeInsets.symmetric(horizontal: 14.w),
decoration: BoxDecoration( decoration: BoxDecoration(
color: isDarkMode ? AppColors.primary : Colors.blue, color: isDarkMode ? AppColors.primary : Colors.blue,
borderRadius: BorderRadius.circular(12.w), borderRadius: BorderRadius.circular(12.w),
), ),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisSize: MainAxisSize.min, // 添加这行使Row宽度自适应内容
//mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
const Icon(Icons.keyboard_voice, color: Colors.white), const Icon(Icons.keyboard_voice, color: Colors.white),
5.horizontalSpace, 5.horizontalSpace,

94
lib/modules/translation/views/translation_view.dart

@ -24,7 +24,7 @@ class TranslationView extends GetView<TranslationController> {
PreferredSizeWidget _buildAppBar(bool isDarkMode) { PreferredSizeWidget _buildAppBar(bool isDarkMode) {
return AppBar( return AppBar(
backgroundColor: isDarkMode ? AppColors.cardBackground : Colors.white, backgroundColor: isDarkMode ? AppColors.cardBackground : Colors.white,
elevation: 0, elevation: 1,
leading: IconButton( leading: IconButton(
icon: Icon( icon: Icon(
Icons.arrow_back_ios, Icons.arrow_back_ios,
@ -37,11 +37,59 @@ class TranslationView extends GetView<TranslationController> {
Get.back(); Get.back();
}, },
), ),
title: Row( title: Text(
mainAxisSize: MainAxisSize.min, 'simultaneousTranslation'.tr,// 实时翻译
style: TextStyle(
fontSize: 18.sp,
fontWeight: FontWeight.w600,
color: isDarkMode ? Colors.white : Colors.black,
),
),
centerTitle: true,
actions: [
// TTS toggle button
Obx(() => IconButton(
icon: Icon(
controller.isTtsEnabled.value
? Icons.volume_up
: Icons.volume_off,
color: isDarkMode ? Colors.white : Colors.black,
size: 24.sp,
),
onPressed: controller.toggleTts,
tooltip: '自动播放翻译结果',
)),
// 历史记录按钮
IconButton(
icon: Icon(
Icons.history,
color: isDarkMode ? Colors.white : Colors.black,
size: 24.sp,
),
onPressed: () async {
// 停止语音识别和TTS,释放资源
await controller.stopAll();
await Get.to(
() => const TranslationHistoryView(),
binding: TranslationHistoryBinding(),
);
// 返回时不自动开始翻译,只需重新设置滚动监听器
controller.setupScrollListener();
},
tooltip: '查看历史记录',
),
],
bottom: PreferredSize(
preferredSize: Size.fromHeight(50.h),
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 8.h),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
// 源语言选择 // 源语言选择
Flexible( Expanded(
child: GestureDetector( child: GestureDetector(
onTap: () => _showLanguageSelectionDialog(true, isDarkMode), onTap: () => _showLanguageSelectionDialog(true, isDarkMode),
child: Container( child: Container(
@ -60,6 +108,7 @@ class TranslationView extends GetView<TranslationController> {
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: isDarkMode ? Colors.white : Colors.black, color: isDarkMode ? Colors.white : Colors.black,
), ),
textAlign: TextAlign.center,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
)), )),
), ),
@ -87,7 +136,7 @@ class TranslationView extends GetView<TranslationController> {
), ),
// 目标语言选择 // 目标语言选择
Flexible( Expanded(
child: GestureDetector( child: GestureDetector(
onTap: () => _showLanguageSelectionDialog(false, isDarkMode), onTap: () => _showLanguageSelectionDialog(false, isDarkMode),
child: Container( child: Container(
@ -106,6 +155,7 @@ class TranslationView extends GetView<TranslationController> {
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
color: isDarkMode ? Colors.white : Colors.black, color: isDarkMode ? Colors.white : Colors.black,
), ),
textAlign: TextAlign.center,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
)), )),
), ),
@ -113,42 +163,8 @@ class TranslationView extends GetView<TranslationController> {
), ),
], ],
), ),
centerTitle: true,
actions: [
// TTS toggle button
Obx(() => IconButton(
icon: Icon(
controller.isTtsEnabled.value
? Icons.volume_up
: Icons.volume_off,
color: isDarkMode ? Colors.white : Colors.black,
size: 24.sp,
), ),
onPressed: controller.toggleTts,
tooltip: '自动播放翻译结果',
)),
// 历史记录按钮
IconButton(
icon: Icon(
Icons.history,
color: isDarkMode ? Colors.white : Colors.black,
size: 24.sp,
),
onPressed: () async {
// 停止语音识别和TTS,释放资源
await controller.stopAll();
await Get.to(
() => const TranslationHistoryView(),
binding: TranslationHistoryBinding(),
);
// 返回时不自动开始翻译,只需重新设置滚动监听器
controller.setupScrollListener();
},
tooltip: '查看历史记录',
), ),
],
); );
} }

Loading…
Cancel
Save