1.下载插件
2.插件下载完成后重启一下android studio,在工具栏tool中会多一个flutter intl的选项
3.点击initialize for project,等待项目生成语言包
其中.arb文件是我们不同语言包,放入需要翻译的字段;intl文件夹是自动生成的,放置的翻译好的dart文件,我们不用管理
4.如果要添加其他语言需要下面操作
创建之后的文件加目录
*打开.arb看下
恭喜准备工作完成
二、代码设置
1.在pubspec.yaml文件添加以下依赖
#包含sp工具
flustars: ^0.3.2
provider: 4.3.1
2.在main文件中注册好语言包,和provider全局通知
//注意一定要用comsumer包裹起立(provider需要)
Consumer<LanguageProvider>(
builder: (context, languageProvider, child) {
return OKToast(
textPadding: EdgeInsets.symmetric(horizontal:32 , vertical: 26 ),
textStyle: TextStyle(fontSize: 15, color: Colors.white),
backgroundColor: textColor333,
radius: 7.0,
child: MaterialApp(
title: '交易所',
///注册路由
// onGenerateRoute: (settings) => Routes.findRoutes(settings),
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
locale: _listenerLocal(languageProvider.language),
localizationsDelegates: [
S.delegate, //应用程序的翻译回调
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
//支持语系,
onGenerateTitle: (context) {
return S.of(context).app_title;
},
home:xxpage()
locale: _listenerLocal(languageProvider.language)方法在下面第5步中
3.创建语言provider
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart';
class LanguageProvider with ChangeNotifier {
///
String _language;
String get language => _language;
void changeMode(String language) async {
_language = language;
notifyListeners();
SpUtil.putString("language", language);
}
}
4.在需要设置语言的页面使用方法
Text(S.of(context).app_title),
import 'package:bourse/generated/l10n.dart';
import 'package:flustars/flustars.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../language_model.dart';
class SettingLanguagePage extends StatefulWidget {
@override
_SettingLanguagePageState createState() => _SettingLanguagePageState();
}
class _SettingLanguagePageState extends State<SettingLanguagePage> {
String groupValue = 'zh';
void _changed(value) {
if (value != null) {
setState(() {
groupValue = value;
if (value == "zh") Provider.of<LanguageProvider>(context, listen: false).changeMode("zh");
if (value == "en") Provider.of<LanguageProvider>(context, listen: false).changeMode("en");
if (value == "jp") Provider.of<LanguageProvider>(context, listen: false).changeMode("jp");
if (value == "kr") Provider.of<LanguageProvider>(context, listen: false).changeMode("kr");
SpUtil.putString("language", groupValue);
});
}
}
@override
void initState() {
// TODO: implement initState
super.initState();
groupValue = SpUtil.getString("language");
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("SettingLanguagePage"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(S.of(context).app_title),
RadioListTile<String>(
title: Text('汉语'),
value: 'zh',
groupValue: groupValue,
onChanged: _changed,
),
RadioListTile<String>(
title: Text('English'),
value: 'en',
groupValue: groupValue,
onChanged: _changed),
RadioListTile<String>(
title: Text('日语'),
value: 'jp',
groupValue: groupValue,
onChanged: _changed),
RadioListTile<String>(
title: Text('韩语'),
value: 'kr',
groupValue: groupValue,
onChanged: _changed),
],
),
),
);
}
}
5.当程序退出重进时,需要取出保存上一次的状态,在mian文件中设置
String value = SpUtil.getString("language");
_listenerLocal(String lag) {
if (lag == "zh") {
return Locale('zh');
} else if (lag == "en") {
return Locale('en');
} else if (lag == "jp") {
return Locale('jp');
} else if(lag == "kr"){
return Locale('kr');
}else{
if(value.isEmpty){
return Locale('zh');
}else{
return Locale('$value');
}
}
}
搞定!!!!
更正:语言包不能随便命名的,要根据规范
http://www.webapps-online.com/online-tools/languages-and-locales
修改上述语言包目录