Come mantenere la lingua selezionata in precedenza (io ho usato array PHP e? Lang =) dopo aver cliccato un link?
Domanda
Ho il seguente codice:
<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;
?>
Funziona bene, ma se fare clic sul link about.php
e contact.php
.
La pagina torna alla lingua predefinita: inglese.
Che cosa posso fare in modo che quando si fa clic about.php
o contact.php
finisce in questo modo:
about.php?lang=english
contact.php?lang=french
, rispettivamente, in altre parole, voglio l'URL per ricordare il finale ?lang=
.
Qual è il modo migliore di farlo?
Soluzione
Dovrai aggiungerlo ad ogni link in uscita:
<li><a href="about.php<?php echo "?lang=".$GLOBALS['L']; ?>">About Page</a></li>
un bel modo di trattare con i siti multi-lingua in generale, se il vostro server supporta, mod_rewrite
di riscrivere gli URL "virtuali" come
www.example.com/en/about.php
e mappare internamente a
www.example.com/about.php?lang=en
c'è una guida per principianti su quel qui e documentazione ufficiale qui .
Non sono un guru mod_rewrite, ma questo funziona per me:
RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_URI} ^/([a-z][a-z])(/.*)?$
RewriteRule (.*) %2?lang=%1&%{QUERY_STRING}
esso mappa
-
www.domain.com/en/about.php
a/about.php?lang=en
-
www.domain.com/fr/about.php
a/about.php?lang=fr
-
www.domain.com/es/
a/?lang=es
= solito index.php
E 'mappe qualsiasi occorrenza di un due lettere, www.example.com/xy
minuscola, quindi non dovreste avere le directory con due lettere sul livello principale per lavorare con questo.
Altri suggerimenti
Si vuole conoscere la memorizzazione delle informazioni in sessioni.
http://learnitscreencasts.net/2009/ 18/07 / principianti / principianti-guide-php-sessions /
Si potrebbe voler guardare in sessioni e memorizzare il persistente opzioni di là. Ha il vantaggio di permettere alle persone di copiare link ad altri senza forzare le loro impostazioni su di loro, se lo desiderano ad esempio.
È possibile utilizzare il output_add_rewrite_var
aggiungere che l'argomento agli URL. Basta chiamare il seguente prima di riversare il contenuto:
output_add_rewrite_var('lang', $language);