0

私は同じcakephpアプリケーションを指す2つのドメインを持っています。Cakephp 2.0動的多言語ウェブサイト(ベストプラクティスの問題)

私はcore.phpの上でドメインを読み、条件に応じて、私はこれはこれはセッションを使用しないためのベストプラクティスであるかどうかわからないんだけど、表示言語

 if(strstr($_SERVER['SERVER_NAME'],'por')>-1){ 
      Configure::write('Config.language', 'por');  
     }else{ 
      Configure::write('Config.language', 'spa'); 
     } 

を設定します。さらに、どのようにこれが高い並行性でうまくいくかわからない、私はいくつかのユーザーが言語のちらつきを経験するかもしれないと推測している。

答えて

1

ウェブサイトの言語がサーバー名に依存する場合は、悪い習慣ではないと思います。

Configureは、PHPのように各HTTP要求ごとにインスタンス化されるシングルトンクラスです。 TomcatやASP.Netなどの一部のアプリケーションサーバーとは異なり、Webサイト上のすべてのユーザーに対して「アプリケーション」は構成されず、現在の要求に対してのみ構成されます。したがって、ユーザーは言語のちらつきを経験しません。

これは私がこのテストをcore.phpに入れないと言っていましたが、この種のものを意図しているのでbootstrap.phpに入れました。

2

これは私がやる方法です。

Configure::write('Config.language', 'eng'); 
Configure::write('Config.supported_languages', array(
    'en-US' => 'eng', 
    'en' => 'eng', 
    'es-ES' => 'esp', 
    'es' => 'esp', 
)); 

$supported_languages = Configure::read('Config.supported_languages'); 
$accepted_languages = split(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); 
foreach ($accepted_languages as $language) { 
    $language_data = split(';', $language); 
    if (in_array($language_data[0], array_keys($supported_languages))) { 
     Configure::write('Config.language', $supported_languages[$language_data[0]]); 
     break; 
    } 
} 

これはデフォルトで言語を英語に設定します(またはデフォルトとして設定する言語)。これにより、ユーザーのブラウザに基づいて言語を変更することができます。

関連する問題