Динамический мультиязычный веб-сайт Cakephp 2.0 (вопрос передового опыта) - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть два домена, указывающие на одно и то же приложение cakephp.

Я читаю домен на core.php и в зависимости от условия устанавливаю язык отображения

        if(strstr($_SERVER['SERVER_NAME'],'por')>-1 ){
            Configure::write('Config.language', 'por');     
        }else{
            Configure::write('Config.language', 'spa'); 
        }

Я не уверен, что это лучшая практика, поскольку здесь не используются сессии. Более того, я не уверен, как это может работать с высоким параллелизмом, я полагаю, что некоторые пользователи могут испытывать мерцание языка.

Ответы [ 2 ]

2 голосов
/ 15 февраля 2012

Вот как бы я это сделал.

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;
    }
}

При этом язык по умолчанию будет английский (или любой язык, который вы хотите установить по умолчанию). Это позволит изменить язык в зависимости от браузера пользователя.

1 голос
/ 14 февраля 2012

Если язык вашего сайта зависит от имени сервера, я не думаю, что это плохая практика.

Configure - это одноэлементный класс, который создается только один раз, но для каждого HTTP-запроса, так как это PHP. В отличие от некоторых серверов приложений, таких как Tomcat или даже ASP.Net, он не настраивает «приложение» для всех пользователей вашего веб-сайта, а только для текущего запроса. Таким образом, ваши пользователи не будут испытывать мерцание языка.

Тем не менее, я бы поставил этот тест не в core.php, а в bootstrap.php, как он предназначен для такого рода вещей.

...