PHP -本地化-翻译工作在一个PHP文件,但不是在另一个


PHP - localization - translation works in one php file but not in another

我们需要帮助来解开这个谜团:我在一台windows机器上使用XAMPP,并使用"echo _("message")"方式将其翻译成希伯来语。Locale目录在root/locale/Hebrew_Israel.1255/LC_MESSAGES

翻译在位于站点根目录下的index.php文件上可以正常工作。

但是,翻译不能在/php目录下的另一个php文件上工作。你可能会猜这是由于相对路径问题,但即使我把它放在根目录,它也无法翻译。

我不确定Locale是如何工作的以及所有这些行是什么意思。找不到合适的文件。我应该运行它每个php还是只一次?

无论如何,这是我的"config.php"文件,我包含在每个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);

您必须使用$_SESSION作为区域设置,如果您想要切换,则将其作为$_GET传递。

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

In my 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");

所以如果这是你的默认语言,你需要传递你的文件locale变量。如果你正在处理。htaccess,最简单的方法是:

。htaccess

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

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

解决:这是令人讨厌的缓存正在进行。我不得不重新启动apache服务器,它工作:-)