Wie die vorher ausgewählte Sprache zu erhalten (Ich habe PHP Arrays und? Lang =) nach Klicken auf einen Link?

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

  •  21-09-2019
  •  | 
  •  

Frage

Ich habe den folgenden Code:

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

Es funktioniert OK, aber wenn ich den about.php und contact.php Link klicken. Die Seite kehrt zur Standardsprache: Englisch. Was kann ich tun, damit, wenn ich about.php oder contact.php endet wie folgt klicken:

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

bzw. mit anderen Worten möchte ich die URL der ?lang= Endung erinnern. Was ist der beste Weg, es zu tun?

War es hilfreich?

Lösung

Sie werden es zu jedem abgehenden Link anhängen haben:

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

eine nette Art und Weise des Umgangs mit mehrsprachigen Websites in der Regel, wenn Ihr Server unterstützt, mod_rewrite „virtuelle“ URLs zu umschreiben wie

www.example.com/en/about.php

und ordnet sie intern

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

Es ist ein Leitfaden für Anfänger an, dass hier und offizielle Dokumentation hier .

Ich bin kein mod_rewrite Guru, aber das funktioniert für mich:

 RewriteEngine on
 Options +FollowSymlinks

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

es Karten

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

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

  • www.domain.com/es/ zu /?lang=es = in der Regel index.php

Es ordnet alle Vorkommen einen aus zwei Buchstaben, Klein www.example.com/xy, so dass Sie keine Verzeichnisse mit zwei Buchstaben auf dem Root-Ebene an der Arbeit mit diesem.

haben sollten

Andere Tipps

Sie werden über das Speichern von Informationen in Sitzungen lernen wollen.

http://learnitscreencasts.net/2009/ 18.07 / Anfänger / Einsteiger-Guide-php-Sessions /

Sie können schauen wollen Sitzungen und speichern Sie die persistent Optionen gibt. Es hat den Vorteil, dass die Menschen Links zu anderen kopieren, ohne ihre Einstellungen auf sie zu zwingen, wenn Sie so so wünschen.

könnten Sie verwenden den output_add_rewrite_var dieses Argument auf die URLs hinzuzufügen. Rufen Sie einfach die folgende, bevor Sie Ausgang Ihr Inhalt:

output_add_rewrite_var('lang', $language);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top