Rails 訊息資源的國際化(I18n)

meteorlwj發表於2010-05-27
一、概述
    Rails 已經完成了資源國際化的內部實現,我們只需要在配置檔案中開啟 I18n,並寫相應語種的資原始檔就可以了。

二、例子演示
    1、開啟I18n
         建立一個配置檔案,用於存放本地化的資訊( RailsProject> config/initializers/i18n.rb),檔案內容如下:

         I18n.default_locale = 'zh'
         LOCALES_DIRECTORY = "#{RAILS_ROOT}/config/locales/"

         LANGUAGES = {
              'English' => 'en',
              'Chinese' => 'zh'
          }
  
         引數解釋:
              I18n.default_locale 指定預設的本地語言
              LOCALES_DIRECTORY 指定存放多國語言檔案的目錄
              LANGUAGES 儲存所支援語種

      2、在layout檔案中加入一個下拉框,給用於提供語種選擇(RailsProject> app/views/layouts/base.rhtml ),新增程式碼如下
          <% form_tag '', :method => 'GET', do %>
            <%= select_tag 'locale', options_for_select(LANGUAGES, I18n.locale),
                 :on
change => 'this.form.submit()' %>
             <%= submit_tag 'submit' %>
           <% end %>

    註解:LANGUAGES 就是剛在配置檔案中宣告的LANGUAGES

        3、建立一個前置過濾器,用於設定本地化語言(RailsProject> app/controllers/application.rb),程式碼如下
        class ApplicationController < ActionController::Base
  layout "base"
  before_filter :set_locale
  ...........
  protected
  def set_locale
    session[:locale] = params[:locale] if params[:locale]
    I18n.locale = session[:locale] || I18n.default_locale
    locale_path = "#{LOCALES_DIRECTORY}#{I18n.locale}.yml"
    unless I18n.load_path.include? locale_path
       I18n.load_path << locale_path
       I18n.backend.send(:init_translations)
    end
  rescue Exception => err
    logger.error err
    flash.now[:notice] = "#{I18n.locale} translation not available"
    I18n.load_path -= [locale_path]
    I18n.locale = session[:locale] = I18n.default_locale
  end
end

4、用I18n.translate方法(簡寫I18n.t,甚至t),將頁面中寫死的字串替換掉(RailsProject> app/views/layouts/base.rhtml),程式碼如下
         <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html>
<head>
  <title><%= I18n.t 'base.title' %></title>
</head>
<body> 
  ............
</body>
</html>

   5、在存放多國語言目錄下加入各種語種檔案
        RailsProject> config/locales/zh.yml  程式碼如下
        zh:
           base:
              title: "演示Rails的國際化支援"
   
       RailsProject> config/locales/en.yml 程式碼如下
       en:
          base:
              title: "Show Rails internationalization support"

至此,重啟伺服器,你就可以看到雙語網站了。

相關文章