summaryrefslogtreecommitdiff
path: root/includes/general.php
diff options
context:
space:
mode:
authorMichael Tänzer <neo@nhng.de>2011-10-16 04:53:08 +0200
committerMichael Tänzer <neo@nhng.de>2011-10-16 04:53:08 +0200
commitd581655fb544070921a38ac92efb30422f7560d8 (patch)
tree7dad64fc003b1db5af564672982b7209abbe9d96 /includes/general.php
parent5d77aa2cc71fdf038c6ea67eb282e7d8edd1fa4e (diff)
downloadcacert-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.php173
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" => "&#1575;&#1604;&#1593;&#1585;&#1576;&#1610;&#1577;",
- "bg" => "&#1041;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080;",
- "cs" => "&#268;e&scaron;tina",
- "da" => "Dansk",
- "de" => "Deutsch",
- "el" => "&Epsilon;&lambda;&lambda;&eta;&nu;&iota;&kappa;&#940;",
- "en" => "English",
- "es" => "Espa&#xf1;ol",
- "fi" => "Suomi",
- "fr" => "Fran&#xe7;ais",
- "hu" => "Magyar",
- "it" => "Italiano",
- "ja" => "&#26085;&#26412;&#35486;",
- "lv" => "Latvie&scaron;u",
- "nl" => "Nederlands",
- "pl" => "Polski",
- "pt" => "Portugu&#xea;s",
- "pt-br" => "Portugu&#xea;s Brasileiro",
- "ru" => "&#x420;&#x443;&#x441;&#x441;&#x43a;&#x438;&#x439;",
- "sv" => "Svenska",
- "tr" => "T&#xfc;rk&#xe7;e",
- "zh-cn" => "&#x4e2d;&#x6587;(&#x7b80;&#x4f53;)",
- "zh-tw" => "&#x4e2d;&#x6587;(&#33274;&#28771;)");
-
-
-
- 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)
{