首页 > 解决方案 > Flutter 国际化 intl_translate

问题描述

我正在尝试添加一种新语言来颤振,因为默认情况下不支持它。

我已将翻译的语言文件 material_dv.arb 添加到 flutter/packages/flutter_localizations/lib/src/l10n 并运行代码dart dev/tools/gen_localizations.dart --overwrite以生成本地化和日期本地化 dart 文件,但是当我尝试将语言环境更改为新添加的语言环境 dv 时仍然出现错误出现说不支持语言环境。那么我在这里做错了什么。或者我如何继续添加新语言来颤振..

标签: flutter

解决方案


使用Localizations与 a 结合的类LocalizationDelegate

   class MyLocalizations {
   MyLocalizations(this.locale);

   final Locale locale;

   static Map<String, Map<String, String>> _localizedValues = {
     'en': {
       'Title': 'App',
      },
     'ar': {
       'Title' : 'التطبيق',
      },
   };

   String translate(key) {
     return _localizedValues[locale.languageCode][key];
   }

   static String of(BuildContext context, String key) {
   return Localizations.of<MyLocalizations>(context,
    MyLocalizations).translate(key);
   }
 }

然后LocalizationDelegate

  class MyLocalizationsDelegate extends LocalizationsDelegate<MyLocalizations> {

  const MyLocalizationsDelegate();

  @override
  bool isSupported(Locale locale) => ['en', 'ar'].contains(locale.languageCode);

  @override
  Future<MyLocalizations> load(Locale locale) {
    return SynchronousFuture<MyLocalizations> (MyLocalizations(locale));
  }

  @override
  bool shouldReload(MyLocalizationsDelegate old) => false;
}

本文提供了如何以更简单的方式在您的应用中实现国际化的完整指南,上面的代码片段来自该指南。


推荐阅读