Ruby on Rails是一个很不错的web开发框架,不过由于目前其本身对国际化的支持较差,所以需要一些辅助的东西来解决国际化问题。
我最先使用的是一个叫localization的插件,这个插件的使用说明在Ruby on Rails官方的wiki上面有,这个插件使用比较简单,不过功能比较弱。
目前使用的是Ruby-GetText,这个插件功能强大,基于GNU的gettext,详细的使用说明在
http://manuals.rubyonrails.com/read/chapter/105
上面有写,我大概提一下要点:
首先要是Ruby on Rails支持UTF-8,通过将如下代码添加到environment.rb中:
$KCODE = ‘u’
require ‘jcode’
接着是安装Ruby-GetText,运行gem install gettext就可以了,如果是Windows平台就选2,否则选1。接着就是在项目根目录下面创建po目录,里面添加你需要Locale的名字作为子目录,比如en, zh_CN等。需要国际化的字符串都以_(”")来书写,比如想国际化“编辑”这个标签,就可以在视图的rhtml中使用_(”Edit”),这样在显示的时候会自动根据Locale来替换成相应的值。
接着在项目的rakefile里面如下内容:
desc “Create mo-files for L10n”
task :makemo do
GetText.create_mofiles(true, “po”, “locale”)
end
需要注意的是在上面给出的链接的那篇文章里面,还需要添加updatepo这样一个目标,不过这个目标在我这不起作用,总是出错,我的办法是下载那篇文章附带的代码:
http://www.digitale-wertschoepfung.de/artikel/gettext/using-gettext-with-rails.tgz
。在里面的script目录下面有一个localize文件,把它拷贝到你的项目的script目录下面,然后运行ruby ./script/localize {文本域的名字}就可以从controllers, views中更新po数据,用Unicode编辑器(比如UltraEdit)修改各个po文件,然后运行rake makemo就可以了。关于如果修改application.rb及其他controller的代码,查看给出的链接。此时重新启动server,就可以查看效果了。