Flutter国际化,实时切换app内的本地语言
前言:
Flutter项目需要支持国际化,就是在app内实时切换不同的语言,满足不同用户的需求。Flutter默认支持英文的文本和组件,如果需要添加本地的支持,直接在Plugins引入插件Flutter Intl,就可以初始化intl和添加添加我们想添加的每一种语言。 接下来我简单总结一下在Flutter项目中如何实现国际化,有需要的话可以参考。
思路:
1.在Plugins引入插件Flutter Intl
2.在pubspec.yaml 文件中添加依赖flutter_localizations
3.初始化intl和添加语言
4.设置MaterialApp语言环境
5.在App内实现语言切换
实现的步骤:
1.在Plugins引入插件Flutter Intl
2.在pubspec.yaml文件中添加依赖flutter_localizations
dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter cupertino_icons: ^1.0.0 provider: ^4.3.1 #用于实时切换语言的状态管理
3.初始化intl和添加语言
3.1 初始化intl (Tools->Flutter Intl-> Initialize for the Project)
在pubspec.yaml中自动增加字段:
flutter_intl: enabled: true
在lib目录下增加 generated 和 l10n一个包( intl_en.arb,添加英文语言)
{ "home": "Home", "settingLanguage": "Set Language", "settingLanguageEnglish": "English", "settingLanguageChinese": "Chinese" }
3.2添加语言( intl_zh.arb,添加中文语言)
{ "home": "首页", "settingLanguage": "设置语言", "settingLanguageEnglish": "英文", "settingLanguageChinese": "中文" }
4.设置MaterialApp语言环境
MaterialApp( localizationsDelegates: [ GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, GlobalWidgetsLocalizations.delegate, S.delegate ], supportedLocales: [ const Locale('zh', 'CN'), const Locale('en', 'US'), ], )
5.在App内实现语言切换
5.1封装CurrentLocale方法
import 'package:flutter/material.dart'; class CurrentLocale with ChangeNotifier { Locale _locale = const Locale('zh','CN'); Locale get value => _locale; void setLocale(locale) { _locale = locale; notifyListeners(); } }
5.2设置实时切换语言的状态管理
runApp(MultiProvider( providers: [ChangeNotifierProvider(create: (context) => CurrentLocale())], child: MyApp(), ));
5.3在MaterialApp添加状态管理
Consumer<CurrentLocale>( builder: (context, currentLocale, child) { return MaterialApp( localizationsDelegates: [ GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, GlobalWidgetsLocalizations.delegate, S.delegate ], locale: currentLocale.value,//设置首要支持的语言 supportedLocales: [ const Locale('zh', 'CN'), const Locale('en', 'US'), ], ... ); }, )
5.4弹出语言切换的对话框
SimpleDialog( title: Text(S.of(context).settingLanguage), children: <Widget>[ SimpleDialogOption( onPressed: () { Navigator.pop(context, 1); }, child: Padding( padding: const EdgeInsets.symmetric(vertical: 6), child: Text(S.of(context).settingLanguageChinese), ), ), SimpleDialogOption( onPressed: () { Navigator.pop(context, 2); }, child: Padding( padding: const EdgeInsets.symmetric(vertical: 6), child: Text(S.of(context).settingLanguageEnglish), ), ), ], )
5.5语言切换的方法
if (i != null) { if (i == 1) { Provider.of<CurrentLocale>(context, listen: false) .setLocale(const Locale('zh', "CH")); } else { Provider.of<CurrentLocale>(context, listen: false) .setLocale(const Locale('en', "US")); } }
6.总结
在Flutter上已经实现国际化的功能啦,欢迎大家围观。源码地址: https://github.com/wupeilinloveu/flutter_language ,如果有什么疑问的话,欢迎留言!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
这13个好用的JavaScript特性,估计你都没用过~
一、逗号运算符 , 是用于分隔表达式并返回链中最后一个表达式的运算符。 letoo=(1,2,3)console.log(oo)//3 这里有三个主要表达式 1 、 2 和 3。所有这些表达式均被求值,最后一个赋给 oo。 我们在 for 循环中看到这个: for(leti=0,ii=1;i<10;i++,ii--){...} 当我们要编写短的 lambda 函数时,这会派上用场: constlb=(a,b,arr)=>(arr.push(a*b),a*b) 这里有两个语句,第一个将乘法结果推入数组arr,第二个将乘数a和b推入数组。第二个结果就是返回给调用者的内容。 对于三元运算符,它也很有用,因为与短lambda语法相同,它仅接受表达式而不是语句。 二、in in 是用于检查对象中属性是否存在的关键字。我们在 for..in 循环中使用了它,但没有意识到,其实 in 也是一个关键字:) 如果对象上存在属性,则 in 将返回 true ,否则将返回 false。 consto={prop:1}console.log("prop"ino)//true 看,in 可以独立使用...
- 下一篇
状态机详解(未完待续)
什么是状态机(FSM)? 状态机(Finite State Machine)是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。 字面上讲它是用来管理状态的,状态数量是有限的,并且可以自动执行,即给定一个当前状态与输入,可以明确得到输出状态,当然他不是一个机器,而是一个数学模型。 它有四个概念: State(状态):一个状态机至少要包含两个状态,并且状态个数是有限的; Event(事件):执行某个操作的触发条件或口令; Action(动作):事件发生以后要执行的动作,在我们编程中一般就代指一个函数; Transition(变换):从一个状态变到另一个状态。 其他的理解: 状态机可归纳为4个要素,即现态、条件、动作、次态。“现态”和“条件”是因,“动作”和“次态”是果。详解如下: 现态:是指当前所处的状态。 条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。 次态:条件满足后要迁往的新状...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS关闭SELinux安全模块
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题