2010-06-03 5 views
2

Je cherche à créer une application web. Le site sera en constante évolution: le texte sera réécrit, de nouvelles choses ajoutées, etc. L'application web est écrite en PHP, mais la même chose s'applique à n'importe quelle langue.Quelle est la meilleure façon d'ajouter i18n à une application web?

Fondamentalement, je veux:

1) Le code pour être lisible et maintenable 2) Les traducteurs à envoyer un e-mail quand de nouvelles choses est ajouté en anglais ou en anglais est modifié 3) Pour savoir si quelque chose est à jour ou non. 4) Les traducteurs peuvent mettre à jour les choses en ligne

Je suppose que la meilleure idée est de tout stocker dans une base de données et de gérer des choses de cette façon que les fichiers PO et gettext. $ Lang ('contactus') a l'inconvénient d'être illisible (code-sage), et plus lent à développer (tout anglais ayant besoin d'une clé unique et stocké dans la base de données) $ Lang ('S'il vous plaît nous contacter pour plus d'informations') est plus lisible et plus rapide, mais si l'anglais change (faute de frappe, grammaire modifier, mise à jour) alors la traduction disparaît complètement.

Comment les autres applications/frameworks le gèrent-ils?

Répondre

1

Évitez de stocker des chaînes qui doivent être traduites dans la base de données. Je l'ai fait moi-même et je l'ai regretté. Utilisez des fichiers externes que vous pouvez envoyer aux traducteurs. Utilisez les chaînes dans votre langue préférée comme clés. Donc, pour votre exemple $ lang ('S'il vous plaît contactez-nous pour plus d'informations') est la voie à suivre. Un changement de texte en anglais signifie probablement un changement correspondant dans les traductions alors oui, c'est un problème de maintenance.

De plus, il n'y a pas que des traductions de chaînes. Il existe des symboles et des formats monétaires, des formats numériques (décimales, symboles de regroupement des chiffres, où le symbole apparaît), le formatage de la date. Formatage des noms - dans certains endroits, les gens ont souvent des prénoms dans d'autres, ce qui n'est généralement pas le cas. Lecture de texte de gauche à droite ou de droite à gauche. Pouah.

Pour une application Web, il est parfois beaucoup plus simple de séparer les pages Web en répertoires de langue locale et de les traiter de cette façon. Vous avez toute votre logique métier séparée du code de vue, n'est-ce pas? C'est là où l'intégration de la logique métier directement dans html ala l'approche typique de PHP commence vraiment à faire mal.

+0

Pourriez-vous clarifier pourquoi vous avez déploré l'utilisation d'une base de données? La raison pour laquelle il me semble qu'un projet db est que je vais probablement vouloir des traducteurs (en réalité des gens qui travaillent dans nos bureaux régionaux) pour fournir des traductions et des mises à jour régulières (hebdomadaires). Il est très important de les faire mettre à jour via notre site Web, plutôt qu'un flux de travail où 20 personnes non formées sans logiciel spécialisé sont envoyées par e-mail tous les 5 jours, puis nous les récupérons par petits et grands. – Apemantus

+0

(Je sais que je pourrais encore les amener à éditer un fichier via l'interface Web, mais il y a d'autres avantages comme la date de modification, etc.) – Apemantus

1

Faire une fonction de traduction avec un nom facile à taper, par exemple t ($ key) ou utiliser une solution existante (par exemple Zend_Translate) ou PHP gettext, qui fournit la fonction _ ($ key).

Le format de vos fichiers de traduction ne devrait pas avoir autant d'importance - tout ce qui convient le mieux à votre processus de traduction.

Utilisez votre langue d'origine, par exemple l'anglais, pour la clé. Pour des chaînes plus longues, il est parfois judicieux d'inventer des clés artificielles, par exemple "introduction_text_1"

0

N'utilisez jamais de constantes ou de raccourcis de traduction, n'utilisez pas la base de données, évitez d'utiliser uniquement des tableaux. La seule façon professionnelle de gérer les traductions est une fonction gettext (-like).

Vous ne devez utiliser que _ ("Requêtes en texte anglais original"). Ceci a l'avantage qu'au moins le texte de la langue par défaut est toujours disponible, si les données/fichiers de traduction sont inaccessibles.
Ne vous inquiétez pas des modifications apportées aux chaînes de texte. En réalité, c'est rare.Si vous utilisez la syntaxe gettext, il existe même des outils pour adapter automatiquement les fichiers de langue. Pas beaucoup de bons outils, attention. Mais plus que pour les méthodes de traduction homebrew, et cela fait le travail. Si votre interpréteur PHP ne supporte pas gettext natif, recherchez l'émulation "php-gettext" ou "upgradephp".

Questions connexes