import 'dart:convert'; import 'dart:io'; class Language { static final String defalutLocale = "zh_CN"; static final Map> _translations = {}; static void setLanguage(String locale, {String? path, Map? language}) { //载入json文件 if (path != null) { try { //暂时只支持本地文件 var file = File(path); file.readAsString().then((data) { _translations[locale] = _flattenJson(jsonDecode(data)); }); } catch (e) { print(e); } return; } if (language != null) { //构建翻译kv _translations[locale] = _flattenJson(language); } } // 扁平化嵌套 JSON 数据 static 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; } static void resetLanguage({String? locale}) { if (locale == null) { //清空全部语言文件 _translations.clear(); } else { //清空指定语言文件 _translations.remove(locale); } } static String getTranslation(String key, {String? languageCode, Map? params}) { var locale = languageCode ?? defalutLocale; String text = _translations[locale]?[key] ?? key; // 替换动态参数(如 @name) params?.forEach((key, value) { text = text.replaceAll('@$key', value); }); return text; } }