ぎょーぼのぶろぐ

IT系の話を書いていくブログです。今はRubyの勉強中。

Rails でのアプリケーションローカライズ

Ruby on Rails の "I18n" という gem で、ローカライズを簡単にすることができるようです。

Rails Internationalization (I18n) API — Ruby on Rails Guides

試しに、scaffold で作った Model のページの英語部分を日本語化してみました。

デフォルトの言語を日本語(:ja)にする。

下記ファイルで設定します。ここの「i18n」の頭文字は小文字ですので注意。
- $APP_ROOT/config/application.rb

    # default_locale の設定
    config.i18n.default_locale = :ja

ローカライズ用にYAMLファイル(ja.yml)を作成する。

config/locales/ ディレクトリ配下に、ja.yml ファイルを準備します。英語用の en.yml ファイルは自動的にできているので、これをコピーして編集したらいいです。
記述は YAML 形式で、階層構造で管理できます。
今回は、book モデルの一覧表示画面(index) の部分だけ参考に・・・

  • $APP_ROOT/config/locales/ja.yml
ja:

  # アプリ内 共通メッセージ
  dictionary:
    messages:
      createbook: "本を作成しました。"
      updatebook: "本を更新しました。"
      destroybook: "本を削除しました。"

(中略)

  # ビュー内 メッセージ
 books:
    index:
      title:  '本の一覧'
      booktitle: '書籍名'
      description: '詳細'
      show: '表示'
      edit: '編集'
      destroy: '削除'
      confirm: '%{booktitle} を削除します。よろしいですか?'
      newbook: '新しい本の作成'

(略)

view テンプレートファイルの固定文字列を置き換える。

固定文字列で書かれているところを、t( %keyword% ) で置き換えます。
%keyword%の指定の仕方は、ja.yml の階層にしたがって、books.index.titleのような形で指定するのですが、階層で books、index を作っている場合は、省略して書くことができます。また、%keyword% にカンマで続けてパラメータを渡すこともできます。

  • $APP_ROOT/app/views/books/index.html.erb
<p id="notice"><%= notice %></p>

<h1><%=t('.title')%></h1>

<table>
  <thead>
    <tr>
      <th><%=t('.booktitle')%></th>
      <th><%=t('.description')%></th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @books.each do |book| %>
      <tr>
        <td><%= book.title %></td>
        <td><%= book.description %></td>
        <td><%= link_to t('.show'), book %></td>
        <td><%= link_to t('.edit'), edit_book_path(book) %></td>
        <td><%= link_to t('.destroy'), book, method: :delete, data: { confirm: t('.confirm', booktitle: book.title) } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<%= link_to t('.newbook'), new_book_path %>

修正すると、こんな感じになります。

f:id:gyobo:20200724235200p:plain

こんな感じで、固定文字列を直書きから排除して、日本語だけでもローカライズしておくと、今後、英語対応したい!となったときでも、ymlファイルの編集だけで対応ができるようになります。また、文章や単語がymlファイルに集約されるので、表記揺れや誤記のチェックも楽になるはずです。 複数言語の設定やモデル層のローカライズの仕方、yml ファイルの分散設置方法等、もっと詳しい内容は最初に紹介した公式ページにしっかり記載されています。英語なので大変ですが・・・