From 9efb666af2419a86a8a66f21f1ccaafe0ca27f07 Mon Sep 17 00:00:00 2001 From: Jared Hancock <jared@osticket.com> Date: Tue, 8 Jul 2014 10:44:23 -0500 Subject: [PATCH] i18n: Display language selection with local names --- include/class.i18n.php | 37 +++++++++++++++++++++++++++++------ include/staff/profile.inc.php | 2 +- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/include/class.i18n.php b/include/class.i18n.php index 66d00c0a9..11b6f5c80 100644 --- a/include/class.i18n.php +++ b/include/class.i18n.php @@ -158,10 +158,39 @@ class Internationalization { } static function getLanguageDescription($lang) { + global $thisstaff, $thisclient; + $langs = self::availableLanguages(); $lang = strtolower($lang); - if (isset($langs[$lang])) - return $langs[$lang]['desc']; + if (isset($langs[$lang])) { + $info = &$langs[$lang]; + if (!isset($info['desc'])) { + if (extension_loaded('intl')) { + if ($thisstaff) + $lang = $thisstaff->getLanguage(); + elseif ($thisclient) + $lang = $thisclient->getLanguage(); + else + $lang = self::getDefaultLanguage(); + list($simple_lang,) = explode('_', $lang); + $info['desc'] = sprintf("%s%s", + // Display the localized name of the language + Locale::getDisplayName($info['code'], $info['code']), + // If the major language differes from the user's, + // display the language in the user's language + (strpos($simple_lang, $info['lang']) === false + ? sprintf(' (%s)', Locale::getDisplayName($info['code'], $lang)) : '') + ); + } + else { + $info['desc'] = sprintf("%s%s (%s)", + $info['nativeName'], + $info['locale'] ? sprintf(' - %s', $info['locale']) : '', + $info['name']); + } + } + return $info['desc']; + } else return $lang; } @@ -192,10 +221,6 @@ class Internationalization { 'locale' => $locale, 'path' => $f, 'code' => $base, - 'desc' => sprintf("%s%s (%s)", - $langs[$code]['nativeName'], - $locale ? sprintf(' - %s', $locale) : '', - $langs[$code]['name']), ); } } diff --git a/include/staff/profile.inc.php b/include/staff/profile.inc.php index 6b72f071c..ff3053bdb 100644 --- a/include/staff/profile.inc.php +++ b/include/staff/profile.inc.php @@ -112,7 +112,7 @@ $info['id']=$staff->getId(); <?php foreach($langs as $l) { $selected = ($info['lang'] == $l['code']) ? 'selected="selected"' : ''; ?> <option value="<?php echo $l['code']; ?>" <?php echo $selected; - ?>><?php echo $l['desc']; ?></option> + ?>><?php echo Internationalization::getLanguageDescription($l['code']); ?></option> <?php } ?> </select> <span class="error"> <?php echo $errors['lang']; ?></span> -- GitLab