Files
sls/i18n_setup.php
Bruno21 bfda660a2f Nouvelle gestion des langues
i18n_setup.php remplace localize.php
2024-12-14 11:53:25 +01:00

97 lines
3.2 KiB
PHP

<?php
/**
* Verifies if the given $locale is supported in the project
* @param string $locale
* @return bool
*/
function list_locale_server($dir) {
$lange = array();
$iterator = new DirectoryIterator($dir);
foreach ($iterator as $ff) {
if ($ff->isDot() OR $ff->isFile()) { continue; }
if ($ff->isDir()) {
$d = $ff->getFilename();
if (($d != "nocache") AND (strpos($d, "_"))) {
$e = strtok($d, "_");
$lange[] = $d;
$lange[] = $e;
}
}
}
//print_r($lange);
return $lange;
}
function valid($locale) {
//return in_array($locale, ['en_US', 'en', 'fr_FR', 'fr', 'de_DE', 'de', 'es_ES', 'es']);
global $dir_locales;
$l = list_locale_server($dir_locales);
return in_array($locale, $l);
}
/* ------------------------------------*/
/* Settings */
/* ------------------------------------*/
$dir_locales = __DIR__ . '/Locale';
//setting the source/default locale, for informational purposes
$lang = 'en_US';
/*
if (isset($_GET['lang']) && valid($_GET['lang'])) {
// the locale can be changed through the query-string
$lang = $_GET['lang']; //you should sanitize this!
//setcookie('lang', $lang); //it's stored in a cookie so it can be reused
setcookie('lang', $lang, time() + (86400 * 30), "/"); //it's stored in a cookie so it can be reused
*/
if (isset($_POST['lang']) && valid($_POST['lang'])) {
// the locale can be changed through the query-string
$lang = $_POST['lang']; //you should sanitize this!
//setcookie('lang', $lang); //it's stored in a cookie so it can be reused
setcookie('lang', $lang, time() + (86400 * 30), "/"); //it's stored in a cookie so it can be reused
} elseif (isset($_SESSION['language']) && valid($_SESSION['language'])) {
// if the cookie is present instead, let's just keep it
$lang = $_SESSION['language']; //you should sanitize this!
} elseif (isset($_COOKIE['lang']) && valid($_COOKIE['lang'])) {
// if the cookie is present instead, let's just keep it
$lang = $_COOKIE['lang']; //you should sanitize this!
} elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
// default: look for the languages the browser says the user accepts
$langs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
array_walk($langs, function (&$lang) { $lang = strtr(strtok($lang, ';'), ['-' => '_']); });
foreach ($langs as $browser_lang) {
if (valid($browser_lang)) {
$lang = $browser_lang;
break;
}
}
}
// here we define the global system locale given the found language
putenv("LANG=$lang");
// this might be useful for date functions (LC_TIME) or money formatting (LC_MONETARY), for instance
setlocale(LC_ALL, $lang);
// this will make Gettext look for ../locales/<lang>/LC_MESSAGES/main.mo
bindtextdomain('sentier', __DIR__ . '/Locale/');
// indicates in what encoding the file should be read
bind_textdomain_codeset('sentier', 'UTF-8');
// if your application has additional domains, as cited before, you should bind them here as well
//bindtextdomain('forum', '../locales');
//bind_textdomain_codeset('forum', 'UTF-8');
// here we indicate the default domain the gettext() calls will respond to
textdomain('sentier');
// this would look for the string in forum.mo instead of main.mo
// echo dgettext('forum', 'Welcome back!');
?>