X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCore%2FI18n.php;h=02557bbb7b698701edcb57454cfa247ea0c240e1;hb=c2a4149ba7f21ad66c35a49671a08092631e9bfd;hp=a128119ed42791b0585edf7ce20522cf2b1c04ac;hpb=148b2b7f374a6cc3609cb2a30e5942d3e6fdde0e;p=civicrm-core.git diff --git a/CRM/Core/I18n.php b/CRM/Core/I18n.php index a128119ed4..02557bbb7b 100644 --- a/CRM/Core/I18n.php +++ b/CRM/Core/I18n.php @@ -230,11 +230,11 @@ class CRM_Core_I18n { } if ($enabled === NULL) { - $config = CRM_Core_Config::singleton(); + $languageLimit = Civi::settings()->get('languageLimit'); $enabled = []; - if (isset($config->languageLimit) and $config->languageLimit) { + if ($languageLimit) { foreach ($all as $code => $name) { - if (in_array($code, array_keys($config->languageLimit))) { + if (array_key_exists($code, $languageLimit)) { $enabled[$code] = $name; } } @@ -326,6 +326,7 @@ class CRM_Core_I18n { * The params of the translation (if any). * - domain: string|array a list of translation domains to search (in order) * - context: string + * - skip_translation: flag (do only escape/replacement, skip the actual translation) * * @return string * the translated string @@ -378,24 +379,26 @@ class CRM_Core_I18n { $raw = !empty($params['raw']); unset($params['raw']); - if (!empty($domain)) { - // It might be prettier to cast to an array, but this is high-traffic stuff. - if (is_array($domain)) { - foreach ($domain as $d) { - $candidate = $this->crm_translate_raw($text, $d, $count, $plural, $context); - if ($candidate != $text) { - $text = $candidate; - break; + if (!isset($params['skip_translation'])) { + if (!empty($domain)) { + // It might be prettier to cast to an array, but this is high-traffic stuff. + if (is_array($domain)) { + foreach ($domain as $d) { + $candidate = $this->crm_translate_raw($text, $d, $count, $plural, $context); + if ($candidate != $text) { + $text = $candidate; + break; + } } } + else { + $text = $this->crm_translate_raw($text, $domain, $count, $plural, $context); + } } else { - $text = $this->crm_translate_raw($text, $domain, $count, $plural, $context); + $text = $this->crm_translate_raw($text, NULL, $count, $plural, $context); } } - else { - $text = $this->crm_translate_raw($text, NULL, $count, $plural, $context); - } // replace the numbered %1, %2, etc. params if present if (count($params) && !$raw) { @@ -768,7 +771,7 @@ class CRM_Core_I18n { * the translated string */ function ts($text, $params = []) { - static $areSettingsAvailable = FALSE; + static $bootstrapReady = FALSE; static $lastLocale = NULL; static $i18n = NULL; static $function = NULL; @@ -778,14 +781,19 @@ function ts($text, $params = []) { } // When the settings become available, lookup customTranslateFunction. - if (!$areSettingsAvailable) { - $areSettingsAvailable = (bool) \Civi\Core\Container::getBootService('settings_manager'); - if ($areSettingsAvailable) { + if (!$bootstrapReady) { + $bootstrapReady = (bool) \Civi\Core\Container::isContainerBooted(); + if ($bootstrapReady) { + // just got ready: determine whether there is a working custom translation function $config = CRM_Core_Config::singleton(); if (isset($config->customTranslateFunction) and function_exists($config->customTranslateFunction)) { $function = $config->customTranslateFunction; } } + else { + // don't _translate_ anything until bootstrap has progressed enough + $params['skip_translation'] = 1; + } } $activeLocale = CRM_Core_I18n::getLocale();