为什么gettext忽略了GET变量?

时间:2016-10-30 18:24:16

标签: php localization internationalization gettext

<?php
putenv('LC_ALL=de_DE');
setlocale(LC_ALL, 'de_DE');

$setLng= htmlspecialchars($_GET["lang"]);
//putenv('LC_ALL=$setLng');
//setlocale(LC_ALL, '$setLng');

// translation path
bindtextdomain("messages", "./locale");

// Choosing domain
textdomain("messages");

// translation searched in ./locale/de_DE/LC_MESSAGES/meinePHPApp.mo 

?>

<hi><?php echo _("Translate using gettext") ?></h1>
<p> <?php echo _("This video is a simple tutorial.") ?></p>

<?php echo "Set Languange:" .$setLng  //shows current setting  and hows me that variable is correctly fetched...
?>

所以我通过GET($ setLng)获取变量“lang”。输出是正确的,但它不起作用。当我在代码中输入变量(没有提取)时,它可以正常工作。

putenv('LC_ALL=$setLng');
setlocale(LC_ALL, '$setLng');

有谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:1)

您应该在字符串中使用double-quote (and not single-quote)

putenv("LC_ALL=$setLng");
setlocale(LC_ALL, "$setLng");

使用单引号php不要重新接收字符串中的变量,输出将是带有$符号的字符串(而不是变量中的值)。

这是the manual

  

当用双引号或heredoc指定字符串时,会在其中解析变量。

检查一下:

echo 'LC_ALL=$setLng';
echo "<br />\n";
echo "LC_ALL=$setLng";

输出将是&#34;

LC_ALL=$setLng
LC_ALL=de_DE

(基于您的网址为http://.../?lang=de_DE)。