PHP - 本地化 - 翻译在一个php文件中工作,但在另一个php文件中没有

时间:2013-06-07 19:42:10

标签: php gettext hebrew

需要帮助解决这个谜团: 我在Windows机器上使用XAMPP并使用“echo _(”message“)”方式转换成希伯来语。 区域设置目录位于root/locale/Hebrew_Israel.1255/LC_MESSAGES

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

但是,翻译不适用于位于/ php目录下的另一个php文件。 你会猜测这是由于相对路径问题,但即使我把它设置为root也无法翻译。

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

无论如何,这是我在每个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);

2 个答案:

答案 0 :(得分: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但是这个对我有用。

答案 1 :(得分:0)

解决了:正在进行令人烦恼的缓存。 我不得不重新启动apache服务器,它可以工作: - )