【问题标题】:where to translate form field labels in django在哪里翻译 django 中的表单字段标签
【发布时间】:2016-01-12 12:24:34
【问题描述】:

我正在努力提高我的网站翻译速度,我的模板中有 .po/.mo 文件和我的所有 {% trans %} 标签,但我不知道如何让我的表单翻译得很好。这些字段未显示在我的 .po 文件中...

app/forms.py

from django import forms
from django.utils.translation import ugettext_lazy as trans

class ContactForm(forms.Form):
    subject = forms.CharField(required=True, label=trans(u'Subject'))
    name = forms.CharField(required=True, label=trans(u'Name'))
    email = forms.EmailField(required=True, label=trans(u'Email'))
    content = forms.CharField(required=True, widget=forms.Textarea, label=trans(u'Content'))

我不确定我还需要在此处包含什么,如果我需要其他内容,请告诉我。我试着跑了

django-admin makemessages -l lang

但它没有填充这些字段

【问题讨论】:

  • 尝试使用python manage.py makemessages -l 而不是django-admin

标签: django internationalization translation


【解决方案1】:

很遗憾,您不能使用trans 作为别名来标记需要翻译的字符串。您必须使用函数的原始名称或_。例如

from django.utils.translation import ugettext_lazy as _
_('Subject') # this string will be marked for translation

from django.utils.translation import ugettext_lazy
ugettext_lazy('Subject') # this string will be marked for translation

编辑

Django 在幕后使用xgettext 来表示makemessages,并且有一个非常具体的关键字列表用于翻译:

--keyword=gettext_noop
--keyword=gettext_lazy
--keyword=ngettext_lazy:1,2
--keyword=ugettext_noop
--keyword=ugettext_lazy
--keyword=ungettext_lazy:1,2
--keyword=pgettext:1c,2
--keyword=npgettext:1c,2,3
--keyword=pgettext_lazy:1c,2
--keyword=npgettext_lazy:1c,2,3

查看第 489 行及以后的 https://github.com/django/django/blob/1.9/django/core/management/commands/makemessages.py

【讨论】:

    猜你喜欢
    • 2011-11-27
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2013-01-26
    • 2014-07-05
    • 2011-09-01
    • 1970-01-01
    相关资源
    最近更新 更多