如何在PHP中使用gettext加载语言?

时间:2009-09-20 01:33:23

标签: php gettext poedit

我已经在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

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

2 个答案:

答案 0 :(得分:9)

我终于得到了它的工作,我在这里张贴所以也许它可以帮助其他人,它有点混乱我记录的方式。

我将使用FR for french进行此演示

$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文件夹的路径没有提到任何有关粗体部分的内容:

  

langfolder /的 fr_FR目录/ LC_MESSAGES /default.po

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

答案 1 :(得分:2)

我怀疑这是你的道路。

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

  • C:/ XAMPP / htdocs中/包括/区域设置
  • 的/ var / WWW /包含/区域设置
  • /家庭/用户名/包含/区域设置

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