PHP ile bir web sitesinde dilini değiştirme

5 Cevap php

I'm just looking for some advice. I'm creating a website that offers (at least) 2 languages. The way I'm setting it up is by using XML files for the language, PHP to retrieve the values in the XML nodes. Say you have any XML file, being loaded as follows:

<?php
$lang = "en";
$xmlFile = simplexml_load_file("$lang/main.xml");
?>

Dosya içeriğini mevcut kez, ben sadece çıkış şöyle bir HTML etiketinin içine her düğüm:

<li><?php echo $xmlFile->navigation->home; ?></li>
which in turn is equal to : <li><a href="#">Home</a></li>
as a nav bar link.

Şimdi, dilleri geçiyorum hangi yolu böylece gibi, bir "$ _POST" aracılığıyla, "$ lang" değişkenin değerini değiştirerek tarafından:

if(isset($_POST['es'])){
$lang = "es";
}elseif(isset($_POST['en'])){
$lang = "en";
}

"$ Lang" değişkeninin değeri sıfırlanır ve yeni bir dosya dolayısıyla dilini değiştirerek, hem de yeni bir XML dosyası tüm yeni düğümler yükleme, yüklenir.

I'm just wondering if there is another way to reset the "$lang" variable using something else, other than "$_POST" or "$_GET". I don't want to use query string either. I know I could use JavaScript or jQuery to achieve this, but I'd like to make the site not too dependable on JavaScript.

Ben herhangi bir fikir ya da tavsiye takdir ediyorum.

Teşekkürler

5 Cevap

Ben oturum değişkeni için giderdim.

Sayfalarınızın başında sahip olacak:

 if (!isset($_SESSION['language']))
    $_SESSION['language'] = "en";

Sonra dilini değiştirmek için bazı bağlantılar var olacak

<a href="changelanguage.php?lang=es">Español</a>
<a href="changelanguage.php?lang=fr">Français</a>

Changelanguage.php basitçe gibi bir şeydir

$language = $_GET['lang'];
// DO SOME CHECK HERE TO ENSURE A CORRECT LANGUAGE HAS BEEN PASSED
// OTHERWISE REVERT TO DEFAULT
$_SESSION['language'] = $language;
header("Location:index.php"); // Or wherever you want to redirect

En yaygın yolu url parçası olarak kullanmak ve ne zaman bir sayfa yükler bunu ayıklamak be olacaktır:

http://www.your-site.com/en/somepage

Eğer bir çerçeve kullanıyor musunuz?

Bir dil tanımlayıcı geçmek için en common yolu alt etki alanıdır.

http://en.wikipedia.com/

Her iki alt etki alanları aynı dizinde ve gerçek dile işaret etmelidir kolayca HTTP_HOST elde edilebilir

ve dilini saklamak için çözüm dosyaları olduğu gettext

Eğer $_SERVER["HTTP_ACCEPT_LANGUAGE"] kullanarak düşündünüz mü? Böyle bir şey:

if ($_SERVER["HTTP_ACCEPT_LANGUAGE"]) { 
    $langs = explode(",", $_SERVER["HTTP_ACCEPT_LANGUAGE"]); 
    for ($i = 0; $i < count($langs); $i++) { 
        if ($langs[$i] == "en") { 
            $lang = "en";
            break;
        } 
        elseif($langs[$i] == "es") {
            $lang = "es";
            break;
        }
    } 
}

Tabii ki, bir switch deyimi burada daha iyi biraz uygun olabilir, ve sadece en fazla İngilizce söylemek için daha çok yolu var, ama bu bir şeyi yapmak zorunda kullanıcı olmadan çalışması gerekir. Onlar elle değiştirirseniz, Ben'in cevap başına bir çerez saklayın.

Nasıl bir tanımlama içinde depolanması hakkında?