0

我在这里陷入了困境。浏览我的本地化网站的翻译版本时,翻译随机停止,我不知道为什么;我不确定这是否与我设置区域设置的方式有关,但它会随机停止翻译并恢复为英语。完成此操作后,唯一的取回方法是转到主页,在地址栏中突出显示 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 随机停止工作有任何想法,请告诉我。另外,如果您需要查看其他地方的代码片段以解决该问题,请告诉我。对此,我真的非常感激!

4

1 回答 1

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 个字符,那么这可能是一个不正确的答案。

于 2014-03-08T05:28:06.850 回答