i18n」タグアーカイブ

Rails2.2.2 でi18n

config/environment.rbで

# The internationalization framework can be changed to have another default locale (standard is :en) or more load paths.
# All files from config/locales/*.rb,yml are added automatically.
# config.i18n.load_path < < Dir&#91;File.join(RAILS_ROOT, 'my', 'locales', '*.{rb,yml}')&#93;
# config.i18n.default_locale = :de
&#91;/sourcecode&#93;
がある。コード部分をコメントアウトして、load_pathに追加する「&lt;&lt;」を「+=」に修正(2.2.2のバグ)する。今回はロケールをjaにするので、:deを:jaとする。

翻訳ファイルの置き場所として、config/localesディレクトリを作成する。

validationなどはすでにrails-i18nに用意されているので、ダウンロードしてlocales以下に置く。日本語の場合はja.ymlをダウンロードする。ja.yml中activerecordが2つあって1つめが無効になってしまったので、ひとつにまとめておく。具体的には
&#91;sourcecode lang="ruby"&#93;
  activerecord:
    errors:
      template:
        header:
          one: "{{model}}にエラーが発生しました。"
          other: "{{model}}に{{count}}つのエラーが発生しました。"
        body: "次の項目を確認してください。"

  activerecord:
    errors:
      messages:
&#91;/sourcecode&#93;
を
&#91;sourcecode lang="ruby"&#93;
  activerecord:
    errors:
      template:
        header:
          one: "{{model}}にエラーが発生しました。"
          other: "{{model}}に{{count}}つのエラーが発生しました。"
        body: "次の項目を確認してください。"
      messages:
&#91;/sourcecode&#93;
と修正する。

view、controllerで利用するには
&#91;sourcecode lang="ruby"&#93;
<td>< %= l(survey.started_at) %>
<td>< %= l(survey.ended_at) %></td>
<td>< %= link_to t('Show'), survey_questions_path(survey) %></td>

ここでl,tメソッドがi18nしている。lはlocalizeのaliasで、localeに応じた日付フォーマットでstrftimeする。tはtranslateのaliasで、翻訳ファイルにあるものを返す。上記ではShowがキーになるので、ファイルに追加する必要がある。

validationで表示されるテーブル、カラム名を翻訳することもできる。
テーブル名「Todos」、カラム名「title」の場合、

ja:
  activerecord:
    models:
      todo: "Todo"
    attributes:
      todo:
        title: "タイトル"

とする。テーブル名は複数形だが、ファイル中では(クラス名なので)シングルにする必要がある。

翻訳ファイル中で言語をキーにしているので、ファイルはひとつでもよいし、たくさんでもよい。フレームワークで利用するファイルとアプリケーション固有のファイルを言語ごとにわければメンテナンス性に優れているだろう。