我有两个域指向同一个cakefp应用程序。
我在core.php上读取了域,并根据条件设置了显示语言
if(strstr($_SERVER['SERVER_NAME'],'por')>-1 ){
Configure::write('Config.language', 'por');
}else{
Configure::write('Config.language', 'spa');
}
我不确定这是否是最佳实践,因为这不使用会话。此外,我不确定这在高并发情况下是如何工作的,我猜有些用户可能会遇到语言闪烁的情况。
以下是我的操作方法。
Configure::write('Config.language', 'eng');
Configure::write('Config.supported_languages', array(
'en-US' => 'eng',
'en' => 'eng',
'es-ES' => 'esp',
'es' => 'esp',
));
$supported_languages = Configure::read('Config.supported_languages');
$accepted_languages = split(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach ($accepted_languages as $language) {
$language_data = split(';', $language);
if (in_array($language_data[0], array_keys($supported_languages))) {
Configure::write('Config.language', $supported_languages[$language_data[0]]);
break;
}
}
这将默认语言为英语(或您希望设置为默认语言的任何语言)。这将允许根据用户浏览器更改语言。
如果您的网站的语言确实依赖于服务器名称,我认为这不是一个糟糕的做法。
Configure是一个只实例化一次的单例类,但对于每个HTTP请求都是PHP。与Tomcat甚至ASP.Net等一些应用程序服务器不同,它不会为您网站上的所有用户配置"应用程序",而是仅为当前请求配置。因此,您的用户不会体验到任何语言闪烁。
也就是说,我不会把这个测试放在core.php中,而是放在bootstrap.php中,因为它是针对这类事情的。