0

需要帮助来解决这个谜团:我在 Windows 机器上使用 XAMPP 并使用“echo _("message")”方式翻译成希伯来语。语言环境目录已打开root/locale/Hebrew_Israel.1255/LC_MESSAGES

翻译在位于站点根目录中的 index.php 文件上运行良好。

但是,翻译不适用于位于 /php 目录下的另一个 php 文件。您可能会猜测这是由于相对路径问题,但即使我将其置于根目录,它也无法翻译。

我不确定 Locale 的工作原理以及所有这些行的含义。找不到合适的文档。我想运行它每个 php 还是只运行一次?

无论如何,这是我在每个 php 文件之前包含的“config.php”文件,注意路径是绝对的。

// language stuff:
$locale = "Hebrew_Israel.1255"; // this might change on server 
$domain = "messages";
putenv("LANG=$locale");
putenv("LANGUAGE=$locale");
putenv("LC_ALL={$locale}"); // Returns TRUE
putenv("LC_MESSAGES=$locale");
setlocale(LC_ALL, $locale);
$path = $_SERVER['DOCUMENT_ROOT'] . "/locale";
bindtextdomain($domain, $path);
textdomain($domain);
4

2 回答 2

0

已解决:这是令人讨厌的缓存。我不得不重新启动 apache 服务器并且它可以工作:-)

于 2013-06-08T17:45:07.657 回答
0

如果要切换,您必须使用 $_SESSION 作为语言环境并将其作为 $_GET 传递。

例如,我用西班牙语和英语使用的网页是这样的:

在我的 header.php

    session_start();

    if(!$_GET["locale"] || $_GET["locale"] == "es_LA")
    {
        $_SESSION["locale"] = "es_LA";
    }
    else
    {
        $_SESSION["locale"] = $_GET["locale"];
    }

    putenv("LC_ALL=".$_SESSION["locale"].".utf8");
    setlocale(LC_ALL, $_SESSION["locale"].".utf8");
    bindtextdomain("messages", "./locale");
    bind_textdomain_codeset("messages", "UTF-8");
    textdomain("messages");

因此,如果这是您的默认语言,您需要将语言环境变量传递给您的文件。如果您正在处理 .htaccess ,最简单的方法是:

.htaccess 文件

RewriteRule         ^/                  index.php?locale=es_LA  [L]
RewriteRule         ^en/                index.php?locale=en_US  [L]

现在我不是使用 gettext 的专业人士,但这个对我有用。

于 2013-06-07T19:56:47.830 回答