«Локализатор исходного кода» предназначен для локализации программных продуктов путем изменения их исходных кодов без предварительной подготовки.
Программа может быть использована при разработке программного обеспечения на серверах сборки, для автоматической локализации исходного кода, но она может также применяться и на рабочих компьютерах пользователей для проверки орфографии в исходных кодах, текстовых файлах, буфере обмена и словарях переводов.
Специальная версия программы позволяет проводить обфускацию исходного кода.


 

пятница, 31 января 2014 г.

Результаты проверки локализации игры Don't Starve

Обычно в качестве исходных файлов для проверки возможностей программы локализации использую файлы локализации открытых программных продуктов, но в данном случае появилась возможность проверить локализацию коммерческого продукта, а именно, очень интересной игры "Don't Starve" (wikipedia).

Данная игра является коммерческим продуктом, размещенным в Steam.
Русификатор к данной игре представлен в виде отдельного мода "Russian Language Pack", который подключается к игре (см. рис. ниже).

Перевод игры производится на сайте Notabenoid (см. рис. ниже).

Автор мода (Some1) разрешил провести проверку локализации и опубликовать ее результаты.

В переводе используется буква "Ё", поэтому для проверки был использован модуль hunspell (см. справку программы) со словарями орфографии OpenOffice, в которых учитывается эта буква.

Файл локализации в формате PO (Gettext), судя по программе POEdit, имеет ошибки формата, а также использует кодировку Windows-1251 без указания на это. Присутствует ошибка дублирования msgid (см. "STRINGS.UI.SANDBOXMENU.TITLEDETAIL"), а также ряд замечаний по переводу генерируемых POEdit.
За исключением кодировки и оформления "шапки" файла формат в целом правильный, поэтому заменил кодировку на UTF8 и "бросил" файл на ярлык "Проверка PO-файла - для переводчика с автоматической проверкой орфографии (русский язык) (бросить файлы или каталоги)".

Сгенерированный отчет: скачать.

В переводе используется множество имен и придуманных названий животных("бифало"), которые отмечены ошибками, поэтому для постоянного использования проверки желательно внести эти слова в словарь исключений программы (см. справку), но для однократной проверки можно просто их проигнорировать.

Используются сокращения, транслитерация на русский язык ("летсплеи"), особенности написания ("ПЧЁ-Ё-Ё-Ё-Ё-ЛЫ"), узкоспециализированные термины ("стик"), описание звуков ("Ам-м-м", "Ам-ням-ням"), которые можно также добавить в словарь.

Есть явные ошибки:
басейн, джентельмен...

Следует учитывать контекст и дикцию персонажа, который возможно не выговаривает или коверкает некоторые буквы.
Явным является, например, "победю", а следующие слова уже на усмотрение локализатора:
chk:   болше     context:   STRINGS.CHARACTERS.WOODIE.DESCRIBE.ROCK_LIGHT.LOW     words:   Нужно болше... дров?
chk:   Надесь     context:   STRINGS.CHARACTERS.GENERIC.DESCRIBE.EYETURRET     words:   Надесь, эта шутка не будет палить в меня.
chk:   коньшмар     context:   STRINGS.CHARACTERS.GENERIC.DESCRIBE.KNIGHT_NIGHTMARE     words:   Это коньшмар!



Множество ошибок в написании слов с буквой "Ё", порой очень странные:
 chk:   лёска     context:   STRINGS.CHARACTERS.GENERIC.DESCRIBE.FISHINGROD     words:   Крючок, лёска и палка!

Примеры ошибок с "Ё":
введете, ведет, веревки, вернется, еще, одежка,..

В нескольких случаях используются латинские буквы вместо кириллицы:
MНE (М и Е), ноcить (С)

Есть слова, которые не являются ошибками, но отсутствуют в словаре и во встроенном словаре программы, например, слова "зашибись", "навалял" и пр.

