[Решено] Перевод сообщений модулей FPC

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

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

[Решено] Перевод сообщений модулей FPC

Сообщение lodka » 22.06.2021 05:53:08

Добрый день!
С переводом сообщений модулей лазаруса мне понятно.. включил i18n в свойствах проекта, добавил модуль в инспекторе и т.д. А как поступать с модулями FPC? В проекте используется FPHTTPClient, который в свою очередь имеет зависимость от ssockets. Как перевести его сообщения? Если я добавляю к проекту ssockets, что бы собрать и получить pot-файл, то проект закидывает ошибками. Думаю, что я делаю как-то не так. В статье на вики я не нашёл ответ на свой вопрос.. там, как мне кажется, статья ориентирована на модули лазаруса.

Код: Выделить всё
{ ---------------------------------------------------------------------
  ESocketError
  ---------------------------------------------------------------------}

resourcestring
  strHostNotFound = 'Host name resolution for "%s" failed.';
  strSocketCreationFailed = 'Creation of socket failed: %s';
  strSocketBindFailed = 'Binding of socket failed: %s';
  strSocketListenFailed = 'Listening on port #%d failed, error: %d';
  strSocketConnectFailed = 'Connect to %s failed.';
  strSocketAcceptFailed = 'Could not accept a client connection on socket: %d, error %d';
  strSocketAcceptWouldBlock = 'Accept would block on socket: %d';
  strSocketIOTimeOut = 'Failed to set IO Timeout to %d';
  strErrNoStream = 'Socket stream not assigned';
  strSocketConnectTimeOut = 'Connection to %s timed out.';
Последний раз редактировалось lodka 25.06.2021 08:27:03, всего редактировалось 1 раз.
lodka
новенький
 
Сообщения: 18
Зарегистрирован: 22.06.2021 05:15:27

Re: Перевод сообщений модулей FPC

Сообщение Vadim » 22.06.2021 17:15:33

lodka
В общих чертах:
- перевести эти самые resourcestring (то, что в одинарных кавычках, разумеется);
- откомпилировать ssockets.pp
- скопировать получившийся откомпилированный юнит в тот каталог, где лежал его откомпилированный старший брат.
Вот, в принципе и всё...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Перевод сообщений модулей FPC

Сообщение zub » 22.06.2021 21:55:11

Присоединюсь к вопросу.
Vadim
Чето ты нето советушь. модули поставляются уже скомпилироваными, должен быть готовый pot и переведеные po, как в лазаре
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Перевод сообщений модулей FPC

Сообщение Vadim » 23.06.2021 02:57:41

zub
Ну вот возьми и посоветуй то - найди их. Тогда и выясним, кто советует "то", а кто "не то". ;-)
Из классиков писал(а):Практика - единственный критерий истины!

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

Re: Перевод сообщений модулей FPC

Сообщение lodka » 23.06.2021 05:23:23

Vadim писал(а):Вот, в принципе и всё..

Спасибо!
У меня транковый fpc ревизии 1502, наверно надо обновиться, так как ssockets.pp не компилируется, валится с ошибкой resolve.pp(199,2) Fatal: Cannot open include file "resolve.inc". На windows.

Понятно, что надо решить эту проблему в любом случае, но коллеги, может есть ещё методы?

Добавлено спустя 2 минуты 32 секунды:
Кстати, у транка FPC/Lazarus какие ревизии точно рабочие?

Добавлено спустя 2 часа 17 минут 58 секунд:
Обновил с транка (FPC 1504, lazarus 65242), но при компиляции ошибка не ушла ssockets.pp, вернее в resolve.pp

исправил

Код: Выделить всё
{$ifdef usenetdb}
uses netdb;
{$else}
{$i resolve.inc}
{$endif}

на

{$ifdef usenetdb}
uses netdb;
{$else}
{$i win\resolve.inc}
{$endif}


Дальше всё стандартно. Добавляем к проекту требуемый модуль по Shift+F11 и пересобираем проект. В pot-файле строки появляются при удачной компиляции.

Код: Выделить всё
#: fphttpclient.serrunexpectedresponse
#, object-pascal-format
msgid "Unexpected response status code: %d"
msgstr ""

#: ssockets.strerrnostream
msgid "Socket stream not assigned"
msgstr ""

#: ssockets.strhostnotfound
#, object-pascal-format
msgid "Host name resolution for \"%s\" failed."
msgstr ""

#: ssockets.strsocketacceptfailed



Этот способ более верный.
lodka
новенький
 
