需求: 前台默认使用英文(en_us),可选择使用中文(zh_cn),同时英文页面依然是英文。 思路: 通过在访问的url上加上 lang=zh_cn变量来使用中文,没有lang变量的时候使用默认的语言 方案: 当url没有lang变量的时候,如果已登录用户设置了$_SESSION['lang'],
需求:
前台默认使用英文(en_us),可选择使用中文(zh_cn),同时英文页面依然是英文。
思路:
通过在访问的url上加上 lang=zh_cn变量来使用中文,没有lang变量的时候使用默认的语言
方案:
当url没有lang变量的时候,如果已登录用户设置了$_SESSION['lang'],则使用$_SESSION['lang']作为默认语言,如果未登录用户设置了$_COOKIE['lang'],则使用$_COOKIE['lang']作为默认语言,否则使用’en_us’作为默认语言。
实现:
0、使程序支持url传入lang=zh_cn或lang=en_us后加载该语言包
打开includes/init.php,在代码$_CFG = load_config();后加代码:
$_CFG['lang'] = 'en_us'; // 前台默认使用英语
$langList = array('zh_cn', 'en_us'); // 允许使用的语言
if (!empty($_REQUEST['lang']) && in_array($_REQUEST['lang'], $langList)) {
$_CFG['lang'] = $_REQUEST['lang']; // 通过URL传递的语言参数
}然后在
if ((DEBUG_MODE & 1) == 1)
之前加上:
// 如果用户自定义默认语言则重新加载语言
if (empty($_REQUEST['lang']) || !in_array($_REQUEST['lang'], $langList)) {
if (!empty($_SESSION['lang']) && in_array($_SESSION['lang'], $langList) && $_SESSION['lang'] != $_CFG['lang']) {
$_CFG['lang'] = $_SESSION['lang'];
require(ROOT_PATH . 'languages/' . $_CFG['lang'] . '/common.php');
$smarty->assign('lang', $_LANG);
} else if (!empty($_COOKIE['lang']) && in_array($_COOKIE['lang'], $langList) && $_COOKIE['lang'] != $_CFG['lang']) {
$_CFG['lang'] = $_COOKIE['lang'];
require(ROOT_PATH . 'languages/' . $_CFG['lang'] . '/common.php');
$smarty->assign('lang', $_LANG);
}
}1、实现在url后面添加语言标识的函数
/**
* url添加语言标识
*/
function url_lang($url) {
if (!empty($_GET['lang']) && $url[0] != '#' && !preg_match("/[&?]lang=(.*?)/", $url)) {
$anchor = strstr($url, '#'); // 锚需要放在请求变量之后
if($anchor) {
$url = str_replace($anchor, '', $url); //去掉锚
}
// url中已经有请求变量这加上"&lang=$_GET['lang']",否则加上 "?lang=$_GET['lang']"
$url .= (strpos($url, '?') !== false ? '&' : '?').'lang='.$_GET['lang'];
$url .= $anchor; //加上锚
}
return $url;
}2、修改build_uri()函数
//在return $uri;前加上:
$uri = url_lang($uri);
3、添加在模板中将变量如{$var}改为{$var|url}的方式让程序自动识别是否需要加上lang=zh_cn|en_us
在cls_template::get_val()函数的default:之前添加一个case,代码如下:
case 'url' :
$p = 'url_lang(' . $p . ', 1)';
break;4、在模板中加上站内链接可识别是否需要加上lang=zh_cn|en_us(站外链接不需要加)
4.1 在模板中以单个变量作为url的,把{$xxx}改为{$xxx|url}
4.2 在模板中以多个变量作为url并且没有其他字符串的,把第一个变量改为{$xxx|url}
4.3 在模板中以变量混合字符串作为url的,在url尾部根据需要加上
{if $smarty.get.lang}&lang={$smarty.get.lang}{/if} 或 {if $smarty.get.lang}?lang={$smarty.get.lang}{/if}
5、修改前台程序中的跳转url
————————————
方案2:如果只需要一个页面设置语言,其它页面同时跟着变,这样就容日很多,我们可以通过cookie来就可以了
1、设置语言
在需要设置语言的url上加上 lang=xxx&set_lang=1
2、使用不同语言
/* 载入系统参数 */
$_CFG = load_config();
// simon: 选择使用语言
$_CFG['lang'] = 'en_us'; // 前台默认使用英语
// 港澳台浏览器默认使用繁体中文
if(preg_match("/(zh\-tw)|(zh\-hk)|(zh\-mo)|(zh\-hant)/i", $_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$_CFG['lang'] = 'zh_tw';
}
// 大陆和新加坡版本浏览器默认使用简体中文
elseif(preg_match("/(zh\-cn)|(zh\-sg)|(zh\-hans)/i", $_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$_CFG['lang'] = 'zh_cn';
}
if (!empty($_REQUEST['lang']) || !empty($_COOKIE['lang'])){
$lang = empty($_REQUEST['lang']) ? $_COOKIE['lang'] : $_REQUEST['lang'];
if(in_array($lang, array('zh_cn', 'zh_tw', 'en_us'))) {
$_CFG['lang'] = $lang; // 通过URL传递的语言参数
}
}
/* 载入语言文件 */
require(ROOT_PATH . 'languages/' . $_CFG['lang'] . '/common.php');
// 默认语言设置
if(!empty($_GET['set_lang'])) {
setcookie('lang', $_CFG['lang'], time()+30*24*3600);
}原文地址:给ecshop添加可选择多语言, 感谢原作者分享。
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号