[PHP5.1] O-LOC : CLASSE ET BACKOFFICE D'INTERNATIONALISATION

Signaler
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
-
Messages postés
186
Date d'inscription
samedi 5 mars 2005
Statut
Membre
Dernière intervention
17 février 2008
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/44592-php5-1-o-loc-classe-et-backoffice-d-internationalisation

Messages postés
186
Date d'inscription
samedi 5 mars 2005
Statut
Membre
Dernière intervention
17 février 2008
1
Juste pour dire BRAVO, nickel comme code je comprends pas tout. Mais je trouve super sympa de ta part de partager un tel code.

++
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Salut FhX :-)
Ca fait plaisir de te recroiser!
C'est une très bonne idée ce que tu proposes là! Ce serait plus joli à utiliser en effet, et plus pratique. Je vais me pencher là-dessus, merci :-)
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Mala ? J'ai pensé à un truc.

Pourquoi ne pas créer une classe dynamique au moment du parsing XML ? Ou alors, remplir des données dans une classe :

<?xml>
<root>
<translate id="nom_de_la_constante">La traduction qui va avec</translate>
<translate id="nom_de_la_constante_no2">L'autre traduction </translate>
</root>

<?php
// Eventuellement y mettre un Singleton au fesses, c'est plus sympa :D
class Language {
private $tab = array();
private $init = false;

public function setInit($bool) {
$this->init = $bool;
}

public function __set($id, $traduc) {
if ( $this->init) $this->$tab[$id] = $traduc;
}

public function __get($id) {
if ( !$this->init ) return $this->tab[$id];
}

}

// Tu fais ton parsing XML, et tu introduis ton couple ID/traduc dans la classe
// Puis, l'appel ce fait comme ceci :
$lang = new Language(...);
echo $lang->ROOT;
echo $lang->WELCOME_HOME;
echo $lang->KIKOO;

// ET puis voila :) Eventuellement, la classe de langage peut se charger du parsing XML à l'init :
$lang = new Language('fr');
// Et on charge les paramètres français depuis le fichier XML francais.
Encore mieux, si on doit faire du multilangage sur un site :
$lang_fr = new Factory_Language('fr');
$lang_de = new Factory_Language('de');
// Et quand on est dans une classe, on rappèle la factory qui se charge de faire un singleton :
class x {
public function x() {
$lang_fr = new Factory_Language('fr');
// stuf...
}
}

Une solution rapide et assez efficace. Reste à savoir si ca tiens la route sur x00000 de visiteurs à la secondes :)
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Il y a un autre truc qui m'a fait penché pour le xml : ma classe gère l'absence de traduction.
Sur les sites internationaux où l'on a utilisé des constantes, si par malheur on oubli une constante dans une trad, on a une belle erreur undefined constant bla bla.
Là, avec ce principe, ce n'est plus le cas : plus d'erreur, et la traduction dans la langue par défaut est affichée (bon, il faut qu'elle soit définie dans la langue par défaut quand même lol, mais c'est une sécurité en plus). D'ailleurs je pense ajouter de ne rien afficher si ni la langue demandée ni la langue par défaut n'ont las traduction demandée (je ne sais plus si je l'ai fait ou non dans oLocale : le backoffice lui, gère ça très bien).

Merci en tous cas :-)
Afficher les 30 commentaires