如何在 PHP 中使用 gettext 加载语言?
题
我已经在 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
找到它的完整目录是什么?