本次提交包含多项迭代优化和问题修复: 1. 新增缩略图图片组件、数字格式化工具类,补充多语言翻译类型与本地化支持 2. 优化底部导航栏主题色统一使用动态accent色值 3. 修复多处图表动画、路由跳转、API请求相关问题 4. 简化服务器公告文案,调整默认分屏状态为关闭 5. 新增安卓/iOS桌面快捷方式配置 6. 重构多处状态管理类使用SafeNotifierInit统一异常保护 7. 替换硬编码蓝色为主题色,更新版本号获取方式为动态读取 8. 优化缓存预加载逻辑,移除无用代码 9. 调整默认设置项,优化用户体验细节
165 lines
3.9 KiB
Dart
165 lines
3.9 KiB
Dart
/// ============================================================
|
||
/// 闲言APP — 翻译解析器与Provider
|
||
/// 创建时间: 2026-05-29
|
||
/// 更新时间: 2026-05-29
|
||
/// 作用: 根据语言ID/系统语言解析翻译,提供Riverpod Provider
|
||
/// 上次更新: 从translations.dart拆分,引用改为公开语言常量
|
||
/// ============================================================
|
||
|
||
import 'package:flutter/widgets.dart';
|
||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||
|
||
import '../../features/mine/settings/providers/general_settings_provider.dart';
|
||
import 'types/t.dart';
|
||
import 'languages/zh_cn.dart';
|
||
import 'languages/en.dart';
|
||
import 'languages/ja.dart';
|
||
import 'languages/zh_tw.dart';
|
||
import 'languages/ko.dart';
|
||
import 'languages/de.dart';
|
||
import 'languages/it.dart';
|
||
import 'languages/es.dart';
|
||
import 'languages/ar.dart';
|
||
import 'languages/bn.dart';
|
||
import 'languages/hi.dart';
|
||
import 'languages/pt.dart';
|
||
import 'languages/ru.dart';
|
||
import 'languages/fr.dart';
|
||
import 't_func.dart';
|
||
|
||
/// 根据语言ID获取翻译映射
|
||
T getTranslations(String languageId) {
|
||
switch (languageId) {
|
||
case 'en':
|
||
return en;
|
||
case 'ja':
|
||
return ja;
|
||
case 'zh_TW':
|
||
return zhTW;
|
||
case 'ko':
|
||
return ko;
|
||
case 'de':
|
||
return de;
|
||
case 'it':
|
||
return it;
|
||
case 'es':
|
||
return es;
|
||
case 'ar':
|
||
return ar;
|
||
case 'bn':
|
||
return bn;
|
||
case 'hi':
|
||
return hi;
|
||
case 'pt':
|
||
return pt;
|
||
case 'ru':
|
||
return ru;
|
||
case 'fr':
|
||
return fr;
|
||
default:
|
||
return zhCN;
|
||
}
|
||
}
|
||
|
||
/// 解析系统语言对应的翻译
|
||
T _resolveSystemTranslations() {
|
||
final systemLocale = WidgetsBinding.instance.platformDispatcher.locale;
|
||
final langCode = systemLocale.languageCode;
|
||
final countryCode = systemLocale.countryCode;
|
||
if (langCode == 'zh') {
|
||
if (countryCode == 'TW' || countryCode == 'HK' || countryCode == 'MO') {
|
||
return zhTW;
|
||
}
|
||
return zhCN;
|
||
}
|
||
switch (langCode) {
|
||
case 'en':
|
||
return en;
|
||
case 'ja':
|
||
return ja;
|
||
case 'ko':
|
||
return ko;
|
||
case 'de':
|
||
return de;
|
||
case 'it':
|
||
return it;
|
||
case 'es':
|
||
return es;
|
||
case 'ar':
|
||
return ar;
|
||
case 'bn':
|
||
return bn;
|
||
case 'hi':
|
||
return hi;
|
||
case 'pt':
|
||
return pt;
|
||
case 'ru':
|
||
return ru;
|
||
case 'fr':
|
||
return fr;
|
||
default:
|
||
return zhCN;
|
||
}
|
||
}
|
||
|
||
/// 解析系统语言对应的语言ID
|
||
String _resolveSystemLanguageId() {
|
||
final systemLocale = WidgetsBinding.instance.platformDispatcher.locale;
|
||
final langCode = systemLocale.languageCode;
|
||
final countryCode = systemLocale.countryCode;
|
||
if (langCode == 'zh') {
|
||
if (countryCode == 'TW' || countryCode == 'HK' || countryCode == 'MO') {
|
||
return 'zh_TW';
|
||
}
|
||
return 'zh_CN';
|
||
}
|
||
switch (langCode) {
|
||
case 'en':
|
||
return 'en';
|
||
case 'ja':
|
||
return 'ja';
|
||
case 'ko':
|
||
return 'ko';
|
||
case 'de':
|
||
return 'de';
|
||
case 'it':
|
||
return 'it';
|
||
case 'es':
|
||
return 'es';
|
||
case 'ar':
|
||
return 'ar';
|
||
case 'bn':
|
||
return 'bn';
|
||
case 'hi':
|
||
return 'hi';
|
||
case 'pt':
|
||
return 'pt';
|
||
case 'ru':
|
||
return 'ru';
|
||
case 'fr':
|
||
return 'fr';
|
||
default:
|
||
return 'zh_CN';
|
||
}
|
||
}
|
||
|
||
/// 翻译Provider — 根据设置的语言ID提供翻译映射
|
||
final translationsProvider = Provider<T>((ref) {
|
||
final settings = ref.watch(generalSettingsProvider);
|
||
final languageId = settings.languageId;
|
||
if (languageId == 'system') {
|
||
return _resolveSystemTranslations();
|
||
}
|
||
return getTranslations(languageId);
|
||
});
|
||
|
||
/// 动态翻译函数Provider — 根据设置的语言ID提供TFunc实例
|
||
final translationsFuncProvider = Provider<TFunc>((ref) {
|
||
final settings = ref.watch(generalSettingsProvider);
|
||
final languageId = settings.languageId;
|
||
if (languageId == 'system') {
|
||
return TFunc(_resolveSystemLanguageId());
|
||
}
|
||
return TFunc(languageId);
|
||
});
|