关键词推广网站,企业网站用什么数据库,企业网站建设哪家效果好,聚美优品一个专注于做特价的网站如果是单独给app加上国际化,其实很容易,创建对应的国家资源文件夹即可,如values-en,values-pt,app会根据当前系统语言去使用对应语言资源文件,如果找不到,则使用values文件夹里的资源 但本文讲得是另外一种情况,就是app内置一个切换多语言的页面,可以给用户切换 步骤 1.添加服务…如果是单独给app加上国际化,其实很容易,创建对应的国家资源文件夹即可,如values-en,values-pt,app会根据当前系统语言去使用对应语言资源文件,如果找不到,则使用values文件夹里的资源 但本文讲得是另外一种情况,就是app内置一个切换多语言的页面,可以给用户切换 步骤 1.添加服务声明 此步骤主要是让我们的app可记录当前应用语言,使用的Service是android系统给我们提供的 !-- 国际化多语言 --
serviceandroid:nameandroidx.appcompat.app.AppLocalesMetadataHolderServiceandroid:enabledfalseandroid:exportedfalsemeta-dataandroid:nameautoStoreLocalesandroid:valuetrue /
/service 2.在xml文件夹增加文件locale_config.xml 声明支持的几个语言 locale-config xmlns:androidhttp://schemas.android.com/apk/res/androidlocale android:nameen /locale android:namept /locale android:namees /locale android:namede /locale android:namefr /
/locale-config 3.调用方法切换多语言 // 切换语言
val languaen
AppCompatDelegate.setApplicationLocales(LocaleListCompat.forLanguageTags(langua)) 补充下其他方法: //获取当前应用使用语言
val locale AppCompatDelegate.getApplicationLocales()[0]//语言短标转为locale对象
val languaen
val locale Locale.forLanguageTag(langua) 一些坑点 1.上架谷歌市场无法切换语言 上架到谷歌市场,用户下载只会下载其系统语言包,会导致app内置的语言切换功能无效
原因是打包为aab的时候,gradle的配置,默认是开启了语言分包设置,我们取消这个设置就可以解决此问题
gradle配置如下 buildTypes {release {bundle{//设置多语言不分包处理language {// Specifies that the app bundle should not support// configuration APKs for language resources. These// resources are instead packaged with each base and// feature APK.enableSplit false}density {// This property is set to true by default.enableSplit true}abi {// This property is set to true by default.enableSplit true}}}
} 2.使用StringUtil导致语言切换功能失效 我使用到了Blankj/AndroidUtilCode里面的StringUtil获取数据,到时切换多语言后会存在问题
原因是里面StringUtil里面使用的是application而不是Activity 最终还是更换为使用Activity对象来获取string文本(activity.getString(R.string.hello))
也看到了issue有人说到这个问题,说要是更新application的资源文件,但我测试的时候发现更新application的语言资源后,会触发应用闪屏的效果,然后就没有使用此方法 由于项目进度赶,就没去细究了 3.使用静态数据导致后续没有文本没有更新 因为页面有几个使用相同布局的样式,比如说常见的菜单项,我是这样的做法: 抽取出来的一个静态类来存储对应数据(图标,文本之类),之后写一个xml文件,页面则是使用include来引用多份相同样式的item,最终在Activity里给这些item赋值 由于item比较少,又不想用recyclerview,就是采用了上面的这个方法 但是如果涉及到多语言切换的话,就会导致没有数据及时更新 原因是更换语言后,是Activity进行的重新创建,但我们存储数据的类还是存在的,里面文本数据并没有更新,所以就是导致了这个问题 解决方法简单粗暴,就每次Activity的onCreate方法里创建对应的数据对象即可,这样,Activity重建之后我们的文本数据就会重新调用activity.getString(R.string.hello)获取了 文章转载自 Stars-one 原文链接https://www.cnblogs.com/stars-one/p/17862389.html