今天是元旦三天連假的最後一天
回到台北房間內,疲倦感瞬間湧現
有相當大的衝動想要洗澡後馬上去睡
可惜的是現在還有三天才完成
果然巨大的考驗都在接近終點處
延續昨天的主題
今天一樣來介紹專案上碰過的實用Gem
i18n-js
先為可能不知道i18n是什麼的朋友解說一下
所謂的i18n是一個縮寫
全名是「Internationalization」
共有20個字母,所以扣除掉開頭i與結尾n,中間共有18個字
所以得名i18n,畢竟每次提到都要寫這麼長的一個字
也是相當相當麻煩的一件事
(你也知道工程師都是很懶惰的)
來看看這個字: International + iza + tion
除了rails 以外
大部份的語言在這個領域,也都是使用這個字
是一個共同的課題
rails內建i18n的支援,詳情參考文件
因為這不是今天的重點,先跳過
但內建的支援主要是針對view的部分
更準確說是針對html的呈現可以使用多國語系
如果js也需要用到不同語系的內容
還需要透過頁面變數或ujs等方式傳遞
其實頗不方便
這個Gem就是可以方便簡單的解決這個複雜的問題
gem "i18n-js", ">= 3.0.0.rc11"
目前最新版本是3.0.0
如果有更新可以考慮用最新版
//
// This is optional (in case you have `I18n is not defined` error)
// If you want to put this line, you must put it BEFORE `i18n/translations`
//= require i18n
// Some people even need to add the extension to make it work, see https://github.com/fnando/i18n-js/issues/283
//= require i18n.js
//
// This is a must
//= require i18n/translations
如果有改變i18n.js與translations.js的路徑
記得這邊也要一起更動
<%= javascript_include_tag "i18n" %>
<%= javascript_include_tag "translations" %>
一般而言是放在application.html
在開始使用前
你必須確保translations.js
這個檔案有被正確產生
這是將你所有的語系檔定義的內容轉為js物件
所以當你有更動語系檔(例如zh-tw.yml)
理論上這個檔案要即時更新重新編譯
如果沒有,可以執行
rake i18n:js:export
他會強制產生一份新的
這樣就可以使用囉
比方說你的語系檔如下:
#config/locales/zh-tw.yml
zh-tw:
hello: "你好嗎"
在js的部分只需要像這樣:
#app/assets/javascript/hello.coffee
$ ->
alert #{I18n.t('hello')}
使用上就像在controller呼叫helper一樣方便
是不是很神奇呢?