Как сохранить ранее выбранный язык (я использовал php arrays и ?lang=) после перехода по ссылке?

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

  •  21-09-2019
  •  | 
  •  

Вопрос

У меня есть следующий код:

  <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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top