99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
| <?php
 | |
| 
 | |
| $lang_translation = array(# If you comment lang here, it won't be displayed. 
 | |
|     "fr_FR" => "Français",
 | |
|     "en_US" => "English",
 | |
| #			"es_ES" => "Español",
 | |
| #			"it_IT" => "Italiano",
 | |
| #			"de_DE" => "Deutsch",
 | |
| #			"pt_BR" => "Portuguese",
 | |
|     "nl_NL" => "Dutch",
 | |
| );
 | |
| 
 | |
| global $arr_lang_translation;
 | |
| $arr_lang_translation = $lang_translation; // not pretty but I don't want side effect right now
 | |
| 
 | |
| function update_locale($langpath) {
 | |
|     global $arr_lang_translation;
 | |
|     $locales = array();
 | |
|     $file = file("/etc/locale.gen", FILE_SKIP_EMPTY_LINES);
 | |
|     if (!is_array($file)) {
 | |
|         return $locales;
 | |
|     }
 | |
|     foreach ($file as $v) {
 | |
|         if ((preg_match("/^([a-z][a-z]_[A-Z][A-Z])/", trim($v), $mat) && file_exists($langpath . '/' . $mat[1]))) {
 | |
|             if (!array_key_exists($mat[1], $arr_lang_translation)) {
 | |
|                 continue;
 | |
|             }
 | |
|             $locales[$mat[1]] = $mat[1];
 | |
|         }
 | |
|     }
 | |
|     if (!count($locales)) {
 | |
|         $locales = array("en_US" => "en_US");
 | |
|     }
 | |
|     return $locales;
 | |
| }
 | |
| 
 | |
| // setlang is on the link at the login page
 | |
| if (isset($_REQUEST["setlang"])) {
 | |
|     $lang = $_REQUEST["setlang"];
 | |
|     $setlang = $_REQUEST["setlang"];
 | |
| } elseif (isset($_COOKIE['lang'])) {
 | |
|     $lang = $_COOKIE['lang'];
 | |
| }
 | |
| 
 | |
| $langpath = bindtextdomain("alternc", ALTERNC_LOCALES);
 | |
| 
 | |
| // Create or update a locale.php file if it is outdated.
 | |
| $locales = update_locale($langpath);
 | |
| 
 | |
| // Default to en_US : 
 | |
| if (!isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) {
 | |
|     $_SERVER["HTTP_ACCEPT_LANGUAGE"] = "en_US";
 | |
| }
 | |
| 
 | |
| if (!(isset($lang))) {  // Use the browser first preferred language
 | |
|     $lang = strtolower(substr(trim($_SERVER["HTTP_ACCEPT_LANGUAGE"]), 0, 5));
 | |
| }
 | |
| 
 | |
| 
 | |
| if (!isset($locales[$lang])) { // Requested language not found in locales
 | |
|     // treat special cases such as en_AU or fr_BF : use the language only, not the country.
 | |
|     $ll = substr($lang, 0, 2);
 | |
|     foreach ($locales as $l) {
 | |
|         if (substr($l, 0, 2) == $ll) {
 | |
|             $lang = $l;
 | |
|             break;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (!isset($locales[$lang])) {
 | |
|     list($lang) = each($locales);
 | |
| }
 | |
| if (isset($setlang) && isset($lang)) {
 | |
|     setcookie("lang", $lang);
 | |
| }
 | |
| 
 | |
| // User chose a non existent language, select the first available one 
 | |
| if ($lang == NULL) {
 | |
|     $lang = "en_US";
 | |
| }
 | |
| 
 | |
| /* Language ok, set the locale environment */
 | |
| putenv("LC_MESSAGES=" . $lang);
 | |
| putenv("LANG=" . $lang);
 | |
| putenv("LANGUAGE=" . $lang);
 | |
| // this locale MUST be selected in "dpkg-reconfigure locales"
 | |
| setlocale(LC_ALL, $lang);
 | |
| textdomain("alternc");
 | |
| 
 | |
| $empty = "";
 | |
| if (_($empty) && preg_match("#charset=([A-Za-z0-9\.-]*)#", _($empty), $mat)) {
 | |
|     $charset = $mat[1];
 | |
| }
 | |
| if (!isset($charset) || !$charset) {
 | |
|     $charset = "UTF-8";
 | |
| }
 | |
| bind_textdomain_codeset("alternc", "$charset");
 |