Найти - Пользователи
Полная версия: Как хранить текст?
Начало » Python для новичков » Как хранить текст?
1
nokados
Как в больших проектах с множеством модулей организовать текст, чтобы можно было сделать поддержку нескольких языков, удобно в одном месте менять текст(а не лазать по каждому файлу и менять в коде), и чтобы было оптимально по времени/памяти?
Andrew_Lvov
Посмотрите на реализацию Django, к примеру. Там есть gettext, gettext_lazy и сами Lazy обьекты, которые оборачивают строку и получают перевод только при приведении в unicode.
nokados
Я Django никогда не пользовался. Сейчас посмотрел в github код - там ничего не понятно без знания и понимания структуры фреймфорка. Кто знает, можете кратко объяснить, как эти ф-ии устроены?
py.user.next
nokados
можете кратко объяснить, как эти ф-ии устроены?
В коде все сообщения на английском оборачиваются в _(). Это сокращение по типу
_ = gettext
, чтобы каждый раз длинно не писать.
Потом пишется файл, в котором каждому английскому сообщению соответствует сообщение на русском. И вот эта функция потом их транслирует через файл. Так можно написать много языковых файлов.

Это в общих чертах, сам ещё не делал.
Alen
Универсальный способ для всех языков и фреймворков:
https://ru.wikipedia.org/wiki/Gettext

Кратко: для каждого языка создается текстовый файл с расширением .po , можно руками можно автоматически (крайне рекомендуется) его создавать.
Все тексты для перевода выделяются с помощью специализированных функций используемого вами фреймворка, но общепринятой практикой является приводить функции перевода к знаку подчеркивания, т.е _(“Hello”) .
Текстовый .po файл заполняется строчками, с переводами по типу:

#: myfile.py
msgid “Hello”
msgstr “Привет”

Для редактирования такого файла подойдет любой текстовый редактор, но есть и специализированные программы, например poedit.
Далее po-файл компилируется, для этого есть команда msgfmt (из пакета gettext), для Django удобнее это делать через интерфейс к django-admin:
django-admin.py compilemessages
Собственно вот и всё.
Полная документация интернационализации в Django http://djbook.ru/ch18.html

nokados
Как в больших проектах с множеством модулей организовать текст, чтобы можно было сделать поддержку нескольких языков, удобно в одном месте менять текст(а не лазать по каждому файлу и менять в коде), и чтобы было оптимально по времени/памяти?

Тут еще нужно уточнить на чём проект. Помимо gettext есть другие решения, например у Qt, хотя никто не мешает пользовать в том же Qt — gettext.

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB