Visual Studio Code 中使用 flutter_intl 实现 Flutter 应用国际化
·Flutter Intl· 插件,包含用于处理国际化/本地化消息,日期和数字格式和解析,双向文本以及其他国际化问题。
安装 Flutter Intl
插件
在项目的 pubspec.yaml
文件中添加依赖:
1 | dependencies: |
初始化项目
在Visual Studio Code
中打开命令面板: View -> Command Palette…
在打开的命令面板中输入 flutter intl
, 在下拉的命令项中选择:Flutter Intl: Initialze
, 开始执行项目的初始化。
初始化执行成功后,会自动在 pubspec.yaml
末尾增加:
1 | flutter_intl: |
同时在 lib
文件夹下生成 generated
和 l10n
两个文件夹
generated
包下的intl
目录默认生成messages_all.dart
和messages_en.dart
文件,messages开头的文件无需手动修改,是自动生成的。
generated
包下的I10n.dart
是Localizations
和Delegate
的实现,无需手动修改,是自动生成的。
l10n
包下存在一个intl_en.arb
文件,文案存放在此处。
ARB文件扩展名为:
Application Resource Bundle
意为应用程序资源包,并得到Google的支持,每个.arb文件都包含一个JSON表,该表从资源ID映射到本地化值,文件名包含已为其转换值的语言环境。
添加语言
在Visual Studio Code
中打开命令面板: View -> Command Palette…
在打开的命令面板中输入 flutter intl
, 在下拉的命令项中选择:Flutter Intl: Add Locale
。
在命令面板中输入中文的语言名称:zh
添加语言成功后,在 generated\intl
文件夹下多了一个名为messages_zh.dart
的文件
在 l10n
文件夹下多了一个名为 intl_zh.arb
的文件
添加系统国际化支持
MaterialApp 修改如下:
1 | MaterialApp( |
解释下上面这段代码出现的变量
localizationsDelegates
列表中的元素是生成本地化值集合的工厂。
S.delegate
项目的本地化委托类,插件自动生成,它会根据你的arb文件自动生成对应的函数。
GlobalMaterialLocalizations.delegate
为Material Components
库提供了本地化的字符串和其他值。
GlobalCupertinoLocalizations.delegate
为Cupertino Components
库提供了本地化的字符串和其他值。
GlobalWidgetsLocalizations.delegate
定义widget
默认的文本方向,从左到右或从右到左。
supportedLocales
支持的本地化。
S.delegate.supportedLocales
项目支持的本地化,插件自动生成,它会在你添加arb文件时自动更新你的支持的本地化。
在 intl_en.arb
和 intl_zh.arb
下添加文案
添加一个 title
文案,intl_en.arb
:
1 | { |
intl_zh.arb
:
1 | { |
保存修改,generated
目录下相关文件将会重新生成。
使用Flutter Intl
普通使用
1 | {"content": "内容"} |
占位
1 | {"welcome": "welcome {name}"} |
重复占位
1 | {"goodStudy": "{good}{good}学习,{day}{day}向上"} |
复数形式
1 | {"getMessageTips": "{howMany, plural, zero{You have no message} one{You have 1 message} other{You have {howMany} messages}}"} |
参考:https://github.com/localizely/flutter-intl-plugin-sample-app
===END===