diff --git a/3rdParty/enrouteManual b/3rdParty/enrouteManual index c29f5b553..a164f9b1c 160000 --- a/3rdParty/enrouteManual +++ b/3rdParty/enrouteManual @@ -1 +1 @@ -Subproject commit c29f5b553f0728ad1cb52db9ebc2a4ad5305e80e +Subproject commit a164f9b1cf7ca1306654a0719c16e175870bd46d diff --git a/3rdParty/enrouteText b/3rdParty/enrouteText index 7adf33f7b..8ae6e97db 160000 --- a/3rdParty/enrouteText +++ b/3rdParty/enrouteText @@ -1 +1 @@ -Subproject commit 7adf33f7b1cb8f0fe698d5ff4fe16223e8c8cf81 +Subproject commit 8ae6e97db4a2fc4e58f10112d1026d3f44c5a3ad diff --git a/buildscript-translations.sh b/buildscript-translations.sh index acaded82a..0c0e1a475 100755 --- a/buildscript-translations.sh +++ b/buildscript-translations.sh @@ -10,7 +10,7 @@ cd ../.. # way, source files that are not compiled (such as iOS files on a linux build # host) will still be considered. -lupdate-qt6 src -ts 3rdParty/enrouteText/assets/enroute_cz.ts +lupdate-qt6 src -ts 3rdParty/enrouteText/assets/enroute_cs.ts lupdate-qt6 src -ts 3rdParty/enrouteText/assets/enroute_de.ts lupdate-qt6 src -ts 3rdParty/enrouteText/assets/enroute_es.ts lupdate-qt6 src -ts 3rdParty/enrouteText/assets/enroute_fr.ts diff --git a/generatedSources/manual/.doctrees/08-appendix/04-authors.doctree b/generatedSources/manual/.doctrees/08-appendix/04-authors.doctree index 51f53b728..ecc278f4e 100644 Binary files a/generatedSources/manual/.doctrees/08-appendix/04-authors.doctree and b/generatedSources/manual/.doctrees/08-appendix/04-authors.doctree differ diff --git a/generatedSources/manual/.doctrees/environment.pickle b/generatedSources/manual/.doctrees/environment.pickle index d8e561d19..3f83a42ea 100644 Binary files a/generatedSources/manual/.doctrees/environment.pickle and b/generatedSources/manual/.doctrees/environment.pickle differ diff --git a/generatedSources/manual/08-appendix/04-authors.html b/generatedSources/manual/08-appendix/04-authors.html index f4469788c..eae211b2b 100644 --- a/generatedSources/manual/08-appendix/04-authors.html +++ b/generatedSources/manual/08-appendix/04-authors.html @@ -106,12 +106,22 @@

Authors · stefan.kebekus@gmail.com

Contributions

-

iOS Version The app has been ported to iOS by Simon Schneider. Simon -is currently student pilot (PPL) and member of the Akaflieg Freiburg -flight club, just like Stefan.

-

Programming Heinz Blöchinger has helped us with file import -functionality. After 15 years of alpine gliding, Heinz has fulfilled a -big dream and now flies helicopters.

+

Translations

@@ -120,8 +130,8 @@

