Magento根据位置显示适当的本地化


17

我想将Magento网站配置为能够识别用户的默认语言和位置,并以该语言和适当的本地化显示该网站。

例如:

来自俄罗斯的默认俄语用户将直接使用卢布作为默认货币和价格进入俄语网站。

这可能吗?如果可以,怎么办?

Answers:


14

GeoIP和商店视图将帮助您解决此问题。

GeoIP 您可以为您的GeoIP数据库使用MaxMind这样的提供程序(或将其加载为在标题中添加国家/地区的网络服务器模块)。

根据IP地址,您可以将客户重定向到正确的商店视图(检查商店视图切换器生成的链接。

商店视图

俄语应该是商店视图。检查商店视图切换器,以了解需要用于客户的链接是什么。

重定向后,您可以设置cookie以将客户与商店视图相关联。


我们还使用了GeoIP来切换网站上的几个街区,以更改诸如免费送货消息之类的内容
Adam Justice

1
在此主题上需要注意的三件事:(1)如果访问者在另一个国家使用代理或IP不匹配,则他可能希望自己切换到其他网站。使这成为可能。(2)区分本地化和翻译。例如,使用GeoIP进行本地化,并使用翻译的语言接受标头(使用俄语/英语的俄罗斯网站,使用德语/意大利语/法语的瑞士网站)。请参阅下面的答案。(3)如果您对俄罗斯有不同的价格(或不同的基础货币),请为此创建一个专用网站。
马提亚斯·蔡斯

9

Magento GeoIP扩展(由我编写)可下载最新的MaxMind数据文件并定期更新。

我建议参加controller_front_init_before活动。您可以使用以下代码检查是否获得了访客所在国家/地区的ISO 3166-1代码,然后将其重定向到corespondent商店视图(如果有):

$geoIP = Mage::getSingleton('geoip/country');
$code = $geoIP->getCountry();

/*
 * Check if store view for this country/language exists and it is not a current store view. 
 * If so do a redirect.
 * You can also take a language from user agent into consideration.
 */

有关使用此扩展程序的详细文章,可以在这里找到。


5

如果可以编程,请访问http://www.thefutureoftheweb.com/blog/use-accept-language-header。您可以在index.php加载适合该语言的storeview中进行切换。


语言是的,但问题不仅在于语言,还在于地理位置。
卡森

您可以使用Maxmind geo API或任何其他免费的geo服务进行切换。我使用的,因为它们的精度高(中的MaxMind maxmind.com/en/geolocation_landing
桑德甜菜

如果用户当前在俄罗斯,但是他的语言是en-US,您想怎么办?位置通常比“接受语言”信息量少(准确)。
kojiro

@kojiro我会先使用http接受语言。你说得对,小的位置说,关于一些的人的语言
桑德甜菜

1
请注意,孤立链接被认为是一个糟糕的答案,因为它本身就毫无意义,并且不能保证目标资源在将来仍然有效最好在此处包括答案的基本部分,并提供链接以供参考。
13年

5

另一件事要看的是GEO IP。

几行代码将为您提供用户国家代码,您可以根据此代码进行切换。

但是请注意,如果您使用与Enterprise Edition和Full Page Cache相同的存储(因为第一页命中被缓存),则使用任何基于重定向的代码时都会遇到问题


关于缓存的要点。您必须弄清楚如何Vary: Accept-Language在浏览器和FPC的标题中。
kojiro

想要添加有关您最后一次有关FPC的注释的细节吗?至少可以说,我对此很感兴趣。
nevvermind

我在使用使用GEO IP并根据国家/地区代码将用户重定向到正确商店的模块时遇到问题。这失败了,并且在调试之后,当使用FPC缓存页面时,从未调用过观察者,实际上只有一个观察者被调用,因为FPC缓存了不运行任何magento代码的完整脚本。
Jamie Teuma

我知道另一位开发人员正在围绕index.php构建脚本,但是不确定是否成功,所以还不能发表评论!
Jamie Teuma

4

另一个选择是使用PHP的auto_prepend配置。这将导致由PHP处理运行该脚本的所有脚本之前实际请求的脚本运行,但之后的.htaccess(如果你正在使用的)。

这种方法与其他一些建议(例如,使用MaxMind来获取地理位置数据并存储特定区域的视图)相结合,可以得出一种非常干净的方法。

如果您正在运行Magento> = 1.4的版本,则可以通过设置$ _SERVER ['MAGE_RUN_CODE']值来配置默认商店代码。

在.htaccess文件或apache的配置中,添加以下内容:

php_value auto_prepend_file /var/www/mystore/path/to/script.php

script.php执行任何必要的业务逻辑并设置适当的商店代码时:

<?php
if (get_ip_location($_SERVER['REMOTE_ADDR']) == 'uk') {
    $_SERVER['MAGE_RUN_CODE'] = 'store_code_uk';
} else {
    $_SERVER['MAGE_RUN_CODE'] = 'store_code_us';
}

需要注意的一件事是,这将适用于所有请求的PHP文件,因此您需要牢记这一点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.