Russian Qt Forum
Май 07, 2024, 18:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Интернационализация для QML  (Прочитано 5846 раз)
Yegor
Гость
« : Ноябрь 10, 2014, 23:02 »

Здравствуйте, уважаемые форумчане!

Работаю в Qt4.8.6.
В проекте использую qml файлы, в которых есть строки, требующие перевод.
Вопрос: как в .pro файле проекта указать список всех qml файлов, чтобы при сборке они были найдены и обработаны (отмечены, что lupdate их может брать)?
Есть такая переменная для qmake?
Записан
vulko
Гость
« Ответ #1 : Ноябрь 11, 2014, 09:30 »

tr("text") не работает в qml?
Записан
vregess
Гость
« Ответ #2 : Ноябрь 11, 2014, 10:27 »

tr("text") не работает в qml?

Нет, там qsTr().

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

Это работает в Qt5, в Qt4, думаю, так же.
* - работает не рекурсивно, поэтому каждую директорию нужно добавлять отдельно.
Записан
Yegor
Гость
« Ответ #3 : Ноябрь 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 загружался? Автоматически или динамически.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Ноябрь 11, 2014, 16:07 »

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

Перед созданием основной формы использовать QTranslator и установить перевод, примеры есть в документации
Записан
Yegor
Гость
« Ответ #5 : Ноябрь 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 в нем все переводится.

Вопрос решен. Спасибо большое!
« Последнее редактирование: Ноябрь 11, 2014, 17:18 от Yegor » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 23.