如何在Django中翻译对象属性?

时间:2017-02-06 11:47:51

标签: python django django-models

是否可以为Django对象进行翻译?

假设我有模型CategoryProduct。当用户添加新产品时,他们必须从Category个对象中进行选择。我想翻译这些名字。

class Category(models.Model):
    name = models.CharField(max_length=100, verbose_name=_('Category'))

    def __unicode__(self):
        return u'{}'.format(self.name)

    class Meta:
        verbose_name_plural = _('Categories')

class Product(models.Model):
    user = models.ForeignKey(User, verbose_name=_('Company'), related_name='products')
    name = models.CharField(max_length=200, verbose_name=_('Name'),)
    category = models.ForeignKey('Category', verbose_name=_('Category'), related_name='products')

    class Meta:
        verbose_name = _('Product')
        verbose_name_plural = _('Products')

    def __unicode__(self):
        return u'{}'.format(self.name)

因此,在运行服务器之前,我创建了几个类别,如'电子'。

如果将“电子”这个名称翻译成SK语言的“Elektronika”,我该怎么办?

1 个答案:

答案 0 :(得分:0)

我假设您将from django.utils.translation import ugettext_lazy as _放在models.py中。接下来要做的是将语言和区域设置设置为settings.py

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
LANGUAGES = (
    ('en', ugettext('English')),
    ('tr', ugettext('Turkish')),
    ('fr', ugettext('French')),
)
LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),

)

之后,您必须将'django.template.context_processors.i18n',放入settings.py的context_processors中。如果您完成所有这些操作,您只需在终端中运行以下命令;

django-admin makemessages --locale=tr
django-admin compilemessages --locale=tr

当你这样做时,django会在你的项目目录中创建名为locate的文件夹。在语言环境目录中,您将看到应用makemessages的语言代码。 enter image description here

在其中您可以编辑django.po个文件。 django.po文件将如下所示。

msgid "Content"
msgstr "İçerik"

将“内容”翻译为“İçerik”(土耳其语)后,您应该再次makemessagescompilemessages。之后,只要django看到“内容”,而您的网站语言是土耳其语(在此示例中),它就会将其呈现为“İçerik”。