Смена языка интерфейса в программе "на лету"

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Смена языка интерфейса в программе "на лету"

Сообщение Alex2013 » 13.06.2015 21:07:07

А в чем проблема ?
Установить язык аккуратно завершить LCL Application.Terminate; , а в проекте написать что-то вроде :

Const
reboot : boolean = false ; // константу разумеется в модуль главной формы
...
begin
{$I project1.lrs}
Repeat
Reboot : = false ;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;

until not Reboot ;
end.
Alex2013
долгожитель
 
Сообщения: 2922
Зарегистрирован: 03.04.2013 11:59:44

Re: Смена языка интерфейса в программе "на лету"

Сообщение Ichthyander » 13.06.2015 21:55:40

Alex2013 писал(а):А в чем проблема ?
Const
reboot : boolean = false ; // константу разумеется в модуль главной формы
...
begin
{$I project1.lrs}
Repeat
Reboot : = false ;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;

until not Reboot ;
end.

Прикольная идея. Не думал, что так можно. МОжет поэкспериментирую над этим. А вообще, была мысль сделать еще до безобразия проще: появляется мессейдж с просьбой перезагрузить программу. Правда нужно было бы как-то определять нужный код языка до собственно еще загрузки всех форм и самого файла настроек программы.
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Смена языка интерфейса в программе "на лету"

Сообщение Лекс Айрин » 15.06.2015 09:41:48

Alex2013, Накуа такие проблемы?

Я спокойненько сделал смену языка и без ребута проги.

Добавлено спустя 1 минуту 30 секунд:
Ichthyander писал(а):Правда нужно было бы как-то определять нужный код языка до собственно еще загрузки всех форм и самого файла настроек программы.


Это как раз не особая проблема.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Смена языка интерфейса в программе "на лету"

Сообщение zub » 15.06.2015 13:12:24

Лекс Айрин
>>Меню спокойно заменяется динамически простым присваиванием
тогда нужно быть последовательным и создат вторые (третьи, четвертые...) локализованные копии всех фором)) Несерьезеый имхо подход - локализация должна быть отдельно и выполнятся без копания в исходниках программы. gettext и po - для этого стандартный и общепринятый способ, зачем придумывать костыли?

>>Я спокойненько сделал смену языка и без ребута проги.
кроме того, ваш метод для смены языка налету также как и PO требует пересоздание форм (без разницы как это выполняется - "ребут", "присвоение" или чтото еще) - значит он ничем не лучше
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Смена языка интерфейса в программе "на лету"

Сообщение Лекс Айрин » 15.06.2015 15:00:17

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


А у меня и прога несерьезная)) И я не думал серьезно над этим вопросом. Но если задумаюсь, то:
1) Буду создавать меню динамически.
2) Буду использовать языковые файлы собственного формата. Или же в обычным текстовым.
3) Заведу сохраняемый в настройках список языков, процедуру Setlanguage (или функцию, не суть важно).
4) сделаю это отдельным модулем

zub писал(а):кроме того, ваш метод для смены языка налету также как и PO требует пересоздание форм (без разницы как это выполняется - "ребут", "присвоение" или чтото еще) - значит он ничем не лучше


С какого перепугу?
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Смена языка интерфейса в программе "на лету"

Сообщение zub » 15.06.2015 16:20:50

>>С какого перепугу?
C такого, что локализация это не только меню, но еще и тонна всяких лабелов, капшенов, хинтов, буттонов и иже с ними... Ладно меню переключаете динамически, с формами придется повозиться и в итоге прийти к их пересозданию, либо отказу от локализации налету без "перезапуска" программы. Если программа "несеръезная" - перезапуск\пересоздание никаких сложностей не вызывает, сложности появляются если в текущей сессии есть какиелибо динамические данные - их для "ребута" нужно будет сохранить а потом заново открыть

>>Но если задумаюсь, то:
>>1..5
Это всё уже есть в gettext. Плюсом к нему еще и поддержка со стороны компилятора\иде и куча сторонних программ для перевода PO.
Единственная сложность с PO это перевод "рантаймных" строк - тех которые не фигурируют ни в исходниках ни на формах, а читаются программой при работе из сторонних файлов. Их надо подмешать в PO файл генерируемый компилятором так чтобы при следующей компиляции он их не выкинул, либо держать в отдельном PO и поддерживать их актуальность самому

