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.