Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Форум группы: delphi > Локализация приложения на Delphi


Автор: Akella 27.9.2010, 11:12
Кто-нибудь выполнял локализацию своих приложений, написанных на Delphi?

Я смотрю в сторону компонентов http://www.tsilang.ru/. Говорят, что неплохое решение.
Что ещё посоветуете? Пока что в гугле ищу инфу по локализации.


Какие грабли могут быть на пути?
На данный момент я пока убираю все тексты и сообщения из кода и выношу их в отдельный модуль с константами.
Т.е. вместо 
Код
ShowMessage('Привет, мир');


будет

Код

uses
  uConstsMsg, ...;
constMsgHelloWorld = 'Привет, мир';
....
ShowMessage(constMsgHelloWorld);


Ну а после буду подключать движок для перевода.

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-а столько времени на содержание блога и изучения дельфи  smile 

Автор: 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 секунд
Мало того:
Цитата
DKLang Localization Package требует Tnt Delphi Unicode Controls

Автор: 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
Цитата(Akella @ 27.9.2010,  15:59)
Разве ITE может без перекомпиляции?
Разве с помощью ITE можно на ходу менять язык?

Добавлено @ 16:05
Я так понял, что ITE может переводить только константы? А как же текстовые свойства компонент? Например, Caption?
А если есть у постоянных датасетов свойство DisplayLabel?

1. Без перкомпиляции нет, по ходу менять язык нельзя. Язык приложения автоматом выбирается в соответствии с выбраным языком ОС (Control Panel/Regional and Language options/Regional Options)

2. Переводить можно только ресурсы, т.е. всё что в resourcestring и dfm. Caption, DisplayLabel и т.п., естесственно тоже. Const — не канает.

Ну еще есть полезная функция это возможность делать свои словари терминов. Для стандарнтых сообщений об ошибках в базовую поставку Delphi входят словари на французском, немецком и японском языках. Русских, понятное дело, нет :( , но можно найти smile

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

P.S. Локализовывать пробовал.

Автор: Akella 6.10.2010, 21:35
 smile спасибо

Автор: Akella 13.11.2010, 13:15
А кто-нибудь использовал http://www.sqlmanager.net/en/products/tools/advancedlocalizer?

Автор: CodeMonkey 13.11.2010, 14:30
Цитата(roschinspb @  6.10.2010,  18:50 Найти цитируемый пост)
 но можно найти


Подкинь ссылочку?

Автор: roschinspb 13.11.2010, 17:33
Цитата(CodeMonkey @ 13.11.2010,  14:30)
Цитата(roschinspb @  6.10.2010,  18:50 Найти цитируемый пост)
 но можно найти


Подкинь ссылочку?

http://www.roschinspb.narod.ru/dev/DelphiRu.zip, гдето выкачал, ... первоисточник не могу найти, на авторство не претендую.

В этот файл добавил все ангоязычные ресурсные строки взятые из исходников Delphi 2010. Добавлялись они автоматически с помощью самопального, типа, синтаксического анализатора, поэтому есть всякие "левые" строки.
Потом дополнил некоторыми своими переводами и сделал программку, которая добавляет этот словарь в Translation Repository. P.S. Если добавишь свои переводы, вышли мне пож. свой вариант, по адресу мой_ник + сабака + mail.ru

Автор: lukas 20.11.2010, 19:10
Можно использовать еще хитрее трюк, чем трюк с кодами фраз. Но он несет в себе опасность, зато программы переводить очень легко:

Код

ShowMessage( t('Yor Message') );


Функция t переводит фразу, где нибудь у нас есть база соответствий всех фраз англ и другого языка. Если необходимо вставить в фразу какой-то динамический контент, используем Format.

Код

ShowMessage( t(Format('Your %s Message')) );


Функции можно укоротить , превратить в одну.

Автор: imageman 29.11.2010, 14:47
я немного переработал

1. Определяем глобальные переменные (отдельный юнит)
2. Переводим все глобальные переменные на другой язык (процедура)
3. Используем эти переменные по мере необходимости

пункт 2 выглядит так: 
Код

DetektorTeksta:=Translate('DetektorTeksta','Детектор текста');

DetektorTeksta без кавычек - глобальная переменная
'DetektorTeksta' в кавычках - название строки в ini файле, который отвечает за перевод
'Детектор текста' - если в ini файле перевода нету, то переменной присвоить это значение. А заодно при выходе из программы написать в ini файл:
DetektorTeksta=Детектор текста
при этом как только мы исправим ini файл при следующем запуске мы получим новое значение глобальной переменной

Пункт 2 делал следующим образом. Создал монитор clipboardа. Прошелся в редакторе по всем строковым константам (find ' ). Выбираем вместе с '' строку, копируем в буфер обмена. Программа-монитор берет оттуда, в один файл пишет
Код

var DetektorTeksta


в другой 
Код

DetektorTeksta:=Translate('DetektorTeksta','Детектор текста');


и в буфер обмена помещает DetektorTeksta

т.е. мы вручную выбираем в редакторе кода строку - Ctrl-X Ctrl-V
а потом подсоединяем пару файлов к проекту. Насчет перевода формы сделал довольно монстрообразную функцию, которая перебирает все компоненты на форме, определяет что за компонент (класс) и перебирает все строковые поля компонента. Ну и переводит их через функцию Translate. Результирующая строка в ini файле перевода что-то вроде такого 
Код

m_openTiff.caption="Импортировать файл изображения"
SpeedButtonSaveProj.Whint="Сохранить проект<Ctrl+S>"

(префикс W использовал для юникодных переменных).

Автор: 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
Цитата(remax @ 30.11.2010,  02:44)
компонент TJvTranslator и связанные с ним...

на досуге посмотрю.

Интересно, как он работает с юникодами и с Ansi строками 

Автор: Akella 30.11.2010, 11:14
Цитата(remax @  30.11.2010,  03:44 Найти цитируемый пост)
а JEDI VCL не подходит?

для этого нужно ставить весь этот мусорник двух пакетов: 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, спасибо. Там есть много вкусного  smile 

Автор: 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 -  smile  smile  smile 

Автор: 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 @  7.6.2011,  16:55 Найти цитируемый пост)
А учитываете динамическую смену языка в элементах управления?

ну конечно smile 
Мы учитываем

Автор: Rohoss 15.6.2011, 14:34
А если использовать такой алгоритм:
Есть класс, LanguageManager который имеет статическую коллекцию windows, в которой хранятся ссылки на окна. Когда окно создаётся, оно добавляется в эту коллекцию, когда уничтожается уберается из неё. Хотя может такая коллекция в какой-то части приложения и так существует... Дальше, этот класс LanguageManager имеет метод ChangeLanguage, который проходит эту коллекцию циклом и находит все элементы управления. Если имя элемента управления содержится в сопоставленном ини-файле, значит мы меняем свойство Caption на соответствующее в ини-файле. Метод ChangeLanguage нужно вызывать каждый раз при создании окна и после инициализации элементов управления. Ну и соответственно в LanguageManager хранить текущий язык.
Как мне кажется реализовать не сложно, хотя могу ошибаться, так как давно с делфи не работал. Но в результате язык приложения должен меняться динамически (при вызове метода ChangeLanguage), который можно реализовать не только при загрузке окна а и на какой то кнопке вроде (сменить язык). Потом, локализировать может кто угодно, так как достаточно добавить новый ини.файл(Где то будет директория, в которой будут содержатся эти файлы). И потом, не нужно никаких компонентов  smile 

Автор: 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
Цитата(Keeper89 @  16.6.2011,  13:32 Найти цитируемый пост)
CnVCL

Это типа JEDI?

Автор: Keeper89 16.6.2011, 13:44
Типа, но гораздо меньше smile

Автор: 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,  09:59 Найти цитируемый пост)
Вот интересно. А зачем переключение языка на ходу? 

