/includes/runtime/LanguageHandler.php
https://bitbucket.org/thomashii/vtigercrm-6-for-postgresql · PHP · 243 lines · 148 code · 32 blank · 63 comment · 31 complexity · a3fb21a98e631163674945312a810a64 MD5 · raw file
- <?php
- /*+**********************************************************************************
- * The contents of this file are subject to the vtiger CRM Public License Version 1.1
- * ("License"); You may not use this file except in compliance with the License
- * The Original Code is: vtiger CRM Open Source
- * The Initial Developer of the Original Code is vtiger.
- * Portions created by vtiger are Copyright (C) vtiger.
- * All Rights Reserved.
- ************************************************************************************/
- /**
- * Class to handler language translations
- */
- class Vtiger_Language_Handler {
- //Contains module language translations
- protected static $languageContainer;
- /**
- * Functions that gets translated string
- * @param <String> $key - string which need to be translated
- * @param <String> $module - module scope in which the translation need to be check
- * @return <String> - translated string
- */
- public static function getTranslatedString($key, $module=''){
- $currentLanguage = self::getLanguage();
- $translatedString = self::getLanguageTranslatedString($currentLanguage, $key, $module);
- // label not found in users language pack, then check in the default language pack(config.inc.php)
- if($translatedString === null) {
- $defaultLanguage = vglobal('default_language');
- if(!empty($defaultLanguage) && strcasecmp($defaultLanguage, $currentLanguage) !== 0) {
- $translatedString = self::getLanguageTranslatedString($defaultLanguage, $key, $module);
- }
- }
- // If translation is not found then return label
- if($translatedString === null) {
- $translatedString = $key;
- }
- return $translatedString;
- }
- /**
- * Function returns language specific translated string
- * @param <String> $language - en_us etc
- * @param <String> $key - label
- * @param <String> $module - module name
- * @return <String> translated string or null if translation not found
- */
- public static function getLanguageTranslatedString($language, $key, $module=''){
- $moduleStrings = array();
- $module = str_replace(':', '.', $module);
- $moduleStrings = self::getModuleStringsFromFile($language,$module);
- if(!empty($moduleStrings['languageStrings'][$key])) {
- return $moduleStrings['languageStrings'][$key];
- }
- // Lookup for the translation in base module, in case of sub modules, before ending up with common strings
- if(strpos($module, '.') > 0) {
- $baseModule = substr($module, 0, strpos($module, '.'));
- if($baseModule == 'Settings') {
- $baseModule = 'Settings.Vtiger';
- }
- $moduleStrings = self::getModuleStringsFromFile($language,$baseModule);
- if(!empty($moduleStrings['languageStrings'][$key])) {
- return $moduleStrings['languageStrings'][$key];
- }
- }
- $commonStrings = self::getModuleStringsFromFile($language);
- if(!empty($commonStrings['languageStrings'][$key]))
- return $commonStrings['languageStrings'][$key];
- return null;
- }
- /**
- * Functions that gets translated string for Client side
- * @param <String> $key - string which need to be translated
- * @param <String> $module - module scope in which the translation need to be check
- * @return <String> - translated string
- */
- public static function getJSTranslatedString($language, $key, $module=''){
- $moduleStrings = array();
- $module = str_replace(':', '.', $module);
- $moduleStrings = self::getModuleStringsFromFile($language,$module);
- if(!empty($moduleStrings['jsLanguageStrings'][$key])) {
- return $moduleStrings['jsLanguageStrings'][$key];
- }
- // Lookup for the translation in base module, in case of sub modules, before ending up with common strings
- if(strpos($module, '.') > 0) {
- $baseModule = substr($module, 0, strpos($module, '.'));
- if($baseModule == 'Settings') {
- $baseModule = 'Settings.Vtiger';
- }
- $moduleStrings = self::getModuleStringsFromFile($language, $baseModule);
- if(!empty($moduleStrings['jsLanguageStrings'][$key])) {
- return $moduleStrings['jsLanguageStrings'][$key];
- }
- }
- $commonStrings = self::getModuleStringsFromFile($language);
- if(!empty($commonStrings['jsLanguageStrings'][$key]))
- return $commonStrings['jsLanguageStrings'][$key];
- return $key;
- }
- /**
- * Function that returns translation strings from file
- * @global <array> $languageStrings - language specific string which is used in translations
- * @param <String> $module - module Name
- * @return <array> - array if module has language strings else returns empty array
- */
- public static function getModuleStringsFromFile($language, $module='Vtiger'){
- $module = str_replace(':', '.', $module);
- if(empty(self::$languageContainer[$language][$module])){
- //Search in customized folder where the users translated string are placed
- $qualifiedName = 'languages.'.$language.'.custom.'.$module;
- $customizedLangFile = Vtiger_Loader::resolveNameToPath($qualifiedName);
- $qualifiedName = 'languages.'.$language.'.'.$module;
- $file = Vtiger_Loader::resolveNameToPath($qualifiedName);
- $languageStrings = $jsLanguageStrings = array();
- if(file_exists($file)){
- require $file;
- self::$languageContainer[$language][$module]['languageStrings'] = $languageStrings;
- self::$languageContainer[$language][$module]['jsLanguageStrings'] = $jsLanguageStrings;
- }
- // Override the user custom strings from the language/custom folder
- if(file_exists($customizedLangFile)){
- require $customizedLangFile;
- $baseModuleStrings = self::$languageContainer[$language][$module]['languageStrings'];
- if(!$baseModuleStrings) $baseModuleStrings = array();
- $languageStrings = array_merge($baseModuleStrings, $languageStrings);
- self::$languageContainer[$language][$module]['languageStrings'] = $languageStrings;
- $baseModuleJSStrings = self::$languageContainer[$language][$module]['jsLanguageStrings'];
- if(!$baseModuleJSStrings) $baseModuleJSStrings = array();
- $jsLanguageStrings = array_merge($baseModuleJSStrings, $jsLanguageStrings);
- self::$languageContainer[$language][$module]['jsLanguageStrings'] = $jsLanguageStrings;
- }
- }
- return self::$languageContainer[$language][$module];
- }
- /**
- * Function that returns current language
- * @return <String> -
- */
- public static function getLanguage() {
- $userModel = Users_Record_Model::getCurrentUserModel();
- $language = '';
- if (!empty($userModel)) {
- $language = $userModel->get('language');
- }
- return empty($language)? vglobal('default_language') : $language;
- }
- /**
- * Function returns module strings
- * @param <String> $module - module Name
- * @param <String> languageStrings or jsLanguageStrings
- * @return <Array>
- */
- public static function export($module, $type='languageStrings') {
- $userSelectedLanguage = self::getLanguage();
- $defaultLanguage = vglobal('default_language');
- $languages = array($userSelectedLanguage);
- //To merge base language and user selected language translations
- if($userSelectedLanguage != $defaultLanguage) {
- array_push($languages, $defaultLanguage);
- }
-
-
- $resultantLanguageString = array();
- foreach($languages as $currentLanguage) {
- $exportLangString = array();
- $moduleStrings = self::getModuleStringsFromFile($currentLanguage, $module);
- if(!empty($moduleStrings[$type])) {
- $exportLangString = $moduleStrings[$type];
- }
- // Lookup for the translation in base module, in case of sub modules, before ending up with common strings
- if(strpos($module, '.') > 0) {
- $baseModule = substr($module, 0, strpos($module, '.'));
- if($baseModule == 'Settings') {
- $baseModule = 'Settings.Vtiger';
- }
- $moduleStrings = self::getModuleStringsFromFile($currentLanguage, $baseModule);
- if(!empty($moduleStrings[$type])) {
- $exportLangString += $commonStrings[$type];
- }
- }
- $commonStrings = self::getModuleStringsFromFile($currentLanguage);
- if(!empty($commonStrings[$type])) {
- $exportLangString += $commonStrings[$type];
- }
- $resultantLanguageString += $exportLangString;
- }
- return $resultantLanguageString;;
- }
- /**
- * Function to returns all language information
- * @return <Array>
- */
- public static function getAllLanguages(){
- return Vtiger_Language::getAll();
- }
- /**
- * Function to get the label name of the Langauge package
- * @param <String> $name
- */
- public static function getLanguageLabel($name) {
- $db = PearDatabase::getInstance();
- $languageResult = $db->pquery('SELECT label FROM vtiger_language WHERE prefix = ?', array($name));
- if($db->num_rows($languageResult)) {
- return $db->query_result($languageResult, 0, 'label');
- }
- return false;
- }
- }
- function vtranslate($key, $moduleName='') {
- $args = func_get_args();
- return call_user_func_array(array('Vtiger_Language_Handler', 'getTranslatedString'), $args);
- }
- function vJSTranslate($key, $moduleName='') {
- $args = func_get_args();
- return call_user_func_array(array('Vtiger_Language_Handler', 'getJSTranslatedString'), $args);
- }