除了使用插件,官方推荐另一种国际化方法,链接如下: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

本文为原创文章,转载请注明出处,欢迎访问作者网站(和而不同)

发表评论

error: Content is protected !!