11

gettext (Poedit を使用) に関するチュートリアルがいくつかありますが、残念ながら、ほとんどが UNIX 環境用です。さらに残念なことに、私は Windows XP で WAMP サーバーを実行しており (ただし、UNIX 環境向けに開発しています)、どのチュートリアルでも gettext が適切に機能することはありません。マニュアル ページから、Windows 環境では別のプロセスのようです。コメントでいくつかの解決策を試しましたが、まだ機能しません! 私はこれに何時間も費やしました。うまくいけば、誰かが私を正しい方向に向けて、このことを機能させることができます! (そして、私の欲求不満を共有する人が他にもいると確信しています。) これまでのところ、私のセットアップでは、「Hello World!」という出力しか得られません。一方、翻訳された文字列を取得する必要があります。

これまでの私のセットアップ/コードは次のとおりです。

// test.php
if (!defined('LC_MESSAGES')) {
    define('LC_MESSAGES', 6);
}

$locale = "deu_DEU"; // apparently the locales are different on a WINDOWS platform

putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("greetings", ".\locale");
textdomain("greetings");

echo _("Hello World"); 

フォルダ構造

ルート: C:\Program Files\WampServer 2\www
test.php: C:\Program Files\WampServer 2\www\site
.po: C:\Program Files\WampServer 2\www\site\locale\deu_DEU\LC_MESSAGES\greetings.po
.mo: C:\Program Files\WampServer 2\www\site\locale\deu_DEU\LC_MESSAGES\greetings.mo
4

6 に答える 6

6

ローカルマシンでgettextを操作しているときに問題が発生しました。検索したところ、問題を解決した次のページが見つかりました: http ://www.kipras.com/blog/getting-gettext-to-work-in-apache- on-windows / 96

私はウェブページから引用しています:

Linuxサーバー(またはWindows以外の他のサーバー)では、これを行う方法は次のとおりです。

setlocale(LC_MESSAGES, “en_US”);

Windowsにローカリティを設定する正しい方法は次のとおりです。

putenv(“LC_ALL=en_US”);
于 2010-04-25T15:44:07.760 に答える
2

私は同じ問題を抱えていて、ほぼ1日かそこらを無駄にしました. 最後に、WAMP サーバー (バージョン 2.1) をアンインストールし、新しいバージョン(WampServer 2.1e - 32 ビット) をインストールするという非常に簡単な解決策を見つけました。奇妙ですが、問題は完全に解決しました。

これが私のために働いたサンプルコードです:

<?php

    $locale = "deu_DEU";

    putenv("LC_ALL=$locale");
    setlocale(LC_ALL, $locale);

    bindtextdomain("greetings", "./locale");
    textdomain("greetings");

    echo _("Hello World");

?>

それが役に立てば幸い。

于 2011-07-18T21:00:04.907 に答える
0

私はこれについて完全な調査を行っていませんが、間違いの 1 つは、無効なロケール コードを使用したことだと確信しています。Windows でもロケール コードは同じです。これらは gettext ロケールであり、クロス プラットフォームです。

ロケール コードとして "de" だけを使用してみてください。動作するはずです。また、PHP に gettext 拡張機能がインストールされ、有効になっていることを確認してください (phpinfo で確認してください)。

于 2009-12-12T17:23:11.200 に答える
0

これは私のために働いた解決策です。これは最新の wampserver で動作します。(ソース: http://www.extradrm.com/blog/?p=1035 )

1) ここから php-gettext をダウンロードします: https://launchpad.net/php-gettext/+downloadと解凍します。

2) パッケージ ルートにある次のファイルを test-language.php と同じフォルダーに追加します。 - gettext.inc - gettext.php - stream.php

3) php.ini を開き、wampserver php_gettext.dll をコメントアウトします。

;extension=php_gettext.dll

4) これは新しいテスト ファイル test-language.php です。

<?php
error_reporting(E_ALL | E_STRICT);

// define constants
define('PROJECT_DIR', realpath('./'));
define('LOCALE_DIR', 'C:/wamp/www/test/locale');
define('DEFAULT_LOCALE', 'es_ES');

require_once('gettext.inc');

$supported_locales = array('en_US', 'sr_CS', 'de_CH','es_ES');
$encoding = 'UTF-8';

$locale = (isset($_GET['lang']))? $_GET['lang'] : DEFAULT_LOCALE;

//var_dump($locale);die();

// gettext setup
T_setlocale(LC_MESSAGES, $locale);
// Set the text domain as 'messages'
$domain = 'messages';
bindtextdomain($domain, LOCALE_DIR);
// bind_textdomain_codeset is supported only in PHP 4.2.0+
if (function_exists('bind_textdomain_codeset'))
bind_textdomain_codeset($domain, $encoding);
textdomain($domain);

echo gettext("HELLO_WORLD");
?>

このすべての後、locale フォルダー、en_US (または他の言語) フォルダー、LC_MESSAGES フォルダーを作成し、messages.po ファイルを配置する必要があります。

于 2014-06-12T11:16:08.390 に答える
0

手遅れかもしれませんが、WAMP php 設定で「短い開始タグ」を有効にするまで、同様の問題が発生していました

于 2013-09-11T14:30:22.057 に答える
-3

ロケールがインストールされていなかったためです。

于 2012-09-16T09:36:39.203 に答える