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


 

понедельник, 7 октября 2013 г.

Результаты проверки орфографии исходного кода Ubuntu 13.04

Провел проверку исходного кода ОС Ubuntu 13.04 версии, скачанной с ftp, 29 сентября 2013: ftp://cdimage.ubuntu.com

Проверял каталоги:
- language-pack-ru
- language-pack-ru-base

Результаты проверки:
- фраз содержащих кириллицу: 99260
- на проверку ушло примерно 1700сек (виртуальная машина Win7HB 1gb 1ядро HT, на компьютере i7-860)
- найдено 3109 слов с "ошибками", встречающиеся 8525 раз в тексте.

Скачать отчет: https://docs.google.com/file/d/0B2P_Drl0OiU9OVdpeE15QmtMRXc/edit?usp=sharing

Найдено множество ошибок:
002282     chk:   аналговые     text:   Изящные аналговые часы 
003017     chk:   Настрока     text:   Настрока Debian 
017250     chk:   Интсрумент     text:   Интсрумент GNOME для поиска строки в наборе файлов
000028     chk:   значиние     text:   Применение: %s [-LRSq] -s имя_атрибута [-V
...
Фрагмент отчета:

Ранее уже проверял открытые ОС - см. Автоматическая проверка орфографии исходных файлов на примере OpenSuse, по результатам которой ошибки были исправлены в ОС (см.Update), и по совету координатора локализации этой ОС, был скорректирован и улучшен данный отчет.



При проверке игнорировались разделители такие, как: \n, \t, %(name)s, %s и ряд других.
Учитывались теги - <b> считался, как пустой, а <p> как разделитель, чтобы правильно разбирать строки
"<b>П</b>ример"  и  "<b>Пример</b>текста" - в первом случае все верно, а во втором случае ошибка, так как текст будет выглядеть слитно.
В "Пример<p>текста" слова будут считаться раздельными за счет <p>.

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

Показательным примером является слово "кэш", на которое я уже ссылался ранее, именно на комментарий переводчика Ubuntu, см. Словарь локализатора GPL. Почему его нет?

Слово "хэш" и ряд его производных встречается десятки раз, но и "хеш" тоже десятки раз. Вероятно, надо привести к единому слову.
chk: хэш
   file: C:\test\ubuntu\language-pack-ru\data\ru\LC_MESSAGES\apt.po(398)
   file: C:\test\ubuntu\language-pack-ru\data\ru\LC_MESSAGES\duplicity.po(131)
   file: C:\test\ubuntu\language-pack-ru\data\ru\LC_MESSAGES\gas.po(204)
   file: C:\test\ubuntu\language-pack-ru\data\ru\LC_MESSAGES\grub.po(389)
   file: C:\test\ubuntu\language-pack-ru\data\ru\LC_MESSAGES\grub.po(447)
   file: C:\test\ubuntu\language-pack-ru\data\ru\LC_MESSAGES\grub.po(4801)
   file: C:\test\ubuntu\language-pack-ru\data\ru\LC_MESSAGES\lvm2.po(780)
...
chk: хеш
   file: C:\test\ubuntu\language-pack-ru\data\ru\LC_MESSAGES\gnupg.po(5565)
   file: C:\test\ubuntu\language-pack-ru\data\ru\LC_MESSAGES\gnupg.po(5570)
   file: C:\test\ubuntu\language-pack-ru\data\ru\LC_MESSAGES\libapt-pkg4.12.po(1423)
   file: C:\test\ubuntu\language-pack-ru-base\data\ru\LC_MESSAGES\gnupg.po(5585)
   file: C:\test\ubuntu\language-pack-ru-base\data\ru\LC_MESSAGES\gnupg.po(5590)
   file: C:\test\ubuntu\language-pack-ru-base\data\ru\LC_MESSAGES\gnupg2.po(6017)
   file: C:\test\ubuntu\language-pack-ru-base\data\ru\LC_MESSAGES\gnupg2.po(6022)
   file: C:\test\ubuntu\language-pack-ru-base\data\ru\LC_MESSAGES\gnupg2.po(7326)
...

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

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

Сразу для первого файла: \language-pack-ru\data\ru\LC_MESSAGES\alsa-utils.po можно выделить ряд типичных ошибок:

Явные ошибки:
000683     chk:   Невозмонжно     text:   Невозмонжно использовать промежуток, равный размеру буфера (%lu == %lu)
001121     chk:  
аддреса     text:     s,--source addr: чтение от заданного аддреса (клиент:порта)\n
001303     chk:  
Установленна     text:   Установленна частота в %iГц (запрошено %iГц)\n
Возможно надо подобрать другое слово:
000880     chk:   разыскиваемо     text:   Невозможно проиграть петлю; %s не разыскиваемо\n
001394     chk:  
поигрывания     text:   Невозможно установить параметры sw для поигрывания: %s\n
* Хотя возможно "поигрывания" в контексте и нормально смотрится :)
001670     chk:   зашифрования     text:   для зашифрования сообщения в режиме --pgp2 требуется шифр IDEA\n
001991     chk:   недоверяемый     text:   Если Вы хотите использовать данный недоверяемый ключ - ответьте \"yes\".
Ряд терминов считается тоже ошибками, но для этого надо просто добавить их в словарь.
* См. онлайн-справку программы: Исключение слов из списка ошибок (словарь исключений)
* Можно все сделать централизовано через svn-сервер, см: Словарь локализатора GPL. Почему его нет?

