![]() |
Модераторы: THandle, bems |
![]() ![]() ![]() |
|
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
По рекомендации GunSmoker`а для журнала по Delphi "Blaise Pascal Magazine" я написал небольшую статью "Как я локализовал свое приложение на Delphi", используя свой личный опыт. Может кому пригодится.
Когда выйдет статья и вообще выйдет ли она или нет, никто не знает ![]() Я решил выложить её здесь, может кому пригодится мой скромный опыт локализации приложения. Я просто описал небольшой опыт выбора инструмента для локализации. В статье подробно описана локализация с помощью библиотек ресурсов. Будут пожелания/замечания - высказывайтесь. Я смотрю, что статья не была опубликована пока ни в одном из номеров журнала. Выложу ка я её в блоге. Как я локализовал свое приложение на Delphi Это сообщение отредактировал(а) Akella - 28.5.2012, 09:30 Присоединённый файл ( Кол-во скачиваний: 70 ) ![]() |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: нет Всего: 128 |
Тоже в свое время проводил небольшое исследование данного вопроса. Даже какую-то бесплатную библиотеку ковырял...
В итоге поддержку интернационализации интерфейса реализовал "ручками". Но у меня программка по-проще (TrackChecker). Правда никак не доделаю утилиту, облегчающую обновление файлов перевода... но эт мелочи) -------------------- There are always someone smarter than you... |
|||
|
||||
Caduser |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 2.10.2006 Где: г. Хабаровск Репутация: нет Всего: 1 |
Спасибо за хорошую статью. Жаль что прошел не замеченным Korzh Localizer. Я наоборот обратил на него внимание и сейчас тестирую демо-версию. Все очень даже не плохо, хотя после прочтения этой статьи захотелось попробовать Radialix.
Из недостатков которые заметил в Korzh Localizer: 1. Нет возможности авто-перевода. Как я понял автор сделал ставку на Google API но сейчас это не работает. 2. Часто сталкивался со сложностью и неочевидностью интерфейса. Справка не помогала. Например долго не мог разобраться почему команда "Creating resource DLL" не активна. Оказалось что предварительно нужно было снять галочку с опции "Показывать исходный язык". Почему обратил внимание на Korzh Localizer: 1. Хорошо дружит со сторонними компонентами (FastReport, Devexpress и т.д.). Как я понял именно Korzh Localizer используют разработчики FastReport. 2. Есть гибкая настройка правил добавления локализуемых свойств. Это позволяет решить проблему Radialix о которой сказано в статье, когда в таблицу локализации попадает 400 свойств из которых реально нужно локализовать только 30. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
Уже вышла новая бета версия radialix 3, но пока не щупал
![]() |
|||
|
||||
Caduser |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 2.10.2006 Где: г. Хабаровск Репутация: нет Всего: 1 |
К сожалению не увидел в описании Radialix 3 решение озвученной в статье проблемы. >>> Поддержка визуального редактора для 64-х разрядных сборок .NET. Поддержка CHM файлов (*.chm, *.its), файлов бинарных ресурсов Qt (*.rcc), файлов локализации PGP (*.str). Панель вариантов автоперевода. Автосохранение проекта. >>> |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
Какой именно проблемы?
Добавлено через 20 секунд И почему "к сожалению", если проблемы нет? |
|||
|
||||
sourcelocalizer |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.3.2013 Репутация: нет Всего: нет |
Доброго времени суток!
При выборе средства локализации исходного кода очень пригодилась статья автора темы, осветившая плюсы/минусы ряда продуктов. Но в итоге я так и не нашел необходимых возможностей для локализации в предлагаемых программных продуктах и разработал свой ![]() Сайт моей программы локализации: www.sourcelocalizer.ru http://www.youtube.com/watch?feature=playe...p;v=OFFzXvI_A9k Пример локализации разрабатываемой программы с помощью "Локализатора исходного кода", на примере тестового проекта на Lazarus. На видео показаны все этапы локализации примера подробно описанные в руководстве пользователя. На видео, начиная с 19:45, описан процесс внесение изменений в проект, отслеживание их программой локализации, а также процесс локализации добавленных элементов. Основной упор при разработке программы локализации был сделан на работу с уже существующим кодом проекта и с минимумом привлечения к локализации программистов, т.е. никакой специальной подготовки кода к локализации не требуется. Также важным требованием к программе была возможность ее работы с системами контроля версий на серевере сборки (build) и выводе результатов в удобные отчеты (junit). В дальнейшем был добавлен вывод отчетов в виде html для возможности локальной работы с программой. Подход в локализации схож с gettext, но нет необходимости в коде указывать функции вызова для замены текста в процессе выполнения. Кроме этого, появилась возможность оптимизировать исходный текст, который указан фрагментами или разделен учавствующими в нем переменными. ПРИМЕРЫ ОПТИМИЗАЦИИ: 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); RUNTIME-код: У Delphi7(6) есть проблема с отображением текста форм в зависимости от кодировки системы, заключающаяся в появлении знаков вопросов, если кодировки не совпадают - delphi начинает считать юникод как 1251 или наоборот. Решение этой проблемы заключается в автоматическом формировании кода вызова всех элементов в формы с заполнением их теми же текстовыми значениями, но уже из кода. Либо можно использовать специальные unicode-компоненты, но это будет серьезной переработкой форм. Данная программа позволяет формировать такой код, для этого необходимо просто подключить внешний файл в свой файл директивой $I. Программа локализации позволяет решать и другие проблемы. Например - преобразование кодированного текста в dfm в обычный текст, что позволяет переносить свой проект на компьютеры с другой кодировкой системы. Буду рад услышать комментарии, предложения и замечания. |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
||||
|
||||
sourcelocalizer |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.3.2013 Репутация: нет Всего: нет |
Проект, с которым я сотрудничаю, содержит очень большое количество кода,
поддерживается давно группой программистов и он явно не планировался изначально к локализации. При выборе программы локализации к ней были определены следующие требования: 1. Отсутствие или минимум доработки исходного кода для локализации. 2. Отслеживание дальнейших изменений/дополнений, требующих локализации. 3. Хорошая работа с системами сборки для выполнения пункта 2 (Junit-отчеты) и возможности получать переведенный проект при изменении только функционала без необходимости обращаться к переводчикам. 4. Дополнительное, но важное, требование - решить проблему с кириллицей, а именно ее замену на знаки вопросов в формах при работе с разрабатываемой программой в ОС с другой кодировкой (Английская, Немецкая, пр.), в том числе с Русской (1251), так как описание формы в Delphi7 генерируются в 1251 либо юникоде (либо другой кодировке). Проблема с кириллицей касается и разработчиков, если один из них работает с ОС другой локализации, то работать с формами проекта он не может, а с его формами не могут другие. Был вариант использовать для решения этой проблемы юникод-компоненты, но это привело бы к полному переписыванию форм программы. Все рассмотренные программы локализации не соответствовали перечисленным требованиям. В связи с этим я разработал свою программу локализации, которая отвечает всем требованиям. В ней есть так же возможности оптимизации кода, позволяющие корректировать код перед локализацией (см.примеры выше), если изначально плохо было прописано сочетание текста и кода. Пример: s:= 'Найдено ' + IntToStr(countdir) + ' каталогов, ' + IntToStr(countfile) + ' файлов.'; а надо: s:= format('Найдено %s каталогов, %s файлов.', [IntToStr(countdir), IntToStr(countfile)]); и т.п. Возможности оптимизации, которые изначально не планировались, не встречал нигде. Спасибо за вопрос. P.S. Интересная статья - "23 решения для локализации и интернационализации приложений." http://www.webdelphi.ru/2012/09/23-resheni...ii-prilozhenij/ |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
||||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
||||
|
||||
sourcelocalizer |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.3.2013 Репутация: нет Всего: нет |
>>С костылём, котрый описан в пункте 4?
Данная функция тоже доступна: 1) Для передачи dfm между разработчиками - можно без настройки программы локализации, просто бросить на специальный ярлык свой dfm файл и коды в нем будет преобразованы в текст. 2) Для runtime - генерируется спец.файл вызова всех элементов форм и переназначение им текста. От программиста требуется только указать обращение к этому файлу из функции инициализации формы через {$I namefile.pas} >>решения для локализации и интернационализации приложений я тоже привел эту ссылку. Если подскажете средство локализации подходящее под все требования, буду признателен. Я такое средство не нашел. Следует отметить простоту моего подхода для работы над локализацией для переводчика, когда ему передается po-файл или даже простой csv (как на видео). Отдельно отметил возможности моей программы по автоматической оптимизации строк перед локализацией, когда строка составляется из текста и переменных. Теперь вручную преобразование делать не нужно, кроме очень сложных случаев. Пока это сделано только для Delphi. Такого требования изначально не было, но теперь очень удобно, что не нужно переделывать сотни и сотни строк. Особенно строк в которых программисты делают переносы предложений через #13. Пример: s:='Важно выполнить' + #13 + 'преобразование....'; Набор примеров "до" и "после" приведен в постах выше. Спасибо. Это сообщение отредактировал(а) sourcelocalizer - 15.3.2013, 16:32 |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
Я не понимаю просто. Ну это ну очень специфичное желание - ковырять DFM.
|
|||
|
||||
sourcelocalizer |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 14.3.2013 Репутация: нет Всего: нет |
>>ковырять DFM
Все делается автоматом и от программиста ничего не требуется. Буду признателен если Вы предложите решение проблемы отображения текста (кириллицы) в dfm на ОС с разными локализациями. Насколько я знаю, основным решением является замена компонент форм на юникод-компоненты. Но замена тысячи компонентов на сотне форм в программе разрабатываемой давно и целой группой программистов это очень не простая задача. Вы знаете другое решение? Поделитесь, пожалуйста, опытом в решении такой проблемы. UPDATE: Подробней все изложил в посте: Причины создания программы "Локализатор исходного кода" UPDATE2: Пример формы и автоматически генерируемого файла к нему можно посмотреть: Решение проблем с кириллицей в dfm-файлах Delphi Это сообщение отредактировал(а) sourcelocalizer - 17.3.2013, 13:06 |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 7 Всего: 329 |
Сайт автора программы Radialix перестал существовать, проект тоже умер, как я понял.
Существующим покупателям программы неоткуда брать программу, неоткуда обновиться. На данный момент версия 3.0.0.486 - самая последняя. Здесь можно скачать портативную версию: upload.ee/files/3359227/Radialix_Localizer_3_Pro_v_3.00.00.486_Portable.zip.html да, выкладка портативной версии - это не очень хорошо, ну а что делать. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi" | |
|
Добро пожаловать в форум группы "Delphi". В разделе разрешается:
Строго запрещено:
Если Вам понравилась атмосфера форума, заходите к нам чаще! Люблю, целую, вечно Ваш, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Форум группы: delphi | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |