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/ 则是默认英语。 三、关于多语言绑定子域名 使用子域名方式绑定语言同样可以参考上列代码。