Translations QString + "" + tr("Programming") + ": " + tr("Heinz Blöchinger has helped us with file import functionality. After 15 years of alpine gliding, Heinz has fulfilled a big dream and now flies helicopters.") + "" + "
  • " - + "" + tr("Programming") + ": " + tr("Christian Engelhardt started the implementation of height density calculation. Christian is a PPL pilot in southern germany, studied electrical engineering and working as an Embedded SW Engineer.") + + "" + tr("Programming") + ": " + tr("Christian Engelhardt started the implementation of height density calculation. Christian is a PPL pilot in southern Germany, studied electrical engineering and working as an Embedded SW Engineer.") + "
  • " + "
  • " + "" + tr("Programming") + ": " + tr("Tom Linz completed height density calculation. He received his PPL license in late 2024. Tom works as a development engineer for safety systems.") @@ -83,7 +83,7 @@ auto Librarian::getStringFromRessource(const QString &name) -> QString )html") + tr(R"html(
  • German: Markus Sachs. Markus flies trikes and is an enthusiastic 'Co' on everyting else that flies.
  • )html") + tr(R"html( -
  • Italian: Ivan Battistella and Antonio Fardella. Antonio is a naval aviator with a passion for everything challenging.
  • +
  • Italian: Ivan Battistella and Antonio Fardella. Antonio is an ultralight pilot with a passion for everything challenging.
  • )html") + tr(R"html(
  • Polish: Sławek Mikuła.
  • )html") + (R"html( @@ -303,7 +303,7 @@ auto Librarian::getStringFromRessource(const QString &name) -> QString if (name == u":text/whatsnew.html"_qs) { QString result; - result += "

    " + tr("Enroute Flight Navigation now computes the density height from METAR data.") + " " + result += "

    " + tr("Enroute Flight Navigation now computes the density altitude from METAR data.") + " " + tr("We thank Christian Engelhardt and Tom Linz for the implementation!") + "

    "; result += "

    " + tr("As requested by our users, Enroute Flight Navigation is now able to import flight routes in FPL and PLN formats.") + " " diff --git a/src/fileFormats/FPL.cpp b/src/fileFormats/FPL.cpp index 21c10a0f0..8364e652d 100644 --- a/src/fileFormats/FPL.cpp +++ b/src/fileFormats/FPL.cpp @@ -44,7 +44,7 @@ FileFormats::FPL::FPL(const QString& fileName) } if (xmlReader.name().compare("flight-plan") != 0) { - setError(QObject::tr("File %1 does not contain a flight plan.", "FileFormats::FPL").arg(fileName)); + setError(QObject::tr("File %1 does not contain a route.", "FileFormats::FPL").arg(fileName)); return; } @@ -144,7 +144,7 @@ FileFormats::FPL::FPL(const QString& fileName) } if (count3 == 0) { - setError(QObject::tr("File %1 does not contain a waypoint.", "FileFormats::FPL").arg(fileName)); + setError(QObject::tr("File %1 does not contain waypoints.", "FileFormats::FPL").arg(fileName)); return; } } @@ -177,7 +177,7 @@ FileFormats::FPL::FPL(const QString& fileName) } if (count4 != 1) { - setError(QObject::tr("Route point %1 does not have a unique waypoint identifier.", "FileFormats::FPL").arg(count3)); + setError(QObject::tr("Waypoint %1 does not have a unique waypoint identifier.", "FileFormats::FPL").arg(count3)); return; } @@ -195,7 +195,7 @@ FileFormats::FPL::FPL(const QString& fileName) } if (count3 == 0) { - setError(QObject::tr("File %1 does not contain a waypoint.", "FileFormats::FPL").arg(fileName)); + setError(QObject::tr("File %1 does not contain waypoints.", "FileFormats::FPL").arg(fileName)); return; } } @@ -206,7 +206,7 @@ FileFormats::FPL::FPL(const QString& fileName) } if (waypointTableCounter != 1) { - setError(QObject::tr("File %1 does not contain a waypoint.", "FileFormats::FPL").arg(fileName)); + setError(QObject::tr("File %1 does not contain waypoints.", "FileFormats::FPL").arg(fileName)); return; } if (routeCounter != 1) diff --git a/src/fileFormats/PLN.cpp b/src/fileFormats/PLN.cpp index b08e7acb2..9f61b0a2f 100644 --- a/src/fileFormats/PLN.cpp +++ b/src/fileFormats/PLN.cpp @@ -83,7 +83,7 @@ FileFormats::PLN::PLN(const QString& fileName) } if (xmlReader.name().compare("SimBase.Document", Qt::CaseInsensitive) != 0) { - setError(QObject::tr("File %1 does not contain a flight plan.", "FileFormats::PLN").arg(fileName)); + setError(QObject::tr("File %1 does not contain a route.", "FileFormats::PLN").arg(fileName)); return; } diff --git a/src/qml/dialogs/WaypointDescription.qml b/src/qml/dialogs/WaypointDescription.qml index 14d315230..873276707 100644 --- a/src/qml/dialogs/WaypointDescription.qml +++ b/src/qml/dialogs/WaypointDescription.qml @@ -82,7 +82,7 @@ CenteringDialog { if (weatherStation === null) return "" if (weatherStation.hasMETAR) - return weatherStation.metar.summary + " • " + qsTr("full report") + "" + return weatherStation.metar.summary(Navigator.aircraft, Clock.time) + " • " + qsTr("full report") + "" return "" + qsTr("read TAF") + "" } Layout.fillWidth: true diff --git a/src/weather/METAR.cpp b/src/weather/METAR.cpp index cc47472d5..0ffc8535f 100644 --- a/src/weather/METAR.cpp +++ b/src/weather/METAR.cpp @@ -314,7 +314,11 @@ QString Weather::METAR::derivedData(const Navigation::Aircraft& aircraft) const QStringList items; if (m_densityAltitude.isFinite()) { - items += tr("Density Altitude: %1").arg(aircraft.verticalDistanceToString(m_densityAltitude)); + Units::Distance const altitude = Units::Distance::fromM(m_location.altitude()); + items += tr("Density Altitude: %1 (Δ %2)").arg( + aircraft.verticalDistanceToString(m_densityAltitude), + aircraft.verticalDistanceToString(m_densityAltitude - altitude, /*forceSign=*/ true) + ); } auto relativeHumidity = Navigation::Atmosphere::relativeHumidity(m_temperature, m_dewpoint); if (!std::isnan(relativeHumidity))