国际化和本地化初步
April 27, 2020
写在前面
公司项目网站改版在即,需要扩充国际化和本地化支持。
查资料看了下这两个东西,理清了一些概念,简单记录一下。
国际化和本地化
根据wiki的说法,国际化与本地化(internationalization and localization)是指修改软件使之能适应目标市场的语言、区差异以及技术需要。
因为这两个单词太长了,所以前者简写为i18n(表示i和n之间有18个字母),后者是L10n。分别用小写i和大写L是为了和之后的数字1区分,i18n和I18n,显然前者更容易辨识;L10n同理。
-
国际化
将软件与特定语言及地区脱钩的过程,即软件移植到不同语言和地区时,不需要做工程上的改动
-
本地化
与国际化相反,指移植软件时,增加与特定区域有关的信息和必要翻译的过程
举个例子,前端最常见的国际化场景是给文案增加不同的语言版本,比如一个按钮文案是“提交”,在英文状态下可能会改成"Submit"。
另一个例子是处理时间,用统一逻辑处理不同时区之间的时间,这个算国际化;但是不同地区时间显示的格式不一样,同样是英语国家,英国的时间一般是dd/mm/yyyy
,而美国的就是MM dd, yyyy
,这个算本地化。
更常见的本地化场景是货币,不同国家的货币一般来说都是不同的,符号不同、计数的方式也不同。比如欧元区的德国,除了欧元的货币符号与美元不同之外,逗号和小数点的规则完全相反,2.100,50
数值于美国的2,100.50
。
地区 | 货币 | 日期 |
---|---|---|
美国 | $1,234.56 | Apr 27, 2020 |
英国 | £1,234.56 | 27/04/2020 |
德国 | 1.234,56 € | 27/04/2020 |
中国 | ¥1234.56 | 2020/04/27 |
地区设置Locale
有了国际化和本地化的支持,那么下一步就是要获取用户的位置了,否则无法有效根据不同用户背景提供更匹配的服务,于是引入了一个地区设置locale的概念。
从用户的角度来说,操作系统一般会有一组相应的环境变量设置locale,而对于网站/服务提供者来说,其实locale更像是一种推定,根据已获得的某些用户数据,推测用户的背景,并让网站/服务根据这个假设为用户提供(可能)更匹配的服务,比如语言。后面讲到语言类别的时候会更具体的讲到。
例子: 语言设置
如何获取用户语言设置
优先级:https://support.google.com/webmasters/answer/182192?hl=en&ref_topic=2370587
domain->sub-domain->subdirectories->query parameters->http header accept-language->cookie->user agent
google如何检索不同语言版本
https://support.google.com/webmasters/answer/182192?hl=en&ref_topic=2370587