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


 

воскресенье, 17 марта 2013 г.

Причины создания программы "Локализатор исходного кода"

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

При выборе программы локализации к ней были определены следующие требования:
1. Отсутствие или минимум доработки исходного кода для локализации.
2. Отслеживание дальнейших изменений/дополнений, требующих локализации.
3. Хорошая работа с системами сборки для выполнения пункта 2 (Junit-отчеты) и возможности получать переведенный проект при изменении только функционала без необходимости обращаться к переводчикам.

4. Дополнительное, но важное, требование - решить проблему с кириллицей, а именно ее замену на знаки вопросов в формах при работе с разрабатываемой программой в ОС с другой кодировкой (Английская, Немецкая, пр.), в том числе с Русской (1251), так как описание формы в Delphi7 генерируются в 1251 либо юникоде (либо другой кодировке).
Проблема с кириллицей касается и разработчиков, если один из них работает с ОС другой локализации, то работать с формами проекта он не может, а с его формами не могут другие.
Был вариант использовать для решения этой проблемы юникод-компоненты, но это привело бы к полному переписыванию форм программы.

Все рассмотренные программы локализации не соответствовали перечисленным требованиям.

В связи с этим я разработал свою программу локализации, которая отвечает всем требованиям.

Сайт моей программы локализации: www.sourcelocalizer.ru

http://www.youtube.com/watch?feature=playe...p;v=OFFzXvI_A9k
Пример локализации разрабатываемой программы с помощью "Локализатора исходного кода", на примере тестового проекта на Lazarus. На видео показаны все этапы локализации примера подробно описанные в руководстве пользователя.
На видео, начиная с 19:45, описан процесс внесение изменений в проект, отслеживание их программой локализации, а также процесс локализации добавленных элементов.

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


Также важным требованием к программе была возможность ее работы с системами контроля версий на серевере сборки (build) и выводе результатов в удобные отчеты (junit).
В дальнейшем был добавлен вывод отчетов в виде html для возможности локальной работы с программой.

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


Четвертый пункт требований - у Delphi7(6) есть проблема с отображением текста форм в зависимости от кодировки системы, заключающаяся в появлении знаков вопросов, если кодировки не совпадают - delphi начинает считать юникод как 1251
или наоборот.
Решение этой проблемы заключается в автоматическом формировании кода вызова всех элементов в формы с заполнением их теми же текстовыми значениями, но уже из кода.
Либо можно использовать специальные unicode-компоненты, но это будет серьезной переработкой форм.
Данная программа позволяет формировать такой код, для этого необходимо просто подключить внешний файл в свой файл директивой $I.
Таким образом для runtime - генерируется спец.файл вызова всех элементов форм и переназначение им текста. От программиста требуется только указать обращение к этому файлу из функции инициализации формы через {$I namefile.pas}
Для передачи dfm между разработчиками - можно без настройки программы локализации, просто бросить на специальный ярлык свой dfm файл и коды в нем будет преобразованы в текст.

Следует отметить простоту моего подхода для работы над локализацией для переводчика, когда ему передается po-файл или даже простой cvs (как на видео).

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

Пока это сделано только для Delphi.
Такого требования изначально не было, но теперь очень удобно, что не нужно переделывать сотни и сотни строк.
Особенно строк в которых программисты делают переносы предложений через #13.
Пример: s:='Важно выполнить' + #13 + 'преобразование....';
Набор примеров "до" и "после" приведен в ниже.

ПРИМЕРЫ ОПТИМИЗАЦИИ:

1) Простые случаи объединения текстовых фрагментов в коде:

Примеры исходных строк кода до объединения:
s:= 'Строка ' + 'из нескольких ' + 'частей.'; 
s:= 'Длинная строка ' +
'с переносом.'; 

Результат объединения указанных примеров:
s:= 'Строка из нескольких частей.'; 
s:= 'Длинная строка с переносом.'; 

2) Более сложные случаи:

Примеры исходных строк кода:
s:= 'Строка 1.' + #13 + 'Строка 2.'; 
s:= 'Выполнено ' + IntToStr(count) + '%'; 
s:= 'Найдено ' + IntToStr(countdir) + ' каталогов, ' + IntToStr(countfile) + ' файлов.';
application.messagebox(pchar ('Расчет: ' + Edit1.text + '+' + Edit2.text + '=' + IntToStr(z)), 'Результат', 0);

Результат объединения указанных примеров:
s:= format(' Строка 1.%sСтрока 2.', [#13]);
s:= format('Выполнено %s%%', [IntToStr(count) ]);
s:= format('Найдено %s каталогов, %s файлов.', [IntToStr(countdir), IntToStr(countfile)]);
application.messagebox(pchar (format('Расчет: %s+%s=%s', [Edit1.text, Edit2.text, IntToStr(z)])), 'Результат', 0);

Своя программа локализации позволяет реализовывать функции, которые востребованы, но отсутствуют в других программах. Например указанная оптимизация,
которая будет подробней рассмотрена в следующих постах.
Также будут рассмотрен еще ряд уникальных функций.

Буду рад советам, замечаниям, комментариям.

Комментариев нет:

Отправить комментарий