Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[PHP5] CLASSE POUR GESTION MULTILANGUES


Information sur la source

Catégorie :Fichier / Disque Classé sous : ini, multilangue, gestion, langues Niveau : Débutant Date de création : 11/02/2008 Date de mise à jour : 14/02/2008 20:00:00 Vu / téléchargé: 5 099 / 315

Note :
Aucune note

Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

Description

Cette classe permet la gestion complète de plusieures langues à partir d'un fichier (de type INI) contenant les textes.
 

Source

  • include('MultiLang.class.php'); // Inclusion du fichier de la classe
  • // Instantation de la classe avec en paramètre :
  • // 1. Le code ISO 639 de la langue choisie.
  • // 2. Le répertoire qui contient les fichier INI de traduction.
  • $MultiLang = new MultiLang('EN', 'loc/');
  • // Exemple : affiche "Search" ou "Rechercher" si FR et EN sont disponibles
  • echo $MultiLang->getMsg('MAIN_SEARCH');
include('MultiLang.class.php'); // Inclusion du fichier de la classe

// Instantation de la classe avec en paramètre :
// 1. Le code ISO 639 de la langue choisie.
// 2. Le répertoire qui contient les fichier INI de traduction.
$MultiLang = new MultiLang('EN', 'loc/');

// Exemple : affiche "Search" ou "Rechercher" si FR et EN sont disponibles
echo $MultiLang->getMsg('MAIN_SEARCH');

Conclusion

Je suis sûr qu'il y a encore des trucs à modifier et/ou à ajouter.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

11 février 2008 20:55:13 :
Affreuse erreur de traduction, merci Malalam ;-)
14 février 2008 20:00:00 :
Ayé, plus qu'à faire le système en XML et la mise en cache ;-)

Commentaires et avis

signaler à un administrateur
Commentaire de malalam le 11/02/2008 19:51:01 administrateur CS

Hello,

juste pour te vanner (pas méchamment hein) un petit peu :
#  * // FR : Il y a actuellement 12 commentaires au total dans la base de données.
# * // EN : It was actually 12 comments in total in the database.
J'espère que ce n'est pas toi qui fait tes traductions en anglais en général ;-)

signaler à un administrateur
Commentaire de Epoc22 le 11/02/2008 20:17:46

Euuuuuh merci de ta remarque, j'en tient compte !
Suggestion de traduction ? Mon anglais est pas bon...

signaler à un administrateur
Commentaire de malalam le 11/02/2008 20:45:36 administrateur CS

There is currently a total of 12 comments in the database

Pour ton code, ma foi, pas grand chose à dire : j'en ai fait un similaire, et le tien ressemble bcp à ce que j'avais fait, donc c'est que c'est bon ;-)
Sauf que j'étais passé par du xml moi, parce que tu devrais penser à un truc : les langues dont l'alphabet est très différent du nôtre...tu vas être très emmerdé pour gérer ces fichiers, même si ton code n'est pas là pour les gérer, mais pour les exploiter, j'en conviens.
J'avais pensé au templating pour remplacer des valeurs, mais finalement j'avais décidé que je n'en avais pas besoin (parce que tu peux toujours foutre une "constante" et la remplacer dans ton message après coup).Mais ça reste une bonne idée.

signaler à un administrateur
Commentaire de Epoc22 le 11/02/2008 20:49:53

Merci pour la traduc, je met à jour tout de suite.
Je préfère les fichiers du genre INI parce qu'avec un fichier XML il serait trop gros (de taille) avec les balises te tout...
Pour les caractères spéciaux : oui, ça va être chiant, mais il y a toujours des déviations possibles.
Merci de ton commentaire ;-)

signaler à un administrateur
Commentaire de 4C1D le 12/02/2008 00:25:40

Bravo pour la classe. J'aurais juste un petit reproche à te faire. Tu ne devrais pas faire de exit() dans ton constructeur. C'est pas très propre. L'utilisateur devrait rester maitre de son code. C'est juste mon avis donc à toi de voir :)

signaler à un administrateur
Commentaire de neigedhiver le 12/02/2008 02:00:55

Salut,

J'avoue, j'ai pas regardé le code. Voyant que Malalam dit que c'est bon, je lui fais confiance.

Juste une remarque :
"Je préfère les fichiers du genre INI parce qu'avec un fichier XML il serait trop gros (de taille) avec les balises te tout..."

