Skip to content

Commit

Permalink
Merge pull request #15411 from systopia/dev_l10nx
Browse files Browse the repository at this point in the history
Allow custom ts functions in extensions; defer custom ts calls until booted
  • Loading branch information
seamuslee001 authored Oct 7, 2019
2 parents 9a1af0b + 69e812b commit 7f58fa4
Showing 1 changed file with 24 additions and 16 deletions.
40 changes: 24 additions & 16 deletions CRM/Core/I18n.php
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,7 @@ public static function getResourceDir() {
* 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
Expand Down Expand Up @@ -378,24 +379,26 @@ public function crm_translate($text, $params = []) {
$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) {
Expand Down Expand Up @@ -768,7 +771,7 @@ public static function getLocale() {
* the translated string
*/
function ts($text, $params = []) {
static $areSettingsAvailable = FALSE;
static $bootstrapReady = FALSE;
static $lastLocale = NULL;
static $i18n = NULL;
static $function = NULL;
Expand All @@ -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();
Expand Down

0 comments on commit 7f58fa4

Please sign in to comment.