(1) yaml文件添加依赖
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
(2) 创建类文件:数据类
class YYYLocalizations {
YYYLocalizations(this.locale);
Locale? locale;
static YYYLocalizations of(BuildContext context) {
return Localizations.of(context, YYYLocalizations);
}
/// 国际化数据data字典
Map<String, Map<String, String>> data = {};
/// 从json中加载数据
Future<void> loadI18nJson() async {
String path = "assets/json/i18n.json";
final result = await rootBundle.loadString(path);
Map<String, dynamic> dataDict = json.decode(result);
data = dataDict.map((key, value) {
return MapEntry(key, value.cast<String, String>());
});
}
/// 手写对应字段的get方法
String? get title1 {
return data[locale?.languageCode]?["title1"];
}
String? get title2 {
return data[locale?.languageCode]?["title2"];
}
String? get title3 {
return data[locale?.languageCode]?["title3"];
}
String? get title4 {
return data[locale?.languageCode]?["title4"];
}
String? get title5 {
return data[locale?.languageCode]?["title5"];
}
}
(3) 创建类文件:代理delegate类
class YYYLocalizationDelegate extends LocalizationsDelegate<YYYLocalizations> {
static YYYLocalizationDelegate delegate = YYYLocalizationDelegate();
/// 支持的语言编码
@override
bool isSupported(Locale locale) {
return ["zh", "en"].contains(locale.languageCode);
}
/// 加载国际化数据并返回
@override
Future<YYYLocalizations> load(Locale locale) async {
YYYLocalizations localizations = YYYLocalizations(locale);
await localizations.loadI18nJson(); //异步加载数据
return localizations;
//return SynchronousFuture(YYYLocalizations(locale)); //同步本地数据
}
/// 是否重新加载数据资源
@override
bool shouldReload(covariant LocalizationsDelegate<YYYLocalizations> old) {
return false;
}
}
(4) MaterialApp中进行配置
MaterialApp(
supportedLocales: [
Locale('zh'),
Locale("en"),
],
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
YYYLocalizationDelegate.delegate, //手动创建的
],
);
(6) 不同界面中获取国际化配置的内容
YYYLocalizations.of(context).bottomBarTitle1;
YYYLocalizations.of(context).bottomBarTitle2;
YYYLocalizations.of(context).bottomBarTitle3;
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。