Tout d'abord, gettext
c'est une bonne façon de procéder, alors ne partez pas si cela ne semble pas facile au début; Cependant, il existe également d'autres options utiles à connaître. Avant d'expliquer cela, examinons d'abord vos suggestions:
Pour array
ce faire, vous avez une solution assez simple. La bonne chose est que vous pouvez stocker vos traductions dans un stockage de données, puis les charger dans votre script PHP sous forme de tableau, et c'est tout. Cependant, si vous souhaitez stocker votre tableau de manière statique dans un fichier PHP, puis le modifier nécessite a) un programmeur PHP ou un utilisateur expérimenté qui connaît la syntaxe PHP, juste pour modifier le fichier b) synchroniser entre même quatre ou cinq fichiers de langue différents pourrait être assez ennuyeux et sujet à des erreurs.
Ce que vous devez considérer ici est: comment ajouter ultérieurement de nouveaux éléments au fichier de langue? Puis-je laisser le soin à un traducteur ou il devrait y avoir un programmeur PHP?
Votre façon variable
de le faire n'est pas pratique. Pourquoi? Je suppose que vous aurez au moins quelques fonctions dans votre application, non? Ensuite, vous devez passer toutes ces variables lorsque vous appelez la fonction, ou vous en avez besoin global
. Si vous pensez que vous aurez plus de dix variables comme celle-ci, je vous déconseille fortement de le faire. Il peut également y avoir un conflit de noms - vous pouvez potentiellement remplacer la valeur d'une autre variable avec le même nom, mais cela pourrait être résolu en ajoutant un préfixe même aussi simple qu'un trait de soulignement, vous aurez donc $_welcome
par exemple. De toute façon, si j'étais vous, je n'y penserais même pas; Ne le fais pas.
Une bonne façon de le faire est de définir des constantes avec un préfixe. Ainsi, par exemple, dans votre en.lang.php
vous aurez quelque chose comme define( 'LABEL_WELCOME', 'Welcome' );
et dans votre no.lang.php
vous aurez define ( 'LABEL_WELCOME', 'Velkommen' );
. La bonne chose à propos de l'utilisation de constantes au lieu de variables est qu'elles sont toujours disponibles dans votre script. Vous n'avez donc pas besoin de les injecter ou de les globaliser. Par rapport aux tableaux et aux variables, ils sont plus rapides en raison de la façon dont PHP les gère - ils occupent moins d'espace dans la mémoire. L'inconvénient est que vous ne pouvez pas les transmettre au traducteur, vous avez donc besoin d'un développeur PHP. La synchronisation entre les fichiers pourrait également être un peu pénible à nouveau.
L'autre option est d'avoir une fonction ou une classe / méthode pour récupérer la traduction. Ce sera moins efficace - mais je ne pense pas que vous ayez besoin de ce type de micro-optimisation, mais l'avantage supplémentaire est que vous pouvez appliquer une logique personnalisée tout en récupérant la traduction. Par exemple, imaginez qu'un jour votre chef de projet bien-aimé vienne vous demander si vous pouvez convertir tous ces textes en majuscules. Vous ne pouvez pas refuser de le faire, donc avoir une fonction entre les deux pourrait vous aider beaucoup lorsque vous devez appliquer / modifier un modèle à toutes vos traductions.
Pour conclure:
Réfléchissez à la façon dont les traducteurs peuvent l'utiliser et trouvez une solution de travail KISS pour eux.
Réfléchissez à la façon dont vous pouvez rester synchronisé entre différentes langues.
Réfléchissez si la même traduction peut être nécessaire, disons pour l'application mobile. Une solution multiplateforme pourrait vous faire gagner du temps. Ne rejetez pas JSON et les bases de données ordinaires.
Réfléchissez à la façon dont vous pouvez appliquer / modifier la logique lors de la récupération des traductions.
J'ai oublié la performance. 99,9% des fois, vous n'irez pas jusque-là pour faire de la micro-optimisation comme Constant vs Variables vs Appels de fonction . Je suppose que votre temps en tant que développeur / personnel est plus cher que le temps d'un processeur.
Mise à jour # 1
Mon Dieu, je poste une réponse à une question vieille d'un an. Pourquoi personne ne dit rien ici? Nous avons besoin d'alertes pour ces cas.
Mise à jour # 2
À droite, il est écrit que c'est une question vieille d'un an; Cependant, cela a été demandé il y a deux ans! Tout est trompeur ici!