Magento商店语言切换

时间:2013-09-13 09:14:49

标签: magento

我有一个2种语言的magento商店。语言切换器可以在URL中设置不同的商店视图。

  • /shop/?___store=myshop_view for mainlanguage
  • /shop/?___store=myshop_view_fr for french

这很好,它应该如何工作。 现在第一个问题出现在我在法国商店并用/shop/?___store=myshop_view切换到主语言时,现在我在主语言中看到了商店,但是当我在没有任何商店视图参数的情况下调用/shop/时它会切换回法语。为什么会这样,我能改变吗?

第二个问题是外部添加到卡链接。添加到卡片链接看起来像:/shop/checkout/cart/add/uenc/aHR0cDovL3d3dy5teS13aW5lLmNoLnJ1dGlzaGF1c2VyLm5pbmUuY2gv/product/2169/?___SID=U&___store=myshop_view 所以这个链接是主要语言。如果商店之前是法语,我点击此链接,我会用主要语言获得成功消息,但商店的其余部分再次是法语。

我认为第一和第二个问题几乎相同。然后,添加到卡片链接将重定向到商店概览,而网址中没有任何商店视图参数。

知道如何才能获得可以切换商店语言的卡片链接吗?

2 个答案:

答案 0 :(得分:0)

正如@RohitS所说​​。 Magento将商店视图保存在cookie中,使用url可以临时更改商店视图,但cookie中的值仍然相同。

好的是,外部添加到卡片链接位于子域,因此我能够为洞域设置cookie(通过在域名之前添加一个点:.domain.com)。在cookie中我只需设置document.cookie = "store=myshop_view_fr;path=/;domain=.my-shop.com";路径属性对我来说很重要,因为商店在/ shop /.

答案 1 :(得分:0)

您可以根据访问者的位置将访问者切换到他们首选语言的商店视图。

首先,请确保满足以下配置设置。

·您的Web服务器必须启用mod_rewrited。

·启用URL重写(管理面板→系统→配置→Web→URL选项→使用Web服务器重写→是)。

·在网址中启用商店代码(管理员面板→系统→配置→网络→网址选项→将商店代码添加到网址→是)。

接下来,您必须创建商店视图。这里我们创建2个商店视图。英语和西班牙语。

英文商店视图

·转到管理商店(管理员面板→系统→管理商店)。

·创建新的商店视图

·将商店和名称设置为适当的值(例如,默认商店和英语)

·将代码设置为国家/地区代码,在本例中为en。这是与浏览器区域设置匹配的值。

·排序顺序应保持为零(0),因为这将是我们的默认语言。

对西班牙商店视图执行相同操作,但在这种情况下将订单设置为1。

最后,我们必须修改index.php以在访问者访问主商店网址时启用重定向,如下所示。

require_once 'app/Mage.php';

/* Determine correct language store based on browser */

function getStoreForLanguage()

{

if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {

foreach (explode(",", strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE'])) as $accept) {

if (preg_match("!([a-z-]+)(;q=([0-9.]+))?!", trim($accept), $found)) {

$langs[] = $found[1];

$quality[] = (isset($found[3]) ? (float) $found[3] : 1.0);

}

}

// Order the codes by quality

array_multisort($quality, SORT_NUMERIC, SORT_DESC, $langs);

// get list of stores and use the store code for the key

$stores = Mage::app()->getStores(false, true);

// iterate through languages found in the accept-language header

foreach ($langs as $lang) {

$lang = substr($lang,0,2);

if (isset($stores[$lang]) && $stores[$lang]->getIsActive()) return $stores[$lang];

}

}

return Mage::app()->getStore();

}

/* Auto redirect to language store view if request is for root */

if ($_SERVER['REQUEST_URI'] === '/') {

header('Location: '.getStoreForLanguage()->getBaseUrl());

exit;

}

#Varien_Profiler::enable();

#Mage::setIsDeveloperMode(true);

#ini_set('display_errors', 1);

umask(0);

Mage::run();