From f16682d1fb65329859686c2b6e442314221cee9c Mon Sep 17 00:00:00 2001 From: Jared Hancock <jared@osticket.com> Date: Tue, 21 Apr 2015 13:45:37 -0500 Subject: [PATCH] i18n: Dishonor browser preference if en_US is not enabled --- include/class.dynamic_forms.php | 2 +- include/class.i18n.php | 22 ++++++++++++++++------ include/staff/dynamic-form.inc.php | 2 +- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/include/class.dynamic_forms.php b/include/class.dynamic_forms.php index ca2b3f2c8..de0f05ce2 100644 --- a/include/class.dynamic_forms.php +++ b/include/class.dynamic_forms.php @@ -236,7 +236,7 @@ class DynamicForm extends VerySimpleModel { // New translations (?) if ($vars['trans'] && is_array($vars['trans'])) { foreach ($vars['trans'] as $lang=>$parts) { - if (!Internationalization::isLanguageInstalled($lang)) + if (!Internationalization::isLanguageEnabled($lang)) continue; foreach ($parts as $T => $content) { $content = trim($content); diff --git a/include/class.i18n.php b/include/class.i18n.php index c6e4bfc61..94f6b679c 100644 --- a/include/class.i18n.php +++ b/include/class.i18n.php @@ -255,18 +255,28 @@ class Internationalization { return isset($langs[strtolower($code)]); } + static function isLanguageEnabled($code) { + $langs = self::getConfiguredSystemLanguages(); + return isset($langs[$code]); + } + static function getConfiguredSystemLanguages() { global $cfg; + static $langs; if (!$cfg) return self::availableLanguages(); - $pri = $cfg->getPrimaryLanguage(); - $langs = array($pri => self::getLanguageInfo($pri)); + if (!isset($langs)) { + $pri = $cfg->getPrimaryLanguage(); + if ($info = self::getLanguageInfo($pri)) + $langs = array($pri => $info); - // Honor sorting preference of ::availableLanguages() - foreach ($cfg->getSecondaryLanguages() as $l) { - $langs[$l] = self::getLanguageInfo($l); + // Honor sorting preference of ::availableLanguages() + foreach ($cfg->getSecondaryLanguages() as $l) { + if ($info = self::getLanguageInfo($l)) + $langs[$l] = $info; + } } return $langs; } @@ -369,7 +379,7 @@ class Internationalization { $user = $user ?: $thisstaff ?: $thisclient; if ($user && method_exists($user, 'getLanguage')) - if ($lang = $user->getLanguage()) + if (($lang = $user->getLanguage()) && self::isLanguageEnabled($lang)) return $lang; // Support the flag buttons for guests diff --git a/include/staff/dynamic-form.inc.php b/include/staff/dynamic-form.inc.php index e194d4d85..5415ba03c 100644 --- a/include/staff/dynamic-form.inc.php +++ b/include/staff/dynamic-form.inc.php @@ -15,7 +15,7 @@ if($form && $_REQUEST['a']!='add') { $translations = CustomDataTranslation::allTranslations($trans, 'phrase'); $_keys = array_flip($trans); foreach ($translations as $t) { - if (!Internationalization::isLanguageInstalled($t->lang)) + if (!Internationalization::isLanguageEnabled($t->lang)) continue; // Create keys of [trans][de_DE][title] for instance $info['trans'][$t->lang][$_keys[$t->object_hash]] -- GitLab