Un petit blanc.. (a la recherche d'un design pattern)

ViPHP
ViPHP | 4039 Messages

06 mai 2008, 16:29

Coucou tout le monde.

J'ai un blanc.. je cherche un pattern, mais je ne le trouve plus..

Le cas est classique, il s'agit de déterminer la langue d'une page..

Il faut donc:
  • Vérifier les paramètres dans l'url
  • Ou vérifier le cookie
  • Ou déterminer le langage du navigateur
  • Ou appliquer la langue par défaut
Non, c'est pas difficile, mais j'ai pas envie de faire une succession de if/elseif. Je veux du beau, de l'art, du rub.. non, je l'ais pas dit.

La je me suis dit un while avec un switch dedans, ça pourrait marcher (tant que langue pas défini, continue le switch, avec une simple incrémentation pour passer de case en case), mais c'est pas encore assez "joli". Je suis sur d'avoir déjà vu une approche sympathique, ici ou dans l'un ou l'autre design pattern, mais je bloque.. vous avez une idée ?
Modifié en dernier par Berzemus le 07 mai 2008, 09:07, modifié 1 fois.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Mammouth du PHP | 19672 Messages

06 mai 2008, 17:41

Regarde ce qu'il y a dans $_SERVER["HTTP_ACCEPT_LANGUAGE"], ça pourrait se révéler fort instructif ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
AB
ViPHP | 5818 Messages

06 mai 2008, 19:06

Un p'tit blanc... oui c'est sûr, après la mirabelle d'Albat et les incantations de soeur charlotte, faut bien ça pour digérer :lol: :lol:

Bon pour la peine, je donne mon vieux code pas beau mais néanmoins fonctionnel :
$lang_traduites = array(0 => 'en', 1 => 'fr');
$langue_defaut = $lang_traduites[0];

$lang_navig = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$lang_navig = strtolower(substr(rtrim($lang_navig[0]),0,2));

$lang =  !empty($_COOKIE['lang'])? $_COOKIE['lang'] : 0;
$lang =  !empty($_GET['lang'])? $_GET['lang'] : $lang;
$lang =  !empty($lang)? $lang : $lang_navig ;
$lang =  in_array($lang,$lang_traduites)? $lang : $langue_defaut;

//envoi du cookie
if ((!empty($_GET['lang']) && in_array($_GET['lang'],$lang_traduites)) && (empty($_COOKIE['lang']) || (isset($_COOKIE['lang']) && $_COOKIE['lang'] != $_GET['lang']))) setcookie('lang', $_GET['lang'], time() + 3600 * 24 * 365);

Quand tu auras fait ton code tout beau, fait nous le voir et change un peu le titre de ton message, ça permettra aux prochains visiteurs de pouvoir profiter de ce topic avec une recherche facilitée :wink:
Sinon, y'a l'aspirine aussi qui marche bien :P :lol:

ViPHP
ViPHP | 4039 Messages

06 mai 2008, 19:13

oui, c'est vrai qu'il me reste l'opérateur ternaire.. je regarderais ça demain, tranquillement (d'autant qu'il commence à faire chaud au boulot). Et si je trouve une solution sexy, je la mettrais dans "contribution", direct (vu que je compte en faire quelque chose de réutilisable).

Au fait, STANDARD CHAMPION !!
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 mai 2008, 08:51

Modération :
Merci d'utiliser un titre clair et qui correspond bien à ta demande.
Les titres contenant "HELP", "Aidez-moi !" n'apportent rien à la compréhension de ton problème.
Par ailleurs, nous savons déjà par ton message que tu as besoin d'aide.

Tu peux corriger ton titre en éditant ton premier message.

Merci de prendre le temps de lire les règlements.


Non mais tout le monde est concerné.... y a pas de raison :-*
J'aime bien gronder les ViPHP :langue:

Vive le Standard :fete:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 4039 Messages

07 mai 2008, 09:09

:oops:

*relis scrupuleusement les règlements*
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.