Rails i18n 多語系
這篇的由來
因為近期有一張重構的票,剛好有需要用到 i18n 所以特別找了相關資料和原始碼
i18n 名字的由來
會寫這個是因為在搜尋相關資料的時候看到的,因為覺得實在太有趣所以特別記錄一下 ( 笑
在資訊科技領域,國際化與在地化(英文:internationalization and localization)是指修改軟體使之能適應目標市場的語言、地區差異以及技術需要。
基於他們的英文單字長度過長,常被分別簡稱成i18n(18意味著在「internationalization」這個單字中,i和n之間有18個字母)及L10n。使用大寫的L以利區分i18n中的i和易於分辨小寫l與1。
簡單來說就是覺得太長,所以用個代號來取代 ( 笑
i18n gem
i18n Github 網址是,Ruby gem 的 Github 存放位置,裡面有相關設定與介紹
install
gem 'i18n'
load_path
通常在 Rails 裡面,語系設定的 yml 會放在 config > locales 裡面,不過我們為了比較好管理所以可能會用資料夾來分類,再把整理好的各自放進相關的資料夾來進行管理,所以在 locales 資料夾底下會有很多資料夾,在資料夾裡面又有很多語系設定的 yml
config.i18n.load_path += Dir["#{Rails.root}/config/locales/**/*.yml"]
用這種寫法來把底下所有的 yml 檔案全部讀取,會以文字陣列的方式來寫入
locales 底下所有文件路徑變成 String 陣列
特別要注意的是,後寫的會覆蓋過前面的,這部分我會在 yml 那進行介紹
fallback
根據 i18n/lib/i18n/locale/fallbacks.rb 文件介紹
using the default locale as default fallback locale
當如果設定的沒吃成功,就會以退回預設的
config.i18n.fallbacks = {
'zh-TW': %i[zh-TW zh-CN en],
'zh-CN': %i[zh-CN zh-TW en],
en: %i[en zh-TW zh-CN]
}
lazy lookup
在 rails 的 i18n 裡面有個功能叫做 lazy lookup,lazy lookup 就是只要 locales 的路徑照一定的方式命名,在 view 或 controller 中就可以是使用縮寫的方式來使用翻譯字串
假設當前有個 index.html.erb 檔案,路徑是
views/client/users/index.html.erb
那原本完整路徑的寫法是照著在 yml 設定的方式來進行讀取
zh-TW:
admin:
header:
member: 使用者
<%= t('admin.header.member') %>
不過根據 lazy lookup 的用法我們可以改成
zh-TW:
client:
users:
index:
member: 使用者
<%= t('.member') %>
就可以完成
留言
張貼留言