国際化(i18n)の第一歩
前回までで、asagao のすべてのテストが通りました。
今回からは、いよいよ Rails 2.x の新しい特徴を活用して、asagao を書き換えていきます。
まずは、Rails 2.2 の目玉である、国際化(i18n)から手を付けましょう。
Rails 2.1 までは、Rails 自体が国際化の標準的なやり方を示していませんでしたので、Globalize や Ruby-GetText-Package など様々な方法が提案されてきました。
i18n の基本はこうです。
config/localesフォルダを作成し、その下にキーワードと翻訳を YAML 形式で格納する。- コントローラおよびビューの中では、
tメソッドにキーワードを与えることで翻訳を取得する。
早速、やってみましょう。
app/views/main/news.rhtml を開いてください。1 行目は次のようになっているでしょう。
<% @page_title = 'ニュース' -%>
これを、次のように修正します。
<% @page_title = t('title.news') -%>
ブラウザで /main/news を開くと、次のような文字列がページのタイトルとして表示されます。
<span class="translation_missing">en, title, news</span>
これは、title という分類に属するキーワード news に対応する英語(en)用の翻訳が用意されていないことを意味します。
そこで、config/locales フォルダに titles_en.yml という空のファイルを作成し、次のように書き入れます。
en:
title:
news: News
サーバを再起動し、ブラウザでページを再読込すると、タイトルに「News」と表示されます。
続いて、config/locales フォルダに titles_ja.yml を作成し、次のように書き入れます。
ja:
title:
news: ニュース
さらに、config/environment.rb を開いて、Rails::Initializer.run do |config| と end の間に、次の行を追加します。
config.i18n.default_locale = :ja
サーバを再起動し、ブラウザでページを再読込すると、タイトルに「ニュース」と表示されます。
どうですか。根本的な原理は説明していませんが、何となく使い方がわかってしまったのではないでしょうか。
翻訳を定義する YAML ファイルの中身は、階層構造のデータです。最も上の階層が言語の区別を表しています。言語は、en や ja のようなアルファベット 2 文字で表現します。
下の階層では具体的にキーワードと翻訳を指定するのですが、キーワードを分類するための階層を用意することもできます。
今回の例では、title という分類の下に news というキーワードを配置しています。
この news に対応する翻訳を取得するには t('title.news') と記述します。
本日はここまで。
(2008/12/26)
記事に関するご質問は、 hermes@oiax.jp までメールでお送りください。
ウェブサイト構築の発注先を検討されているお客様は、ご相談フォームをご利用ください。
- はじめに
- rake rails:update (2008/12/15)
- クッキーストア (2008/12/16)
- ページネーション (2008/12/17)
- 機能テスト冒頭部分の修正、等 (2008/12/19)
- blog_entries コントローラの修正 (2008/12/20)
- シングルトン・リソース (2008/12/21)
- 一気に機能テストを全部通す (2008/12/21)
- 統合テストと rak (2008/12/22)
- 国際化(i18n)の第一歩 (2008/12/26)
- Cookie を使ったロケールの切り替え (2009/01/04)
- ActiveRecord モデルのフィールド名の国際化 (2009/01/08)
- エラーメッセージの国際化(1) (2009/01/09)
- エラーメッセージの国際化(2) (2009/01/10)
- エラーメッセージの国際化(3) (2009/01/17)
- エラーメッセージの国際化(4) (2009/01/24)

