Exibindo a localização apropriada com base na localização


17

Eu gostaria de configurar o site Magento para poder reconhecer o idioma e o local padrão do usuário e exibir o site nesse idioma e com a localização apropriada.

Por exemplo:

Um usuário da Rússia com o idioma russo como padrão irá diretamente para o site do idioma russo com Rublos como a moeda e os preços padrão.

Isso é possível? Se sim, como?

Respostas:


14

O GeoIP e as Visualizações da loja ajudarão você a resolver esse problema.

GeoIP Você pode usar um provedor como o MaxMind para o seu banco de dados GeoIP (ou carregá-lo como um módulo de servidor da web que adiciona o país no cabeçalho).

Com base no endereço IP, você pode redirecionar o cliente para a Visualização da loja adequada (verifique o link gerado pelo alternador da visualização da loja.

Visualizações da loja

O russo deve ser uma visualização da loja. Verifique o alternador de visualizações da loja para ver qual é o link que você precisa usar para seus clientes.

Após o redirecionamento, você pode definir um cookie para associar o cliente à visualização da loja.


Também usamos o GeoIP para mudar alguns quarteirões no site para mudar coisas como nossa mensagem de frete grátis
Adam Justice

1
Três coisas a observar neste tópico: (1) Se o visitante usar um proxy em outro país ou se o IP for incompatível, ele poderá mudar para um site diferente. Torne isso possível. (2) Diferencie entre localização e tradução. Por exemplo, use o GeoIP para localização e cabeçalhos de aceitação de idiomas para traduções (site russo com idioma russo / inglês, site suíço com idioma alemão / italiano / francês). Veja a resposta abaixo . (3) Se você tiver preços diferentes (ou uma moeda base diferente) para a Rússia, crie um site dedicado.
Matthias Zeis

9

Existe uma extensão Magento GeoIP (escrita por mim) que baixa o arquivo de dados mais recente do MaxMind e o atualiza periodicamente.

Sugiro ligar para o controller_front_init_beforeevento. Você pode usar o código a seguir para verificar o código ISO 3166-1 do país do visitante e, em seguida, redirecioná-lo para a visualização de loja correspondente, se você tiver um:

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

O artigo detalhado sobre o uso dessa extensão pode ser encontrado aqui .


5

dê uma olhada em http://www.thefutureoftheweb.com/blog/use-accept-language-header se você pode programar. Você pode fazer uma alteração no index.phpcarregamento da visualização de armazenamento apropriada para o idioma.


Idioma sim, mas a questão não é apenas o idioma, mas também a localização geográfica.
Karlson 22/01

Você pode usar a API geográfica do Maxmind ou qualquer outro serviço geográfico gratuito para fazer a troca. Eu uso MaxMind por causa de sua alta precisão ( maxmind.com/en/geolocation_landing )
Sander Mangel

O que você deseja fazer se o usuário estiver atualmente na Rússia, mas o idioma dele for nos EUA? A localização geralmente é menos informativa (e precisa) do que o Accept-Language.
Kojiro

@kojiro eu iria primeiro para o http accept language. você está certo, a localização diz pouco sobre a linguagem de alguns
Sander Mangel

1
Tenha cuidado, o link solitário é considerado uma resposta ruim, pois não faz sentido por si só e não é garantido que o recurso de destino esteja vivo no futuro . Seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
j0k

5

Outra coisa a considerar é o GEO IP.

Algumas linhas de código fornecerão o código do país do usuário, que você poderá alternar com base nisso.

Mas observe que você terá problemas ao usar qualquer código baseado em redirecionamento se estiver usando o mesmo armazenamento com o Enterprise Edition e o Full Page Cache quando a primeira página for armazenada em cache .


Bom ponto sobre o cache. Você precisaria descobrir como Vary: Accept-Languageno cabeçalho do navegador e do FPC.
Kojiro

Gostaria de adicionar alguns detalhes sobre sua última observação sobre o FPC? Estou intrigado, para dizer o mínimo.
Nevevind

Eu tive um problema ao usar um módulo que usa IP GEO e redireciona o usuário para a loja correta com base no código do país. Isso falhou e, após a depuração, o observador nunca era chamado quando a página era armazenada em cache usando o FPC; apenas um observador era chamado, pois o FPC armazenava em cache o script completo sem código magento.
Jamie Teuma

Eu sei que outro desenvolvedor estava criando um script dentro do index.php como uma solução alternativa, mas não tenho certeza se isso foi bem-sucedido ou não, então não posso comentar AINDA !!
precisa saber é o seguinte

4

Outra opção é usar a configuração auto_prepend do PHP . Isso fará com que todos os scripts manipulados pelo PHP executem o script antes da execução do script solicitado, mas após o .htaccess (se você estiver usando isso).

Essa abordagem combinada com algumas das outras sugestões (por exemplo, o uso do MaxMind para dados de localização geográfica e visualizações de lojas para regiões específicas) pode resultar em uma abordagem bastante limpa.

Se você estiver executando uma versão do Magento> = 1.4, o código de loja padrão pode ser configurado definindo o valor $ _SERVER ['MAGE_RUN_CODE'].

No arquivo .htaccess ou na configuração do apache, adicione o seguinte:

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

Na script.phpexecução de qualquer lógica comercial necessária e defina o código de loja apropriado:

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

Uma coisa a notar é que isso se aplicará a todos os arquivos PHP solicitados, portanto, você deve ter isso em mente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.