1

こんにちは、タイトルにあるように、ボタンを使用してサイトの言語を変更したいのですが、これは、このコードの変数を変更するだけで、URL を変更せずにmywebsite.com(実行せずに) :mywebsite.com?lang=esPHP

$xlang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);


if($xlang == "es")
{
$g_lang = "es";
}
else if ($xlang == "en")
{
$g_lang = "en";
}
else
{
$g_lang = "en";
}

そして、このボタンを使用して

<a class="langx" href="#"></a>

URL を変更せずに言語を変更する

それを行う方法はありますか?もしそうなら、どのように?

前もって感謝します。

4

3 に答える 3

3

ボタンがクリックされたときに必要な値をサーバーに送信する必要があるため、リンクには のような言語文字列が必要?lang=esです。

次に、サーバー側でそれを処理し、現在の訪問者の言語をデータベース (ログインしているユーザーの場合)、セッション、または Cookie などに保存できます。

次に、headerリダイレクトを使用して、言語文字列なしでユーザーをサイトにリダイレクトし、上部で db-entry / session / cookie が設定されているかどうかを確認して、その言語を使用できます。

于 2013-06-15T00:49:25.820 に答える
2

リクエストを動的に処理できますが、別のメソッドを提供する必要があります。その理由は次のとおりです。Google によると、SEOに関心がある場合は、ページの言語が明確であることを確認してください。その場でハットトリックを実行し、言語設定で言語を切り替えることができますが、検索エンジンからその言語でトラフィックを得ることが期待される場合は、常に他の言語であるページへのリンクを提供する必要もあります.

このページが言語を動的に検出する場合、クロール時に Google が認識した言語がページの言語になります。

http://www.example.com/

サイトに別の言語のクエリ文字列フラグが含まれている場合、サイトのどこかに第 2 言語へのリンクがあれば、そのサイトは両方の言語でクロールされる可能性があります。これらは、スペイン語のページが存在する場所を Google に示すための良い例です (別のドメインが最適なオプションです)。

http://es.example.com - best for SEO

http://www.example.com/?lang=es

http://www.example.com/es/

PHP コードでは、ブラウザの優先言語の最初の 2 桁のコードのみをキャッチしています。実際に複数の言語で本を読む人もいます (基本的にはアメリカ人以外の人です)。彼らは他の言語を好みの言語で持っているかもしれません。フランスの誰かがfr好みの言語として持っているかもしれませんが、彼らは英語 ( en) も理解できるかもしれません。

fr,en-US;q=0.8,en;q=0.6

またはIEでこれ:

fr-FR,en-US;q=0.5

このコードは、言語のフラグが設定されているかどうかを確認し$_GET、自動翻訳をオーバーライドします。私はこのコードを見つけ、それが使用されているサイトがほとんどの人が複数の言語を話すヨーロッパのサイトであるため、私の目的に合わせて修正しました。このコードについては、ここで変更したので、優先言語がスペイン語でない場合、デフォルトで英語になります。lang.phpこれは、すべてのページに含まれるようなファイルになります。

<?php
$langs = array();
if (!empty($_GET['lang'])){
    $tempLang = $_GET['lang'];
        //Setup the switch for all of the possible languages.
    switch($tempLang){
        case 'es':
        $pref='es';
        break;
        default:
        //english
        $pref='en'; 
    }

} elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    // break up string into pieces (languages and q factors)
    preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse);

    if (count($lang_parse[1])) {
        // create a list like "en" => 0.8

         $langs = array_combine($lang_parse[1], $lang_parse[4]);

        // set default to 1 for any without q factor
        foreach ($langs as $lang => $val) {
            if ($val === '') $val = 1;
        $lParse = strtolower(preg_replace('!\-.*$!','',$lang));
            if(!isset($newLangs[$lParse])){
                $newLangs[$lParse] = $val;
            }

        }

        // sort list based on value 
        arsort($newLangs, SORT_NUMERIC);
    }

//Set the preferred languages for the website (available translations)
$preferred = array('en','es');

//Check for overlap keeping the preference order
$intersect = array_values(array_intersect(array_keys($newLangs), $preferred));

//print_r($newLangs);

if(isset($intersect[0])){
    //Set the first preference
    $pref = $intersect[0];  
    if(preg_match('!^es!',$pref)){
        $pref='es';
    }   
} else {
    //default to english
    $pref = 'en';   
}


} else {
    //default to english
    $pref = 'en';   
}

?>

含まれているページlang.phpで、変数をチェックし$prefて、言語の適切な翻訳を表示する必要があります。

Javascript

この同じコードを使用して Javascript でリダイレクトを実行し、ページを別の言語でロードすることができますが、検索エンジンは通常、エクスプロイトについて Javascript のみを調べ、Javascript のリンクをたどりません。Google ウェブマスターのガイドラインによると:

Lynxなどのテキスト ブラウザを使用してサイトを調べます。ほとんどの検索エンジン スパイダーは、Lynx と同じようにサイトを認識します。JavaScript、Cookie、セッション ID、フレーム、DHTML、Flash などの高度な機能により、テキスト ブラウザでサイト全体を表示できない場合は、検索エンジン スパイダーがサイトをクロールできない可能性があります。

AJAX を使用してクリックするだけで変更できますが、AJAX がリッスンする URL にはパラメーターを渡す必要があり、これらは通常$_GET変数を介して渡されます。

IPルックアップ

一部の人々が試みたもう 1 つの方法は、IP アドレスを確認し、場所を逆引きして出身国を確認し、国語を選択することです。これに関する問題は次のとおりです。

  1. 人々は旅行します
  2. 一部の IP アドレスは、ユーザーがブラウザを使用している国ではなく、他の国の所有者 (企業ブロックを考えてください) に登録されています。
  3. 一部の IP アドレス リストは非常に不正確です。

クッキー

すべてのユーザーが Cookie を受け入れるわけではなく、企業のファイアウォールによっては Cookie を削除することさえあります。

于 2013-06-15T03:14:11.340 に答える
0

正確に何をする必要があるのか​​ わかりませんが、URLに何も追加せずにボタンをクリックしたときに変更を適用するためにページを更新したいと思います! 私が正しければ、次のように Jquery location.reload()関数を使用できます。

// don't forget to add link to jquery file for example : <script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">

  $(document).ready(function(){
   $('.langx').click(function() {

          location.reload();

   });
  });

</script>

個人的には、gettext ライブラリを使用してウェブサイトを翻訳します。言語のリストを作成し、ajax 呼び出しを使用して、ユーザーが言語として選択している言語を送信します。この選択の翻訳が利用可能な場合は、OK を返し、最後に js でページをリロードします。gettext libについて学ぶか、ここでドキュメントをチェックしてください

これがあなたの望むものではない場合は、質問を明確にするために詳細を追加してください

于 2013-06-15T01:13:34.873 に答える