i18n_generators を使ったロケールファイルの生成
View の表示言語を書き換えるための準備。
概要
Ruby gemのひとつであるi18n_generatorsを利用し、Viewで利用できる各言語に対応したシステムメッセージや表示ラベルを用意する。
今回は、多言語対応ではなく標準で利用される言語を英語から日本語に切り替えるまでを実践する。
おおまかな手順としては、
- i18n_generators をダウンロード・インストール(gem install)
- ひつようなロケーションファイルの取得
- システムメッセージ以外の翻訳
- 各Viewファイルの表示部分に翻訳メソッドを追加
準備
インストール
インストールしていなければ
gem install i18n_generators
コマンドを叩いてインストールする。
Gemfileの編集
i18n_generatorsを利用するために、プロジェクトのGemfileを編集する。
gem 'i18n_generators'
これを末尾にでも追加すればOK.
エディターでファイルを開いて編集するのが面倒くさいなら、コンソールで
echo "gem 'i18n_generators'" >> Gemfile
でもいい。
確認
bundle
コマンドを叩いて、一覧に
Using i18n (n.n.n)
があれば準備完了。
つかってみる
コマンドを叩く
rails g i18n_locale ja
今回は日本語(ja)を指定したけれど、必要に応じてbeでもarでもfrとか指定してあげるといい。
コマンドを叩くと、まず config/application.rbを上書きしようとする。[はい]を選べば デフォルトロケーションパラメータが書き換わる。
…
# The default locale is :en and all translations from config/locales/*.r b,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,y ml}').to_s]
config.i18n.default_locale = 'ja' # デフォルトではコメントアウトされていてenが採用される
…
つづいてconfig/locales/ にja.ymlファイルがダウンロードされて生成される。
ymlファイルの中身はこんなかんじ。
…
errors: &errors
format: ! '%{attribute}%{message}'
messages:
accepted: を受諾してください。
blank: を入力してください。
confirmation: と確認の入力が一致しません。
empty: を入力してください。
equal_to: は%{count}にしてください。
even: は偶数にしてください。
exclusion: は予約されています。
greater_than: は%{count}より大きい値にしてください。
greater_than_or_equal_to: は%{count}以上の値にしてください。
inclusion: は一覧にありません。
invalid: は不正な値です。
less_than: は%{count}より小さい値にしてください。
less_than_or_equal_to: は%{count}以下の値にしてください。
not_a_number: は数値で入力してください。
not_an_integer: は整数で入力してください。
odd: は奇数にしてください。
…
システムメッセージだけなの…?
もし、システムメッセージだけでなく、はじめからデータベースのカラム名の表示やフォームで使用するラベルの表示も一緒に変更したい場合は、
rails g i18n ja
とするとapprication.rbの書き換え、ja.ymlファイルの生成に加えて、translation_ja.ymlファイルを生成してくれる。
こっちの中身はこんなかんじ。
ja:
activerecord:
models:
book: book #g
attributes:
book:
description: description #g
title: title #g
さらに編集してみる
翻訳する
さっきのtranslation_ja.ymlをこんな具合に編集してやれば、フォームで使うテーブルカラム名もばっちりです。
ja:
activerecord:
models:
book: 本
attributes:
book:
description: 記述
title: タイトル
(開発規模が大きくなれば専任のひとや翻訳屋さんに投げればいいのでべんりです。)
実際にViewの表示を切り替える
model_name.humanメソッドを利用します。
編集するファイル:
<%= form_for(@book) do |f| %>
…
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label :description %><br />
<%= f.text_area :description %>
</div>
…
以下の形式で書き換える。
コントローラ名.human_attribute_name 'モデルの属性名'
<%= f.label Book.human_attribute_name 'title' %>
編集したファイル:
<%= form_for(@book) do |f| %>
…
<div class="field">
<%= f.label Book.human_attribute_name 'title' %><br />
<%= f.text_field :title %>
</div>
<div class="field">
<%= f.label Book.human_attribute_name 'description' %><br />
<%= f.text_area :description %>
</div>
…
表示確認
最後に、WEBRick サーバを起動して確認してみましょう。
(ymlファイルを編集したら 確認の前にサーバを再起動すると確実です)