flutter - 无法加载资产:/data/user/0/com.example.app/app_flutter/localization/en-IN.json 直到热重新加载
问题描述
我提供了ApplicationDocumentsDirectory
一个名为easy_localization: ^2.3.3
. 我曾经在运行时动态地将语言环境 json 文件放在应用程序目录中,这样每当用户更改语言时,我就可以调用翻译 API 获取结果并在应用程序目录中创建 json 文件并使用EasyLocalization.of(context).locale = Locale(langCode, cntryCode);
. 但是当我关闭并运行应用程序时,它显示无法加载资产,但是当我进行热重载时,它会在应用程序的下一次关闭时开始完美地工作。EasyLocalization
在设备资源管理器中,我可以看到在初始化和启动应用程序之前在应用程序目录中创建了区域设置 json 文件。但无法在首次运行时通过轻松本地化来加载这些语言环境文件。我正在启动我的应用程序,main()
如下所示。
EasyLocalization localization = EasyLocalization(
path: '$applicationDirPath/localization',
supportedLocales: [Locale('en', 'US'), Locale('de', 'DE'), Locale('hi', 'IN')],
fallbackLocale: Locale('en', 'IN'),
child: AppRootWidget());
runApp(localization);
解决方案
assetLoader
可以用来解决这种情况。如下将属性assetLoader 添加到EasyLocalization
EasyLocalization localization = EasyLocalization(
path: 'assets/localization',
supportedLocales: [Locale('en', 'US'), Locale('de', 'DE'), Locale('hi', 'IN')],
assetLoader: MyAssetLoader(),
fallbackLocale: Locale('en', 'IN'),
child: AppRootWidget());
您可以使用包中任何受支持的资产加载器,也可以easy_localization_loader
编写自己的资产加载器,如下所示。
class MyAssetLoader extends AssetLoader {
@override
Future<Map<String, dynamic>> load(String path, Locale locale) async {
//Assuming the source is in english and json
String sourceString = jsonEncode({"welcome": "Welcome","username":"User Name"}); // you can read the base source language from file and assign to sourceString here
if(locale.languageCode == 'ml') // Translation API can be implemented here by passing sourceString
String translatedRes = jsonEncode({"welcome": "സ്വാഗതം","username":"ഉപയോക്തൃനാമം"}); //Assuming this is the translated response
return json.decode(translatedRes);
}
}
并创建您的 AssetLoader 类,如下所示
abstract class AssetLoader {
const AssetLoader();
Future<Map<String, dynamic>> load(String path, Locale locale);
}
推荐阅读
- php - kinesis“getShardIterator”卡住了
- python - 为什么我会收到此错误?IndexError:列表索引超出范围
- python - 当涉及非常大的计算时,如何编写程序以显示“太大的结果”?
- bash - 匹配`sed`内方括号字符集中的`[`和`]`
- python - 有没有办法在 python 中重复 try 和 except 块?(找不到目标时出现属性错误)
- oop - 多态性与 switch case 的权衡
- javascript - 在文本节点之前插入文本节点而不在 Chrome 中合并
- python - 将 pygame 2d 水波纹转换为 pyOpenGL
- python-3.x - 如何显示广告横幅取决于日期时间?
- javascript - 如何将包含值、值的对象的数组转换为只有键、值的单个对象?