Question

Partout sur le SO pour créer une application multilingue en PHP, tout le monde dit que gettext est le meilleur moyen de le faire. Je veux juste savoir pourquoi?

Comme ce qui rend cette méthode ci-dessous moins efficace que gettext?

<?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
?>
Était-ce utile?

La solution

Une bonne chose avec gettext est qu’il s’agit d’une sorte de standard de facto: il est utilisé par de nombreuses applications, dans de nombreuses langues, ce qui signifie que beaucoup de gens l’utilisent.

Une autre bonne chose (peut-être une conséquence, ou une cause, ou les deux, en fait) est que plusieurs outils, tels que Poedit , par exemple, existe pour éditer des fichiers gettext: vous n’avez pas besoin de passer par du code source PHP (ou autre) . Et ceci est très important:

  • cela signifie que des personnes non techniques peuvent éditer des fichiers de localisation gettext
    • peut-être que cela ne vous semble pas important maintenant,
    • mais si vous travaillez sur une grosse application open source, cela deviendra important si elle réussit et que beaucoup de personnes en ont besoin dans leur propre langue.
  • cela signifie qu'ils ne risquent pas de casser l'application (pensez par exemple "erreur d'analyse" en raison d'un décalage entre guillemets, par exemple ;-))

Autres conseils

Votre "implémentation" présente quelques inconvénients.

  • Contrairement à gettext , il est implémenté dans php . ; -)
  • La traduction entière est conservée en mémoire, que vous l'utilisiez ou non
  • Ce qui est pire, cela instancie tout le tableau de données chaque fois que vous avez besoin d’une ligne (cela prend un peu de temps et assez de mémoire en PHP)
  • Impossible de gérer les formes plurielles pour plusieurs langues
  • Le code, cette traduction est difficilement lisible
  • Le code, en utilisant cette traduction, n'a pas de solution de repli incorporée à utiliser en cas de traduction absente.

En gros, votre implémentation est largement utilisée par de nombreux projets qui souhaitent ardemment revendiquer leur soutien à l’internationalisation et l’invention très innovante de la roue, mais se moquent bien du résultat et ignorent les avantages des inconvénients.

C'est la même réponse que pour toutes les questions qui ressemblent à:

  

Quoi de mieux avec [hautement prouvé   et solution largement utilisée]   que avec [mon hacky arrogant noob   mise en œuvre]?

  • Cela fait longtemps que je suis ici, et croyez-le ou non, si un développeur expérimenté y a travaillé, l'a utilisé et l'a loué, c'est probablement pour une raison.
  • C'est une norme et même si votre solution serait meilleure, le prix à payer pour la casser ne serait peut-être pas rentable.
  • Votre implémentation peut faire mille fois plus que votre implémentation, car elle a été développée dans une optique globale alors que votre idée ne vise qu'à résoudre votre problème.

Je ne critique pas, nous avons tous agi de la sorte, essayant de nous convaincre que nous sommes des smarties et que d’autres sont des programmeurs excessifs. Cela fait partie de la façon d'apprendre. En fait, je le fais continuellement, réinventant la roue ou montrant avec mes amis / collègues quelque code KISS que j'ai piraté. Avec le temps, vous finissez par en faire de moins en moins, et je suppose que vous arrêtez de le faire le jour où vous méritez réellement de le faire: -)

L’avantage de gettext par rapport à d’autres solutions telles que la vôtre, les tables de chaînes Java ou les ressources Windows, est que cela rend le code source plus lisible.

Comparez ceci:

printf(_("No photo available (error %d)."), err);

avec ceci:

printf(i18n(NO_PHOTO), err);
// or some variant of the same thing

Dans le premier cas, vous pouvez voir le message là-bas dans le code et vous savez exactement ce qu'il fait. Dans ce dernier cas, vous ne voyez qu'une constante symbolique et devez rechercher le spécificateur exact de texte et de format.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top