partout sur Ainsi, quand il s'agit de faire une application multi-langage dans PHP, tout le monde dit que gettext est la meilleure façon de le faire. Je veux juste savoir pourquoi?
Comme ce qui rend cette méthode ci-dessous, moins efficace, puis utilisez GetText? P>
<?PHP //Have seperate language files for each language I add, this would be english file function lang($phrase){ static $lang = array( 'NO_PHOTO' => 'No photo\'s available', 'NEW_MEMBER' => 'This user is new' ); return $lang[$phrase]; } //Then in application where there is text from the site and not from users I would do something like this echo lang('NO_PHOTO'); // No photo's available would show here ?>
4 Réponses :
Une bonne chose avec GetText est que c'est une sorte de norme de facto: il est utilisé par de nombreuses applications, dans de nombreuses langues, ce qui signifie que beaucoup de personnes travaillent avec elle. P>
Une autre bonne chose (peut-être une conséquence ou une cause, ou les deux, en fait) em> est que plusieurs outils, comme POEDIT Par exemple, il existe pour modifier les fichiers GetText: vous n'avez pas à parcourir certains PHP (ou autre) em> code source. Et c'est très important: P>
Donc, aussi loin que la performance va, vous utilisez une fonction avec un tableau ou des constantes pour des fichiers de langue serait aussi rapide ou aussi bonne sur la performance que d'utiliser GetText? Mon application est quelque peu grande mais ce sera toujours un projet privé où je suis le seul à pouvoir le modifier, car il serait facile de ne pas avoir à configurer GFetText et de vous assurer que le serveur l'a installé et en cours d'exécution. Mais s'il y a un gain de performance à l'aide de GetText, je mettrais probablement plus d'efforts pour aller de cette route.
Je ne connais pas vraiment les performances (ceci: mel.melaxis.com/devblog/2006/04/10/... pourrait être utile?) - Mais votre mise en œuvre a plusieurs autres problèmes que ce que j'ai dit dans ma réponse; Par exemple: pas de pluriel, un grand tableau pour analyser et garder en mémoire
Merci ce lien est exactement ce que j'ai cherché, c'est une sorte de vieille mais toujours ce que je veux, un benchtest sans que je doive le faire (seulement parce que je ne sais pas comment configurer GetText encore)
A propos de la performance: .po Les fichiers sont convertis en fichiers .MO qui sont en binaires et vraiment rapides à lire.
Le lien que vous avez fourni, le gars a effectivement inclus son code de référence pour 3 méthodes différentes, je l'ai couru sur ma machine, éteignez mon serveur de dev obsédé par GetText installé et travaille, on dirait que j'ai une solution maintenant! Thnaks à nouveau +5 si je pouvais
N'oubliez pas les formes plurielles, elles sont super!
Il y a quelques inconvénients dans votre "mise en œuvre". p>
GetText Code> Il est implémenté dans php code>. ; -) li>
- Il conserve toute la traduction en mémoire, peu importe si vous l'utilisez ou non li>
- qui est pire, il instancite de l'ensemble de la gamme de données chaque fois que vous avez besoin d'une ligne (il faut un moment et un certain temps dans PHP) LI>
- Il est incapable de gérer des formes plurielles pour de nombreuses langues li>
- Le code, en utilisant cette traduction n'est guère lisible li>
- Le code, en utilisant cette traduction, n'a pas de repli incorporé à utiliser en cas de traduction absente. LI>
ul>
Fondamentalement, votre implémentation est largement utilisée dans de nombreux projets qui meurent pour réclamer leur soutien à l'internationalisation et leur invention très innovante de la roue, mais ne se soucient pas un peu sur le résultat et ne connaissez pas le bien du mauvais. < / p>
C'est la même réponse que pour toutes les questions ressemblant à: p>
Qu'est-ce qui est meilleur avec [hightly prouvé et solution considérablement utilisée] qu'avec [mon hacky coq noob Mise en œuvre]? P> blockQuote>
- Il y a été là depuis longtemps, le croyez-le ou non, si expérimenté dev l'a travaillé dessus, l'a utilisé et l'a loué, c'est probablement pour une raison. li>
- C'est une norme, et donc même si votre solution serait meilleure, le prix à payer pour la rupture peut ne pas en valoir la peine. LI>
- Cela peut faire 1000 de plus que votre mise en œuvre car elle est développée avec une portée mondiale, alors que votre idée ne vise que votre problème. Li> ul>
Je ne critique pas, nous avons tous fait cela, essayant de nous convaincre de nous-mêmes que nous sommes Smarties et d'autres personnes excédent des programmeurs. Cela fait partie de la voie à apprendre. En fait, je le fais continuellement, réinventer la roue ou me montrer avec mes amis / collègues sur un code de baiser que j'ai piraté. Avec le temps, vous venez de finir de moins en moins, et je suppose que vous arrêtez de le faire le jour où vous méririez réellement de le faire: -) p>
My Hacky Cocky Noob Mise en œuvre Dans ce cas est utilisé dans plusieurs grandes applications open source, cependant, je vois en fait les deux méthodes utilisées souvent et j'essaie de comprendre qui est la meilleure voie sans installer GetText et de faire une référence si quelqu'un d'autre a déjà c'est fait.
Punbb est OpenSource et a commencé par l'une des pires fondes de code jamais connues. J'ai commencé un projet open source au cours de mes premières années de programmation. Faire des erreurs et avoir un grand ego comme juste rien à voir avec la source ouverte, c'est juste quelque chose que nous faisons tous. Ne le prenez pas personnellement, soyez heureux de savoir que vous progressez ;-)
Et BTW, vous êtes celui qui a «une optimisation prématurée n'est pas la racine de tout mal» comme une citation dans son profil. N'est-il pas le temps d'appuyer?
J'ai fini par utiliser l'extension GetText, je n'ai jamais rien eu contre elle, j'essayais simplement de découvrir les avantages et les inconvénients des deux au lieu de simplement aller avec le flux et en utilisant ce que les gens disent est la voie à suivre sans rien sauvegarder le raisonnement
l'avantage em> de GetText, comparé à d'autres solutions telles que les tables de cordes Java ou les ressources Windows, est qu'elle rend le code source plus lisible. comparer ceci: p> < pré> xxx pré> avec ceci: p> Dans le premier cas, vous pouvez voir le message juste dans le code et vous savez exactement ce qu'il fait . Dans ce dernier cas, vous ne voyez qu'une constante symbolique et que vous devez rechercher les spécificateurs de texte et format exacts. P> p>