2010-02-23 7 views
5

Ich habe eine Website www.tenxian.com entwickelt.So erkennen Sie die Sprache eines Benutzers über ihre IP-Adresse

Es hat drei Sprachversionen, Englisch, Japanisch und Chinesisch. Wie kann ich ein effektives PHP-Programm schreiben, das automatisch eine Sprachversion basierend auf der IP-Adresse des Besuchers wählt?

Wenn ich "if-else" verwende, wäre der Code sehr kompliziert; Wenn ich switch-case verwende, wie schreibe ich es, da die Daten, die behandelt werden sollten, IP-Bereiche sind, keine bestimmten Zahlen. Außerdem kenne ich diese IP-Bereiche nicht

Was ist der einfachste Weg, es zu tun?

+0

Ich glaube, Sie fragen zwei Dinge - wie eine IP zu einer Ihrer Sprachen zuweisen (oder aus welchem ​​Land ist der Benutzer von)?Und wie werden alle Nachrichten in der App in der richtigen Sprache angezeigt? Ist das richtig? – Aishwar

+0

Nur drei Sprachen, Englisch, Chinesisch und Japanisch. Wenn ich weiß, dass der Besucher aus Japan kommt, werde ich ihn auf die japanische Version umleiten, wenn der Besucher aus dem Großraum China kommt, werde ich ihn auf die chinesische Version umleiten; Ansonsten werde ich es auf die englische Version umleiten. – Steven

+0

es ist sehr offensichtlich, dass Sie den einfachsten Weg es tun wollen .. es hat keinen Sinn, es zu der Frage hinzuzufügen. –

Antwort

21

Bitte, BITTE, machen Sie nicht den Fehler zu denken, dass IP == Sprache. Sehen Sie sich zuerst den Browser-Header für die akzeptierte Sprache und dann den Browser-Identifizierungsstring an, der möglicherweise die Sprache des Betriebssystems enthält, und berücksichtigen Sie dann nur die IP-Adresse. In fast 100% aller Fälle ist der Browser-Header für die akzeptierte Sprache vorhanden und ausreichend.

Und immer dem Benutzer die Wahl geben, um zu einer anderen Sprache wechseln.

Abgesehen von dem einfachen Fall eines Ausländers im Ausland, wie bestimmen Sie die Sprache für Belgien, wo sie Französisch, Niederländisch und Deutsch sprechen? (Vielleicht gilt das nicht für Ihren Fall, sondern nur philosophisch. :)).

+0

+1 für immer geben dem Benutzer die Wahl, um zu einer anderen Sprache zu wechseln ... das ist ein bester Weg .. :) – RameshVel

+0

Gleich in der Schweiz (Deutsch, Französisch, Italienisch) – Benjol

+0

Was ist, wenn ich wirklich die Sprache in gesprochen finden möchte ein Bereich basierend auf IP-Adresse? Lets sagen, ich habe eine solche Anforderung. –

0

werfen Sie einen Blick auf die MaxMind geoip Modul für PHP (http://www.maxmind.com/app/php), wie für Ihre Datenstruktur eingeben vielleicht es zu der ISO-3166-1-Ländercode, der apache_note("GEOIP_COUNTRY_CODE"); zurückgibt.

+0

Ein Ländercode ist nicht genug: Länder wie Belgien und die Schweiz haben mehr als eine Amtssprache. – bart

0

Sie möchten wahrscheinlich eine Form der IP-Geocodierungsdatenbank verwenden (example).

0

Angenommen, Sie können IP-Bereiche in eine Ihrer Sprachoptionen konvertieren, können Sie dies tun (alle Antworten oben): Sie haben alle Ihre Nachrichten in den Anwendungen in einem assoziativen Array dieses Formulars gespeichert.

$MESSAGES[$USER_LANGUAGE][$msgId]

wo $USER_LANGUAGE kann Chinesisch, Japanisch oder Englisch (oder jede andere gleichwertige enum) sein. $msgId kann Dinge wie "login.successful", "login.fail" usw. sein. Wo auch immer Sie Meldungen an den Benutzer anzeigen nicht hartcodierte Zeichenfolgen anzeigen, machen Sie einen Verweis auf die Variable mit der $msgId.

Sie können darauf als globale Variable zugreifen ODER Sie können eine Funktion erstellen, die die $ msgId als Parameter akzeptiert und die Nachricht zurückgibt, $USER_LANGUAGE kann auch eine globale Variable sein (die beim ersten Aufruf des Benutzers gesetzt wird) im).

2

Ja bitte tu es nicht ... Google macht das und verdammt nervig .. Ich bekomme immer die Thai-Version statt der Englisch-Version von meinem Browser.

Verwenden Sie die HTTP-Header aus dem Browser.

+0

Google ist in dieser Hinsicht schrecklich. Selbst wenn es Ihnen gelungen ist, die Schnittstelle in eine andere Sprache zu stellen, wird sie beim Klicken auf einen anderen Dienst (z. B. Google-Startseite -> Google Maps) wieder in das Gebietsschema Ihrer IP-Adresse zurückgesetzt. – deceze

2
<?php 
$ln = split(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]); 
print_r($ln[0]); 
?> 
+2

Für diejenigen, die gerade hier angekommen sind (wie ich), ist 'split()' jetzt veraltet (PHP 5.3.0). 'explode()' funktioniert gut. –