新增多语言转换 mqtt支持websocket
This commit is contained in:
68
lib/base/language/Language.dart
Normal file
68
lib/base/language/Language.dart
Normal file
@@ -0,0 +1,68 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
8
lib/base/language/extensions/StringExt.dart
Normal file
8
lib/base/language/extensions/StringExt.dart
Normal file
@@ -0,0 +1,8 @@
|
||||
import '../Language.dart';
|
||||
|
||||
extension StringTransform on String {
|
||||
String tr({Map<String, String>? params, String? languageCode}) {
|
||||
return Language.getTranslation(this,
|
||||
params: params, languageCode: languageCode);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user