gen*_*ser 4 firebase flutter firebase-remote-config google-cloud-firestore flutter-localizations
我想创建一个 Flutter 应用程序,它将根据用户设备本地化支持不同的语言。
我想通过 Firebase 远程配置存储所有翻译文本。这样,远程更改将适用于所有用户,而无需更新应用程序。
现在,我的应用程序可以根据官方文档进行本地化。但这样所有文本都是硬编码的,因此用户必须更新应用程序才能获得新的文本更改。
我读过一篇关于创建自定义的文章LocalizationsDelegate,也许这样我就可以从 Firebase 和运行时加载所有文本。
我还阅读了有关easy_localization包的信息,但不幸的是,它似乎仅支持开箱即用的硬编码文本。
在 Firebase 配置中实现动态本地化的最佳方法是什么?
我希望有一个例子
您可以使用easy_localizationAssetLoader包并创建支持 Firebase 远程配置资产的自定义。
我已在 Firebase 远程配置项目中为每种支持的语言创建了 JSON 参数。
然后我创建了一个RemoteConfigAssetLoader扩展 easy_localiztion 类的类AssetLoader:
import 'dart:convert';
import 'dart:ui';
import 'package:easy_localization/easy_localization.dart';
import 'package:firebase_remote_config/firebase_remote_config.dart';
import 'package:get_it/get_it.dart';
final _remoteConfig = GetIt.I.get<FirebaseRemoteConfig>(); // A remoteConfig instance. You can get it also as a class parameter.
/// Loads [FirebaseRemoteConfig] translations based on users' device local.
class RemoteConfigAssetLoader extends AssetLoader {
@override
Future<Map<String, dynamic>> load(String path, Locale locale) async {
final remoteConfigKey = locale.languageCode;
final languageData = _remoteConfig.getString(remoteConfigKey);
return jsonDecode(languageData) as Map<String, dynamic>;
}
}
Run Code Online (Sandbox Code Playgroud)
然后只需使用您的自定义函数配置您的应用 EasyLocalizationRemoteConfigAssetLoader:
import 'util/remote_config_asset_loader.dart';
...
void main(){
runApp(EasyLocalization(
child: MyApp(),
supportedLocales: [Locale('en'), Locale('es')],
path: 'IgnoreThisPath', // The path parameter is unnecessary when using the RemoteConfig singleton.
assetLoader: RemoteConfigAssetLoader()
));
}
...
Run Code Online (Sandbox Code Playgroud)
就是这样!现在,您的 EasyLocalization 会从 Firebase RemoteConfig 加载其翻译。
| 归档时间: |
|
| 查看次数: |
1814 次 |
| 最近记录: |