5

アドレスが/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 サポート」の前に、有効化が記載されていました。messages.poおよびmessages.moファイルは、poEdit を使用して作成した有効なファイルです。私はウィンドウズユーザーです。しかし、try.php を開くと、Hello World! と表示されるだけでした。(翻訳された文字列ではありません。また、.poファイルを 100% 翻訳しました (に従ってpoEdit)。それでも、結果が得られません。これについて少し助けていただければ幸いです。

前もって感謝します!

4

3 に答える 3

2

スペイン語翻訳用の作業サイトに配置したコードを振り返ってみると、同じ行の順序が異なっていることに気付きました。例えば:

<?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..
?>
于 2011-05-09T15:37:48.440 に答える
0

の戻り値を出力し$result=bindtextdomain($domain,$path)ます。ローカル パスが実際に翻訳ファイルに期待するパスであるかどうかがわかります。そして、それらのファイル (およびルートまでのディレクトリ) が www ユーザーによってアクセス可能かどうかを確認します。./locale/LC_MESSAGES/nld_nld/ のどこかにあります

textdomain($domain)最後のメソッドにする必要があります (実際の gettext 変換の前)。bindtextdomain と textdomain の domain パラメーターは、同じドメイン名 (回答には含まれていません) であり、mo ファイルのベース名と同じである必要があります。

また、特に「require_once」を使用する場合は、php ファイルが別のテキストドメインを使用していないことを確認してください。

ところで、あなたが持っているコードはリクエストでロケール識別子を探し (フィルターなし)、デフォルトのフェイルバックとして nld_nld を使用します。代わりに通常の言語 (「en」のような主要なサイト言語) をそこに置きます。

于 2012-12-13T01:13:58.623 に答える
0

問題は、UTF-8 の「-」である可能性があります。Windows との互換性のために追加する他の行もあります。これを読んでみてください: http://www.php.net/manual/en/function.setlocale.php#89076

于 2011-01-23T11:30:51.393 に答える