会社設立以来ほとんど更新していなかったのですが、 iPhoneアプリ等の開発で製品を紹介するページを置く場所が必要になったので、 Rails-2.3.2がリリースされた事もあり、I18nを使って国際化仕様のサイトを作りました。

http://ja.www.s21g.com/ 日本語 ss1

http://en.www.s21g.com/ 英語 ss2

従来通り、http://www.s21g.com/にアクセスすると、ブラウザの設定に従って、自動的に日本語か英語のサイトに振り分けられます。 localizationファイルをもっと用意すれば、ISOで定義されてる言語なら何語でも大丈夫なのですが、とりあえずはjaとenのみサポートです。

I18nの使い方

ローカライズファイルは、デフォルトではconfig/locales/*.ymlに配置します。 mutohさんの、 localelocale_rails を使うと色々と便利です。 EdgeバージョンはRails-2.3.2でも利用出来ました。

自動的にロケールを判別するために、以下のようなコードを ApplicationControllerに書きました。

   1  class ApplicationController < ActionController::Base
   2    before_filter :set_locale
   3  
   4    (..snip..)
   5  
   6    def set_locale
   7      I18n.locale = @original_locale = fallback_locale(I18n.locale)
   8      if request.host =~ /^([\w-]+)\.#{HOST.split(':')[0]}/i
   9        I18n.locale = fallback_locale($1)
  10      end
  11    end
  12  
  13  private
  14    def fallback_locale(locale)
  15      locale = locale.to_s
  16      @available_locales ||= Set.new(I18n.available_locales)
  17      until locale.empty? || @available_locales.include?(locale.intern)
  18        locale = locale.split(/([-_])/)[0..-3].join
  19      end
  20      locale.present? ? locale.intern : I18n.default_locale
  21    end

実際にローカライズする手順は、以下のような感じになります。

文字列のローカライズ

*.ymlファイルで定義されているメッセージキーに対して、

   1  ja:
   2    "hello": "こんにちわ"

こんな感じにt(...)ヘルパーメソッドを使います。

   1    t("hello") #=> "こんにちわ"

時刻などのローカライズ

時刻の場合もほぼ同様で、以下のような*.ymlファイルで定義されている設定に対応して、

   1  ja:
   2    date:
   3      formats:
   4        default: "%Y/%m/%d"
   5        short: "%m/%d"
   6        long: "%Y年%m月%d日(%a)"

以下のようにl(...)ヘルパーメソッドを使ってローカライズします。

   1  l(Date.today, :format => :short) #=> "03/22"

テンプレートのローカライズ

Viewテンプレートを丸ごとローカライズする場合は、

  • top/index.ja.html.erb
  • top/index.en.html.erb

のようなファイル名すればOKです。

posted by Png genki on Sun 22 Mar 2009 at 10:04

Comments:

or Preview
Social Bookmarks
  • Delicious
  • B_entry1373
  • Clip_16_12_w
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