為免自己忘記怎樣為 Rails application set 多語言支援,所以記在這裏
主要參考這裏: http://guides.rubyonrails.org/i18n.html
加進以下的 code
# app/controllers/application_controller.rb
before_filter :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
def default_url_options(options={})
logger.debug "default_url_options is passed options: #{options.inspect}\n"
{ :locale => I18n.locale }
end
然後加上這樣類型的 route
# config/routes.rb
scope "(:locale)", :locale => /en|nl/ do
resources :books
match '/:locale' => 'dashboard#index'
end
再加上在 config/locales/ 裏有對應的 yml/rb 檔 (en.yml, zh.yml),各頁面用 t('KEY') 來 load string,便可以用 /en/books, /zh/books 的 link 去各語言版面了。
要注意的是 rails 預設只載入 config/locales/*.yml 如果還想替拆細各語言檔方便管理,如
locales
|- en.yml
|- zh.yml
|-- pages
| |- en.yml
| |- zh.yml
便要做以下的 setting ,這樣 rails 才會轉入其他路徑下的 yml
# config/application.rb
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
張貼留言