X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCore%2FI18n.php;h=02557bbb7b698701edcb57454cfa247ea0c240e1;hb=c2a4149ba7f21ad66c35a49671a08092631e9bfd;hp=f6ef3f4de173f3b85387121838c4fdbe2ebf67ae;hpb=646f509a05488f664672fcc855eeb060cbed25b5;p=civicrm-core.git diff --git a/CRM/Core/I18n.php b/CRM/Core/I18n.php index f6ef3f4de1..02557bbb7b 100644 --- a/CRM/Core/I18n.php +++ b/CRM/Core/I18n.php @@ -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();