我已经在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文件,我已经更改了文件中的一些文本以确保它正在从语言文件中读取,目前它只显示默认文本而不进行翻译,我我想我的路径错了可能
答案 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”是您主机上的正确目录吗?或者那是相对的东西?注意:您需要完整路径名,而不是相对于主目录或安装目录。所以可能是这样的:
找到它的完整目录是什么?