關於 rails3 的 I18n 多國語系

 

== I18n 多國語系

 

* 下載翻譯的詞彙 http://github.com/svenfuchs/rails-i18n/tree/master/rails/locale/ 到 config/locale/ 下, 為了與Extjs的locale一致,將zh-TW和zh-CN改為zh_TW和zh_CN.

* 修改 /config/application.rb 的 config.i18n.default_locale = "zh_TW" 可以修改預設的語系.

* 在 app/views/layouts/application.html.erb 加入:

  <%= javascript_include_tag "/extjs/src/locale/ext-lang-#{I18n.default_locale}" %>

 

== 使用方法

 

  I18n.t('netzke.basepack.grid_panel.actions.add', :default => "Add")

 

可以直接使用 t 方法

  t("text.login_successful")

翻譯關鍵字可以用字串或 Symbol,也可以加上 Scope,例如:

  t("label.login")

  t(:login, :scope => :label )

 

== 修改 yml 設定(冒號後面要有空格)

 

  zh_TW

    netzke:

      basepack:

        generic:

          confirm: "确认"

          are_you_sure: "你确认吗?"

        grid_panel:

          actions:

            add: "新增"

            edit: "修改"

            del: "刪除"

            apply: "保存"

            add_in_form: "新增(form)"

            edit_in_form: "修改(form)"

            search: "搜索"

          deleted_n_records: "已刪除 %{n} 記錄"

          cannot_delete: "您没有权限删除数据"

 

    label:

      remember_me: "记注密码"

      login: "用户"

      password: "密码"

 

    button:

      register: "注册"

 

    text:

      welcome_login: "欢迎您登录"

      login_successful: "登录成功!"

      logout_successful: "登出成功!"

 

== 寻找未使用的翻译

 

* See all the missing I18n translations

  http://github.com/balinterdi/missing_t

* finding missing and unused translations

  https://github.com/tkadauke/i18n_tools

 

== I18n ActiveRecord backend

 

  https://github.com/svenfuchs/i18n-active_record

 

load I18n::Backend::Simple (yaml) to I18n::Backend::ActiveRecord::Translation table

 

  https://github.com/tb/i18n_sync_simple_to_active_record

 

== Magic i18n "columns" for Rails models

 

  https://github.com/jjbuckley/translatable_attributes  

 

== 讓使用者可以切換多語系

 

使用Phusion Passenger + nginx作web服務, 必須在 application_controller.rb 中加入:

 

  # For nginx:

  before_filter :set_locale

 

  def set_locale

    #if params[:locale] && ["en", "zh-TW", "zh-CN"].include?( params[:locale] )

      session[:locale] = params[:locale] if params[:locale]

    #end

 

    I18n.locale = session[:locale] || I18n.default_locale

  end

 

  def self.default_url_options(options={})

    {:locale => I18n.locale}

  end

 

在 View 中可以這樣做:

 

  link_to "英文版", :controller => controller.controller_name, :action => controller.action_name, :locale => "en"

 

config/routes.rb

  scope "(:locale)", :locale => /en|cn/ do

    resources :books

  end

 

參考:

  https://github.com/warrenli/kowloon

 

係一個網站應用程式,以香港嘅繁體中文為預設語言,可以轉換為英文或設定其他語言。

 

== Rails i18n for javascript

 

https://github.com/giniedp/j18n

 

== 時區 TimeZone

 

首先,資料庫裡面的時間一定都是儲存 UTC 時間。而 Rails 提供的機制是讓你從資料庫拿資料時,自動幫你轉換時區。例如,要設定台北 +8 時區:

首先設定 config/application.rb 中預設時區為 config.time_zone = “Taipei”,如此 ActiveRecord 便會幫你自動轉換時區,也就是拿出來時 +8,存回去時 -8

 

== 如何根據使用者切換時區?

 

首先,你必須找個地方儲存不同使用者的時區,例如 User model 有一個欄位叫做 time_zone:string。然後在編輯設定的地方,可以讓使用者自己選擇時區:

 

  <%= time_zone_select 'user','time_zone' %>

 

接著在 application_controller.rb 中加入:

 

  before_filter :set_timezone

  

  def set_timezone

     if logged_in? && current_user.time_zone

        Time.zone = current_user.time_zone

      end

  end

 

== Unicode 處理

 

在 Ruby 1.8 的字串其實只是 byte 的集合,如果你需要對 UTF-8 字串做一些函式操作,例如計算字數或字串替換,Rails 提供了 mb_chars 來包裝以獲得正確的結果,例如:

 

"中文".size # 6

"中文".mb_chars.size # 2

 

詳細的 API 文件請參考 http://api.rubyonrails.org/classes/ActiveSupport/Multibyte/Chars.html

 

如果你使用 Ruby 1.9,就不需要使用 mb_chars 了。Ruby 1.9 支援各種不同的 Encoding。

 

== Iconv

 

如果你需要在不同語系中處理,例如 Big5,那個 Ruby 的內建函式庫 Iconv 可以幫你處理轉換。

 

請參考 API 文件 http://ruby-doc.org/stdlib/libdoc/iconv/rdoc/index.html

 

== i18n API

 

  http://guides.rubyonrails.org/i18n.html

 

== I18n Backends

 

http://asciicasts.com/episodes/256-i18n-backends

http://railscasts.com/episodes/256-i18n-backends

 

MongoDB backend implementation for I18n gem.

https://github.com/aulizko/mongo-i18n

http://ulizko.com/posts/408/

 

 

 

 


你可能感兴趣的:(JavaScript,nginx,Ruby,Rails,ActiveRecord)