会社設立以来ほとんど更新していなかったのですが、
iPhoneアプリ等の開発で製品を紹介するページを置く場所が必要になったので、
Rails-2.3.2がリリースされた事もあり、I18nを使って国際化仕様のサイトを作りました。
http://ja.www.s21g.com/ 日本語
http://en.www.s21g.com/ 英語
従来通り、http://www.s21g.com/にアクセスすると、ブラウザの設定に従って、自動的に日本語か英語のサイトに振り分けられます。
localizationファイルをもっと用意すれば、ISOで定義されてる言語なら何語でも大丈夫なのですが、とりあえずはjaとenのみサポートです。
I18nの使い方
ローカライズファイルは、デフォルトではconfig/locales/*.ymlに配置します。
mutohさんの、
locale、
locale_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)
テンプレートのローカライズ
Viewテンプレートを丸ごとローカライズする場合は、
- top/index.ja.html.erb
- top/index.en.html.erb
のようなファイル名すればOKです。