我被困在这里。浏览本地化网站的翻译版本时,翻译会随机停止,我不知道为什么;我不确定它是否与我设置Locale的方式有什么关系,但它会随机停止翻译并恢复为英语。一旦这样做,将其取回的唯一方法是转到主页,突出显示地址栏中的URL并按Enter键。
我希望有人可以看看我在PHP中设置语言环境的方式,看看是否有我遗漏或搞砸的东西。
<?php
explode(";", setlocale(LC_ALL, 0));
$pageURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
if (strpos($pageURL,'es.') !== false) {
$language = 'es_ES.utf8';
}
elseif (strpos($pageURL,'it.') == true) {
explode(";", setlocale(LC_ALL, 0));
$language = 'it_IT.utf8';
}
elseif (strpos($pageURL,'de.') == true) {
explode(";", setlocale(LC_ALL, 0));
$language = 'de_DE.utf8';
}
elseif (strpos($pageURL,'pt.') == true) {
explode(";", setlocale(LC_ALL, 0));
$language = 'pt_PT.utf8';
}
elseif (strpos($pageURL,'fr.') == true) {
explode(";", setlocale(LC_ALL, 0));
$language = 'fr_FR.utf8';
}
else {
explode(";", setlocale(LC_ALL, 0));
$language = 'en_US.utf8';
}
putenv("LANG=" . $language);
explode(";", setlocale(LC_ALL, 0));
setlocale(LC_ALL, $language);
// Set the text domain as "messages"
$domain = "messages";
bindtextdomain($domain, "Locale");
bind_textdomain_codeset($domain, 'UTF-8');
textdomain($domain);
?>
如果你们有任何关于为什么gettext随机停止工作的想法,请告诉我。另外请告诉我,如果在其他地方有一段代码,您需要查看以解决此问题。我真的很感激!
答案 0 :(得分:0)
$pageURL = 'es.url.com/itdept.php';
if (strpos($pageURL , 'es.') !== FALSE)
echo 'it is spanish' . PHP_EOL;
// If this line was before the one above then using the example
// shown you'd be showing the portugese version.
if (strpos($pageURL , 'pt.') !== FALSE)
echo 'Oh, yeah, and its Portugese as well ...' . PHP_EOL;
如果您的目的是评估前3个字符,那么if / else块是,好吧,不好。
重写它,使您只隔离一次语言,然后将其与更易于读/写的数组匹配。
// $incoming = 'eeks'; // uncomment to test default
$incoming = 'es'; // grab this using substr() function
$langs = array(
'en'=>'English',
'pt'=>'Portugese',
'es'=>'Espanol',
);
if(array_key_exists($incoming, $langs)){
echo 'Setting lang to ' . $langs[$incoming] ;
}else{
echo 'Setting default lang to ' . array_shift($langs);
}
作为奖励,您可以检查传入与白名单。
如果您不打算评估前3个字符,那么这可能是一个错误的答案。