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') %>

就可以完成

留言

這個網誌中的熱門文章

Ruby Const_defined?