Como manter o idioma selecionado anteriormente (usei matrizes PHP e? Lang =) depois de clicar em um link?

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

  •  21-09-2019
  •  | 
  •  

Pergunta

Eu tenho o seguinte 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 bem, mas se eu clicar no about.php e contact.php link. A página retorna ao idioma padrão: inglês. O que posso fazer para que eu clique about.php ou contact.php acaba assim:

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

respectivamente, em outras palavras, quero que o URL lembre -se do ?lang= final. Qual é a melhor maneira de fazer isso?

Foi útil?

Solução

Você terá que anexá -lo a todos os links de saída:

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

Uma boa maneira de lidar com sites de vários idiomas em geral é, se o seu servidor suportar, mod_rewrite Para reescrever URLs "virtuais" como

www.example.com/en/about.php

e mapeá -los internamente para

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

Há um guia para iniciantes sobre isso aqui e documentação oficial aqui.

Eu não sou mod_rewrite guru, mas isso funciona para mim:

 RewriteEngine on
 Options +FollowSymlinks

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

ele mapeia

  • www.domain.com/en/about.php para /about.php?lang=en

  • www.domain.com/fr/about.php para /about.php?lang=fr

  • www.domain.com/es/ para /?lang=es = geralmente index.php

Ele mapeia qualquer ocorrência de uma letra de duas e minúsculas www.example.com/xy, então você não deve ter nenhum diretório com duas letras no seu nível de raiz para trabalhar com isso.

Outras dicas

Você vai querer aprender sobre o armazenamento de informações em sessões.

http://learnitcreencasts.net/2009/07/18/beginners/beginners-guide-php-sessions/

Você pode querer olhar para Sessões e armazene as opções persistentes lá. Ele tem a vantagem de permitir que as pessoas copiassem links para outras pessoas sem forçar suas configurações sobre elas, se você deseja isso.

Você poderia usar o output_add_rewrite_var Para adicionar esse argumento aos URLs. Basta ligar para o seguinte antes de gerar seu conteúdo:

output_add_rewrite_var('lang', $language);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top