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,就可以查看效果了。