android语言列表+波斯,Android 多语言入门及实战

右键res,选择 New Resource Directory ,选择 locale ,选择自己想要适配的语言类型

b364768fb06253687caa40e271f85360.png

设置应用内多语言

Android 7.0以下

/**

* 设置多语言

*/

public void setConfiguration(LocaleList locales, Context context) {

Configuration configuration = context.getResources().getConfiguration();

configuration.setLocales(locales);

Resources resources = context.getResources();

DisplayMetrics dm = resources.getDisplayMetrics();

resources.updateConfiguration(configuration, dm);

}

复制代码

Android 7.0及以上

有单一的目标语言变成了一个语言列表,系统会根据这个列表的优先级去适配语言:

/**

* 设置多语言

*/

@RequiresApi(24)

public void setConfiguration(LocaleList locales, Context context) {

Configuration configuration = context.getResources().getConfiguration();

configuration.setLocales(locales);

Resources resources = context.getResources();

DisplayMetrics dm = resources.getDisplayMetrics();

resources.updateConfiguration(configuration, dm);

}

复制代码

7.0版本后的语言设置界面:

04e0617c329ad7e2728f4093d121c6c6.png

这样做的好处是当应用不支持最高优先级的语言,会让用户和者开发者有自己的语言显示替代策略,而不是只能选择默认资源文件下的语言。类似的转变还有 font-family ,在下文会有提及。

获取系统语言设置

1. Locale.getDefault()

2. context.getResources().getConfiguration().locale;

3. Resources.getSystem().getConfiguration().locale;

1和2返回的是当前 APP 的 Resource 对应的 Locale 设置,也就是的值就是系统的 多语言值,但是但我们在APP中更新过 Locale ,就再也获取不到系统语言设置了。

3返回的是系统全局 Resource 的 Locale,不会随APP中的更新而修改,可以当做系统 Locale 来用。

所以如果想在APP运行期间随时获得系统的多语言设置,有两种方法,在APP未更新Locale值前保存;使用第三种方法。这个在配置多语言跟随系统时很有用。

实战

目前 Android 应用对于多语言的支持度大致分为以下几个层次:

不支持多语言:无论系统设置成何种语言,APP只显示一种语言

APP支持多语言,但只能跟随系统语言,不支持应用内多语言

APP既可以选择跟随系统,也支持应用内多语言,但切换后需要重启

APP既可以选择跟随系统,也支持应用内多语言,切换后不需要重启

无疑第四种情况是对多语言支持度最全面的,微信、微博等应用均是采用这种方式管理多语言。接下来就讲解下这种方式的具体实现过程:

定义需要支持的多语言列表选项,因为需要展示给用户进行选择切换,需要在每个 values-xx 里都放置一份:

跟随系统

简体中文

繁體中文(台灣)

English

复制代码

类似微信,只需要把跟随系统翻译一遍就行了,其他的每个语言文件夹下都一样。

然后当然就要在应用中持久化保存当前多语言设置选项,用 SharedPreferences 再合适不过了。APP启动时获取这个值,再转换成对应的 Locale值,如果选择的是跟随系统,则需要获取系统的Locale值:

public Locale getSysLocale() {

Locale locale;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//7.0有多语言设置获取顶部的语

locale = Resources.getSystem().getConfiguration().getLocales().get(0);

} else {

locale = Resources.getSystem().getConfiguration().locale;

}

return locale;

}

复制代码

然后再更新即可。当然更新后界面上的语言不会立即生效,推荐的做法和微信一样:

Intent intent = new Intent(SetLanguageActivity.this, MainActivity.class);

int flags = Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK;

intent.addFlags(flags);

startActivity(intent);

复制代码

以清空栈的方式回到主页, MainActivity 也会销毁重建,这样就完成了多语言从设置到界面更新的全过程,而不用重启APP再生效。

RTL

RTL(right to left)布局,是一种阿拉伯语、波斯语等情况下从右往左的阅读方式,和我们使用的LTR布局方向对立。当所开发的App等面向海外用户时需要做这个适配。从Android 4.2( V 17)开始支持原生的RTL模式。这种布局遵循了 Material Design 镜像view 等设计原则:

元素

LTR

RTL

文本

句子读从左到右。

句子读从右到左。

时间轴

事件进展的说明顺序从左到右。

事件进展的说明顺序从右到左。

图像

一个箭头指向从左到右显示前进运动:→

一个箭头指向右到左表示前进运动:←

是否启用RTL布局来自两个部分,一个是判断系统语言,还有一个就是需要在 AndroidManifest.xml 中声明支持RTL:

android:supportsRtl="true"

复制代码

在写布局文件的时候,就是注意把left和right相关的属性都替换成start和end对于现有项目,也可以通过 Refactor---->Add RTL support where possible 进行快速替换。不过上面只是做了基础的适配,那些有关左右方向的图标也要替换,同时也需要看控件本身是否支持RTL,这里就不再具体展开了。