Сообщения: 18
Зарегистрирован: 22.06.2021 05:15:27

Re: Перевод сообщений модулей FPC

Сообщение zub » 23.06.2021 08:14:43

Vadim писал(а):Ну вот возьми и посоветуй то - найди их. Тогда и выясним, кто советует "то", а кто "не то".

ок. проникся вопросом, советую как надо:
fpc неумеет *.po, он для ресурсстрингов генерит *.rsj(rst) , а в своем составе имеет утилитку rstconv которой из этих rsj можно получить po/msg/rc на выбор
то что в составе нет уже переведенных файлов - минус им, куча людей двойную работу делать будет

Добавлено спустя 2 минуты 52 секунды:
>>У меня транковый fpc ревизии 1502
тебе разморозиться надо, там к полтинику ревизии подходят емнип, если не перевалили еще))

>>Кстати, у транка FPC/Lazarus какие ревизии точно рабочие?
если уж используешь транк, то последние))

Добавлено спустя 4 минуты 27 секунд:
>>Этот способ более верный.
хз. исходники fpc есть не у всех и лежат они по разным путям - будет ругань на осутствие файлов
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Перевод сообщений модулей FPC

Сообщение lodka » 23.06.2021 11:01:06

zub писал(а):fpc неумеет *.po, он для ресурсстрингов генерит *.rsj(rst) , а в своем составе имеет утилитку rstconv которой из этих rsj можно получить po/msg/rc на выбор

По факту умеет он их или нет, но *.rsj тоже отсутствуют, я к тому, что лишние телодвижения делать придётся делать.

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

Согласен. Хотя бы те же rst сгенерированы были, уже плюс. Хотя.. может у меня их нет, потому как собираю без их поддержки.. не изучал вопрос.

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

Ты про добавление в проект. Ну.. исправить пара кликов.

zub писал(а):тебе разморозиться надо

Разморозился и получил Range check error в ssockets.pp :)
lodka
новенький
 
Сообщения: 18
Зарегистрирован: 22.06.2021 05:15:27

Re: Перевод сообщений модулей FPC

Сообщение zub » 23.06.2021 11:04:37

lodka писал(а):но *.rsj тоже отсутствуют

у меня есть pp\units\i386-win32\fcl-web\fphttpclient.rsj
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Перевод сообщений модулей FPC

Сообщение lodka » 23.06.2021 12:06:37

Проверил, у меня тоже появились после пересборки. Нет времени разбираться по какой причине их небыло.
lodka
новенький
 
Сообщения: 18
Зарегистрирован: 22.06.2021 05:15:27

Re: Перевод сообщений модулей FPC

Сообщение Vadim » 23.06.2021 15:59:37

lodka писал(а):Кстати, у транка FPC/Lazarus какие ревизии точно рабочие?

Как-то я этим вопросом не сильно заморачивался. У меня сейчас стоит:
Компилятор Free Pascal версии 3.3.1-r20:48714M [2021/02/20] для x86_64

Парочка раз была необходимость вносить мелкие правки в систеные модули - делал так, как советовал Вам и вроде всё собиралось нормально.
Если что, файлы *.rsj лежат там, где находятся откомпилированные модули (*.ppu, *.o). Они возникают сами собой при компиляции исходника (*.pp или *.pas), в котором есть resourcestring. В них, наверное, можно просто поменять нужные текстоовые сообщения без перекомпиляции модуля. Я просто не пробовал, как-то нужды не было. :-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Перевод сообщений модулей FPC

Сообщение lodka » 25.06.2021 08:21:26

lodka писал(а):Разморозился и получил Range check error в ssockets.pp

Это не из-за повышения ревизии, а из-за
lodka писал(а):Дальше всё стандартно. Добавляем к проекту требуемый модуль по Shift+F11 и пересобираем проект.

В общем это
lodka писал(а):Этот способ более верный.

неверный всё же подход.

Привёл компилятор в исходное состояние (убрал исправление в резолв и пересобрал), так как при добавлении модулей Shift+F11 происходит их пересборка предположительно не по феншую.

По локализации... на примере проекта с FPHTTPClient в Windows

1. Определяемся какие модули имеют на борту секцию resourcestring с требуемыми нам строками.
2. В инспекторе объектов в "Требуемые модули" добавляем зависимости FPMake: fcl-web и fcl-net
3. В параметрах проекта включаем i18n, в поле "Каталог вывода файлов PO" прописываем без кавычек "locale", галку "Создавать/обновлять PO файлы.." я не использую в данном проекте
4. Компилируем проект что бы в каталоге проекта создался каталог "locale", ну или создаём его руками без компиляции.
5. Готовим po-файлы

