Qt tr () не работает, если я использую статический член

0

Пожалуйста, дайте мне знать, почему он не работает. Я новичок в Qt. вот код

class Transl
{
   public:
   static const QString str;
};
const QString Transl::str = QObject::tr("Hello world");

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QTranslator translator;
    translator.load("trans_la");
    app.installTranslator(&translator);

    QPushButton hello(Transl::str);
    hello.resize(100, 30);
    hello.show();
    return app.exec();
}

Мой файл trans_la.ts содержит это, которое я генерирую lupdate.

<TS version="2.0">
<context>
    <name>QObject</name>
    <message>
        <location filename="main.cpp" line="10"/>
        <source>Hello world</source>
        <translation>Orbis, te saluto!</translation>
    </message>
</context>
</TS>  

Затем я делаю lrelease, которые генерируют trans_la.qm. Но когда я запускаю свой исполняемый файл вместо показа переведенной строки, он показывает "Hello world". Пожалуйста, предложите мне, почему он не работает.

  • 4
    Может быть, это потому, что ваш компилятор инициализирует Transl :: str перед выполнением main ()?
Теги:
qt
translation
localization
internationalization

1 ответ

0

См. Руководство Qt Linguist и найдите раздел, обозначенный с Using QT_TR_NOOP() and QT_TRANSLATE_NOOP() примерно на две трети пути вниз по странице.

плюс

Рекомендуется проверить возвращаемое логическое значение из translator.load(). Я не мог заставить это работать и заметил, что файл загружается неправильно. Затем я обнаружил другую запись и вручную переместил файл trans_fr.qm в каталог выше.exe. Я предполагаю, что это ошибка, поскольку в приветственном переводе не упоминается, что это необходимо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню