Как лучше всего переводить строки, переданные как переменные в модуль Django? - PullRequest
0 голосов
/ 01 июля 2018

Я делаю первые шаги в Django и пытаюсь заставить работать текстовые переводы, которые я передаю в приложение через файл .ini.

Скажи, что мой init.ini это:

[test]
GREETING = Hello World

а по моему settings.py я делаю:

from six.moves import configparser
from django.utils.translation import ugettext_lazy as _

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# Retrieve initialization configuration
init_parser = configparser.ConfigParser()
init_parser.read(os.path.join(BASE_DIR, 'init.ini'))

...
HELLO = init_parser.get('test', 'GREETING')
HELLO = _(init_parser.get('test', 'GREETING'))

переводы моих тегов не отображаются при вызове makemessage.

Документация говорит

(Предостережение с использованием переменных или вычисленных значений, как в предыдущие два примера, это то, что Django обнаруживает перевод строки Утилита django-admin makemessages не сможет найти эти строки. Больше о makemessages позже.)

но они хотя и охватывают makemessage на странице документации, но не дают решения о том, как переводить переменные / вычисленные значения, как это. Таким образом, мой вопрос:

Есть ли какой-нибудь рекомендуемый практический способ передачи строк в качестве переменных в модуль python и makemessage перехватывает их?

EDIT
добавление расширения, как в django-admin makemessages -l de --e=html,py,txt,ini, также не работает, но теперь мне любопытно, как я могу сделать файл txt, который будет покрыт. Может быть, это идея.

1 Ответ

0 голосов
/ 01 июля 2018

Итак, это django-admin makemessages -l de --e=html,py,txt,ini привело меня на правильный путь, потому что, если txt включено по умолчанию согласно документации , оно должно работать как-то.

Я создал foo.txt:

_("yeah why not")
{% trans "maybe like this" %}

и второй фрагмент обнаружился в файле .po при вызове makemessages.

Я создал foo.ini:

_("from ini, yeah why not")
{% trans "from ini, maybe like this" %}

и запуск django-admin makemessages -l de --e=html,py,txt,ini включили второй фрагмент в файл .po.

Итак, {% trans ""%} - похоже, что выполнение всех фрагментов текста в файле инициализации делает эту работу. Затем я могу получить переведенное значение из моего модуля.

...