2017-11-11 10 views
-1

PHPで言語ブラウザを検出する方法と、別の言語に切り替えるための言語hrefアンカーを検出する方法を知っています。 locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);を持っていませんブラウザ言語の検出を追加した後、言語href anchor(hl)が動作を停止します

私の古いコード:

if (isset($_GET['hl'])) 
{ 
    $langOption = $_GET['hl']; 
} 

else 
{ 
    $langOption = ''; 
} 

switch ($langOption): 
    case 'ca': 
    $language = 'cat'; 
    break; 
    case 'el': 
    $language = 'el'; 
    break; 
    case 'en': 
    $language = 'en'; 
    break; 
    case 'en_GB': 
    $language = 'en_GB'; 
    break; 
    case 'es': 
    $language = 'es'; 
    break; 
    case 'fr': 
    $language = 'fr'; 
    break; 
    case 'ka': 
    $language = 'ka'; 
    break; 
    case 'nl': 
    $language = 'nl'; 
    break; 
    case 'pt_PT': 
    $language = 'pt_PT'; 
    break; 
    case 'pt_BR': 
    $language = 'pt_BR'; 
    break; 
    case 'ro': 
    $language = 'ro'; 
    break; 
    default: 
    $language = 'pt_BR'; 
    break; 
endswitch; 

require_once("idiomas/{$language}.php"); 

これらの古いコードは言語hrefのアンカーのために非常に働きました。 Like:

<a class="waves-effect" href="?hl=en_GB" name="en">English</a> 
<a class="waves-effect" href="?hl=pt_BR" name="pt_BR">Português Brasileiro</a> 

コードを縮め、節約し、短縮するコードに変更しました。ここでは新しいコードされている:あなたはポルトガル語、英語のままでページに切り替えた場合ので、

$language = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']); 

if (isset($_GET['hl'])) 
{ 
    $lang = $_GET['hl']; 

} 

else 
{ 
    $lang = ''; 
} 

switch ($lang): 
    case $language: 
    $language = $language; 
    break; 
    default: 
    $language = $language; 
    break; 
endswitch; 

require_once("idiomas/{$language}.php"); 

ブラウザ言語の検出のみでは非常によく働いたが、言語のhrefアンカー(HL)は動作しません。

のような類似:

switch ($lang): 
    case "en": 
    $language = "en"; 
    break; 
    case "en_GB": 
    $language = "en_GB"; 
    break; 
    case "pt_BR": 
    $language = "pt_BR"; 
    break; 
    case "pt_PT": 
    $language = "pt_PT"; 
    break; 
endswitch; 

しかし、私はこれらの古いコードを繰り返すために好きではないだろう。私は結露を保ち、同じ新しいコードを短縮したい。

答えて

0

ここでswitch文が何をしているのか分かりませんか? それがうまくいかない理由は、何かのために$ lang変数を使用していないからです。すべての場合に$ languageを自分自身に設定するだけです。

私は、これはあなたがやりたいと思う:

$language = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']); 

if (isset($_GET['hl'])) 
{ 
    $language = $_GET['hl']; 
} 

クエリのparamsは、ユーザーが変更できるように、私はまた、値が期待される何かであることを確認するためにin_array使用をお勧めしたいです。

関連する問題