1

gettext は初めてです。

ここに私のセットアップがあります: /Apache 2.2 PHP 5.3.6 Windows 7/

Apache/htdocs/test/index.phpに次のコードがあります

<?php
    $language = 'de_DE'; 
    $translatefile = 'messages'; 
    setlocale(LC_ALL, $language);
    putenv("LANG=".$language); 
    bindtextdomain($translatefile, 'C:/locale'); 
    textdomain($translatefile); 

    echo gettext("Hello World!");
?>

PoEdit を使用して、 locale/de_DE/LC_MESSAGES/messsages.po & messages.mo の下に必要な翻訳を生成しました。使用した文字セットはUTF-8でした

にアクセスするhttp://localhost/testと、結果は Hello World! です。それがホールウェルトであるべきとき!

テストとして、コマンド プロンプトを開き、test フォルダーに移動しました。次に、入力しました

php index.php 

コンソールに表示された結果は

Hall Welt!

Apache で動作しない理由がわかりません。

4

2 に答える 2

2

問題は従来の方法では解決されませんでした。gettext(php_gettext.dll)の代わりにphp-gettextを使用する必要がありました.phpにデフォルトで組み込まれています。

詳細:

1) ここから php-gettext をダウンロードします: https://launchpad.net/php-gettext/+download 2) 次のファイルを index.php と同じフォルダーに追加します: - gettext.inc - gettext.php - stream.php 3) これは新しい index.php です

  <?php
    error_reporting(E_ALL | E_STRICT);

    // define constants
    define('PROJECT_DIR', realpath('./'));
    define('LOCALE_DIR', 'C:/locale');
    define('DEFAULT_LOCALE', 'de_DE');

    require_once('gettext.inc');

    $supported_locales = array('en_US', 'sr_CS', 'de_CH');
    $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!");
    ?> 

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

  ;extension=php_gettext.dll

訪問http://localhost/testすると表示されますHall Welt!

于 2012-07-22T16:54:10.390 に答える
0

今日、wampserver 2.2、apache 2.2 windows 7、64 BITS で同じ問題が発生しました。アンインストールして、32 BITS をインストールしました。できます。

于 2012-12-18T17:01:09.440 に答える