Skip to content
Snippets Groups Projects
Unverified Commit 7f58fa4a authored by Seamus Lee's avatar Seamus Lee Committed by GitHub
Browse files

Merge pull request #15411 from systopia/dev_l10nx

Allow custom ts functions in extensions; defer custom ts calls until booted
parents 9a1af0ba 69e812be
Branches
Tags
No related merge requests found
......@@ -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();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment