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

Jas*_*vis 5 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
Run Code Online (Sandbox Code Playgroud)

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

Jas*_*vis 9

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

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

$locale = "fr_fr";
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("default", "/includes/locale");
textdomain("default");
Run Code Online (Sandbox Code Playgroud)

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

这是我能让它工作的唯一方式,有点令人困惑,因为lang文件夹的路径没有提到任何关于粗体部分的信息:

langfolder/fr_FR/LC_MESSAGES /default.po

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

  • 使用gettext进行一些缓存,因此如果更改.mo文件,通常必须重新启动Apache. (2认同)