How to Localize Ruby on Rails Application

はじめに

Ruby on Railsのアプリケーションのローカライズには、Ruby I18nフレームワークと、YAMLファイルで記述されたローカライズ文字列のカタログを用います。本ガイドではRuby on Rails バージョン3以降を使用したアプリケーションの国際化についてご案内します。

ローカライゼーションの基本

ローカライゼーション文字列の追加

Ruby on Rails(以下Rails)では、すでにRuby I18nモジュールが有効になっており、I18n.t メソッドで各言語の文字列を呼び出すことができます。たとえば、Railsのビュー内で、

<%%= t ‘hello’ %>

を呼び出すと、標準のロケール(en, 英語)では、config/locales/en.yml内の以下の文字列が呼び出されます。

en:
  hello: “Hello world”

日本語のローカライゼーション文字列を追加するには、config/locales/ja.ymlファイルを作成し、以下のような内容を記述します。

ja:
  hello: “こんにちは世界”

英語と日本語にローカライズされたアプリケーションのディレクトリ構成は例えば、以下のようになっています。

Screenshot for Localized Rails Application

ロケールの切り替え

アプリケーション内でロケールの切り替えを行うには、app/controllers/application_controller.rbのApplicationController内に以下のような記述を追加します。

  before_action :set_locale   # Rails 4の場合は before_action :set_locale

  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
  end

localeパラメータを追加してアプリケーションのURLにアクセスすると(例: http://localhost:3000?locale=ja)各言語のローカライゼーション文字列に置き換えられたコンテンツを取得することができるようになります。

標準のロケールを指定するには、config/application.rb内で以下のように指定を行います。

config.i18n.default_locale = :ja  # 標準ロケールを日本語に

アプリケーションのローカライゼーションの例

以下では、実際にRailsアプリケーションに触れながらアプリケーションのローカライゼーションを行っていきます。

railsコマンドで、localized_appプロジェクトを作成します。

$ rails new localized_app

localized_appフォルダに移動します。

$ cd localized_app/

HomeControllerを作成します。

$ rails g controller home

config/routes.rbを編集し、以下のようにルートを追加します。

LocalizedApp::Application.routes.draw do
  root to: "home#index"
end

また、app/controllers/home_controller.rbを以下のように編集します。

class HomeController < ApplicationController
  def index
  end
end

ビューのapp/views/home/index.html.erbを以下のように編集します。

<h1><%%= t 'hello' %></h1>
<p><%%= t 'messages.greet' %></p>

英語のロケールファイルconfig/locales/en.ymlに以下の内容が含まれていることを確認します。

en:
  hello: "Hello world"
  messages:
    greet: "Greetings from Conyac"

日本語のロケールファイルconfig/locales/ja.ymlを作成し、以下のように編集します。

ja:
  hello: "こんにちは世界"
  messages:
    greet: "Conyacからのご挨拶"

app/controllers/application_controller.rbのApplicationController内を以下のように編集します。

  before_filter :set_locale

  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
  end

ここで、http://localhost:3000にアクセスすると、以下のような英語メッセージが表示されます。

Screenshot for English page

また、http://localhost:3000?locale=jaにアクセスすると、以下のような日本語のメッセージが表示されます。

Screenshot for Japanese page

まとめ

Ruby on Railsは標準で含まれているRuby I18nモジュールと、ユーザーが作成した各言語へのローカライズ用のYAMLファイルで簡単にローカライズを行うことができます。

もし、ご質問やご感想がありましたら、support@conyac.cc宛までよろしくお願いします。ConyacでYAMLファイルをアップロードすれば、選択した言語へ、早く、正確に翻訳を行うことができます。

参考サイト

Need experienced translators to translate your localization files? Conyac is the perfect solution!
Reliable, Fast, and Affordable.