Magento Affichage de la localisation appropriée en fonction de l'emplacement

17

Je voudrais configurer le site Magento pour pouvoir reconnaître la langue et l'emplacement par défaut de l'utilisateur et afficher le site dans cette langue et avec une localisation appropriée.

Par exemple:

Un utilisateur de Russie avec la langue russe par défaut se rendra directement sur le site Web en langue russe avec Roubles comme devise et prix par défaut.

Est-ce possible? Si c'est le cas, comment?

Karlson
la source

Réponses:

14

GeoIP et Store Views vous aideront à résoudre ce problème.

GeoIP Vous pouvez utiliser un fournisseur comme MaxMind pour votre base de données GeoIP (ou le charger en tant que module de serveur Web qui ajoute le pays dans l'en-tête).

En fonction de l'adresse IP, vous pouvez rediriger le client vers la vue de magasin appropriée (vérifiez le lien généré par le sélecteur de vue de magasin.

Vues du magasin

Le russe devrait être une vue de magasin. Vérifiez le sélecteur de vue de magasin pour voir quel lien vous devez utiliser pour vos clients.

Après la redirection, vous pouvez définir un cookie pour associer le client à la vue du magasin.

FlorinelChis
la source
Nous avons également utilisé le GeoIP pour changer quelques blocs sur le site pour changer des choses comme notre message de livraison gratuite
Adam Justice
1
3 choses à surveiller sur ce sujet: (1) Si le visiteur utilise un proxy dans un autre pays ou que l'IP n'est pas compatible, il peut vouloir passer lui-même à un autre site Web. Rendez cela possible. (2) Faire la différence entre la localisation et la traduction. Par exemple, utilisez GeoIP pour les en-têtes de localisation et d'acceptation de langue pour les traductions (site Web russe avec langue russe / anglais, site Web suisse avec langue allemande / italienne / française). Voir la réponse ci-dessous . (3) Si vous avez des prix différents (ou une devise de base différente) pour la Russie, créez-lui un site Web dédié.
Matthias Zeis
9

Il y a une extension Magento GeoIP (écrite par moi) qui télécharge le dernier fichier de données MaxMind et le met à jour périodiquement.

Je suggère de se connecter à l' controller_front_init_beforeévénement. Vous pouvez utiliser le code suivant pour vérifier obtenir le code ISO 3166-1 du pays du visiteur, puis le rediriger vers la vue du magasin correspondant si vous en avez un:

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

L'article détaillé sur l'utilisation de cette extension peut être trouvé ici .

user487772
la source
5

jetez un œil à http://www.thefutureoftheweb.com/blog/use-accept-language-header si vous pouvez programmer. Vous pouvez effectuer un changement dans le index.phpchargement de la vue de magasin appropriée à la langue.

Sander Mangel
la source
Langue oui, mais le problème n'est pas seulement la langue mais aussi la situation géographique.
Karlson
Vous pouvez utiliser l'API géographique Maxmind ou tout autre service géographique gratuit pour effectuer le changement. J'utilise maxmind en raison de leur grande précision ( maxmind.com/en/geolocation_landing )
Sander Mangel
Que voulez-vous faire si l'utilisateur est actuellement en Russie, mais sa langue est en-US? L'emplacement est souvent moins informatif (et précis) que Accept-Language.
kojiro
@kojiro, je choisirais d'abord la langue d'acceptation http. vous avez raison, l'emplacement en dit peu sur la langue de certains
Sander Mangel
1
Attention, le lien isolé est considéré comme une mauvaise réponse car il n'a pas de sens en soi et la ressource cible n'est pas garantie d'être vivante à l'avenir . Il serait préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien de référence.
j0k
5

Une autre chose à regarder est GEO IP.

Quelques lignes de code vous donneront le code du pays des utilisateurs, que vous pouvez changer en fonction de cela.

Mais notez que vous rencontrerez des problèmes lors de l' utilisation de tout code basé sur la redirection si vous utilisez le même magasin avec Enterprise Edition et Full Page Cache car le premier accès de page est mis en cache .

Jamie Teuma
la source
Bon point sur la mise en cache. Vous devez comprendre comment Vary: Accept-Languagedans l'en-tête pour le navigateur et le FPC.
kojiro
Voulez-vous ajouter quelques détails sur votre dernière note concernant le FPC? Je suis pour le moins intrigué.
nevvermind
J'ai eu un problème avec l'utilisation d'un module qui utilise GEO IP et redirige l'utilisateur vers le magasin correct en fonction du code pays. Cela a échoué et après le débogage, l'observateur n'a jamais été appelé lorsque la page a été mise en cache à l'aide de FPC, en fait un seul observateur a été appelé, car FPC a mis en cache le script complet n'exécutant aucun code magento.
Jamie Teuma
Je sais qu'un autre développeur construisait un script dans index.php comme solution de contournement, mais je ne sais pas si cela a réussi ou non, donc je ne peux pas commenter ENCORE !!
Jamie Teuma
4

Une autre option consiste à utiliser la configuration auto_prepend de PHP . Cela entraînera l'exécution de tous les scripts gérés par PHP avant l' exécution du script demandé, mais après .htaccess (si vous l'utilisez).

Cette approche combinée à certaines des autres suggestions (par exemple en utilisant MaxMind pour les données de géolocalisation et les vues de magasin pour des régions spécifiques) peut aboutir à une approche plutôt propre.

Si vous exécutez une version de Magento> = 1.4, le code de magasin par défaut peut être configuré en définissant la valeur $ _SERVER ['MAGE_RUN_CODE'].

Dans le fichier .htaccess ou la configuration d'Apache, ajoutez ce qui suit:

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

Dans votre, script.phpexécutez toute logique métier nécessaire et définissez le code de magasin approprié:

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

Une chose à noter est que cela s'appliquera à tous les fichiers PHP demandés, vous devrez donc garder cela à l'esprit.

beeplogic
la source