我有一个PHP脚本,允许用户更改我的网站显示的语言。我的脚本查看他们的浏览器语言,如果该网站以他们的语言提供,它会显示它但如果它们不可用默认语言,用英语显示。此外,如果他们选择使用我们的cookie设置他们的语言,脚本会检查cookie是否也可以使用该语言。
但是,这个脚本目前看起来有点长。有什么方法可以在保持相同功能的同时简化它吗?
$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'];
}
}
我希望人们能够理解我想要描述的内容。
答案 0 :(得分: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';
}
顺便说一句,在“config”文件(一个将始终包含的文件)中包含允许使用的语言的数组可能很有用,以便于编辑。
<强> [编辑] 强> 决定尽快做这件事,但万一你希望它在一条线上:
$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';
答案 1 :(得分: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
检查用户在加载和使用本地化时设置的语言。