Rails多国语言

来源:互联网 发布:深圳市房地产交易数据 编辑:程序博客网 时间:2024/04/24 12:28

I18n

下載 zh-TW.yml 到 config/locale/ 下,就有預設的繁體中文翻譯

/config/environment.rb 的 config.i18n.default_locale = "zh-TW" 可以修改預設的語系

參考投影片: Rails I18n

使用方法

I18n.t

在 View 中可以直接使用 t method

可以用字串或 Symbol,也可以加上 Scope,例如:

  • I18n.t("admin.event")
  • I18n.t(:event, :scope => :admin )

如何切換多語系

在 application_controller.rb 中加入:

  before_filter :set_locale  def set_locale  # 可以將 ["en", "zh-TW"] 設定為 VALID_LANG 放到 /config/environment.rb 中  if params[:locale] && ["en", "zh-TW"].include?( params[:locale] )    session[:locale] = params[:locale]  end      I18n.locale = session[:locale] || I18n.default_localeend      

在 View 中可以這樣做:

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

時區 TimeZone

首先,資料庫裡面的時間,預設一定都是儲存 UTC 時間。

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

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

首先,使用者會有個欄位是 time_zone:string。然後在編輯設定的地方,可以讓使用者自己選擇時區:

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

接著在 application_controller.rb 中加入:

  before_filter :set_timezone  def set_timezoneif logged_in? && current_user.time_zone      Time.zone = current_user.time_zone    endend  

Unicode

API 文件

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

  • "中文".size # 6
  • "中文".mb_chars.size # 2

Iconv

API 文件

如果你必須處理其他語系,例如 Big5,那個 Ruby 的內建函式庫 Iconv 可以幫你處理轉換。

原创粉丝点击