###其他

string-array

在多语言文件夹下也可以放置字符串数组资源:

跟随系统

简体中文

English

复制代码

可以在 strings.xml 中,也可以新建 arrays.xml 单独管理字符串数组资源,在代码中获取和使用和string差不多

Resources res =getResources();

String[] languageTypes=res.getStringArray(R.array.language_type);

复制代码

不过我在实际使用中遇到一个问题,获取到的字符串数组的值只受到全局多语言设置的影响,应用内多语言设置无效。这个还需要再做进一步了解。

####英语设置不起作用

设置英文语言时在有些手机上不起作用 在某些手机上设置英语语言不生效,这是由于有些手机厂商的默认英语设置的是英式英语,而我们只使用了美式英语的缘故,此时处理方式为:

设置两种英语的设置选项,即美式英语( values-en-rUS )和英式英语( values-en-rGB );

可将res的文件夹命名为 values-en ,不区分国家即可;

更改系统全局语言设置

需要声明系统权限,普通应用无法使用:

复制代码

为多语言适配不同字体

多语言文件夹下不仅能存放 strings.xml ,还能配置不同风格,所以可以为不同的语言设置不同的字体,不过要注意有些字体有语言显示上的限制。

0583750997db09c62a05ffaf56e4ad49.png

@color/colorPrimary

@color/colorPrimaryDark

@color/colorAccent

@font/arial

复制代码

更多地,可以为不同语言设置其他的主题风格,如背景色、转场动画等。

辅助工具

如果应用所要支持的语言种类很多,那么逐条分别输入文本是很繁琐的一件事情,推荐几个可以

加快效率 (偷懒)的工具

多语言文本翻译导入工具,解决多语种项目翻译逐条导入问题

Android Studio上的翻译插件,支持翻译代码

批量翻译并自动生成其他国家的语言文件夹,支持 104 种语言:

a1aeb66d8b50244a623b7fedb53d941f.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python接入excel_通过Python导入Excel数据,实现自动化数据测试

一、安装openpyxl pip install openpyxl 二、获取Excel表格数据 以下是我的表格数据 #导入load_workbook工作表 from openpyxl import load_workbook #创建粘贴工作表数据的类 class ParseExcel(): #工作表路径及工作表的名字 def __init__(self,excelPath,sheetName): #加载表…

html长图转换成pdf,将长 html 导入拆分 PDF

我的情况是:单击按钮时,将 html 上的数据导入 PDF 文件。由于此 PDF 必须具有一些复杂的必需样式,因此我的第一步是使用 html2canvas.js 将此页面转换为图像,然后使用 jsPDF.js 将此图像导入 PDF当数据太大时,必须拆分…

python 魔法方法常用_python 常用的魔法方法

