Edited at

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

More than 1 year has passed since last update.

時々追記してます。


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をしていないと使えなくなっていました。

この方法でメッセージ管理すればコントローラー内で記載しなくて済むのでコントローラーがすっきりしますね!

-


参考サイト