0

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

我希望人们能理解我试图描述的内容。

4

2 回答 2

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';
于 2012-06-02T14:00:56.040 回答
0

您应该在将任何输出发送到浏览器之前运行语言检查,以便正确加载本地化模板。您可以使用 aglobal $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在加载和使用本地化时检查用户设置的语言。

于 2012-06-02T13:59:25.030 回答