Я новичок, использую библиотеку gettext для перевода текста.Я хочу перевести текст, который есть в следующем файле:
dobles_message.py
def set_message(self, language):
t = gettext.translation("basketmetrics_i18n", "../i18n", fallback=True, languages=["'" + language + "'"])
t.install()
_ = t.gettext
self.message = _("mensaje_dd_1")
Чтобы сделать это, сначала я должен создать dobles_message.po сэта инструкция:
xgettext -i dobles_message.py -o dobles_message.pot -d basketmetrics_i18n
Затем я создал структуру каталогов i18n / es / LC_MESSAGES и i18n / en / LC_MESSAGES и создал версию .po для каждого языка с этими инструкциями:
msginit -i dobles_message.pot -o ../i18n/es/LC_MESSAGES/basketmetrics_i18n.po -l es
msginit -i dobles_message.pot -o ../i18n/en/LC_MESSAGES/basketmetrics_i18n.po -l en
Трижды я изменил кодировку и перевел текст каждого файла.И в-четвертых, я создал файлы .mo из каждого файла .po с этой инструкцией в каталоге i18n / es / LC_MESSAGES и в каталоге i18n / en / LC_MESSAGES
msgfmt basketmetrics_i18n.po -o basketmetrics_i18n.mo
Но, когда я вместо этого запускаю свое приложениеиз перевода текста, мое приложение показывает мне сообщение.
Вот какова моя структура файлов и каталогов:
И содержание моих файлов следующее ...
dobles_message.pot
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-10 13:22+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: dobles_message.py:15
msgid "mensaje_dd_1"
msgstr ""
basketmetrics_i18n.po (английская версия)
# English translations for PACKAGE package.
# Copyright (C) 2018 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# José Carlos <josecarlos@asterix>, 2018.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-10 13:22+0200\n"
"PO-Revision-Date: 2018-10-10 13:31+0200\n"
"Last-Translator: Jos Carlos <josecarlos@asterix>\n"
"Language-Team: English\n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: dobles_message.py:15
msgid "mensaje_dd_1"
msgstr "¡¡¡Hi ###twitter###!!! From www.basketmetrics.com we want to congrats to get your double double nº ###numero### this season. ¡¡¡Congratulations!!!"
basketmetrics_i18n.po (испанская версия)
# Spanish translations for PACKAGE package.
# Copyright (C) 2018 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# José Carlos <josecarlos@asterix>, 2018.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-10 13:22+0200\n"
"PO-Revision-Date: 2018-10-10 13:28+0200\n"
"Last-Translator: Jos Carlos <josecarlos@asterix>\n"
"Language-Team: Spanish\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=latin-1\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: dobles_message.py:15
msgid "mensaje_dd_1"
msgstr "¡¡¡Hola ###twitter###!!! Desde www.basketmetrics.com queremos felicitarte por haber conseguido tu doble doble nº ###numero### esta temporada. ¡¡¡Felicidades!!!"
Что я делаю не так?Я использую python3
Редактировать I:
В моем коде я удалил опцию "fallback = True" и получаю эту ошибку:
На первом шаге я определил домен "basmetmetrics_i18n", и у меня есть файлы .po, созданные с этим именем.Что случилось?
Редактировать II:
Следуя мудрому совету @stovfl, я изменил свою функцию set_message:
def set_message(self, language):
print("language: " + language)
gettext.bindtextdomain('basketmetrics_i18n', '../i18n')
gettext.textdomain('basketmetrics_i18n')
_ = gettext.gettext
self.message = _("mensaje_dd_1")
print("Mensaje traducido: " + self.message)
Прямо сейчас у меня нетНет ошибки в моем приложении, но я все равно получаю сообщение вместо msgstr.Я ничего не понимаю: (