糕飛.想點三十而立.努力發奮

2012年8月13日 星期一

Rails 下的多語言化筆記

+ 暫沒回應

為免自己忘記怎樣為 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}')]