1. 构造方法 __new__(cls,[...) 对象实例化时第一个调用的方法,它只取下 cls 参数,并把其他参数传给 __init__ 。 __init__(self,[...]) 使用传入的参数来初始化实例,不能返回除了None的任何值。 __del__(self) 定义了当对象被垃圾回收时的行…

c# 从地址拷贝byte_面试必备的 “零拷贝” 问题!从头给你说!

本文作者:ksfzhaohui来源:juejin.im/post/5cad6f1ef265da039f0ef5df前言I/O概念1.缓冲区2.虚拟内存3.mmapwrite方式4.sendfile方式Java零拷贝1.MappedByteBuffer2.DirectByteBuffer3.Channel-to-Channel传输Netty零拷贝其他零拷贝总结前言从字面意思理解…

html css实现登录注册页面,基于HTML5+css+JS_的精美登陆注册界面

【实例简介】基于HTML5cssJS的精美登陆注册界面-------------------------------【实例截图】【核心代码】login4├── index.html├── resources│ ├── images│ │ ├── arrow.png│ │ ├── arrow-p.png│ │ ├── bg.png│ │ ├── btn.pn…

lda 可以处理中文_中文分词(jieba)和语料库制作(gensim)

本文的内容为以下两个部分:文本分词(jieba)语料库制作(gensim)结巴(jieba)分词在自然语言处理领域中,分词和提取关键词都是对文本处理时通常要进行的步骤。用Python语言对英文文本进…

js时间搓化为今天明天_秋冬国产搓背神器!360°无死角,让你搓背不求人,太舒服了...

秋冬国产搓背神器!360无死角,让你搓背不求人,太舒服了!夏季悄然离去,秋季快步走来,距离冬季也不远了~天气变冷以后,下班、放学回家了最惬意不过的就是洗个澡,如果泡完澡再搓个背&…

用html制作广告图片切换效果,基于jquery实现图片广告轮换效果代码

效果图:实现代码:hotmarquee*{margin: 0;padding: 0;}body{font: 12px;padding-top: 50px;padding-right: 200px;padding-bottom: 100px;padding-left: 200px;}ul{list-style: none;}img{padding: 2px;border: 1px solid #eee;}a{outline: none;}#imgs{width: 410px;margin-rig…

matplotlib柱状图上方显示数据_Python数据分析matplotlib可视化之绘图!

Matplotlib是一个基于python的2D画图库,能够用python脚本方便的画出折线图,直方图,功率谱图,散点图等常用图表,而且语法简单。Python中通过matplotlib模块的pyplot子库来完成绘图。Matplotlib可用于创建高质量的图表和…

应付账款账龄分析模板_企业财务报表分析论文应如何着手?

首先是企业的选择,最好选取上市公司进行分析,上市公司的财务数据比较透明,完全可以从新浪财经、中国证券网等平台获得详尽的报表数据资料,一般选取近三到五个年度。有了数据就可以着手分析了,我们可以从下面几个方法入…

dbeaver导入excel文件_PyQT5练习:制作Excel文件导入MySQL窗口

本文环境配置:系统>windows10:64位工具>PyCharm:2018.3.1语言>Python:3.7.1第三方库PyQT5:5.11.3pyqt5-tools:5.11.3.1.4PyMySQL:0.9.3openpyxl:2.5.12练手:制作…

编程中的蛇形填空问题_PCB—蛇形线的作用,这次真的是把你搞懂了

经常能看到论坛里有人在问蛇形线的问题。平时我们能看到蛇形线的地方大都是一些高速高密度板,好像带有蛇形线的板子就更高级,会画蛇形线就是高手了。网上关于蛇形线的文章也有很多,总感觉有些帖子的内容会误导新手,给人们带来困扰…

html5控制gif速度,gif加速软件 教你加快GIF图片的播放速度

一位狸友在编辑GIF动态图片时碰到了一个问题,就是不知怎么把GIF动画的播放速度加快(或减慢)。如果你也正巧碰到此类疑问或想知道GIF加速的方法,可以接着往下看哦。其实先理解了GIF动画的原理,并找对合适的gif编辑软件,解决这问题并…

html文本弹性,HTML5 很有趣的文本蹦床/弹性弯曲动效

CSS语言:CSSSCSS确定import url(http://fonts.googleapis.com/css?familyOpenSans:400,800,300);html,body {height: 100%;}body {display: -webkit-box;display: -webkit-flex;display: -ms-flexbox;display: flex;-webkit-box-pack: center;-webkit-justify-cont…

android studio mvvm模板生成_使用Vue快速生成shape背景图

写在前面在日常的Android开发之中,我们通常都会根据UI图去手动创建shape或者selector背景图,虽说创建起来很简单,但是未免也会感到繁琐,因此也研究了一些这方面的知识,包括自定义shapedrawable、dataBinding&#xff0…

python 句子中没有中文_人生感悟经典句子,生活中可以没有诗歌,但不能没有诗意...

也曾有过一些热忱和勇气,为了自以为的命中注定颠沛流离,本想有一段花好月圆,却未曾想过就此天各一方。不是不爱,不是不会爱,只是少了坚持走下去的勇气。想必这是很多人的心声。错过抑或过错,都是爱情里常有…

计算机用户删除 cmd,命令提示符下怎么新建用户和删除用户

在日常管理电脑中的用户时,我们都是通过控制面板和计算机管理的用户帐户来管理进行用户添加和用户删除的,有一种更快捷的方法就是使用命令对用户帐户进行管理,NET USER 用于创建和修改计算机上的用户帐户,如:新建&…

图像迁移风格保存模型_图像风格迁移也有框架了:使用Python编写,与PyTorch完美兼容,外行也能用...

原标题:图像风格迁移也有框架了:使用Python编写,与PyTorch完美兼容,外行也能用选自Medium作者:Philip Meier 机器之心编译 编辑:陈萍 易于使用的神经风格迁移框架 pystiche。 将内容图片与艺术风格图片进行…

vivo设置全屏后状态栏黑色_vivo手机用2年内存占满,是这3个功能捣乱,一键按下全部释放...

vivo手机用2年内存占满,是这3个功能"捣乱",一键按下全部释放经常使用手机如果没有清理习惯,那么应用一多,产生的文件就会变多,这样手机就会没用2年就出现卡顿的现象。今天来教大家怎样一键释放vivo手机内存。…

学计算机之路写一篇作文,我的学习之路作文(2篇)

我的学习之路作文(2篇)在我们平凡的日常里,大家对作文都再熟悉不过了吧,作文根据写作时限的不同可以分为限时作文和非限时作文。那要怎么写好作文呢?以下是小编整理的我的学习之路作文,仅供参考,欢迎大家阅读。我的学习…