| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Форум группы: delphi > Локализация приложения на Delphi |
| Автор: Akella 27.9.2010, 11:12 | ||||
| Кто-нибудь выполнял локализацию своих приложений, написанных на Delphi? Я смотрю в сторону компонентов http://www.tsilang.ru/. Говорят, что неплохое решение. Что ещё посоветуете? Пока что в гугле ищу инфу по локализации. Какие грабли могут быть на пути? На данный момент я пока убираю все тексты и сообщения из кода и выношу их в отдельный модуль с константами. Т.е. вместо
будет
Ну а после буду подключать движок для перевода. D2007. Добавлено через 10 минут и 45 секунд http://delloc.narod.ru/ |
| Автор: CodeMonkey 27.9.2010, 15:50 |
| http://www.gunsmoker.ru/2010/06/delphi-ite-integrated-translation.html? |
| Автор: Akella 27.9.2010, 15:59 |
| Разве ITE может без перекомпиляции? Разве с помощью ITE можно на ходу менять язык? Добавлено через 5 минут и 50 секунд Я так понял, что ITE может переводить только константы? А как же текстовые свойства компонент? Например, Caption? А если есть у постоянных датасетов свойство DisplayLabel? |
| Автор: Akella 27.9.2010, 16:19 |
| интересно, откуда у GunSmoker-а столько времени на содержание блога и изучения дельфи |
| Автор: CodeMonkey 27.9.2010, 16:38 |
| http://4.bp.blogspot.com/_9sWBW4MIeFk/TBpuWlzRcEI/AAAAAAAABxA/3ayGa_fZpXQ/s1600/Delphi+Translation+Editor+with+forms.png похоже на константы? |
| Автор: Akella 27.9.2010, 16:52 |
| не |
| Автор: kami 2.10.2010, 18:04 |
| http://www.dk-soft.org/products/dklang/index.php?lang=ru (я им пользуюсь - более чем устраивает) |
| Автор: Akella 3.10.2010, 10:31 | ||
| Посмотрел мельком страничку. Я там не вижу поддержку D2007+ Добавлено через 6 минут и 17 секунд Мало того:
|
| Автор: casinosoftguru 4.10.2010, 16:59 |
| я руками писал также в константы, но этот способ подойдет если текста немного в приложении |
| Автор: Xenag 5.10.2010, 02:10 |
| Главная проблема - визуальное программирование. Там локализацию прикрутить проблемно. А на уровне кода я бы посоветовал вариант с функцией локализации. То есть не ShowMessage(constMsgHelloWorld); а ShowMessage(lc(constMsgHelloWorld)); Где constMsgHelloWorld - номер фразы. lc - функция, превращающая номер в текст. Это даст: 1. Можно менять язык на лету. 2. Можно применить любой способ локализации. Не понравился нам такой вариант, пробуем другой. Изменить нужно только одну функцию. Для экспериментов - самое оно. |
| Автор: roschinspb 6.10.2010, 17:50 | ||
1. Без перкомпиляции нет, по ходу менять язык нельзя. Язык приложения автоматом выбирается в соответствии с выбраным языком ОС (Control Panel/Regional and Language options/Regional Options) 2. Переводить можно только ресурсы, т.е. всё что в resourcestring и dfm. Caption, DisplayLabel и т.п., естесственно тоже. Const — не канает. Ну еще есть полезная функция это возможность делать свои словари терминов. Для стандарнтых сообщений об ошибках в базовую поставку Delphi входят словари на французском, немецком и японском языках. Русских, понятное дело, нет :( , но можно найти Можно в фалы языковой поддержки и свои ресурсы грузить напр. картинки, тогда при загрузке ресурсов, в качестве хэндла модуля надо использовать FindResourceHInstance P.S. Локализовывать пробовал. |
| Автор: Akella 6.10.2010, 21:35 |
| |
| Автор: Akella 13.11.2010, 13:15 |
| А кто-нибудь использовал http://www.sqlmanager.net/en/products/tools/advancedlocalizer? |
| Автор: CodeMonkey 13.11.2010, 14:30 |
Подкинь ссылочку? |
| Автор: roschinspb 13.11.2010, 17:33 | ||
http://www.roschinspb.narod.ru/dev/DelphiRu.zip, гдето выкачал, ... первоисточник не могу найти, на авторство не претендую. В этот файл добавил все ангоязычные ресурсные строки взятые из исходников Delphi 2010. Добавлялись они автоматически с помощью самопального, типа, синтаксического анализатора, поэтому есть всякие "левые" строки. Потом дополнил некоторыми своими переводами и сделал программку, которая добавляет этот словарь в Translation Repository. P.S. Если добавишь свои переводы, вышли мне пож. свой вариант, по адресу мой_ник + сабака + mail.ru |
| Автор: lukas 20.11.2010, 19:10 | ||||
Можно использовать еще хитрее трюк, чем трюк с кодами фраз. Но он несет в себе опасность, зато программы переводить очень легко:
Функция t переводит фразу, где нибудь у нас есть база соответствий всех фраз англ и другого языка. Если необходимо вставить в фразу какой-то динамический контент, используем Format.
Функции можно укоротить , превратить в одну. |
| Автор: imageman 29.11.2010, 14:47 | ||||||||
| я немного переработал 1. Определяем глобальные переменные (отдельный юнит) 2. Переводим все глобальные переменные на другой язык (процедура) 3. Используем эти переменные по мере необходимости пункт 2 выглядит так:
DetektorTeksta без кавычек - глобальная переменная 'DetektorTeksta' в кавычках - название строки в ini файле, который отвечает за перевод 'Детектор текста' - если в ini файле перевода нету, то переменной присвоить это значение. А заодно при выходе из программы написать в ini файл: DetektorTeksta=Детектор текста при этом как только мы исправим ini файл при следующем запуске мы получим новое значение глобальной переменной Пункт 2 делал следующим образом. Создал монитор clipboardа. Прошелся в редакторе по всем строковым константам (find ' ). Выбираем вместе с '' строку, копируем в буфер обмена. Программа-монитор берет оттуда, в один файл пишет
в другой
и в буфер обмена помещает DetektorTeksta т.е. мы вручную выбираем в редакторе кода строку - Ctrl-X Ctrl-V а потом подсоединяем пару файлов к проекту. Насчет перевода формы сделал довольно монстрообразную функцию, которая перебирает все компоненты на форме, определяет что за компонент (класс) и перебирает все строковые поля компонента. Ну и переводит их через функцию Translate. Результирующая строка в ini файле перевода что-то вроде такого
|
| Автор: remax 30.11.2010, 03:44 |
| а JEDI VCL не подходит? (компонент TJvTranslator и связанные с ним...) Работает в runtime. Переводить можно все - resourcestring, caption's и т.д, и т.п. Сама либа (v3.38) идет вплоть до D2010. P.S. Я пользую этот функционал под D7. Нормально работает.... |
| Автор: imageman 30.11.2010, 09:14 | ||
на досуге посмотрю. Интересно, как он работает с юникодами и с Ansi строками |
| Автор: Akella 30.11.2010, 11:14 |
для этого нужно ставить весь этот мусорник двух пакетов: JCL + JVCL, хотя там есть выбор устанавливаемых компонент |
| Автор: remax 4.12.2010, 23:50 |
| Вот еще "Пример достаточно мощной многоязыковой поддержки. Языки хранятся в отдельных ини-файлах. Поддерживается ANSI, UTF-8 и Unicode. Можно изменять значение любого свойства любого компонента на любой форме. Все это делается одной командой: LangReader.SetLanguage(nil, LangFileName). Проверено на D7, D2007, D2010. " Имя файла: multilang.zip Размер файла: 567057 байт Дата закачки: 12.12.2009 22:59:21 GMT Количество скачиваний: 514 Автор: Логинов Дмитрий сайт:http://matrix.kladovka.net.ru (в разделе разное) http://matrix.kladovka.net.ru/download.php?getfilename=uploads/other/multilang.zip П.С. Я сам еще не проверял..... |
| Автор: Akella 5.12.2010, 12:01 |
| remax, спасибо. Там есть много вкусного |
| Автор: Akella 17.12.2010, 12:38 |
| http://www.tdelphiblog.com/2008/09/resourcestrings.html |
| Автор: klyaksa 18.2.2011, 22:40 |
| http://dxgettext.po.dk/documentation/how-to#googtrans/en/ru - |
| Автор: Akella 7.6.2011, 14:46 |
| Кто-нибудь использовал http://www.lingobit.com/ru/? Я пощупал TSiLang в течение нескольких дней. Продукт вроде хороший, мощный. Но я его удалил. Глючит. Константы переводит не так, как я ожидал. Встроить в программу переводчик не получится, нужно пользователям отдавать их специальный редактор переводов. Пока что не буду использовать. |
| Автор: Rohoss 7.6.2011, 16:55 |
| А учитываете динамическую смену языка в элементах управления? Конечно, данная возможность может показаться не существенной, так как используется всего один раз за весь цикл жизни программы, однако в большинства популярных программ такая возможность есть. |
| Автор: Akella 7.6.2011, 21:56 |
ну конечно Мы учитываем |
| Автор: Rohoss 15.6.2011, 14:34 |
| А если использовать такой алгоритм: Есть класс, LanguageManager который имеет статическую коллекцию windows, в которой хранятся ссылки на окна. Когда окно создаётся, оно добавляется в эту коллекцию, когда уничтожается уберается из неё. Хотя может такая коллекция в какой-то части приложения и так существует... Дальше, этот класс LanguageManager имеет метод ChangeLanguage, который проходит эту коллекцию циклом и находит все элементы управления. Если имя элемента управления содержится в сопоставленном ини-файле, значит мы меняем свойство Caption на соответствующее в ини-файле. Метод ChangeLanguage нужно вызывать каждый раз при создании окна и после инициализации элементов управления. Ну и соответственно в LanguageManager хранить текущий язык. Как мне кажется реализовать не сложно, хотя могу ошибаться, так как давно с делфи не работал. Но в результате язык приложения должен меняться динамически (при вызове метода ChangeLanguage), который можно реализовать не только при загрузке окна а и на какой то кнопке вроде (сменить язык). Потом, локализировать может кто угодно, так как достаточно добавить новый ини.файл(Где то будет директория, в которой будут содержатся эти файлы). И потом, не нужно никаких компонентов |
| Автор: Keeper89 16.6.2011, 11:48 |
| Так это сделано в CnPack, по крайней мере визуально ) Кстати, их компоненты что-то никто не перечисляет - вкладка CnMultiLang, 4 компонента, пробуйте. |
| Автор: Akella 16.6.2011, 12:14 |
| А никто и не знал. А есть инструкция? Может есть на русском? Примеры... картинки... Добавлено через 42 секунды Гугл про CnMultiLang ваще ниче не ведает |
| Автор: Keeper89 16.6.2011, 13:32 |
| На русском нет. Надо скачать CnVCL, поставить и там будет куча примеров |
| Автор: Akella 16.6.2011, 13:43 |
Это типа JEDI? |
| Автор: Keeper89 16.6.2011, 13:44 |
| Типа, но гораздо меньше |
| Автор: Akella 16.6.2011, 15:24 |
| Не, мне нужен конкретно пакет локализации, а не куча разных компонент. |
| Автор: Akella 24.7.2011, 09:45 |
| Бесплатный пакет локализации для Delphi2009+ http://www.delphiarea.com/products/delphi-packages/i18n/ |
| Автор: Akella 27.7.2011, 09:59 |
| Вот интересно. А зачем переключение языка на ходу? |
| Автор: Rohoss 27.7.2011, 10:27 |
Потому что круто. Хотя, скорее всего только раз будет использоватся |
| Автор: Akella 27.7.2011, 10:49 |
| В чем крутизна? Я вот смотрю на Оперу, Огнелиса, офисные программы, фотошоп, винду, линукс, Delphi, на другие программы. Там нет переключения языка. Просто при установке выбираешь язык программы и фсё. Ну действительно, зачем переключение нужно? |
| Автор: Akella 27.7.2011, 11:04 |
| Вышла новая версия TsiLang. Но ошибку при переводе констант так и не исправили. До сих пор переводи русский в иероглифы (((( Я сейчас пробую Lingobit Localizer. Переводит саму программу, EXE-шник. Можно переводить двумя кликами с разу несколько строк (свойств, компонентов) с помощью онлайн переводчиков гугл и майкрософт. Мне перевод от гугл больше понравился, хотя есть нюансы, ну т.е. ручками править некоторые переводы нужно. Программа подглючивает немного, хотя версия уже 7. Можно переводить данные из базы. Подключаешься к любой базе и переводишь прямо в программе. В общем удобно. Но стоимость....... 1200 долларов О_о Добавлено через 1 минуту и 26 секунд Я ещё не щупал Korzh Lokalizer. И я пока не знаю, что мне делать с константами. Надо было мне их в базу запихать |
| Автор: Rohoss 27.7.2011, 11:10 |
Там язык переключить не так просто. Хз, не нужно наверное... просто круто Akella, ты кстати на сильвелайт забил? |
| Автор: Akella 27.7.2011, 11:33 |
| Пока да, временно, т.к. дома ремонт (делаю своими силами), но всё ещё впереди |
| Автор: Rohoss 27.7.2011, 12:02 |
| А, понятно. ну главное не на долго забивать |
| Автор: Keeper89 27.7.2011, 12:08 |
| Rohoss, Akella просто культурно свалил на ремонт, зачем ему этот Сильверлайт |
| Автор: Akella 27.7.2011, 21:13 |
| честно ремонт Добавлено через 10 секунд а сильверлайт очень хочу |
| Автор: Akella 4.8.2011, 15:31 |
| Radialix неплохой аналог (а может и лучше) Lingobit`а, но цена... у Radialix 1200 рублей, а у Lingobit 1200 долларов О_о http://www.radialix.ru/index.php/radialix-2-overview |
| Автор: Akella 5.8.2011, 13:26 |
| В общем http://www.radialix.ru это круто! Перевод программы с помощью PROMPT (8, 9), Google, Bing, Systran 6 Русскоязычная поддержка. Сама программа на русском. Я забросил лингобит, и купил radialix radialix лучше и на много дешевле. Да, есть, конечно, недочёты, но идеальных программ не бывает |
| Автор: Akella 6.8.2011, 09:15 |
| Забыл совсем... У Радиаликса справка на русском!! Это большой плюс. А у Лингобита нету даже новостей о том, что добавлено/исправлено в новых версиях. Т.е. новую версию выпустили, а что там исправлено или добавлено вкусного нифига неизвестно (( |
| Автор: Akella 23.8.2011, 16:39 |
| Оказывается, купив лицензию для Радиаликс, можно активировать программу на 4х своих компьютерах. Это очень удобно. Я активировал на рабочем компе, а потом на домашнем и на ноуте. |
| Автор: Akella 29.10.2011, 15:13 |
| А ещё, если отдавать радиаликс-проект другому человеку для перевода, например, переводчику, то переводчик, скачав и установив программу, может её активировать бесплатно, это так называемый режим переводчика. Перевод программы не требует обязательного наличия исходного EXE файла. |
| Автор: Akella 2.4.2012, 22:50 |
| http://www.webdelphi.ru/2011/11/lokalizaciya-prilozhenij-firemonkey-komponent-tlang/ |