From 16b19d2a0218d206004c9b957344c6cd15835e15 Mon Sep 17 00:00:00 2001 From: Janusz Dobrowolski Date: Sat, 23 Jan 2010 18:27:05 +0000 Subject: [PATCH] Improved locales checking. --- includes/lang/gettext.php | 46 +++++++++++++++++++++++++++++++++----- includes/lang/language.php | 4 +++- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/includes/lang/gettext.php b/includes/lang/gettext.php index cc2f04d0..ec2a3b8b 100644 --- a/includes/lang/gettext.php +++ b/includes/lang/gettext.php @@ -43,7 +43,7 @@ function get_text_init($managerType = GETTEXT_NATIVE) { } function raise_error($str) { -// echo "$str"; + error_log($str); return 1; } @@ -73,7 +73,17 @@ class gettext_native_support //$set = setlocale(LC_ALL, "$lang_code"); //$set = setlocale(LC_ALL, "$encoding"); - $set = setlocale(LC_ALL, $lang_code.".".$encoding); + + // cover a couple of country/encoding variants + $up = strtoupper($encoding); + $low = strtolower($encoding); + $lshort = strtr($up, '-',''); + $ushort = strtr($low, '-',''); + + $set = setlocale(LC_ALL, $lang_code.".".$encoding, + $lang_code.".".$up, $lang_code.".".$low, + $lang_code.".".$ushort, $lang_code.".".$lshort); + setlocale(LC_NUMERIC, 'C'); // important for numeric presentation etc. if ($set === false) { @@ -85,7 +95,27 @@ class gettext_native_support } //return 0; } - + /** + * Check system support for given language nedded for gettext. + */ + function check_support($lang_code, $encoding) + { + $old = setlocale(LC_MESSAGES, '0'); + $up = strtoupper($encoding); + $low = strtolower($encoding); + $lshort = strtr($up, '-',''); + $ushort = strtr($low, '-',''); + + $test = setlocale(LC_MESSAGES, + $lang_code.".".$encoding, + $lang_code.".".$up, + $lang_code.".".$low, + $lang_code.".".$ushort, + $lang_code.".".$lshort) !== false; + + setlocale(LC_MESSAGES, $old); + return $test; + } /** * Add a translation domain. */ @@ -102,7 +132,7 @@ class gettext_native_support //bind_textdomain_codeset($domain, $encoding); textdomain($domain); } - + /** * Retrieve translation for specified key. * @@ -242,7 +272,13 @@ class gettext_php_support extends gettext_native_support } } } - + /** + * Check system support for given language (dummy). + */ + function check_support($lang_code, $encoding) + { + return true; + } /** * Add a translation domain. * diff --git a/includes/lang/language.php b/includes/lang/language.php index e983384f..824a528c 100644 --- a/includes/lang/language.php +++ b/includes/lang/language.php @@ -26,8 +26,10 @@ class language function language($name, $code, $encoding, $dir = 'ltr') { + global $dflt_lang; + $this->name = $name; - $this->code = $code ? $code : 'en_GB'; + $this->code = $code ? $code : ($dflt_lang ? $dflt_lang : 'en_GB'); $this->encoding = $encoding; $this->dir = $dir; } -- 2.30.2