- 更新日: 2014年2月24日
- Rails
Rails で i18n 辞書ファイル管理のディレクトリ構成と名前空間の方針まとめ
Rails で i18n 利用時に、config/locales 以下に一枚の辞書ファイル、ja.yml, en.yml だけで管理しようとすると、何百行にもなってメンテナンス性が悪そうです。ということで、以下の方針で辞書ファイルを管理することにしました。認証エンジンに Devise を使用しているケースです。Devise を使用しない場合は、その部分は省いて下さい。
Rails4 で i18n で英語化(多言語化) | EasyRamble
— 環境 —
devise 3.2.2
rails 4.0.1
i18n 0.6.9
i18n_generators 1.2.1
config/locales 以下のディレクトリ構成
以下のようにモデル、ビューごとにディレクトリを分けて、辞書ファイルを管理する方針としました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
config/ | locales/ | | controllers/ | | | en.yml | | | ja.yml | | models/ | | | post/ | | | | en.yml | | | | ja.yml | | | user/ | | | | en.yml | | | | ja.yml | | views/ | | | posts/ | | | | en.yml | | | | ja.yml | | | users/ | | | | confirmations/ | | | | mailer/ | | | | passwords/ | | | | registrations/ | | | | sessions/ | | | | unlocks/ | | | | en.yml | | | | ja.yml | | devise.en.yml | | devise.ja.yml | | en.yml | | ja.yml |
Devise 関係
devise.en.yml は Devise インストール時に作成されるので、そのまま config/locales/devise.en.yml に配置。devise.ja.yml はそれの日本語翻訳版。
config/locales/users 以下の confirmations, mailer… などのディレクトリは、Devise でビューをカスタマイズ時に生成されるディレクトリ構成に則りました。必要に応じて、それぞれのディレクトリ配下に、ja.yml, en.yml のファイルを作成します。
Rails で Devise のビューを作成してカスタマイズ | EasyRamble
views/users/en.yml, ja.yml は、Devise で管理されない users#index, users#show のアクション用。
i18n_generators 関係
i18n_generators では、config/locales/ja.yml, config/locales/translation_ja.yml の2種類のファイルが作成されますが、ja.yml(とen.yml)はそのまま配置。translation_ja.yml(とtranslation_en.yml)は、各々対応するモデルの辞書ファイルに中身を移して削除しました。
i18n_generators で Rails アプリを日本語化 | EasyRamble
コントローラー用
コントローラーでもフラッシュメッセージ等の翻訳が必要なので、controllers 以下に en.yml, ja.yml を作成しました。コントローラー毎に分けず、1つにまとめたのはフラッシュメッセージ等だけなので、たいした分量にはならないだろうとの予測のためです。
共通の辞書ファイルの置き場
モデル、ビュー全体に共通の辞書ファイルは、必要に応じて各々 modles/ja.yml, views/ja.yml に置く。
辞書ファイルの名前空間
models/user/ja.yml
1 2 3 4 5 6 7 8 |
ja: activerecord: models: user: "ユーザー" #g attributes: user: admin: "管理者権限" #g ... |
モデルの辞書ファイルは、以上の書式に則ることで User.model_name.human, User.human_attribute_name(“admin”) などのメソッドが使える。
views/users/ja.yml
1 2 3 4 5 6 7 8 |
ja: users: index: title: "ユーザー一覧" show: title: "%{user_name}" messages: errors: |
ビューの辞書ファイルは、以上の書式にすると、対応するビューファイルの中で以下のようにツリーを省略して書ける。
app/views/users/index.html.erb
1 |
<%= t(".title") %> |
locale が :ja であれば、「ユーザー一覧」と出力します。ツリー名は省略できますが、頭に . (ドット)が必要なことに注意。
後々、辞書ファイルが増えた時のことを考えて、以上の方針で管理することにしました。
- – 参考リンク –
- RailsのI18n APIの使い方の基本と辞書ファイルの整理方針: Modelごと、Viewごとに分けて管理する – memo.yomukaku.net
- Ruby on RailsのI18nで使用する名前空間に関してのまとめと、ベストプラクティスの検討。 – 波打際のブログさん
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
Leave Your Message!