以AndroidStudio举例:
1. 安装Flutter Intl
mark: AndroidStudio插件安装完成后都需重启IDE才能生效。
2. 点击Tools->Flutter Intl -> Initialze for the Project
此时会生成 lib->generated-> l10n 目录,以及 l10n.dart & intl。
会自动在lib同级生成:
- generated/intl文件夹和generated/l10n.dart 此两个属于自动生成,请勿手动修改。
- l10n文件夹
此时会报错,需要引入包依赖。
3. 添加依赖
pubspec.yaml 文件内添加依赖:(添加后记得使用 flutter pub get)
dependencies:
flutter_localizations:
sdk: flutter
4. 设置代理
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
localizationsDelegates: [
S.delegate, //intl的delegate
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales, //支持的国际化语言
locale: Locale('zh', ''), //当前的语言
localeListResolutionCallback: (locales, supportedLocales) {
print('当前系统语言环境$locales');
return;
},
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Demo'),
);
}
}
5. 添加语言
Tools -> Flutter Intl -> Add locale
选择对应语言,例如zh,en。如果有繁体支持,港台分别为zh_TW/zh_HK.
选定后,会在l10n文件夹下自动创建对应文件,例如 intl_en.arb/intl_zh.arb
这些文件就是我们用来编辑的。
注意 :
支持语言的顺序为字符串排序 (如zh_A会在zh_B之前) , 并非添加语言的顺序.
假设系统语言为zh_TW , 项目并不支持,会优先寻找zh的其他语言 , 以supportedLocales顺序从上向下寻找.
6. ARB文件格式
ARB文件格式可参考此处
{
"@@locale" : "en",
"appName" : "Demo app",
"pageLoginUsername" : "Your username",
"@pageLoginUsername" : {},
"pageLoginPassword" : "Your password",
"@pageLoginPassword" : {},
"pageHomeTitle" : "Welcome {firstName}",
"@pageHomeTitle" : {
"description" : "Welcome message on the Home screen",
"placeholders": {
"firstName": {}
}
},
"pageHomeInboxCount" : "{count, plural, zero{You have no new messages} one{You have 1 new message} other{You have {count} new messages}}",
"@pageHomeInboxCount" : {
"description" : "New messages count on the Home screen",
"placeholders": {
"count": {}
}
},
"pageHomeBirthday": "{sex, select, male{His birthday} female{Her birthday} other{Their birthday}}",
"@pageHomeBirthday": {
"description": "Birthday message on the Home screen",
"placeholders": {
"sex": {}
}
},
"commonVehicleType": "{vehicleType, select, sedan{Sedan} cabriolet{Solid roof cabriolet} truck{16 wheel truck} other{Other}}",
"@commonVehicleType": {
"description": "Vehicle type",
"placeholders": {
"vehicleType": {}
}
}
}
7. 使用
在需要使用国际化地方调用
S.of(context).key, 若没有context,
则使用S.current.key.
例如:设置6定义的arb文件内的数据,
S.(context). pageLoginUsername,
或者有参数的arb定义:
S.(context).pageHomeTitle('home title')