ugettext_lazy / pgettext_lazy не работает в субприложении Django - PullRequest
0 голосов
/ 16 мая 2018

Я перевожу сайт 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 уже кажется слишком большим мостом.

...