rails 与 i18n
最近因为有做多语言版本的需要,多了解了一些 Rails 与 i18n 的内容。
Rails 项目要实现多语言版本,也就是我们常说的 i18n,有好多种实现方式。不过最普遍使用的,就是 GetText 。虽然网上有许多利用 GetText 实现国际化的例子与示例代码,但是照抄那些代码并不能给自己带来实质性的提高,还是需要总结一下的。
GetText 的工作原理,是将所有需要国际化的字符串,以类似于 Java 的资源的形式引用,例如 _('COMPANY_NAME')
实际上就是把 COMPANY_NAME
作为资源键,通过方法 _()
就能得到所需语言的字符串。
建立这个字符串资源需要使用到 poEdit 。这是一个基于 GNU 的开源项目,与 GetText 配合可以达到非常好的效果。
具体的操作流程,随便搜索就有很多,大致的概括如下:
- 将原项目中需要国际化的内容,替换成对应的键
- 建立 po 目录,使用
rake updatepo
命令,将项目中所有的键取出,得到一个 .pot 文件 - 在 po 目录中建立相应的语言目录,比如 en_US,zh_CN 等
- 使用 poEdit,从 .pot 文件导入目录,保存得到一个 .po 文件
- 将 .po 文件复制到所有语言版本目录下,并使用 poedit 翻译成相应的语言
- 使用 'rake makemo` 命令,自动在 locale 下创建对应的语言版本以及 .mo 文件,翻译工作完成
- 在项目中,使用
set_locale
方法设置需要的语言版本
整个过程并不复杂,需要注意一点就是各国语言文字的表现可能不尽相同,需要多考虑一下页面的布局与美观,不能因为字符问题就把原有的设计破坏掉。