CRM-13580 - ts - Set the default translation domain based on $extensionKey
authorTim Otten <totten@civicrm.org>
Fri, 11 Oct 2013 17:59:44 +0000 (18:59 +0100)
committerTim Otten <totten@civicrm.org>
Fri, 11 Oct 2013 17:59:44 +0000 (18:59 +0100)
Reset $extensionKey when loading each file. This puts the onus on developers
to set the extensionKey once in each file using {assign} or {tsScope}, but
it prevents the extension key from leaking unintentionally to other files,
and it allows developers to handle weird situations explicitly.

(Example weird situation -- using one extension to override another
extension's template; or having multiple extensions share a common
translation key.)

----------------------------------------
* CRM-13580: Set translation domain implicitly in extensions
  http://issues.civicrm.org/jira/browse/CRM-13580

CRM/Core/Smarty.php
CRM/Core/Smarty/plugins/block.ts.php
CRM/Core/Smarty/plugins/prefilter.resetExtScope.php [new file with mode: 0644]

index a656aa3c70955b01120529e89d75e4310edd990c..6422ca2c489ac59884a160adcaaff16ae972e333 100644 (file)
@@ -159,6 +159,7 @@ class CRM_Core_Smarty extends Smarty {
     }
 
     $this->register_function('crmURL', array('CRM_Utils_System', 'crmURL'));
+    $this->load_filter('pre', 'resetExtScope');
   }
 
   /**
index c0fb5f54be462cc8fb1a6e09097b0fa6992007cf..5d16be9c46ac4f0565b7cc30d5df2e131fa3dce8 100644 (file)
@@ -47,6 +47,9 @@
  * @return string  the string, translated by gettext
  */
 function smarty_block_ts($params, $text, &$smarty) {
+  if (!isset($params['domain'])) {
+    $params['domain'] = $smarty->get_template_vars('extensionKey');
+  }
   return ts($text, $params);
 }
 
diff --git a/CRM/Core/Smarty/plugins/prefilter.resetExtScope.php b/CRM/Core/Smarty/plugins/prefilter.resetExtScope.php
new file mode 100644 (file)
index 0000000..01b0070
--- /dev/null
@@ -0,0 +1,12 @@
+<?php
+
+/**
+ * Wrap every Smarty template in a {crmScope} tag that sets the
+ * variable "extensionKey" to blank.
+ */
+function smarty_prefilter_resetExtScope($tpl_source, &$smarty) {
+  return
+    '{crmScope extensionKey=""}'
+    . $tpl_source
+    .'{/crmScope}';
+}
\ No newline at end of file