diff options
author | Michael Tänzer <neo@nhng.de> | 2011-09-28 00:11:54 +0200 |
---|---|---|
committer | Michael Tänzer <neo@nhng.de> | 2011-09-28 00:11:54 +0200 |
commit | dde0e7bd634e8a1130074e4e14b40222a65bc501 (patch) | |
tree | 3d86bd61fb7d7e312c4c5eb848a3b85dae6286aa /includes | |
parent | c99e1025667d8fef72b6fdbe7d34769a279a8942 (diff) | |
download | cacert-devel-dde0e7bd634e8a1130074e4e14b40222a65bc501.tar.gz cacert-devel-dde0e7bd634e8a1130074e4e14b40222a65bc501.tar.xz cacert-devel-dde0e7bd634e8a1130074e4e14b40222a65bc501.zip |
bug 985: move from Translingo to Pootle (translations.cacert.org)
- new Makefile
- rework translation selection code
- remove unused files
Signed-off-by: Michael Tänzer <neo@nhng.de>
Diffstat (limited to 'includes')
-rw-r--r-- | includes/general.php | 166 |
1 files changed, 88 insertions, 78 deletions
diff --git a/includes/general.php b/includes/general.php index ebdf20e..0231b21 100644 --- a/includes/general.php +++ b/includes/general.php @@ -70,50 +70,44 @@ } } - $lang = ""; - if(array_key_exists("lang",$_REQUEST)) - $lang=mysql_escape_string(substr(trim($_REQUEST['lang']), 0, 5)); - if($lang != "") - $_SESSION['_config']['language'] = $lang; - - //if($_SESSION['profile']['id'] == 1 && 1 == 2) - // echo $_SESSION['_config']['language']; - + + /////////////////////// + // Language Handling // + /////////////////////// + $_SESSION['_config']['translations'] = array( - "ar_JO" => "العربية", - "bg_BG" => "Български", - "cs_CZ" => "Čeština", - "da_DK" => "Dansk", - "de_DE" => "Deutsch", - "el_GR" => "Ελληνικά", - "en_AU" => "English", - "eo_EO" => "Esperanto", - "es_ES" => "Español", - "fa_IR" => "Farsi", - "fi_FI" => "Suomi", - "fr_FR" => "Français", - "he_IL" => "עברית", - "hr_HR" => "Hrvatski", - "hu_HU" => "Magyar", - "is_IS" => "Íslenska", - "it_IT" => "Italiano", - "ja_JP" => "日本語", - "ka_GE" => "Georgian", - "nl_NL" => "Nederlands", - "pl_PL" => "Polski", - "pt_PT" => "Português", - "pt_BR" => "Português Brasileiro", - "ru_RU" => "Русский", - "ro_RO" => "Română", - "sv_SE" => "Svenska", - "tr_TR" => "Türkçe", - "zh_CN" => "中文(简体)"); - - $value=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('language',$_SESSION['_config']) && $_SESSION['_config']['language'] != "")) { - $bits = explode(",", strtolower(str_replace(" ", "", mysql_real_escape_string(array_key_exists('HTTP_ACCEPT_LANGUAGE',$_SERVER)?$_SERVER['HTTP_ACCEPT_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); @@ -121,59 +115,79 @@ $c = floatval(substr($b[1], 2)); else $c = 1; - $value["$c"] = trim($b[0]); + + 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 ) ) | "*" ) + $languages = preg_filter('/^(?:[a-zA-Z]{1,8}(?:-[a-zA-Z]{1,8})*|\*)$/', + '$0', $languages); - krsort($value); - - reset($value); + krsort($languages, SORT_NUMERIC); - foreach($value as $key => $val) + $all_translations = scandir($_SESSION['_config']['filepath']."/locale/"); + foreach($languages as $qvalue => $lang) { - $val = substr(escapeshellarg($val), 1, -1); - $short = substr($val, 0, 2); - if($val == "en" || $short == "en") + $lang = strtr($lang, '-', '_'); + $lang_length = strlen($lang); + $chosen_translation = ""; + foreach ($all_translations as $translation) { - $_SESSION['_config']['language'] = "en"; - break; - } - if(file_exists($_SESSION['_config']['filepath']."/locale/$val/LC_MESSAGES/messages.mo")) - { - $_SESSION['_config']['language'] = $val; - break; + $translation_lower = strtolower($translation); + if ($translation_lower === $lang || + substr($translation, 0, $lang_length + 1) === $lang.'_') + { + $chosen_translation = $translation; + break; + } } - if(file_exists($_SESSION['_config']['filepath']."/locale/$short/LC_MESSAGES/messages.mo")) + if ($chosen_translation !== "") { - $_SESSION['_config']['language'] = $short; - break; + if(file_exists($_SESSION['_config']['filepath']."/locale/$chosen_translation/LC_MESSAGES/messages.mo")) + { + $_SESSION['_config']['language'] = $lang; + break; + } } } } - if(!array_key_exists('_config',$_SESSION) || !array_key_exists('language',$_SESSION['_config']) || strlen($_SESSION['_config']['language']) != 5) + if(!array_key_exists('_config',$_SESSION) || + !array_key_exists('language',$_SESSION['_config']) || + $_SESSION['_config']['language'] == "" ) { - $lang = array_key_exists('language',$_SESSION['_config'])?$_SESSION['_config']['language']:""; - $_SESSION['_config']['language'] = "en_AU"; - foreach($_SESSION['_config']['translations'] as $key => $val) - { - if(substr($lang, 0, 2) == substr($key, 0, 2)) - { - $_SESSION['_config']['language'] = $val; - break; - } - } + $_SESSION['_config']['language'] = "en"; + 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") + 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") { + } else if($_SESSION['_config']['language'] == "pl" || + $_SESSION['_config']['language'] == "hu") { $_SESSION['_config']['recode'] = "html..ISO-8859-2"; - } else if($_SESSION['_config']['language'] == "ja_JP") { + } else if($_SESSION['_config']['language'] == "ja") { $_SESSION['_config']['recode'] = "html..SHIFT-JIS"; - } else if($_SESSION['_config']['language'] == "ru_RU") { + } else if($_SESSION['_config']['language'] == "ru") { $_SESSION['_config']['recode'] = "html..ISO-8859-5"; - } else if($_SESSION['_config']['language'] == "lt_LT") { + } else if($_SESSION['_config']['language'] == "lt") { $_SESSION['_config']['recode'] = "html..ISO-8859-13"; } @@ -183,10 +197,6 @@ bindtextdomain($domain, $_SESSION['_config']['filepath']."/locale"); textdomain($domain); - //if($_SESSION['profile']['id'] == -1) - // echo $_SESSION['_config']['language']." - ".$_SESSION['_config']['filepath']."/locale"; - - if(array_key_exists('profile',$_SESSION) && is_array($_SESSION['profile']) && array_key_exists('id',$_SESSION['profile']) && $_SESSION['profile']['id'] > 0) { $locked = mysql_fetch_assoc(mysql_query("select `locked` from `users` where `id`='".$_SESSION['profile']['id']."'")); |