Rumah php教程 php手册 给ecshop添加可选择多语言

给ecshop添加可选择多语言

Jun 06, 2016 pm 08:07 PM
ecshop guna Tambah ke Britain bahasa perlukan lalai

需求: 前台默认使用英文(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传递的语言参数
}
Salin selepas log masuk

然后在
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);
    }
}
Salin selepas log masuk

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;
}
Salin selepas log masuk

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;
Salin selepas log masuk

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);
}
Salin selepas log masuk
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah perisian crystaldiskmark? -Bagaimana menggunakan crystaldiskmark? Apakah perisian crystaldiskmark? -Bagaimana menggunakan crystaldiskmark? Mar 18, 2024 pm 02:58 PM

Apakah perisian crystaldiskmark? -Bagaimana menggunakan crystaldiskmark?

Bagaimana untuk menambah TV pada Mijia Bagaimana untuk menambah TV pada Mijia Mar 25, 2024 pm 05:00 PM

Bagaimana untuk menambah TV pada Mijia

Bagaimana untuk memuat turun foobar2000? -Cara menggunakan foobar2000 Bagaimana untuk memuat turun foobar2000? -Cara menggunakan foobar2000 Mar 18, 2024 am 10:58 AM

Bagaimana untuk memuat turun foobar2000? -Cara menggunakan foobar2000

Cara menggunakan aplikasi Baidu Netdisk Cara menggunakan aplikasi Baidu Netdisk Mar 27, 2024 pm 06:46 PM

Cara menggunakan aplikasi Baidu Netdisk

Cara menggunakan NetEase Mailbox Master Cara menggunakan NetEase Mailbox Master Mar 27, 2024 pm 05:32 PM

Cara menggunakan NetEase Mailbox Master

Ajar anda cara menggunakan ciri lanjutan baharu iOS 17.4 'Perlindungan Peranti Dicuri' Ajar anda cara menggunakan ciri lanjutan baharu iOS 17.4 'Perlindungan Peranti Dicuri' Mar 10, 2024 pm 04:34 PM

Ajar anda cara menggunakan ciri lanjutan baharu iOS 17.4 'Perlindungan Peranti Dicuri'

Tutorial BTCC: Bagaimana untuk mengikat dan menggunakan dompet MetaMask pada pertukaran BTCC? Tutorial BTCC: Bagaimana untuk mengikat dan menggunakan dompet MetaMask pada pertukaran BTCC? Apr 26, 2024 am 09:40 AM

Tutorial BTCC: Bagaimana untuk mengikat dan menggunakan dompet MetaMask pada pertukaran BTCC?

Cara menggunakan cdkey kotak hitam kecil Cara menggunakan cdkey kotak hitam kecil Mar 12, 2024 pm 07:34 PM

Cara menggunakan cdkey kotak hitam kecil

See all articles