From 6d2f1d33d89e979fe14d5310e90825a1782b6246 Mon Sep 17 00:00:00 2001
From: Automatic Release Builder <build@flightgear.org>
Date: Thu, 29 Oct 2020 21:07:46 +0000
Subject: [PATCH] Launcher: fix L10N issues found by Michael D

Address parts of the issues mentioned in:
https://sourceforge.net/p/flightgear/codetickets/2386/
---
 src/GUI/LocationController.cxx | 23 +++++++-------
 src/GUI/LocationController.hxx |  2 ++
 src/GUI/UnitsModel.cxx         | 55 +++++++++++++++++++---------------
 src/GUI/qml/Settings.qml       | 12 ++++----
 4 files changed, 51 insertions(+), 41 deletions(-)

diff --git a/src/GUI/LocationController.cxx b/src/GUI/LocationController.cxx
index af7afc267..f593032b5 100644
--- a/src/GUI/LocationController.cxx
+++ b/src/GUI/LocationController.cxx
@@ -1042,24 +1042,25 @@ void LocationController::setNavRadioOption()
     }
 }
 
-QString compassPointFromHeading(int heading)
+QString LocationController::compassPointFromHeading(int heading) const
 {
     const int labelArc = 360 / 8;
     heading += (labelArc >> 1);
     SG_NORMALIZE_RANGE(heading, 0, 359);
 
+    //
     switch (heading / labelArc) {
-    case 0: return "N";
-    case 1: return "NE";
-    case 2: return "E";
-    case 3: return "SE";
-    case 4: return "S";
-    case 5: return "SW";
-    case 6: return "W";
-    case 7: return "NW";
+    case 0: return tr("N");
+    case 1: return tr("NE");
+    case 2: return tr("E");
+    case 3: return tr("SE");
+    case 4: return tr("S");
+    case 5: return tr("SW");
+    case 6: return tr("W");
+    case 7: return tr("NW");
     }
 
-    return QString();
+    return {};
 }
 
 QString LocationController::description() const
