2010-07-18 5 views
3

Je travaille sur un site web qui a des besoins d'internationalisation mineurs (anglais, français et allemand), et je veux savoir d'où vient l'utilisateur afin que je sache lequel afficher. Je pense que la bonne façon de procéder est de vérifier l'en-tête "HTTP_ACCEPT_LANGUAGE" pour trouver la langue # 1 demandée par l'utilisateur (et il est sûr que tous les utilisateurs en Allemagne ont des navigateurs qui demandent par défaut DE, etc.) .I18n d'un site Web: comment détecter un langage?

Est-ce correct? Ou dois-je faire autre chose (heureusement rien de trop ridicule, comme essayer de comprendre leur pays de leur IP) ...?

thanks-- Eric

Répondre

8

Si vous optez pour le choix le plus populaire actuellement - geoIP - sans autre considération, vous ne faites pas un grand service à vos utilisateurs.

Les langues et les pays ne se chevauchent pas. Qu'allez-vous faire avec les utilisateurs d'adresses IP suisses? Belgique? Canada? Si vous optez pour la langue majoritaire dans chaque cas, vous ennuierez les visiteurs réguliers qui font partie de grandes minorités linguistiques: ils seront accueillis dans la «mauvaise» langue à chaque fois, même si le site est disponible en leur langue préférée. Il en va de même pour les expatriés - et par expérience, il est extrêmement déconcertant d'être accueilli, par exemple, en suédois, simplement parce que je voyage en Suède. (Et même les grands sites se trompent: l'autre jour, je suis arrivé à l'aéroport de Vancouver en provenance de Londres et Google m'a transféré sur fr_CA.) N'oubliez pas qu'un grand nombre de personnes sont multilingues ou non natifs de la langue majoritaire de leur pays de résidence.

Voici les guidlines je suit:

  1. Vérifiez d'abord ce que l'utilisateur est dire vous au sujet de leur choix le plus probable. Les façons les plus simples sont les suivants:
    • Parse la langue/culture information de la chaîne agent utilisateur HTTP (examples for Firefox). Cela vous dit quelque chose sur la version du système d'exploitation qu'ils exécutent, et est une très bonne indication de préférence. Ils peuvent bien sûr être des usurpateurs d'utilisateurs, mais s'ils le font, ils sont moins susceptibles d'être surpris qu'ils reçoivent de mauvais pré-ensembles.
    • Accept-Language En-tête HTTP (priorité inférieure, car vous risquez de voir plus de "en" ici que les utilisateurs réels avec l'anglais comme préférence du système d'exploitation).
  2. Deuxièmement, enregistrer la préférence de l'utilisateur. S'ils se connectent, demandez-leur et enregistrez-les en option.Sinon, définissez un cookie (avec un paramètre d'expiration raisonnable). De cette façon, ils seront agréablement surpris quand ils reviendront.
  3. N'utilisez GeoIP qu'en dernier recours.
+0

Brillant. Merci pour une réponse très complète. – Eric

+1

Je dois seulement mentionner que la plupart des agents utilisateurs se configurent eux-mêmes en fonction du langage du système d'exploitation, il n'est donc pas nécessaire de vérifier les deux en-têtes; plus, Accept-Language est un peu plus facile à analyser que les chaînes compliquées de l'agent utilisateur. – igorsantos07

-1

Vous à peu près répondu à votre question - vous pouvez utiliser cet en-tête ou juste geoip (il est mort simple à utiliser)

Télécharger de: http://geolite.maxmind.com/download/geoip/api/php/

Exemple de code:

include("geoipcity.inc"); 
include("geoipregionvars.php"); 
$gi = geoip_open("GeoLiteCity.dat", GEOIP_STANDARD); 
$record = geoip_record_by_addr($gi, $user_ip); 
echo "The users country code is:" . $record->country_code; 
geoip_close($gi); 
+1

Geoip est seulement un moyen de deviner quand aucune préférence d'utilisateur n'est disponible. Cela est important parce que certains endroits ont plusieurs langues raisonnables possibles disponibles. (Si vous préférez l'anglais ou l'espagnol pour une adresse à Miami, il n'y a aucun moyen de savoir sans demander.) Les préférences des utilisateurs sont simplement la meilleure façon de le faire.) –

+0

et si l'utilisateur voyage? geoip n'est guère une bonne solution. – igorsantos07

0

Je vérifie l'en-tête de la langue d'acceptation et le ou pays d'origine de l'adresse IP du visiteur. Si l'en-tête de la langue d'acceptation est autre que l'anglais (probablement le paramètre par défaut le plus utilisé), utilisez-le pour définir la langue par défaut. Si la langue acceptée est l'anglais, utilisez le pays d'origine pour définir la langue par défaut. Je pense que cela vous donnera une estimation plus instruite de la langue maternelle des visiteurs.

Questions connexes