Localisation en php, bonnes pratiques ou approche?

11

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 !!

sree
la source
2
avez-vous envisagé gettext?
sagarchalise
@sagarchalise je l'ai étudié, mais je veux construire ma propre méthode, je, e l'une des deux ci-dessus. Donc, je voudrais savoir quelle méthode fonctionne plus rapidement et quelle est la plus fiable! :)
Sree
Si vous voulez savoir en termes de vitesse, faites quelques tests. Qu'est-ce qui fonctionne plus rapidement, 1M de fois la première ou la deuxième méthode?
Francisco Presencia
2
Ne réinventez pas une roue qui fonctionne bien.
gbjbaanb

Réponses:

10

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).

oezi
la source
Merci pour votre réponse, mais pourrais-je savoir par ce qui précède quelle méthode est la meilleure à construire en termes de vitesse et de fiabilité.
sree
10

Tout d'abord, gettextc'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 arrayce 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 variablede 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 $_welcomepar 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.phpvous aurez quelque chose comme define( 'LABEL_WELCOME', 'Welcome' );et dans votre no.lang.phpvous 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:

  1. Réfléchissez à la façon dont les traducteurs peuvent l'utiliser et trouvez une solution de travail KISS pour eux.

  2. Réfléchissez à la façon dont vous pouvez rester synchronisé entre différentes langues.

  3. 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.

  4. Réfléchissez à la façon dont vous pouvez appliquer / modifier la logique lors de la récupération des traductions.

  5. 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!

Mahdi
la source
tu ressembles à un voyageur dans le temps :) tnx pour la réponse!
Sree
3
@sree Oui! Je viens du 4 avril 2014! Si vous achetez des actions Facebook ou WhatsApp en 2012, vous n'aurez pas besoin d'écrire du code PHP en 2014!
Mahdi
1
rofl a accepté !!!
2014