Руссификация Lazreport

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

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

Руссификация Lazreport

Сообщение pi1 » 03.11.2015 10:56:45

Добрый всем день!
Три года работаю в Lazarus, но одну промблему решить не могу. Не могу руссифицировать Lazreport. FastReport стал ну уж очень дорогим. А часто нужно сделать быстро утилитку для винды, а печать через lazreport с аглицким меню. Да и редактор шаблона тоже. Поиграл с po-файлом языка, почитал вики. Не помогло.
Мож кто напишет здеcь простую пошаговую инструкцию для Windows. Понятно, что у всех своих забот полно и времени лишнего нет. Но дело то полезное для всего Lazarus-freepascal-сообщества. Ссылки и поиск прошу не предлагать, я по ним уже часов несколько потратил. Нужна простая, как лопата, пошаговая инструкция.
Аватара пользователя
pi1
новенький
 
Сообщения: 59
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск

Re: Руссификация Lazreport

Сообщение svk12 » 03.11.2015 14:11:18

Лично я делаю это следующим образом :

В модуле главной формы проекта :

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

procedure TMainForm.TranslateLazReport(Lang: String);
var
  UserLang, lngFolder, poFileName:string;
  i:integer;
begin
  lngFolder:=ExtractFilePath(ParamStr(0));
  UserLang:=Lang;
  for i := 1 to Paramcount - 1 do
    if (ParamStrUTF8(i) = '--LANG') or (ParamStrUTF8(i) = '-l') or
      (ParamStrUTF8(i) = '--lang') then
      UserLang := ParamStrUTF8(i + 1);
  if UserLang='' then
  UserLang:='ru';
  poFileName:= lngFolder +DirectorySeparator + Format('lr_const.%s.po', [UserLang]);
  if FileExists(poFileName) then
    Translations.TranslateUnitResourceStrings('lr_const', poFileName);
end;                                                       

procedure TMainForm.FormShow(Sender: TObject);
begin                                               
    TranslateLazReport('ru');
end;


Файл 'lr_const.ru.po' в данном случае копируется в стартовую директорию приложения.
svk12
постоялец
 
Сообщения: 407
Зарегистрирован: 09.06.2008 18:42:47

Re: Руссификация Lazreport

Сообщение mig-31 » 03.11.2015 14:21:42

Так вроде бы при создание po файлов для соответствующей локализации вашей программы и LazReport загрузит соответствующий po файл.

Вы похоже не читали вики " Как локализировать программы".
mig-31
постоялец
 
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

Re: Руссификация Lazreport

Сообщение pi1 » 03.11.2015 16:27:05

Тут главное не то, кто что читал, а то как сделать и проверить самому. Я проверил . В режиме IDE меню в редакторе на русском смог сделать, в компиллированном exe-файле нет.
"Файл 'lr_const.ru.po' в данном случае копируется в стартовую директорию приложения."- а тут не понятно. Речь идет о проекте или о готовом приложении.
Я бы предпочел доработку самой компоненты Lazreport . Например в Lazreport 9.8 есть "руссификация" сохранения файла для винды- utf8tosys(filename) , так вот не работает это в вин7 . Нужно конкретно utf8tocp1251(filename), как это я делаю в проекте, когда сохраняю текст в файл. Или уже есть доработанная компонента Lazreport ?
Аватара пользователя
pi1
новенький
 
Сообщения: 59
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск

Re: Руссификация Lazreport

Сообщение svk12 » 03.11.2015 18:17:21

pi1 писал(а):Речь идет о проекте или о готовом приложении.


Одинаково.
svk12
постоялец
 
Сообщения: 407
Зарегистрирован: 09.06.2008 18:42:47

Re: Руссификация Lazreport

Сообщение mig-31 » 03.11.2015 18:58:16

pi1 писал(а):Тут главное не то, кто что читал, а то как сделать и проверить самому. Я проверил . В режиме IDE меню в редакторе на русском смог сделать, в компиллированном exe-файле нет."Файл 'lr_const.ru.po' в данном случае копируется в стартовую директорию приложения."- а тут не понятно. Речь идет о проекте или о готовом приложении.


Тут на форуме даже это уже обсуждалось. Можно как svk12 собственную процедуру, но можно еще проще. При создании многоязычных приложение Lazarus создает po файлы для соответствующей локализации. Как это сделать написано в вики. Lazreport загрузит соответствующий файл. Локаль операционной системы тоже должна быть настроена на требуемую страну.

