一、 国际化
internationalization (国际化)简称 i18n,因为在i和n之间还有18个字符,localization(本地化 ),简称L10n。
二、 实现国际化的原理
当程序在运行时会检测当前的语言环境,再根据语言环境决定读取那种语言的字符串资源。 检查语言环境的任务由系统负责完成,开发人员要做的是为保存各种语言的字符串资源 建立==国际化目录==,然后将相应的资源文件放到这些目录中。
目前android的资源文件,包括图片,布局以及字符串资源都可以进行国际化定制。例如string的国际化目录
三、其他需要考虑的国际化问题
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来格式化数据
六、工具(安卓国际化插件)
优点:
1、可以直接自动化的生成与英文对应的资源目录与资源文件。
缺点:
1、目前只支持以英文为范本进行翻译(可以修改插件,支持以中文为范本进行翻译)
2、因为是机器翻译,如果是复杂性长句,可能无法满足需求。
3、目前提供两种翻译。一个是bing,一个是google。其中google是需要收费服务的。并且bing也是有api接口的额度限制的。