需要帮助解决这个谜团:
我在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);
答案 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服务器,它可以工作: - )