Руководство по переводу TTS для разработчика

S
Автор Sergiiy
Обновлено 1 год назад

Перевод фраз в приложениях IVR почти такой же, как и для обычных приложений, использующих gettext. Но gettext не простой пакет и в нем так много утилит, что стоит создать это небольшое руководство.

Вспомогательные скрипты

Для упрощения процесса перевода каталог po присутствует в папке ivrd , которая содержит несколько вспомогательных скриптов.    

  • ivrd/po/xgetpo.sh  — скрипт собирает все фразы из всех исходных файлов Python в каталоге ivrd и его подпапках и объединяет все новые изменения в файл ivrd/po/ivrd.pot .    
  • ivrd/po/mergepo.sh  — этот скрипт объединяет изменения из файла ivrd/po/ivrd.pot в файл ivrd/po/${LANG}.po . Скрипт требует параметр - двухбуквенный код языка.    
  • ivrd/compilepo.sh  — скрипт компилирует переведенный файл ivrd/po/${LANG}.po в файл ssp/locale/${LANG}/LC_MESSAGES/ivrd.mo . Скрипт требует параметр - двухбуквенный код языка.    
  • ivrd/prompt_utils.py  — скрипт может выполнять несколько полезных тестов и собирать статистику по наборам подсказок.

Подготовка к переводу на новый язык

Представьте, что приложения ivrd должны быть переведены на турецкий язык (код языка tr ). Это предположение будет использоваться во всем нижеследующем тексте. 

Прежде всего, необходимо создать файл перевода. Этого можно достичь, запустив:


$ cd ivrd/po $ ./mergepo.sh tr

Это создаст  файл ivrd/po/tr.po  . Этот файл представляет собой обычный текстовый файл, поэтому его можно редактировать в любом текстовом редакторе.

Перевод файла перевода

Теперь, когда у вас есть tr.po, можно сделать перевод. Файл содержит такой заголовок:  

msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-08-23 12:44+0300\n" "PO-Revision-Date: 2007-08-23 12:44+0300\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ASCII\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n"

Обратите внимание, что вы должны изменить значение Project-Id-Version . В противном случае компилятор будет раздражать вас предупреждением.    

Остальная часть файла — это фразы для перевода. Фразы бывают двух форм - для простых фраз:

msgid "Some English text" msgstr ""

и для форм множественного числа:

msgid "There is one apple" msgid_plural "There are %n apples" msgstr[0] ""

msgid * — это фразы для перевода, а msgstr* — переводы (на данный момент они пусты). В турецком языке нет формы множественного числа, поэтому вы можете видеть, что форма множественного числа для перевода не предлагается.    

Это был краткий обзор содержимого файла, чтобы вы могли начать перевод. Все пустые строки в msgstr должны быть заполнены переведенными фразами. Вы можете использовать любую кодировку, но не забудьте указать правильное имя кодировки в подполе charset поля Content-Type .      

Примечания для переводчиков

Итак, вот момент, когда фразы должны быть переданы человеку для перевода.

Языковой модуль TTS

Для поддержки преобразования числа в текст, даты в текст, длительности в текст и т. д. необходимо создать модуль python для конкретного языка.

Модуль должен быть назван двухбуквенным кодом языка в верхнем регистре. Итак, для турецкого вам нужно создать файл TR.py. Этот файл необходимо поместить в каталог ivrd/TextSynth . Существующие языковые модули следует использовать для создания нового модуля. Вот список требований к модулю:    

функция _phrase_noop() должна быть определена, и она должна преобразовывать специфичные для вашего языка фразы в UNICODE (если только ASCII недостаточно). Все слова и фразы должны быть инкапсулированы в вызовы _phrase_noop(). Также вы не можете использовать какие-либо функции TTS в этом модуле, чтобы избежать бесконечных рекурсий.

При использовании кодировки, отличной от ASCII, вы должны определить ее во второй строке модуля:  

#!/usr/local/bin/python # -*- coding: UTF-8 -*-

Эти методы должны быть созданы:

  • sayNumber()
  • sayDigits()
  • sayDuration()
  • sayDatetime() (this is used by the Voicemail app for now)

Файл TextSynth/__init__.py должен быть изменен для поддержки вашего нового модуля.

Информация, которая должна быть получена для создания модуля, суммируется.

Быстрое создание

После того, как переводы сделаны и помещены в файл po/tr.po, перевод нужно скомпилировать:  

$ cd ivrd/po $ ./compilepo.sh tr

Последнее, что нужно сделать, это создать каталог подсказок:

$ mkdir ~ssp/prompts/ivrd/tr

Теперь  скрипт prompt_utils.py  можно использовать для создания списка подсказок:

$ cd ivrd $ ./prompt_utils.py -l tr list unmapped

Это создаст файл unmapped-tr.html , содержащий все фрагменты фраз на турецком языке и соответствующие фразы на английском языке.  

С этого момента рассказчик начинает свою работу.

Регистрация подсказок

После записи подсказки помещаются в папку ssp/prompts/ivrd/tr в подписанном линейном 16-битном монофоническом формате 8000 Гц и в формате с кодировкой g729.  

Затем необходимо создать файл ssp/prompts/ivrd/tr/prompt_map.txt . Первая строка файла должна содержать кодировку, используемую для представления фрагментов фраз, а затем следуют сопоставления подсказок:  

# encoding: utf-8 file1|First phrase file2|second phrase

После этого вы можете снова запустить

./prompt_utils.py -l tr list unmapped

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

Оцените эту статью