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

尽管我正在尝试加载默认的英语语言文件,但我更改了文件中的一些文本以确保它正在从语言文件中读取,并且当前它仅显示默认文本而不进行翻译,我想我已经可能走错路了

有帮助吗?

解决方案

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

我将使用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文件夹没有提及的加粗部分在这里什么的唯一方式:

  

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

这仍然是很奇怪的,虽然,default.po对我的作品,但如果我把它改到别的上面,然后将代码的东西改变的.po的文件名和文件的.mo与之相匹配的将不再工作,只有工作我default名字,我开始觉得也许gettext的做某种场景缓存背后

其他提示

我怀疑这是你的路。

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

  • C:/xampp/htdocs/include/区域设置
  • /var/www/include/区域设置
  • /home/用户名/include/区域设置
  • ETC

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top