i18n사용방법
config/locales밑에 언어별로 파일을 만든다.
#config/locales/en.yml
en:
view:
hello: Hello world
#config/locales/ja.yml
ja:
view:
hello: ハローワールド
rails console에서 i18n의 설정 접근법
I18n.t("view.hello")
=> "Hello world"
I18n.t("view.hello", locale: :en)
=> "Hello world"
I18n.t("view.hello", locale: :ja)
=> "ハローワールド"
rails view에서의 접근법
translate メソッドでフルパスを書くことで参照することもできます。
<%= t('view.hello') %>
<%= I18n.t('view.hello') %>
이외에도 Model명.human_attribute_name
도 사용가능
i18n관련 자주 사용하는 설정
#config/application.rb
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
config.i18n.default_locale = :ja #필자의 경우를 일본사이트를 주로 만드므로 default_locale=ja으로 설정
load_path설정을 넣어줌으로 인해 config/locales/안의 모든 디렉토리에 있는 yml,rb파일을 읽어옴 뷰의 계층구조와 같은 구조로 config/locales이하에 yml파일을 두면 해당 view의 xx.yml파일을 찾기 편함
예를 들어 app/views/home/top.html.erb
이 있다고하면 config/locales/views/home/top/ja.yml
이런식으로 맞춤
ja.yml의 설정은 이하와 같다.
ja:
home:
top:
hello: Hello world
日付や時刻のフォーマットを定義する
config/locales/ja.yml
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 に定義したフォーマットで出力される。
変数を渡す
config/locales/ja.yml
ja:
airmax: "NIKE AIRMAX %{year}"
I18n.t('airmax', year: 95) #=> 'NIKE AIRMAX 95'
Model.model_name.human
ja:
activerecord:
errors:
models:
user:
attributes:
name:
blank: "が空になっています。入力してください。"
email:
blank: "が空になっています。入力してください。"
models:
user: "会員"
attributes:
user:
name: "名前"
email: "Eメール"
このようにすることで、エラーメッセージ等の文言を日本語化することができるんです。 models 階層の文字列を取得するには、
User.model_name.human
=> 会員
I18n.t("activerecord.models.user")
=> 会員
モデル名.human_attribute_name(:カラム名)
ActiveRecord::Base のクラスメソッドであり、内部的に I18n モジュールを利用してくれるシロモノらしいです! つまり config/locales/ja.yml に定義してある翻訳内容を良しなに解釈してくれるメソッドってなわけ。
---
ja:
activerecord:
errors:
messages:
record_invalid: "バリデーションに失敗しました: %{errors}"
restrict_dependent_destroy:
has_one: "%{record}が存在しているので削除できません"
has_many: "%{record}が存在しているので削除できません"
models:
tasks: タスク
attributes:
task:
id: ID
name: 名称
description: 内容
created_at: 登録日時
updated_at: 更新日時
# t("activerecord.attributes.task.name")と同じ
Task.human_attribute_name(:name)
=> "名称"
t("activerecord.attributes.task.name")
=> "名称"
Task.human_attribute_name(:created_at)
=> "登録日時"
t("activerecord.attributes.task.created_at")
=> "登録日時"