QObject::tr() не транслирует динамически генерируемые строки

QObject::tr("%1").arg(_value);

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

3 ответа

Есть два шага:

1. Заставьте Qt извлечь строки для перевода.

Это означает использование одного из

  • tr() в подклассе QObject
  • QCoreApplication::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 сам.

Другие вопросы по тегам