7
votes

Comment faire de la traduction de Django de champs modèles?

Je traduisez un site Web Django dans 6 langues. C'est la première fois que j'ai travaillé sur la traduction.

C'est un site de commerce électronique. Comment puis-je traduire les champs du modèle? Par exemple: Nom de la catégorie qui est en réalité dans la base de données et ne pas être écrit dans le fichier PO lorsque j'essaie {% trans cat.name%} ou ugettext (nom de cat.name)


1 commentaires

Bonne question. Voici une question similaire posée: Stackoverflow.com/questions/2019364/... qui pointe une application Django qui pourrait résoudre votre problème.


6 Réponses :


5
votes

Utilisez verbose_name :

class Book(models.Model):
    title = models.CharField(verbose_name=_('Title'),max_length=50)

    class Meta:
       verbose_name = _('Book')
       verbose_name_plural = _('Books')


0 commentaires

3
votes

Vous avez besoin de quelque chose comme https://github.com/geomin/django-lingua < / p>


2 commentaires

Ce projet est mort


On dirait que l'auteur de django-lingua contribue à django-modeltranslation qui est assez vivant.



2
votes
from django.utils.translation import ugettext as _
class Book(models.Model):
    title = models.CharField(_('title'),max_length=50)you can also do it this way.
title will become a translatasble string

1 commentaires

@mossplix à l'aide de Verbose_Name = _ ("titre") est plus propre.



2
votes

Qu'est-ce qui manque à toutes les réponses, est le type de gettext que vous devez utiliser. Il s'avère que vous devez utiliser gettext_lazyzy , voici mon code de travail xxx


0 commentaires

0
votes

Malgré son vieil, ce projet semble être la solution la plus utilisée et la plus entretenue:

https://github.com/deschler/django-modeltranslation/

https://django-modeltranslation.readthedocs.io/en/Latest/


0 commentaires

0
votes

option A: strong>

C'est assez simple en fait. En supposant que vous ne voulez pas continuer à examiner vos fichiers locaux (ni à compter sur des modifications tierces telles que Rosetta), ce qui peut être fastidieux, vous pouvez simplement traduire tous vos champs de modèle de manière dynamique. Une façon de le faire est via l'application: Django-Parler, qui vous permet de tirer parti de ses classes TRUCLABLEBLODEL, TraductionFields. ---- Plus d'infos sur ceci se trouve dans le livre Django 3 par exemple: Chapitre 9 (très exhaustif). P>

Option B forte> p>

si Vos options sont resserrées par des choix ( cela se produit em>) ... & vos champs de modèle s'appuient sur une liste de choix prédéterminés, vous pouvez simplement rendre les choix traduisés comme suit: P>

dans modèles.py p> xxx pré>

ou si vous utilisez Enums p>

dans ENUMS.PY P>

from django.utils.translation import gettext_lazy as _
@unique
class StudentChoice(Enum):
  rad = _('Radio')
  tel = _('Television')


0 commentaires