3

Passenger / REE で実行されている Rails 2.2 Web アプリがあります。

デフォルトのロケールを設定しましたconfig/environment.rb

config.i18n.default_locale = 'en-GB'

最初のリクエストにはロケールが設定されていないようですI18n.locale

I18n.locale を設定する before_filter を使用してページにアクセスすると、その後のすべてのコントローラーへのアクセスに同じbefore_filter設定がなくても、I18n.locale は設定されたものの I18n.locale を取得しますen-US

同じコードの Mongrel ではen-GB、before_filter によって明示的に設定されるまで、各リクエストはデフォルトである のロケールを取得します。

これが通常の乗客の行動である場合は、解決していただければ幸いです。

4

1 に答える 1

6

Phusion Passenger は同じスレッドですべてを処理するのに対し、Mongrel はほとんどすべての要求を異なるスレッドで処理するため、ロケールを「自動的に」リセットします。

これに対するハックとして、before フィルターで、他のパラメーターに基づいてロケールを設定する前に、常にロケールを nil に設定できます。このようにして、ロケールが最後に設定された値を常に nil にリセットします。

ユーザーの優先ロケールの各リクエストでロケールを設定していることを確認してください。

着信パラメーターがサイトにロケールを変更するように指示した場合にのみロケールを設定していたため、これと同じ問題がありました。これは、Phusion Passenger を使用しているかどうかに関係なく、常に設定する必要があるものだと思います。

于 2009-04-29T01:27:15.537 に答える