diff --git a/share/qtcreator/templates/wizards/projects/consoleapp/file.pro b/share/qtcreator/templates/wizards/projects/consoleapp/file.pro index dafae633029..b4bc36eceef 100644 --- a/share/qtcreator/templates/wizards/projects/consoleapp/file.pro +++ b/share/qtcreator/templates/wizards/projects/consoleapp/file.pro @@ -13,6 +13,8 @@ SOURCES += \\ TRANSLATIONS += \\ %{TsFileName} +CONFIG += lrelease +CONFIG += embed_translations @endif # Default rules for deployment. diff --git a/share/qtcreator/templates/wizards/projects/consoleapp/file.qbs b/share/qtcreator/templates/wizards/projects/consoleapp/file.qbs index 3f06621d453..35ce99c77ac 100644 --- a/share/qtcreator/templates/wizards/projects/consoleapp/file.qbs +++ b/share/qtcreator/templates/wizards/projects/consoleapp/file.qbs @@ -16,6 +16,14 @@ QtApplication { "%{TsFileName}", @endif ] +@if %{HasTranslation} + + Group { + fileTagsFilter: "qm" + Qt.core.resourcePrefix: "/i18n" + fileTags: "qt.core.resource_data" + } +@endif Group { // Properties for the produced executable fileTagsFilter: "application" diff --git a/share/qtcreator/templates/wizards/projects/consoleapp/main.cpp b/share/qtcreator/templates/wizards/projects/consoleapp/main.cpp index e45deafe127..3609b36c4e1 100644 --- a/share/qtcreator/templates/wizards/projects/consoleapp/main.cpp +++ b/share/qtcreator/templates/wizards/projects/consoleapp/main.cpp @@ -1,10 +1,26 @@ %{Cpp:LicenseTemplate}\ %{JS: QtSupport.qtIncludes([ 'QtCore/QCoreApplication' ], [ 'QtCore/QCoreApplication' ]) }\ +@if %{HasTranslation} +#include +#include +@endif int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); +@if %{HasTranslation} + + QTranslator translator; + const QStringList uiLanguages = QLocale::system().uiLanguages(); + for (const QString &locale : uiLanguages) { + const QString baseName = "%{JS: value('ProjectName') + '_'}" + QLocale(locale).name(); + if (translator.load(":/i18n/" + baseName)) { + a.installTranslator(&translator); + break; + } + } +@endif return a.exec(); } diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication/app.pro b/share/qtcreator/templates/wizards/projects/qtquickapplication/app.pro index 18767f8623a..670917fc8b2 100644 --- a/share/qtcreator/templates/wizards/projects/qtquickapplication/app.pro +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication/app.pro @@ -18,6 +18,8 @@ RESOURCES += qml.qrc TRANSLATIONS += \\ %{TsFileName} +CONFIG += lrelease +CONFIG += embed_translations @endif # Additional import path used to resolve QML modules in Qt Creator's code model diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication/app.qbs b/share/qtcreator/templates/wizards/projects/qtquickapplication/app.qbs index c432214ce2f..80526d5b8dd 100644 --- a/share/qtcreator/templates/wizards/projects/qtquickapplication/app.qbs +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication/app.qbs @@ -26,6 +26,14 @@ CppApplication { "%{TsFileName}", @endif ] + @if %{HasTranslation} + + Group { + fileTagsFilter: "qm" + Qt.core.resourcePrefix: "/i18n" + fileTags: "qt.core.resource_data" + } +@endif Group { // Properties for the produced executable fileTagsFilter: "application" diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication/main.cpp b/share/qtcreator/templates/wizards/projects/qtquickapplication/main.cpp index 466c23fe69a..af10517cf8d 100644 --- a/share/qtcreator/templates/wizards/projects/qtquickapplication/main.cpp +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication/main.cpp @@ -1,5 +1,10 @@ %{Cpp:LicenseTemplate}\ %{JS: QtSupport.qtIncludes([], ["QtGui/QGuiApplication", "QtQml/QQmlApplicationEngine"])} +@if %{HasTranslation} +#include +#include +@endif + int main(int argc, char *argv[]) { @if %{UseVirtualKeyboard} @@ -22,6 +27,18 @@ int main(int argc, char *argv[]) @endif QGuiApplication app(argc, argv); +@if %{HasTranslation} + + QTranslator translator; + const QStringList uiLanguages = QLocale::system().uiLanguages(); + for (const QString &locale : uiLanguages) { + const QString baseName = "%{JS: value('ProjectName') + '_'}" + QLocale(locale).name(); + if (translator.load(":/i18n/" + baseName)) { + app.installTranslator(&translator); + break; + } + } +@endif QQmlApplicationEngine engine; const QUrl url(QStringLiteral("qrc:/main.qml")); diff --git a/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/main.cpp b/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/main.cpp index 5c64f1d05e9..e876c29b2c1 100644 --- a/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/main.cpp +++ b/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/main.cpp @@ -2,10 +2,26 @@ #include "%{HdrFileName}" %{JS: QtSupport.qtIncludes([ 'QtGui/QApplication' ], [ 'QtWidgets/QApplication' ]) }\ +@if %{HasTranslation} +#include +#include +@endif int main(int argc, char *argv[]) { QApplication a(argc, argv); +@if %{HasTranslation} + + QTranslator translator; + const QStringList uiLanguages = QLocale::system().uiLanguages(); + for (const QString &locale : uiLanguages) { + const QString baseName = "%{JS: value('ProjectName') + '_'}" + QLocale(locale).name(); + if (translator.load(":/i18n/" + baseName)) { + a.installTranslator(&translator); + break; + } + } +@endif %{Class} w; w.show(); return a.exec(); diff --git a/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/project.pro b/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/project.pro index abf62ced022..c41e3d0ef1d 100644 --- a/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/project.pro +++ b/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/project.pro @@ -23,6 +23,8 @@ FORMS += \\ TRANSLATIONS += \\ %{TsFileName} +CONFIG += lrelease +CONFIG += embed_translations @endif # Default rules for deployment. diff --git a/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/project.qbs b/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/project.qbs index dfba4acf115..ac04224c843 100644 --- a/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/project.qbs +++ b/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/project.qbs @@ -20,6 +20,14 @@ QtApplication { "%{TsFileName}", @endif ] +@if %{HasTranslation} + + Group { + fileTagsFilter: "qm" + Qt.core.resourcePrefix: "/i18n" + fileTags: "qt.core.resource_data" + } +@endif install: true installDir: qbs.targetOS.contains("qnx") ? FileInfo.joinPaths("/tmp", name, "bin") : base diff --git a/src/plugins/qtsupport/translationwizardpage.cpp b/src/plugins/qtsupport/translationwizardpage.cpp index d90d2a9e0c5..b15743d557b 100644 --- a/src/plugins/qtsupport/translationwizardpage.cpp +++ b/src/plugins/qtsupport/translationwizardpage.cpp @@ -65,9 +65,7 @@ private: QComboBox m_languageComboBox; QLineEdit m_fileNameLineEdit; - QLabel m_suffixLabel; const QString m_enabledExpr; - bool m_lineEditEdited = false; }; TranslationWizardPageFactory::TranslationWizardPageFactory() @@ -113,15 +111,10 @@ TranslationWizardPage::TranslationWizardPage(const QString &enabledExpr) m_languageComboBox.addItem(lp.first, lp.second); formLayout->addRow(tr("Language:"), &m_languageComboBox); const auto fileNameLayout = new QHBoxLayout; + m_fileNameLineEdit.setReadOnly(true); fileNameLayout->addWidget(&m_fileNameLineEdit); - m_suffixLabel.setText(".ts"); - fileNameLayout->addWidget(&m_suffixLabel); fileNameLayout->addStretch(1); formLayout->addRow(tr("Translation file:"), fileNameLayout); - connect(&m_fileNameLineEdit, &QLineEdit::textEdited, this, [this] { - emit completeChanged(); - m_lineEditEdited = true; - }); connect(&m_languageComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &TranslationWizardPage::updateLineEdit); } @@ -152,14 +145,9 @@ bool TranslationWizardPage::validatePage() void TranslationWizardPage::updateLineEdit() { m_fileNameLineEdit.setEnabled(m_languageComboBox.currentIndex() != 0); - m_suffixLabel.setEnabled(m_fileNameLineEdit.isEnabled()); if (m_fileNameLineEdit.isEnabled()) { - if (!m_lineEditEdited) { - const QString projectName - = static_cast(wizard())->stringValue("ProjectName"); - m_fileNameLineEdit.setText(projectName + '_' - + m_languageComboBox.currentData().toString()); - } + const QString projectName = static_cast(wizard())->stringValue("ProjectName"); + m_fileNameLineEdit.setText(projectName + '_' + m_languageComboBox.currentData().toString()); } else { m_fileNameLineEdit.clear(); m_fileNameLineEdit.setPlaceholderText(tr(""));