Как я могу получить список всех строк, о которых знает Вавилон?
У меня есть приложение, в котором основные строки написаны на английском языке, а затем различные переводы выполняются в различных файлах.po/.mo, как обычно (с использованием Flask и Flask-Babel). Можно ли получить список всех английских строк где-нибудь в моем коде Python? В частности, я хотел бы иметь интерфейс администратора на веб-сайте, который позволяет кому-то войти в систему и выбрать произвольную фразу, которая будет использоваться в определенном месте, без необходимости вызывать реальный код Python или файлы.po/.mo. Эта фраза может меняться со временем, но ее нужно перевести, поэтому она должна быть о чем-то, о чем знает Бабель.
У меня есть доступ к фактическому файлу.pot, поэтому я могу просто разобрать это, но я надеялся на более чистый метод, если это возможно.
Если вы 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.
Для этого вы можете использовать polib.
В этом разделе документации приведены примеры того, как перебирать содержимое файла.po. Вот одно взятое с этой страницы:
import polib
po = polib.pofile('path/to/catalog.po')
for entry in po:
print entry.msgid, entry.msgstr