我有一个Drupal 7安装,其中包含的模块数量超出了我的可能列表,但大多数都是I18N和SEO。现在,当我转到http:/my-site.com
时,即使浏览器区域设置设置为另一种受支持的语言(在http:/my-site.com/en
中配置),我也会被重定向到admin/config/regional/language/configure
,这是默认设置。无论出于何种原因,如果具有已定义语言的用户登录,它将起作用,只有浏览器检测似乎关闭。
我试过禁用可能是罪魁祸首的模块,比如翻译重定向和全局重定向,但无济于事。如果我禁用URL语言检测,我不会被重定向,但我失去了通过URL指定语言的能力。我想要的只是要么被重定向到正确的语言,要么根本不被重定向。
之前有没有人见过这种行为并知道如何处理它?谁能告诉我如何调试问题?
答案 0 :(得分:2)
您可能会受到Drupal核心中的错误的影响。我有一段时间遇到同样的问题,最后找到原因并找到解决方法。
它是这样的:
将此代码添加到自定义模块(将“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']);
}
清除所有缓存(例如“drush cc all”)
转到admin / config / regional / language / configure并按“保存设置”一次 (这将重建变量'language_negotiation_language')。
现在浏览器语言检测应该正常工作。
我也在寻找一个真正的解决方案,但由于bug的性质,这需要事先对核心进行更改并进行一些讨论。我在这里打开了一个问题:Browser language detection for anonymous requests is broken