我有一个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
所以这个链接是主要语言。如果商店之前是法语,我点击此链接,我会用主要语言获得成功消息,但商店的其余部分再次是法语。
我认为第一和第二个问题几乎相同。然后,添加到卡片链接将重定向到商店概览,而网址中没有任何商店视图参数。
知道如何才能获得可以切换商店语言的卡片链接吗?
答案 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();