Application.MessageBox

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

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

Application.MessageBox

Сообщение Vadim » 22.02.2015 11:58:58

Lazarus 1.5.47874.
Или я чего-то путаю или одно из двух. :-)
Вроде бы раньше, при вызове этого метода, кнопки имели надписи на русском языке, а теперь вызываю, а там кнопки как у MessageDlg - Yes, No, Cancel и т.п.
Кто-нибудь знает про это дело что-нибудь?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Application.MessageBox

Сообщение Sharfik » 22.02.2015 15:14:31

В Laz 1.1 все так же, перевод самим ручками. Тут на форуме было описано как.

Код: Выделить всё
function Translate(Name,Value : AnsiString; Hash : Longint; arg:pointer) : AnsiString;
begin
  case StringCase(Value,['&Yes','&No','Cancel']) of
   0: Result:='&Да';
   1: Result:='&Нет';
   2: Result:='Отмена';
   else begin
     Result:=Value;
    end;
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
      SetResourceStrings(@Translate,nil);
end;
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30

Re: Application.MessageBox

Сообщение zub » 22.02.2015 15:56:56

Код: Выделить всё
uses ...Translations,gettext...
...
var
  Lang, FallbackLang: String;
...
GetLanguageIDs(Lang, FallbackLang);
TranslateUnitResourceStrings('lclstrconsts','pathtoprogramcopylclstrconsts.%S.po', Lang, FallbackLang);


Добавлено спустя 1 минуту 2 секунды:
lclstrconsts.ru.po и прочие другие варианты переводов взять из поставки лазаря
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Application.MessageBox

Сообщение Vadim » 24.02.2015 06:08:26

Всем спасибо за разъяснения.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Application.MessageBox [Решено]

Сообщение Vadim » 18.03.2015 13:38:36

Как послесловие к теме. :-)
Очень интересным оказался факт, что Application.MessageBox оказался с английскими кнопками только в винде, в Linuxe он, оп умолчанию для русскоязычной локализации, выдаёт кнопки тоже на русском языке. Вот вам и Билл Гейтс. :-D
для русскоязысия кнопок в винде нужно поправить файл lclstrconsts.pas, в котором заменить англицкие названия на русские. Ну и не забыть его скомпилировать. ;-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Application.MessageBox

Сообщение Лекс Айрин » 18.03.2015 14:19:30

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

Re: Application.MessageBox

Сообщение alexs » 18.03.2015 15:54:15

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

Плохой совет
Надо просто включить русские ресурсы:
Код: Выделить всё
  UserLang:='ru';
  poFileName:= lngFolder + Format('lclstrconsts.%s.po', [UserLang]);
  if FileExists(poFileName) then
    Translations.TranslateUnitResourceStrings('LCLStrConsts', poFileName);
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Application.MessageBox

Сообщение Лекс Айрин » 18.03.2015 18:13:28

alexs, а подробнее можно?

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

Re: Application.MessageBox

Сообщение zub » 18.03.2015 18:54:33

что в нем править? рабочий пример
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Application.MessageBox

Сообщение Лекс Айрин » 18.03.2015 20:08:27

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

Re: Application.MessageBox

Сообщение zub » 18.03.2015 20:15:49

gettext какбы подразумевает дополнительные файлы - по задумке любой может взять и сделать нужную ему реализацию
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Application.MessageBox

Сообщение Лекс Айрин » 18.03.2015 20:26:34

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

Re: Application.MessageBox

Сообщение zub » 18.03.2015 20:40:07

Не комильфо писать программы на не английском языке))
В качестве полного извращения могу предложить написать парсер который будет заменять строки в lclstrconsts.pas (да тогда уж в любом, че мелочиться) на локализованные строки из соответствующего *.po, занятие ничем не лучше чем "локализовывать" напрямую, но зато не надо будет править "локализацию" позже, всегда можно будет получить автоматически "актуальную" версию локализации для подобных поделок))
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Application.MessageBox

Сообщение svk12 » 19.03.2015 03:05:18

Можно сделать так:
Файл '..../lazarus/lcl/languages/lclstrconsts.ru.po' скопировать в одну директорию с приложением.

В модуле главной формы приложения:

Код: Выделить всё
uses
     .....,gettext, translations, LCLTranslator;

procedure TMainForm.FormShow(Sender: TObject);
begin                         
  SetDefaultLang('ru');
end;
svk12
постоялец
 
Сообщения: 409
Зарегистрирован: 09.06.2008 18:42:47

Re: Application.MessageBox

Сообщение Лекс Айрин » 19.03.2015 11:17:10

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

След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru