-
Notifications
You must be signed in to change notification settings - Fork 141
i18n
xiangshouding edited this page Jan 14, 2015
·
1 revision
国际化解决方案适应于国际化多语言支持的解决方案.
- 解决当语言增多时出现的文件成倍增长的问题
- 支持动态加载,运行时分析
- 解决本地编译效率低下、国际化目录规范复杂开发成本高等问题
国际化是指产品、应用或者内容的设计和开发可以使得不同语言、文化、地区的目标受众容易接受和实现本地化这个单词一般被缩写成 i18n
国际化过程由如下基本的必要属性:
-
设计和开发方式必须要能够容易的实现本地化和通用部署,包括使用unicode字符,确保对老的字符编码做了处理等等
-
提供一些只有在某些情况下才会使用的本地化特性。比如在HTML的DTD中支持双向的文本展示特性,或者标示出语言,或者在CSS中提供支持文字垂直方向展示等等
-
能够支持一些本地区域的语言和文化展现,如加入一些预定义的本地化数据或者从当地图书馆导出的用户属性,比如时间和日期的格式化展现,数字格式化,排序方式,用户名展示方式等等
-
从源码中区分本地化的元素和内容,比如本地化备选展现方式可以通过用户在界面上选择后再独立展现
- 产品调研和确定目标市场
- 给出产品需要的功能需求文档
- 研发人员调研目标市场的本地化特性,评审需求文档
- 设计、开发
- 联调、测试,翻译语言
- 效果确认,语言确认
- 上线,效果确认,语言确认
- 前端开发调研点
- 是否有单复数
- 字符的字节数
- 人称属性,比如他它她
- 性别属性,某些动词会因为性别属性不一样而表现不一样
- 语言展示的方向:LTR,RTL,VERTICAL
- 时间的显示格式
- 日期的显示格式
- 是否有本土化的日期显示方式(如中文: 2012年12月30日,泰语佛历显示等)
- 时区标示符,参考这里
- 数字格式化显示
- 货币符号
- 字符行高,字体大小
- 虚拟键盘支持(阿语)
- 输入法支持(越南语有输入法的支持)
- RTL语言的自动识别
- 自动抽取所有的词条
- css RTL自动转换
- 运行时展示不同语言
根据gettext的思路,一份代码在不同语言环境下展示不同语言。
- 下载demo
- 编译发布项目
- fisp release -r common
- fisp release -r i18n
- 预览 http://127.0.0.1:8080
按照上面说的使用方法,已经在本地模拟一个国际化项目。修改测试数据i18n
字段,为en_US、ja_JP或其他分别看看效果。
<?php
$fis_data = array(
'i18n' => 'en_US'
);
?>
进入模块i18n,详细了解一下目录结构;
└── i18n
├── fis-conf.js
├── lang #语言目录
│ ├── en_US.po
│ └── ja_JP.po
├── page
├── server.conf
├── static
├── test
└── widget
当这个模块release以后得到如下结果;
.
├── config
│ ├── i18n-map.json
│ └── lang
│ ├── i18n.en_US.json
│ └── i18n.ja_JP.json
├── server-conf
│ └── i18n.conf
├── static
│ └── i18n
│ ├── mod.js
│ └── widget
├── template
│ └── i18n
│ ├── page
│ └── widget
└── test
└── i18n
└── page
可以看到config/lang目录下是一些JSON翻译文件。翻译文件格式为;
{
"原文": "译文",
"原文1": "译文1"
}
这样当运行时调用了翻译函数,翻译函数读取对应的翻译文件展示译文。
- JS中的语言
- Smarty模板中的语言
js中的语言:
var str = __('中文');
Smarty模板中的语言:
{%'中文'|gettext%}
综述,开发过程;
- 功能开发完成后,通过
fisp xgettext
抽取所有的词条,产出<namespace>.en_US.po
等语言文件 - 开发人员完善
po
文件 - 编译项目
fisp release -r project
- fis在编译过程中,分析
po
文件,生成<namespace>.en_US.json
语言翻译文件key=>value
- 运行时执行
{%'xxxx'|gettext%}
函数时,根据语言类型,读取对应的翻译文字并展示
更多国际化资料[http://fe.baidu.com/doc/i18n/]