Je fais partie d'une équipe de plus de 20 développeurs. Chaque développeur travaille sur un module séparé (environ 10 modules). Dans chaque module, nous pourrions avoir au moins 50 formulaires CRUD, ce qui signifie que nous avons actuellement près de 500 boutons d'ajout , de sauvegarde , de modification , etc.
Cependant, parce que nous voulons globaliser notre application, nous devons pouvoir traduire des textes dans notre application. Par exemple, partout, le mot ajouter devrait devenir ajouter pour les utilisateurs français.
Ce que nous avons fait jusqu'à présent, c'est que pour chaque vue de l'interface utilisateur ou de la couche de présentation, nous avons un dictionnaire de paires clé / valeur de traductions. Ensuite, lors du rendu de la vue, nous traduisons les textes et les chaînes requis à l'aide de ce dictionnaire. Cependant, cette approche, nous en sommes venus à avoir quelque chose près de 500 ajouter dans 500 dictionnaires. Cela signifie que nous avons enfreint le principe DRY.
D'un autre côté, si nous centralisons les chaînes communes, comme mettre add en un seul endroit, et demandons aux développeurs de l'utiliser partout, nous rencontrons le problème de ne pas être sûr si une chaîne est déjà définie dans le dictionnaire centralisé ou non.
Une autre option pourrait être de ne pas avoir de dictionnaire de traduction et d'utiliser des services de traduction en ligne tels que Google Translate, Bing Translator, etc.
Un autre problème que nous avons rencontré est que certains développeurs sous le stress de livrer le projet à temps ne peuvent pas se souvenir des clés de traduction . Par exemple, pour le texte du bouton d'ajout, un développeur a utilisé add tandis qu'un autre développeur a utilisé new , etc.
Quelle est la meilleure pratique ou la méthode la plus connue pour la mondialisation et la localisation des ressources de chaîne d'une application?
Réponses:
Autant que je sache, il existe une bonne bibliothèque appelée
localeplanet
Localisation et Internationalisation en JavaScript. De plus, je pense que c'est natif et n'a pas de dépendances avec d'autres bibliothèques (par exemple jQuery)Voici le site Web de la bibliothèque: http://www.localeplanet.com/
Regardez aussi cet article de Mozilla, vous pouvez trouver de très bonnes méthodes et algorithmes de traduction côté client: http://blog.mozilla.org/webdev/2011/10/06/i18njs-internationalize-your-javascript-with- un-peu-d'aide-de-json-et-le-serveur /
La partie commune de tous les articles / bibliothèques est qu'ils utilisent une
i18n
classe et uneget
méthode (à certains égards , définissant également un nom de fonction plus petite comme_
) pour récupérer / convertir l'key
auvalue
. Dans mon explication, leskey
moyens que la chaîne que vous souhaitez traduire et lavalue
chaîne traduite signifie.Ensuite, vous avez juste besoin d'un document JSON pour stocker
key
les etvalue
.Par exemple:
Et voici le JSON:
Je pense que l'utilisation des solutions de bibliothèques populaires actuelles est une bonne approche.
la source
Je crois que de nombreuses solutions existent déjà pour ce problème dans les langages côté serveur tels que ASP.Net/C#.
J'ai décrit certains des principaux aspects du problème
Problème : nous devons charger les données uniquement pour la langue souhaitée
Solution : à cette fin, nous sauvegardons les données dans des fichiers séparés pour chaque langue
ex. res.de.js, res.fr.js, res.en.js, res.js (pour la langue par défaut)
Problème: les fichiers de ressources de chaque page doivent être séparés afin que nous n'obtenions que les données dont nous avons besoin
Solution : nous pouvons utiliser certains outils qui existent déjà comme https://github.com/rgrove/lazyload
Problème: nous avons besoin d'une structure de paires clé / valeur pour enregistrer nos données
Solution : je suggère un objet javascript au lieu de string / string air. Nous pouvons bénéficier de l'intellisense d'un IDE
Problème: les membres généraux doivent être stockés dans un fichier public et toutes les pages doivent y accéder
Solution : À cet effet, je crée un dossier à la racine de l'application Web appelé Global_Resources et un dossier pour stocker le fichier global pour chaque sous-dossier que nous l'avons nommé 'Local_Resources'
Problème: chaque membre de sous-systèmes / sous-dossiers / modules doit remplacer les membres Global_Resources sur leur étendue
Solution : j'ai considéré un fichier pour chaque
Structure de l'application
Le code correspondant pour les fichiers:
Global_Resources / default.js
Global_Resources / default.fr.js
Le fichier de ressources pour la langue souhaitée doit être chargé sur la page sélectionnée dans Global_Resource - Ce doit être le premier fichier chargé sur toutes les pages.
UserManagementSystem / Local_Resources / default.js
UserManagementSystem / Local_Resources / default.fr.js
UserManagementSystem / Local_Resources / createUser.js
UserManagementSystem / Local_Resources / createUser.fr.js
fichier manager.js (ce fichier doit être chargé en dernier)
J'espère que ça aide :)
la source
"Create" : {"message": "Create", "description": "text on the button that opens the editor with a blank Foo"}
ils le font pour localiser les extensions Chrome par exemple. Ou créez un fichier séparé contenant ces commentaires.jQuery.i18n est un plugin jQuery léger pour permettre l'internationalisation dans vos pages Web. Il vous permet de conditionner des chaînes de ressources personnalisées dans des fichiers «.properties», tout comme dans les ensembles de ressources Java. Il charge et analyse les ensembles de ressources (.properties) en fonction de la langue fournie ou de la langue signalée par le navigateur.
pour en savoir plus, consultez la rubrique Comment internationaliser vos pages avec JQuery?
la source