网站开发 · 2025年4月26日

zencart绑定子目录实现多语言方法

ZenCart1.3 1.5系统,本身有多语言功能,但是多语言网站是在同一个域名下,通过URL动态参数切换的,这种方式针对目标客户体验不是很好,也不利于SEO。   本文介绍一种ZenCart的多语言绑定子目录方法,可以实现不同的子目录下不同的语言,并且切换语言时能准确定位到对应语言的URL。   希望可以对需要建多语言站的朋友有所帮助。   一、操作步骤   1. .htaccess 添加以下代码到 RewriteBase / 下,有其他语言代码请一并添加   RewriteRule ^(cn|es|en|fr|ru|it|de|ar)$ /$1/ [R=301,L] RewriteRule ^(cn|es|en|fr|ru|it|de|ar)/$ index\.php [L] 2. 添加以下代码到includes/configure.php下   define(‘DIR_TO_LANGUAGE’,TRUE);   if(DIR_TO_LANGUAGE===true){   list(,$LANGUAGE_DIR,$LANGUAGE_URL) = explode(‘/’,$_SERVER[“REQUEST_URI”]); $LANGUAGE_DIR = strtolower($LANGUAGE_DIR); if($LANGUAGE_DIR==”)$LANGUAGE_DIR=’en’; define(‘LANGUAGE_DIR’,$LANGUAGE_DIR);   if(isset($_REQUEST[‘main_page’]) && strpos($_REQUEST[‘main_page’],’/’)){ $_REQUEST[‘main_page’]=$_GET[‘main_page’]=trim(str_replace($LANGUAGE_DIR.’/’,”,$_REQUEST[‘main_page’]),’/’); }   } 3. 添加以下代码到includes/init_includes/init_languages.php下     if(DIR_TO_LANGUAGE===true && !isset($_GET[‘language’])){ if(LANGUAGE_DIR!=$_SESSION[‘languages_code’]){ if(!$lng) $lng = new language(); if (array_key_exists($LANGUAGE_DIR,$lng->catalog_languages)) { $lng->set_language($LANGUAGE_DIR); $_SESSION[‘language’] = (zen_not_null($lng->language[‘directory’]) ? $lng->language[‘directory’] : ‘english’); $_SESSION[‘languages_id’] = (zen_not_null($lng->language[‘id’]) ? $lng->language[‘id’] : 1); $_SESSION[‘languages_code’] = (zen_not_null($lng->language[‘code’]) ? $lng->language[‘code’] : ‘en’); } } } 4. 添加以下代码到includes/functions/html_output.php 并将原文件中的function zen_href_link(修改为function zen_href_link_old(     /** * 多语言绑定子目录重写zen_href_link方法 */ function zen_href_link($page = ”, $parameters = ”, $connection = ‘NONSSL’, $add_session_id = true, $search_engine_safe = true, $static = false, $use_dir_ws_catalog = true,$languages_code=null) {   $link = zen_href_link_old($page, $parameters, $connection, $add_session_id, $search_engine_safe, $static, $use_dir_ws_catalog); if(DIR_TO_LANGUAGE===true && $languages_code!==false){   if ( !(preg_match(‘/(.+)\.(html?|xml|css|js|png|jpe?g|gif|bmp|tiff?|ico|gz|zip|rar)$/i’, $page)) ) {   //指定要切换语言时   /* 以下内容支持不同语言不同的URL article_id pages_id products_id cPath manufacturers_id pID id=*/ if(strpos($parameters,’language=’)!==false &&(strpos($parameters,’id=’)!==false||strpos($parameters,’pID=’)!==false||strpos($parameters,’cPath=’)!==false) ){   $tmp = @explode(‘language=’, $parameters); $tmp = @explode(‘&’, $tmp[1]); $languages_code = $tmp[0];   $sefu = explode(“,”, preg_replace( ‘/ +/’, ”, SEO_URLS_ONLY_IN )); if((SEO_URLS_ONLY_IN!=””) && !in_array($page,$sefu)) {   }else{   if (!isset($GLOBALS[‘seo_urls_’.$code]) && !is_object($GLOBALS[‘seo_urls_’.$code])) { if(!$GLOBALS[‘lng’] || !is_object($GLOBALS[‘lng’])) $GLOBALS[‘lng’] = new language(); if (array_key_exists($languages_code,$GLOBALS[‘lng’]->catalog_languages)) { $GLOBALS[‘seo_urls_’.$languages_code] = &new SEO_URL($GLOBALS[‘lng’]->catalog_languages[$languages_code][‘id’]); } }   if($GLOBALS[‘seo_urls_’.$languages_code]){ $link = $GLOBALS[‘seo_urls_’.$languages_code]->href_link($page, $parameters, $connection, $add_session_id, $static, $use_dir_ws_catalog); } }   } //EOF   if($languages_code===null){ $languages_code = $_SESSION[‘languages_code’]; }   if ($connection == ‘NONSSL’) { $base_link = HTTP_SERVER; } elseif ($connection == ‘SSL’) { if (ENABLE_SSL == ‘true’) { $base_link = HTTPS_SERVER ; } else { $base_link = HTTP_SERVER; } } $link = str_replace($base_link,$base_link.’/’.$languages_code,$link);   }   } return $link; } 二、其他   1. 自动识别浏览器语言   如果需要针对特定的浏览器客户访问,自动切换到指定语言访问可以在ZENCART后台开启“LANGUAGE_DEFAULT_SELECTOR”参数,或者使用.htaccess 里的语言识别代码:     RewriteCond %{HTTP:Accept-Language} ^zh.*$ [NC] RewriteRule ^/?$  /zh/ [R=301,L]   RewriteCond %{HTTP:Accept-Language} ^en.*$ [NC] RewriteRule ^/?$  /en/ [R=301,L]   RewriteCond %{HTTP:Accept-Language} ^ch.*$ [NC] RewriteRule ^/?$  /cht/ [R=301,L] 到这里,多语言绑定到子目录方式已经设定完毕。   2. 前台效果   当客户访问:   http://ldhost.cn/cn/brands1-c-15/   http://ldhost.cn/cn/lids-atlanta-hawks-snaback-hat-nwf6091-mitchell-ness-for-chea-p-34.html   时会自动切换为中文,并且此页面所有链接都是带/cn/目录的,对搜索引擎的收录非常有利。       访问:   http://ldhost.cn/es/brands1-c-15/   http://ldhost.cn/es/taas-atlanta-hawks-snaback-hat-nwf6091-mitchell-ness-en-vuelos-p-34.html   时是西班牙语,注意URL文字已经是西班牙语的了。   访问:   http://ldhost.cn/en/brands1-c-15/   http://ldhost.cn/brands1-c-15/   则是默认英语。   三、关于多语言绑定子域名   使用子域名方式绑定语言同样可以参考上列代码。