Я перевожу сайт Django с помощью суб-приложения.
Допустим, сайт верхнего уровня называется 'main_site', а вспомогательное приложение - 'sub_app'.
В main_site я использую для перевода только теги trans и blocktrans (с маркерами контекста). Потратив день или два, я могу пометить текст одинаковыми строками, используя ключевое слово context.
Например,
contact.html
<input type="text" class="form-control" placeholder="{% trans "Name" context "ContactForm" %}">
register.html
<h5 class="text-center">{% trans "Name" context "RegisterForm" %}</h5>
makemessages правильно создает эти записи в PO-файле верхнего уровня, и я могу обновлять их различными переводами, а Django корректно отображает их. Я вообще не использую u / pgettext_lazy в приложении верхнего уровня.
После этого я перешел к I18N в sub_app.
В Forms.py у меня есть:
class UserRegistration(forms.Form):
email = forms.CharField(widget=forms.TextInput(attrs={'readonly': 'readonly'}), label=ugettext_lazy('Email'))
makemessages снова правильно создает запись в PO-файле sub_app.
Я использую эту форму в register.html из приложения верхнего уровня, например:
<div class="row">
<div class="col-md-5 col-md-offset-1">
{% bootstrap_field form.email form_group_class="form-group" label_class="control-label" %}
</div>
</div>
Таким образом, проблема в том, что когда эта форма обрабатывается, переведенный текст не выбирается для метки формы.
Я не знаю, является ли это причиной того, что Django не может лениво переводить поля формы вложенного приложения (кажется маловероятным) или потому что я использую теги django-bootstrap3 для визуализации формы (также кажется маловероятным из-за это ) но я довольно сильно застрял.
В конце концов, я хочу сделать это:
email = forms.CharField(widget=forms.TextInput(attrs={'readonly': 'readonly'}), label=pgettext_lazy(u'UserForm', u'Email'))
но uggettext_lazy уже кажется слишком большим мостом.