文章目录
我们在上一章回中介绍了Card Widget相关的内容,本章回中将介绍国际化设置.闲话休提,让我们一起Talk Flutter吧。
概念介绍
我们在这里说的国际化设置是指在App设置相关操作,这样可以让不同国家的用户使用App时呈现不同的语言。总之,就是通过相关的操作,让App支持多个国家的语言。
设置方法
对多国语言的设置是通过MaterialApp组件完成的,该组件提供了相关的属性来控制App支持的语言,这些属性如下:
- locale属性:用来控制当前App中使用的语言,如果不设置默认是手机系统语言;
- localizationsDelegates属性:用来存放App支持的多国语言包,如果不设置默认只有en-US一种语言包;
- supportedLocales属性:用来控制App支持的语言种类;
这三个属性中,常用的是最后两个属性,而且如果想让App实现国际化时,这两个属性必须要设置。第一个属性通常不设置,也就是让App使用当前手机系统中设置的语言,
不过我们可以通过它手动设置App的语言,这样在程序中调试其它语言时不需要切换手机系统中的语言,直接在App中调试就可以。
示例代码
dart
return MaterialApp(
//locale属性可以手动指定当前app使用的语言和地区,如果不指定,默认为跟随系统语言
// locale: Locale('zh','CN'),
locale: Locale('es'),
localizationsDelegates: [
//添加自己定义的多语言文字
AppLocalizations.delegate,
//添加这三个delegate后界面上的文字就会自动适配手机当前的语言
//这三个库包含系统自带组件中使用的文字,比如日期组件中的年月日
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
//添加多国语言和语言对应的地区,IOS的版本在info.plist中添加
supportedLocales: [
Locale('en',"US"),
Locale('zh',"CN"),
Locale('es'),
],
);
上面的示例代码是在MaterialApp组件中进行的,我们只列出了核心代码,其它代码省略了,大家可以到Github上main.dart文件中查看完整的代码。我们对代码中
的相关内容做一些解释,以方便大家了解国际化相关的内容;
- locale属性的类型是Locale,可以使用两个参数或一个参数的构造方法来创建该类的对象,第一个参数表示语言的代码(languageCode),第二个参数表示语言所
在地区的代码(countryCode),比如zh有CN,HK,TW三种地区代码,CN就是我们常见的简体中文,另外两个地区使用的是繁体中文; - localizationsDelegates属性是List类型,我们可以在里面添加多种语言包,示例代码中的第一个语言包是我们自定义的语言包,剩下的三个语言包是系统
自带的语言包,通常在App中必须添加这三个语言包,如果我们的App中使用了系统组件中的文字,那么就会使用这三个包中的内容。如果不添加系统提供的包,程序编译
时可以通过,但是到运行时找不到包中的内容就会出现异常。常见的是日期和时间组件中的"年月日"和"时分秒"这些文字。 - 使用系统提供的语言包时需要添加这些包的依赖:在pubspec.yaml文件中添加以下内容:
dependencies:
#添加国际化相关内容,添加完后IDE会在窗口上方自动弹出flutter命令,选择pub get就可以添加依赖
#或者是在终端中执行flutter命令,该依赖主要更新了Dart_Packages.xml文件中的内容
flutter_localizations:
sdk: flutter - 自定义语言包的内容就是我们自己在App中添加的文字,关于创建自定义的语言包的内容在后面章回中介绍;
- 我们可以使用代码来验证,App支持的语言和地区,以及App当前的语言,代码如下:
dart
//获取App当前的语言设置
Locale _locale = Localizations.localeOf(context);
Text("language code: ${_locale.languageCode}"),
Text("country code: ${_locale.countryCode}"),
//显示App支持的所有语言
Text("local all: ${_locale.toString()}"),
//使用自定义语言包中的文字:helloWorld
Text("test localization: ${AppLocalizations.of(context)!.helloWorld}"),
内容总结
上面小节的内容比较零散,我们将总结一下如何给App设置国际化相关的内容,以便让大家更好地理解国际化相关的内容:
- 在yaml配置文件添加系统语言包的依赖;
- 在MaterialApp中设置App包含的语言包和支持语言;
- 在App中使用语言包中的内容,主要是自定义语言包中的内容;
看官们,关于"国际化设置"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!
IOS需要专门添加:打开xcode,info.plis,右键add row,在弹出窗口中选择Locationxxx,输入后会自动匹配。然后在该项目中再添加行,选择es,ch国家语言。