2012-06-02 3 views
0

У меня есть скрипт PHP, который позволяет пользователям изменять язык, на котором отображается мой сайт. Мой скрипт смотрит на свой язык браузера, и если сайт доступен на их языке, он отображает его, но если он не доступен на языке по умолчанию, он отображает его на английском языке. Кроме того, если они предпочитают устанавливать свой язык с помощью наших файлов cookie, скрипт проверяет, доступен ли язык, определенный в cookie.Упрощающий скрипт изменения языка PHP

Тем не менее, этот скрипт в настоящее время выглядит немного длинным. Есть ли способ упростить его, сохраняя при этом ту же функциональность?

$u=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2); 
if(in_array($u,array('de','es','fr','ja','nl','pt','zh'))){ 
$l=$u; 
}else{ 
$l='en'; 
} 

if(isset($_COOKIE['language'])){ 
if(in_array($_COOKIE['language'],array('de','en','es','fr','ja','nl','pt','zh'))){ 
$l=$_COOKIE['language']; 
} 
} 

Я надеюсь, что люди могут понять, что я пытаюсь описать.

ответ

1

Как насчет этого?

$u = isset($_COOKIE['language']) ? $_COOKIE['language'] : substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); 

if (in_array($u, array('de','es','fr','ja','nl','pt','zh'))) { 
    $l = $u; 
} else { 
    $l = 'en'; 
} 

Кстати, это может быть полезно иметь массив, содержащий ваши разрешенные язык в виде «конфигурация» файла (файл, который будет всегда включен), для облегчения редактирования.

[Редактировать] Решил сделать это немного поздно, но в случае, если вы хотите быть в одной строке:

$l = in_array(($u = isset($_COOKIE['language']) ? $_COOKIE['language'] : substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)), array('de','es','fr','ja','nl','pt','zh')) ? $u : 'en'; 
0

Вы должны запустить проверку языка перед любым выходом, отправленным в браузер, чтобы вы могли правильно загрузить шаблоны локализации. Вы можете использовать global $variable; для хранения языка, без необходимости в файле cookie.

global $user_language; 
$valid_languages = array('de', 'es', 'fr', 'ja', 'nl', 'pt', 'zh'); 
if (in_array(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2), $valid_languages)) 
{ 
    $user_language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); 
} else { 
    $user_language = 'en'; 
} 

И после этого, вы используете $user_language, чтобы проверить, на каком языке пользователя устанавливаются так, чтобы при загрузке и использовать локализации.

Смежные вопросы