Как сохранить ранее выбранный язык (я использовал php arrays и ?lang=) после перехода по ссылке?
Вопрос
У меня есть следующий код:
<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;
?>
Это работает нормально, но если я нажму на about.php
и contact.php
Ссылка.Страница возвращается к языку по умолчанию:Английский.Что я могу сделать, чтобы при нажатии about.php
или contact.php
заканчивается вот так:
about.php?lang=english
contact.php?lang=french
соответственно, другими словами, я хочу, чтобы URL-адрес запоминал ?lang=
окончание.Каков наилучший способ сделать это?
Решение
Вам придется добавлять его к каждой исходящей ссылке:
<li><a href="about.php<?php echo "?lang=".$GLOBALS['L']; ?>">About Page</a></li>
хороший способ работы с многоязычными сайтами в целом - это, если ваш сервер поддерживает это, mod_rewrite
чтобы переписать "виртуальные" URL-адреса, такие как
www.example.com/en/about.php
и сопоставьте их внутренне с
www.example.com/about.php?lang=en
на этот счет есть руководство для начинающих здесь и официальная документация здесь.
Я не гуру mod_rewrite, но у меня это работает:
RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_URI} ^/([a-z][a-z])(/.*)?$
RewriteRule (.*) %2?lang=%1&%{QUERY_STRING}
это отображает
www.domain.com/en/about.php
Для/about.php?lang=en
www.domain.com/fr/about.php
Для/about.php?lang=fr
www.domain.com/es/
Для/?lang=es
= обычно index.php
Он отображает любое вхождение двухбуквенной строчной буквы www.example.com/xy
, поэтому у вас не должно быть никаких каталогов с двумя буквами на вашем корневом уровне, чтобы работать с этим.
Другие советы
Вы захотите узнать о хранении информации в сеансах.
http://learnitscreencasts.net/2009/07/18/beginners/beginners-guide-php-sessions/
Возможно, вы захотите заглянуть в сеансы и сохраните там постоянные параметры.Преимущество этого в том, что люди могут копировать ссылки на других, не навязывая им свои настройки, если вы того пожелаете.
Вы могли бы использовать output_add_rewrite_var
чтобы добавить этот аргумент к URL-адресам.Просто вызовите следующее, прежде чем выводить свое содержимое:
output_add_rewrite_var('lang', $language);