@@ -1112,7 +1113,7 @@ QString LocationController::description() const
         } else if (m_useAvailableParking) {
             locationOnAirport = tr("at an available parking position");
         } else if (onRunway) {
-            QString runwayName = QString("runway %1").arg(QString::fromStdString(m_detailLocation->ident()));
+            QString runwayName = tr("runway %1").arg(QString::fromStdString(m_detailLocation->ident()));
 
             if (m_onFinal) {
                 locationOnAirport = tr("on %2-mile final to %1").arg(runwayName).arg(offsetNm);
diff --git a/src/GUI/LocationController.hxx b/src/GUI/LocationController.hxx
index 08337c82b..83a90a5c3 100644
--- a/src/GUI/LocationController.hxx
+++ b/src/GUI/LocationController.hxx
@@ -237,6 +237,8 @@ private:
     void applyAirspeed();
     void applyOnFinal();
 
+    QString compassPointFromHeading(int heading) const;
+
     NavaidSearchModel* m_searchModel = nullptr;
     CarriersLocationModel* m_carriersModel = nullptr;
 
diff --git a/src/GUI/UnitsModel.cxx b/src/GUI/UnitsModel.cxx
index c329bd784..6e433e528 100644
--- a/src/GUI/UnitsModel.cxx
+++ b/src/GUI/UnitsModel.cxx
@@ -30,18 +30,19 @@
 #include <QDoubleValidator>
 #include <QDataStream>
 #include <QDebug>
+#include <QGuiApplication>
 
 namespace
 {
 
 struct UnitData
 {
-    UnitData(QString sn, QString ln, QString metrics, bool pfx = false) :
+    UnitData(const char* sn, const char* ln, QString metrics, bool pfx = false) :
         shortName(sn), longName(ln),
         maxTextForMetrics(metrics),
         isPrefix(pfx) {}
 
-    UnitData(QString sn, QString ln,
+    UnitData(const char* sn, const char* ln,
              QString metrics,
              bool pfx,
              double min, double max,
@@ -56,8 +57,8 @@ struct UnitData
         decimals(dps)
     {}
 
-    QString shortName;
-    QString longName;
+    const char* shortName;
+    const char* longName;
     QString maxTextForMetrics;
     bool isPrefix = false;
     bool valueWraps = false;
@@ -69,23 +70,23 @@ struct UnitData
 
 std::vector<UnitData> static_unitData = {
     { "", "", "" }, // noUnits
-    { "ft", "feet above sea-level (MSL)", "000000", false, -2000, 180000, 50},
-    { "ft AGL", "feet above ground level (AGL)", "000000", false, 0, 180000, 50},
-    { "ft above field", "feet above airfield", "000000", false, 0, 180000, 50},
-    { "FL", "Flight-level", "000", true /* prefix */, 0.0, 500.0, 5.0},
-    { "m", "meters above sea-level (MSL)", "000000", false, -500, 100000, 50},
-    { "kts", "Knots", "9999", false, 0, 999999, 10.0},
-    { "M", "Mach", "00.000", true /* prefix */, 0.0, 99.0, 0.05, false /* no wrap */, 3 /* decimal places */},
-    { "KM/H", "Kilometers/hour", "9999", false, 0, 999999, 10.0},
-    { "°True", "degrees true", "000", false, 0, 359, 5.0, true /* wraps */},
-    { "°Mag", "degrees magnetic", "000", false, 0, 359, 5.0, true /* wraps */},
-    { "UTC", "Universal coordinated time", ""},
-    { "Local", "Local time", ""},
-    { "Nm", "Nautical miles", "00000", false, 0, 999999, 1.0, false /* no wrap */, 1 /* decimal places */},
-    { "Km", "Kilometers", "00000", false, 0, 999999, 1.0, false /* no wrap */, 1 /* decimal places */},
+    { QT_TRANSLATE_NOOP("UnitsModel", "ft"), QT_TRANSLATE_NOOP("UnitsModel", "feet above sea-level (MSL)"), "000000", false, -2000, 180000, 50},
+    { QT_TRANSLATE_NOOP("UnitsModel", "ft AGL"),  QT_TRANSLATE_NOOP("UnitsModel", "feet above ground level (AGL)"), "000000", false, 0, 180000, 50},
+    { QT_TRANSLATE_NOOP("UnitsModel", "ft above field"),  QT_TRANSLATE_NOOP("UnitsModel", "feet above airfield"), "000000", false, 0, 180000, 50},
+    { QT_TRANSLATE_NOOP("UnitsModel", "FL"),  QT_TRANSLATE_NOOP("UnitsModel", "Flight-level"), "000", true /* prefix */, 0.0, 500.0, 5.0},
+    { QT_TRANSLATE_NOOP("UnitsModel", "m"),  QT_TRANSLATE_NOOP("UnitsModel", "meters above sea-level (MSL)"), "000000", false, -500, 100000, 50},
+    { QT_TRANSLATE_NOOP("UnitsModel", "kts"),  QT_TRANSLATE_NOOP("UnitsModel", "Knots"), "9999", false, 0, 999999, 10.0},
+    { QT_TRANSLATE_NOOP("UnitsModel", "M"),  QT_TRANSLATE_NOOP("UnitsModel", "Mach"), "00.000", true /* prefix */, 0.0, 99.0, 0.05, false /* no wrap */, 3 /* decimal places */},
+    { QT_TRANSLATE_NOOP("UnitsModel", "KM/H"),  QT_TRANSLATE_NOOP("UnitsModel", "Kilometers/hour"), "9999", false, 0, 999999, 10.0},
+    { QT_TRANSLATE_NOOP("UnitsModel", "°True"),  QT_TRANSLATE_NOOP("UnitsModel", "degrees true"), "000", false, 0, 359, 5.0, true /* wraps */},
+    { QT_TRANSLATE_NOOP("UnitsModel", "°Mag"),  QT_TRANSLATE_NOOP("UnitsModel", "degrees magnetic"), "000", false, 0, 359, 5.0, true /* wraps */},
+    { QT_TRANSLATE_NOOP("UnitsModel", "UTC"),  QT_TRANSLATE_NOOP("UnitsModel", "Universal coordinated time"), ""},
+    { QT_TRANSLATE_NOOP("UnitsModel", "Local"),  QT_TRANSLATE_NOOP("UnitsModel", "Local time"), ""},
+    { QT_TRANSLATE_NOOP("UnitsModel", "Nm"),  QT_TRANSLATE_NOOP("UnitsModel", "Nautical miles"), "00000", false, 0, 999999, 1.0, false /* no wrap */, 1 /* decimal places */},
+    { QT_TRANSLATE_NOOP("UnitsModel", "Km"),  QT_TRANSLATE_NOOP("UnitsModel", "Kilometers"), "00000", false, 0, 999999, 1.0, false /* no wrap */, 1 /* decimal places */},
 
-    { "MHz", "MHz", "00000", false, 105, 140, 0.025, false /* no wrap */, 3 /* decimal places */},
-    { "KHz", "KHz", "00000", false, 200, 400, 1.0, false /* no wrap */, 0 /* decimal places */}
+    {  QT_TRANSLATE_NOOP("UnitsModel", "MHz"),  QT_TRANSLATE_NOOP("UnitsModel", "MHz"), "00000", false, 105, 140, 0.025, false /* no wrap */, 3 /* decimal places */},
+    {  QT_TRANSLATE_NOOP("UnitsModel", "KHz"),  QT_TRANSLATE_NOOP("UnitsModel", "KHz"), "00000", false, 200, 400, 1.0, false /* no wrap */, 0 /* decimal places */}
 
 };
 
@@ -115,6 +116,8 @@ const int UnitValueWrapsRole = Qt::UserRole + 7;
 
 UnitsModel::UnitsModel()
 {
+
+
     m_enabledUnits = static_modeData.at(m_mode);
 }
 
@@ -133,8 +136,12 @@ QVariant UnitsModel::data(const QModelIndex &index, int role) const
     const UnitData& ud = static_unitData.at(u);
 
     switch (role) {
-    case Qt::DisplayRole: return ud.shortName;
-    case UnitLongNameRole: return ud.longName;
+    case Qt::DisplayRole:
+      return qApp->translate("UnitsModel", ud.shortName);
+
+    case UnitLongNameRole:
+      return qApp->translate("UnitsModel", ud.longName);
+
     case UnitIsPrefixRole: return ud.isPrefix;
     case UnitMinValueRole: return ud.minValue;
     case UnitMaxValueRole: return ud.maxValue;
@@ -189,7 +196,7 @@ QString UnitsModel::shortText() const
 {
     const auto u = m_enabledUnits.at(m_activeIndex);
     const UnitData& ud = static_unitData.at(u);
-    return ud.shortName;
+    return qApp->translate("UnitsModel",ud.shortName);
 }
 
 Units::Type UnitsModel::selectedUnit() const
@@ -427,7 +434,7 @@ QString QuantityValue::toString() const
     const auto& data = static_unitData.at(unit);
     int dp = data.decimals;
     QString prefix;
-    QString suffix = data.shortName;
+    QString suffix = qApp->translate("UnitsModel", data.shortName);
     if (data.isPrefix)
         std::swap(prefix, suffix);
 
diff --git a/src/GUI/qml/Settings.qml b/src/GUI/qml/Settings.qml
index b58f9eea1..0a62fb33e 100644
--- a/src/GUI/qml/Settings.qml
+++ b/src/GUI/qml/Settings.qml
@@ -84,8 +84,8 @@ Item {
                 function summary()
                 {
                     var result = [];
-                    if (startPaused.checked) result.push("paused");
-                    if (!showConsoleWin.hidden && showConsoleWin.checked) result.push("console");
+                    if (startPaused.checked) result.push(qsTr("paused"));
+                    if (!showConsoleWin.hidden && showConsoleWin.checked) result.push(qsTr("console"));
                     return result;
                 }
 
@@ -160,7 +160,7 @@ Item {
                 function summary()
                 {
                     var result = [];
-                    if (enableMP.checked) result.push("multi-player");
+                    if (enableMP.checked) result.push(qsTr("multi-player"));
                     return result;
                 }
 
@@ -298,7 +298,7 @@ Item {
                 function summary()
                 {
                     var result = [];
-                    if (terrasync.checked) result.push("scenery downloads");
+                    if (terrasync.checked) result.push(qsTr("scenery downloads"));
                     return result;
                 }
 
@@ -371,7 +371,7 @@ Item {
                 function summary()
                 {
                     var result = [];
-                    if (fullscreen.checked) result.push("full-screen");
+                    if (fullscreen.checked) result.push(qsTr("full-screen"));
                     return result;
                 }
 
@@ -435,7 +435,7 @@ Item {
                 {
                     var result = [];
                     if (rembrandt) result.push(qsTr("Rembrandt"));
-                    else if (alsEnabled) result.push("ALS");
+                    else if (alsEnabled) result.push(qsTr("ALS"));
                     if (msaaEnabled) result.push(qsTr("anti-aliasing"));
                     return result;
                 }