リンクをクリックした後、以前に選択した言語 (php 配列と ?lang= を使用しました) を維持するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2301850

  •  21-09-2019
  •  | 
  •  

質問

次のコードがあります。

  <html>
        <head>
            <title><?php echo $GLOBALS['L']['title']; ?></title>
        </head>
        <body>
            <ul id="language-selection">
                <li><a href="index.php?lang=english">English</a></li>
                <li><a href="index.php?lang=french">French</a></li>
            </ul>
            <h1><?php echo $GLOBALS['L']['h1']; ?></h1>
            <p><?php echo $GLOBALS['L']['p1']; ?></p>
            <ul id="language-selection">
                <li><a href="about.php">About Page</a></li>
                <li><a href="contact.php">Contact Page</a></li>
            </ul>
        </body>
    </html>

set_locale.php:

<?php
/*
 * File: set_locale.php
 */

// Get the language from the query string, or set a default.
($language = @$_GET['lang']) or $language = 'english';

// Set up a list of possible values, and make sure the
// selected language is valid.
$allowed_locales = array('english', 'french');
if(!in_array($language, $allowed_locales)) 
    $language = 'english'; // Set default if it is invalid.


// Inlclude the selected language
include "locale/$language.php";

// Make it global, so it is accessible everywhere in the code.
$GLOBALS['L'] = $locale;
?>

正常に動作しますが、 about.php そして contact.php リンク。ページはデフォルトの言語に戻ります。英語。クリックしたときにそうなるようにするにはどうすればよいですか about.php または contact.php 次のようになります:

about.php?lang=english
contact.php?lang=french

それぞれ、言い換えれば、URL に ?lang= エンディング。最善の方法は何でしょうか?

役に立ちましたか?

解決

すべての発信リンクにこれを追加する必要があります。

 <li><a href="about.php<?php echo "?lang=".$GLOBALS['L']; ?>">About Page</a></li>

一般に多言語サイトを扱う良い方法は、サーバーが多言語サイトをサポートしている場合、次のようにすることです。 mod_rewrite 次のような「仮想」URL を書き換えます

www.example.com/en/about.php

そしてそれらを内部的にマッピングします

www.example.com/about.php?lang=en

それについては初心者向けのガイドがあります ここ そして公式ドキュメント ここ.

私は mod_rewrite の専門家ではありませんが、これは私にとってはうまくいきます:

 RewriteEngine on
 Options +FollowSymlinks

 RewriteCond %{REQUEST_URI} ^/([a-z][a-z])(/.*)?$      
 RewriteRule (.*) %2?lang=%1&%{QUERY_STRING}

それはマッピングします

  • www.domain.com/en/about.php/about.php?lang=en

  • www.domain.com/fr/about.php/about.php?lang=fr

  • www.domain.com/es//?lang=es = 通常はindex.php

2 文字の小文字の出現をマッピングします。 www.example.com/xy, したがって、これを操作するには、ルート レベルに 2 文字のディレクトリを置くべきではありません。

他のヒント

あなたはセッションで情報を記憶について学ぶことになるでしょう。

http://learnitscreencasts.net/2009/ 7月18日/初心者/初心者ガイド-PHP-セッション/

あなたはセッションのに見てみたいと永続的に保存するかもしれませんそこにオプション。それはあなたがそうな望むならば、人々は、彼らに自分の設定を強制することなく他の人へのリンクをコピーすることができるという利点を持っています。

あなたは、URLにその引数を追加するために output_add_rewrite_var して使用することができます。ちょうどあなたの出力あなたの内容の前に次のことを呼び出します:

output_add_rewrite_var('lang', $language);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top