在使用simple_form時,很多人會使用label來命名model的中文,其實可以透過設定model的多語系yml來實作解決這樣的需求。同時,model name本身也可以透過activerecord來設定語系。
一般的做法如下: <%= t("website.title") %>
搭配語系檔的寫法:
zh-TW.yml
"zh-TW":
website:
title: "標題"
題外話,在yml檔內zh-TW:
與"zh-TW":
是一樣的
但是後者會美觀一點,所以通常我會選後者,如果沒有「-」時
使用前者就可以了,例如en:
這邊要特別注意,yml檔不接受半形空格以外的縮排
所以如果是用Tab鍵來縮排,很可能會意外爆掉,這點要特別注意!
但假如說有很多個欄位,就要設定非常多次,比如說你可能有按照頁面整理的習慣
"zh-TW":
admin:
website:
title: "標題"
...
backend:
website:
title: "標題"
...
這個時候,按照model來翻譯欄位,或許是個比較好的選擇
比方說像是這樣
"zh-TW":
activerecord:
attributes:
website:
title: "標題"
description: "網站描述"
此時在view的部分,不需要設定lebal,在語系為zh-TW時
就會自動抓到對應的欄位中文名
例如
_form.html.slim
= simple_form_for @website do |f|
= f.input :title
...
不需要寫成= f.input :title, label: t("website.title")
是不是相當方便呢?
另外,Model名稱預設就會是英文,所以可以使用像是這樣的方法Website.model_name
假如說要增加中文化的語言包,可以這樣設定
"zh-TW":
activerecord:
models:
website:
one: "網站"
other: "網站"
這邊需要特別注意的就是,除了一個網站的情況
也需要設定超過一個的時候的中文名稱(因為英文或其他語言會有複數型)
沒有翻譯複數型會直接出錯唷
當然,Model的名稱翻譯也可以使用傳統的語言包設置法
"zh-TW":
website: "網站"
但如果這樣設定的話,就別忘了至少英文也要一併設定,否則也有可能會出錯唷
en:
website: "Website"
是不是覺得有些多此一舉呢?
第一天就先講到這邊吧,希望大家都能做好語言包唷。
請問中文yml檔案中的
website:
以及 one: "網站" 及 other: "網站"是什麼意思呢?
為什麼 title: "標題" 要寫在許多層級下(如 admin: 與website:)呢?
謝謝!