我有这个 PHP 代码,当?setLang
参数在 URL 中时,它会设置一个 cookie
if (isSet($_GET["setLang"])) {
setcookie("lang",$_GET["setLang"]);
}
if (!isSet($_COOKIE["lang"])) {
//negociate language and set locale
}else{
//set locale to cookie
}
//translate with gettex
当我访问 website.com/?setLand=en 时,它完全按预期工作。
问题是当我从 website.com 链接到此表单中的 URL 时:
<a href="?setLang=en">en</a>
当我单击它时,通过链接(而不是直接进入)gettext 翻译不起作用,但除此之外,它按预期工作。
我的第一个想法是我必须强制进行某种刷新,所以我这样做了:
<a href="?setLang=en" onClick="window.location.reload( true );">en</a>
但它不起作用。
我检查了代码,当您单击链接时实际上设置了 cookie,所以它让我更加困惑。
以防万一的完整代码如下:
<?php
if (isSet($_GET["setLang"])) {
setcookie("lang",$_GET["setLang"]);
}
if (!isSet($_COOKIE["lang"])) {
$langs = array(
'en-US',// default
'fr',
'fr-FR',
'de',
'de-DE',
'de-AT',
'de-CH',
);
$locale = substr(http_negotiate_language($langs), 0, 2);
}else{
$locale = $_COOKIE["lang"];
}
//if (isSet($_GET["locale"])) $locale = $_GET["locale"];
if($locale == "en")
$locale = "en_US.utf8";
if($locale == "de")
$locale = "de_DE.utf8";
if($locale == "fr")
$locale = "fr_FR.utf8";
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
// Specify location of translation tables
bindtextdomain("translation", "locale");
// Choose domain
textdomain("translation");
// Translation is looking for in ./locale/de_DE/LC_MESSAGES/myPHPApp.mo now
// Print a test message
//echo _("title");
?>
和链接:
...
<a href="?setLang=en" onClick="window.location.reload( true );">en</a>
...