Je suis pas complètement d'accord avec toi.
La taille d'un fichier, ça n'a plus grande importance de nos jours...Surtout que là, c'est même pas un fichier envoyé au client, mais uniquement exploité par l'appli côté serveur (ça peut jouer pour un javascript par exemple).
La question à se poser, ce n'est pas que le fichier soit volumineux, mais qu'il soit exploitable avec de bonnes performances.
En d'autres termes, je ne sais pas si exploiter un fichier .INI est plus rapide qu'un fichier XML(en toute objectivité : c'est à dire que je n'en ai réellement aucune idée, sans aucun a priori). Il peut y avoir une question de souplesse également.
Et puis avec un fichier XML, tu peux t'assurer qu'il est conforme à un schéma (.XSD) et le valider avant de l'exploiter, ce qui permet de s'assurer qu'il sera correctement traité.
Les fonctions pour exploiter/gérer des fichiers XML étant des fonctions écrites en C et présentes sous forme d'extensions PHP, elles sont optimisées pour ce travail.
Et puis un fichier XML contenant des données peut aussi être "mis en cache" sous forme d'un fichier PHP dans lequel est simplement défini un tableau contenant les traductions, ce qui évite de le parser à chaque fois.

Pour terminer, ce qui serait leplus top du meilleur bien, ce serait d'avoir la possibilité de gérer plusieurs types de fichiers de traductions... .ini, .txt, .php, .xml, .po, etc. Avec une classe d'abstraction pour la gestion par l'utilisateur (IHM) et une classe concrète pour chaque type de fichier.
Mais bon, c'est peut-être pas ton idée de départ, c'est peut-être sans objet dans ton projet, ou que sais-je...
Je dis ça juste comme ça :)

Bonne continuation.

signaler à un administrateur
Commentaire de Epoc22 le 12/02/2008 19:43:45

Hello,
4C1D > T'a raison, c'est plus logique, mais si le fichier INI n'existe pas ?
neigedhiver > Tu m'a convaincu mais pas entièrement. Le parsage d'un fichier XML demande quand même plus de ressources qu'un parsage d'un fichier INI, logique (pour moi).
En ce qui conçerne ton idée gérer plusieurs types de fichiers de traductions, c'est pas con mais quel serait l'intérêt exact ?

signaler à un administrateur
Commentaire de malalam le 12/02/2008 20:11:18 administrateur CS

L'intérêt de plusieurs fichiers de traduction serait le même que pour une classe d'abstraction de db, de gérer plusieurs types de db. Mais bon...
Utiliser le XML pour internationaliser un site a d'autres avantages : déjà, un fichier xml est bien plus lisible qu'un fichier ini. C'est aussi nettement plus portable...c'est un format standard. Tu veux montrer tes traductions à un client ? Un petit xsl, et le tour est joué. Avec tes fichiers ini, tu devras créer un script dédié pour exporter ça sous un format user-friendly.
Encore une fois, j'insiste sur les difficultés de gérer des langues aux alphabets très différents avec ton système : ma classe (et mon back-office) gère aussi bien l'anglais que le chinois ou le bulgare. Le xml supporte l'encodage.
Quant à parser un fichier ini ou un fichier xml, je ne suis pas certain que la différence de ressources soit énorme, si tant ait qu'il y en ait une : dans les deux cas, on a un parsing.
Et puis quitte à utiliser des fichiers plats avec une syntaxe néanmoins particulière, pourquoi à ce compte ne pas passer par gettext ?

