1

什么是i18n,为什么不是i1024n

数数看,Internationalizing (国际化),是不是i + 18个字母 + n ………………

为什么要多语言

显而易见…多语言的支持可以让你的应用支持多语言……,好吧,这里其实不仅仅是应用上多语言,在Chrome Store里也会将你的应用名字、介绍等多语言化。
效果:
中文商店: https://chrome.google.com/webstore/detail/rgb%E8%BD%AChex/pbbmhedhahomalkbcigoejgllbbopofi?hl=zh-CN
英文商店:
https://chrome.google.com/webstore/detail/rgb%E8%BD%AChex/pbbmhedhahomalkbcigoejgllbbopofi?hl=en
会显示不同的应用名称,应用介绍,和应用介绍(一大段),甚至截图,宣传海报等……而且不会影响你在搜索结果的排名。

开始

Chrome Store在上传应用时要求提供源码打包的.zip格式,因此Chrome Store会读取你的源码文件,有一些固定的目录格式,和清单列表。支持多语言化就是其中一个。
这是一个固定的文件夹,在你的应用中创建_locales文件夹,并在下面创建对应你语言代码的文件夹,常用的几个:

  1. 中文(简体):zh_CN
  2. 中文(繁体):zh_TW
  3. 英文:en

同样还有一个固定的文件格式就是messages.json,存放你的语言内容,在每个语言代码文件夹里面。
然后你的文件结构看起来像这样:
Chrome App 文件结构

应用多语言

多语言的支持方法跟“定义一个变量然后调用它”有相似之处,在你需要的地方,用:

__MSG_somethingYouNeed__

这种结构来替换掉,就是以两个下划线__包裹,用大写的MSG做标识符后跟变量名。然后在对应的每个语言代码文件夹下声明它的内容。

如我的应用名在中文是“RGB转Hex”,英文是“RGB to Hex”,那么我在manifest.json中的"name"(定义应用名的键),的值写MSG_appName,如:

{ "name" : "__MSG_appName__" }

然后在/_locales/en/messages.json中对应,如:

{ "appName": "RGB to Hex" }

,同理,在/_locales/zh_CN/messages.json中:

{ "appName": "RGB转Hex" }

这样,在中文Chrome Store和英文的Chrome Store会显示不同的应用名称。
建议使用驼峰方式命名。

代码中

那么如何让你的应用支持“原生的”i18n呢,Chrome给了这样一个API

chrome.i18n.getMessage( key );

也就是说,在你需要的地方chrome.i18n.getMessage('appName');就会根据系统语言显示不同的应用名(当然不能用在manifest.json里)

Stay Native

如果在一个方式、效果(交互)或是方法上纠结如何处理才能更“优雅”,Stay Native。

最后

最后在的清单文件manifest.json中定义默认语言:

{ "default_locale": "zh_CN" }

联系

如果有类似的疑问或开发中遇到的问题非常欢迎能与您一起研究,@我或任何一种方式都可以。

最后把关于介绍如何i18n的文档:Internationalizing Your App


狗屌
1.7k 声望70 粉丝

PHP Parse error: syntax error, unexpected T_STRING in www\segmentfault.com\module\user\setting.php on line 5