2009-05-19 9 views
0

J'ai ce script PHP. Il est le seul qui a vraiment travaillé pour moi:script PHP multilingue question

<?php 
/*Check_if_user_has_changed_language: */ 
if(isset($lang)){/*If_so:*/ 
    setcookie("ling",$lang,time()-60*60*24*365,"/",".sayip.info",0);/*Wipe_previous_cookie*/ 
    setcookie("ling",$lang,time()+60*60*24*365,"/",".sayip.info",0);/*Whatever_the_means_lang_has_been_stored,_store_latest_lang_in_new_cookie:*/ 
    //echo "<script language=\"JavaScript\">alert('Selected language=$lang')</script>";/*UnComment_to_check*/ 
}else{/*If_user_has_NOT_changed_language:*/ 
    if(isset($_COOKIE['ling'])){/*Check_if_user-language_cookie_is_set._If_so:*/ 
     $lang=$_COOKIE['ling']; 
     setcookie("ling",$lang,time()-60*60*24*365,"/",".sayip.info",0);/*Wipe_previous_cookie*/ 
     setcookie("ling",$lang,time()+60*60*24*365,"/",".sayip.info",0); 
     //echo "<script language=\"JavaScript\">alert('Cookie language=$lang')</script>";/*UnComment_to_check*/ 
    }else{/*If_user-language_neither_selected_nor_in_cookie,_choose_browser_language:*/ 
     $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2); 
     setcookie("ling",$lang,time()+60*60*24*365,"/",".sayip.info",0); 
     //echo "<script language=\"JavaScript\">alert('Your browser language=$lang')</script>";/*UnComment_to_check*/ 
    } 
} 
?> 

d'abord le code détecte la langue du navigateur de l'utilisateur. C'est bon.

Puis stocke l'information dans un cookie. C'est bon.

Eh bien dans ce morceau de code c'est tout ok. Ce dont j'ai vraiment besoin est de créer une option pour les visiteurs de changer la langue. Je pensais quelque chose comme des images de drapeau liées, donc quand quelqu'un clique sur le drapeau, il change la langue. Est-ce que quelqu'un peut m'expliquer à travers un exemple ou même une solution propre et complète? Mes compétences en PHP sont pauvres.

Merci d'avance.

+1

Notez que la valeur de Accept-Language est une liste de balises de langage pondérées. Donc, la première langue ne doit pas être préférée. En fait, une valeur de 'en; q = 0' signifie que l'anglais ne doit pas être utilisé. – Gumbo

+0

Même avec le risque d'être appelé un troll, votre style de codage est beaucoup trop compact. Utilisez les commentaires de style blanc et // pour augmenter la lisibilité. J'ai du mal à lire votre code - et je suis un programmeur PHP ... –

Répondre

0

je mettrais la langue sélectionnée dans l'URL, par exemple http://example.com/en/foo/bar. Cela rend la langue sélectionnée transparente et facile à changer.

0

Je mettrais à si je savais comment lol ... Depuis que j'ai eu ce script de travail après avoir testé plus ou moins 10 scripts différents, je ne suis pas comme retomber, juste besoin d'un exemple pour mettre des drapeaux et quand quelqu'un cliquez sur le drapeau, il change de valeur du cookie ...

+1

Utilisez la fonction de commentaire ci-dessous l'anwser que vous voulez commenter. – Gumbo

0

Je ne suis pas sûr si je suis bien compris votre question

si tu vas placer un lien pour chaque langue dans votre page, faire quelque chose de lien comme http://www.example.com/?lang=jp

puis dans le code php avant le script que vous avez ajouté ajouter

if (isset($_GET['lang'])) $lang = $_GET['lang']; 

est ce que vous voulez?

0

Une solution plus élégante peut être de vérifier les en-têtes de l'utilisateur. La plupart des navigateurs permettront aux utilisateurs de définir leur langue préférée dans les préférences. Cela à son tour envoie un en-tête HTTP avec la demande. L'en-tête ressemble à ceci.

Accept-Language: fr-fr, fr; q = 0.8, ar-ly; q = 0.5, id; q = 0,3

La valeur est une liste des langues acceptées délimité par des virgules, triés par préférence (la partie q = x est la préférence). De cette façon, vous pouvez automatiquement détecter la langue que l'utilisateur a choisi de voir sur le Web et l'afficher si vous l'avez.