Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: Varan от Январь 10, 2012, 14:41



Название: перевод внутри макросов - возможно ли это?
Отправлено: Varan от Январь 10, 2012, 14:41
Есть макрос вида
Код
C++ (Qt)
#define ENTRY2(type, group) entry_type(type, tag_type(#type, tr(#type), group))
Вот этот самый tr(#type) не ловится системой перевода Qt, соотв., все вызовы этого макроса ничего не вносят в файл перевода.
Можно ли это как-то обойти?


Название: Re: перевод внутри макросов - возможно ли это?
Отправлено: kibsoft от Январь 10, 2012, 15:14
Цитировать
If you need to have translatable text completely outside a function, there are two macros to help: QT_TR_NOOP() and QT_TRANSLATE_NOOP().
Думаю должно сработать.


Название: Re: перевод внутри макросов - возможно ли это?
Отправлено: kibsoft от Январь 10, 2012, 15:16
Хотя нет, там нужны строковые литералы, а тут у вас #type.. По ходу никак нельзя обойти.


Название: Re: перевод внутри макросов - возможно ли это?
Отправлено: andrew.k от Январь 10, 2012, 15:48
макрос разворачивается на этапе компиляции.
lupdate же не компилит исходники, а просто просматривает на предмет нужных строчек.
Поэтому никаким образом это невозможно.
Зачем вообще такое нужно? Макросы то это уже не очень хорошо, имхо, а интернационализация макросов это надо было такое выдумать)


Название: Re: перевод внутри макросов - возможно ли это?
Отправлено: kambala от Январь 10, 2012, 15:55
на самом деле бывает, что хочется такого. обычно приходится решать через списки/словари/свич-кэйсы.


Название: Re: перевод внутри макросов - возможно ли это?
Отправлено: andrew.k от Январь 10, 2012, 16:00
на самом деле бывает, что хочется такого. обычно приходится решать через списки/словари/свич-кэйсы.
Совершенно не понимаю. Как и зачем?


Название: Re: перевод внутри макросов - возможно ли это?
Отправлено: Varan от Январь 10, 2012, 16:20
Зачем? Потому что очень много однотипных вызовов этого макроса, и строка tr(#type) на самом деле гораздо сложнее, я тут упростил. "type" - это enum, набор значений которого может со временем меняться. Т.е. нужно это для сокращения записи и упрощения сопровождения кода.
В общем, это класс своего enum-а с тэгами, tagged enum.

Кстати, как выяснилось, lupdate вполне справляется с такой системой:
Код
C++ (Qt)
// модуль 1:
std::string unit::translate(char const* context, char const* str)
{
return QCoreApplication::translate(context, str).toUtf8().data();
}
 
// модуль 2:
return unit::translate("some1", "some2");
 
Это нужно для перевода в не-Qt классах.
Именно это, строго говоря, в макросах из условия и стоит. Вне макросов это работает на-ура. Так что, со стандартными tr() я даже не проверил задачку.


Название: Re: перевод внутри макросов - возможно ли это?
Отправлено: kambala от Январь 10, 2012, 17:01
"type" - это enum, набор значений которого может со временем меняться. Т.е. нужно это для сокращения записи и упрощения сопровождения кода.
В общем, это класс своего enum-а с тэгами, tagged enum.
вот, точно! а я все пытался вспомнить где же я пытался переводить макросы.