前言
作为一个flutter萌新,由于项目项目中有Getx,想要实现一个flutter项目多语言功能的方法现在有两种,一种是使用Getx给的多语言方法,一种是使用官方文档中的flutter_localizations packge来实现,最后秉着”插件单一化“原则(狗头),还是使用官方的办法来实现多语言功能。
实现
跟随官方文档的步骤来,于是我新建了个demo工程来实现多语言。
第一步
要先在pubspec.yaml中添加packge依赖
pubspec.yaml
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
intl: any
添加完以后运行Pub get,下载依赖,完成后我们在main.dart中引入,这里我们使用的是MaterialAPP
import 'package:flutter_localizations/flutter_localizations.dart';
return MaterialApp(
localizationsDelegates: const [
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: const [
Locale('en'),//支持英文
Locale('zh'),//支持中文
],
title: 'Flutter l10n Demo tdsss',
home: const MyHomePage(title: 'tdsss l10n test'),
);
第二步
回到pubspec.yaml文件中,我们找到文件偏底部的flutter部分,添加generate: true
# The following section is specific to Flutter packages.
flutter:
generate: true
然后在项目的根目录下添加一个新的yaml文件,命名为l10n.yaml 然后添加内容
arb-dir: lib/l10n
template-arb-file: intl_en.arb
output-localization-file: app_localizations.dart
参数解释如下:详情可以见官方文档
这个时候,我们去lib文件夹下新建一个l10n的目录,然后新建一个intl_en.arb文件。
第三步(可选步骤)
我使用的是Android Studio这个时候IDE会提示我们去下载flutter Intl插件
下载完成后,重启IDE并初始化项目。
操作方法:点击Tools -> Flutter Intl -> Initialize for the Project
第四步
这个时候我们已经在lib/l10n目录下创建了intl_en.arb文件,在里面添加
{
"helloWorld": "Hello World!",
"@helloWorld": {
"description": "The conventional newborn programmer greeting"
}
}
然后在同一目录下,新建一个intl_zh.arb的文件,在里面添加
{
"helloWorld": "你好,世界!"
}
然后在项目路径的终端运行 flutter gen-l10n 命令,你就会在.dart_tool/flutter_gen/gen_l10n下看到自动生成的文件
第五步
回到main.dart文件,引入刚刚自动生成的类
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
然后在你的MaterialApp中添加一行
return MaterialApp(
localizationsDelegates: const [
AppLocalizations.delegate,//-----这里是新加的一行
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: const [
Locale('en'),//支持英文
Locale('zh'),//支持中文
],
title: 'Flutter l10n Demo tdsss',
home: const MyHomePage(title: 'tdsss l10n test'),
);
现在你就可以在任何地方使用你准备好的多语言了
使用方法
在新建的demo的HomePage中,把刚刚我们写进的helloWorld显示出来,具体代码如下: class MyHomePage
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(AppLocalizations.of(context)!.helloWorld),
],
),
),
);
}
}
运行项目,如果你的设备默认语言是中文,那就会显示“你好,世界!”,如果是英文,就会显示"Hello World!",我这里使用模拟器,先把语言设置为中文,打开APP
看到的是中文,我们在设置里切换为英文试试。
成功了!