== 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