android多语言的纠结问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android多语言的纠结问题相关的知识,希望对你有一定的参考价值。
现在有一版软件面对使用西班牙语的3个不同的客户,但是这3个客户对同一款软件给出了三份不同的西班牙语的string的翻译。求一个解决办法,希望不用把同一个软件因为一点点的翻译不同而分出来3份,这样维护起来很麻烦,因为这一版软件里面有10个左右的应用,客户都有这样的要求。
求一个好的解决方案。
android应用支持多语言,包括同一种语言的变种(方言),比如就英语而言有,
en-rGB 英国英语
en-rUS 美国英语
en-rCA 加拿大英语
...
如果想处理这些变种里翻译不同的地方,可以创建多份语言资源,放到应用程序源代码里对应的资源目录,这样build出apk,用户安装以后,应用程序会自动根据用户手机里的语言设置选择对应的字符串显示。
/res/values-en-rGB/strings.xml
/res/values-en-rUS/strings.xml
/res/values-en-rCA/strings.xml
类似地,就西班牙语而言也有很多变种,你可以判断一下这些客户使用的是哪个变种,然后分目录存放对应的翻译。
es 一般的西班牙语(general)
es-rAR 阿根廷西班牙语
es-rBO
es-rCL
es-rCO 哥伦比亚西班牙语
es-rCR
es-rDO
es-rEC
es-rES 卡斯蒂利亚西班牙语 (西班牙人听说读写用的)
es-rGT
es-rHN
es-rMX 墨西哥西班牙语
es-rNI
es-rPA
es-rPE
es-rPR
es-rPY
es-rSV
es-rUS 美国西班牙语
es-rUY
es-rVE
...
android多语言实现必须是将strings.xml放在不同的文件夹目录下,由安卓系统自动去加载文字资源。
Android 中要实现国际化比较简单,字符串国际化:只要在 res 文件夹下新建对应语言的 values 文件夹就好了。
例如:
英语环境下的,文件夹命名为:values-en
美国英文环境:values-en-rUS
中文环境为:values-zh
大陆地区中文环境: values-zh-cn
eclipse 下新建 Android 项目时,会在 res 目录下自动创建一个默认语言环境的文件夹 : values 。
当某一个资源没有在语言环境的对应的资源集合中找到时,就会使用 values 下的资源。 若某一个语言环境没有在项目中定义语言环境,那么也会使用 values 下的资源。
android多国语言文件夹文件汇总如下:
中文(中国):values-zh-rCN
中文(台湾):values-zh-rTW
中文(香港):values-zh-rHK
英语(美国):values-en-rUS
英语(英国):values-en-rGB
英文(澳大利亚):values-en-rAU
英文(加拿大):values-en-rCA
英文(爱尔兰):values-en-rIE
英文(印度):values-en-rIN
英文(新西兰):values-en-rNZ
英文(新加坡):values-en-rSG
英文(南非):values-en-rZA
阿拉伯文(埃及):values-ar-rEG
阿拉伯文(以色列):values-ar-rIL
保加利亚文: values-bg-rBG
加泰罗尼亚文:values-ca-rES
捷克文:values-cs-rCZ
丹麦文:values-da-rDK
德文(奥地利):values-de-rAT
德文(瑞士):values-de-rCH
德文(德国):values-de-rDE
德文(列支敦士登):values-de-rLI
希腊文:values-el-rGR
西班牙文(西班牙):values-es-rES
西班牙文(美国):values-es-rUS
芬兰文(芬兰):values-fi-rFI
法文(比利时):values-fr-rBE
法文(加拿大):values-fr-rCA
法文(瑞士):values-fr-rCH
法文(法国):values-fr-rFR
希伯来文:values-iw-rIL
印地文:values-hi-rIN
克罗里亚文:values-hr-rHR
匈牙利文:values-hu-rHU
印度尼西亚文:values-in-rID
意大利文(瑞士):values-it-rCH
意大利文(意大利):values-it-rIT
日文:values-ja-rJP
韩文:values-ko-rKR
立陶宛文:valueslt-rLT
拉脱维亚文:values-lv-rLV
挪威博克马尔文:values-nb-rNO
荷兰文(比利时):values-nl-BE
荷兰文(荷兰):values-nl-rNL
波兰文:values-pl-rPL
葡萄牙文(巴西):values-pt-rBR
葡萄牙文(葡萄牙):values-pt-rPT
罗马尼亚文:values-ro-rRO
俄文:values-ru-rRU
斯洛伐克文:values-sk-rSK
斯洛文尼亚文:values-sl-rSI
塞尔维亚文:values-sr-rRS
瑞典文:values-sv-rSE
泰文:values-th-rTH
塔加洛语:values-tl-rPH
土耳其文:values--r-rTR
乌克兰文:values-uk-rUA
越南文:values-vi-rVN
http://www.16rd.com/forum.php?mod=viewthread&tid=4099 参考技术D 英语(美国):values-en-rUS
英语(英国):values-en-rGB
英文(澳大利亚):values-en-rAU
英文(加拿大):values-en-rCA
英文(爱尔兰):values-en-rIE
英文(印度):values-en-rIN
英文(新西兰):values-en-rNZ
英文(新加坡):values-en-rSG
英文(南非):values-en-rZA
英语都分这么多种,现在应该有两种解决方案。
第一:如果西班牙语也可以分类的话,你可以定义多份xml文件,让应用随着系统语言改变而改变。
第二:如果西班牙语实在是分不出这么多类,那你只能自定义应用的配置文件了,让用户自己选择使用某种西班牙语。
你这么问题我觉得第二种方法更适合,体验性也更好一些。
多语言的测试经验分享
(转载)原文地址:https://blog.csdn.net/alice_tl/article/details/78907732#comments
所谓多语言测试,是指APP在多个使用不同语言的国家发布,则必须对多种语言支持的一种场景测试。比如希望在Google Play上发布一个APP,提供给全球用户下载,那么就需要支持英语、泰语、韩语、阿拉伯语等等不同国家的语言。
近期项目要接触到多语言测试,于是将自己的经验梳理了一下,可以给大家参考。
测试注意事项:
1、同一语言,不同国家的代号不同
不同国家,即使都是英文,语言的代码也是不一样的,举个例子看大家就明白了。
这是列举的部分英语为母语的国家语言代号:
en英语
en-us英语(美国)
en-gb英语(英国)
en-au英语(澳大利亚)
en-ca英语(加拿大)
这是列举的中文繁体的不同地区语言代号:
zh-tw中文(中国台湾)
zh-hk中文(中国香港特别行政区)
语言代号与Android系统的语言具有对应关系,即系统语言里看到的这个列表:
因此,如果代码里设定了当检测到系统的语言代号为en-us美国英语时,才显示英文字符串信息。那么切换系统到英国英语时,app仍然是不显示英文的,甚至可能会直接崩溃。
2、不同国家和地区,日期的显示习惯不一样
用户设置了不同语言和地区时,操作系统会自动为其设定相应的日期和时间格式,如何用户在设备上选择的日期格式和APP代码里的格式不一致,就会导致APP无法显示日期和时间,甚至使APP崩溃。
比如中国日期,1996年3月2日
英国习惯表示为:2nd March,1996
美国习惯表示为:March 2,1996
3、不同语言,文字的换行显示有不同的处理方法
对于中文来说,每个字都是独立的,随时可以换行。而如果把英文单词按照汉字一样处理,则认为每个字母是独立的,这样会导致单词换行显示且没有连字符。
并且英文的单词普遍比中文更长。
例如“不同”,翻译成英文是“different”,英文足足比中文多了一倍的字符长度。
不能词中换行可能导致的问题就是文字过多重叠、或者是压缩字号展示,又或者是以省略号显示了,总之都不美观。
因此,要重点关注字符串长的内容,尤其是文案提示、导航栏、APP的一些操作按钮。
4、不同语言,文字的阅读顺序不一致
比如,英文是“从左往右”写,而希伯来文和阿拉伯文是“从右往左”写。
这是英文界面从左往右的布局图:
这是阿拉伯语言适配的界面:
那么系统切换为阿拉伯文时,APP界面展示是否符合阿拉伯人的文字阅读习惯呢?
如果不知道系统里哪个选项对应的是阿拉伯语言,或者希望知道系统里的各个语言选项对应的是什么语言,可以看这个清单:
https://blog.csdn.net/alice_tl/article/details/78942241
5、不同国家和地区,使用语言的情景不同
比如大部分软件中都有注册登录体系,并且支持用户修改昵称,有的软件会设定为昵称只允许输入中文、字母和下划线,不支持输入空格。这样对于英文用户来讲,是非常不合理的设计。
因此国际化下,我们更应该注重用户场景测试,考虑国外人的生活文化习惯。
6、不同语言,适配的输入法不同
很多APP会在多个国家或地区发布,因此要支持多语言的显示,并且需要支持多语言的键盘,比如微信,当手机系统语言设定为英语时,APP界面应显示为英语,支持输入中文、英文以及各种语言。系统切换为泰语,就应该要支持泰语的键盘输入内容。
并且,如果切换和适配语言的同时,能够自动默认切换为对应语言的输入法,用户体验上可能会更好一些。
如何避免多语言问题呢?
1、翻译人员最好是够专业。
专业性体现在,一是对这门语言非常掌握,可以保证准确性,另外可以保证符合不同国家和地区的语言文化习惯,不会出现一些忌讳词或负面词汇。
2、翻译后的内容最好是言简意赅。
这样可以减少很多不必要的重叠、换行、省略显示等问题,通常多语言测试的缺陷中,70%以上的问题都是因为内容过长导致的显示问题。
3、开发实现上最好是多语言文件脱离代码。
避免将多语言文字变量写死在代码中,最好是独立文件,并且每个语种对应一个文件,这样测试和校对时都会更加方便,并且不容易出错。
4、开发实现上最好是设置一种默认语言。
当app识别到系统设置的语言代号并没有对应的字符信息匹配时,直接显示默认语言。通常国内可以设置为中文,海外可以设置为英文,这样当系统设置的语言,对应APP代码中找不到匹配的语言文件时,显示为英文,总好过出现崩溃。
如何提高多语言测试的效率呢?
1、检查语言对应的values xml文件代替app界面
因为通过app界面检查时,一方面由于语言多不懂,操作难度增加,操作效率降低,并且覆盖的界面太多,相当于各种语言下把app又冒烟测试一遍。如果支持40种语言,那就要冒烟四十次,测试效率极低。
因此,不必全部通过app的操作和界面进行检查,可以直接看xml文件中是否有过长和偏长的内容,通常情况下所有的values文件都在同一个目录,我原来的项目一般是以翻译后的内容不超过中文长度的1.2倍来作为标准的。
2、将了解完整的国家、及语言对应关系,快速设置多语言
完整的国家语言代码见这篇文章:https://blog.csdn.net/alice_tl/article/details/79706474
3、将第一点中的手动检查,做成自动化工具覆盖
定义一个字段内容的长度基准,轮询对各个xml文件进行比较、覆盖、以及报告。人工只分析报告就可以来。
以上是关于android多语言的纠结问题的主要内容,如果未能解决你的问题,请参考以下文章