官方流程
简单来讲,流程图如下
简单讲一下整个流程
- 我们先写一个
AppStrings.dart
,这个文件是整个多语言的核心,生成和使用都需要这个文件。在这个文件里可以定义获得文本的api,比如
String order_list_waiting_for_review() => Intl.message(
'Waiting for the review',
name: "order_list_waiting_for_review",
locale: _localeName
);
其中,方法名和name
必须保持一致(不要问我为何会有这种坑爹要求)。'Waiting for the review'
是默认文案,locale
是当前的locale。
这样定义的话,可以用下面的方式获得文本
String text = AppStrings.of(context).order_list_waiting_for_review();
// text == "Waiting for the review"
很好理解,AppStrings.of(context)
就是通过context
获得对应的locale
的AppStrings
,进而获得对应的文案。
- 在上面以那种格式定义后,我们可以执行下面这个命令把
AppStrings.dart
生成intl_messages.arb
flutter pub pub run intl_translation:extract_to_arb --output-dir=lib/l10n lib/app_strings.dart
*.arb
是个中间产物,其内就是JSON文本。其实会有更多附加信息,描述这个文本,不过在此省略。