【问题标题】:Why is GET variable ignored by gettext?为什么gettext会忽略GET变量?
【发布时间】:2016-10-30 18:24:16
【问题描述】:
<?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');

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

【问题讨论】:

    标签: php localization internationalization gettext


    【解决方案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";
    

    输出将是“

    LC_ALL=$setLng
    LC_ALL=de_DE
    

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

    【讨论】:

    • 奇怪的是它确实向我展示了价值!但是,更改引号起到了作用...谢谢!
    • 不太确定它究竟在哪里向您显示了价值......但使用单引号可能没有。
    猜你喜欢
    • 2012-04-05
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2021-08-23
    • 2019-10-01
    相关资源
    最近更新 更多