如何使用PHP的po / pot文件?

我在一个文件夹中有.po和.mo文件,其地址是/ locale / nld_nld / LC_MESSAGES /。这两个文件的名称都是消息。我一直在尝试使用以下代码: try.php:
<?php
require_once("Localization.php");
echo _("Hello World!");
?>
Localization.php在这里:
<?php
$locale = "nld_nld";
if (isSet($_GET["locale"])) $locale = $_GET["locale"];
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("messages", "./locale");
bind_textdomain_codeset("messages", 'UTF-8');
textdomain("messages");
?>
try.php和Localization文件都在同一目录中。另外,我使用
xampp
。我也实施了
phpinfo();
。在表格中,在“GetText支持”前面,提到了启用。 messages.po和messages.mo文件是我使用poEdit创建的有效文件。我是一个Windows用户。但是,当我打开try.php时,它只是回显了Hello World! (不是它的翻译字符串。另外,我已经将.po文件100%翻译了(根据
poEdit
)。但是,我还没有得到结果。对此有点帮助将不胜感激。 提前致谢!     
已邀请:
当回顾我在西班牙语翻译工作网站上的代码时,我注意到我也有不同顺序的相同行,也许这有所不同?例如:
<?php
putenv('LC_MESSAGES=es_ES');
setlocale(LC_MESSAGES, 'es_ES.utf8');
bindtextdomain('es','/full/path/here/application/locale');
textdomain('messages-es');
bind_textdomain_codeset('messages-es', 'UTF-8');
?>
要使上述代码生效,我的.mo文件位于/full/path/here/application/locale/es_ES.utf8文件夹中。 也许我之前使用的以下代码可能会帮助您进一步排除故障:
<?php
function TestLang( $langCode ) {
  echo( '<b>TESTING LANG CODE: ' . strtolower( $langCode ) . '</b><br />' );
  putenv( 'LC_MESSAGES=' . strtolower( $langCode ) . '_' . strtoupper( $langCode ));
  echo( 'LC_MESSAGES: ' . getenv( 'LC_MESSAGES' ) . '<br />' );
  $localeResult = setlocale( LC_MESSAGES, strtolower( $langCode ) . '_' . strtoupper( $langCode ) . '.utf8' );
  echo( 'Locale: ' . $localeResult . '<br />' );
  $textDomain = bindtextdomain( strtolower( $langCode ), ROOT . '/' . APP_DIR . '/locale' );
  echo( 'Text Domain: ' . $textDomain . '<br />' );
  textdomain( strtolower( $langCode ));
  $codeSet = bind_textdomain_codeset( strtolower( $langCode ), 'UTF-8' );
  echo( 'Code Set: ' . $codeSet . '<br />' );
  echo( '.mo File: ' . $textDomain . '/' . $localeResult . '/LC_MESSAGES/' . $langCode . '.mo<br />' );
  echo( '<br />-- ' . _( 'Hello World!' ) . ' --<br />' );
}

TestLang( 'en' );
TestLang( 'de' );
TestLang( 'es' );
TestLang( 'fr' );
// etc..
?>
    
问题可能是UTF-8中的“ ​​- ”。 还有其他行可以添加Windows兼容性。 试着读一下:http://www.php.net/manual/en/function.setlocale.php#89076     
输出
$result=bindtextdomain($domain,$path)
的返回值,它会告诉您本地路径是否确实是您希望翻译文件生效的路径。然后检查这些文件的文件访问权限(如果它们(以及直到root的目录)可由www-user访问)。它位于./locale/LC_MESSAGES/nld_nld/中的某处
textdomain($domain)
应该是最后一种方法(在实际的gettext转换之前)。 bindtextdomain和textdomain的domain参数应该是相同的域名(它不在您的答案中)并且等于mo文件基本名称。 确保您的php文件都不使用其他textdomain,尤其是当您使用“require_once”时。 顺便说一下,您所拥有的代码在请求中查找区域设置标识符(没有过滤器)并使用nld_nld作为默认的故障恢复,我会在其中放置一种普通语言(主要网站语言,如“en”)。     

要回复问题请先登录注册