php - 如何在 php 中使用 po/pot 文件?

标签 php gettext mo php-gettext po

我在地址为 /locale/nld_nld/LC_MESSAGES/ 的文件夹中有一个 .po 和一个 .mo 文件。这两个文件的名称都是消息。我一直在尝试使用以下代码:

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 和本地化文件都在同一目录中。另外,我使用 xampp。我还实现了 phpinfo();。在表格中,在“GetText Support”前面提到了启用。 messages.pomessages.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..
?>

关于php - 如何在 php 中使用 po/pot 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4682800/

相关文章:

zend-framework - 有人可以分解本地化文件(.mo,.po)生成的工作方式吗?

wordpress - 如何处理多个文本域?

php - 在 php 中向我的数据库发送请求

php - Laravel 查询获取不同值的出现次数

java - jar 文件外部的 ResourceBundles

javascript - 您可以将 "dumb down"ES6 模板字符串转换为普通字符串吗?

git - 是否有用于 pull 的 git 钩子(Hook)?

php递增时间戳错误?

php - 使用 mysql 和 PHP 在选择下拉列表中分类