[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/includes/runtime/ -> LanguageHandler.php (source)

   1  <?php
   2  
   3  /* +**********************************************************************************
   4   * The contents of this file are subject to the vtiger CRM Public License Version 1.1
   5   * ("License"); You may not use this file except in compliance with the License
   6   * The Original Code is:  vtiger CRM Open Source
   7   * The Initial Developer of the Original Code is vtiger.
   8   * Portions created by vtiger are Copyright (C) vtiger.
   9   * All Rights Reserved.
  10   * ********************************************************************************** */
  11  
  12  /**
  13   * Class to handler language translations
  14   */
  15  class Vtiger_Language_Handler {
  16  
  17      //Contains module language translations
  18      protected static $languageContainer;
  19  
  20      /**
  21       * Functions that gets translated string
  22       * @param <String> $key - string which need to be translated
  23       * @param <String> $module - module scope in which the translation need to be check
  24       * @return <String> - translated string
  25       */
  26      public static function getTranslatedString($key, $module = '', $currentLanguage = '') {
  27          if (empty($currentLanguage)) {
  28              $currentLanguage = self::getLanguage();
  29          }
  30          //decoding for Start Date & Time and End Date & Time 
  31          if (!is_array($key))
  32              $key = decode_html($key);
  33          $translatedString = self::getLanguageTranslatedString($currentLanguage, $key, $module);
  34  
  35          // label not found in users language pack, then check in the default language pack(config.inc.php)
  36          if ($translatedString === null) {
  37              $defaultLanguage = vglobal('default_language');
  38              if (!empty($defaultLanguage) && strcasecmp($defaultLanguage, $currentLanguage) !== 0) {
  39                  $translatedString = self::getLanguageTranslatedString($defaultLanguage, $key, $module);
  40              }
  41          }
  42  
  43          // If translation is not found then return label
  44          if ($translatedString === null) {
  45              $translatedString = $key;
  46          }
  47          return $translatedString;
  48      }
  49  
  50      /**
  51       * Function returns language specific translated string
  52       * @param <String> $language - en_us etc
  53       * @param <String> $key - label
  54       * @param <String> $module - module name
  55       * @return <String> translated string or null if translation not found
  56       */
  57      public static function getLanguageTranslatedString($language, $key, $module = '') {
  58          $moduleStrings = array();
  59  
  60          $module = str_replace(':', '.', $module);
  61          if (is_array($module))
  62              return null;
  63          $moduleStrings = self::getModuleStringsFromFile($language, $module);
  64          if (!empty($moduleStrings['languageStrings'][$key])) {
  65              return $moduleStrings['languageStrings'][$key];
  66          }
  67          // Lookup for the translation in base module, in case of sub modules, before ending up with common strings
  68          if (strpos($module, '.') > 0) {
  69              $baseModule = substr($module, 0, strpos($module, '.'));
  70              if ($baseModule == 'Settings') {
  71                  $baseModule = 'Settings.Vtiger';
  72              }
  73              $moduleStrings = self::getModuleStringsFromFile($language, $baseModule);
  74              if (!empty($moduleStrings['languageStrings'][$key])) {
  75                  return $moduleStrings['languageStrings'][$key];
  76              }
  77          }
  78  
  79          $commonStrings = self::getModuleStringsFromFile($language);
  80          if (!empty($commonStrings['languageStrings'][$key]))
  81              return $commonStrings['languageStrings'][$key];
  82  
  83          return null;
  84      }
  85  
  86      /**
  87       * Functions that gets translated string for Client side
  88       * @param <String> $key - string which need to be translated
  89       * @param <String> $module - module scope in which the translation need to be check
  90       * @return <String> - translated string
  91       */
  92      public static function getJSTranslatedString($language, $key, $module = '') {
  93          $moduleStrings = array();
  94  
  95          $module = str_replace(':', '.', $module);
  96          $moduleStrings = self::getModuleStringsFromFile($language, $module);
  97          if (!empty($moduleStrings['jsLanguageStrings'][$key])) {
  98              return $moduleStrings['jsLanguageStrings'][$key];
  99          }
 100          // Lookup for the translation in base module, in case of sub modules, before ending up with common strings
 101          if (strpos($module, '.') > 0) {
 102              $baseModule = substr($module, 0, strpos($module, '.'));
 103              if ($baseModule == 'Settings') {
 104                  $baseModule = 'Settings.Vtiger';
 105              }
 106              $moduleStrings = self::getModuleStringsFromFile($language, $baseModule);
 107              if (!empty($moduleStrings['jsLanguageStrings'][$key])) {
 108                  return $moduleStrings['jsLanguageStrings'][$key];
 109              }
 110          }
 111  
 112          $commonStrings = self::getModuleStringsFromFile($language);
 113          if (!empty($commonStrings['jsLanguageStrings'][$key]))
 114              return $commonStrings['jsLanguageStrings'][$key];
 115  
 116          return $key;
 117      }
 118  
 119      /**
 120       * Function that returns translation strings from file
 121       * @global <array> $languageStrings - language specific string which is used in translations
 122       * @param <String> $module - module Name
 123       * @return <array> - array if module has language strings else returns empty array
 124       */
 125  	public static function getModuleStringsFromFile($language, $module='Vtiger'){
 126          $module = str_replace(':', '.', $module);
 127          if(empty(self::$languageContainer[$language][$module])){
 128  
 129  
 130  
 131  
 132  
 133              $qualifiedName = 'languages.'.$language.'.'.$module;
 134              $file = Vtiger_Loader::resolveNameToPath($qualifiedName);
 135  
 136              $languageStrings = $jsLanguageStrings = array();
 137              if(file_exists($file)){
 138                  require $file;
 139                  self::$languageContainer[$language][$module]['languageStrings'] = $languageStrings;
 140                  self::$languageContainer[$language][$module]['jsLanguageStrings'] = $jsLanguageStrings;
 141              }
 142  
 143  
 144  
 145  
 146  
 147  
 148  
 149  
 150  
 151  
 152  
 153  
 154  
 155  
 156          }
 157          return self::$languageContainer[$language][$module];
 158      }
 159  
 160      /**
 161       * Function that returns current language
 162       * @return <String> -
 163       */
 164      public static function getLanguage() {
 165          $userModel = Users_Record_Model::getCurrentUserModel();
 166          $language = '';
 167          if (!empty($userModel)) {
 168              $language = $userModel->get('language');
 169          }
 170          return empty($language) ? vglobal('default_language') : $language;
 171      }
 172  
 173      /**
 174       * Function that returns current language short name
 175       * @return <String> -
 176       */
 177      public static function getShortLanguageName() {
 178          $language = self::getLanguage();
 179          return substr($language, 0, 2);
 180      }
 181  
 182      /**
 183       * Function returns module strings
 184       * @param <String> $module - module Name
 185       * @param <String> languageStrings or jsLanguageStrings
 186       * @return <Array>
 187       */
 188      public static function export($module, $type = 'languageStrings') {
 189          $userSelectedLanguage = self::getLanguage();
 190          $defaultLanguage = vglobal('default_language');
 191          $languages = array($userSelectedLanguage);
 192          //To merge base language and user selected language translations
 193          if ($userSelectedLanguage != $defaultLanguage) {
 194              array_push($languages, $defaultLanguage);
 195          }
 196  
 197  
 198          $resultantLanguageString = array();
 199          foreach ($languages as $currentLanguage) {
 200              $exportLangString = array();
 201  
 202              $moduleStrings = self::getModuleStringsFromFile($currentLanguage, $module);
 203              if (!empty($moduleStrings[$type])) {
 204                  $exportLangString = $moduleStrings[$type];
 205              }
 206  
 207              // Lookup for the translation in base module, in case of sub modules, before ending up with common strings
 208              if (strpos($module, '.') > 0) {
 209                  $baseModule = substr($module, 0, strpos($module, '.'));
 210                  if ($baseModule == 'Settings') {
 211                      $baseModule = 'Settings.Vtiger';
 212                  }
 213                  $moduleStrings = self::getModuleStringsFromFile($currentLanguage, $baseModule);
 214                  if (!empty($moduleStrings[$type])) {
 215                      $exportLangString += $commonStrings[$type];
 216                  }
 217              }
 218  
 219              $commonStrings = self::getModuleStringsFromFile($currentLanguage);
 220              if (!empty($commonStrings[$type])) {
 221                  $exportLangString += $commonStrings[$type];
 222              }
 223              $resultantLanguageString += $exportLangString;
 224          }
 225  
 226          return $resultantLanguageString;
 227          ;
 228      }
 229  
 230      /**
 231       * Function to returns all language information
 232       * @return <Array>
 233       */
 234      public static function getAllLanguages() {
 235          return Vtiger_Language::getAll();
 236      }
 237  
 238      /**
 239       * Function to get the label name of the Langauge package
 240       * @param <String> $name
 241       */
 242      public static function getLanguageLabel($name) {
 243          $db = PearDatabase::getInstance();
 244          $languageResult = $db->pquery('SELECT label FROM vtiger_language WHERE prefix = ?', array($name));
 245          if ($db->num_rows($languageResult)) {
 246              return $db->query_result($languageResult, 0, 'label');
 247          }
 248          return false;
 249      }
 250  
 251  }
 252  
 253  function vtranslate($key, $moduleName = '') {
 254      $args = func_get_args();
 255      $formattedString = call_user_func_array(array('Vtiger_Language_Handler', 'getTranslatedString'), $args);
 256      array_shift($args);
 257      array_shift($args);
 258      if (is_array($args) && !empty($args)) {
 259          $formattedString = call_user_func_array('vsprintf', array($formattedString, $args));
 260      }
 261      return $formattedString;
 262  }
 263  
 264  function vJSTranslate($key, $moduleName = '') {
 265      $args = func_get_args();
 266      return call_user_func_array(array('Vtiger_Language_Handler', 'getJSTranslatedString'), $args);
 267  }


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1