Concernant le code, j'ai quelques griefs ceci dit, après l'avoir bien regardé :
Le constructeur, comme le dit 4C1D ne doit pas contenir d'exit. Tu dois, puisque tu codes en POO php5, passer par les exceptions.
La méthode permettant d'aller chercher l'image du drapeau est franchement de trop...
De même que celle dédiée à mysql : déjà, si j'utilise une autre db, je suis embêté et je me la trimballe pour rien, mais de plus, si je n'utilise pas du tout de db. Qui plus est, je dois ouvrir ma connexion en dehors, et la classe utilisera cette connexion globale...c'est maladroit et peut s'avérer dangereux selon les cas.
if (!empty($section)) {
devrait devenir
if (!is_null($section)) {
je pinaille, mais c'est plus correct. Et puis si je veux appeler ma section 0...;-)
L'obligation de passer LANG_NAME dans le fichier ini alors qu'on l'a déjà sur le nom du fichier...bon...tu aurais pu t'en passer.

Un objet gérant des traductions est appelé souvent...il faut donc qu'il soit le plus léger possible, fasse uniquement le boulot essentiel. C'est pour ça que j'estime que tes méthodes pour le drapeau et mysql sont vraiment de trop.

signaler à un administrateur
Commentaire de Epoc22 le 12/02/2008 20:30:17

Ok, tu m'a convaincu.
La méthode MySQL c'était un test, j'ai oublié de la virer mais bon, merci de me le dire ;-)
if (!is_null($section)) { >> okay
Pour le LANG_NAME : c'est juste pour avoir le nom de la langue en version affichable.
Pour la méthode du drapeau : c'est juste pour le fun mais bon... tant qu'à faire je la laisse.
Je vais faire la MAJ de la source dans pas longtemps. Faut que j'aille gerber.
@+

signaler à un administrateur
Commentaire de malalam le 12/02/2008 20:38:59 administrateur CS

Pour le LANG_NAME : c'est juste pour avoir le nom de la langue en version affichable.
=> tu peux très bien le stocker dans ton tableau, là n'est pas le problème : c'est juste que tu peux le faire au niveau du dossier, pas la peine de le récupérer dans le fichier ini.

signaler à un administrateur
Commentaire de neigedhiver le 12/02/2008 20:57:46

Salut,

Epoc, tu dis :
"neigedhiver > Tu m'a convaincu mais pas entièrement. Le parsage d'un fichier XML demande quand même plus de ressources qu'un parsage d'un fichier INI, logique (pour moi). "

Quant à moi, j'ai dit dans mon message :
"Et puis un fichier XML contenant des données peut aussi être "mis en cache" sous forme d'un fichier PHP dans lequel est simplement défini un tableau contenant les traductions, ce qui évite de le parser à chaque fois."

Et puis quant au parsing INI ou XML, je disais aussi :
"Les fonctions pour exploiter/gérer des fichiers XML étant des fonctions écrites en C et présentes sous forme d'extensions PHP, elles sont optimisées pour ce travail."
Certes, la fonction parse_ini_file, étant native à PHP, est optimisée. Mais il faut voir le résultat : on se retrouve simplement avec un tableau.

J'ai déjà listé les avantages de XML :
- portabilité
- validation d'après un schéma XSD

Ajouté à ceux de Malalam :
- universalité des langues
- transformation XSL pour la présentation

Si tu ajoutes une fonction de cache (je répète : le fichier est parsé une fois, dans l'admin, c'est à dire là où les performances n'ont aucune importance) qui contient la déclaration d'un tableau, ce qui revient à exécuter parse_ini_file (pour arriver au même résultat quoi : un tableau tout con).
Parce que bon, faut être réaliste un peu : c'est pas top optimisé de faire un parsing à chaque affichage d'une page : la traduction n'est pas modifiée toutes les 2 secondes...

signaler à un administrateur
Commentaire de Epoc22 le 13/02/2008 21:48:54

Mmm c'est vrai neigedhiver. Par contre, malalam : "c'est juste que tu peux le faire au niveau du dossier" > comment ça ?

signaler à un administrateur
Commentaire de malalam le 14/02/2008 00:23:54 administrateur CS

Tes dossiers s'appellent EN.ini, FR.ini...
Et ces EN ou FR, tu les fais répêter dans les fichiers. Alors que tu les as déjà dans les noms de fichier. Ca ne sert à rien.

signaler à un administrateur
Commentaire de Epoc22 le 14/02/2008 10:45:52

? Mes dossiers ?

signaler à un administrateur
Commentaire de malalam le 14/02/2008 11:23:40 administrateur CS

Tes fichiers, pardon.

signaler à un administrateur
Commentaire de Epoc22 le 14/02/2008 11:25:30

Ah. Alors c'est bon non ?

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

aide pour creation de gestion de divx [ par karen ] bonjour a tous j'essai de cree en vain un script me permettant de gere mes divxen fait je veut faire ceciune partie administration avec pass (ca j'ai Formulaire et Gestion de dates. [ par benett ] Bonjour à tous,J'aimerais vous poser une petite question, voici :Comment peut-on à partir d'un formulaire, générer un calendrier qui permetrais l'enco Gestion de dates [ par benett ] Bonjour à tous,comment faire la soustraction entre 2 dates et obtenir le résultat en jour ?Merci beaucoup. Fichiers Ini [ par boris ] Salut, Je cherche une lib pour manipuler les fichiers .ini, connaissez vous ca ?MerciBoris pb gestion des erreures [ par tich69 ] salut j'ai un pb !!! lol c pour ca que je suis ici !dans ma page php g mis ------------ or die("") pour eviter les erreurs mais ceci arrete totalemen Gestion d'horaires de réservation de salles [ par houloul ] Bonjour,je tente de faire une application de gestion de salles....Mon problème est le suivant :j'ai une table réservation qui contient un numéro de ré gestion de pdf en php [ par jawad75 ] salut tous le mondeje coulais savoir juste si qlq un a deja fais un prog qui gere des .pdf en php, en utilisant fpdf :) Gestion sessions [ par elanspeech ] Je souhaiterais pouvoir gerer plusieurs utilisateurs sur mon site avec un systeme de session avec les contraintes : - Un "login" ne peut se logger qu' Gestion sessions [ par elanspeech ] Salut,J'ai des difficultes a resoudre la gestion de session.quand un utilisateur se logue, je met ma base a jour, s'il se deconnecte, je fais de meme. gestion d'un forum [ par nlepe ] je cherche a classer les sujets du forum en fonction des posts envoyes ceci de maniere croissante ou decroissante merci d'avance


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.