Rails多国语言

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_locale
end
  
  			
  		

在 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_timezone
	if logged_in? && current_user.time_zone
      Time.zone = current_user.time_zone
    end
end

  		

Unicode

API 文件

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

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

Iconv

API 文件

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

你可能感兴趣的:(Rails多国语言)