/** * Detect language based on user preference or browser's setting * * @access public * @return void */ function detect_lang() { // 加载语言配置文件 $config = CI()->load->config('lang', TRUE); // 获取 URL 中的语言参数,比如 somepage?lang=zh-cn $lang = CI()->input->get('lang') ? CI()->input->get('lang', TRUE) : ''; // 是否为空? if (!empty($lang)) { // 安全过滤 $lang = get_lang_code($lang); // 记住用户的语言选择,一年后过期 set_cookie(array('name' => 'lang', 'value' => $lang, 'expire' => 31536000)); } elseif (CI()->session->userdata('lang')) { $lang = CI()->session->userdata('lang'); } elseif (get_cookie('lang')) { $lang = get_cookie('lang', TRUE); } else { if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { // 将浏览器接收的全部语言分隔成数组 $accept_langs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); log_message('debug', 'Checking browser languages: ' . implode(', ', $accept_langs)); // 依次检查,直到我们找到STCMS支持的那一种语言 foreach ($accept_langs as $lang) { // 将en-gb,en-us,en-au统统转化成en,但需要保留zh-tw,zh-cn,zh-hk这样的中文语系代码 $lang = get_lang_code($lang); // 检查是否有语言包支持,如果有则完成检测 if (in_array($lang, array_keys($config['supported_langs']))) { break; } } } } // 没有检测到任何语言的支持,只能使用默认的语言 if (empty($lang) or !array_key_exists($lang, $config['supported_langs'])) { $lang = $config['default_lang']; } // 将最后决定的语言代码保存在session中 CI()->session->userdata('lang') or CI()->session->set_userdata('lang', $lang); // 动态设置语言 CI()->config->set_item('language', $config['supported_langs'][$lang]['folder']); // 设置一个应用程序级的语言代码常数 define('CURRENT_LANG', $lang); }
* as published by the Free Software Foundation. * * @package TomatoCart * @author TomatoCart Dev Team * @copyright Copyright (c) 2009 - 2012, TomatoCart. All rights reserved. * @license http://www.gnu.org/licenses/gpl.html * @link http://tomatocart.com * @since Version 2.0 * @filesource */ require_once 'helpers/general_helper.php'; ?> <!DOCTYPE html> <html lang="<?php echo get_lang_code(); ?> "> <head> <meta charset="utf-8"> <link rel="shortcut icon" href="<?php echo base_url('images/tomatocart.ico'); ?> " type="image/x-icon" /> <title><?php echo $template['title']; ?> </title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
$tpl_main = str_replace('<pun_title>', '<h1><span>' . pun_htmlspecialchars($pun_config['o_board_title']) . '</span></h1>', $tpl_main); // END SUBST - <pun_title> // START SUBST - <pun_desc> $tpl_main = str_replace('<pun_desc>', '<p><span>' . $pun_config['o_board_desc'] . '</span></p>', $tpl_main); // END SUBST - <pun_desc> // START SUBST - <pun_navlinks> $tpl_main = str_replace('<pun_navlinks>', '<div id="brdmenu" class="inbox">' . "\n\t\t\t" . generate_navlinks() . "\n\t\t" . '</div>', $tpl_main); // END SUBST - <pun_navlinks> // START SUBST - <pun_status> // If no header style has been specified, we use the default $footer_style = isset($footer_style) ? $footer_style : NULL; $is_admmod = isset($is_admmod) ? $is_admmod : false; $is_admmod_2 = $pun_user['g_id'] == PUN_ADMIN || $pun_user['g_id'] == PUN_MOD ? true : false; $is_assoc = in_array($pun_user['g_id'], explode(', ', PUN_ASSOCIATION)) ? true : false; $is_v6 = in_array($pun_user['g_id'], explode(', ', PUN_V6)) ? true : false; $lang = get_lang_code(); if (!isset($forum_id)) { switch ($pun_user['language']) { case 'French': $forum_id = 24; break; case 'Italian': $forum_id = 41; break; case 'German': $forum_id = 61; break; case 'English': $forum_id = 58; break; case 'Spanish':
function get_lang_option($prefix = '') { global $pun_user; if (empty($pun_user['language'])) { return ''; } $lang = get_lang_code(); return $prefix . 'lang=' . $lang; }