Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
61
Help us understand the problem. What is going on with this article?
@tomomomo1217

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

More than 3 years have 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をしていないと使えなくなっていました。
この方法でメッセージ管理すればコントローラー内で記載しなくて済むのでコントローラーがすっきりしますね!

-

参考サイト

61
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
61
Help us understand the problem. What is going on with this article?