本文基于个人有限的国际化经验思考而得,未经完整实际项目验证,仅供参考。
很多项目在拓展海外业务时开始对代码进行国际化改造,但经常在这个时候要偿还技术债,被搞的焦头烂额,那么,国际化在什么时候做最合适,又该怎么做呢?
When
项目应该从一开始就做好国际化的准备,这并不会让你投入太多,但会让你在未来收益颇丰。
How
语言
不要在代码中硬编码任何语言,应该独立语言包处理。展示时可通过用户预设语言、浏览器 header Accept-Language
字段决定显示语言。
你也可以在该网站获取某种语言的多语言翻译,配置为 Alfred 工作流会进一步提升体验。
时间
统一使用 UTC 时区存储时间,然后在显示时,先判断用户预设时区,未知则可根据 IP 显示。亦可在邮件等场景直接表明时间和时区,如苹果的通知邮件时间November 24, 2019, 3:20 PM PST
。
手机号
由国家码和手机号两字段组成,仅在单一国家存在业务时,可隐藏并设定默认国家码,待拓展海外业务时再行开放,为国际化做好充足的准备。
国家/地区列表争议
由于当前部分国家的领土主权存在争议,稍有不慎可能会面临严重的政策风险,为了规避风险,可以采用下述两种方式以避免主权概念:
- 以【位置/Location】来替代,如 Windows 的语言/地区设置
- 以【国家/地区(Country or region)】来替代,如苹果的网站
状态表示
以位标表示,如 1Byte 含有 8bit,每 bit 又可以表示两种状态,如性别、是否在线、数据是否可见等明确二值状态。这种方式易于扩充、节省空间、限定两种状态,如果未来某个状态需要更多的值表示,还可以提取独立表示。
代码结构
部分地区会有些特别活动,如中国农历新年,因此,我认为此时应该提取一套基础核心代码,然后各地区根据该核心代码实现业务自定义,如核心代码包括新产品或新功能在全球的发布,而地区代码则处理该地区的本地化业务。
ISO 标准
建立一套全球通用的标准对我们的维护会有很大的便利。该部分可查看我的另一篇文章——常用 ISO 标准列表,在此不做赘述。