Russian Qt Forum
Ноябрь 22, 2024, 20:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: перевод внутри макросов - возможно ли это?  (Прочитано 5626 раз)
Varan
Гость
« : Январь 10, 2012, 14:41 »

Есть макрос вида
Код
C++ (Qt)
#define ENTRY2(type, group) entry_type(type, tag_type(#type, tr(#type), group))
Вот этот самый tr(#type) не ловится системой перевода Qt, соотв., все вызовы этого макроса ничего не вносят в файл перевода.
Можно ли это как-то обойти?
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #1 : Январь 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().
Думаю должно сработать.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #2 : Январь 10, 2012, 15:16 »

Хотя нет, там нужны строковые литералы, а тут у вас #type.. По ходу никак нельзя обойти.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
andrew.k
Гость
« Ответ #3 : Январь 10, 2012, 15:48 »

макрос разворачивается на этапе компиляции.
lupdate же не компилит исходники, а просто просматривает на предмет нужных строчек.
Поэтому никаким образом это невозможно.
Зачем вообще такое нужно? Макросы то это уже не очень хорошо, имхо, а интернационализация макросов это надо было такое выдумать)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Январь 10, 2012, 15:55 »

на самом деле бывает, что хочется такого. обычно приходится решать через списки/словари/свич-кэйсы.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
andrew.k
Гость
« Ответ #5 : Январь 10, 2012, 16:00 »

на самом деле бывает, что хочется такого. обычно приходится решать через списки/словари/свич-кэйсы.
Совершенно не понимаю. Как и зачем?
Записан
Varan
Гость
« Ответ #6 : Январь 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() я даже не проверил задачку.
« Последнее редактирование: Январь 10, 2012, 16:30 от Varan » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Январь 10, 2012, 17:01 »

"type" - это enum, набор значений которого может со временем меняться. Т.е. нужно это для сокращения записи и упрощения сопровождения кода.
В общем, это класс своего enum-а с тэгами, tagged enum.
вот, точно! а я все пытался вспомнить где же я пытался переводить макросы.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.165 секунд. Запросов: 23.