Rails4 で i18n で英語化(多言語化)

Rails4 では、i18n ライブラリがデフォルトで含まれているので、その枠組を利用すると英語化(多言語化)が割と楽にできます。翻訳作業は自力でやらないといけないですけれど。以下、i18n を使った英語化(多言語化)の流れをまとめました。

スポンサーリンク

辞書ファイル、locale に関する初期設定

config/locales 以下の全ての辞書ファイルを読み込むように、config.i18n.load_path に追加します。またデフォルトのロケールを日本語(:ja)に設定。

config/application.rb

config/locales 以下に辞書ファイルを用意

一から作るのは大変なので、辞書ファイルのテンプレートを github からダウンロードします。ありがたい。

認証エンジンに Devise を使っている場合は、Devise 用の辞書ファイルのテンプレートも準備。”devise.ja.yml” でぐぐると沢山見つかります。以下見つけた参照URL等。

テンプレートの辞書ファイルを元に、不足分は自分で補います。

辞書ファイルをモデル/ビューのディレクトリに分けて管理

辞書ファイルは、モデル/ビュー別の階層で管理もできます。その場合は、以下のように配置。

config/locales 以下

辞書ファイルをアプリから参照

辞書ファイルを参照するには以下。

config/locale/ja.yml

以上の辞書ファイルの場合、View では以下のように書く。

これでロケール値(I18n.locale)が :ja の場合は、”こんにちは” とビューに出力されます。

Controller に書く場合は、以下。

URL の一部にロケール情報を含むルーティング

日本語と英語のページを別々のURLで表示させるためには、Rails Internationalization (I18n) API — Ruby on Rails Guides を参考にして、URLの一部にロケール情報を含ませるルーティングを行う。

config/routes.rb

このルーティングにより、http://localhost:3000/ja/books, http://localhost:3000/en/books のように、URLパスの一部にロケール情報を含ませることができます。

ロケールの判定を application_controller.rb で行う

今回は以下の値の順で、ロケール判定を行うことにしました。

1. URL の :locale パラメータの値
2. HTTP_ACCEPT_LANGUAGE の値
3. geoip でIPアドレスから取得した値

IPアドレスからロケールを判定するには、geoip ライブラリが必要なので、あらかじめ Gemfile に gem “geoip” を書いてインストールしておきます。

また、geoip を用いる準備として、GeoLite Free Downloadable Databases « Maxmind Developer Site から GeoIP.dat.gz(GeoLite Country の Binary / gzip)をダウンロードします。その後、GeoIP を db 以下に設置。

application_controller.rb に以下のコードを書いて、before_filter で locale を判定してセットします。

app/controller/application_controller.rb

【追記 2014/04/06】
上記の locale_from_ip メソッドがバグを含んでいたので修正しました。以下エントリーの参照をお願いします。

RailsでGeoIPのIPアドレスからロケール判定する際の注意点 | EasyRamble
【追記ここまで』

ロケールの判定については、以下がとても参考になりました。

Rails3 事始め: [Rails3] 国際化 I18n のまとめ(その2:ロケールの切り替え)

ロケール別にビューテンプレートを作成

ロケール別に表示させたいHTMLテンプレートの構造が異なる場合は、上述のように各々ロケールに合わせたビューファイルを作成できます。ロケール値(I18n.locale の値)に合わせて、適切なテンプレートを選択して表示してくれます。便利です。

一応今回の多言語化(英語化)の対応はここまでです。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!