简化PHP站点语言更改脚本

时间:2012-06-02 13:55:15

标签: php html

我有一个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'];
}
}

我希望人们能够理解我想要描述的内容。

2 个答案:

答案 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检查用户在加载和使用本地化时设置的语言。