В части удобства использования любой костыль проиграет gettext, если конечно разработчики FPC\Lazarus не примут ваши патчи с поддержкой вашего формата))
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Смена языка интерфейса в программе "на лету"

Сообщение Лекс Айрин » 15.06.2015 17:43:09

zub писал(а):C такого, что локализация это не только меню, но еще и тонна всяких лабелов, капшенов, хинтов, буттонов и иже с ними... Ладно меню переключаете динамически, с формами придется повозиться и в итоге прийти к их пересозданию, либо отказу от локализации налету без "перезапуска" программы.


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

zub писал(а):Это всё уже есть в gettext. Плюсом к нему еще и поддержка со стороны компилятораиде и куча сторонних программ для перевода PO.


а вот поддержка компилятора/иде... это как раз минус, а не плюс. Если найдется лучшая система на нее будет сложнее перейти.

Добавлено спустя 6 минут 17 секунд:
zub писал(а):В части удобства использования любой костыль проиграет gettext, если конечно разработчики FPC\Lazarus не примут ваши патчи с поддержкой вашего формата))


Не примет точно. Я буду делать совсем по другому... Если буду. Желательно так, что бы перевод можно было сделать, допустим, в гугл переводчике и подключить к программе.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Смена языка интерфейса в программе "на лету"

Сообщение zub » 15.06.2015 18:32:43

>>Желательно так, что бы перевод можно было сделать, допустим, в гугл переводчике и подключить к программе.
И это можно сделать c PO))

>>а вот поддержка компилятора/иде... это как раз минус, а не плюс. Если найдется лучшая система на нее будет сложнее перейти.
Нет, плюс!
с велосипедов полюбому легче будет перейти)) да и ненайдется ничего))

>>...тонна всяких лабелов, капшенов эт сетера спокойно переименовывается без пересоздания формы.
да, споконо переименовываются тонной рукописных сеттеров. Либо своей процедурой пробегающей по всем контролам, но тогда в контролах нужно хранить "привязку" по которой будем брать соответствующее значение из своей системы локализации. Писать приблуду которая будет поддерживать в актуальном состоянии "привязки" и содержимое локализаций или делать это руками...
Зачем? всё уже сделано и прекрасно работает.

>>необязательно ее пересоздавать. Достаточно скрыть и отобразить другую
Мы друг друга не понимаем. Именно это я и подразумеваю под "пересоздать" - тот процесс который происходит в Application.CreateForm и аналогичных - чтоб форму показать надо ее создать. Собственно что будет "пересоздаваться" - другая форма (ваш вариант) или этаже с другой локализацией (po) неважно.

>>Не примет точно. Я буду делать совсем по другому...
Согласен с разрабами FPC\Lazarus, потому что усилия надо тратить на более полезные вещи, а не на свои варианты локализации))
Я понимаю велосипедистов которые изобретают чтобы понять как что устроено, сам таким являюсь. Но когда отвергается хороший вариант в пользу какойто умозрительной выгоды - чтото тут нетак))
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Смена языка интерфейса в программе "на лету"

Сообщение Лекс Айрин » 16.06.2015 09:49:57

zub писал(а):И это можно сделать c PO))


Нельзя. Нужно будет очень много копипастить.

zub писал(а):да, споконо переименовываются тонной рукописных сеттеров. Либо своей процедурой пробегающей по всем контролам, но тогда в контролах нужно хранить "привязку" по которой будем брать соответствующее значение из своей системы локализации.


Абсолютно так же как и стандартным способом.

zub писал(а):Собственно что будет "пересоздаваться" - другая форма (ваш вариант) или этаже с другой локализацией (po) неважно.

вообще-то пересоздать это создать форму заново, что для главной формы является аналогом перезапуска проги. Открыть другую форму это уже другой процесс.
zub писал(а):Мы друг друга не понимаем.

Скорее всего.

zub писал(а):Согласен с разрабами FPC\Lazarus, потому что усилия надо тратить на более полезные вещи, а не на свои варианты локализации))


Почитайте о минусах монополии. Можно на экономических ресурсах. Выбор должен быть всегда.

