diff --git a/lib/core/translations/language/en_us.dart b/lib/core/translations/language/en_us.dart index 0a9131262..9f9ec4524 100644 --- a/lib/core/translations/language/en_us.dart +++ b/lib/core/translations/language/en_us.dart @@ -198,29 +198,29 @@ const Map enUS = { "popularFunction": "Popular Features", "tryNow": "Try Now", - // Goods screens (AI/Translation/Meeting) + // 商品页面(AI/翻译/会议) 'availablePackages': 'Available Packages', 'remainingQuota': 'Remaining Quota', 'totalCount': 'Total Count', 'remaining': 'Remaining', 'featureDescription': 'Feature Description', - // AI feature cards + // AI 功能卡片 'musicAndRecommendation': 'Music & Recommendation', 'navigationAndRoutes': 'Navigation & Routes', 'nearbySearch': 'Nearby Search', 'newsInformation': 'News', 'communicationAssistant': 'Communication Assistant', - // Translation feature cards + // 翻译功能卡片 'realtimeTranscription': 'Real-time Transcription', // 'textTranslation' exists 'sceneLexicon': 'Scenario Glossary', 'subtitleDisplay': 'Subtitles', - // Meeting feature cards + // 会议功能卡片 'meetingRecording': 'Meeting Recording', 'transcriptionAndSummary': 'Transcription & Summary', 'keywordSearch': 'Keyword Search', 'collaborationSharing': 'Collaboration & Sharing', - // Goods names by id + // 商品名称(按ID) 'ai_001_name': 'AI Basic 100', 'ai_002_name': 'AI Basic 500', 'ai_003_name': 'AI Basic 1000', @@ -231,7 +231,7 @@ const Map enUS = { 'trade_002_name': 'Translation Basic 500', 'trade_003_name': 'Translation Basic 1000', - // Goods descriptions by id + // 商品描述(按ID) 'ai_001_desc': 'Includes 100 uses. Access core AI features.', 'ai_002_desc': 'Includes 500 uses. Access core AI features.', 'ai_003_desc': 'Includes 1000 uses. Access core AI features.', @@ -242,12 +242,12 @@ const Map enUS = { 'trade_002_desc': 'Includes 500 translations (voice/text).', 'trade_003_desc': 'Includes 1000 translations (voice/text).', - // Goods pages common footer + // 商品页通用页脚 'appNameProvider': 'App: VoiTrans · Provided by: VoiTrans', 'moreInfoViewInSettingsAbout': 'For more info, go to Settings > About', 'copyrightVoiTrans': '© 2025 VoiTrans', - // Meeting goods page descriptions + // 会议商品页描述 'meetingHeaderDesc1': 'Audio recording, transcription, keyword search, and auto summary to boost meeting efficiency.', 'meetingHeaderDesc2': @@ -263,7 +263,7 @@ const Map enUS = { 'meetingDisclaimer': 'Use in quiet environments; performance depends on microphone and network.', - // Translation goods page descriptions + // 同传/翻译商品页描述 'tradeHeaderDesc1': 'Real-time simultaneous interpretation and text translation with low-latency voice.', 'tradeHeaderDesc2': 'Suitable for travel, business, speeches, and teaching.', @@ -279,7 +279,7 @@ const Map enUS = { 'tradeDisclaimer': 'Translation performance depends on microphone, network latency, and ambient noise.', - // AI goods page descriptions + // AI 商品页描述 'aiHeaderDesc1': 'Longer conversation quota, more tool calls, extended context length.', 'aiHeaderDesc2': @@ -302,7 +302,7 @@ const Map enUS = { 'aiDisclaimer': 'Features depend on device permissions, service availability, and network conditions.', - // VIP goods page + // 会员商品页 'benefitsOverview': 'Benefits overview', 'higherQuota': 'Higher usage quota', 'lowerUnitPrice': 'Lower unit price', @@ -318,7 +318,7 @@ const Map enUS = { 'vipDisclaimer': 'Actual benefits depend on the package details and may change with versions.', - // Onboarding / Guide + // 新手引导 / Onboarding 'skip': 'Skip', 'next': 'Next', 'sayLilyHint': 'Say "Lily Lily" to the mic', @@ -329,7 +329,7 @@ const Map enUS = { 'guideAwakenSuccess': 'Great! Lily is awake—ask it to help.', 'confirmInput': 'Confirm Input', 'guideClickSendPrefix': 'Tap send, ', - // AI steps + // AI 引导步骤 'guideWeatherStart': 'Tell Lily: “What’s the weather today?”', 'guideWeatherInput': 'What’s the weather today?', 'guideWeatherSend': 'Lily will report the weather in real time', @@ -709,19 +709,9 @@ const Map enUS = { "voice_interrupt": "Interrupt", // 语音打断 // 预设提示词 - "presetMusic": "Play some music", // Play some music - "presetNavigation": "Navigation to", // Navigation - // First bind rewards dialog - "firstBindRewardTitle": "Welcome Reward", - "firstBindRewardDesc": "You've received binding rewards.", - "vipLevelLabel": "VIP Level:", - "expiryLabel": "Expiration:", - "notActivated": "Not activated", - "aiChatCreditsLabel": "AI Chat Credits:", - "translationCreditsLabel": "Translation Credits:", - "meetingCreditsLabel": "Meeting Credits:", - "ok": "OK", - "presetWeather": "Today's weather", // Weather + "presetMusic": "Play some music", + "presetNavigation": "Navigation to", + "presetWeather": "Today's weather", "presetNews": "Today's news", // News "presetFood": "Nearby food", // Food "playSomeMusic": "Play some popular music", // 播放一些流行音乐 @@ -776,7 +766,7 @@ const Map enUS = { //Message_bubble 'generatedByAi': 'Generated by AI', - //music_card + //音乐卡片 music_card 'recommendedMusic': 'Here are some recommended music:', 'playList': 'Playlist', 'moreMusic': 'More music', @@ -791,10 +781,10 @@ const Map enUS = { 'currentLocation': 'Current Location', // 当前位置 'approximate': 'About ', // 大约 'enterRoad': ' enter ', // 进入道路 - "driving": "Driving", - "walking": "Walking", - "bicycling": "Cycling", - "tsransit": "Transit", + "driving": "Driving", // 驾驶 + "walking": "Walking", // 步行 + "bicycling": "Cycling", // 骑行 + "tsransit": "Transit", // 公交 //天气卡片 weather_card 'weatherQuery': 'Weather Query:', @@ -826,6 +816,17 @@ const Map enUS = { "friday": "Fri", "saturday": "Sat", "sunday": "Sun", + // First bind rewards dialog + "firstBindRewardTitle": "Welcome Reward", + "firstBindRewardDesc": "You've received binding rewards.", + "vipLevelLabel": "VIP Level:", + "expiryLabel": "Expiration:", + "notActivated": "Not activated", + "aiChatCreditsLabel": "AI Chat Credits:", + "translationCreditsLabel": "Translation Credits:", + "meetingCreditsLabel": "Meeting Credits:", + "ok": "OK", + // 天气描述 "sunny": "Sunny", "partlyCloudy": "Partly Cloudy", @@ -1155,7 +1156,7 @@ const Map enUS = { "pictureTranslation": "Picture Translation", "textTranslation": "Text Translation", - // 翻译主页 + // 翻译主页 (translation_view.dart) "translationHistory": "Translation History", "enableRecording": "Enable Recording", "viewAudioFiles": "View Audio Files", @@ -1180,7 +1181,7 @@ const Map enUS = { "deleteSessionConfirm": "Are you sure you want to delete all translation records for this session? This action cannot be undone.", - // 翻译音频文件列表页 + // 翻译录音文件列表页 "translateAudioFiles": "Translate Audio Files", "noAudioFiles": "No audio files", "calculating": "Calculating...", @@ -1389,11 +1390,12 @@ const Map enUS = { "justNow": "Just now", "minutesAgo": "@minutes minutes ago", "yesterday": "Yesterday", + //补充 "insufficientIntegral": "Insufficient integral", //余额不足弹窗 - 'recharge': 'Go to Recharge', - 'insufficientBalanceDesc': + "insufficientBalanceDesc": 'Insufficient balance, please go to the corresponding recharge page to recharge.', + "recharge": 'Go to Recharge', }; diff --git a/lib/core/translations/language/zh_cn.dart b/lib/core/translations/language/zh_cn.dart index 332179f96..763f1adfc 100644 --- a/lib/core/translations/language/zh_cn.dart +++ b/lib/core/translations/language/zh_cn.dart @@ -235,6 +235,69 @@ const Map zhCN = { 'trade_002_desc': '含 500 次翻译(语音/文本)', 'trade_003_desc': '含 1000 次翻译(语音/文本)', +// 商品页通用页脚 + 'appNameProvider': '应用名称:VoiTrans · 服务提供:VoiTrans', + 'moreInfoViewInSettingsAbout': '更多信息请前往 设置 > 关于 查看', + 'copyrightVoiTrans': '© 2025 VoiTrans', + + // 会议商品页描述 + 'meetingHeaderDesc1': '录音转写、关键词检索与自动总结,提升会议效率。', + 'meetingHeaderDesc2': '适用于商务会议、课堂笔记、访谈纪要等场景。', + 'meetingAutoRecording': '自动录音与分段', + 'meetingSpeakerTagging': '讲话人标注', + 'meetingLongAudioTranscription': '长音频转写', + 'meetingKeyPointSummary': '关键要点提炼', + 'meetingTopicNameSearch': '按主题/人名检索', + 'meetingTimelineJump': '时间线跳转', + 'meetingExportSummary': '导出纪要', + 'meetingMultiPlatformShare': '多平台分享', + 'meetingDisclaimer': '建议在安静环境使用,效果受麦克风与网络影响,具体以实际表现为准。', + + // 同传/翻译商品页描述 + 'tradeHeaderDesc1': '多语种实时同传与文本翻译,低延时语音播报。', + 'tradeHeaderDesc2': '适用于出行、商务、演讲与教学等场景。', + 'translateZhEn': '中英互译', + 'lowLatencyVoiceBroadcast': '低延时语音播报', + 'multiLangTextTranslation': '多语种文本翻译', + 'termOptimizationContextPreserve': '术语优化与语境保持', + 'lexiconTourBusinessLife': '旅游/商务/生活词库', + 'personalVocabularyMemory': '专属词汇记忆', + 'conversationSubtitleLargeText': '对话字幕/大字模式', + 'colorHighContrast': '颜色高对比度', + 'tradeDisclaimer': '翻译效果受麦克风、网络时延与环境噪声影响,具体以实际表现为准。', + + // AI 商品页描述 + 'aiHeaderDesc1': '更长对话额度、更多工具调用、更强上下文长度支持。', + 'aiHeaderDesc2': '适用于智能体问答、总结分析、任务执行等场景。', + 'musicSearchPlaybackControl': '检索曲库、播放控制', + 'smartPlaylistAndSimilarRecommendations': '智能推荐歌单与相似歌曲', + 'routePlanningAndCongestionAvoidance': '路线规划与拥堵规避', + 'voiceBroadcastAndWaypoints': '语音播报与途径点设置', + 'realTimeWeatherForecast': '实时天气与预报', + 'clothingAdviceAndTravelReminders': '穿衣建议与出行提醒', + 'poiSearchFoodGasParking': '餐饮/加油/停车等地点检索', + 'ratingsHoursAndDirectRoutes': '评分、营业时间与路线直达', + 'hotNewsAndTopicOverview': '热点快讯与专题速览', + 'longArticleSummariesAndKeyPoints': '长文总结与要点提炼', + 'helpCallAndSMS': '帮忙拨打电话与发短信', + 'templatedMessagesAndScheduleReminders': '模板消息与日程提醒', + 'aiDisclaimer': '以上功能受设备权限、服务可用性与网络状况影响,具体以实际表现为准。', + + // 会员商品页 + 'benefitsOverview': '权益总览', + 'higherQuota': '更高使用额度', + 'lowerUnitPrice': '更低单价', + 'priorityService': '优先服务', + 'exclusiveSupportChannel': '专属客服通道', + 'fastResponse': '问题快速响应', + 'eventsAndDiscounts': '活动与折扣', + 'memberExclusiveEvents': '会员专属活动', + 'longTermDiscountPlan': '长期优惠计划', + 'generalPrivileges': '通用特权', + 'earlyAccessNewFeatures': '新功能优先体验', + 'crossDeviceSync': '跨设备同步', + 'vipDisclaimer': '具体权益以实际套餐说明为准,可能随版本迭代调整。', + // 新手引导 / Onboarding 'skip': '跳过', 'next': '下一步', @@ -704,6 +767,7 @@ const Map zhCN = { "translationCreditsLabel": "Translation Credits:", "meetingCreditsLabel": "Meeting Credits:", "ok": "OK", + // 天气描述 "sunny": "晴", "partlyCloudy": "少云", @@ -1004,14 +1068,14 @@ const Map zhCN = { "phoneUser": "手机用户", "selectSourceLanguage": "选择源语言", "selectTargetLanguage": "选择目标语言", - "me": "我", //我 - "counterPart": "对方", //对方 + "me": "我", + "counterPart": "对方", // 通用对话按钮与选项(用于统一语言选择弹窗等) // 以下翻译键的中文文本内容如注释所示 "autoDetect": "自动检测", // 自动检测 - // 翻译历史页 (translation_history_view.dart) + // 翻译历史页 "noTranslationHistory": "暂无历史记录", "clearHistory": "清除历史记录", "clearHistoryConfirm": "确定要清除所有翻译历史记录吗?此操作无法撤销。", @@ -1019,7 +1083,7 @@ const Map zhCN = { "deleteSessionRecord": "删除会话记录", "deleteSessionConfirm": "确定要删除该会话的所有翻译记录吗?此操作无法撤销。", - // 翻译录音文件列表页 (translation_list_view.dart) + // 翻译录音文件列表页 "translateAudioFiles": "翻译录音文件", "noAudioFiles": "暂无音频文件", "calculating": "计算中...", @@ -1213,69 +1277,6 @@ const Map zhCN = { //补充 "insufficientIntegral": "积分不足", - // 商品页通用页脚 - 'appNameProvider': '应用名称:VoiTrans · 服务提供:VoiTrans', - 'moreInfoViewInSettingsAbout': '更多信息请前往 设置 > 关于 查看', - 'copyrightVoiTrans': '© 2025 VoiTrans', - - // 会议商品页描述 - 'meetingHeaderDesc1': '录音转写、关键词检索与自动总结,提升会议效率。', - 'meetingHeaderDesc2': '适用于商务会议、课堂笔记、访谈纪要等场景。', - 'meetingAutoRecording': '自动录音与分段', - 'meetingSpeakerTagging': '讲话人标注', - 'meetingLongAudioTranscription': '长音频转写', - 'meetingKeyPointSummary': '关键要点提炼', - 'meetingTopicNameSearch': '按主题/人名检索', - 'meetingTimelineJump': '时间线跳转', - 'meetingExportSummary': '导出纪要', - 'meetingMultiPlatformShare': '多平台分享', - 'meetingDisclaimer': '建议在安静环境使用,效果受麦克风与网络影响,具体以实际表现为准。', - - // 同传/翻译商品页描述 - 'tradeHeaderDesc1': '多语种实时同传与文本翻译,低延时语音播报。', - 'tradeHeaderDesc2': '适用于出行、商务、演讲与教学等场景。', - 'translateZhEn': '中英互译', - 'lowLatencyVoiceBroadcast': '低延时语音播报', - 'multiLangTextTranslation': '多语种文本翻译', - 'termOptimizationContextPreserve': '术语优化与语境保持', - 'lexiconTourBusinessLife': '旅游/商务/生活词库', - 'personalVocabularyMemory': '专属词汇记忆', - 'conversationSubtitleLargeText': '对话字幕/大字模式', - 'colorHighContrast': '颜色高对比度', - 'tradeDisclaimer': '翻译效果受麦克风、网络时延与环境噪声影响,具体以实际表现为准。', - - // AI 商品页描述 - 'aiHeaderDesc1': '更长对话额度、更多工具调用、更强上下文长度支持。', - 'aiHeaderDesc2': '适用于智能体问答、总结分析、任务执行等场景。', - 'musicSearchPlaybackControl': '检索曲库、播放控制', - 'smartPlaylistAndSimilarRecommendations': '智能推荐歌单与相似歌曲', - 'routePlanningAndCongestionAvoidance': '路线规划与拥堵规避', - 'voiceBroadcastAndWaypoints': '语音播报与途径点设置', - 'realTimeWeatherForecast': '实时天气与预报', - 'clothingAdviceAndTravelReminders': '穿衣建议与出行提醒', - 'poiSearchFoodGasParking': '餐饮/加油/停车等地点检索', - 'ratingsHoursAndDirectRoutes': '评分、营业时间与路线直达', - 'hotNewsAndTopicOverview': '热点快讯与专题速览', - 'longArticleSummariesAndKeyPoints': '长文总结与要点提炼', - 'helpCallAndSMS': '帮忙拨打电话与发短信', - 'templatedMessagesAndScheduleReminders': '模板消息与日程提醒', - 'aiDisclaimer': '以上功能受设备权限、服务可用性与网络状况影响,具体以实际表现为准。', - - // 会员商品页 - 'benefitsOverview': '权益总览', - 'higherQuota': '更高使用额度', - 'lowerUnitPrice': '更低单价', - 'priorityService': '优先服务', - 'exclusiveSupportChannel': '专属客服通道', - 'fastResponse': '问题快速响应', - 'eventsAndDiscounts': '活动与折扣', - 'memberExclusiveEvents': '会员专属活动', - 'longTermDiscountPlan': '长期优惠计划', - 'generalPrivileges': '通用特权', - 'earlyAccessNewFeatures': '新功能优先体验', - 'crossDeviceSync': '跨设备同步', - 'vipDisclaimer': '具体权益以实际套餐说明为准,可能随版本迭代调整。', - //余额不足弹窗 "insufficientBalanceDesc": "餘額不足,請前往對應充值界面進行充值", "recharge": "前往充值", diff --git a/lib/modules/agent/views/agent_view.dart b/lib/modules/agent/views/agent_view.dart index de44eccd2..cfe91e808 100644 --- a/lib/modules/agent/views/agent_view.dart +++ b/lib/modules/agent/views/agent_view.dart @@ -130,8 +130,8 @@ class _AgentViewState extends State with WidgetsBindingObserver { vipexptime * 1000); } final text = expiry != null - ? '到期时间: ${DateFormat('yyyy-MM-dd').format(expiry)}' - : '未开启'; + ? '${'expiryLabel'.tr}${DateFormat('yyyy-MM-dd').format(expiry)}' + : 'notActivated'.tr; return Text( text, style: TextStyle( diff --git a/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart b/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart index 7d2b276ed..be5f16eb9 100644 --- a/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart +++ b/lib/modules/meeting/views/bottomSheet/share_bottom_sheet.dart @@ -10,11 +10,12 @@ import 'package:get_storage/get_storage.dart'; import 'package:htmltopdfwidgets/htmltopdfwidgets.dart' as pdf; import 'package:path_provider/path_provider.dart'; import 'package:share_plus/share_plus.dart'; -import 'package:voitrans/data/services/network/dio_manager.dart'; + import 'package:webview_flutter/webview_flutter.dart'; import '../../../../core/utils/synchrodata.dart'; import '../../../../data/services/version_update_service.dart'; +import '../../../../data/services/network/dio_manager.dart'; import '../../controllers/meeting_details_controller.dart'; import '../../controllers/mind_map_controller.dart'; import 'second_level_bottom_sheet.dart'; diff --git a/lib/modules/translation/middleware/controllers/translation_middleware_controller.dart b/lib/modules/translation/middleware/controllers/translation_middleware_controller.dart index ac7d4dbfa..bf4202e54 100644 --- a/lib/modules/translation/middleware/controllers/translation_middleware_controller.dart +++ b/lib/modules/translation/middleware/controllers/translation_middleware_controller.dart @@ -75,16 +75,16 @@ class TranslationMiddlewareController extends GetxController { iconColor: Colors.indigo[500]!, // 主靛 targetRoute: Routes.textTranslation, ), - TranslationOption( - translationId: 'voice_replication', - title: '声音复刻', - icon: Icons.volume_up, - startColor: Colors.pink[400]!, // 粉色 - endColor: Colors.pink[600]!, // 深粉 - iconBgColor: Colors.white, // 白色 - iconColor: Colors.pink[500]!, // 主粉 - targetRoute: Routes.voiceReplication, - ), + // TranslationOption( + // translationId: 'voice_replication', + // title: '声音复刻', + // icon: Icons.volume_up, + // startColor: Colors.pink[400]!, // 粉色 + // endColor: Colors.pink[600]!, // 深粉 + // iconBgColor: Colors.white, // 白色 + // iconColor: Colors.pink[500]!, // 主粉 + // targetRoute: Routes.voiceReplication, + // ), ]; /// 导航到指定的翻译功能