0

この謎を解決するには助けが必要です: 私は Windows マシンで XAMPP を使用しており、"echo _("message")" 方法を使用してヘブライ語に翻訳しています。ロケール ディレクトリはオンですroot/locale/Hebrew_Israel.1255/LC_MESSAGES

翻訳は、サイトのルートにある index.php ファイルで正常に機能します。

ただし、/php ディレクトリにある別の php ファイルでは翻訳が機能しません。相対パスの問題が原因であると推測できますが、ルートに配置しても変換に失敗します。

Locale がどのように機能し、これらすべての行が何を意味するのかわかりません。適切なドキュメントが見つかりませんでした。PHPごとに実行するか、1回だけ実行する必要がありますか?

とにかく、これは各phpファイルの前に含める私の「config.php」ファイルです。パスは絶対パスです。

// language stuff:
$locale = "Hebrew_Israel.1255"; // this might change on server 
$domain = "messages";
putenv("LANG=$locale");
putenv("LANGUAGE=$locale");
putenv("LC_ALL={$locale}"); // Returns TRUE
putenv("LC_MESSAGES=$locale");
setlocale(LC_ALL, $locale);
$path = $_SERVER['DOCUMENT_ROOT'] . "/locale";
bindtextdomain($domain, $path);
textdomain($domain);
4

2 に答える 2

0

ロケールに $_SESSION を使用し、切り替えたい場合は $_GET として渡す必要があります。

たとえば、私が使用しているスペイン語と英語の Web ページには次のようなものがあります。

私のheader.phpで

    session_start();

    if(!$_GET["locale"] || $_GET["locale"] == "es_LA")
    {
        $_SESSION["locale"] = "es_LA";
    }
    else
    {
        $_SESSION["locale"] = $_GET["locale"];
    }

    putenv("LC_ALL=".$_SESSION["locale"].".utf8");
    setlocale(LC_ALL, $_SESSION["locale"].".utf8");
    bindtextdomain("messages", "./locale");
    bind_textdomain_codeset("messages", "UTF-8");
    textdomain("messages");

したがって、これがデフォルトの言語である場合は、ファイルにロケール変数を渡す必要があります。.htaccess を処理している場合、最も簡単な方法は次のとおりです。

.htaccess ファイル

RewriteRule         ^/                  index.php?locale=es_LA  [L]
RewriteRule         ^en/                index.php?locale=en_US  [L]

今、私は gettext を使用するプロではありませんが、これはうまくいきました。

于 2013-06-07T19:56:47.830 に答える
0

解決済み: 面倒なキャッシングが行われていました。Apacheサーバーを再起動する必要がありましたが、動作します:-)

于 2013-06-08T17:45:07.657 に答える