Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: Yegor от Ноябрь 10, 2014, 23:02



Название: Интернационализация для QML
Отправлено: Yegor от Ноябрь 10, 2014, 23:02
Здравствуйте, уважаемые форумчане!

Работаю в Qt4.8.6.
В проекте использую qml файлы, в которых есть строки, требующие перевод.
Вопрос: как в .pro файле проекта указать список всех qml файлов, чтобы при сборке они были найдены и обработаны (отмечены, что lupdate их может брать)?
Есть такая переменная для qmake?


Название: Re: Интернационализация для QML
Отправлено: vulko от Ноябрь 11, 2014, 09:30
tr("text") не работает в qml?


Название: Re: Интернационализация для QML
Отправлено: vregess от Ноябрь 11, 2014, 10:27
tr("text") не работает в qml?

Нет, там qsTr().

чтобы qml файлы подхватывались lupdate, их надо добавить в список исходников. Например так:
Код:
lupdate_only {
SOURCES += path/to/qml/*.qml path/to/js/*.js
}

Это работает в Qt5, в Qt4, думаю, так же.
* - работает не рекурсивно, поэтому каждую директорию нужно добавлять отдельно.


Название: Re: Интернационализация для QML
Отправлено: Yegor от Ноябрь 11, 2014, 15:49
Для Qt4.8.6 нельзя прописывать qml файлы в pro файле, в переменной SOURCES, будет ошибка. Я проверял. Поэтому я пользуюсь lupdate напрямую с qml файлами. Так файлы переводов (*.ts) создаются без проблем.
Далее я создаю бинарные файлы переводов (*.qm).

Только не понятно, как эти файлы переводов подгружать во время выполнения программы?
В документации пишется что они должны загружаться автоматически, в зависимости от текущего языка.
Но этого не происходит.

Делаю как в примере в документации.
Например, я узнаю свой текущий язык с помощью QLocale.name(). Он мне выдает uk_UA, значит мой текущий язык - uk. Далее я готовлю бинарный файл перевода, называю его qml_uk.qm. В этой же директории мой qml файл, который мне нужно перевести - StartPage.qml.

Когда открываю свой StartPager.qml с помощью qmlviewer StartPage.qml, то никакой перевод не загружается автоматически. А если я явно укажу файл перевода - qmlviewer StartPage.qml -translation qml_uk.qm, то все нормально.

Вопрос: как сделать, чтобы в реальной программе (не qmlviewer) файл перевода для qml загружался? Автоматически или динамически.


Название: Re: Интернационализация для QML
Отправлено: Alex Custov от Ноябрь 11, 2014, 16:07
Вопрос: как сделать, чтобы в реальной программе (не qmlviewer) файл перевода для qml загружался? Автоматически или динамически.

Перед созданием основной формы использовать QTranslator и установить перевод, примеры есть в документации


Название: [РЕШЕНО] Интернационализация для QML
Отправлено: Yegor от Ноябрь 11, 2014, 17:15
Да, стандартными средствами файл перевода загружается.

Код:
QTranslator qmlTranslator; //For qml.

if( ! qmlTranslator.load("qml_en", "translations_path") )
    qDebug("Can't load 'qml_en' translation.");

app.installTranslator(&qmlTranslator);

И далее при открытии файла qml в нем все переводится.

Вопрос решен. Спасибо большое!