I18nとlocale
I18nとは、ある言語の文言を別の言語の文言に翻訳してくれる機能のこと。
多言語化以外にも、何度も使う文言を一限管理するために使われる。 住所、会社名、時間をフォーマットする時の形式、今日の日付を出力する時の形式などを管理する。
まずconfig/application.rbに言語を設定する必要がある。
config.i18n.default_locale = :ja
その後、ja.ymlに文言を設定する。
ja: hello: Hello World company: name: ABC株式会社 address: 〒181-0003 東京都府中市中区大関2丁目7−1
erbに書き出すとこうなる。
<%= t('hello') %> <!-- Hello World --> <%= t('company.name') %> <!-- ABC株式会社 -->
モデルなどではこうなる。
I18n.t('hello') #=> 'Hello World' I18n.t('company.name') #=> 'ABC株式会社'
日付などへの適用
ja: date: formats: default: "%Y/%m/%d" long: "%Y年%m月%d日(%a)" short: "%m/%d" time: formats: default: "%Y/%m/%d %H:%M:%S" long: "%Y年%m月%d日(%a) %H時%M分%S秒 %z" short: "%y/%m/%d"
I18n.l(Date.today) #=> '2020/02/14' I18n.l(Date.today, format: :long) #=> '2020年02月14日(金)' I18n.l(Time.zone.now) #=> '2020/02/14 18:34:25' I18n.l(user.created_at, format: :short) #=> '20/02/14'
- DateクラスやTimeクラスの値をセットすると、dateやtimeに定義した形でフォーマットする
- formatを省略するとdefaultの内容が適用される。
- lはlocalizeの略。ちなみにtはtranslateの略。
- created_atやupdated_atをI18n.l()でラップすると、timeに定義したフォーマットで出力される。