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
Help us understand the problem. What is going on with this article?

RailsでDBに格納したテキストをlocaleに応じていい感じに取り出す方法

More than 5 years have passed since last update.

DBに文言を格納するけど、localeに応じて日本語と英語を出し分けたいケースがありました。

ベースのやりかたはこちらの記事を参考にしています。

Railsの多言語化対応 I18nのやり方を整理してみた!【国際化/英語化】

「(6)DBに格納されている文字列の多言語化」のケースです。

DBの様子

テーブルにこんな感じで値を格納しているとします。

#storesテーブル
+------+-------------+---------------+
|  id  | name_en     |  name_ja      |
+------+-------------+---------------+
|   1  | Hoge Store  | ほげストア      |
+------+-------------+---------------+

ふつうに出力すると

ストレートに出力すると、こんな感じ。

#views/stores/show.html.haml
%h1
  - if(I18n.locale==:ja)
    = @store.name_ja
  - else
    = @store.name_en

ちょっとがんばって動的にlocaleを読み込むと、

#views/stores/show.html.haml
%h1
  = @store.send("name_#{I18n.locale}")

きれいになりました。

しかしいろんなところにこれ書くのは大変。

モデルのメソッドにしたらいいじゃない

というわけで、モデル側でこんな感じにメソッドを定義してみる。

# models/stores.rb
class Store < ActiveRecord::Base    
  def name
    self.send("name_#{I18n.locale}")
  end
end

するとviewではいつもどおり呼び出すだけで、いい具合に翻訳されて出てくる。

#views/stores/show.html.haml
%h1
  = @store.name

便利!

tonishi
admin-guild
「Webサービスの運営に必要なあらゆる知見」を共有できる場として作られた、運営者のためのコミュニティです。
https://admin-guild.slack.com
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