Magento Отображение соответствующей локализации в зависимости от местоположения


17

Я хотел бы настроить сайт Magento так, чтобы он мог распознавать язык по умолчанию и местоположение пользователя и отображать сайт на этом языке и с соответствующей локализацией.

Например:

Пользователь из России с русским языком по умолчанию сразу перейдет на сайт на русском языке с рублями в качестве валюты и цен по умолчанию.

Это возможно? Если так, то как?

Ответы:


14

GeoIP и Store Views помогут вам решить эту проблему.

GeoIP Вы можете использовать провайдера, такого как MaxMind, для своей базы данных GeoIP (или загрузить его как модуль веб-сервера, который добавляет страну в заголовок).

Основываясь на IP-адресе, вы можете перенаправить клиента к нужному представлению магазина (проверьте ссылку, созданную переключателем представления магазина.

Store Views

Русским должен быть магазинный вид. Проверьте переключатель магазина, чтобы увидеть, какую ссылку вам нужно использовать для ваших клиентов.

После перенаправления вы можете установить cookie, чтобы связать клиента с представлением магазина.


Мы также использовали GeoIP для переключения нескольких блоков на сайте, чтобы изменить такие вещи, как наше сообщение о бесплатной доставке
Adam Justice

1
3 вещи, на которые следует обратить внимание по этой теме: (1) Если посетитель использует прокси-сервер в другой стране или IP-адрес не совпадает, он может захотеть перейти на другой веб-сайт сам. Сделай это возможным. (2) Различать локализацию и перевод. Например, используйте GeoIP для локализации и языковых приемочных заголовков для переводов (русский сайт с русским / английским языком, швейцарский сайт с немецким / итальянским / французским языком). Смотрите ответ ниже . (3) Если у вас разные цены (или другая базовая валюта) для России, создайте для нее специальный веб-сайт.
Матиас Цейс

9

Существует расширение Magento GeoIP (написанное мной), которое загружает последний файл данных MaxMind и периодически обновляет его.

Я предлагаю подключиться к controller_front_init_beforeсобытию. Вы можете использовать следующий код, чтобы проверить получение кода ISO 3166-1 страны посетителя, а затем перенаправить его в основной магазин, если он у вас есть:

$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загрузке магазина, соответствующее языку.


Язык да, но проблема не только в языке, но и в географическом положении.
Карлсон

Вы можете использовать гео API Maxmind или любой другой бесплатный гео сервис для переключения. Я использую maxmind из-за их высокой точности ( maxmind.com/en/geolocation_landing )
Сандер Мангель

Что вы хотите сделать, если пользователь в настоящее время находится в России, но его язык - en-US? Местоположение часто менее информативно (и точно), чем Accept-Language.
Кодзиро

@kojiro Я бы пошел на http принять язык в первую очередь. Вы правы, местоположение говорит немного о каком-то языке
Сандер Мангель

1
Будьте осторожны, одиночная ссылка считается плохим ответом, поскольку она сама по себе бессмысленна, и целевой ресурс не гарантированно будет жив в будущем . Было бы предпочтительно включить основные части ответа здесь и предоставить ссылку для справки.
J0K

5

Еще одна вещь, на которую стоит обратить внимание - это GEO IP.

Пара строк кода даст вам код страны пользователя, который вы можете переключать в зависимости от этого.

Но обратите внимание, что у вас будут проблемы с использованием любого кода на основе перенаправления, если вы используете то же хранилище с Enterprise Edition и Full Page Cache, что и кэширование первой страницы .


Хороший вопрос о кешировании. Вы должны выяснить, как Vary: Accept-Languageв заголовке для браузера и FPC.
Кодзиро

Хотите добавить некоторые подробности о вашей последней заметке относительно FPC? Я заинтригован, если не сказать больше.
nevvermind

У меня возникла проблема с использованием модуля, который использует GEO IP и перенаправляет пользователя в нужное хранилище на основе кода страны. Это не удалось, и после отладки наблюдатель никогда не вызывался, когда страница кэшировалась с использованием FPC, в действительности вызывался только один наблюдатель, поскольку FPC кэшировал полный сценарий, не выполняющий magento-код.
Джейми Теума

Я знаю, что другой разработчик создавал сценарий в index.php как обходной путь, но не уверен, был ли он успешным или нет, поэтому не могу комментировать ЕЩЕ !!
Джейми Теума

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-файлам, поэтому вам следует помнить об этом.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.