CRM-13929 Translate select2 stings for i18n
authorColeman Watts <coleman@civicrm.org>
Sat, 15 Feb 2014 01:29:16 +0000 (17:29 -0800)
committerColeman Watts <coleman@civicrm.org>
Sat, 15 Feb 2014 01:29:16 +0000 (17:29 -0800)
CRM/Core/Form.php
CRM/Core/Resources.php
js/Common.js

index f03b2319faf2c74a410c1e9350855a2a1e216e1f..654a46d2a1f9dd52272e6184ebbccb9ff25b4a88 100644 (file)
@@ -1260,6 +1260,7 @@ class CRM_Core_Form extends HTML_QuickForm_Page {
    * @return HTML_QuickForm_Element
    */
   function addEntityRef($name, $label, $props = array(), $required = FALSE) {
+    $config = CRM_Core_Config::singleton();
     // Default properties
     $props['api'] = CRM_Utils_Array::value('api', $props, array());
     $props['entity'] = CRM_Utils_Array::value('entity', $props, 'contact');
@@ -1284,11 +1285,9 @@ class CRM_Core_Form extends HTML_QuickForm_Page {
       'multiple' => !empty($props['multiple']),
       'placeholder' => CRM_Utils_Array::value('placeholder', $props, $required ? ts('- select -') : ts('- none -')),
       'allowClear' => !$required,
-      'formatInputTooShort' => ts('Start typing a name...'),
-      'formatNoMatches' => ts('None found.'),
     );
-    if ($props['entity'] == 'contact' && CRM_Core_Config::singleton()->includeEmailInName) {
-      $defaults['formatInputTooShort'] = ts('Start typing a name or email...');
+    if ($props['entity'] == 'contact') {
+      $defaults['formatInputTooShort'] = $config->includeEmailInName ? ts('Start typing a name or email...') : ts('Start typing a name...');
     }
     $props['select'] = CRM_Utils_Array::value('select', $props, array()) + $defaults;
 
index 3f76348ad1396ef345db1e0f4ef2e9fb802ff481..7932ea6af8a633f02c0819a261dac5e2bc6bc685 100644 (file)
@@ -446,6 +446,8 @@ class CRM_Core_Resources {
       $url = CRM_Utils_System::url('civicrm/example', 'placeholder', FALSE, NULL, FALSE);
       $js = "CRM.url('init', '$url');\n";
       $js .= "CRM.formatMoney('init', " . json_encode(CRM_Utils_Money::format(1234.56)) . ");";
+
+      $this->addLocalization($js);
       $this->addScript($js, $jsWeight++, $region);
 
       // Add global settings
@@ -522,6 +524,19 @@ class CRM_Core_Resources {
     $this->addString($stringsByFile[$file]);
   }
 
+  /**
+   * Add inline scripts needed to localize js widgets
+   * @param string $js
+   */
+  function addLocalization(&$js) {
+    $js .= '
+      $.fn.select2.defaults.formatNoMatches = ' . json_encode(ts('None found.')) . ';
+      $.fn.select2.defaults.formatLoadMore = ' . json_encode(ts('Loading...')) . ';
+      $.fn.select2.defaults.formatSearching = ' . json_encode(ts('Searching...')) . ';
+      $.fn.select2.defaults.formatInputTooShort = ' . json_encode(ts('Enter search term...')) . ';
+    ';
+  }
+
   /**
    * List of core resources we add to every CiviCRM page
    *
index c45d48ed6430bd5722529d2b1baf791a07943003..66b7c208b7dc5948970da211b1c71408e3b95826 100644 (file)
@@ -364,10 +364,12 @@ CRM.validate = CRM.validate || {
         };
         if ($el.data('create-links')) {
           options.formatInputTooShort = function() {
-            return $el.data('select-params').formatInputTooShort + ' ' + ts('or') + '<br />' + CRM.utils.formatSelect2CreateLinks($el);
+            var txt = $el.data('select-params').formatInputTooShort || $.fn.select2.defaults.formatInputTooShort;
+            return txt + ' ' + ts('or') + '<br />' + CRM.utils.formatSelect2CreateLinks($el);
           };
           options.formatNoMatches = function() {
-            return $el.data('select-params').formatNoMatches + '<br />' + CRM.utils.formatSelect2CreateLinks($el);
+            var txt = $el.data('select-params').formatNoMatches || $.fn.select2.defaults.formatNoMatches;
+            return txt + '<br />' + CRM.utils.formatSelect2CreateLinks($el);
           };
           $el.on('select2-open', function() {
             var $el = $(this);