少し長くなりますが、状況からお話しさせてください。
userモデルとprefecture(県)モデルがあるとします。
user(id, name, prefecture)
prefecture(id, name)
userは一つのprefectureを持ちます。
user <-- prefecture
アソシエーションを正しく設定していれば、
user.prefecture.name
でユーザーのprefectureの名前がとれると思います。
ユーザーの県にあわせて、たとえば「こんばんは」という言葉を表示させるようにしたいとします。
そこで、good_evening.ymlというのを作りました。
Ruby
1# good_evening.yml 2good_evening: 3 aomori: おばんです 4 tokyo: こんばんは 5 kyoto: おしまいやす 6 kagoshima: こんちゃらごあした 7 okinawa: ちゃあびら
@good_evenings = YAML.file_load("#{Rails.root}/good_evening.yml")
のようにしてyamlからとってきます。@good_eveningsにはハッシュ形式で格納されることになります。
このとき、viewで言語を表示させるには、(@userがあるとして)
Ruby
1<%= @good_evenings['good_evening']["#{@user.prefecture.name}"] %> #・・・①
で表示できると思います。もちろん、これでも動きとしては問題はないのですが、
この取得の仕方ををもっとスムーズにすることはできますでしょうか?
たとえば、I18nを使うと、
good_evening.ja.ymlを作って
Ruby
1ja: 2 good_evening: 3 aomori: おばんです 4 tokyo: こんばんは 5 kyoto: おしまいやす 6 kagoshima: こんちゃらごあした 7 okinawa: ちゃあびら
みたいな感じにすれば、
Ruby
1<%= I18n.t("good_evening.#{@user.prefecture.name}") %>
でとれてくると思います。こちらのほうが①よりもきれいな感じはします。
ハッシュの値をこのような感じでスムーズに取得することはできますでしょうか?
しかし、今回私がやりたいのは、どのlocaleでも同じように表示させたいので、I18nは使えません。
jaロケールでもenロケールでも
Ruby
1<%= hoge("good_evening.#{@user.prefecture.name}") %>
とすれば、例えばユーザーが京都なら、「おしまいやす」と表示させるようにしたいです。
条件として、独自のメソッドを作ればできるのは目に見えているので、独自のメソッドではない方法でやりたいです。
それができそうなgemがあればそれでもかまいません。
ruby 2.1.6
Rails 3.2
を使っていますが、Railsのバージョンはあまり気にしなくて大丈夫です。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/14 03:47
2015/11/14 05:18
2015/11/14 12:34