¿Cómo mantener el idioma seleccionado previamente (utilicé matrices php y? Lang =) después de hacer clic en un enlace?

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

  •  21-09-2019
  •  | 
  •  

Pregunta

Tengo el siguiente código:

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

Funciona bien, pero si hago clic en el enlace about.php y contact.php. La página vuelve al idioma por defecto: Inglés. ¿Qué puedo hacer para que cuando hago clic extremos about.php o contact.php de esta manera:

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

respectivamente, en otras palabras, quiero que el URL para recordar el ?lang= fin. ¿Cuál es la mejor manera de hacerlo?

¿Fue útil?

Solución

tendrá que añadirlo a cada enlace de salida:

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

una buena manera de hacer frente a los sitios multi-idioma en que es general, si se admite el servidor, mod_rewrite volver a escribir las direcciones URL "virtuales" como

www.example.com/en/about.php

y mapa internamente a

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

hay una guía para principiantes en ese aquí documentación oficial aquí .

No soy un gurú mod_rewrite, pero esto funciona para mí:

 RewriteEngine on
 Options +FollowSymlinks

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

mapea

  • 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 = generalmente index.php

Al trazar cualquier ocurrencia de una de dos letras, www.example.com/xy minúsculas, por lo que no debería tener ningún directorio con dos letras en el nivel de la raíz a trabajar con esto.

Otros consejos

Es posible que desee ver en sesiones y almacenar la persistente opciones allí. Tiene la ventaja de permitir que la gente copie enlaces a otros sin forzar sus valores sobre ellos, si así lo desea así.

Se podría utilizar el output_add_rewrite_var añadir que el argumento de las direcciones URL. Sólo tiene que llamar al siguiente antes de dar salida a los contenidos:

output_add_rewrite_var('lang', $language);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top