explode()
に3
、2
にインデックスがありません。それは何に基づいていますか?ドメインがexample.co.uk
またはwww.example.fr
の場合はどうなりますか?より良い使用:
$domainExtension = end(explode(".",$_SERVER['HTTP_HOST']));
次に、あなたが行うことができます:
switch ($domainExtension) {
case 'fr' : $language = 'FRE'; break;
case 'de' : $language = 'GER'; break;
case 'nl' : $language = 'DUT'; break;
default : $language = 'ENG'; break;
}
をあなたはswitch()
コードが読みやすくなり見ることができるように。私は、読みやすさのために、不必要に省略しません。私はまた、公用語の3文字の略語を言語に使用しました。これは、もう少し汎用性だが、2つの文字が行います、次を参照してください。
https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes
個人的に私は、私はそれらを残し、なぜあなたがそれらを使用する理由を私は理解しているがそれは、だ、言語のための数字が好きではありません。次のようにすることができます:
$texts = ['hello','Bonjour','Guten Tag','Hallo'];
ただし、その場合は任意の言語を省略できません。私は数字を忘れるとどうなる:次に
$texts = ['ENG' => 'hello',
'FRE' => 'Bonjour',
'GER' => 'Guten Tag',
'DUT' => 'Hallo'];
、言語が欠落しているとき、あなたは別のことでそれを置き換えることができます。
function getText($language,$texts) {
if (isset($texts[$language]) return $texts[$language]; // it is there
else return reset($texts); // take the first
};
をそのあとも最も一般的にまれに使用さから言語を並べ替えることができます中古。私は目的に合ったグローバルを使用していないことに注意してください。もう一度、あなたはそれを使うことを選ぶことができます。
最後に、バックテキストのシンプルなリストに取得するには、あなたは別の関数を使用できます。
function setTexts($english,$french,$german,$dutch)
{
return ['ENG' => $english,
'FRE' => $french,
'GER' => $german,
'DUT' => $dutch];
}
$helloTexts = setTexts('hello','Bonjour','Guten Tag','Hallo');
をし、このように使用:
echo getText($language,$helloTexts);
しかし、私は、多くがあることを強調しなければなりませんこれを行う他の方法。たとえば、さまざまな言語のインクルードファイルを個別に作成することができます。そうすれば、使用されていないテキストは処理されません。それは少し時間を節約するかもしれませんが、それは最小限に抑えられ、同じテキストの異なる翻訳を一緒に保つことは良いことです。
最後の1つのヒント: broswerが訪問者の優先言語を教えてくれます。参照:$_SERVER['HTTP_ACCEPT_LANGUAGE']
。