zub писал(а): Но когда отвергается хороший вариант в пользу какойто умозрительной выгоды - чтото тут нетак))


Вариантов ответа два. В моем случае, перетоксикоз манами. Пока я не пойму идеологию я не буду пользоваться компонентом.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Смена языка интерфейса в программе "на лету"

Сообщение Ichthyander » 16.06.2015 10:40:51

Лекс Айрин писал(а):
zub писал(а):И это можно сделать c PO))


Нельзя. Нужно будет очень много копипастить.


В программе POEdit предлагается сразу несколько вариантов перевода. Есть собственная база переводов и другие фишки онлайн перевода прямо в интерфейсе программы. Есть и другие программы для работы с файлами PO, наверняка где-то есть именно интеграция с Google переводчиком
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Смена языка интерфейса в программе "на лету"

Сообщение Лекс Айрин » 16.06.2015 11:00:18

Ichthyander,не... не из окна проги, а именно перевод содержимого файла перевода до последней точки. Это немного другое. Нафига мне автоматизация копипаста? А в РО файлах много такого, что переводить нельзя ни в коем случае.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Смена языка интерфейса в программе "на лету"

Сообщение zub » 16.06.2015 11:39:16

На это дело есть как куча сторонних программ, так и сам гугль об этом заботится http://www.opennet.ru/opennews/art.shtml?num=33492

>>А в РО файлах много такого, что переводить нельзя ни в коем случае.
естественно, в вашем формате тоже подобное появится - тут либо служебная информация в файле, либо удобство использования - выбирайте чтото одно))

Добавлено спустя 9 минут 56 секунд:
>>вообще-то пересоздать это создать форму заново, что для главной формы является аналогом перезапуска проги. Открыть другую форму это уже другой процесс.
"Главная" форма отличается от не главной только тем что числится в application как "главная" и процесс ее создания и показа предлагается автоматически (то что в lpr), но никто не мешает в него вмешаться и сделать так как нужно. перезапуск арограммы это совсем другое
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Смена языка интерфейса в программе "на лету"

Сообщение Лекс Айрин » 16.06.2015 12:16:36

zub писал(а):естественно, в вашем формате тоже подобное появится - тут либо служебная информация в файле, либо удобство использования - выбирайте чтото одно))


А вот не появится. Как там в мульте было... лучше день потерять, а потом за 5 минут долететь.

zub писал(а):и процесс ее создания и показа предлагается автоматически (то что в lpr)


Вообще-то, не только главная форма создается автоматически. Просто она создается так обязательно. (кстати, я бы сам не решился бы создавать лишние формы просто ради удобства. Память то они жруть.) Остальные по умолчанию создаются, но скрываются.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Смена языка интерфейса в программе "на лету"

Сообщение zub » 16.06.2015 12:36:10

>>А вот не появится. Как там в мульте было... лучше день потерять, а потом за 5 минут долететь.
Дайте пример получения локализованной строки из программы. Po делает это по идентификатору.

>>Вообще-то, не только главная форма создается автоматически
Я не предлагаю создавать или не создавать. лишь говорю о том что все эти процессы под контролем програмиста и сделать это можно разными способами.
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Смена языка интерфейса в программе "на лету"

Сообщение Лекс Айрин » 16.06.2015 13:27:47

zub вообще-то я говорил теоретически... ну ладно.

Выносим все строки программы в отдельные переменные (или вообще в одну переменную массив, например, с именем AllCaption) и ассоциируем переменные/ную со строками в файле. Заменяя файл меняем перевод. Я не пытаюсь получить идентификатор. Он тупо не нужен. Процедура смены языка знает где менять. Да, в дизайнере не будут отображаться заголовки, пункты меню и т.п. (да и то необязательно, можно и проставить для удобства).

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

В программе это будет выглядеть примерно как..
Код: Выделить всё
MainForm.GroupBox1.Caption:=AllCaption[0];
  MainForm.FontBold.Caption:='AllCaption[1];
  MainForm.FontItalic.Caption:=AllCaption[2];
....
  FormN.SaveTree.Hint:=AllCaption[xxx];


Добавлено спустя 3 минуты 22 секунды:
Что-то загорелся я идеей это реализовать. Удобно же.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google Adsense [Bot], Vlad04 и гости: 35

Рейтинг@Mail.ru