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> _localizedValues = {}; @override Map> get keys => _localizedValues; // 动态加载语言文件 Future loadLanguage(String languageCode) async { if (_localizedValues.containsKey(languageCode)) { return; // 如果语言已经加载,无需重复加载 } try { // 加载 JSON 文件 final jsonString = await rootBundle.loadString('assets/langs/$languageCode.json'); final Map 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 _flattenJson(Map json, [String prefix = '']) { final Map flatMap = {}; json.forEach((key, value) { final newKey = prefix.isEmpty ? key : '$prefix.$key'; if (value is Map) { flatMap.addAll(_flattenJson(value, newKey)); } else { flatMap[newKey] = value.toString(); } }); return flatMap; } // 清理语言缓存 void clearLanguage(String languageCode) { _localizedValues.remove(languageCode); } }