使用 Firebase 远程配置进行 Flutter 本地化

gen*_*ser 4 firebase flutter firebase-remote-config google-cloud-firestore flutter-localizations

我想创建一个 Flutter 应用程序,它将根据用户设备本地化支持不同的语言。

我想通过 Firebase 远程配置存储所有翻译文本。这样,远程更改将适用于所有用户,而无需更新应用程序。

现在,我的应用程序可以根据官方文档进行本地化。但这样所有文本都是硬编码的,因此用户必须更新应用程序才能获得新的文本更改。

我的研究

我读过一篇关于创建自定义的文章LocalizationsDelegate,也许这样我就可以从 Firebase 和运行时加载所有文本。

我还阅读了有关easy_localization包的信息,但不幸的是,它似乎仅支持开箱即用的硬编码文本。

问题

在 Firebase 配置中实现动态本地化的最佳方法是什么?

我希望有一个例子

gen*_*ser 7

问题解决了!

您可以使用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 加载其翻译。