Примечание: При построении отчета используется также авторский словарь программы, в который я постоянно вношу популярные слова, которые отсутствуют в словарях OpenOffice и др.
Список слов и описание формата можно увидеть в файле "defaultdictionary.sld" (в каталоге программы).
Можно создать свой файл и подключить его, ознакомившись со справкой к программе.
Слова "зашибись", "навалял" и пр. решил в него не включать :) Но пользователи могут легко расширить словарь, в том числе через сам OpenOffice (см. справку: Исключение слов из списка ошибок (словарь исключений)).

Перевод отличается знаками восклицания/вопроса и пр., порой и сам текст имеет странный перевод:

Words (main): I cooked it myself!
Words (tran): Интересно, он тоже говорящий?
     Orpho: отличаются вопросом в конце строки, отличаются знаком вопроса, отличаются знаком восклицания

Words (main): I could sneeze it over.
Words (tran): Да на неё стоит только чихнуть...
     Orpho: отличаются точкой в конце строки

Наличие или отсутствие точек/пробелов в конце/начале предложения может привести к ошибкам оформления в случае, если строки должны быть объединены с другими
или являются заголовками.

Words (main): Is like paper
Words (tran): Как бумага.
     Orpho: отличаются точкой в конце строки

Words (main): It could be used for fashion.
Words (tran): Можно использовать как украшение
     Orpho: отличаются точкой в конце строки

Words (main): The following mods are out of date and have been disabled: 
Words (tran): Следующие моды устарели и были отключены:
     Orpho: отличаются пробелом в конце строки

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

Words (main): Balloon
Words (tran): Воздушный шарик
Remark(tran): 
     compare length: длина <tran> больше чем <main>

Дополнительно провел проверку скриптов программы. 
Программа локализации поддерживает синтаксис ряда популярных языков (Delphi/Lazarus, VisualBasic.NET, T-SQl,..) но скрипты написаны на языке "lua" (см. wikipedia), синтаксис которого на данный момент не поддерживается в виду его редкости, поэтому проверка проводилась без учета синтаксиса, как обычных текстовых файлов в кодировке 1251.
Выбрал файлы lua и каталог "scripts", затем "бросил" на ярлык "Автоматическая проверка орфографии любых файлов (ANSI, OpenOffice, русский язык) (бросить файлы или каталоги)".

Сгенерированный отчет: скачать.

Пример ошибок:
1) подлключения, зависить, изменени,..
2) различное написание слова "бэкап": "бекап, бекапа, бэкапы".

Рядом "ошибок" являются термины и видоизмененные сокращения ("разрабов", "допстроки").

UPDATE:
По просьбе автора локализации внес названия предметов и имена животных в список исключений:
1) http://www.notabenoid.com/book/45556/181139/ready (названия предметов)
2) http://www.notabenoid.com/book/45556/181155/ready (имена животных)
Убрал из отчета (только для этой игры) проверку длины перевода относительно оригинала.

Обновленный отчет: скачать.

UPDATE2:
Добавил изображения.

UPDATE3:
Сгенерировал отчет по po-файлу, как по обычному тексту (также как и по коду), что позволило указывать слова с привязкой к положению текста, а также использовать сортировку по алфавиту и отдельно по положению в файле.
Данный отчет сгенерирован на основе пожелания (см. комментарии) автора по привязке орфографии к положению в тексте, а также сортировки по положению в тексте и по алфавиту.
Минусом такого отчета является отсутствие возможности сравнить оригинальные и переведенные строки и пр. так как не учитывается формат po.
Обычно Po-файлы выступают как источники перевода для перевода кода/текста и для коррекции po-файлов используется специализированное ПО, но в данном случае согласен с автором перевода, что в ряде случаев необходимо работать с такими файлами как с текстом.
В дальнейшем добавлю возможность ссылок в po-файлы и вероятно сортировки для html.
В идеале необходимо использовать данную программу в составе сервера сборки (Hudson, Jenkins, ...), для которого отчеты представлены в junit формате и позволяют легко сворачивать/разворачивать/переключаться между разделами отчета, кроме того он содержит все разделы, а также позволяет отслеживать появление ошибок по ревизиям и на основе junit сервер сборки строит графики количества ошибок и замечаний.
При использовании автоматической сборки можно использовать построение графов в jpeg/pdf формате, для визуального отслеживания перевода и орфографии в коде.
И многое другое.

