会社設立以来ほとんど更新していなかったのですが、
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さんの、
locale
locale_rails
を使うと色々と便利です。
EdgeバージョンはRails-2.3.2でも利用出来ました。

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

ruby>>
class ApplicationController < ActionController::Base
before_filter :set_locale

(..snip..)

def set_locale
I18n.locale = @original_locale = fallback_locale(I18n.locale)
if request.host =~ /^([\w-]+).#{HOST.split(':')[0]}/i
I18n.locale = fallback_locale($1)
end
end

private
def fallback_locale(locale)
locale = locale.to_s
@available_locales ||= Set.new(I18n.available_locales)
until locale.empty? || @available_locales.include?(locale.intern)
locale = locale.split(/([-_])/)[0..-3].join
end
locale.present? ? locale.intern : I18n.default_locale
end
<<--

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

文字列のローカライズ

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

yaml>>
ja:
"hello": "こんにちわ"
<<--

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

ruby>>
t("hello") #=> "こんにちわ"
<<--

時刻などのローカライズ

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

yaml>>
ja:
date:
formats:
default: "%Y/%m/%d"
short: "%m/%d"
long: "%Y年%m月%d日(%a)"
<<--

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

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

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

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

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

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

posted by genki genki on Sun 22 Mar 2009 at 09:44 with 0 comments
Contents rssrss
光ファイバーを二次元振動させて走査するAR用ディスプレイ
因果の取り違え
Swift2's defer for CoffeeScript
mongodb-3.0からcreateIndexのdropDupsが無くなったらしい
mongodb-3.0以降のWiredTigerの設定を動的に変更する方法
一般楕円の高速生成アルゴリズムへの道標
farro mantecatoのレシピ
Droonga関連の記事のまとめ
RuntimeErrorの特定のメッセージに限定してrescueする方法
jQueryでscriptタグを実行せずにappendする
Tags
coffeescriptdefergroongajsmemonodenodejs
Comments rssrss
https://mimrent.com/author/laylazercho023/ https://mimrent.com/author/laylazercho023/: Good blog. I really liked this. Many thanks for ... 04/23 02:56
https://xn--mgmrket6-px0d.com https://xn--mgmrket6-px0d.com: Как отличить настоящее зеркало MEGA от подделки в ... 04/22 23:19
https://xn--mgmarkt5-9db.com https://xn--mgmarkt5-9db.com: Как проверить безопасность MEGA: аудит аккаунта в ... 04/22 23:08
https://uae.buyallasia.com/author-profile/lilianahornick/ https://uae.buyallasia.com/author-profile/lilianahornick/: Пользуюсь IndexChecker уже месяц, полет нормальный... 04/22 20:07
https://mp3diary.com/sheliacunningh https://mp3diary.com/sheliacunningh: Помогло быстро выявить ссылки, которые не попали ... 04/22 19:54
https://healthjobslounge.com/employer/tenchat/ https://healthjobslounge.com/employer/tenchat/: Отчеты в CSV формате — это то, чего мне не хватал... 04/22 19:53
https://overseas-realestate.com/author/rexmaccarthy67/ https://overseas-realestate.com/author/rexmaccarthy67/: Реально экономит время при аудите сайта. 04/22 19:47
https://www.caribbeandigitaldirectory.com/author/genevagadsden/ https://www.caribbeandigitaldirectory.com/author/genevagadsden/: Хорошая поддержка, ответили на вопросы по API очен... 04/22 19:23