- 公開日:2015年12月17日
記事概要
rails4で多言語化に対応したので、そのやり方を記載した記事です。
環境
- ruby2.2.3
- rails4.2.5
- unicorn
- nginx1.8
Gemfile
railsの多言語化対応には、Rails Internationalization (I18n)を利用します。(Rails Internationalization (I18n) API )
まずはgemを導入します。
# Use rails-i18n for localization gem 'rails-i18n', '~> 4.0.0'
記載して保存したらgemをinstallします。
rbenv exec bundle install
installに成功したのを確認したら先に進みます。
利用言語の設定
railsアプリで利用する言語を設定します。
設定はapplication.rbに記載します。
config.i18n.default_locale = :en config.i18n.available_locales = [:en, :ja, "zh-CN"]
上記の設定では、config.i18n.default_localeでデフォルトの言語を「英語」にしています。
また、「英語」「日本語」「中国語(簡体字)」を config.i18n.available_localesで利用可能な言語に設定しています。
テストの実行
これまでの設定が正しいことを確認するために、テストを流します(テストコードを記載していないプロジェクトの場合は、この箇所は無視してください。)
rbenv exec bundle exec rspec Finished in 0.13951 seconds (files took 2.76 seconds to load)
成功したら、次はrouteを修正します。
Routeの設定
言語を判別するには、
- 言語をサブドメインに記述する(http://en.www.test.com)
- パラメーターに言語情報を持つ(http://www.test.com?lang=en)
- URLに記述する(http://www.test.com/en/)
のパターンがありますが、ここでは「URLに記述」のパターンを利用します。
routes.rbを開き、scopeで既存のurl routeを囲みます。
scope "(:locale)", locale: /ja|en|zh-CN/ do get 'home', to: 'home#index' resources :test end
続いて、パラメータからlocaleを判定することが出来るようにapplication_controller.rbに処理を記載します。
before_filter :set_locale # 全リンクにlocale情報をセットする def default_url_options(options={}) { :locale => I18n.locale } end # リンクの多言語化に対応する def set_locale I18n.locale = params[:locale] || I18n.default_locale end
続いては、言語ファイルを用意しましょう。
locales
言語のファイルはlocalesファイルの下に配置します。
en.yml zh-CN.yml ja.yml
en: hello: "Hello world"
ja: hello: "こんにちわ"
zh-CN: hello: "你好"
これで準備は完了です。
View
tメソッドを利用します。引数はhashのkeyを指定します。
<%= t("hello") %>
ブラウザで確認します。
デフォルト(英語): http://192.168.33.40:3000/home
日本: http://192.168.33.40:3000/ja/home
中国語: http://192.168.33.40:3000/zh-CN/home
見事に反映されていますね。
まとめ
railsのアプリは、最小限の実装で多言語化に対応できます。
アプリを作るなら、是非世界を目指したサービスを作成しましょう。
最初は、日本語の他は、英語と中国語だけで十分だと思います。
以上
Rails4の開発にオススメの本
オススメ開発マシン
運営サイト(railsで作成しています)
参考サイト
0 件のコメント:
コメントを投稿