Потому что круто. Хотя, скорее всего только раз будет использоватся  smile 

Автор: Akella 27.7.2011, 10:49
В чем крутизна?
Я вот смотрю на Оперу, Огнелиса, офисные программы, фотошоп, винду, линукс, Delphi, на другие программы. Там нет переключения языка. Просто при установке выбираешь язык программы и фсё. Ну действительно, зачем переключение нужно?

Автор: Akella 27.7.2011, 11:04
Вышла новая версия TsiLang. Но ошибку при переводе констант так и не исправили. До сих пор переводи русский в иероглифы ((((


Я сейчас пробую Lingobit Localizer. Переводит саму программу, EXE-шник. Можно переводить двумя кликами с разу несколько строк (свойств, компонентов) с помощью онлайн переводчиков гугл и майкрософт. Мне перевод от гугл больше понравился, хотя есть нюансы, ну т.е. ручками править некоторые переводы нужно. Программа подглючивает немного, хотя версия уже 7. Можно переводить данные из базы. Подключаешься к любой базе и переводишь прямо в программе. В общем удобно. Но стоимость....... 1200 долларов О_о smile

Добавлено через 1 минуту и 26 секунд
Я ещё не щупал Korzh Lokalizer.

И я пока не знаю, что мне делать с константами. Надо было мне их в базу запихать  smile 

Автор: Rohoss 27.7.2011, 11:10
Цитата(Akella @  27.7.2011,  10:49 Найти цитируемый пост)
 винду, линукс

Там язык переключить не так просто.

Цитата(Akella @  27.7.2011,  10:49 Найти цитируемый пост)
 Ну действительно, зачем переключение нужно? 

Хз, не нужно наверное... просто круто  smile 

Akella, ты кстати на сильвелайт забил?

Автор: Akella 27.7.2011, 11:33
Пока да, временно, т.к. дома ремонт (делаю своими силами), но всё ещё впереди smile

Автор: Rohoss 27.7.2011, 12:02
А, понятно. ну главное не на долго забивать  smile 

Автор: Keeper89 27.7.2011, 12:08
Rohoss, Akella просто культурно свалил на ремонт, зачем ему этот Сильверлайт  smile  smile 

Автор: Akella 27.7.2011, 21:13
честно ремонт smile

Добавлено через 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 это круто!  smile 
Перевод программы с помощью PROMPT (8, 9), Google, Bing, Systran 6
Русскоязычная поддержка. Сама программа на русском.
Я забросил лингобит, и купил radialix smile .
radialix лучше и на много дешевле. Да, есть, конечно, недочёты, но идеальных программ не бывает  smile 

Автор: Akella 6.8.2011, 09:15
Забыл совсем... У Радиаликса справка на русском!! Это большой плюс.
А у Лингобита нету даже новостей о том, что добавлено/исправлено в новых версиях. Т.е. новую версию выпустили, а что там исправлено или добавлено вкусного нифига неизвестно ((

Автор: Akella 23.8.2011, 16:39
Оказывается, купив лицензию для Радиаликс, можно активировать программу на 4х своих компьютерах. Это очень удобно. Я активировал на рабочем компе, а потом на домашнем и на ноуте. smile 

Автор: Akella 29.10.2011, 15:13
А ещё, если отдавать радиаликс-проект другому человеку для перевода, например, переводчику, то переводчик, скачав и установив программу, может её активировать бесплатно, это так называемый режим переводчика. Перевод программы не требует обязательного наличия исходного EXE файла.

Автор: Akella 2.4.2012, 22:50
http://www.webdelphi.ru/2011/11/lokalizaciya-prilozhenij-firemonkey-komponent-tlang/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)