Обновленный отчет: скачать.

UPDATE4:
Провел перепроверку. Ошибки исправлены.
В ходе проверок и общения с автором получил ряд ценных замечаний и советов
по улучшению проверки орфографии, часть из которых уже реализовал,
а часть будет реализована в будущем.

Очень рад высокой оценке сотрудничества автором проекта.

P.S. Проверка выполнялась на разрабатываемой(debug) версии программы, обновленная релизовая версия с очень большим количеством изменений выйдет в течение недели.
Текущую разрабатываемую(debug) версию можно скачать: 
sourcelocalizer.ru/files/setup/debug/sourcelocalizer-0.9.3debug-r898-win32-setup.zip

27 комментариев:

  1. Чудесно!
    Конечно половина проблем на самом деле не проблемы (те-же несовпадения пунктуации в оригинале и переводе, и даже смысловые, которые в подавляющем большинстве допущены намерено). Есть действительно важные замечания. Сейчас буду разбираться.

    ОтветитьУдалить
  2. Подправьте пожалуйста ссылку на первый отчёт. Там на самом деле нет ссылки.

    ОтветитьУдалить
  3. Программа локализации поддерживает синтаксис ряда популярных языков (Delphi/Lazarus, VisualBasic.NET, T-SQl,..) но скрипты написаны на языке "lua" (см. wikipedia), синтаксис которого на данный момент не поддерживается в виду его редкости, поэтому проверка проводилась без учета синтаксиса, как обычных текстовых файлов в кодировке 1251.

    наверное программа проверки? :)

    ОтветитьУдалить
    Ответы
    1. Программа называется "Локализатор исходного кода" и основная ее функция именно локализация файлов (преобразования кода, перевод, транслитерация, анализ ошибок, отчеты, орфография и пр.). Соответственно, функции проверки орфографии, опечаток и пр. являются дополнительными.

      Удалить
  4. По- моему очевидно, что в данном случае не важно, соответствует ли длина перевода оригиналу. 2/3 если не 3/4 всего отчёта составляют заметки о том, что перевод длиннее оригинала :)

    ОтветитьУдалить
    Ответы
    1. Отчет универсальный, предназначен для различных видов текста и кода, поэтому в данном случае можно просто игнорировать этот раздел отчета. Для удобства перехода между разделами сделано содержание и навигация с помощью гиперссылок в документе.

      Удалить
    2. А вы не могли бы перегенерировать отчёт, исключив этот сегмент, а то он мешает навигации, превращая скролл в узенькую чёрточку.
      И ещё хотелось бы, чтобы ошибки с ё шли отдельным логом.
      Вообще существует возможность отсортировать ошибки по однотипным классам, или я слишком многого хочу?

      Удалить
    3. Если будете переделывать, добавьте пожалуйста в словарь следующие слова:
      http://www.notabenoid.com/book/45556/181139/ready (названия предметов, думаю там нет ошибок)
      http://www.notabenoid.com/book/45556/181155/ready (имена животных, они всё равно на 90% выдуманные).
      Это значительно уменьшит количество ложных срабатываний, и весомо изменит вид графов.

      Удалить
    4. >>А вы не могли бы перегенерировать отчёт, исключив этот сегмент,
      >>Если будете переделывать, добавьте пожалуйста в словарь следующие слова:
      ок. перепроверю с учетом этих слов.
      >>И ещё хотелось бы, чтобы ошибки с ё шли отдельным логом.
      Обычно всех устраивает их указание в общем списке, но добавлю в отдельный лог (дублируя из основного), список именно с Ё из основного.
      Но данный пункт будет поздней. Спасибо за советы.

      Удалить
    5. А я не «обычно» и не «все» :) Вас ведь интересовало, что можно сделать лучше, я и подсказал, что мне сразу бросилось в глаза.

      Удобнее, когда ошибки идут по типам. Сначала я исправляю все ошибки с ё, и могу быть уверен, что теперь с этим полный порядок. Потом чу-щу, и успокаиваюсь, переставая выискивать эту ошибку в тексте.

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

      Удалить
    6. Поэтому если в основном ё останется, то смысла выделять их в отдельный нет, ведь я хотел от них всех избавиться одним махом :)

      Конечно всех будет устраивать, если у них ошибок порядка 20 а не 600 :)

      Удалить
    7. Перегенерировал отчет с учетом списков слов и убранного раздела отчета. См. UPDATE к статье.

      Удалить
    8. >>А я не «обычно» и не «все» :) Вас ведь интересовало, что можно сделать лучше, я и подсказал, что мне сразу бросилось в глаза.
      >>Удобнее, когда ошибки идут по типам...
      >>При таком раскладе я обрабатываю весь текст на предмет ошибок каждого типа,
      Спасибо. Учту при разработке. Постепенно произвожу разделение отчета на разделы, так как количество типов растет и Вы правы, что при большом количестве найденных ошибок, разнообразие их типов может только помешать. Буквы "Ё" отделю от отчета. Возможно лучше сделать 1) общий с Ё, 2) общий без Ё, 3) только Ё... При слишком сильном разделении типов ошибок, затрудняется внесение исправлений в режиме онлайн (launchpad), т.к. постепенное исправление по типам ведет к появлению множества вариантов для утверждений. Поэтому буду ориентироваться на оба вида исправлений и пусть отчасти разделы будут дублированы, но настройки программы позволяют разделы подключать/отключать и даже создать полностью свой отчет.
      Спасибо за предложения.

      Удалить
    9. Поскольку отчёт оформлен в виде html, то (при должном желании, конечно) вы могли бы внедрить перед списком ошибок дропдаун-бокс с выбором того, в какой последовательности идут ошибки:
      Либо так как сейчас, либо по алфавиту, либо по категориям, либо по физическому нахождению в PO файле. И организовать всё это динамически на ява-скриптах.

      Я вот сейчас исправляю, и сразу замечу, что очень раздражает, когда я исправил в одном месте «все» на «всё», потом сделал несколько других исправлений, и вдруг опять исправляю «все» на «всё» уже в другом месте.
      Настолько, что я просто взял, включил фильтр и прошёлся по всему тексту, заменив, пусть и вручную, но сразу все «все» на «всё». Теперь я просто игнорирую эту ошибку в отчёте. Но это лишь частный особенно очевидный случай. Удержать все группы однородных изменений в голове сложно.
      Неудобно, так же, править главы, прыгая на нотабеноиде с каждой ошикой из одной главы в другую. Сортировка в порядке следования в PO файле решила бы эту проблему.

      Удалить
    10. Добавил отчет с учетом положения в файле и алфавита. см. UPDATE3.
      Если есть сервер сборки, то могу помочь с настройкой программы для интеграции в сборку, что позволит строить графики, отчетов и пр. уже в составе отчета сервера, что позволит отслеживать появление ошибок по версиям сборок, а также объединит в единый отчет (junit'ы) ошибки локализации и все замечания компилятора, плагинов проверки кода, тестов и пр. "плюшек" непрерывной интеграции.
      Спасибо за советы.

      Удалить
    11. Это ведь всего лишь любительский проект по переводу игры, к тому же находящийся на своей финальной стадии :)
      Ваше предложение больше подошло бы серьёзным коммерческим проектам с системой регулярного обновления контента.
      Спасибо.
      П.С. новый отчёт к сожалению не понадобится, так как я уже успел порядком углубиться в уже имеющемся. Извините за лишнее беспокойство. Мои замечания не нужно воспринимать как буквальные жалобы и просьбы изменить прямо сейчас и прямо здесь. Я лишь анализировал вашу программу, и советы мои давались на перспективу.

      Удалить
    12. И ещё раз напомню, у меня нет версий сборок как таковых, поскольку PO файл генерируется на каждой клиентской машине отдельно. Конечно есть сборки, которые попадают в релизы версий мода, но они очень быстро обновляются самим модом. Работает это примерно так:
      Игрок запускает игру, и если обновление не происходило достаточно давно (период настраивается в настройках мода), то мод инициирует загрузку текста из нотабеноида, и на основе полученных данных генерирует новый PO файл.
      Например уже сейчас я исправил где-то четверть основного списка ошибок. И все игроки, которые запустили игру после этого, получат свои версии PO (причём у каждого она может быть своя, если момент сборки данных с notabenoid'а e у них разный, а я в это время правил реплики).

      Удалить
    13. >>Ваше предложение больше подошло бы серьёзным коммерческим проектам с системой регулярного обновления контента.
      Нет ничего сложного в настройке, зато после небольшого исправления сразу получаете протестированный, собранный и при желании залитый на steam проект.
      >>Мои замечания не нужно воспринимать как буквальные жалобы и просьбы изменить прямо сейчас и прямо здесь.
      Если есть возможность часть замечаний исправить сразу - я исправляю :)
      Большое спасибо за предложения и замечания.
      >>подошло бы серьёзным коммерческим проектам с системой регулярного обновления контента.
      При настройке мода и обновлениях все выглядит очень серьезно.

      Удалить
    14. В данном случае можно настроить скачивание файлов, их проверку и построение отчета. Можно даже сделать "ночную сборку", чтобы в любой день посмотреть сколько ошибок и в чем они заключаются и соответственно принять решение о необходимости обновления мода. Это относится не только к орфографии и к моей программе, но и позволяет использовать различные популярные утилиты сравнения файлов, например для проверки наличия обновлений переводов в ключевых разделах и пр., а сами исправления вносить через сайт.
      Но возможно проще оставить как есть, если все настолько уже автоматизированно с загрузкой через сайт прямо с машин клиента, тем более при обновлении перевода переводчиками через сайт.
      Спасибо за советы.

      Удалить
    15. Это ужасно, у вас кнопка "выйти" стоит совсем не на том месте, где нужно. Я уже третий раз пишу пост, и вместо привычного "публикация" клацаю по "выйти", потому что она находится именно на том месте, где я ожидаю "публикация". При этом я, естественно, безвозвратно теряю весь свой "длиннопост", что я вам писал. Повторно писать его желания уже намного меньше :/

      Удалить
    16. Использую стандартный шаблон "Простой", который использует множество блогов и соответственно с таким же расположением кнопок для комментария.
      Причина "сдвига" кнопки в отключенных Google+ комментариях. Если их включить, то навигация по большому количеству комментариев затруднена, а также, имхо, отображение/оформление комментариев выглядит хуже, поэтому оставлю пока как настроена.
      Множество блогов работает с отключенными Google+комментариями.

      Удалить
    17. >>Я уже третий раз пишу пост,
      Сожалею о неудобстве.
      Мне всегда можно написать через notabenoid.

      Удалить
    18. Хорошо, тогда лучше давайте общаться там.

      Удалить
    19. Привет, нужна дополнительная проверка в связи с окончанием перевода большого дополнения к игре.
      http://notabenoid.com/book/45556/

      Проверить нужно все главы, начинающиеся с префикса DLC.
      Настройки те-же, что и тут

      Удалить
    20. Привет, проверю.
      Добавил возможности статистики для определения правил перевода (оформление многоточий, тире и пр.) http://sourcelocalizer.blogspot.ru/2014/08/setup-statistic.html

      В новом переводе используется разное оформление кавычек - см. статью.
      Можно отследить такие ошибки любым редактором po-файлов, например, POEdit, но в начале надо привести po-файлы к стандарту. В игре используется не правильный формат заголовка файла - необходимо поправить - см., например, https://l10n.gnome.org/media/upload/file-roller-master-po-ru-9797.po

      Удалить