www_root
|
|__ image/
|__ index.php
|__ language.php
|__ template.php
|
|__ en
| |__index.php
|
|__ fr
| |__index.php
|
|__ it
| |__index.php
|
|__ de
|__index.php
<?php // demo/polyglot/index.php
/**
* https://www.experts-exchange.com/articles/8910/A-Polyglot-Web-Site-in-PHP.html
*/
error_reporting(E_ALL);
// THE DEFAULT LANGUAGE
$lang = 'en';
// IF WE REMEMBER A LANGUAGE PREFERENCE
if (isset($_COOKIE["lang"]))
{
switch($_COOKIE["lang"])
{
case 'en' : $lang = 'en';
break;
case 'fr' : $lang = 'fr';
break;
case 'de' : $lang = 'de';
break;
case 'it' : $lang = 'it';
break;
}
}
// SET THE HOME PAGE
$ndx = $lang . DIRECTORY_SEPARATOR;
// PRESERVE OUR GET-ARGUMENTS
$get = NULL;
if (!empty($_GET)) $get = http_build_query($_GET);
$url = $ndx . '?' . $get;
header("Location: $url");
exit;
<?php // demo/polyglot/language.php
/**
* https://www.experts-exchange.com/articles/8910/A-Polyglot-Web-Site-in-PHP.html
*/
error_reporting(E_ALL);
// THE DEFAULT LANGUAGE
$lang = 'en';
// IF WE ARE GIVEN A LANGUAGE PREFERENCE
if (isset($_GET["lang"]))
{
switch(strtolower($_GET["lang"]))
{
case 'en' : $lang = 'en';
break;
case 'fr' : $lang = 'fr';
break;
case 'de' : $lang = 'de';
break;
case 'it' : $lang = 'it';
break;
}
unset($_GET['lang']);
}
// SET THE LANGUAGE FOR A YEAR
setcookie('lang', $lang, time()+365*24*60*60, DIRECTORY_SEPARATOR);
// PRESERVE OUR GET-ARGUMENTS
$get = NULL;
if (!empty($_GET)) $get = '?' . http_build_query($_GET);
// REDIRECT TO THE LANGUAGE VERSION OF THE SITE
$home = $lang . DIRECTORY_SEPARATOR;
header("Location: $home$get");
exit;
<?php // demo/polyglot/template.php
/**
* https://www.experts-exchange.com/articles/8910/A-Polyglot-Web-Site-in-PHP.html
*/
error_reporting(E_ALL);
// OUR LANGUAGES
$languages = array
( 'en' => 'English'
, 'fr' => 'French'
, 'de' => 'Deutsch'
, 'it' => 'Italiano'
)
;
// OUR CHOSEN LANGUAGE IS INJECTED INTO THE TEMPLATE
if (!array_key_exists($lang, $languages))
trigger_error("Language $lang not recognized", E_USER_ERROR);
// CHOOSE OUR LANGUAGE-SPECIFIC DATABASE NAME
$db_name = $lang . '_database';
// CONNECT TO OUR LANGUAGE-SPECIFIC DATABASE
$mysqli = new mysqli($db_host, $db_user, $db_word, $db_name);
/** READ THE DATABASE TO ADD INFORMATION TO OUR LANGUAGE-SPECIFIC WEB PAGE **/
// CREATE THE PAGE TEMPLATE USING HEREDOC NOTATION
$html_1 = <<<TEMPLATE
<!DOCTYPE html>
<html dir="ltr" lang="$lang">
<head>
<meta charset="utf-8" />
</head>
<body>
<h1>$head <img src="../image/flag_$lang.png" /></h1>
<p>
<img src="../image/piglet.png" />
</p>
TEMPLATE;
// PRESERVE OUR GET-ARGUMENTS
$get = NULL;
if (!empty($_GET)) $get = '&' . http_build_query($_GET);
// CREATE OUR FLAG LINKS
$html_2 = $text . '<br/>';
foreach ($languages as $abbr => $language)
{
// CREATE OUR LINKS USING HEREDOC NOTATION
$choices = <<<CHOICES
<a title="$language" href="../language.php?lang=$abbr$get"><img src="../image/flag_$abbr.png" /></a>
CHOICES;
// APPEND EACH FLAG LINK TO THE HTML STRING
$html_2 .= $choices . PHP_EOL;
}
// WRITE THE HTML STRINGS TO THE BROWSER
echo $html_1;
echo $html_2;
// OPTIONAL, FOR TESTING ONLY SHOW THE COOKIE IF IT HAS BEEN SET
if (!empty($_COOKIE))
{
if (isset($_COOKIE["lang"]))
{
echo "<pre>COOKIE: ";
var_dump($_COOKIE["lang"]);
}
}
<?php // /de/index.php DEUTSCH
error_reporting(E_ALL);
// SET LANGUAGE AND TEXT
$lang = 'de';
$head = 'Schweinchen';
$text = 'Sprache wählen';
// LOAD THE TEMPLATING SCRIPT
require_once('../template.php');
<?php // /en/index.php ENGLISH
error_reporting(E_ALL);
// SET LANGUAGE AND TEXT
$lang = 'en';
$head = 'Piglet';
$text = 'Choose Language';
// LOAD THE TEMPLATING SCRIPT
require_once('../template.php');
Have a question about something in this article? You can receive help directly from the article author. Sign up for a free trial to get started.
Comments (2)
Commented:
Commented:
Congratulations; your article has been selected as EE-Approved.
ericpete
Page Editor