5

我在 poedit 中创建了一个语言文件以使用 PHP gettext 函数,现在在我尝试对其进行测试的页面上,我无法找到/加载我创建的 .po 或 .mo 文件,有人看到吗我做错了什么?

$locale = "en_US";
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("default", "/includes/locale");
textdomain("default");

//my .po ad .mo file is located here /includes/locale/en/default.mo

即使我正在尝试加载默认的英语语言文件,我已经更改了文件中的一些文本以确保它正在从语言文件中读取,并且目前它只显示默认文本而不进行翻译,我想我有错误的路径可能

4

2 回答 2

9

我终于让它工作了,我在这里发帖,所以也许它可以帮助其他人,我认为它的记录方式有点令人困惑。

我将在这个演示中使用法语的 FR

$locale = "fr_fr";
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("default", "/includes/locale");
textdomain("default");

在上面的bindtextdomain函数中,第一个参数是 .po 语言文件的名称减去扩展名。第二个参数是文件夹的路径,这是有点棘手/未记录的地方......在您在这里设置的文件夹中,您必须为每种语言创建一个文件夹,其中包含 2 位国家代码,然后在这个国家代码中文件夹我必须添加这个名为 的文件夹LC_MESSAGES,里面LC_MESSAGES是你的default.po文件所在的位置。

这是我可以让它工作的唯一方法,有点令人困惑,因为 lang 文件夹的路径没有提到这里的粗体部分:

语言文件夹/ fr_FR/LC_MESSAGES /default.po

不过,这仍然很奇怪,default.po对我有用,但是如果我在上面的代码中将其更改为其他内容,然后更改 .po 和 .mo 文件的文件名以匹配它将不再起作用,仅适用default于我的名称,我开始认为 gettext 可能会在幕后进行某种缓存

于 2009-09-20T01:36:17.557 回答
2

我怀疑这是你的路。

“/includes/locale”是您主机上的正确目录吗?还是与某事有关?注意:您需要完整的路径名,而不是相对于您的主目录或安装目录。所以这可能是这样的:

  • C:/xampp/htdocs/include/locale
  • /var/www/include/locale
  • /home/用户名/包括/语言环境
  • ETC

找到它的完整目录是什么?

于 2009-09-20T01:45:49.077 回答