diff options
author | RedMatrix <info@friendica.com> | 2014-12-31 10:21:53 +1100 |
---|---|---|
committer | RedMatrix <info@friendica.com> | 2014-12-31 10:21:53 +1100 |
commit | 7b0b0dd76f97118e5cae64c2d444d9343da7074c (patch) | |
tree | 895de27ff85b372fd9bbb5f829942e329001a7ef /include | |
parent | 4a82967639e662821de177e3bd829b735b4eb24e (diff) | |
parent | b54bbf0fb8af72bd5273597f564f084aa1c1ac79 (diff) | |
download | volse-hubzilla-7b0b0dd76f97118e5cae64c2d444d9343da7074c.tar.gz volse-hubzilla-7b0b0dd76f97118e5cae64c2d444d9343da7074c.tar.bz2 volse-hubzilla-7b0b0dd76f97118e5cae64c2d444d9343da7074c.zip |
Merge pull request #794 from pafcu/lang
Language names via intl library.
Diffstat (limited to 'include')
-rw-r--r-- | include/language.php | 30 | ||||
-rw-r--r-- | include/text.php | 2 |
2 files changed, 25 insertions, 7 deletions
diff --git a/include/language.php b/include/language.php index 9db57dceb..f5ee3471e 100644 --- a/include/language.php +++ b/include/language.php @@ -250,8 +250,7 @@ function detect_language($s) { * By default we use the localized language name. You can switch the result * to any language with the optional 2nd parameter $l. * - * $s and $l can be in any format that PHP's Locale understands. We will mostly - * use the 2-letter ISO 639-1 (en, de, fr) format. + * $s and $l should be in 2-letter ISO 639-1 format * * If nothing could be looked up it returns $s. * @@ -259,11 +258,30 @@ function detect_language($s) { * @param $l (optional) In which language to return the name * @return string with the language name, or $s if unrecognized */ +require_once(__DIR__ . '/../library/intl/vendor/autoload.php'); +use CommerceGuys\Intl\Language\LanguageRepository; function get_language_name($s, $l = null) { - if($l === null) - $l = $s; + // get() expects the second part to be in upper case + if(strpos($s,'-') !== false) $s = substr($s,0,2) . strtoupper(substr($s,2)); + if($l !== null && strpos($l,'-') !== false) $l = substr($l,0,2) . strtoupper(substr($l,2)); - logger('get_language_name: for ' . $s . ' in ' . $l . ' returns: ' . Locale::getDisplayLanguage($s, $l), LOGGER_DEBUG); - return Locale::getDisplayLanguage($s, $l); + $languageRepository = new LanguageRepository; + + // Sometimes intl doesn't like the second part at all ... + try { + $language = $languageRepository->get($s, $l); + } + catch(CommerceGuys\Intl\Exception\UnknownLanguageException $e) { + $s = substr($s,0,2); + if($l !== null) $l = substr($s,0,2); + try { + $language = $languageRepository->get($s, $l); + } + catch(CommerceGuys\Intl\Exception\UnknownLanguageException $e) { + return $s; // Give up + } + } + + return $language->getName(); } diff --git a/include/text.php b/include/text.php index cd34fd88d..ca9c51bc3 100644 --- a/include/text.php +++ b/include/text.php @@ -1629,7 +1629,7 @@ function lang_selector() { $ll = substr($l,5); $ll = substr($ll,0,strrpos($ll,'/')); $selected = (($ll === $a->language && (x($_SESSION, 'language'))) ? $ll : $selected); - $lang_options[$ll]=$ll; + $lang_options[$ll] = get_language_name($ll, $ll) . " ($ll)"; } } |