Created
June 2, 2018 12:38
-
-
Save Jengas/14fdf627e4b76681dfa31df1b3d6729e to your computer and use it in GitHub Desktop.
PHP + XML + COOKIES language system
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
ini_set('display_errors', 1); | |
error_reporting(E_ALL); | |
// Languages used to generate menus and for template translations | |
$languages = [ | |
['id' => 'en', 'title' => 'English', 'icon' => 'US'], | |
['id' => 'es', 'title' => 'ESPAÑOL'], | |
['id' => 'ru', 'title' => 'РУССКИЙ'], | |
['id' => 'cn', 'title' => '中国'], | |
['id' => 'de', 'title' => 'Deutsch (Soon)'], | |
]; | |
// Collect allowed languages | |
$allow_langs = array_map(function ($lang) { | |
return $lang['id']; | |
}, $languages); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php require("language.php"); ?> | |
<!DOCTYPE html> | |
<html lang="ru" class="home-page"> | |
<head> | |
<title>Wassup!</title> | |
</head> | |
<body> | |
<h1><?= trans('exmaple1')?></h1> | |
<h1><?= trans('exmaple2?></h1> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
include_once(__DIR__. '/config.php'); | |
/** | |
* Translate by key | |
* | |
* @param $key | |
* @return string | |
*/ | |
function trans($key) | |
{ | |
global $xml, $language, $allow_langs; | |
$lang = $language; | |
$value = null; | |
// Language fallback | |
if (!in_array($lang, $allow_langs, true)) { | |
$lang = 'en'; | |
} | |
// Get value | |
$value = trim($xml->{$key}->{$lang}); | |
// Fallback to english | |
if ($value === '1' || empty($value) || is_null($value )) { | |
$lang = 'en'; | |
$value = trim($value = $xml->{$key}->{$lang}); | |
} | |
return trim($value); | |
} | |
$browser_lang = strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)); | |
$language = (isset($_COOKIE['language']) ? $_COOKIE['language'] : $browser_lang); | |
if (isset($_GET['language'])) { | |
$language = $_GET['language']; | |
} | |
if (!in_array($language, $allow_langs, true)) { | |
$language = 'en'; //fallback for invalid lang | |
} | |
setcookie('language', $language); | |
$xml = simplexml_load_file( __DIR__. "/language.xml") or die("Pony destroyed language!"); | |
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<lang> | |
<exmaple1> | |
<en>Example 1</en> | |
<ru>Пример 1</ru> | |
<es>Example 1</es> | |
</exmaple1> | |
<exmaple2> | |
<en>Example 2</en> | |
<ru>Пример 2</ru> | |
<es>Example 2</es> | |
</exmaple2> | |
</lang> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment