Rubyの軽量ウェブアプリケーションフレームワークSinatraにおいて、表示を日本語、英語などに切り替えられるように国際化対応を行う場合は以下のページが参考になる。
ただし、上記のページに載っている設定だけだとエラーで落ちる現象に悩まされることになったので、解決法をメモしておく。
特に、ブラウザの言語設定をもとに表示言語を決めるRack::Localeを用いる場合、日本語を示す言語設定は ja だけでなく、 ja-JP だったりして、これらの両者を ja とみなすような設定が必要となる。
このための設定は実は上記公式サイトに載っている設定の I18n::Backend::Fallbacks が自動的に対応してくれる(ja-JPでのリクエストは自動的にja設定とみなしてくれる)はずなのだが…。
このFallbacks設定が有効であるにも関わらず、実際にアプリケーションをブラウザで開いてみると、以下のようなエラーが出力されてしまう。
I18n::InvalidLocale at /
"ja-JP" is not a valid locale
これは i18n ライブラリの設定オプション enforce_available_locales のデフォルト値が true に変更されたことによる(diff)。
ひとまずFallbackが動くようにするには、以下のいずれかを行えばよい。
a) enforce_available_localesをfalseにする:
I18n.enforce_available_locales = false
b) available_localesへ言語設定を追加登録する:
I18n.available_locales = [ :ja, :en, :"ja-JP" ]