QObject::tr() не транслирует динамически генерируемые строки
QObject::tr("%1").arg(_value);
Здесь _value имеет тип QString, который генерируется динамически. Является ли вышеуказанный способ корректным для перевода динамически сгенерированных строк, поскольку в моем коде это, похоже, не работает.
3 ответа
Есть два шага:
1. Заставьте Qt извлечь строки для перевода.
Это означает использование одного из
tr()
в подклассе QObjectQCoreApplication::translate()
QT_TR_NOOP
/QT_TRANSLATE_NOOP
lupdate
извлечет строки, переданные этим функциям / макросам, и сделает их доступными для linguist
для перевода.
2. Выполнение перевода (то есть "поиск")
Это опять сделано tr()
а также QCoreApplication::translate()
, Так, например:
// marking the strings for extraction
static const char *strings[] = {
QT_TRANSLATE_NOOP("MyContext", "hello"),
QT_TRANSLATE_NOOP("MyContext", "world");
};
// performing the translation at runtime
qApp->translate("MyContext", strings[0]);
Там тонна документации обо всем процессе, смотрите здесь.
Вы, возможно, хотели сделать:
QObject::trUtf8(QString("%1").arg(_value).toUtf8(), "dynamic1");
Вы должны убедиться, что ваш файл перевода содержит все значения, которые _value
можно взять с собой dynamic1
для значения неоднозначности, если вы хотите устранить неоднозначность, то есть.
Конечно, _value
должен быть выбран из фиксированного списка строк, так как tr
не человек переводчик, он просто ищет строку в списке переводов.
Итак, вы действительно должны сделать это:
QString value;
select (variant) {
case VarA: value = QObject::tr("foo"); break;
case VarB: value = QObject::tr("bar"); break;
...
}
Таким образом, соответствующие строки будут включены в список перевода.
Вы пытаетесь перевести _value
в неправильном месте. Как указано в других ответах, QObject::tr()
не могу догадаться, как перевести что-либо. Работает только на фиксированных строках. Вы должны отметить константы, которые вы устанавливаете _value
для перевода, а не _value
сам.