文章目录
- 一、下载intl插件
- 二、初始化项目
- 三、配置pubspec.yaml
- 四、创建l10n.yaml
- 五、main.dart代码使用
- 1、导入依赖:
- 2、初始化语言配置
- 3、引用定义的文本内容
- 六、创建中文内容
- 七、参考链接:
记录Flutter中语言国际化的方式,该过程中可能会有冗余步骤,但是却可以实现功能。
这是根据Flutter默认项目进行的更改
环境: Windows、Android Studio
一、下载intl插件
在File->Settings->Plugins->Maketplace
中搜索Flutter Intl
,安装后重启Android Studio
二、初始化项目
通过Tools->Flutter Intl->Initialize for the project
进行项目初始化
三、配置pubspec.yaml
name: flutter_app
description: 这是一个flutter项目
version: 1.0.0+1
environment:
sdk: ">=2.7.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.0
flutter_localizations:
sdk: flutter
intl: ^0.16.1 # Add this line
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
generate: true # 生成国际化启用标志
flutter_intl:
enabled: true
然后下载依赖
现在项目会生成一些文件(默认只有en的文件,其他是后加上去的),如下:
这里看下intl_zn.arb
的内容,定义的文本内容都是在这里面写的
这里注意下l10n.dart
的内容,内容如下:
可以看到类名为S,这个类一会儿会使用,这个名字每个项目不一定叫这个,记得随时看下就好。
四、创建l10n.yaml
这个文件不知道有啥用。官网是这样写的
代码如下(注意文件名要跟生成的文件名一致):
arb-dir: lib/l10n
template-arb-file: intl_en.arb
output-localization-file: l10n.dart
五、main.dart代码使用
1、导入依赖:
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_dq_app/generated/l10n.dart'; //位置可能不一样,注意下生成的位置就好
2、初始化语言配置
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: [
// ... app-specific localization delegate[s] here
S.delegate,//注意这个名字
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [//这里面的语言最好是定义好的
const Locale('en', ''), // English, no country code
const Locale('ar', ''), // Arabic, no country code
const Locale.fromSubtags(languageCode: 'zh'), // Chinese *See Advanced Locales below*
// ... other locales the app supports
],
...
...
3、引用定义的文本内容
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
S.of(context).helloWorld,//注意这个类名和引用的文本名字,还有所处的位置
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}
六、创建中文内容
定义的文本内容是在arb文件内,初始的文件只有英文,中文需要自己创建,创建方式如下(方式有很多种,这里介绍一种):
项目根目录右键新建arb文件,如下:
然后会在l10n文件夹下面创建新的文件intl_zh.arb
里面内容定义如下:
{
"helloWorld": "你好!"
}
然后运行项目就好,没有效果的话重新clean项目