Files
easy_dart_module/lib/base/language/Language.dart

69 lines
1.7 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'dart:convert';
import 'dart:io';
class Language {
static final String defalutLocale = "zh_CN";
static final Map<String, Map<String, String>> _translations = {};
static void setLanguage(String locale,
{String? path, Map<String, String>? 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<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;
}
static void resetLanguage({String? locale}) {
if (locale == null) {
//清空全部语言文件
_translations.clear();
} else {
//清空指定语言文件
_translations.remove(locale);
}
}
static String getTranslation(String key,
{String? languageCode, Map<String, String>? params}) {
var locale = languageCode ?? defalutLocale;
String text = _translations[locale]?[key] ?? key;
// 替换动态参数(如 @name
params?.forEach((key, value) {
text = text.replaceAll('@$key', value);
});
return text;
}
}