Flutter(九)| 官方推荐的国际化
除了使用插件,官方推荐另一种国际化方法,链接如下:https://flutter.cn/docs/development/accessibility-and-localization/internationalization
l10n.yaml
首先把上一节中的插件卸载掉,重新加载VSCode,删掉generated文件夹。
然后在根目录下面新建一个l10n.yaml文件,内容如下 :
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
arb文件还是放在lib/l10n下面,所以并没有删除之前的文件,但是需要把文件名修改为app_前缀,这里是app_en.arb和app_zh.arb。
如果之前没有l10n目录,需要手动创建目录及下面的arb文件。
执行消除命令flutter clean
。
pubspec.yaml
修改pubspec.yaml文件:
flutter_localizations:
sdk: flutter
intl: ^0.17.0
flutter:
generate: true
intl要使用最新版,可以通过链接查看最新版本:https://pub.dev/packages/intl/install
保存修改之后,可以看到.dart_tool目录下,自动生成了flutter_gen\gen_l10n:
├─flutter_gen │ └─gen_l10n │ └─app_localizations_en.dart │ └─app_localizations_zh.dart │ └─app_localizations.dart │ └─pubspec.yaml
注意:这些文件都是自动生成,不需要修改。
main.dart
文件生成之后,修改main.dart文件:
import 'package:flutter/material.dart';
import 'package:random_app/random/random_password.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
home: RandomPasswordPage(),
);
}
}
然后修改random_password.dart中需要国际化的地方,例如:
把S.of(context)
或S.current
全部修改为AppLocalizations.of(context)
并引入包 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
修改完之后,重新运行flutter run,可以看到实现了同样的效果,并且切换系统语言之后,界面也会变化。
相比这2种方法,个人更推荐第3种方法,使用Get包中的国际化
0