diff options
author | Michael Tänzer <neo@nhng.de> | 2011-10-16 04:53:08 +0200 |
---|---|---|
committer | Michael Tänzer <neo@nhng.de> | 2011-10-16 04:53:08 +0200 |
commit | d581655fb544070921a38ac92efb30422f7560d8 (patch) | |
tree | 7dad64fc003b1db5af564672982b7209abbe9d96 /includes/general.php | |
parent | 5d77aa2cc71fdf038c6ea67eb282e7d8edd1fa4e (diff) | |
download | cacert-devel-d581655fb544070921a38ac92efb30422f7560d8.tar.gz cacert-devel-d581655fb544070921a38ac92efb30422f7560d8.tar.xz cacert-devel-d581655fb544070921a38ac92efb30422f7560d8.zip |
bug 985: Factor out language handling into a separate class, also fix
language handling for Internet Explorer.
TODO:
- replace all uses of $_SESSION['_config']['language'] and
$_SESSION['_config']['translations'] with the appropriate calls to the
new class
- adjust character handling in the PDF generation routines
- probably more
Signed-off-by: Michael Tänzer <neo@nhng.de>
Diffstat (limited to 'includes/general.php')
-rw-r--r-- | includes/general.php | 173 |
1 files changed, 2 insertions, 171 deletions
diff --git a/includes/general.php b/includes/general.php index 5c1b3f2..d608d2d 100644 --- a/includes/general.php +++ b/includes/general.php @@ -39,6 +39,7 @@ require_once($_SESSION['_config']['filepath']."/includes/mysql.php"); require_once($_SESSION['_config']['filepath'].'/includes/lib/account.php'); + require_once($_SESSION['_config']['filepath'].'/includes/lib/l10n.php'); if(array_key_exists('HTTP_HOST',$_SERVER) && $_SERVER['HTTP_HOST'] != $_SESSION['_config']['normalhostname'] && @@ -70,177 +71,7 @@ } } - - /////////////////////// - // Language Handling // - /////////////////////// - - $_SESSION['_config']['translations'] = array( - "ar" => "العربية", - "bg" => "Български", - "cs" => "Čeština", - "da" => "Dansk", - "de" => "Deutsch", - "el" => "Ελληνικά", - "en" => "English", - "es" => "Español", - "fi" => "Suomi", - "fr" => "Français", - "hu" => "Magyar", - "it" => "Italiano", - "ja" => "日本語", - "lv" => "Latviešu", - "nl" => "Nederlands", - "pl" => "Polski", - "pt" => "Português", - "pt-br" => "Português Brasileiro", - "ru" => "Русский", - "sv" => "Svenska", - "tr" => "Türkçe", - "zh-cn" => "中文(简体)", - "zh-tw" => "中文(臺灣)"); - - - - if((array_key_exists("lang",$_REQUEST) && trim($_REQUEST["lang"]) != "") || - !(array_key_exists('language',$_SESSION['_config']) && - $_SESSION['_config']['language'] != "") ) - { - $languages=array(); - - // parse Accept-Language header - $bits = explode(",", strtolower(str_replace(" ", "", array_key_exists('HTTP_ACCEPT_LANGUAGE',$_SERVER)?$_SERVER['HTTP_ACCEPT_LANGUAGE']:""))); - foreach($bits as $lang) - { - $b = explode(";", $lang); - if(count($b)>1 && substr($b[1], 0, 2) == "q=") - $c = floatval(substr($b[1], 2)); - else - $c = 1; - - if ($c != 0) - { - $languages["$c"] = trim($b[0]); - } - } - - // check if there is an explicit language given as parameter - if(array_key_exists("lang",$_REQUEST) && trim($_REQUEST["lang"]) != "") - { - // higher priority as those values in the header - $languages["2.0"] = strtolower(trim($_REQUEST["lang"])); - } - - // fallback, qvalues may only have three digits after the . - $languages["0.0005"] = "en"; - - // remove any non-conforming values (that's why we don't need to - // mysql_real_escape() or escapeshellarg() but take care of the *) - // spec: ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" ) - function is_language_range($candidate) - { - return preg_match('/^(?:[a-zA-Z]{1,8}(?:-[a-zA-Z]{1,8})*|\*)$/', - $candidate) === 1; - } - $languages = array_filter($languages, "is_language_range"); - - krsort($languages, SORT_NUMERIC); - - $all_translations = array( - "ar" => "ar_JO", - "bg" => "bg_BG", - "cs" => "cs_CZ", - "da" => "da_DK", - "de" => "de_DE", - "el" => "el_GR", - "en" => "en_US", - "es" => "es_ES", - "fa" => "fa_IR", - "fi" => "fi_FI", - "fr" => "fr_FR", - "he" => "he_IL", - "hr" => "hr_HR", - "hu" => "hu_HU", - "id" => "id_ID", - "is" => "is_IS", - "it" => "it_IT", - "ja" => "ja_JP", - "ka" => "ka_GE", - "ko" => "ko_KR", - "lv" => "lv_LV", - "nb" => "nb_NO", - "nl" => "nl_NL", - "pl" => "pl_PL", - "pt" => "pt_PT", - "pt_BR" => "pt_BR", - "ro" => "ro_RO", - "ru" => "ru_RU", - "sl" => "sl_SI", - "sv" => "sv_SE", - "th" => "th_TH", - "tr" => "tr_TR", - "uk" => "uk_UA", - "zh_CN" => "zh_CN", - "zh_TW" => "zh_TW", - ); - - foreach($languages as $qvalue => $lang) - { - $lang = strtr($lang, '-', '_'); - $lang_length = strlen($lang); - $chosen_locale = ""; - $chosen_translation = ""; - foreach ($all_translations as $translation => $locale) - { - $translation_lower = strtolower($translation); - if ($translation_lower === $lang || - substr($translation_lower, 0, $lang_length + 1) === $lang.'_') - { - $chosen_translation = $translation; - $chosen_locale = $locale; - break; - } - } - if ($chosen_locale !== "") - { - if(file_exists($_SESSION['_config']['filepath']."/locale/$chosen_translation/LC_MESSAGES/messages.mo")) - { - $_SESSION['_config']['language'] = $chosen_locale; - break; - } - } - } - } - if(!array_key_exists('_config',$_SESSION) || - !array_key_exists('language',$_SESSION['_config']) || - $_SESSION['_config']['language'] == "" ) - { - $_SESSION['_config']['language'] = "en_US"; - trigger_error('$_SESSION[\'_config\'][\'language\'] was not set after '. - 'the translation search', E_USER_WARNING); - } - - $_SESSION['_config']['recode'] = "html..latin-1"; - if($_SESSION['_config']['language'] === "zh_CN" || - $_SESSION['_config']['language'] === "zh_TW") - { - $_SESSION['_config']['recode'] = "html..gb2312"; - } else if($_SESSION['_config']['language'] == "pl_PL" || - $_SESSION['_config']['language'] == "hu_HU") { - $_SESSION['_config']['recode'] = "html..ISO-8859-2"; - } else if($_SESSION['_config']['language'] == "ja_JP") { - $_SESSION['_config']['recode'] = "html..SHIFT-JIS"; - } else if($_SESSION['_config']['language'] == "ru_RU") { - $_SESSION['_config']['recode'] = "html..ISO-8859-5"; - } else if($_SESSION['_config']['language'] == "lt_LT") { - $_SESSION['_config']['recode'] = "html..ISO-8859-13"; - } - - putenv("LANG=".$_SESSION['_config']['language']); - setlocale(LC_ALL, $_SESSION['_config']['language']); - $domain = 'messages'; - bindtextdomain($domain, $_SESSION['_config']['filepath']."/locale"); - textdomain($domain); + L10n::detect_language(); if(array_key_exists('profile',$_SESSION) && is_array($_SESSION['profile']) && array_key_exists('id',$_SESSION['profile']) && $_SESSION['profile']['id'] > 0) { |