Files
tuiche/lib/language/AppLanguage.dart
2025-04-11 08:47:46 +08:00

64 lines
1.7 KiB
Dart

import 'dart:convert';
import 'package:ef/ef.dart';
import 'package:flutter/services.dart';
class AppLanguage extends Translations {
// 私有构造函数
AppLanguage._internal();
// 单例实例
static final AppLanguage _instance = AppLanguage._internal();
factory AppLanguage() => _instance;
// 缓存翻译数据
final Map<String, Map<String, String>> _localizedValues = {};
@override
Map<String, Map<String, String>> get keys => _localizedValues;
// 动态加载语言文件
Future<void> loadLanguage(String languageCode) async {
if (_localizedValues.containsKey(languageCode)) {
return; // 如果语言已经加载,无需重复加载
}
try {
// 加载 JSON 文件
final jsonString =
await rootBundle.loadString('assets/langs/$languageCode.json');
final Map<String, dynamic> jsonMap = json.decode(jsonString);
// 扁平化 JSON 数据并存储到缓存
_localizedValues[languageCode] = _flattenJson(jsonMap);
// 通知 GetX 更新 keys
// Get.forceAppUpdate();
Get.appendTranslations(keys);
} catch (e) {
print('Error loading $languageCode language file: $e');
}
}
// 扁平化嵌套 JSON 数据
Map<String, String> _flattenJson(Map<String, dynamic> json,
[String prefix = '']) {
final Map<String, String> flatMap = {};
json.forEach((key, value) {
final newKey = prefix.isEmpty ? key : '$prefix.$key';
if (value is Map<String, dynamic>) {
flatMap.addAll(_flattenJson(value, newKey));
} else {
flatMap[newKey] = value.toString();
}
});
return flatMap;
}
// 清理语言缓存
void clearLanguage(String languageCode) {
_localizedValues.remove(languageCode);
}
}