そこで問題は以下。各言語のコンテンツ配列から、元の言語に 2 つ追加された gettext サイトにサイトを変換しています。
私の基本言語は es_MX で、en_US と fr_FR の翻訳があります。
.htaccess で次のパラメーターを使用して、ロケールに関する情報を渡します。
RewriteRule ^/?$ index.php?es=./&en=./en/&fr=./fr/&locale=es_MX [L]
RewriteRule ^en/?$ index.php?es=./&en=./en/&fr=./fr/&locale=en_US [L]
RewriteRule ^fr/?$ index.php?es=./&en=./en/&fr=./fr/&locale=fr_FR [L]
したがって、$_GET パラメーターを確認すると、すべてが正しく受信されます。
ケース 1: デフォルトの es_MX
Array
(
[es] => ./
[en] => ./en/
[fr] => ./fr/
[locale] => es_MX
)
ケース 2: en_US
Array
(
[es] => ./
[en] => ./en/
[fr] => ./fr/
[locale] => en_US
)
ケース 3: fr_FR
Array
(
[es] => ./
[en] => ./en/
[fr] => ./fr/
[locale] => fr_FR
)
その後、ソーシャル ネットワークのプラグインや属性で使用する言語変数をいくつか用意するために、次の条件が必要です。
if(!$_GET["locale"] || $_GET["locale"] == "es_MX") {
$locale = "es_MX";
$locale_general = "es_LA";
$lang = "es";
$isolang = "es-419";
$htlang = "es-MX";
} else if($_GET["locale"] == "en_US") {
$locale = "en_US";
$locale_general = "en_US";
$lang = "en";
$isolang = "en";
$htlang = "en-US";
} else if($_GET["locale"] == "fr_FR") {
$locale = "fr";
$locale_general = "fr_FR";
$lang = "fr";
$isolang = "fr";
$htlang = "fr-FR";
}
その後、次を使用してロケールを初期化します。
putenv("LC_ALL=".$locale.".utf8");
setlocale(LC_ALL, $locale.".utf8");
bindtextdomain("hacienda", "./locale");
bind_textdomain_codeset("hacienda", "UTF-8");
textdomain("hacienda");
私のロケールは次の場所にあります: - 英語 (./locale/en_US/LC_MESSAGES/hacienda.mo) - フランス語 (./locale/fr_FR/LC_MESSAGES/hacienda.mo)
私が実行exec("locale -a",$output)
したところ、サイトには多くのロケールが表示され、その中には fr_FR.utf8 を含むいくつかの fr_FR エントリがあります。
生成される html は次のとおりです。
<html class="no-js" lang="fr" xml:lang="fr" itemscope itemtype="http://schema.org/Hotel"> <!--<![endif]-->
<head>
<meta charset="utf-8">
...
ロケール ファイルの名前を変更して新しいファイルも作成しようとしましたが、フランス語の翻訳が得られないようです。何がそれを引き起こしているのでしょうか?