Salut
Pfiou, je n'aurais jamais cherché aussi complexe (à développer) pour faire des traductions :/
J'aime bien les fichiers séparés, pour ma part. La doc PHP préconise l'utilisation de l'extension gettext mais je n'en suis pas fan...
Salut
Pfiou, je n'aurais jamais cherché aussi complexe (à développer) pour faire des traductions :/
J'aime bien les fichiers séparés, pour ma part. La doc PHP préconise l'utilisation de l'extension gettext mais je n'en suis pas fan...
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
Pourquoi ? Ton avis m'intéresseEnvoyé par Kirkis
![]()
Hmmm, simplement parce que si tu modifies le texte dans la langue par défaut (même une simple coquille, une espace ou quoi que ce soit), tu es obligé de modifier de la même manière absolument tous les fichiers de traduction...Envoyé par Mr N.
Si tu utilisais simplement des tableaux associatifs, il est peu probable que tu veuilles un jour changer les clefs de tes tableaux !
[Edit] Pour faire une analogie approximative, gettext() gère plus ou moins le texte d'une page comme des clefs d'un tableau associatif... Si tu modifies le texte, la clef n'est plus la même et gettext() ne trouve pas la traduction.
Reprenez-moi si je me trompe !
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework - Cours et tutoriels pour apprendre PHP - Forum PHP
Oui je suis d'accord, mais l'avantage est que tu peux lire ton code avec le message à traduire en clair, plutot que de passer par des clefs qui ne sont pas forcément pertinente...
Dépendament de comment tu arrive a avoir une chaine du genre moto_moto_moto_moto il serait plus efficace de placer au départ tous les mots dans un tableau. À moins bien sûr que ce ne soit pas la même chaine à chaque fois que tu appelle ta fonction.
C'est une remarque intéressante qui va ouvrir un nouveau débat :-)Envoyé par FrankOVD
Supposons la situation suivante, j'ai un fichier php avec quelques define
pour associer des clés à des textes en plusieurs langues, par exemple:
define('TXT_RED', 'Rouge_Red_Rot');
...
Dans ce cas il faut une fonction comme celle qu'on a débatu dans ce post
pour extraire le mot dans la bonne langue.
L'autre approche dont tu parles ressemble à ceci, si j'ai bien compris:
$traductions['TXT_RED'] = array('Rouge', 'Red', 'Rot');
...
Je pense que la recherche dans un tableau est très rapide.
Par contre je pense que l'initialisation du tableau $traductions
est plus lente que des define (c'est une supposition, mais ça me
parait raisonnable)
Donc, dans le cas d'un fichier de traduction, il arrive souvent que
tous les mots qui s'y trouvent ne soient pas utilisés par chaque
requêtes. pourtant ils sont tous parsés, compilés, instanciés à chaque
requête.
Quant à l'utilisation de ces mots, elle est souvent unique, par exemple
les libellés des champs d'un formulaire d'édition, les messages d'erreur,
les libellés des boutons.
Je pense qu'il est préférable d'utiliser des define plutot qu'un tableau associatif pour les traductions, vos avis sur la question m'intéressent :-)
+1 ePox
Et aussi n'inclure que les fichiers de langues spécifiques à l'action effectuée. Par exemple, dans le cas d'un e-commerce, pas la peine d'inclure les fichiers de langues concernant la commande si l'utilisateur affiche la description d'un produit.
Vos remarques sont tout a fait justifiées. J'utilise
les fichiers séparés de define pour les mots récurrents, du genre
ok, annuler, envoyer, supprimer etc...
A l'autre extrême, il y a les messages d'erreurs, ceux-ci sont très rarement
affichés et ne devrait pas être chargés tant qu'ils ne sont pas nécessaires.
La technique des fichiers séparés dans ce cas, produit trop de fichiers. Je
préfère qqch du genre: die(translate('erreur_error_fehler'));
Donc ma question initiale ne concernait qu'une partie de mes traductions,
celle des mots qui ne sont pas assez utilisisés pour être centralisés dans des
fichiers séparés.
Partager