Application.MessageBox

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

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

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

Application.MessageBox

Сообщение Vadim »

Lazarus 1.5.47874.
Или я чего-то путаю или одно из двух. :-)
Вроде бы раньше, при вызове этого метода, кнопки имели надписи на русском языке, а теперь вызываю, а там кнопки как у MessageDlg - Yes, No, Cancel и т.п.
Кто-нибудь знает про это дело что-нибудь?
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

В 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;
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Код: Выделить всё

uses ...Translations,gettext...
...
var
  Lang, FallbackLang: String;
...
GetLanguageIDs(Lang, FallbackLang);
TranslateUnitResourceStrings('lclstrconsts','pathtoprogramcopylclstrconsts.%S.po', Lang, FallbackLang);


Добавлено спустя 1 минуту 2 секунды:
lclstrconsts.ru.po и прочие другие варианты переводов взять из поставки лазаря
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

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

Сообщение Vadim »

Как послесловие к теме. :-)
Очень интересным оказался факт, что Application.MessageBox оказался с английскими кнопками только в винде, в Linuxe он, оп умолчанию для русскоязычной локализации, выдаёт кнопки тоже на русском языке. Вот вам и Билл Гейтс. :-D
для русскоязысия кнопок в винде нужно поправить файл lclstrconsts.pas, в котором заменить англицкие названия на русские. Ну и не забыть его скомпилировать. ;-)
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Vadim, скорее всего, дело в том, что под линуксом эмулируется большая часть WinAPI.
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

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

Плохой совет
Надо просто включить русские ресурсы:

Код: Выделить всё

  UserLang:='ru';
  poFileName:= lngFolder + Format('lclstrconsts.%s.po', [UserLang]);
  if FileExists(poFileName) then
    Translations.TranslateUnitResourceStrings('LCLStrConsts', poFileName);
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

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

Или просто подправить пример zubа?
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

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

Сообщение Лекс Айрин »

zub, да я не спорю... я пытаюсь понять как это делать. Хотелось бы еще при этом обойтись без дополнительных файлов -- выдергивание их из экзешника это дополнительные проблемы :(
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

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

Сообщение Лекс Айрин »

zub, не комильфо(( Из-за простенькой поделки нет смысла городить частокол файлов. Мне тогда проще будет заменить MessageBox на QuestionDlg и напрямую задавать названия... или действительно переделать lclstrconsts.pas
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Не комильфо писать программы на не английском языке))
В качестве полного извращения могу предложить написать парсер который будет заменять строки в lclstrconsts.pas (да тогда уж в любом, че мелочиться) на локализованные строки из соответствующего *.po, занятие ничем не лучше чем "локализовывать" напрямую, но зато не надо будет править "локализацию" позже, всегда можно будет получить автоматически "актуальную" версию локализации для подобных поделок))
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

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

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

Код: Выделить всё

uses
     .....,gettext, translations, LCLTranslator;

procedure TMainForm.FormShow(Sender: TObject);
begin                         
  SetDefaultLang('ru');
end;
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

zub, и почему это? Хочется выйти на международный уровень?
Ответить