Magento Mostrando la localización apropiada basada en la Ubicación

17

Me gustaría configurar el sitio de Magento para poder reconocer el idioma y la ubicación predeterminados del usuario y mostrar el sitio en ese idioma y con la localización adecuada.

Por ejemplo:

Un usuario de Rusia con el idioma ruso predeterminado irá directamente al sitio web del idioma ruso con rublos como moneda y precios predeterminados.

es posible? ¿Si es así, cómo?

Karlson
fuente

Respuestas:

14

GeoIP y Store Views lo ayudarán a resolver este problema.

GeoIP Puede usar un proveedor como MaxMind para su base de datos GeoIP (o cargarlo como un módulo de servidor web que agrega el país en el encabezado).

Según la dirección IP, puede redirigir al cliente a la Vista de tienda adecuada (verifique el enlace generado por el conmutador de vista de tienda.

Vistas de la tienda

El ruso debería ser una vista de tienda. Consulte el selector de vista de la tienda para ver cuál es el enlace que necesita usar para sus clientes.

Después de la redirección, puede configurar una cookie para asociar al cliente con la vista de la tienda.

FlorinelChis
fuente
También hemos usado GeoIP para cambiar algunos bloques en el sitio para cambiar cosas como nuestro mensaje de envío gratuito
Adam Justice,
1
3 cosas a tener en cuenta sobre este tema: (1) Si el visitante usa un proxy en otro país o la IP no coincide, es posible que desee cambiar a un sitio web diferente. Hazlo posible. (2) Diferenciar entre localización y traducción. Por ejemplo, use GeoIP para la localización y los encabezados de aceptación de idioma para las traducciones (sitio web ruso con idioma ruso / inglés, sitio web suizo con idioma alemán / italiano / francés). Ver la respuesta a continuación . (3) Si tiene precios diferentes (o una moneda base diferente) para Rusia, cree un sitio web dedicado para ello.
Matthias Zeis
9

Hay una extensión Magento GeoIP (escrita por mí) que descarga el último archivo de datos de MaxMind y lo actualiza periódicamente.

Sugiero enganchar al controller_front_init_beforeevento. Puede usar el siguiente código para verificar obtener el código ISO 3166-1 del país del visitante y luego redirigirlo a la vista de la tienda corresponsal si tiene uno:

$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.
 */

El artículo detallado sobre el uso de esta extensión se puede encontrar aquí .

usuario487772
fuente
5

eche un vistazo a http://www.thefutureoftheweb.com/blog/use-accept-language-header si puede programar. Puede hacer un cambio en la index.phpcarga de la vista de tienda adecuada para el idioma.

Sander Mangel
fuente
Idioma sí, pero el problema no es solo el idioma sino también la ubicación geográfica.
Karlson el
Puede utilizar la API geográfica de Maxmind o cualquier otro servicio geográfico gratuito para realizar el cambio. Uso maxmind debido a su alta precisión ( maxmind.com/en/geolocation_landing )
Sander Mangel
¿Qué quiere hacer si el usuario se encuentra actualmente en Rusia, pero su idioma es en EE. UU.? La ubicación es a menudo menos informativa (y precisa) que Accept-Language.
kojiro
@kojiro, primero iría por el lenguaje de aceptación http. tienes razón, la ubicación dice poco sobre el idioma de algunos
Sander Mangel
1
Tenga cuidado, el enlace solitario se considera una respuesta pobre ya que no tiene sentido por sí mismo y no se garantiza que el recurso objetivo esté vivo en el futuro . Sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
j0k
5

Otra cosa a tener en cuenta es GEO IP.

Un par de líneas de código le dará el código de país de los usuarios, que puede cambiar según eso.

Pero tenga en cuenta que tendrá problemas al usar cualquier código basado en la redirección si está usando la misma tienda con Enterprise Edition y Full Page Cache cuando se almacena en caché la primera página .

Jamie Teuma
fuente
Buen punto sobre el almacenamiento en caché. Tendría que averiguar cómo Vary: Accept-Languageen el encabezado tanto para el navegador como para el FPC.
kojiro
¿Le gustaría agregar algunos detalles sobre su última nota sobre FPC? Estoy intrigado, por decir lo menos.
nevvermind
Tuve un problema con el uso de un módulo que usa GEO IP y redirige al usuario a la tienda correcta según el código de país. Esto falló y después de la depuración, nunca se llamó al observador cuando la página se almacenó en caché utilizando FPC, de hecho, solo se llamó a un observador, ya que FPC almacenó en caché el script completo sin ningún código magento.
Jamie Teuma
Sé que otro desarrollador estaba creando un script dentro de index.php como solución, pero no estoy seguro de si esto fue exitoso o no, ¡así que no puedo comentar TODAVÍA!
Jamie Teuma el
4

Otra opción es usar la configuración auto_prepend de PHP . Esto hará que todos los scripts manejados por PHP ejecuten el script antes de que se ejecute el script solicitado real, pero después .htaccess (si está usando eso).

Este enfoque combinado con algunas de las otras sugerencias (por ejemplo, usar MaxMind para datos de ubicación geográfica y vistas de tiendas para regiones específicas) puede resultar en un enfoque bastante limpio.

Si está ejecutando una versión de Magento> = 1.4, el código de tienda predeterminado se puede configurar estableciendo el valor $ _SERVER ['MAGE_RUN_CODE'].

En el archivo .htaccess o en la configuración de apache, agregue lo siguiente:

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

Cuando script.phprealice cualquier lógica comercial necesaria y establezca el código de tienda apropiado:

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

Una cosa a tener en cuenta es que esto se aplicará a todos los archivos PHP solicitados, por lo que deberá tenerlo en cuenta.

beeplogic
fuente