Magento Angezeigte Lokalisierung basierend auf dem Standort


17

Ich möchte die Magento-Site so konfigurieren, dass sie die Standardsprache und den Standardspeicherort des Benutzers erkennt und die Site in dieser Sprache und mit der entsprechenden Lokalisierung anzeigt.

Beispielsweise:

Ein Benutzer aus Russland mit der russischen Sprache als Standardsprache wird direkt zur russischsprachigen Website mit Rubeln als Standardwährung und -preisen wechseln.

Ist das möglich? Wenn das so ist, wie?

Antworten:


14

GeoIP und Store Views helfen Ihnen bei der Lösung dieses Problems.

GeoIP Sie können einen Provider wie MaxMind für Ihre GeoIP-Datenbank verwenden (oder als Webservermodul laden, das das Land in den Header einfügt).

Anhand der IP-Adresse können Sie den Kunden zur richtigen Geschäftsansicht umleiten (überprüfen Sie den vom Umschalter für die Geschäftsansicht generierten Link).

Ansichten speichern

Russisch sollte eine Store-Ansicht sein. Überprüfen Sie im Store View Switcher, welchen Link Sie für Ihre Kunden benötigen.

Nach der Weiterleitung können Sie ein Cookie setzen, um den Kunden mit der Geschäftsansicht zu verknüpfen.


Wir haben auch das GeoIP verwendet, um einige Blöcke auf der Site zu wechseln und Dinge wie unsere Nachricht "Kostenloser Versand" zu ändern
Adam Justice

1
Zu diesem Thema sind drei Dinge zu beachten: (1) Wenn der Besucher einen Proxy in einem anderen Land verwendet oder die IP nicht übereinstimmt, möchte er möglicherweise selbst zu einer anderen Website wechseln. Mach das möglich. (2) Unterscheiden Sie zwischen Lokalisierung und Übersetzung. Verwenden Sie beispielsweise GeoIP für die Lokalisierung und Sprachakzeptanz von Kopfzeilen für Übersetzungen (russische Website mit russischer / englischer Sprache, Schweizer Website mit deutscher / italienischer / französischer Sprache). Siehe Antwort unten . (3) Wenn Sie für Russland andere Preise (oder eine andere Basiswährung) haben, erstellen Sie eine eigene Website für Russland.
Matthias Zeis

9

Es gibt eine Magento GeoIP-Erweiterung (von mir geschrieben), die die neueste MaxMind-Datendatei herunterlädt und regelmäßig aktualisiert.

Ich schlage vor, in das controller_front_init_beforeEvent einzusteigen . Sie können den folgenden Code verwenden, um zu überprüfen, ob der ISO 3166-1-Code des Landes des Besuchers vorliegt, und ihn dann zur entsprechenden Geschäftsansicht umleiten, falls Sie eine haben:

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

Den ausführlichen Artikel zur Verwendung dieser Erweiterung finden Sie hier .


5

Werfen Sie einen Blick auf http://www.thefutureoftheweb.com/blog/use-accept-language-header, wenn Sie programmieren können. Sie können im index.phpLaden der für die Sprache geeigneten Storeview einen Wechsel vornehmen.


Sprache ja, aber es geht nicht nur um die Sprache, sondern auch um den geografischen Standort.
Karlson

Sie können die Maxmind-Geo-API oder einen anderen kostenlosen Geodienst verwenden, um den Wechsel vorzunehmen. Ich benutze maxmind wegen ihrer hohen Genauigkeit ( maxmind.com/en/geolocation_landing )
Sander Mangel

Was möchten Sie tun, wenn sich der Benutzer derzeit in Russland befindet, seine Sprache jedoch en-US ist? Der Standort ist oft weniger informativ (und genau) als Accept-Language.
Kojiro

@kojiro Ich würde zuerst die http-Sprache akzeptieren. du hast recht, ort sagt wenig über die sprache einiger aus
sander mangel

1
Seien Sie vorsichtig, Lone Link wird als schlechte Antwort angesehen, da es für sich genommen bedeutungslos ist und nicht garantiert wird, dass die Zielressource in Zukunft noch lebt . Es wäre vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
23.

5

Eine andere Sache zu betrachten ist GEO IP.

Einige Codezeilen geben Ihnen den Ländercode des Benutzers, den Sie darauf basierend ändern können.

Beachten Sie jedoch, dass Sie Probleme mit umleitungsbasiertem Code haben, wenn Sie denselben Speicher mit Enterprise Edition und Vollseiten-Cache verwenden, in dem der erste Seitenzugriff zwischengespeichert wird .


Guter Punkt zum Cachen. Sie müssten herausfinden, wie Vary: Accept-Languagein der Kopfzeile für den Browser und die FPC.
Kojiro

Möchten Sie einige Details zu Ihrer letzten Notiz zu FPC hinzufügen? Ich bin gelinde gesagt fasziniert.
Nevvermind

Ich hatte ein Problem mit der Verwendung eines Moduls, das GEO IP verwendet und den Benutzer anhand des Ländercodes zum richtigen Geschäft weiterleitet. Dies schlug fehl und nach dem Debuggen wurde der Beobachter nie aufgerufen, wenn die Seite mit FPC zwischengespeichert wurde. Es wurde nur ein Beobachter aufgerufen, da FPC das vollständige Skript zwischengespeichert hat, in dem kein Magento-Code ausgeführt wurde.
Jamie Teuma

Ich weiß, dass ein anderer Entwickler ein Skript in der index.php erstellt hat, um dies zu umgehen, aber ich bin mir nicht sicher, ob dies erfolgreich war oder nicht, also kann ich NOCH keinen Kommentar abgeben !!
Jamie Teuma

4

Eine andere Option ist die Verwendung der auto_prepend- Konfiguration von PHP . Dies bewirkt, dass alle von PHP gehandhabten Skripte das Skript ausführen, bevor das tatsächlich angeforderte Skript ausgeführt wird, jedoch nach .htaccess (wenn Sie das verwenden).

Dieser Ansatz kann in Kombination mit einigen anderen Vorschlägen (z. B. Verwendung von MaxMind für Geostandortdaten und Speichern von Ansichten für bestimmte Regionen) zu einem eher sauberen Ansatz führen.

Wenn Sie eine Version von Magento> = 1.4 ausführen, können Sie den Standardspeichercode konfigurieren, indem Sie den Wert $ _SERVER ['MAGE_RUN_CODE'] festlegen.

Fügen Sie entweder in der .htaccess-Datei oder in der Apache-Konfiguration Folgendes hinzu:

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

Führen Sie in Ihrem Unternehmen script.phpdie erforderliche Geschäftslogik aus und legen Sie den entsprechenden Geschäftscode fest:

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

Beachten Sie, dass dies für alle angeforderten PHP-Dateien gilt. Beachten Sie dies also.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.