Название: Динамический перевод QML интерфейса Отправлено: SektorCT от Июнь 05, 2016, 15:22 Всем привет.
Есть маленькая демонстрационаня тестовая прога, динамически переводит текст. В ней текстовые поля с тегами где нужно переводить вынесены в отдельный каталог. Можно ли без выноса а именно в каждом обьекте создавать поле и его перезагружать когда требуется? Для примера вот так пытаюсь сделать Код: Label Буду очень признателен если кто подскажет как без выноса в отдельную функцию всех текстовых полей можно обнавлять перевод. Так же прикрепляю сам архив с программой. Она малькая и простая. Название: Re: Динамический перевод QML интерфейса Отправлено: kibsoft от Июнь 05, 2016, 17:25 https://wiki.qt.io/How_to_do_dynamic_translation_in_QML
Вот тут есть еще вариант. Код: text: qsTr("Hello") + rootItem.emptyString Код: Q_PROPERTY(QString emptyString READ getEmptyString NOTIFY languageChanged) Т.е. после установки нужного языка Код: qApp->installTranslator В общем, вариант тоже с костылем, но хотя бы выносить в отдельную функцию не нужно. Похоже, без костылей вариантов нет :) Название: Re: Динамический перевод QML интерфейса Отправлено: SektorCT от Июнь 05, 2016, 18:26 https://wiki.qt.io/How_to_do_dynamic_translation_in_QML Вот тут есть еще вариант. Код: text: qsTr("Hello") + rootItem.emptyString Код: Q_PROPERTY(QString emptyString READ getEmptyString NOTIFY languageChanged) Т.е. после установки нужного языка Код: qApp->installTranslator В общем, вариант тоже с костылем, но хотя бы выносить в отдельную функцию не нужно. Похоже, без костылей вариантов нет :) Спасибо большое за помощь. Сейчас попробую сделать, надеюсь заработает. И кстати такой вопрос, а вот если файлы локализации находятся в другмо каталоге, где должны быть изменения? То есть например если в файле ресурсов я залью эти файлы перевода то тогда ничего не надо менять? Если не трудно могли бы на этом примере показать где нужно зменения внести чтоыб перевод подцеплялся? Название: Re: Динамический перевод QML интерфейса Отправлено: kibsoft от Июнь 06, 2016, 15:22 Не совсем понял вопрос. Все, что нужно в вашем случае - это:
1) добавить свойство в QmlTranslator Код: Q_PROPERTY(QString emptyString READ getEmptyString NOTIFY languageChanged) 3) в QML части поменять все на: Код: text: qsTr("Hello") + qmlTranslator.emptyString По поводу файлов перевода: при распространении программы нужны только .qm файлы, их можно хранить в ресурсах или в каталоге рядом с исполняемым файлов (в принципе, можно держать их в любом месте, главное, чтобы программа знала где искать). При добавлении новых строк в QML или их изменении, надо обновлять .ts файлы(они не нужны при распространии программы) перевода, из которых в итоге собирать .qm файлы. Название: Re: Динамический перевод QML интерфейса Отправлено: SektorCT от Июль 09, 2016, 11:14 Не совсем понял вопрос. Все, что нужно в вашем случае - это: 1) добавить свойство в QmlTranslator Код: Q_PROPERTY(QString emptyString READ getEmptyString NOTIFY languageChanged) А скажите, зачем нужна пустая строка для каждой части перевода? Просто не все понятно в этйо реализации. Название: Re: Динамический перевод QML интерфейса Отправлено: SektorCT от Июль 09, 2016, 13:16 Попытался реализовать данным способом, но почему то мой пример не срабатывает. Подскажите если кто увидет где я ошибку допускаю?
//translationtest.hpp Код: #ifndef TRANSLATIONTEST_H //translation.cpp Код: #include "translationtest.h" //main.qml Код: import QtQuick 2.7 Название: Re: Динамический перевод QML интерфейса Отправлено: kibsoft от Июль 17, 2016, 15:10 Цитировать А скажите, зачем нужна пустая строка для каждой части перевода? Нужна для того, чтобы сигнализировать QML части, что произошло изменение. Для этого используется сигнал languageChanged.Просто не все понятно в этйо реализации. Здесь можно про это прочитать: http://doc.qt.io/qt-5/qtqml-syntax-propertybinding.html Почему не работает, сразу не пойму. Можно проверить возвращаемый bool у вызовов: Код: translator1_->load("t1_fr", "."); Название: Re: Динамический перевод QML интерфейса Отправлено: SektorCT от Июль 19, 2016, 15:14 Цитировать А скажите, зачем нужна пустая строка для каждой части перевода? Нужна для того, чтобы сигнализировать QML части, что произошло изменение. Для этого используется сигнал languageChanged.Просто не все понятно в этйо реализации. Здесь можно про это прочитать: http://doc.qt.io/qt-5/qtqml-syntax-propertybinding.html Почему не работает, сразу не пойму. Можно проверить возвращаемый bool у вызовов: Код: translator1_->load("t1_fr", "."); Спасибо, все заработало, ошибки нашол. Оказалось все не так страшно) |