对于现在的APP应用,国际化需求并不高,但是作为一项有用的功能,我们还是按部就班地去实现它,由于还未完成全局状态管理和全局事件总线,暂时使用了一个全局变量Locale去定义,因此要完成切换就需要手动修改变量值后重启应用(热更新是不可以的),目前仅实现简体中文和美式英文两种语言
1引入国际化需要的包。
2在Flutter节点下添加generate,可以在重启或者热更新时实时更新翻译文件。
3在根目录下增加l10nyaml文件,用于配置实时更新的内容。
4在根Widget的MaterialApp中增加如下配置,大多都是来自第三步自动更新的内容,如果编译器不能自动识别,可以手动引入如下包:import 'package:flutter_gen/gen_l10n/app_localizationsdart';
5编译翻译文件,在lib/I10n的目录下新增app_zharb和app_enarb两个文件(如果要具体到国家代码可以新建为app_zh_CNarb和app_en_USarb),文件采用Json的语法,Vscode等编辑器也有对应的语法插件,至于翻译语法,大家可以自行了解,限于篇幅,仅做常用的展示。
注:app表示变量名,后续可以使用AppLocalizationsof(context)!app调用,语言切换时就会按照对应的翻译文件进行展示。
@app表示对app变量的描述,是给翻译人员看的,与代码运行无关。
模板语句,有时候需要实现类似“倒计时20秒”只有数字变化的语句,此时就形成了模板插值语句,在模板上插入数字,上述hit6即实现了这样一个语法,最终会被翻译为一个函数,读者可自行尝试。
关于iOS平台
尝试过国际化的读者可能发现在iOS平台无法顺利完成切换(上述全局变量方式和使用全局状态管理的实现方式有本质区别,注意区分),这是因为iOS应用程序有一套自建的语言环境管理机制,所以使用上面的方式适配国际化对于iOS应用程序是无效的,为了让iOS应用程序也能支持国际化,还需要在原生iOS工程中进行额外的配置。 使用Xcode打开Flutter项目的iOS原生工程,切换到工程面板,然后在Localization选项配置中添加中文支持即可。
在Android/ios平台权限处理是绕不开的内容,本应用作为demo应用,会尽可能地多索要权限,但是设计为仅在用户安装后第一次打开时索取一次,后续不再主动索取,仅在用户需要使用相关功能时引导用户给予权限即可。权限管理的实现相对简单,可以引用permission_handler包,并加入以下代码,在APP启动时调用一次requestAllPermission函数即可。
下章内容 : 主题切换,欢迎页,引导页,
小破站同名,同步文章且定时直播编程,有兴趣可以移步
Dell向运行于Windows *** 作系统下的程序提供代码、数据或函数。程序可根据DLL文件中的指令打开、启用、查询、禁用和关闭驱动程序。
打开一个程序的安装目录,在这里面可以看到一些dll的一些文件。如果在它的上面双击的话会在它的旁边提示:如果是想要查看它可以下载安装一个叫exescope的自定义应用软件的工具。
右边有一个更多,点击一下“更多”,可以看到它的默认安装路径,如果不需要更改的话,它就会默认的安装到c盘的程序文件夹中。
点击安装之后,在它d出的面板中有一个自动汉化的说明,我们点击“已阅”。接着在它的安装过程中会出现一个安装类型,可以根据需要选择一个安装类型,这里就选择它默认的“典型安装”,然后点击:下一步。当安装到汉化的安装目录的时候它会提示,如果是不想把它安装到默认位置的话,可以在点击浏览选择一个安装的文件位置。
切换显示语言步骤:
新建工程(国际化)——> 国际化——>project——>info——>Localizations——> "+"Chinese(Simplified);
创建InfoPliststrings:修改工程名语言cmd+N(新建)——>Resource——> Strings File ——>Next;
命名为InfoPliststrings ——> creates ——>Finish;
点击InfoPliststrings——>右侧Locatize ——> Locatize;
取消Base,勾选English, Chinses(Simplified):;
点击左侧InfoPliststrings下三角添加属性:InfoPliststring(English)里面输入:CFBundleDisplayName = "Localizable";InfoPliststring(Chinese(Simplified))里面输入:CFBundleDisplayName = "国际化";
同理创建Localizablestrings(步骤同3):修改标签显示语言;</ol>国际化就是将标签、提示信息等信息放到资源文件中,随着程序需要的语言提供对应的资源文件。
所谓资源文件就是properties啊,把需要国际化的输出字符串都弄成键值对存放在properties中,每种语言一个配置文件,键相同,值就是各种语言的翻译;国际化的时候读取不同的配置文件就OK了:Properties p=new Properties();
pload(new FileInputStream(new File(String FileName)));pgetProperty(String key)。
看到有人在问全球化和国际化的关系,国际化和本地话的关系,我们今天就简单说说这三者之间的关系。
我们所说的全球化,国际化,本地化都是针对软件来说的。简单的来说全球化=国际化+本地化。
所谓的全球化,就是软件的目标市场并不是一个国家,而是多个国家或区域,我这里借用一下崔启亮老师的书里面的定义
全球化软件是为全球用户设计,面向全球市场发布的具有一致的界面,风格和功能的软件,他的核心特征和代码设计并不仅仅局限于某一种语言和区域用户,可以支持不同目标市场的语言和数据的输入,输出,显示和存储。全球化软件也称为国际化软件,全球化对应的英文是Globalization,缩写为G11NG是首字母,N是尾字母。11表示在首字母G和尾字母N之间省略了11个字母。
其实全球化软件按照字面意思理解的话也可以叫国际化软件。全球就是针对多个国家的意思,国际化也是针对多个国家的意思,但是全球化软件在开发过程中又可以分为两个大的部分,一般叫做国际化和本地化,为了将此国际化和彼国际化分开,所以叫做全球化。 所以全球化=国际化+本地化
这块主要是定义的问题,如果把一个面向全球用户的软件叫做国际化软件也可以,但是如果在做这个软件的公司内部就不好区分这个大的国际化和他下面细分出来的国际化,所以一般就叫做全球化。所以如果你是给公司外部的人来说,不关注技术细节的话,说你的产品是全球化软件或国际化软件都可以。但是公司内部具体去做这个软件的话最好还是将全球化和国际化定义严格分开。崔启亮老师的书<<国际化软件测试>>,我感觉名字叫做全球化软件测试可能会更好一点,当初我看了名字我还以为是讲做国际化的,结果发现国际化和本地化都讲。
下面我们来说说国际化和本地化的关系,其实我和项目组里的人合作了很长时间,他们有时候也是分不清楚国际化和本地化,大家对本地化可能了解的比较多,因为这个也比较好理解,就是要做不同语言的本地化版本。但是国际化具体做什么他们就不是特别清楚,所以两个老是搞错。
我们还是来引用崔老师的定义:
软件国际化就是在软件设计和文档开发过程中,使得功能和代码设计能处理多种语言和文化习俗,能够在创建不同语言版本时,不需要重新设计源程序代码的软件工程方法。国际化的英文单词是Internationalization,所写为I18N,其中I是首字母,N是尾字母。18表示在首字母的I和尾字母N之间省略了18个字母
软件本地化是将一个软件产品按照特定国家/地区或语言市场的需要进行加工,使之满足特定市场上的用户对语言和文化的特殊要求的软件生产活动。本地化的英文对应Localization,缩写为L10N,其中L为首字母,N是尾字母,10表示在首字母的L和尾字母的N之间省略了10个字母。
我们从上面的描述上去分析,国际化需要保证功能和代码设计能处理多种语言和文化习俗,在创建不同语言版本时,不需要重新设计源程序代码,这个说明国际化实际上是为本地化服务的,其实在软件开发过程中加入国际化的设计就是为了更好,更快的出本地化版本。国际化并不针对某一特定语言来做,国际化做好了的话,你的软件就可以处理多种语言和文化习俗,语言也就是各种国家的文字显示,输入输出,各种语言的 *** 作系统上运行,习俗通常指的是区域相关的,比如日期时间显示格式,数字,货币符号,姓名显示顺序等。当你的软件如果国际化做的比较好时,在做本地化时就不需要重新设计或修改源代码,只需要进行资源文件的翻译,然后出本地化的build而本地化是针对特定语言的,特定市场的,如果该语言和该市场没有特殊要求,那么简单的说就是一个将资源文件进行翻译,然后出一个本地化的build,然后测试该本地化build上本地化问题,比如字符串没有翻译等,这个是全球化软件最理想的情况,但是往往个别国家或区域对软件在基础功能上又有些特殊的要求,本地化组需要在基于已经发布的英文版上增加特色功能然后自己发布。
我们简单的总结一下本地化测试和国际化测试,基于比较理想的全球化软件开发模式,各个国家没有自己特殊的需求
1、测试需要用的 *** 作系统:
国际化测试人员一般会基于多个语言的 *** 作系统进行测试,因为国际化测试需要负责软件对各个不同国家 *** 作系统的支持。一般至少选择两个,亚洲为代表的比如日语,和欧洲为代表的,比如德语。
本地化测试人员一般只在某一个特定语言的 *** 作系统进行测试。除非该测试人员要负责多个语言的本地化。
2、测试的build
国际化测试一般用英文build和伪本地化build进行测试,英文build一般主要用来发现国际化第一级和第二级的问题,伪本地化build主要用来测试国际化第三级的问题。
本地化测试一般用已经翻译过的本地化build
3、 bug的处理方式
国际化的bug一般都是需要通过修改代码才行修改好
本地化的bug一般都是通过修改翻译,修改资源文件来修复,不需要修改代码(这个是理想情况。)
4、测试的核心关注点不同
国际化测试关注针对各种语言的支持,概括来说就是对DBCS,Hi-ASCII的支持,包括显示,输入,输出等,还有对于不同国家的时间日期格式,货币符号显示等
本地化测试主要关注自己测试的语言上的输入,输出,显示,所测语言上一些特殊性等。
5、测试进入项目的时间不同
以上就是关于全栈项目开发3:应用国际化和权限处理全部的内容,包括:全栈项目开发3:应用国际化和权限处理、怎么打开DLL、ios应用内部实现国际化storyboard怎么处理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)