Проект, с которым я сотрудничаю, содержит очень большое количество кода;
он поддерживается давно группой программистов и явно не планировался изначально к локализации.
При выборе программы локализации к ней были определены следующие требования:
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);
Своя программа локализации позволяет реализовывать функции, которые востребованы, но отсутствуют в других программах. Например указанная оптимизация,
которая будет подробней рассмотрена в следующих постах.
Также будут рассмотрен еще ряд уникальных функций.
Буду рад советам, замечаниям, комментариям.
он поддерживается давно группой программистов и явно не планировался изначально к локализации.
При выборе программы локализации к ней были определены следующие требования:
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);
Своя программа локализации позволяет реализовывать функции, которые востребованы, но отсутствуют в других программах. Например указанная оптимизация,
которая будет подробней рассмотрена в следующих постах.
Также будут рассмотрен еще ряд уникальных функций.
Буду рад советам, замечаниям, комментариям.
Комментариев нет:
Отправить комментарий