загрузка файла qm с использованием QTranslator - PullRequest
7 голосов
/ 27 октября 2010

Я пытаюсь использовать файлы перевода. Я прошел все процедуры: создал файл ts, перевел его, но когда я запускаю приложение, язык остается прежним.

Я работал над примером Nokia, как и в инструкции.

В чем может быть моя проблема?

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QTranslator* translator=new QTranslator(0);

    if(QFile::exists("hellotr_la.qm"))
        qWarning("failed-no file");

    if(! translator->load("hellotr_la.qm"))
        qWarning("failed loading"); //the warning appears ****

    app.installTranslator(translator);
}

Ответы [ 3 ]

20 голосов
/ 28 октября 2010

Где находятся файлы .qm?Ваш код пытается загрузить файл из текущего рабочего каталога, который может быть любым во время выполнения.Укажите путь к каталогу в вызове QTranslator::load:

QTranslator* translator = new QTranslator();
if (translator->load("hellotr_la", "/path/to/folder/with/qm/files")) {
    app.installTranslator(translator);
}

Переводы могут быть загружены из ресурсов Qt , поэтому рекомендуется объединить ихвнутри ваших исполняемых файлов.Тогда вы бы загрузили их примерно так:

QTranslator* translator = new QTranslator();
if (translator->load("hellotr_la", ":/resources/translations")) {
    app.installTranslator(translator);
}
3 голосов
/ 01 ноября 2010

Ответ уже был дан в комментарии, но я хочу четко указать на него.

Первое предупреждение использует неправильное условие:

if(QFile::exists("hellotr_la.qm"))
    qWarning("failed-no file");

Должно быть:

if(!QFile::exists("hellotr_la.qm"))
    qWarning("failed-no file");

Поскольку вы видели только второе предупреждение, но не первое, проблема действительно в том, что файл не найден. Убедитесь, что рабочий каталог соответствует вашим ожиданиям или (лучше) использует систему ресурсов, как описано в andref.

0 голосов
/ 27 октября 2010

Исходя из примера, можете ли вы просто попробовать это:

 QTranslator translator;
 translator.load("hellotr_la");
 app.installTranslator(&translator);

Надеюсь, это решит вашу проблему!

Примечание 1: Указатель здесь отсутствует.
Примечание 2: Нетрасширение в вашем имени файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...