quote="pi1"]Я бы предпочел доработку самой компоненты Lazreport . Например в Lazreport 9.8 есть "руссификация" сохранения файла для винды- utf8tosys(filename) , так вот не работает это в вин7 . Нужно конкретно utf8tocp1251(filename), как это я делаю в проекте, когда сохраняю текст в файл. Или уже есть доработанная компонента Lazreport ?[/quote]

Функции utf8tosys и utf8tocp1251 для всех ОС поддерживаемых FreePascal. Вы забываете, что в Windows, может использоваться как WIndows кодировка для страны, так и uft8. Все у нее не так как у нормальных операционных систем.
mig-31
постоялец
 
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

Re: Руссификация Lazreport

Сообщение pi1 » 03.11.2015 21:35:39

Спасибо svk12 за совет. Так действительно работает. Давно видно я в x-ах ковырялся, совсем форточником стал :(
Логика в винде другая, путанная. Ну да ладно. Тут вот еще неожиданно вылез глюк непонятный. Если репорт открывался командой DesignReport то загрузить в него другой файл шаблона не могу, вываливается. Процедура clear не помогает. Поиск в инете тоже не помог. Мож кто встречал?

Добавлено спустя 5 минут 31 секунду:
"Функции utf8tosys и utf8tocp1251 для всех ОС поддерживаемых FreePascal. Вы забываете, что в Windows, может использоваться как WIndows кодировка для страны, так и uft8. Все у нее не так как у нормальных операционных систем."
Вот и получается, что загрузить файл шаблон с русским именем (cp1251) в Lazreport можно frReport1.LoadFromFile(utf8tocp1251(fname1));
А вот из дизайнера репорта сохранить в такой кодировке не выходит :(

Добавлено спустя 1 час 26 минут 38 секунд:
Выяснил только, что если в шаблоне есть subreport и шаблон открывался в репорте для редактирования, то повторная загрузка (frReport1.LoadFromFile(utf8tocp1251(fname1))) вызывает крах задачи. Скорее всего это глюк компоненты. Не так часто используется пользователем проги редактор шаблона. Просто у меня в утилитке одна форма с двумя кнопками Печать и Редактор шаблона, а шаблонов в задаче используется несколько.Если не редактировать, то на печать выводится нормально со сменой шаблонов. Сам случайно наткнулся.
Аватара пользователя
pi1
новенький
 
Сообщения: 59
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск

Re: Руссификация Lazreport

Сообщение mig-31 » 04.11.2015 11:36:21

pi1 писал(а):повторная загрузка (frReport1.LoadFromFile(utf8tocp1251(fname1))) вызывает крах задачи


Если вызываете на печать один и тот же шаблон не редактируя его, тоже падает?
mig-31
постоялец
 
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

Re: Руссификация Lazreport

Сообщение pi1 » 04.11.2015 13:13:37

Все одно, тот же шаблон или другой. Но вот выяснилось, что это происходит в режиме отладки. В штатном режиме приложения не вываливается. Один раз даже удалось поймать ошибку (жаль не скриншотил). Что то про EDOM было написано. Ну это ладно,терпимо, но вот когда открыт файл ( в штатном режиме приложения) с именем в кодировке cp1251, то в редакторе шаблона имя файла представлено знаками вопрос (Дизайнер-?????.lrf) и попытка сохранить его после редактирования с тем же именем выполняется не корректно, это не есть хорошо.Попытка повторного открытия в дизайнере файла в этой кодировке, вообще дает интересный результ. Придется, как говорят бухгалтеры, это все открыжить и потом здесь описать по понятней и по точнее.

Добавлено спустя 6 часов 30 минут:
Решил сделать так- изменить, компиллировать,установить компоненту lazreport :
в файле lr_desgn.pas (lazarus/components/lazreport/source) добавил после CurDocName := OpenDialog1.FileName;
строчку CurDocName:=utf8tocp1251(CurDocName);
(ессно библу lconvEncoding в uses)
а в файл lr_class.pas в procedure TfrReport.SaveToFile(FName: String); добавил перекодировку utf8tocp1251:
if SameText('.lrf',Ext) then
SaveToXMLFile(fName)
else
begin
Stream := TFileStream.Create(UTF8Tocp1251(FName), fmCreate);
SaveToStream(Stream);
Stream.Free;
end;
Еще надо найти где cp1251toutf8 "впендюрить" . Думаю, действуя по аналогии, можно весь lazreport для нужд "русской" винды поднастроить.
Уточняю, мне нужен репорт для быстрого создания утилит для работы с датасетами и отчетами именно в винде.
Спасибо разработчикам за простой и понятный код компоненты, в частности Tzyganenko A.
Аватара пользователя
pi1
новенький
 
Сообщения: 59
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru