Je localise mon application php. J'ai un dilemme à choisir la meilleure méthode pour y parvenir.
Méthode 1: Je stocke actuellement des mots à localiser dans un tableau dans un fichier php
<?php
$values = array (
'welcome' => 'bienvenida'
);
?>
J'utilise une fonction pour extraire et renvoyer chaque mot selon l'exigence
Méthode 2: dois-je utiliser un fichier txt qui stocke la même chaîne?
<?php
$welcome = 'bienvenida';
?>
Ma question est quelle est la meilleure méthode, en termes de vitesse et d'effort pour la développer et pourquoi?
Edit: je voudrais savoir quelle méthode sur deux est plus rapide à répondre et pourquoi serait-ce? aussi, toute amélioration du code ci-dessus serait appréciée !!
php
localization
sree
la source
la source
Réponses:
PHP a de grandes possibilités intégrées de localisation. Le moyen le plus courant semble être gettext - ce tutoriel montre comment il est utilisé.
Depuis PHP 5.3, il y a aussi intl qui offre beaucoup plus de fonctionnalités (pour formater les nombres, les dates et les devises en fonction des paramètres régionaux par exemple).
la source
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 besoinglobal
. 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 commedefine( 'LABEL_WELCOME', 'Welcome' );
et dans votreno.lang.php
vous aurezdefine ( '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!
la source