2017-11-13 7 views
0

私は現在、異なるgTLDのコンテンツを翻訳するウェブサイトを開発中です。 (example.com、example.fr、example.de)翻訳されたコンテンツのPHPスニペット。それは良い練習ですか?より良い/よりシンプルになることができますか?

アイデアは、それらがすべて同じサーバー上の同じコンテンツにリダイレクトされ、gTLDに基づいて、正しい言語を提供する簡単なPHPルーチンを持つことです。ここで

は、私は、ドメイン/言語を検出するために使用していたコードです:私は別の言語のコンテンツを必要とする時はいつでも、私はtxtの機能を実行するHTMLコードに

<?php 

$url_tld = explode("." , $_SERVER['HTTP_HOST'] , 3); 
if ($url_tld[2] == "fr") { $language = "FR"; $lang_id = 1;} 
elseif ($url_tld[2] == "de") { $language = "DE"; $lang_id = 2;} 
elseif ($url_tld[2] == "nl") { $language = "NL"; $lang_id = 3;} 
else { $language = "EN"; $lang_id = 0;} 

function txt($x) { 
    global $lang_id; 
    echo $x[$lang_id]; 
}; 

を。例:

私はウェブサイトがほとんど静的であるため、データベースの使用を避けようとしています。

このアプローチは簡単にできますか?それとももっとフレンドリーな(手動でコードを更新する人たちのために)?

事前に感謝します。

答えて

1

explode()32にインデックスがありません。それは何に基づいていますか?ドメインが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']

0

それを行うには、短い道(あなただけの配列のキーを取り、IDを与える必要はありません):

$url_tld = 'FR';//explode("." , $_SERVER['HTTP_HOST'] , 3); 

$lang_available = array('en','fr','de','nl'); 

$language = strtolower($url_tld); 

$lang_id = array_search($language, $lang_available); 

txt(['Hello World','Bonjour France','Hallo Deutschland','Hallo Nederland']); 
関連する問題