Como manter o idioma selecionado anteriormente (usei matrizes PHP e? Lang =) depois de clicar em um link?
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?
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);