6

我目前正在建立一个支持几种不同语言的 Magento 商店。

我遇到的一个问题是我不知道如何将两个 CMS 页面链接在一起,因此当用户切换他们的语言时,它们会自动转发到当前的 CMS 页面,但使用他们的首选语言。一种选择是对两个页面使用相同的 URL 键,但这对用户来说不是很友好,因为一些用户会看到不是以他们的母语显示的 URL 键。

让我给你举个例子:

我有一个“关于我们”页面。在商店的英文版中,该页面的 URL 是/about-us. 现在一个德国用户登陆该页面并切换他的语言。但是因为“About us”的德语等价物是“Über uns”,所以该页面的德语版本位于/ueber-uns,因此用户将看到一个 404 页面,因为不/about-us存在德语版本。

有谁知道如何解决这个问题?

更新:做了一些更多的研究,没有发现任何东西。我不敢相信我是唯一一个有这个问题的人?首选解决方案,对所有语言使用相同的 URL 键,看起来很丑陋,而且对用户不是很友好!

4

3 回答 3

10

因此,我找到的唯一解决方案是为Magento Rewrite Rules中的每个页面手动创建重定向。这样做,转到Catalog -> URL Rewrite Management并按以下格式添加每个页面:

在此处输入图像描述

因此,如果用户正在使用Francais商店视图和请求/url-in-english,重定向将启动并将用户重定向到/url-in-french

这当然不是一个理想的解决方案,如果可以直接“链接”两个页面,那将是首选,但我想我暂时必须使用它。如果有人提出更好的解决方案,请随时添加您的!

于 2013-06-17T11:25:54.850 回答
3

我在 Magento CE 1.8.0.0 中看到了这个错误。这里的问题是 \app\code\core\Mage\Core\Model\Url\Rewrite\Request.php 中的错误分配。

要解决此问题,只需将 Mage_Core_Model_Url_Rewrite_Request 类中受保护函数 _rewriteDb() 中的 $fromStore 分配从

$fromStore = $this->_request->getQuery('___from_store');

$fromStore = Mage::getModel('core/store')->load($this->_request->getQuery('___from_store'), 'code')->getId();

结果是我们可以使用正确的键(使用商店 id 而不是商店代码)访问 $stores 数组。有了这个 if 语句

 if (!empty($stores[$fromStore])) {

以正确的方式工作。

提醒一下:不要修改核心文件。在进行任何更改之前,只需将 \app\code\core\Mage\Core\Model\Url\Rewrite\Request.php 复制到 \app\code\local\Mage\Core\Model\Url\Rewrite\Request.php 即可。你会在这里找到这个德语答案:Rewrite von Seiten in verschiedenen Sprachen und verschiedenen URL Keys in Magento

于 2015-09-05T19:01:40.400 回答
0

上述解决方案有效,但需要一段时间。当在 cms 页面上转到基本 url 时,我们只是执行了以下操作来重写语言转换器 url:

在填充 $url 变量的部分之后添加以下代码app/design/frontend/default/template_name/template/page/switch/languages.html(在我们的

$url = /*explode( '?',*/$_lang->getCurrentUrl()/*);*/;

所以我们添加了以下内容:

if(($this->getRequest()->getModuleName() == 'cms') && strpos($url,'.com/')){$url = strstr($url, '.com/', true) . '.com/';}
elseif(($this->getRequest()->getModuleName() == 'cms') && strpos($url,'.de/')){$url = strstr($url, '.de/', true) . '.de/';}
elseif(($this->getRequest()->getModuleName() == 'cms') && strpos($url,'.nl/')){$url = strstr($url, '.nl/', true) . '.nl/';}

我在这里所做的是检查是否在 cms 页面上并检查 url 是否包含 .com/ ;.de/ 或 .nl 并剥离之前的部分,然后添加域扩展名。

在我们的示例中:http ://www.mega-watch.com/about-us?blabla将变为http://www.mega-watch.com/

希望这可以帮助某人..

于 2013-11-01T11:04:16.223 回答