Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
translationsettingsdialog.cpp
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4
6#include "messagemodel.h"
7#include "phrase.h"
8
9#include <QtCore/QLocale>
10
12
13using namespace Qt::Literals::StringLiterals;
14
15TranslationSettingsDialog::TranslationSettingsDialog(QWidget *parent)
16 : QDialog(parent)
17{
18 m_ui.setupUi(this);
19
20 for (int i = QLocale::C + 1; i < QLocale::LastLanguage; ++i) {
21 const auto language = QLocale::Language(i);
22 QString lang = QLocale::languageToString(language);
23 const auto loc = QLocale(language);
24 // Languages for which we have no data get mapped to the default locale;
25 // its endonym is unrelated to the language requested. For English, the
26 // endonym is the name we already have; don't repeat it.
27 if (loc.language() == language && language != QLocale::English) {
28 const QString native = loc.nativeLanguageName();
29 if (!native.isEmpty()) //: <english> (<endonym>) (language names)
30 lang = tr("%1 (%2)").arg(lang, native);
31 }
32 m_ui.srcCbLanguageList->addItem(lang, QVariant(i));
33 }
34 m_ui.srcCbLanguageList->model()->sort(0, Qt::AscendingOrder);
35 m_ui.srcCbLanguageList->insertItem(0, "POSIX"_L1, QVariant(QLocale::C));
36
37 m_ui.tgtCbLanguageList->setModel(m_ui.srcCbLanguageList->model());
38}
39
41{
42 m_dataModel = dataModel;
43 m_phraseBook = 0;
44 QString fn = QFileInfo(dataModel->srcFileName()).baseName();
45 setWindowTitle(tr("Settings for '%1' - Qt Linguist").arg(fn));
46}
47
49{
50 m_phraseBook = phraseBook;
51 m_dataModel = 0;
52 QString fn = QFileInfo(phraseBook->fileName()).baseName();
53 setWindowTitle(tr("Settings for '%1' - Qt Linguist").arg(fn));
54}
55
56static void fillTerritoryCombo(const QVariant &lng, QComboBox *combo)
57{
58 combo->clear();
59 QLocale::Language lang = QLocale::Language(lng.toInt());
60 if (lang != QLocale::C) {
61 const auto matches = QLocale::matchingLocales(lang, QLocale::AnyScript,
62 QLocale::AnyTerritory);
63 for (const auto &loc : matches) {
64 QString name = QLocale::territoryToString(loc.territory());
65 if (loc.language() != QLocale::English) {
66 QString endonym = loc.nativeTerritoryName();
67 if (!endonym.isEmpty())
68 name = TranslationSettingsDialog::tr("%1 (%2)").arg(name, endonym);
69 }
70 combo->addItem(name, QVariant(loc.territory()));
71 }
72 combo->model()->sort(0, Qt::AscendingOrder);
73 }
74 combo->insertItem(0, TranslationSettingsDialog::tr("Any Territory"),
75 QVariant(QLocale::AnyTerritory));
76 combo->setCurrentIndex(0);
77}
78
79void TranslationSettingsDialog::on_srcCbLanguageList_currentIndexChanged(int idx)
80{
81 fillTerritoryCombo(m_ui.srcCbLanguageList->itemData(idx), m_ui.srcCbCountryList);
82}
83
84void TranslationSettingsDialog::on_tgtCbLanguageList_currentIndexChanged(int idx)
85{
86 fillTerritoryCombo(m_ui.tgtCbLanguageList->itemData(idx), m_ui.tgtCbCountryList);
87}
88
89void TranslationSettingsDialog::on_buttonBox_accepted()
90{
91 int itemindex = m_ui.tgtCbLanguageList->currentIndex();
92 QVariant var = m_ui.tgtCbLanguageList->itemData(itemindex);
93 QLocale::Language lang = QLocale::Language(var.toInt());
94
95 itemindex = m_ui.tgtCbCountryList->currentIndex();
96 var = m_ui.tgtCbCountryList->itemData(itemindex);
97 QLocale::Territory territory = QLocale::Territory(var.toInt());
98
99 itemindex = m_ui.srcCbLanguageList->currentIndex();
100 var = m_ui.srcCbLanguageList->itemData(itemindex);
101 QLocale::Language lang2 = QLocale::Language(var.toInt());
102
103 itemindex = m_ui.srcCbCountryList->currentIndex();
104 var = m_ui.srcCbCountryList->itemData(itemindex);
105 QLocale::Territory territory2 = QLocale::Territory(var.toInt());
106
107 if (m_phraseBook) {
108 m_phraseBook->setLanguageAndTerritory(lang, territory);
109 m_phraseBook->setSourceLanguageAndTerritory(lang2, territory2);
110 } else {
111 m_dataModel->setLanguageAndTerritory(lang, territory);
112 m_dataModel->setSourceLanguageAndTerritory(lang2, territory2);
113 }
114
115 accept();
116}
117
119{
120 QLocale::Language lang, lang2;
121 QLocale::Territory territory, territory2;
122
123 if (m_phraseBook) {
124 lang = m_phraseBook->language();
125 territory = m_phraseBook->territory();
126 lang2 = m_phraseBook->sourceLanguage();
127 territory2 = m_phraseBook->sourceTerritory();
128 } else {
129 lang = m_dataModel->language();
130 territory = m_dataModel->territory();
131 lang2 = m_dataModel->sourceLanguage();
132 territory2 = m_dataModel->sourceTerritory();
133 }
134
135 int itemindex = m_ui.tgtCbLanguageList->findData(QVariant(int(lang)));
136 m_ui.tgtCbLanguageList->setCurrentIndex(itemindex == -1 ? 0 : itemindex);
137
138 itemindex = m_ui.tgtCbCountryList->findData(QVariant(int(territory)));
139 m_ui.tgtCbCountryList->setCurrentIndex(itemindex == -1 ? 0 : itemindex);
140
141 itemindex = m_ui.srcCbLanguageList->findData(QVariant(int(lang2)));
142 m_ui.srcCbLanguageList->setCurrentIndex(itemindex == -1 ? 0 : itemindex);
143
144 itemindex = m_ui.srcCbCountryList->findData(QVariant(int(territory2)));
145 m_ui.srcCbCountryList->setCurrentIndex(itemindex == -1 ? 0 : itemindex);
146}
147
148QT_END_NAMESPACE
void showEvent(QShowEvent *e) override
\reimp
void setPhraseBook(PhraseBook *phraseBook)
static void fillTerritoryCombo(const QVariant &lng, QComboBox *combo)