Comment maintenir la langue sélectionnée précédemment (je tableaux php et? Lang =) après avoir cliqué sur un lien?

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

  •  21-09-2019
  •  | 
  •  

Question

Je le code suivant:

  <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;
?>

Il fonctionne bien, mais si je clique sur le lien about.php et contact.php. La page revient à la langue par défaut: anglais. Que puis-je faire pour que lorsque je clique sur about.php ou se termine contact.php comme ceci:

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

respectivement, en d'autres termes, je veux l'URL de se rappeler la fin de ?lang=. Quelle est la meilleure façon de le faire?

Était-ce utile?

La solution

Vous devrez ajouter à chaque lien sortant:

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

une belle façon de traiter avec des sites en plusieurs langues en général est, si votre serveur prend en charge, mod_rewrite de réécrire les URL « virtuels » comme

www.example.com/en/about.php

et les associer en interne à

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

il y a un guide du débutant sur cette ici et la documentation officielle ici .

Je ne suis pas gourou mod_rewrite mais cela fonctionne pour moi:

 RewriteEngine on
 Options +FollowSymlinks

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

cartes

  • 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 = généralement index.php

cartes toute occurrence de deux lettres, www.example.com/xy minuscules, donc vous ne devriez pas avoir de répertoires avec deux lettres sur votre racine pour travailler avec cela.

Autres conseils

Vous voulez en savoir plus sur le stockage d'informations dans les sessions.

http://learnitscreencasts.net/2009/ 07/18 / débutants / débutants-guide-php-sessions /

Vous pouvez regarder dans sessions et stocker la persistance Options. Il a l'avantage de permettre aux gens de copier des liens vers d'autres sans forcer leurs paramètres sur eux, si vous le désirez tel.

Vous pouvez utiliser le output_add_rewrite_var pour ajouter cet argument aux URL. Il suffit d'appeler ce qui suit avant la sortie de votre contenu:

output_add_rewrite_var('lang', $language);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top