Зачем? Потому что очень много однотипных вызовов этого макроса, и строка 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() я даже не проверил задачку.