gettext停止随机工作

时间:2014-03-07 21:16:25

标签: php gettext po php-gettext mo

我被困在这里。浏览本地化网站的翻译版本时,翻译会随机停止,我不知道为什么;我不确定它是否与我设置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随机停止工作的想法,请告诉我。另外请告诉我,如果在其他地方有一段代码,您需要查看以解决此问题。我真的很感激!

1 个答案:

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