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

    ...

参考技术A

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

参考技术B android不是可以配置不同的语言xml吗,多配置几个,1、要不程序读取系统当前默认语言进行自动切换app语言版本,2、在app进入时让用户选择一次进行默认保存 参考技术C 很简单,当做三种不同语言添加到系统即可。因为同是西班牙,一种可以当作系统的西班牙,另外两种语言完全可以当作全新的语言。增加新语言方法如下帖子,这个帖子是MTK平台的,应该跟Android一样的。毕竟MTK平台也是在Android上再度集成开发的。
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多语言的纠结问题的主要内容,如果未能解决你的问题,请参考以下文章

在WinForm应用程序中快速实现多语言的处理--开发框架模块的整合

OAF 多语言的实现

多语言的测试经验分享

制作简单的静态网站多语言的选项都有哪些?

ThinikPHP框架对多语言的支持

在 ASP.NET 应用程序中实现多语言的最佳方法