Как я могу получить список всех строк, о которых знает Вавилон?

106
11

У меня есть приложение, в котором основные строки написаны на английском языке, а затем различные переводы выполняются в различных файлах.po/.mo, как обычно (с использованием Flask и Flask-Babel). Можно ли получить список всех английских строк где-нибудь в моем коде Python? В частности, я хотел бы иметь интерфейс администратора на веб-сайте, который позволяет кому-то войти в систему и выбрать произвольную фразу, которая будет использоваться в определенном месте, без необходимости вызывать реальный код Python или файлы.po/.mo. Эта фраза может меняться со временем, но ее нужно перевести, поэтому она должна быть о чем-то, о чем знает Бабель.

У меня есть доступ к фактическому файлу.pot, поэтому я могу просто разобрать это, но я надеялся на более чистый метод, если это возможно.

спросил(а) 2021-01-19T18:29:14+03:00 2 месяца, 3 недели назад
1
Решение
136

Если вы alredy используете babel, вы можете получить все предметы из файла po:

from babel.messages.pofile import read_po

catalog = read_po(open(full_file_name))
for message in catalog:
print message.id, message.string

См. Http://babel.edgewall.org/browser/trunk/babel/messages/pofile.py.

Вы alredy можете попробовать получить предметы из файла mo:

from babel.messages.mofile import read_mo

catalog = read_po(open(full_file_name))
for message in catalog:
print message.id, message.string

Но когда я пытаюсь использовать его в прошлый раз, он не был доступен. См. Http://babel.edgewall.org/browser/trunk/babel/messages/mofile.py.

Вы можете использовать polib как писал @Miguel.

ответил(а) 2021-01-19T18:29:14+03:00 2 месяца, 3 недели назад
44

Для этого вы можете использовать polib.

В этом разделе документации приведены примеры того, как перебирать содержимое файла.po. Вот одно взятое с этой страницы:


import polib

po = polib.pofile('path/to/catalog.po')
for entry in po:
print entry.msgid, entry.msgstr

ответил(а) 2021-01-19T18:29:14+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема