Название: Автоматический вызов lrelease Отправлено: DarkHobbit от Февраль 21, 2012, 15:47 Здравствуйте.
Попрактиковался я в русификации с помощью linguist. Штука хорошая и надёжная. Только вот что смущает. Если я собираю проект из исходников (qmake / make), всё равно для каждого .ts приходится вручную вызывать lrelease, чтоб получить из него .qm. Программа make этот процесс не автоматизирует. Думал, это у меня проект кривой - при сборке стандартных примеров из Qt та же самая ситуация. Так и должно быть? Если да - непонятно, зачем вообще в файле проекта секция TRANSLATIONS. Да и вообще обидно как-то. Если нет - где могла собака порыться? Поиском на форуме нашёл обсуждение аналогичной проблемы для cmake, но я ей не пользуюсь, полагаюсь на стандартные для Qt средства. До последнего момента мне их хватало. Название: Re: Автоматический вызов lrelease Отправлено: QuAzI от Февраль 21, 2012, 16:06 Но там же есть в самом linguist опция "скомпилировать", которая и выдаёт нужный QM. Меня больше прикалывает то, что приходится дёргать для "нового" файла в лингвисте уже существующий файл. Или он как-то может создаваться самим проектом?
Название: Re: Автоматический вызов lrelease Отправлено: DarkHobbit от Февраль 21, 2012, 21:40 Но там же есть в самом linguist опция "скомпилировать", которая и выдаёт нужный QM. linguist - это гуёвая программа для _редактирования_ .ts. А у меня задача в данном случае - тупо собрать проект с минимум телодвижений, допустим, из tar.bz2 с исходниками или из svn/hg/git. В общем случае править перевод может один человек, а собирать понадобится другому.Помещать файлы .qm в tar.bz2 и уж тем более коммитить их в svn/hg/git я, естественно, не хочу. Ибо это вторичный продукт по отношению к .ts, да ещё и двоичный. Со всеми вытекающими. Стало быть, надо собирать. Мне показалось, что было бы естественно возложить это на make. Ибо какая разница, что ей вызывать - gcc, uic или lrelrase. Но похоже, что у qmake, которая делает Makefile, на этот счёт другое мнение. P.S. Сейчас ещё раз погуглил - похоже, стандартно проблема не решается, надо добавлять свой скрипт. Авторы кутима так и сделали: http://wiki.qutim.org/ru/how_to_translate Цитировать вызвать скрипт make.sh из папки translations и собрать перевод в qm файлы Хнык-хнык.Название: Re: Автоматический вызов lrelease Отправлено: Alex Custov от Февраль 21, 2012, 22:47 Можно сделать через дополнительные цели:
Код: tr.commands = lrelease $$_PRO_FILE_ Команда "make tr" создаст компилированные файлы переводов. А если написать Код: tr.commands = lrelease $$_PRO_FILE_ То это будет вызываться автоматом перед линковкой основного таргета. Название: Re: Автоматический вызов lrelease Отправлено: QuAzI от Февраль 23, 2012, 10:58 Фишка с доп.целями понравилась. А как определить, чтобы например *.QM копировались в директорию сборки? А то софтинка то их всё равно не находит без ручного подкидывания
Название: Re: Автоматический вызов lrelease Отправлено: DarkHobbit от Февраль 26, 2012, 12:59 Можно сделать через дополнительные цели Добавил второй вариант в .pro-файл. Спасибо, помогло! Мне кажется, способ достоин помещения в FAQ! Название: Re: [РЕШЕНО] Автоматический вызов lrelease Отправлено: manarch от Декабрь 14, 2016, 15:59 Ну и в капилку будущим поколениям (ну или мне при потере памяти :) )
Создаем файл "translations.prf": Код: isEmpty(LRELEASES): return() Сохраняем его в корневой директории проекта каталог "features". Добавляем тут же файл ".qmake.conf" со строкой (если он у вас уже есть то просто добавляем в него) : Код: QMAKEFEATURES = $$PWD/features Далее в проекте добавляем: Код: CONFIG += translations Подключение lrelease делаем с помощью кода: Код: # Release translations files И не забываем добавить в TRANSLATIONS файлы перевода. Ну и можно не использовать TRANSLATIONS, а сразу весь список гнать в ".files". Если не указывать ".path" то перевод сгенерируется рядом с ts'ками. Название: Имя исполняемого файла для lrelease Отправлено: DarkHobbit от Январь 31, 2018, 09:54 Ещё засада возникла...
Код: tr.commands = lrelease $$_PRO_FILE_ В современных же линуксах целый зоопарк различных имён для lrelease. В зависимости от дистрибутива, его версии и установленных версий Qt, системе могут присутствовать (некоторые из них могут присутствовать одновременно, а могут и отсутствовать) команды lrelease, lrelease-qt4 и lrelease-qt5. В попытке охватить все случаи без правки файла проекта я уже написал в своём .pro трёхэтажную конструкцию, но после обновления одного из дистрибутивов убедился, что однозначности она всё равно не гарантирует. Сейчас я уже пришёл к тому, что хочу отказаться от полного автоматизма и задавать имя для lrelease в переменной среды ПЕРЕД вызовом qmake. Это заодно позволит переключаться между используемыми версиями Qt, не делая за сборщика спекулятивных предположений. Вопрос 1. Может, такая переменная уже где-то есть или вообще есть более изящное решение? Вопрос 2. Можно ли в .pro заставить qmake отругаться, если заданная переменная не найдена/пуста? А то ведь кто-нибудь обязательно запустит qmake без параметров, и хотелось бы, чтобы сообщение об ошибке ему пришло моё, а не системное. |