地域化How to build multi-language apps

基本的なステップ:

  1. 自然言語をトークンに変換する為の辞書を作成します。(config/locales/*.yml)
  2. アプリケーションの全ての箇所で自然言語の代わりにトークンを使用します。(tヘルパー)
  3. setLocaleメソッドによって各ユーザーが必要とする言語を検出します。

railwayではconfig/localesディレクトリにyamlフォーマットの地域化ファイルを配置するだけで異なる言語で翻訳されたアプリケーションを作ることが出来ます。

config/locales/en.yml

en:
  session:
    new: "Sign in"
    destroy: "Sign out"
  user:
    new: "Sign up"
    destroy: "Cancel my account"
    welcome: "Hello %, howdy?
    validation:
      name: "Username required"

注意:翻訳には置換文字として%記号を含むことができます。

アプリケーションのコントローラーでユーザーの地域を定義します。

app/controllers/application_controller.js

before(setUserLocale);
function setUserLocale () {
    // define locale from user settings, or from headers or use default
    var locale = req.user ? req.user.locale : 'en';
    // call global function setLocale
    setLocale(locale);
}

ローカライズされたトークンはアプリケーションのビュー内では、tヘルパーにて使用することができます。

<%= t('session.new') %>
<%= t('user.new') %>
<%= t(['user.welcome', user.name]) %>

コントローラーで使用したい場合には

flash('error', t('user.validation.name'));

モデルで使用したい場合には

return t('email.activate', 'en');

注意:モデル内でtヘルパーを使用する場合には、2つ目のパラメータにlocaleを渡す必要があります。

構成

地域化のビヘイビアは下記設定によって構成されます。

  • defaultLocale: 標準の地域名
  • translationMissing: 翻訳に失敗したときの振る舞い
    使用可能な値:

    • default – 標準の地域で翻訳し表示します
    • display – “Translation missing for email.activate”のようなエラーを表示します

例)

app.configure(function () {
    app.set('defaultLocale', 'en');
});

app.configure('development', function(){
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
    app.set('translationMissing', 'display');
});

app.configure('production', function () {
    app.use(express.errorHandler()); 
    app.set('translationMissing', 'default');
});