2009-08-07 4 views
0

Je construis une application dans django, qui utilise déjà beaucoup de chaînes codées en dur. Ils sont pour la plupart dans des modèles, mais certains aussi dans des fichiers js et quelques-uns peuvent être trouvés dans le code. Maintenant, chaque fois qu'une chaîne doit être changée, les gens viennent à nous et nous devons perdre notre temps à la trouver et à changer. Comment pourrais-je commencer par nettoyer cela et avoir toutes ces chaînes dans des fichiers séparés, qui pourraient être édités par des non-programmeurs?Création d'une base de chaîne pour l'application Django

Répondre

1

Nous conservons toutes les chaînes codées en dur dans un module séparé. Cependant, puisque vous voulez que les utilisateurs modifient les chaînes à leur convenance, il vaut mieux les conserver dans la base de données. Je pense qu'un modèle simple avec une clé (un identifiant de la chaîne) et un champ de valeur (chaîne elle-même) fera l'affaire. Ensuite, vous pouvez développer une page simple où l'utilisateur sélectionne une chaîne par son identifiant et la met à jour comme il le souhaite. Pour savoir comment les utiliser dans vos applications, vous pouvez les récupérer dans un dict lorsque votre application démarre (un bon endroit peut être le module init) et les utiliser en conséquence.

+0

C'est cool, en particulier l'administration Web de toutes les chaînes. Cependant, y a-t-il quelque chose à garder aussi gettext et à la place avoir juste des traductions dans la base de données? – gruszczy

+0

Vous devez stocker les traductions des chaînes dans la base de données, car ce sont à nouveau les utilisateurs qui les fourniront. Toutes les autres chaînes que les utilisateurs ne seront pas autorisés à modifier devront être gettextées. – shanyu

+0

OK, donc les chaînes spécifiques au codeur via gettext (quel genre de chaînes spécifiques au codeur peut-il y avoir? Et pourquoi devrions-nous les traduire ??) et tout le visible pour les utilisateurs dans la base de données. Mais qu'en est-il de la base de chaîne pour javascript, qui peut être conservé dans un fichier séparé? – gruszczy

1

Qu'en est-il de l'utilisation de i18n services (gettext)? Même si vous ne prévoyez pas de localiser votre application, ils offrent un moyen simple et standard de séparer les chaînes du code réel.

De plus, PO étant une norme courante, il existe beaucoup de tools pour éditer les fichiers de ressources; l'un d'entre eux (disponible également sous Windows) est Poedit.

+0

Oui, je sais, qu'il y a un système I18N dans Django qui est basé sur gettext. Cependant, cela fonctionne comme ceci: vous écrivez des messages dans une langue naturelle dans votre code et fournissez des traductions ailleurs. Nous n'avons pas encore de traduction, mais nous aimerions ne pas coder une chaîne dans le code. Et le code python est seulement un endroit. Qu'en est-il des choses javascript ou html? – gruszczy

+0

Les modèles peuvent utiliser les fonctionnalités i18n pour obtenir des chaînes: http://docs.djangoproject.com/fr/dev/topics/i18n/#in-template-code –

Questions connexes