Еще ряд ошибок:
000366     chk:   долучено     text:   Ожидалась команда jobid=nn, долучено: %s\n
000708     chk:  
аттрибутов     text:   MD5/SHA1 индекс %d отличается от аттрибутов %d\n
001486     chk:  
храниния     text:   Соединен с демоном храниния\n
001635     chk:  
необпределённый     text:   но следует добавить текст, очистить или удалить (не может автоматически ...
003194     chk:  
комманду     text:   FD дал плохой ответ на комманду JobId : %s\n
000438     chk:  
сруктурой     text:   Тип (null) не является сруктурой или объединением.
000504     chk:  
влдаельца     text:   Имя влдаельца карты:
004385     chk:  
резутатах     text:   включать отозванные ключи в резутатах поиска
005207     chk:  
отсутвтует     text:   ВНИМАНИЕ: возможно данный ключ отозван (ключ отзыва отсутвтует)\n
005560     chk:  
тебует, хеша     text:   DSA тебует размер хеша кратного 8 битам\n
002296     chk:  
Устновить     text:   Устновить зазор между валиками (зависит от принтера)
003688     chk:  
параметов     text:   Настройка параметов цветопередачи
000154     chk:   перовго     text:   Клавиши используемые для выбора кандидата. К примеру, \"asdfghjkl;\", нажмите 'a' для выбора перовго кандидата, 's' для второго и т.д. 
000176     chk:   цифоровой     text:   Клавиши цифоровой клавиатуры всегда вводят цифры.
и много других ошибок...
Много ошибок со слитным "не", которые OpenOfiice выделяет, как ошибочные:
неожидаемая - 9 шт.
неопределено - 10 шт.
неподдерживаемая - 20+ шт.
Неподдерживаемая - 20+ шт.
неподдерживаемого ... много производных и много раз встречается
неподдерживаемый и Неподдерживаемый - в районе 100+ шт.

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

Для ряда фраз надо согласовать правильность их написания - через дефис или слитно:
chk: медиа-файла
   file: C:\test\ubuntu\language-pack-ru-base\data\ru\LC_MESSAGES\xfsdump.po(443)chk: медиафайлами
   file: C:\test\ubuntu\language-pack-ru\data\ru\LC_MESSAGES\app-install-data.po(21262)   file: C:\test\ubuntu\language-pack-ru-base\data\ru\LC_MESSAGES\app-install-data.po(21257)chk: медиа-файлы
   file: C:\test\ubuntu\language-pack-ru\data\ru\LC_MESSAGES\app-install-data.po(7176)   file: C:\test\ubuntu\language-pack-ru-base\data\ru\LC_MESSAGES\app-install-data.po(7174)
В дальнейшем буду учитывать в своем словаре сочетание символов вокруг слов, например, "[неизвстн]" разрешить, если в квадратных скобках и т.п.

Судя по всему, используется синтаксис переменных %li и еще ряд других, надо будет найти описание такого синтаксиса и добавить в исключения.

В отчете отражен и список опечаток:
000106     text:   %s: Отказ. Для выполнения этой программы требуются  полномочия суперпользователя.\n\n
            chk:  
двойной пробел между словами
000153     text:   В конфигурационном файле не задано super_admin_key ! Выход.
            chk:   пробел перед знаком восклицания
000258     text:   Не удалось получить %s , причина: %s
            chk:   пробел перед запятой
000127     text:   Пожалуйста, введите путь к файлу,который вы бы хотели использовать для хранилища. Он будет иметь размер %sGB.
            chk:   запятая вплотную перед буквой
С помощью регулярных выражений этого отчета даже частично проверяется орфография:
001702     text:   log — это утилита bzr по умолчанию для просмотра истории ветви.\nИспользуемая ветвь определяется первым параметром. Если не задано\nпараметров, выводится журнал ветви, содержащей рабочюю директорию.\nВот несколько простых примеров::
chk:  
«Чу/Щу»
Буду рад советам по улучшению отчета.

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

2 комментария:

  1. Невероятно полезное и нелегкое занятие! Потому что временами группы локализаций таких смешных ошибок понаделывают ;P

    ОтветитьУдалить