丨适配国际化除了多语言我们还需要注意什么_第1页
丨适配国际化除了多语言我们还需要注意什么_第2页
丨适配国际化除了多语言我们还需要注意什么_第3页
丨适配国际化除了多语言我们还需要注意什么_第4页
丨适配国际化除了多语言我们还需要注意什么_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

$100;又比如,App的引导图,我们可能会选用作为背景,而在我们则可因此,对一款App做的具体过程,除了翻译文案之外,还需要将货币单位和背景图等资源也设计成可根据不同地区自适应的变量。这也就意味着,我们在设计App架构时,其实,这也是在Flutter中进行的整体思路,即语言差异配置抽取+代码生有本质区别。所以在今天的中,我会以多语言文案为主,为你讲述在Flutter中如何实也能够轻松搞定了。Flutter首先,实现一个LocalizationsDelegate(即翻译),并将所有需要翻译的文案全部最后,在应用程序MaterialApp初始化时,将这个类设置为应用程序的翻译回调。看到这里你会发现,如果我们想要使用提供的方案来设计App架构,不仅工作量大、繁琐,而且极易出错。所以,要开始Flutter应用的道路,我们不如把的解决方案扔到一边,直接从AndroidStudio中的Flutteri18n插件开始学习。这个插件在其内部提供了不同语言地区的配置封装,能够帮助我们自动地从翻译稿生成Dart代码。为了安装Flutteri18n插件,我们需要打开AndroidStudio的Preference选项,在左边的tab中,切换到Plugins选项,搜索这个插件,点击install即可。安装完成之后再重启AndroidStudio,这个插件就可以使用了。图1Flutteri18nFlutteri18nflutter_localizationspubspec.yamlsdk:这时,我们会发现在res文件夹下,多了一个values/strings_en.arbarbJSON要修改了res/values下的arb文件,i18n插件就会自动帮我们生成对应的代码。图2arb试着修改一下strings_zh.arb文件,可以看到,Flutteri18n插件为我们自动生成了射,对于通过参数来实现动态文案的message_tip标识符,也自动生成了一个同名内联函图3Flutteri18nstrings_en.arbi18n.dart自动生成的,每次arb文件有新的变更都会自动更新,所以切忌手动编辑这个文件。接下来,我们以Flutter的工程模板,即计数器demo来演示如何在Flutter中实。在下面的代码中,我们在应用程序的,即MaterialApp初始化时,为其设置了支际化的两个重要参数,即localizationsDelegates与supportedLocales。前者为应用的翻译S.delegate是Flutteri18n插件自动生成的类,包含了所支持的语言地区属性,以及对应的文案翻译映射。理论上,通过这个类就可以完全实现应用的,但为什么我们在配置应用程序的翻译回调时,除了它之外,还加入了GlobalMaterialLocalizations.delegate与GlobalWidgetsLocalizations.delegate这两个回调呢?这是因为Flutter提供的Widget,其本身已经支持了,所以我们没必要再翻译遍,直接用的就可以了,而这两个类则就是所提供的翻译回调。事实上,我们刚才在pubspec.yaml文件中的flutter_localizations插件包,就是Flutter提供的翻译套在完成了应用程序的配置之后,我们就可以在程序中通过S.of(context),直接获取arb文件中翻译的文案了。不过需要注意的是,MaterialApp的子t因此,在这种配置方式下,我们是无对erip的tte属性进行配置的。不过,好在eriponGenerat,来提供翻译上下文,因此我们可以通过它,实现te://应用程序classMyAppextendsStaessWidgetWidgetbuild(BuildContextcontext)returnlocalizationsDelegates:constS.delegate,//GlobalMaterialLocalizations.delegate,//Material9

GlobalWidgetsLocalizations.delegate,//普通Widget 19

supportedLocales:S.delegate.supportedLocales,////title的回(context){returnhome:arb的翻译文案了1Widgetbuild(BuildContextcontext)2return3//获取appBartitle4appBar:5title:67body:8//传入_counter9child:)floatingActionButton:onPressed:_incrementCounter,//tooltip:child:}在Android上,分别切换英文和中文系统,可以看到,计数器应用已经正确地处理了图4计数器示例(Android英文系统图5计数器示例(Android中文系统iOSiOS切换到工程面板。在Localization这一项配置中,我们看到iOS工程已经默认支持了英文,图6iOS完成iOS的工程配置后,我们回到Flutter工程,选择iOS运行程序。可以看到,计数器的iOS版本也可以正确地支际化了。图7计数器示例(iOS英文系统图8计数器示例(iOS中文系统上面介绍的方案,其实都是在Flutter应用内实现的。而在Flutter框架运行之前,我们是无法这些文案的。Flutter需要原生环境才能运行,但有些文案,比如应用的名称,我们需要在Flutter框架运行之前就为它提供多个语言版本(比如英文版本为computer,中文版本为计数器),这时就需要在对应的原生工程中完成相应的配置了。我们先去Android首先,在Android工程中,应用名称是在AndroidManifest.xml文件中application的android:label属性的,所以我们需要将其修改为字符串资源中的一个,让其能够<manifest...<!--设置应用名称 然后,我们还需要在android/apps中要支语言字符串strings.ml文件。这里由于默认文件是英文的,所以我们只需要为中文创建一个文件即可。字符串资源的文件 结构,如下图所示:图9strings.xml文 values与values-zhstrings.xml<!--英文(默认)字符串资源<?xmlversion="1.0"encoding="utf-<string67<!--中文字符串资源<?xmlversion="1.0"encoding="utf-<stringname="title">计数器完成Android应用标题的工程配置后,我们回到Flutter工程,选择Android运行程序,可以看到,计数器的Android应用标题也可以正确地支际化了。与Android工程类似,iOS工程中的应用名称是在Info.list文件的Bundlename属性声明的,所以我们也需要将其修改为字符串资源中的一个,使其能够根据语言地区自动选图10iOS要通过新建与字符串对应的资源文件去搞定的。我们右键单击Runner文件夹,然后选择NewFile来添加名为InfoPlist.strings的字符串资源文件,并在工程面板的最右侧文件检查器中的Localization选项中,添加英文和中文两种语言。InfoPlist.strings的英文版和中文版内容如下所示:"CFBundleName"=3"CFBundleName"="计数器至此,我们也完成了iOS应用标题的工程配置。我们回到Flutter工程,选择iOS运行程序,发现计数器的iOS应用标题也支际化了。在今天的中,我与你介绍了r应用的解决方案,即在代码中实现一个ationsDelegate这中将需要的文部它的,然依次进行手动翻译适配,最后将这个类设置为应用程序的翻译回调。而为了简化手动翻译到代码转换的过程,我们通常会使用多个arb文件文案在不同语言地区的映射关系,并使用Flutteri18n插件来实现代码的自动转换。的就是语言差异配置抽取。在原生Android和iOS系统中进行适配,我们只需为需要的资源(比如,字符串文本、、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论