83
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

i18nロケールファイルの書き方小技集

Last updated at Posted at 2015-07-06

時々追記してます。

Yes/No

ja.yml
"Yes": はい
"No": いいえ

YesとNoは" "で囲わないと使えませんでした。

改行つきの文

パイプ(|)を書いて、その後の行は改行付きの文で書けます。
viewでsimple_format内で呼べば改行付きで出力されます。

ja.yml
hogehoge: |
	1行目
	2行目
	3行目
view
simple_format(t(:hogehoge))

2つの語を連結して表示

方法1:変数を使う

I18n.tでは変数を使うことができます。

ja.yml
new: 新着%{smtg}
view
t(:new, smtg: t(:posts))
# => 新着投稿

自分はずっとこの形でやってたんですが、ネストが見づらくて嫌だなあと思ってました。
そこで次の方法を取ってみました。

方法2:arrayを使う

I18n.tでは複数の名前空間を一度に呼び出せます。

t [:new, :posts]
# => ["新着","投稿"]

ただ、このままだとarrayで出力されるので、以下のようにstringにしてしまえばそのまま使える形に。

(t [:new, :posts]).join
# => 新着投稿

なんかもう少しいい書き方はないのかという感じですが、方法1よりは単語が直接並ぶので記述内容がわかりやすいです。

方法3:ヘルパーメソッドを作る

helper
def joined_t(*args)
	(I18n.t args).join
end
view
= joined_t(:new, :posts)
# => 新着投稿

方法2をヘルパーメソッドに。まだマシな気もしますが、あまり気に入りません。
他に良案があれば教えて下さい。

エイリアス

(2015/7/21追加)

ja.yml
Comment: &Comment コメント
Comments: *Comment

&で設定、* で呼び出し

submitボタンのロケール

(2015/7/29追加)

createやupdateのデフォルトのロケールはhelpers: submit:以下にまとめて設定されます。modelごとに名前を変える場合には、model_name以下に別途記載すればそのモデルのボタンのテキストが変わります。

ja.yml
ja:
  helpers:
    submit:
      create: 登録する
      update: 更新する
      submit: 保存する
      model_name:
		create: 送る
		update: 変える

flashメッセージのロケール

(2017/2/23追加)
createやupdateなどした時に出るflashメッセージを一つ一つ設定するのは面倒ですが、respondersというgemの機能を使うと簡単にさくっと整理されていい感じです。
https://github.com/plataformatec/responders

こんな風に書けば基本のflashメッセージが設定されます。

ja:
  flash:
    actions:
      create:
        notice: "%{resource_name}が保存されました"
      update:
        notice: "%{resource_name}が更新されました"
      destroy:
        notice: "%{resource_name}が削除されました"
        alert: "%{resource_name}が削除できませんでした"

デフォルトと違うメッセージを設定したいところはコントローラーごとに以下のように書きます。

flash:
	posts:
      create:
        notice: 投稿できました!

なんとなくふわっと使ってたのですが、いつの間にか使えなくなっていたので改めて使い方を調べました。
respondersはrails4.1以前で標準だったrespond_toをgemとして切り出してものですね。gemはいつの間にか入っていましたが、railsのバージョンを上げたことでrails g responders:installをしていないと使えなくなっていました。
この方法でメッセージ管理すればコントローラー内で記載しなくて済むのでコントローラーがすっきりしますね!

参考サイト

83
66
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
83
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?