Копируем в каталог "locale"
Код: Выделить всё
\fpc_trunk\bin\i386-win32\rstconv.exe
\fpc_trunk\fpcsrc\packages\fcl-net\units\i386-win32\ssockets.rsj
\fpc_trunk\fpcsrc\packages\fcl-web\units\i386-win32\fphttpclient.rsj


Создаём po-файлы
Код: Выделить всё
rstconv -i fphttpclient.rsj -o fphttpclient.ru.po -f po -p UTF-8
rstconv -i ssockets.ru.rsj -o ssockets.ru.po -f po -p UTF-8


6. Переводим fphttpclient.ru.po и ssockets.ru.po
Код: Выделить всё
#: ssockets:strhostnotfound
msgid "Host name resolution for \"%s\" failed."
msgstr "Время ожидания подключения к \"%s\" истекло."


7. Пишем процедуру локализации
Код: Выделить всё
// Локализация
procedure Translate_;
var
  UserLang, poFileName: string;
begin
  UserLang := 'ru';

  poFileName := IncludeTrailingPathDelimiter(ProgramDirectory + 'locale') + Format('fphttpclient.%s.po', [UserLang]);
  if FileExistsUTF8(poFileName) then
    Translations.TranslateUnitResourceStrings('fphttpclient', poFileName);

  poFileName := IncludeTrailingPathDelimiter(ProgramDirectory + 'locale') + Format('ssockets.%s.po', [UserLang]);
  if FileExistsUTF8(poFileName) then
    Translations.TranslateUnitResourceStrings('ssockets', poFileName);
end;


8. Вызываем
Код: Выделить всё
procedure TfMain.FormCreate(Sender: TObject);
begin
  Translate_;
...


Запускаем. Работает.
Последний раз редактировалось lodka 29.06.2021 08:25:59, всего редактировалось 1 раз.
lodka
новенький
 
Сообщения: 18
Зарегистрирован: 22.06.2021 05:15:27

Re: [Решено] Перевод сообщений модулей FPC

Сообщение Vadim » 26.06.2021 05:56:35

Нда... Если локализовать по правильному, то хочется выпить йаду, упасть пацтол и бица галавой апстену... :D Мне кажется, мой способ немного попроще... ;-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: [Решено] Перевод сообщений модулей FPC

Сообщение zub » 27.06.2021 14:07:07

lodka
ты переусложняешь. *.rsj идут в комплекте с компилятором изначально и не меняются (возможно изменятся только при переходе на новую(или более старую) версию компилятора). Никаких действий для их получения предпринимать не надо
соответстенно шаги 1..6 нужно сделать только 1 раз, и ненужно никаких дополнительных зависимостей в проекте.
1..6 можно сократить до только 5,6

При изменениях в *.rsj (новая версия компилятора, значимые коммиты в транк если сидишь на транке) достаточно повторно выполнить шаг 5 и получить актуальные *.po, а изменения в них растащить по lang.po с помощью утилиты updatepofiles из состава lazarus
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: [Решено] Перевод сообщений модулей FPC

Сообщение lodka » 29.06.2021 08:24:59

zub писал(а):ты переусложняешь. *.rsj идут в комплекте с компилятором изначально и не меняются (возможно изменятся только при переходе на новую(или более старую) версию компилятора). Никаких действий для их получения предпринимать не надо


Где я написал, что их надо создавать? Только про поиск необходимых. Не лазя по коду, ты как поймёшь какой модуль сообщение отдаёт?

zub писал(а):соответстенно шаги 1..6 нужно сделать только 1 раз, и ненужно никаких дополнительных зависимостей в проекте.

Без добавления в зависимости (п2) не переводятся сообщения.

zub писал(а):ри изменениях в *.rsj (новая версия компилятора, значимые коммиты в транк если сидишь на транке) достаточно повторно выполнить шаг

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

Добавлено спустя 1 час 52 минуты 52 секунды:
lodka писал(а):Без добавления в зависимости (п2) не переводятся сообщения.

Наверно ты пробовал. Возможно и переводятся. Неначем пока проверить. Если это так, то п2 конечно можно исключить. Но мне помнится, что не перевелись пока не добавил. Правда я тогда папку переименовывал с файлами po экспериментировал, возможно совпало переименование и добавление. Проверить надо в общем.
lodka
новенький
 
Сообщения: 18
Зарегистрирован: 22.06.2021 05:15:27


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru