i18nによる日本語化対応
i18nとrails-i18n
Railsでは様々な言語に対応するために、デフォルトでi18nというgemが導入されている。
以下Railsガイド Rails 国際化 (i18n) APIより引用
RubyのI18n (国際化・多言語化を意味する internationalization を短縮したもの) gemはRuby on Rails 2.2以降からRailsに同梱されています。このgemは、アプリケーションの文言を英語以外の 別の1つの言語に翻訳 する機能や 多言語サポート 機能を簡単かつ拡張可能な方式で導入するためのフレームワークを提供します。
つまり、導入のためのフレームワークであり、これだけでは日本語化対応ができない。
翻訳するためのファイルを用意したり、読み込むようにパスを設定したりする必要があるということ。
rails-i18nというgemがあり、これには様々な言語の翻訳ファイルが入っている。
rails-i18nをインストールし、アプリケーションのデフォルト言語を日本語に設定することで必要最低限(バリデーションエラー時のメッセージや、月や曜日など)の日本語を使用できるようになる。
ただし、必要最低限の日本語対応となるので、個別のアプリケーションのモデルやビューなどで使用している用語の日本語を設定したい場合は、別途YAML形式の翻訳ファイルを作成する必要がある。(拡張子は.yml 日本語のファイルなのでファイル名はja.ymlにする)
日本語化
まず、Railsのデフォルトの言語を日本語に設定する必要がある。
config/application.rb
module AppName class Application < Rails::Application #このクラス内に書く config.i18n.default_locale = :ja end end
次にGemfileに
gem 'rails-i18n'
を追加しbundle install
する。
このgemを導入することによって、Railsを日本語で使う場合のデフォルトのロケールファイル
rails-i18n/ja.yml at master · svenfuchs/rails-i18n · GitHub
をダウンロードしてローカル(config/locales以下にja.ymlとして)に配置しなくても、gem内部にある日本語の国際化設定ファイルを参照するようになる。
ViewとModelの日本語化
config/application.rb
module AppName class Application < Rails::Application config.i18n.default_locale = :ja # 読み込む対象のファイルを増やす config.i18n.load_path += Dir[Rails.root.join('config/locales/**/*.{rb,yml}').to_s] end end
と記載して、i18n対応ファイルをlocales以下に配置することで、多言語対応させたviewを表示させることができる。
必要最低限の日本語対応に加え、モデルに関連する内容のみを記載するファイル、viewの表示の内容のみを記載するファイルなどと、i18nの定義ファイルを複数に分けて設定できる。
※この設定の変更を反映させるためには、サーバーの再起動が必要。
開発の初期段階から、作成したモデル名やカラムの翻訳ファイルを作成しておくとよい。
ActiveRecordとViewで翻訳ファイルを分けて作成すると管理しやすい。
(例)
locales以下にviews,activerecordディレクトリを作り、そこに配置する。
config/locales/views/ja.yml
config/locales/activerecord/ja.yml
翻訳ファイルはアプリケーションが大きくなるほど単一のファイルでの管理が難しくなる。その場合はviewの翻訳ファイルさらに細かく分け、コントローラごとに分けるなどする。(可読性はもちろん、後述するlazy-lookup記法を使う為の配慮)
翻訳ファイルの書き方例
config/locales/views/ja.yml
ja: defaults: login: 'ログイン' logout: 'ログアウト' users: new: title: 'ユーザー登録' user_sessions: new: title: 'ログイン'
config/locales/activerecord/ja.yml
ja: activerecord: models: user: 'ユーザー' post: '投稿' attributes: user: email: 'メールアドレス' password: 'パスワード'
tメソッド
viewで翻訳ファイルに記載した用語を使用する場合は、tメソッドを使う。(tはtranslateのt)
上の翻訳ファイルの書き方例の場合
<%= t('defaults.login') %>
でログイン
と表示できる。
<%= t('users.new.title') %>
でユーザー登録
と表示できる。
lazy-lookup記法
<%= t('users.new.title') %>
と書く場合、app/views/users/new.htmlのようにビューテンプレートの階層と翻訳ファイルの階層構造が同じ場合は
<%= t('.title') %>
のように省略して書くことができる。この書き方がlazy-lookup記法。
参考サイト
Rails 国際化 (i18n) API - Railsガイド
[初学者]Railsのi18nによる日本語化対応 - Qiita