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

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

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

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

Сообщение Лекс Айрин » 26.02.2016 12:46:49

vitaly_l, Я, вообще-то, не думаю, что буду использовать больше 5 языков. Понадобится, поменяю подход.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4097
Зарегистрирован: 19.02.2013 16:54:51

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

Сообщение vitaly_l » 26.02.2016 12:50:07

Лекс Айрин писал(а):Я, вообще-то, не думаю, что буду использовать больше 5 языков. Понадобится, поменяю подход.

Так Вам на каждую переменную нужно строку в case составить, это накладно. Там есть какая-то возможность перебрать переменные в режиме цикла.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3075
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение Лекс Айрин » 26.02.2016 13:15:32

vitaly_l, зачем? Можно использовать inc файлы, а переводы описывать отдельно, да и я буду описывать единую процедуру смены языка для всей программы.... вариантов больше одного.

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

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

Сообщение zub » 26.02.2016 13:35:36

Править чужой исходник какбы не айс. Через неделю будет новая версия - будете занова править?
zub
долгожитель
 
Сообщения: 2261
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение Лекс Айрин » 26.02.2016 14:02:44

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

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

Сообщение zub » 26.02.2016 15:48:51

>>vitaly_l, зачем? Можно использовать inc файлы, а переводы описывать отдельно, да и я буду описывать единую процедуру смены языка для всей программы.... вариантов больше одного.
Можно использовать какие хочешь файлы с любыми расширениями и содержимым. Смысл в том чтобы нигде не хардкодить перевод в программу, перевод осущестлять отдельно от исходников. Программа вообще ничего не должна знать что что ее будут переводить и какими средствами это будет делаться.
При использовании великов - это никогда не получится. При использовании средств поддерживаемых компилятором и средой - пожалуйста, только пометь нуждающееся в переводе места ResourceString и TTranslateString
Так получится действительно отделишь мух от котлет, а не просто сделаешь видимость что они разделены
zub
долгожитель
 
Сообщения: 2261
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение AndrewFG » 27.09.2017 11:16:29

Использую i18n и LCLTranslator все переводиться кроме DBGrid.Columns.
Хотя в сгенерированом PO файле все есть:

#: tmainform.dbgrid1.columns[0].title.caption
msgctxt "tmainform.dbgrid1.columns[0].title.caption"
msgid "TitleTest"
msgstr "Тест"

Но при переключении языка заголовки колонок остаются прежними. Если кто сталкивался подскажите как решить проблему.
Аватара пользователя
AndrewFG
незнакомец
 
Сообщения: 7
Зарегистрирован: 27.08.2017 19:10:44

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

Сообщение vitaly_l » 27.09.2017 11:25:45

AndrewFG писал(а): i18n и LCLTranslator все переводиться кроме DBGrid.Columns.

Сделайте минимальный пример, только с одной DBGrid и укажите, что именно не переводится.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3075
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение AndrewFG » 27.09.2017 11:53:35

Взял пример из Lazarus: translation. Бросил на форму DBGrid, Добавил колонку, во файле translation_demo.ru.po записал перевод заголовка колонки. Меняю язык, заголовок колонки не реагирует.
На скриншоте все видно:

Изображение

Неужели никто не сталкивался, никому не нужно было переключение языка интерфейса ? Похоже придется лезть в дебри чужого кода (((
Аватара пользователя
AndrewFG
незнакомец
 
Сообщения: 7
Зарегистрирован: 27.08.2017 19:10:44

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

Сообщение AndrewFG » 24.10.2017 15:37:52

Разобрался с причиной по которой не переводятся заголовки в DBGrid. Оказалось что в файле lcltranslator.pas который из LCL в методе TUpdateTranslator.IntUpdateTranslation при проверке переводить или не переводить идет проверка свойства с помощью IsStoredProp. И DBGrid->Columns->Title->Caption эту проверку не проходит. Если закоментировать все сразу переводиться!
Код: Выделить всё
procedure TUpdateTranslator.IntUpdateTranslation(AnInstance: TPersistent);
var
  i,j: integer;
  APropCount: integer;
  APropList: PPropList;
  APropInfo: PPropInfo;
  TmpStr: string;
  APersistentProp: TPersistent;
  StoreStackPath: string;
begin
  APropCount := GetPropList(AnInstance.ClassInfo, APropList);
  try
    for i := 0 to APropCount-1 do
      begin
      APropInfo:=APropList^[i];
      if Assigned(PPropInfo(APropInfo)^.GetProc) and
         assigned(APropInfo^.PropType)

(*and  IsStoredProp(AnInstance, APropInfo)*) // <-----

then
        case APropInfo^.PropType^.Kind of
          tkUString,
          tkSString,
          tkLString,
          tkAString,
          tkWString
          :  begin


Вроде проблема найдена и решена. Но момент который смущает: Зачем эта проверка вообще ? Если свойство не stored то на нужный язык и переводить ее нельзя? Не вылезет ли где нибудь проблема если IsStoredProp убрать?
И еще: подскажите кто знает как сообщать разработчикам FPC/Lazarus о найденных проблемах?
Аватара пользователя
AndrewFG
незнакомец
 
Сообщения: 7
Зарегистрирован: 27.08.2017 19:10:44

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

Сообщение Лекс Айрин » 24.10.2017 18:03:30

AndrewFG, для начала, обнови Лазарус и FPC до актуального транка, возможно, что проблему уже исправили. Если нет, то тебе на
https://bugs.freepascal.org/view_all_bu ... oject_id=1
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 4097
Зарегистрирован: 19.02.2013 16:54:51

Пред.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

Рейтинг@Mail.ru