使用cookie在PHP中选择两种以上的语言

使用cookie在PHP中选择两种以上的语言,php,cookies,Php,Cookies,我有一个代码,允许选择网站的语言,并保存您选择的cookie。此外,它还获取本地浏览器语言并将webiste设置为默认值。但是我只有两种语言:俄语和英语。 我想再增加两种语言。但它们不起作用。为什么?有解决办法吗 <?php ini_set('display_errors',1); error_reporting(E_ALL); $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); if ( !empty($_GET['lang

我有一个代码,允许选择网站的语言,并保存您选择的cookie。此外,它还获取本地浏览器语言并将webiste设置为默认值。但是我只有两种语言:俄语和英语。 我想再增加两种语言。但它们不起作用。为什么?有解决办法吗

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

if ( !empty($_GET['language']) )
{
    $_COOKIE['language'] = $_GET['language'] === 'en' ? 'en' : 'ru';
}
elseif (empty($_COOKIE['language']))
{
    $_COOKIE['language'] = $lang;
}


setcookie('language', $_COOKIE['language']);


if ( $_COOKIE['language'] == "en")
{
   $language = 'en';
}
elseif ( $_COOKIE['language'] == "es")
{
  $language = 'es';
}
elseif ( $_COOKIE['language'] == "zh")
{
  $language = 'zh';
}
else
{
   $language = 'ru';
}

$xml = simplexml_load_file("language.xml") or die("1YOU!");

$restore = $xml->restore->$language;
$set_up = $xml->set_up->$language;
$intro = $xml->intro->$language;
$intro_all = $xml->intro_all->$language;
$s_title = $xml->s_title->$language;
$advcash_login = $xml->advcash_login->$language;
$advcash_fee = $xml->advcash_fee->$language;
$advcash_amount = $xml->advcash_amount->$language;
$payeer_amount = $xml->payeer_amount->$language;
$payeer_fee = $xml->payeer_fee->$language;
$payment_send = $xml->payment_send->$language;
$deposit = $xml->deposit->$language;
?>
restore->$language;
$setup=$xml->setup->$language;
$intro=$xml->intro->$language;
$intro_all=$xml->intro_all->$language;
$s_title=$xml->s_title->$language;
$advcash\u login=$xml->advcash\u login->$language;
$advcash\u-fee=$xml->advcash\u-fee->$language;
$advcash\u amount=$xml->advcash\u amount->$language;
$payer\u amount=$xml->payer\u amount->$language;
$payer\u-fee=$xml->payer\u-fee->$language;
$payment\u send=$xml->payment\u send->$language;
$deposit=$xml->deposit->$language;
?>

此代码应进行如下良好重构:

$allow_langs = array('en', 'es', 'zh', 'ru');
$browser_lang = strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));
$language = (isset($_COOKIE['language']) ? $_COOKIE['language'] : $browser_lang);
if (isset($_GET['language'])) {
  $language = $_GET['language'];
}
if (!in_array($language, $allow_langs, true))
  $language = 'en'; //fallback for invalid lang
setcookie('language', $language);
//do your xml loading on $language var

谢谢对代码进行了一点编辑,因此如果Cookie中没有语言,则设置浏览器语言而不是建议的编辑。在内联之后,它应该是$browser_lang而不是''。如果,更改回退是危险的,因为接受语言是HTTP标头中不受信任的用户输入,我编辑了文章以包含正确的代码。in_数组检查仅用于数组中不存在的无效lang