Abbott

身体和灵魂,必须有一个在路上

分享技术,分享生活


Welcome Abbott's world

android国际化

一、 国际化

internationalization (国际化)简称 i18n,因为在i和n之间还有18个字符,localization(本地化 ),简称L10n。

二、 实现国际化的原理

当程序在运行时会检测当前的语言环境,再根据语言环境决定读取那种语言的字符串资源。 检查语言环境的任务由系统负责完成,开发人员要做的是为保存各种语言的字符串资源 建立==国际化目录==,然后将相应的资源文件放到这些目录中。

目前android的资源文件,包括图片,布局以及字符串资源都可以进行国际化定制。例如string的国际化目录 image

三、其他需要考虑的国际化问题

1、字符串国际化导致的布局问题

例如中文转化为英文后,可能会比较长,导致界面布局丑化。需要根据情况适当调整

2、时间格式化的问题

因为目前我们的时间格式都是本地硬编码操作,例如2014年07月,格式化为英文,不能直接转化为2014year07month.需要单独处理

3、表情国际化

目前我们聊天功能用到表情,==对于不同国家,表情系统可以保持一套即可==。我们直接遇到编码表情后,直接转换为表情即可。此问题在android上不存在。

4、服务端国际化

对于非用户产生内容,如楼盘详情,需要服务端提供本地化支持。故客户端可以通过上行header参数’language=zh’,服务端根据此内容进行国际化返回。

android判断语言环境方法

Log.e("lang", Locale.getDefault().getLanguage());
Log.e("country", Locale.getDefault().getCountry());

output:
lang: zh
country: CN

5、图片上文字

目前ui提供的图片上会有汉字等问题,应该尽量避免。或者通过客户端实现。否则也需要服务端对图片连接定制化。

6、地图国际化

目前百度已经支持国外地图了。可以基本满足我们现在的一些海外需求,但是在使用方面仍然不及谷歌。所以app可以考虑对地图的适配。

安卓地图国际化-滴滴项目实践

四、安卓国际化

客户端国际化的==主要工作量还是显示字符串的国际化==。而目前经过排查,android直接引用资源文件字符串的比例只有30%左右,剩下的基本都是通过硬编码实现。

国际化步骤

1、将所有硬编码改变为字符串引用

2、翻译字符串为目标国际语言

3、建立不同语言的国际资源目录。

步骤三提到的问题,需要根据实际情况,做适当适配调整。

五、如何找全硬编码

这里是完整的指导方案

1、配置lint进行数据扫描

2、利用excel来格式化数据

六、工具(安卓国际化插件)

国际化插件AndroidLocalizationer

优点:

1、可以直接自动化的生成与英文对应的资源目录与资源文件。

缺点:

1、目前只支持以英文为范本进行翻译(可以修改插件,支持以中文为范本进行翻译)

2、因为是机器翻译,如果是复杂性长句,可能无法满足需求。

3、目前提供两种翻译。一个是bing,一个是google。其中google是需要收费服务的。并且bing也是有api接口的额度限制的。

最近的文章

android实用工具高效

一 、Android Debug DatabaseAndroid Debug Database是一个非常酷的开源工具,完全改变了debug 数据库和shared preferences的方式。现在你可以在一个漂亮的界面上查看,编辑,删除数据,以及运行sql语句。二、Android WiFi ADB有了这个开源的工具,你就可以通过Wi-Fi从Android Studio运行app了。你无需用数据线把设备和电脑连接,享受无线调试带来的乐趣。三、ScalpelJake Wharton开发的一个非...…

android实用工具|高效继续阅读
更早的文章

JavaScript中对象的属性

在JavaScript中,对象是==属性的无序集合==,通过对JS属性的理解可以更好地了解JS对象。属性的构成与分类在JS中,对像的属性是由名字(key)和一组特性(attribute)构成,其中:1. key是一个字符串(包括空字符串)2. attribute是一些与之相关的值,主要是这4个:值(value),可以是任意的JS值,也可以是一个getter或setter函数(或两者都有)。当value为getter或setter时,那么我们称这个属性为“存取器属性(accessor pro...…

javascript|对象属性继续阅读