I have the following 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;
?>
It works OK, but if I click the about.php
and contact.php
link.
The page returns to the default language: English.
What can I do so that when I click about.php
or contact.php
ends up like this:
about.php?lang=english
contact.php?lang=french
respectively, in other words I want the URL to remember the ?lang=
ending.
What's the best way of doing it?
You'll have to append it to every outgoing link:
<li><a href="about.php<?php echo "?lang=".$GLOBALS['L']; ?>">About Page</a></li>
a nice way of dealing with multi-language sites in general is, if your server supports it, mod_rewrite
to rewrite "virtual" URLs like
www.example.com/en/about.php
and map them internally to
www.example.com/about.php?lang=en
there's a beginner's guide on that here and official documentation here.
I'm no mod_rewrite guru but this works for me:
RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_URI} ^/([a-z][a-z])(/.*)?$
RewriteRule (.*) %2?lang=%1&%{QUERY_STRING}
it maps
www.domain.com/en/about.php
to /about.php?lang=en
www.domain.com/fr/about.php
to /about.php?lang=fr
www.domain.com/es/
to /?lang=es
= usually index.php
It maps any occurrence of a two-letter, lowercase www.example.com/xy
, so you shouldn't have any directories with two letters on your root level to work with this.