[安裝]
確認你有安裝 gettext,在 Ubuntu 上請用以下命令安裝:
% apt-get install gettext
安裝
libgettext-ruby1.8:
% gem install gettext
或者
% apt-get install libgettext-ruby1.8
[建立環境]
舉例來說,如果我的 Rails app 目錄位於 /var/rails/sandbox/ 路徑下,先在該目錄下建立 po 檔案夾,裡頭包含各個你要 localize 的語言子目錄,如下:
% ls -l podrwxr-xr-x 2 root root 4096 2006-09-15 20:21 endrwxr-xr-x 2 root root 4096 2006-09-15 21:21 jadrwxr-xr-x 2 root root 4096 2006-09-15 20:21 zh_CNdrwxr-xr-x 2 root root 4096 2006-09-15 21:04 zh_TW
編寫 Rakefile,如下:
require(File.join(File.dirname(__FILE__), 'config', 'boot'))
require 'rake'
require 'rake/testtask'
require 'rake/rdoctask'
require 'tasks/rails'
require 'gettext/utils'
desc "Update pot/po files"
task :updatepo do
MY_APP_TEXT_DOMAIN = "sandbox" #sandbox 是我的 Textdomain, 你應該改成你自己的
MY_APP_VERSION = "sandbox 0.0.9"
GetText.update_pofiles(MY_APP_TEXT_DOMAIN,
Dir.glob("{app,lib}/**/*.{rb,rhtml}"),
MY_APP_VERSION)
end
desc "Create mo-files"
task :makemo do
GetText.create_mofiles(true, "po", "locale")
end
[攥寫你的程式碼]
你想要做 localize 的地方可以利用 _() 或者 N_() 函式包裝起來,如下:
<%= _("This string should be localized") %>
<%= N_("This string should be localized") %>
設定 application.rb,如下:
require 'gettext/rails'
class ApplicationController < ActionController::Base
GetText.locale = "zh_TW"
init_gettext "sandbox"
在這裡我先暫時將 locale 強制設定成 zh_TW 做測試,事實上,你可以透過幾種方法來改變語言(如果不直接設定 GetText.locale= 的話):
- QUERY_STRING 中的 lang 參數設定。
- Cookie 中的 lang 參數設定。
HTTP_ACCEPT_LANGUAGE 中的值。- 你也可以透過 config/routes.rb 讓某路徑對應到特定語言中,例如 /login/zh_TW/hello/ 可以對應到 zh_TW 語言中。
ActionController::Routing::Routes.draw do |map|
map.connect ':controller/:lang/:action/:id'
end
[建立 po 跟 mo 檔]
回到你的 Rails Root 路徑下,執行以下命令產生 pot 檔。
% rake updatepo
執行完後你會在 po/ 目錄下找到一份 pot 檔,檔名是你取的 Textdomain,將這份 pot 檔案翻譯後並改名成附檔名為 .po 的檔案,並放到該語言的目錄下,例如你翻譯成中文後,可以放到 zh_TW 目錄下。
翻譯完後,執行:
% rake makemo
你會發現在你 Rails app ROOT 目錄下會多個檔案夾 - locale ,在裡頭你會發現 zh_TW/LC_MESSAGES/sandbox.mo ,這就是產生的 mo 檔,有用過 gettext 的人,相信對這些流程應該不陌生。
執行你的 Rails app 後,你就可以發現你的字串都被置換了。
[參考資源]
- Ruby-Gettext-Package
- Using Gettext To Translate Your Rails Application (y)
- Ruby-GetText-Package HOWTO for Ruby on Rails


