web-dev-qa-db-ja.com

「匿名ユーザーのキャッシュページ」をチェックすると、言語検出方法「ブラウザ」が機能しません

この順序で2つのメソッド検出をアクティブにしています。

1- URL

2-ブラウザ

問題は、「admin/config/development/performance」で「匿名ユーザーのページをキャッシュする」がチェックされている場合、メソッド「ブラウザ」がまったく機能しないことです。 デフォルトの言語は、ブラウザの言語に関係なく常に読み込まれます。

「匿名ユーザーのページをキャッシュする」のチェックを外すと問題なく動作します。

キャプチャを参照してください。

enter image description here

enter image description here

2
chefnelone

あなたは見て、試しましたか:

https://stackoverflow.com/questions/22792062/drupal-7-always-redirecting-to-default-language

Drupalコアのバグの影響を受けている可能性があります。しばらく同じ問題が発生し、最終的に原因と回避策を見つけました。

こんなふうになります:

  1. このコードをカスタムモジュールに追加します(「mymodule」をモジュールの名前に変更します)。

    /**
     * Implements hook_language_negotiation_info_alter().
     *
     * Remove the 'cache' setting from LOCALE_LANGUAGE_NEGOTIATION_BROWSER since
     * the code that utilizes this setting will in fact prevent browser negotiation.
     */
    function mymodule_language_negotiation_info_alter(&$negotiation_info) {
        unset($negotiation_info[LOCALE_LANGUAGE_NEGOTIATION_BROWSER]['cache']);
    }
    
  2. すべてのキャッシュをクリアします(「drush cc all」など)

  3. Admin/config/regional/language/configureに移動し、「設定の保存」を1回押します(これにより、変数「language_negotiation_language」が再構築されます)。

これで、ブラウザの言語検出が正しく機能するはずです。

私も実際の解決策を探していますが、これにはコアの変更が必要であり、バグの性質上、おそらく事前にいくつかの議論が必要です。私はここに問題をオープンしました: 匿名リクエストのブラウザ言語検出が壊れています

今はBerdirからのパッチがあります

2
rémy

あなたはローカル言語を設定解除するためにカスタムモジュールを書く必要があります、そしてそれはあなたの問題を整理します

0
Rana Awais