1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Sinatraのi18n対応でのInvalidLocale例外に対応する方法

1
Posted at

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" ]
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?