Статья №194
Локализация платформы Oktell
Порядок подготовки локализованных версий Oktell. Механизмы перевода и поддержки.
Общее
Комплекс Oktell имеет механизм подключения пакетов локализаций, соответствующих различным языкам. По умолчанию Oktell имеет русскую языковую схему, но может быть адаптирован к любому другому языку.
Адаптация производится компаниями-партнерами с дальнейшей поддержкой и синхронизацией пакета с обновляемыми версиями программы.
Пакет локализации включает в себя:
- Языковой файл с фразами, используемыми сервером, клиентским приложением и базой данных.
- Руководство пользователя (опционально руководство по интеграции)
- Алгоритм озвучивания числительных (123 — «сто двадцать три»)
- Озвучка числительных, применяемых в алгоритме на языке локализации.
Опционально в перечень мероприятий для полноты решения могут попадать:
- Сайт поддержки версии на языке локализации.
- Языковая лицензия.
- Дистрибутив на языке локализации.
- Файл с пиктограммами, содержащий логотипы.
- Файл с цветовыми схемами.
Языковой файл
Файл с языковыми схемами имеет XML структуру и подключается комплексом непосредственно сразу после старта. И серверная служба, и клиентское приложение используют языковой файл при необходимости генерации тех или иных текстов, а также некоторых простых алгоритмов, определенных текстовыми правилами (например, транслитерации в латиницу). Файл располагается в каталоге с приложением (сервер и клиент), однако клиент после успешного соединения с сервером автоматически применяет языковую хеш-таблицу, скачанную с сервера.
Свободно распространяемый в открытом виде файл с текстами на русском языке доступен в любое время по запросу партнера. Высылается самая последняя версия «от сего дня».
В XML структуре все тексты распределены древовидно по группам. Так, на первом уровне всё делится на клиентское приложение, серверную службу, общие тексты, тексты режима активации и подключения к серверу, тексты базы данных. В клиентском приложении содержатся группы соответствующие различным блокам и модулям и т.д. В каждой группе присутствуют подгруппы и, собственно, текстовые элементы со значениями.
Oktell на основании структуры выстраивает таблицу соответствий «код» — «текст». Например, код «cli.office.personal.label.filter» и значение «Найти». При этом каждая часть кода, отделенная точкой, кроме последней — это коды групп, и лишь последняя — код текстового поля.
Перевод комплекса на другой язык состоит в создании аналогичной копии файла с правильным вполне определенным именем и замене значений всех текстовых полей с оригинального русского (или иного существующего языка) на их непосредственные переводы в языке проводимой локализации. При этом процедура замены должна проходить с полным соблюдением оформления: если строка начинается с заглавной буквы, то и в переводе должна начинаться с заглавной буквы, если в конце стоит двоеточие, то и в переводе должно стоять двоеточие. Если размер текста в оригинале имеет одно слово, то и в переводе необходимо приблизительно соответствовать — 1-2 слова, если текст в оригинале многострочный, то и в переводе его следует делать многострочным с соблюдением смыслового соответствия. Исключением является специальная комбинация символов *#*, использующаяся в служебных целях для обеспечения разработчиков информацией о том, что переведено, а что еще нет. Перед началом перевода лучше, чтобы потом не путаться, сразу удалить *#* из оригинального русскоязычного файла (Ctrl+H в блокноте с заменой *#* на пустоту).
Для помощи в переводе, а также дальнейшей поддержке языка (отслеживании изменений и проведении соответствующих корректировок) создано специальное приложение LangEditor. Оно состоит из нескольких файлов и написано на базе клиентских библиотек Oktell. Дабы снизить размер архива с приложением, в него не включены библиотеки DevExpress*.dll. Их можно скопировать из папки клиентского приложения. После запуска в нем необходимо выбрать файл-оригинал и файл-локализацию. Необходимо убедиться, что атрибуты файла языка локализации позволяют производить его модификацию. В левой части экрана отображается дерево языковой схемы, содержащее англоязычные коды на латинице, используемые комплексом (исходя из выбранного файла языка-оригинала). После выделения определенного узла дерева в правой отображается таблица, в которой все тексты представлены в виде трех столбцов — относительный код (относительно выбранного узла дерева), текст-оригинал и текст-локализация. Текст локализации может быть подвергнут корректировке с последующим сохранением. Для помощи в проведении последующей синхронизации файла языка локализации с оригиналом более новой версии LangEditor подсвечивает красным цветом все позиции, которые отсутствуют в файле языка локализации, но присутствуют в файле оригинального языка. Также красным цветом подсвечиваются все строки, изменение которых в языке оригинале было произведено уже после проведения локализации при сохранении того же кода.
После создания файла необходимо вручную в XML структуре изменить атрибуты главного тега <languagefile/>, проставив туда название языка, код языка («ru», «eng», «ua», «chz» и т.д.), а также код владельца, сопоставляемый с кодом лицензии («eng.telemcontact», «chz.alfainform» — выдается ООО «Телефонные системы»).
Параллельно с созданием файла можно производить его тестирование. Для этого необходимо присвоить ему название Lang[X].xml, где [X] — код языка. Разместить в каталоге сервера и клиента. В конфигурационных файлах сервера и клиента заменить значение ключа Language на [X] (<add key=”Language” value=”X”/>).
Если файл незашифрован, то никаких препятствий к его применению не создается. Сразу после перезапуска службы и клиента результат частичного перевода будет доступен в тех режимах, перевод которых осуществлялся.
В случае, если приложение не находит в файле требуемой комбинации кодов, в лог-журнал Exception соответствующего приложения заносится строка-предупреждение.
Загрузка текстов нешифрованных файлов полностью пишется в лог-журнал Common соответствующего приложения. В случае возникновения спорных вопросов имеет смысл обратиться туда и посмотреть, что именно система загрузила в соответствии с тем или иным кодом.
При формировании коммерческого пакета файл лицензии шифруется. Для этого в конфигурационный файл (службы или клиентского приложения) создатель должен занести специальную строку. Сразу после загрузки текущего выбранного языка рядом с исходным нешифрованным файлом Lang[X].xml будет создан шифрованный файл Lang[X]_crypted.xml. В дальнейшем его необходимо переименовать и включить в пакет локализации. Файл будет защищаться лицензией, если в основном теге XML-структуры установлен атрибут owner в предоставленное вендором значение (упоминалось выше).
Для правки приложению LangEditor необходимо предоставлять нешифрованные файлы.
Спец.символы
*#* — тестовая последовательность символов файла русского языка. Поскольку русский является языком по умолчанию и применяется даже в отсутствии языковых файлов, то в целях удобства разработки и отслеживания правильности и готовности кода программы к проведению локализации эти символы являются вспомогательными маркерами. Не следует переносить их в язык локализации. А лучше сразу перед началом перевода создать копию оригинального файла и заменить *#* на пустоту (Ctrl+H в блокноте).
Последовательность символов #\n# — означает признак конца строки. Такие спец.символы имеются в файле языка-оригинала (русский). Точно такой же последовательностью можно пользоваться при формировании текстов на языке локализации для организации разрыва строк (это полезно в том смысле, что редактор приложения langeditor однострочный и для разделения строк невозможно воспользоваться клавишей Enter).
{0},{1},{2}… — указывают места для параметров, в которые Oktell должен подставить некоторые внутренние значения. Категорически запрещено изменять их число и значения при формировании переводных текстов. То есть, если в значении языка оригинала содержится {0} и {1}, то и в переводе той же строки должны содержаться {0} и {1} в любой последовательности и в любом количестве, но не менее одного для каждого. В противном случае в том месте, где происходит использование этой текстовой строки, возникнет исключение в программе.
Перевод связанных с количественными значениями существительных (например доллар, доллара, долларов) — в различных языках существуют различные правила формирования окончаний. Если в языке локализации правила отличаются от русского, то имеет смысл воспользоваться схемой «один и несколько», то есть не различать окончания для всех отличных от единицы количеств, и формировать перевод с учетом этого. Например, вместо «Найдено 10 записей» готовить перевод «Найдено записей: 10».
%s, %d.. — указывают места для параметров четко определенного формата. Категорически запрещается что-либо изменять в количестве и качестве этих спец.символов при переводе тех или иных значений. В противном случае система сгенерирует исключение и, вероятнее всего, процесс выгрузится.
Стандартные отчеты call-центра
В разделе «Call-центр. Статистика» содержится некоторое количество предустановленных отчетов. Разумеется, отчеты будут действовать и в переведенных версиях, так как написаны на T-SQL. Однако названия полей, названия отчетов, принадлежность к различным группам (доступным в выпадающем списке фильтра) требуют корректировки. Вся эта информация находится в самих отчетах. Отчет представляет собой совокупность некоторых данных, в том числе и текст запроса на T-SQL. В рамках этих данных присутствуют и описания полей, и тип отчета, и группы.. В базе данных отчеты хранятся в бинарном виде и корректировке не поддаются. При первом старте системы отчеты автоматически сохраняются, загружаясь из каталога ReportAutoUpdate (если иное не указано в конфигурационном файле сервера). Таким образом для дистрибутива переведенного комплекса должны быть сформированы переведенные отчеты. Для осуществления перевода можно исправить все отчеты вручную, поочередно открывая их на редактирование и изменяя название, описание, имена полей, название параметров, впечатывая новую последовательность групп-владельцев для фильтра. После этого выделив нужные отчеты осуществить их экспорт в файл. Во избежание дальнейшего пересечения с отчетами, базовыми для русской версии, можно также изменить идентификаторы. Сделать это (да и весь остальной перевод) можно путем корректировки экспортированного файла *.xmlr. Он имеет открытую текстовый вид с XML-структурой и совершенно очевидными полями, соответствующими отчетам.
То же касается и индикаторов.
Руководство пользователя
Оригинальное руководство пользователя (мануал) формируется в программе Help&Manual. Оно содержит текст на исходном русском языке, а также скриншоты программы, отснятые в программе с выбранным русским языком.
Для локализации руководства необходимо предварительно осуществить перевод языка, чтобы отснять скриншоты уже готовой локализованной версии.
Партнерам свободно отправляется исходный код мануала со всеми используемыми в нем изображениями и программой для редактирования.
При желании можно исключить chm в пользу html или других форматов, можно также формировать облегченные версии руководства по усмотрению компании, осуществляющей локализацию. Привязка к manual.chm в комплексе присутствует по кнопке «F1» и по пиктограммам в заголовках главного меню.
При формировании полной версии мануала скриншоты локализованной версии должны быть отсняты в точном соответствии со смыслом и размерами скриншотов мануала-исходника и быть сохранены в файлы с теми же именами и расширениями. В основном это *.png. Скриншоты могут быть отличны по содержанию, но должны быть аналогичны по смыслу.
Все тексты переводятся на язык локализации. Не имеет смысла осуществлять перевод слово в слово и абзац в абзац. В данном случае гораздо важнее и лучше передать смысл как можно более кратко и понятно.
Вероятно, не имеет смысла переводить раздел «Истории обновлений». Однако его следует периодически изучать для обеспечения поддержки и своевременного обновления мануала вслед за обновлением оригинала и, собственно, версии программы.
После того, как код мануала будет полностью готов (тексты заменены с русского языка на язык локализации, скриншоты отсняты в переведенной версии программы), мануал «билдится». Или отправляется в разработку «Телефонных систем», чтобы «сбилдили» там.
Алгоритм озвучивания числительных
Для работы компонента сценариев IVR «Воспроизведение числа» требуется включение в состав комплекса алгоритма по формированию текста числительных из цифр на языке локализации.
Так, 123 посимвольно на русском — «один два три», а на английском «one two three».
А 123 целиком на русском «сто двадцать три», а на английском «one hundred and twenty three».
В код oktell должен попасть алгоритм, если он отличается от уже существующих и созданных. Его можно написать самостоятельно, найти в поисковиках, либо сформировать понятные текстовые правила для неговорящих на интересующем языке программистов группы разработки Oktell.
Очевидно, алгоритм должен поддерживать все варианты озвучки, способные быть настроенными компонентом «Воспроизведение числа», а также содержать и охватывать все слова, приведенные в разделе руководства «Дополнительно. Файлы для числового воспроизведения».
Звуковые файлы для озвучивания числительных
Одним или несколькими голосами, либо синтезатором речи (если он выдает адекватные результаты) необходимо сформировать набор звуковых файлов, каждый из которых является отдельным самостоятельным блоком, названным и озвучивающим соответствующее значение. Так, рассматривая пример «123» в коллекции файлов должны находиться файлы «один.wav», «два.wav», «три.wav», «сто.wav», «двадцать.wav». При этом каждый файл должен быть записан в двух экземплярах — в режиме с продолжением тона, и с окончанием тона (символ «_» в конце имени файла). Например в фразе «сто двадцать три» — используется файл-слово «три» с понижением тона, а в фразе «сто двадцать три тысячи» — с продолжением тона.
Локализация, перевод, языки, мультиязычность, языковой файл, мануал, руководство пользователя, алгоритм, озвучка, поддержка языка, пакет локализации