Django internationalisation pour les pages d'administration de traduire le nom du modèle et les attributs
De Django reinhardt, l'internationalisation est très agréable (en fonction gettext, LocaleMiddleware), mais quelle est la bonne façon de traduire le nom du modèle et les attributs pour les pages d'administration? Je n'ai rien trouvé à ce sujet dans la documentation:
- http://docs.djangoproject.com/en/dev/topics/i18n/internationalization/
- http://www.djangobook.com/en/2.0/chapter19/
Je voudrais avoir "Выберите заказ для изменения" au lieu de "Выберите ordre для изменения". Remarque, "l'ordre" n'est pas traduit.
Tout d'abord, j'ai défini un modèle, activé USE_I18N = True
dans settings.py, exécutez django-admin makemessages -l ru
. Aucune entrée n'est créé par défaut pour le modèle des noms et des attributs.
Grepping dans le Django code source, j'ai trouvé:
$ ack "Select %s to change"
contrib/admin/views/main.py
70: self.title = (self.is_popup and ugettext('Select %s') % force_unicode(self.opts.verbose_name) or ugettext('Select %s to change') % force_unicode(self.opts.verbose_name))
De sorte que le verbose_name
propriété méta semble jouer un rôle ici. Essayé de l'utiliser:
class Order(models.Model):
subject = models.CharField(max_length=150)
description = models.TextField()
class Meta:
verbose_name = _('order')
Maintenant la mise à jour po
fichier contient msgid 'order'
qui peuvent être traduits. Alors j'ai mis la traduction en. Malheureusement, l'exécution de l'admin des pages montrent le même mélange de "Выберите ordre для изменения".
Je suis actuellement à l'aide de Django 1.1.1.
Quelqu'un pourrait m'indiquer la documentation pertinente? Parce que google ne peut pas. 😉 En attendant je vais creuser plus profondément dans le django code source...
- Désolé de vous demander, mais après la mise à jour .fichier po ne vous exécutez ./manage.py makemessages pour mettre à jour le .mo fichier?
makemessages
à jour uniquement les fichiers po. Je pense que tu veux diredjango-admin compilemessages
- je vous remercie pour votre conseil! J'ai pensé parce que python est un langage dynamique, les fichiers de traduction ne sont pas compilés, en face de C. Malheureusement, ma solution ne fonctionne toujours pas livrer un mixte de traduction (langues sont mélangées dans une même phrase). Pour le nom du modèle de la LANGUAGE_CODE d'implantation du projet est utilisé. La langue pour le reste du message est déterminé par l'Agent de l'Utilisateur ('Accept-Langues"). Je vais expérimenter avec les paresseux de la traduction et de dire si cela fonctionne.
Vous devez vous connecter pour publier un commentaire.
Choses importantes ne sont pas mentionnés dans la documentation de Django:
django-admin compilemessages
, par exemple, comme une partie de votre constructionprocessus. Grâce stevejalim!
ugettext_lazy()
pour les noms de modèle (Meta
classe etverbose_name
)verbose_name
) les noms peuvent également être traduit parugettext_lazy()
se produit lors du chargement des classes du modèle et de la configuration de vos utilisateurs,
en particulier les paramètres du navigateur, ne seront pas pris en compte
les noms des attributs et avec un tuyau. De la même convention est utilisée dans
ruby-gettext. Contexte: les noms des attributs comme "titre" ou " nom " traduits
différemment dans la plupart des langues selon le contexte. Exemple
Livre|title' -> "Titel" ou "Buchtitel" en allemand. Mais
"Chapitre|titre" devrait être traduit par 'Drôle'.
Exemple à l'aide de principes ci-dessus:
Ou est-il une meilleure façon de traduire le modèle et les pages d'administration?
Soit la façon dont nous devrions améliorer la documentation de Django, et combler le fossé!