douchan6512
2009-09-20 01:33
浏览 82
已采纳

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

I have created a language file in poedit for the use of the PHP gettext function, now on the page I am trying to test it on, I cannot get it to find/load the .po or .mo file I created, does anyone see what I am doing wrong?

$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

Even though I am trying to load the default english lang file, I have changed some text in the file to make sure it is reading from a language file and currently it is only showing the default text and not doing a translation, I think I have the wrong path possibly

图片转代码服务由CSDN问答提供 功能建议

我在poedit中创建了一个语言文件,用于使用PHP gettext函数,现在我正在尝试的页面上 要测试它,我无法找到/加载我创建的.po或.mo文件,是否有人看到我做错了什么?

  $ locale =“  en_US“; 
putenv(”LC_ALL = $ locale“); 
setlocale(LC_ALL,$ locale); 
bindtextdomain(”default“,”/ includes / locale“); 
textdomain(”default“); 
 
  //我的.po广告.mo文件位于/includes/locale/en/default.mo
nn

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

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dongxian7194 2009-09-20 01:36
    已采纳

    I finally got it to work, I am posting here so maybe it can help someone else, it is somewhat confusing the way it is documented I think.

    I will use FR for french for this demo

    $locale = "fr_fr";
    putenv("LC_ALL=$locale");
    setlocale(LC_ALL, $locale);
    bindtextdomain("default", "/includes/locale");
    textdomain("default");
    

    In the bindtextdomain function above, the first param is the name of the .po language file minus the extension. The second param is the path to the folder, this is where is gets a little tricky/undocumented... In the folder you set here you have to create a folder for each language with it's 2 digit country code, then inside this country code folder I had to add this folder named LC_MESSAGES, inside LC_MESSAGES is where your default.po file goes.

    This was the only way I could get it to work, kind of confusing since the path to the lang folder does not mention anything about the bold part here:

    langfolder/fr_FR/LC_MESSAGES/default.po

    It is still really strange though, default.po works for me but if I change it to something else in the code above and then change the filename of the .po and .mo files to match it will no longer work, only works with default name for me, I am starting to think maybe gettext does some sort of behind the scenes caching

    已采纳该答案
    打赏 评论
  • doujiao8649 2009-09-20 01:45

    I suspect it's your path.

    Is "/includes/locale" the correct directory on your host? Or is that relative to something? Note: you need the full pathname, not relative to your home directory or the install directory. so that might be something like:

    • C:/xampp/htdocs/include/locale
    • /var/www/include/locale
    • /home/username/include/locale
    • etc

    What is the full directory where it's found?

    打赏 评论

相关推荐 更多相似问题