Come mantenere la lingua selezionata in precedenza (io ho usato array PHP e? Lang =) dopo aver cliccato un link?

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

  •  21-09-2019
  •  | 
  •  

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?

È stato utile?

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top