首先Android studio安装插件flutter intl

安装完成后,选择tools-》flutterintl-》initialize for the project,初始化项目会生成几个文件如下:

Android 推送国际化 android studio国际化教程_应用程序


Android 推送国际化 android studio国际化教程_Android 推送国际化_02

会生成一个i10n的文件夹,里面有intl_en.zrb文件,里面是一个map,保存的是英文的国家化,如果需要添加新的字符,在这个文件修改即可,
还有一个generated文件夹,里面有i10n.dart,和messages.dart文件,这个有插件自动生成,这里的文件不要我们修改。
下面添加依赖库
将flutter_localizations和intl作为依赖项添加到您的pubspec.yaml文件中:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  intl: ^0.16.0

下面是代码的实现
接下来,导入flutter_localizations库,并指定MaterialApp的localizationsDelegates和supportedLocales

import ‘package:flutter_localizations/flutter_localizations.dart’;

//localizationsDelegates列表中的元素是生成本地化值集合的工厂。
//GlobalMaterialLocalizations.delegate 为Material //Components库提供了本地化的字符串和其他值。 //GlobalWidgetsLocalizations.delegate定义widget默认的文本方向,从左到右或从右到左。
//GlobalCupertinoLocalizations.delegate iOS国际化需要

我们只要在下面这里添加我们要的语言即可

new MaterialApp(
 localizationsDelegates: [
   GlobalMaterialLocalizations.delegate,
   GlobalWidgetsLocalizations.delegate,
   GlobalCupertinoLocalizations.delegate,
   DemoLocalizationsDelegate(),
 ],
 supportedLocales: [
    const Locale('en', 'US'), // English
    const Locale('zh', 'CN'), // Hebrew
  ],
)

DemoLocalizations类包含应用程序的字符串(仅用于示例),该字符串被翻译为应用程序支持的语言环境。 使用Dart的intl 包生成的函数initializeMessages()来加载翻译的字符串,并使用Intl.message()查找它们。

class DemoLocalizations {
  DemoLocalizations(this.locale);
static Future<DemoLocalizations> load(Locale locale) {
    final String name = locale.countryCode.isEmpty ? locale.languageCode : locale.toString();
    final String localeName = Intl.canonicalizedLocale(name);
    return initializeMessages(localeName).then((Null _) {
      Intl.defaultLocale = localeName;
      return new DemoLocalizations();
    });
  }

  static DemoLocalizations of(BuildContext context) {
    return Localizations.of<DemoLocalizations>(context, DemoLocalizations);
  }

  String get title {
    return Intl.message(
      'Hello World',
      name: 'title',
      desc: 'Title for the Demo application',
    );
  }

}


class DemoLocalizationsDelegate extends LocalizationsDelegate<DemoLocalizations> {
  const DemoLocalizationsDelegate();

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

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

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

使用DemoLocalizations.of(context).title

使用Dart intl工具

在使用Dart intl包构建API之前, 您需要查看intl包的文档。以下是根据intl软件包本地化应用程序的过程摘要。

示例程序依赖于一个生成的源文件l10n/messages_all.dart ,它定义了应用程序使用的所有本地化字符串。

重新构建 l10n/messages_all.dart 需要两个步骤.

将应用程序的根目录作为当前目录,从lib/main.dart生成l10n/intl_messages.arb

$ flutter pub pub run intl_translation:extract_to_arb --output-dir=lib/i10n lib/main.dart
该intl_messages.arb文件是一个JSON格式的map,拥有一个在main.dart中定义的Intl.message()函数入口。 此文件作为英语和西班牙语翻译的一个模板,intl_en.arb和intl_es.arb。这些翻译是由您,开发人员创建的。

使用应用程序的根目录作为当前目录,为每个intl_.arb文件生成intl_messages_.dart,并在intl_messages_all.dart中导入所有message文件:

$ flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/l10n
–no-use-deferred-loading lib/main.dart lib/l10n/intl_*.arb
DemoLocalizations类使用生成的initializeMessages() 函数(定义在intl_messages_all.dart)来加载本地化的message并使用Intl.message()来查找它们。