SugarCRM源码分析之国际化语言
来源:互联网 发布:android 解析json 编辑:程序博客网 时间:2024/05/21 06:59
本篇主要分析下SugarCRM中的语言包源码。
./include/entryPoints.phpSugarApplication::preLoadLanguages();/** * Load only bare minimum of language that can be done before user init and MVC stuff */static function preLoadLanguages(){ if (!empty($_SESSION['authenticated_user_language'])) { $GLOBALS['current_language'] = $_SESSION['authenticated_user_language']; } else { // 加载配种文件中的默认语言zh_ch $GLOBALS['current_language'] = $GLOBALS['sugar_config']['default_language']; } // 记录日志,若要执行,需把配置文件中的level改为debug $GLOBALS['log']->debug('current_language is: ' . $GLOBALS['current_language']); // set module and application string arrays based upon selected language // 获取语言包 $GLOBALS['app_strings'] = return_application_language($GLOBALS['current_language']);}function return_application_language($language){ // $app_strings、$app_list_strings存放的都是语言包的译文 // 首次进来都为null global $app_strings, $app_list_strings, $sugar_config; // app_strings.zh_cn $cache_key = 'app_strings.'.$language; // Check for cached value // 第一次没有 $cache_entry = sugar_cache_retrieve($cache_key); if (!empty($cache_entry)) { return $cache_entry; } $temp_app_strings = $app_strings; $temp_app_list_strings = $app_list_strings; $default_language = !empty($sugar_config['default_language']) ? $sugar_config['default_language'] : $language; $langs = array(); if ($language != 'en_us') { $langs[] = 'en_us'; } if ($default_language != 'en_us' && $language != $default_language) { $langs[] = $default_language; } /* Array ( [0] => en_us [1] => zh_CN ) */ $langs[] = $language; $app_strings_array = array(); foreach ($langs as $lang) { $app_list_strings = array(); foreach(SugarAutoLoader::existing( "include/language/$lang.lang.php", "include/language/$lang.lang.override.php", "include/language/$lang.lang.php.override", "custom/application/Ext/Language/$lang.lang.ext.php", "custom/include/language/$lang.lang.php" ) as $file) { include $file; $GLOBALS['log']->info("Found language file: $file"); } $app_strings_array[] = $app_strings; } // 把二维的$app_strings_array数组变为一维$app_strings的 $app_strings = array(); foreach ($app_strings_array as $app_strings_item) { $app_strings = sugarLangArrayMerge($app_strings, $app_strings_item); } if (!isset($app_strings)) { $GLOBALS['log']->fatal("Unable to load the application language strings"); return null; } // If we are in debug mode for translating, turn on the prefix now! if (!empty($sugar_config['translation_string_prefix'])) { foreach ($app_strings as $entry_key=>$entry_value) { $app_strings[$entry_key] = $language.' '.$entry_value; } } if (isset($_SESSION['show_deleted'])) { $app_strings['LBL_DELETE_BUTTON'] = $app_strings['LBL_UNDELETE_BUTTON']; $app_strings['LBL_DELETE_BUTTON_LABEL'] = $app_strings['LBL_UNDELETE_BUTTON_LABEL']; $app_strings['LBL_DELETE_BUTTON_TITLE'] = $app_strings['LBL_UNDELETE_BUTTON_TITLE']; $app_strings['LBL_DELETE'] = $app_strings['LBL_UNDELETE']; } // 返回热键,若是没有HTTP_USER_AGENT的话alt+ $app_strings['LBL_ALT_HOT_KEY'] = get_alt_hot_key(); $return_value = $app_strings; $app_strings = $temp_app_strings; $app_list_strings = $temp_app_list_strings; // 放入缓存 sugar_cache_put($cache_key, $return_value); return $return_value;}function sugarLangArrayMerge($gimp, $dom){ if (is_array($gimp) && is_array($dom)) { foreach ($dom as $domKey => $domVal) { if (isset($gimp[$domKey])) { if (is_array($domVal)) { $tempArr = array(); foreach ( $domVal as $domArrKey => $domArrVal ) if (!empty($domArrVal)) // SP-1818: should not overwrite if string is empty $tempArr[$domArrKey] = $domArrVal; foreach ( $gimp[$domKey] as $gimpArrKey => $gimpArrVal ) if ( !isset($tempArr[$gimpArrKey]) ) $tempArr[$gimpArrKey] = $gimpArrVal; $domVal = $tempArr; } if (!empty($domVal)) { // SP-1818: should not overwrite if string is empty $gimp[$domKey] = $domVal; } } else { $gimp[$domKey] = $domVal; } } } // if the passed value for gimp isn't an array, then return the $dom elseif (is_array($dom)) { return $dom; } return $gimp;}function get_alt_hot_key(){ $ua = ''; if ( isset($_SERVER['HTTP_USER_AGENT']) ) $ua = strtolower($_SERVER['HTTP_USER_AGENT']); $isMac = strpos($ua, 'mac') !== false; $isLinux = strpos($ua, 'linux') !== false; if (!$isMac && !$isLinux && strpos($ua, 'mozilla') !== false) { if (preg_match('/firefox\/(\d)?\./', $ua, $matches)) { return $matches[1] < 2 ? 'Alt+' : 'Alt+Shift+'; } } return $isMac ? 'Ctrl+' : 'Alt+';}
代码分析完后,了解了./include/language存放的是SugarCRM通用的语言配置,也就是下载了SugarCRM之后就有的,如果想配置个性化的,那么需要在./custome/inclde/language里配置,前提是在配置文件里加上本地默认的语言选项('default_language' => 'zh_CN')。
0 0
- SugarCRM源码分析之国际化语言
- SugarCRM源码分析之loadFileMap
- SugarCRM源码分析之loadComposer
- SugarCRM源码分析之数据库连接
- SugarCRM源码分析之日志
- SugarCRM源码分析之钩子
- SugarCRM源码分析之缓存
- SugarCRM源码分析之ControllerFactory
- SugarCRM源码分析之ViewFactory
- SugarCRM源码分析之BeanFactory
- SugarCRM源码分析之加载配置
- SugarCRM源码分析之SugarAutoLoader::init
- SugarCRM源码分析之日期时间
- SugarCRM源码分析之本地化货币
- SugarCRM之SugarAutoLoader类分析
- SugarCRM之entryPoint文件分析
- SugarCRM之ControllerFactory类分析
- Android 之 语言 国际化
- QT控件中布局QLabel让其自适应大小自动换行遇到的问题
- 关于支付(支付宝和微信)
- Hibernate学习笔记(2)之集合配置
- 3171: [Tjoi2013]循环格 费用流
- jQuery选择器下
- SugarCRM源码分析之国际化语言
- UITabBarController 在storyboard的实现
- SpringMVC+Mybatis框架整合源码 项目
- iOS 圆形图片
- viewport
- 分手后,甭想这些星座会跟你念旧情
- web标签页,web网页的图标设置
- Python下载大全
- 最小生成树