Ver código fonte

Implemented (inactive) combobox for language selection

Added a language selector to SettingsWidget
Felix Turo 3 anos atrás
pai
commit
fe31de42d9

+ 4 - 0
docs/doc_mainpage.md

@@ -27,6 +27,10 @@ On first launch, you will run through a setup wizard for the database. If you wa
 
 - The setup wizard for the database requires openSSL to download the most recent data. In order for this to work on Windows, you need to place the [openSSL dll's](https://wiki.openssl.org/index.php/Binaries) in the application directory. On Linux, this is normally not an issue. If you are running into problems there, try installing the `openssl-dev` package or similar from your distribution's package manager.
 
+- When compiling with CMake, instead of updating the translations, there is a bug that might instead delete them. See [here](https://bugreports.qt.io/browse/QTBUG-41736)
+  and [here](https://bugreports.qt.io/browse/QTBUG-76410). Long story short, make sure to use a version of CMake that is 3.16 or earlier, or 3.19.2 or later if you want
+  to use localisations other than English (once they're implemented).
+
 # Implementation Overview
 
 Keeping a logbook of flights is a quintessential database task. This program could thus be seen as a user-friendly front-end to a database. The database is a sqlite3-Database, which is described in detail on the [Database](https://github.com/fiffty-50/openpilotlog/wiki/Database-Layout-and-Description) Wiki Page.

+ 13 - 0
docs/wiki/wiki_translations.md

@@ -0,0 +1,13 @@
+# Localisation
+
+Welcome to the openPilotLog Localisation Wiki! If you are interested in making openPilotLog available in your native language, this is where you will find information and resources on how to do it. The good news is that the process is pretty straight-forward and only requires basic computer skills.
+
+## Requirements
+
+In order to work an a translation for openPilotLog, you'll need 2 things:
+- a translation (.ts) file for the target language
+- The Qt Translation Tool Qt Linguist, which you can download [here](https://github.com/thurask/Qt-Linguist/releases).
+
+To get the translation file, first check if there is already a translation file in the [repository](https://github.com/fiffty-50/openpilotlog/tree/develop/l10n). If so, download it, load up Qt Linguist and you are off to the races. On the [Qt Website](https://doc.qt.io/qt-5/linguist-translators.html) you can find an excellent introduction on how to use Qt Linguist. For Text formatting, openPilotLog uses HTML4 Markup, you can find a list of the supported subset [here](https://doc.qt.io/qt-5/richtext-html-subset.html)
+
+If no translation file exists for your language, you can either [create it yourself](https://doc.qt.io/qt-5/linguist-manager.html#using-lupdate) using Qt Linguist if you are an advanced user, or [send an E-Mail](mailto:felix.turo@gmail.com?subject=[GitHub]%20Contributing%20to%20openPilotLog%20-%20Translations) and we can do it for you.

+ 41 - 36
l10n/openpilotlog_de.ts

@@ -1981,7 +1981,7 @@ Error: %2</source>
 <context>
     <name>QMessageBox</name>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.cpp" line="391"/>
+        <location filename="../src/gui/widgets/settingswidget.cpp" line="393"/>
         <source>&lt;h3&gt;&lt;center&gt;About openPilotLog&lt;/center&gt;&lt;/h3&gt;&lt;br&gt;&amp;#169; 2020-2021 Felix Turowsky&lt;br&gt;&lt;p&gt;This is a collaboratively developed Free and Open Source Application. Visit us &lt;a href=&quot;https://%1/&quot;&gt;here&lt;/a&gt; for more information.&lt;/p&gt;&lt;p&gt;This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.&lt;/p&gt;&lt;p&gt;This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.&lt;/p&gt; &lt;p&gt;You should have received a copy of the GNU General Public License along with this program.  If not, please click &lt;a href=&quot;https://%2&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;br&gt;&lt;p&gt;This program uses &lt;a href=&quot;http://%3/&quot;&gt;Qt&lt;/a&gt; version %4 and &lt;a href=&quot;https://%5/&quot;&gt;SQLite&lt;/a&gt; version %6&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2038,7 +2038,7 @@ Error: %2</source>
     </message>
     <message>
         <location filename="../src/gui/widgets/settingswidget.ui" line="30"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1003"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="929"/>
         <source>Last Name</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2050,14 +2050,14 @@ Error: %2</source>
     </message>
     <message>
         <location filename="../src/gui/widgets/settingswidget.ui" line="47"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1008"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="934"/>
         <source>First Name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/gui/widgets/settingswidget.ui" line="64"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1013"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1081"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="939"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1016"/>
         <source>Company</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2304,129 +2304,134 @@ Error: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="925"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="985"/>
         <source>Use System Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="941"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="944"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="999"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="912"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="915"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="925"/>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines by which column to sort the display of Pilots in the Pilots Tab.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="947"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="918"/>
         <source>Sort Pilots by</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="960"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="963"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1067"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1002"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1030"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1033"/>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines by which column to sort the display of Aircaft in the Aircraft Tab.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="966"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1036"/>
         <source>Sort Aircraft by</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="979"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1089"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="975"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1043"/>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines whether incomplete database entries are permitted. It is highly recommended to keep this option off.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="982"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="978"/>
         <source>Allow incomplete Entries </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1021"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1079"/>
         <source>Reset to Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1034"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1109"/>
         <source>Style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1047"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1050"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1106"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1066"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1069"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1086"/>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines how your logbook is displayed in the logbook tab. This has no influence on what details are logged, just on what is displayed by default.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1053"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1072"/>
         <source>Logbook Dispay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1060"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="995"/>
         <source>Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1071"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1006"/>
         <source>Registration</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1076"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1011"/>
         <source>Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1093"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1047"/>
         <source>No</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1098"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1052"/>
         <source>Yes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1110"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1090"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1115"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1095"/>
         <source>EASA Part-FCL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1124"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1126"/>
+        <source>Language</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1134"/>
         <source>About</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1143"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1153"/>
         <source>About openPilotLog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.cpp" line="362"/>
+        <location filename="../src/gui/widgets/settingswidget.cpp" line="364"/>
         <source>Warning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.cpp" line="363"/>
+        <location filename="../src/gui/widgets/settingswidget.cpp" line="365"/>
         <source>Enabling incomplete logging will enable you to add aircraft with incomplete data.&lt;br&gt;&lt;br&gt;If you do not fill out the aircraft details, it will be impossible to automatically determine Single/Multi Pilot Times or Single/Multi Engine Time. This will also impact statistics and auto-logging capabilites as well as jeopardise database integrity.&lt;br&gt;&lt;br&gt;It is highly recommended to keep this option off unless you have a specific reason not to.&lt;br&gt;&lt;br&gt;Are you sure you want to proceed?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.cpp" line="471"/>
+        <location filename="../src/gui/widgets/settingswidget.cpp" line="473"/>
         <source>The style you have currently selected may not be fully compatible with changing to a custom font while the application is running.&lt;br&gt;&lt;br&gt;Applying your changes may require restarting the application.&lt;br&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.cpp" line="492"/>
+        <location filename="../src/gui/widgets/settingswidget.cpp" line="494"/>
         <source>The application will be restarted for this change to take effect.</source>
         <translation type="unfinished"></translation>
     </message>

+ 41 - 36
l10n/openpilotlog_en.ts

@@ -1981,7 +1981,7 @@ Error: %2</source>
 <context>
     <name>QMessageBox</name>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.cpp" line="391"/>
+        <location filename="../src/gui/widgets/settingswidget.cpp" line="393"/>
         <source>&lt;h3&gt;&lt;center&gt;About openPilotLog&lt;/center&gt;&lt;/h3&gt;&lt;br&gt;&amp;#169; 2020-2021 Felix Turowsky&lt;br&gt;&lt;p&gt;This is a collaboratively developed Free and Open Source Application. Visit us &lt;a href=&quot;https://%1/&quot;&gt;here&lt;/a&gt; for more information.&lt;/p&gt;&lt;p&gt;This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.&lt;/p&gt;&lt;p&gt;This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.&lt;/p&gt; &lt;p&gt;You should have received a copy of the GNU General Public License along with this program.  If not, please click &lt;a href=&quot;https://%2&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;br&gt;&lt;p&gt;This program uses &lt;a href=&quot;http://%3/&quot;&gt;Qt&lt;/a&gt; version %4 and &lt;a href=&quot;https://%5/&quot;&gt;SQLite&lt;/a&gt; version %6&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2038,7 +2038,7 @@ Error: %2</source>
     </message>
     <message>
         <location filename="../src/gui/widgets/settingswidget.ui" line="30"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1003"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="929"/>
         <source>Last Name</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2050,14 +2050,14 @@ Error: %2</source>
     </message>
     <message>
         <location filename="../src/gui/widgets/settingswidget.ui" line="47"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1008"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="934"/>
         <source>First Name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/gui/widgets/settingswidget.ui" line="64"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1013"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1081"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="939"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1016"/>
         <source>Company</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2304,129 +2304,134 @@ Error: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="925"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="985"/>
         <source>Use System Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="941"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="944"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="999"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="912"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="915"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="925"/>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines by which column to sort the display of Pilots in the Pilots Tab.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="947"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="918"/>
         <source>Sort Pilots by</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="960"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="963"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1067"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1002"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1030"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1033"/>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines by which column to sort the display of Aircaft in the Aircraft Tab.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="966"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1036"/>
         <source>Sort Aircraft by</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="979"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1089"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="975"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1043"/>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines whether incomplete database entries are permitted. It is highly recommended to keep this option off.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="982"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="978"/>
         <source>Allow incomplete Entries </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1021"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1079"/>
         <source>Reset to Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1034"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1109"/>
         <source>Style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1047"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1050"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1106"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1066"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1069"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1086"/>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines how your logbook is displayed in the logbook tab. This has no influence on what details are logged, just on what is displayed by default.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1053"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1072"/>
         <source>Logbook Dispay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1060"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="995"/>
         <source>Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1071"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1006"/>
         <source>Registration</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1076"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1011"/>
         <source>Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1093"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1047"/>
         <source>No</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1098"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1052"/>
         <source>Yes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1110"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1090"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1115"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1095"/>
         <source>EASA Part-FCL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1124"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1126"/>
+        <source>Language</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1134"/>
         <source>About</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1143"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1153"/>
         <source>About openPilotLog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.cpp" line="362"/>
+        <location filename="../src/gui/widgets/settingswidget.cpp" line="364"/>
         <source>Warning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.cpp" line="363"/>
+        <location filename="../src/gui/widgets/settingswidget.cpp" line="365"/>
         <source>Enabling incomplete logging will enable you to add aircraft with incomplete data.&lt;br&gt;&lt;br&gt;If you do not fill out the aircraft details, it will be impossible to automatically determine Single/Multi Pilot Times or Single/Multi Engine Time. This will also impact statistics and auto-logging capabilites as well as jeopardise database integrity.&lt;br&gt;&lt;br&gt;It is highly recommended to keep this option off unless you have a specific reason not to.&lt;br&gt;&lt;br&gt;Are you sure you want to proceed?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.cpp" line="471"/>
+        <location filename="../src/gui/widgets/settingswidget.cpp" line="473"/>
         <source>The style you have currently selected may not be fully compatible with changing to a custom font while the application is running.&lt;br&gt;&lt;br&gt;Applying your changes may require restarting the application.&lt;br&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.cpp" line="492"/>
+        <location filename="../src/gui/widgets/settingswidget.cpp" line="494"/>
         <source>The application will be restarted for this change to take effect.</source>
         <translation type="unfinished"></translation>
     </message>

+ 41 - 36
l10n/openpilotlog_es.ts

@@ -1981,7 +1981,7 @@ Error: %2</source>
 <context>
     <name>QMessageBox</name>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.cpp" line="391"/>
+        <location filename="../src/gui/widgets/settingswidget.cpp" line="393"/>
         <source>&lt;h3&gt;&lt;center&gt;About openPilotLog&lt;/center&gt;&lt;/h3&gt;&lt;br&gt;&amp;#169; 2020-2021 Felix Turowsky&lt;br&gt;&lt;p&gt;This is a collaboratively developed Free and Open Source Application. Visit us &lt;a href=&quot;https://%1/&quot;&gt;here&lt;/a&gt; for more information.&lt;/p&gt;&lt;p&gt;This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.&lt;/p&gt;&lt;p&gt;This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.&lt;/p&gt; &lt;p&gt;You should have received a copy of the GNU General Public License along with this program.  If not, please click &lt;a href=&quot;https://%2&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;br&gt;&lt;p&gt;This program uses &lt;a href=&quot;http://%3/&quot;&gt;Qt&lt;/a&gt; version %4 and &lt;a href=&quot;https://%5/&quot;&gt;SQLite&lt;/a&gt; version %6&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2038,7 +2038,7 @@ Error: %2</source>
     </message>
     <message>
         <location filename="../src/gui/widgets/settingswidget.ui" line="30"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1003"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="929"/>
         <source>Last Name</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2050,14 +2050,14 @@ Error: %2</source>
     </message>
     <message>
         <location filename="../src/gui/widgets/settingswidget.ui" line="47"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1008"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="934"/>
         <source>First Name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/gui/widgets/settingswidget.ui" line="64"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1013"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1081"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="939"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1016"/>
         <source>Company</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2304,129 +2304,134 @@ Error: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="925"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="985"/>
         <source>Use System Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="941"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="944"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="999"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="912"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="915"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="925"/>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines by which column to sort the display of Pilots in the Pilots Tab.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="947"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="918"/>
         <source>Sort Pilots by</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="960"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="963"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1067"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1002"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1030"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1033"/>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines by which column to sort the display of Aircaft in the Aircraft Tab.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="966"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1036"/>
         <source>Sort Aircraft by</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="979"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1089"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="975"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1043"/>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines whether incomplete database entries are permitted. It is highly recommended to keep this option off.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="982"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="978"/>
         <source>Allow incomplete Entries </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1021"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1079"/>
         <source>Reset to Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1034"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1109"/>
         <source>Style</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1047"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1050"/>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1106"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1066"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1069"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1086"/>
         <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines how your logbook is displayed in the logbook tab. This has no influence on what details are logged, just on what is displayed by default.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1053"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1072"/>
         <source>Logbook Dispay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1060"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="995"/>
         <source>Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1071"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1006"/>
         <source>Registration</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1076"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1011"/>
         <source>Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1093"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1047"/>
         <source>No</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1098"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1052"/>
         <source>Yes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1110"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1090"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1115"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1095"/>
         <source>EASA Part-FCL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1124"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1126"/>
+        <source>Language</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1134"/>
         <source>About</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.ui" line="1143"/>
+        <location filename="../src/gui/widgets/settingswidget.ui" line="1153"/>
         <source>About openPilotLog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.cpp" line="362"/>
+        <location filename="../src/gui/widgets/settingswidget.cpp" line="364"/>
         <source>Warning</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.cpp" line="363"/>
+        <location filename="../src/gui/widgets/settingswidget.cpp" line="365"/>
         <source>Enabling incomplete logging will enable you to add aircraft with incomplete data.&lt;br&gt;&lt;br&gt;If you do not fill out the aircraft details, it will be impossible to automatically determine Single/Multi Pilot Times or Single/Multi Engine Time. This will also impact statistics and auto-logging capabilites as well as jeopardise database integrity.&lt;br&gt;&lt;br&gt;It is highly recommended to keep this option off unless you have a specific reason not to.&lt;br&gt;&lt;br&gt;Are you sure you want to proceed?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.cpp" line="471"/>
+        <location filename="../src/gui/widgets/settingswidget.cpp" line="473"/>
         <source>The style you have currently selected may not be fully compatible with changing to a custom font while the application is running.&lt;br&gt;&lt;br&gt;Applying your changes may require restarting the application.&lt;br&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/gui/widgets/settingswidget.cpp" line="492"/>
+        <location filename="../src/gui/widgets/settingswidget.cpp" line="494"/>
         <source>The application will be restarted for this change to take effect.</source>
         <translation type="unfinished"></translation>
     </message>

+ 15 - 2
src/gui/widgets/settingswidget.cpp

@@ -80,9 +80,12 @@ void SettingsWidget::setupComboBoxes(){
 
         // Approach Combo Box
         const QSignalBlocker blocker_approach(ui->approachComboBox);
-        for (const auto &approach : Opl::ApproachTypes) {
+        for (const auto &approach : Opl::ApproachTypes)
             ui->approachComboBox->addItem(approach);
-        }
+        // Language Combo Box
+        const QSignalBlocker blocker_language(ui->languageComboBox);
+        for (const auto &lang : Opl::Translations_Strings)
+            ui->languageComboBox->addItem(lang);
     }
 }
 
@@ -706,3 +709,13 @@ void SettingsWidget::on_dateFormatComboBox_currentIndexChanged(int index)
                         static_cast<Opl::Date::ADateFormat>(ASettings::read(ASettings::Main::DateFormat).toInt())));
     }
 }
+
+void SettingsWidget::on_languageComboBox_activated(const QString &arg1)
+{
+    if (arg1 != Opl::Translations_Strings[Opl::Translations::English]) {
+        INFO(tr("Translations are not yet available. If you are interested in making openPilotLog available in your native "
+             "language, visit us <a href=\"https://%1/\">here</a> for more information."
+             ).arg(QStringLiteral("github.com/fiffty-50/openpilotlog/wiki/Translations")));
+        ui->languageComboBox->setCurrentIndex(0);
+    }
+}

+ 2 - 0
src/gui/widgets/settingswidget.h

@@ -115,6 +115,8 @@ private slots:
 
     void on_dateFormatComboBox_currentIndexChanged(int index);
 
+    void on_languageComboBox_activated(const QString &arg1);
+
 private:
     Ui::SettingsWidget *ui;
 

+ 108 - 98
src/gui/widgets/settingswidget.ui

@@ -17,7 +17,7 @@
    <item row="0" column="0">
     <widget class="QTabWidget" name="tabWidget">
      <property name="currentIndex">
-      <number>0</number>
+      <number>3</number>
      </property>
      <widget class="QWidget" name="personalTab">
       <attribute name="title">
@@ -897,37 +897,8 @@
        <string>Appearance</string>
       </attribute>
       <layout class="QGridLayout" name="gridLayout_5">
-       <item row="1" column="3">
-        <widget class="QSpinBox" name="fontSpinBox">
-         <property name="enabled">
-          <bool>false</bool>
-         </property>
-         <property name="maximumSize">
-          <size>
-           <width>80</width>
-           <height>16777215</height>
-          </size>
-         </property>
-         <property name="minimum">
-          <number>8</number>
-         </property>
-         <property name="maximum">
-          <number>18</number>
-         </property>
-         <property name="value">
-          <number>10</number>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="1">
-        <widget class="QCheckBox" name="fontCheckBox">
-         <property name="text">
-          <string>Use System Font</string>
-         </property>
-         <property name="checked">
-          <bool>true</bool>
-         </property>
-        </widget>
+       <item row="0" column="2">
+        <widget class="QComboBox" name="styleComboBox"/>
        </item>
        <item row="2" column="0">
         <widget class="QLabel" name="pilotSortLabel">
@@ -948,51 +919,6 @@
          </property>
         </widget>
        </item>
-       <item row="3" column="0">
-        <widget class="QLabel" name="acftSortLabel">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="toolTip">
-          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines by which column to sort the display of Aircaft in the Aircraft Tab.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-         </property>
-         <property name="whatsThis">
-          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines by which column to sort the display of Aircaft in the Aircraft Tab.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-         </property>
-         <property name="text">
-          <string>Sort Aircraft by</string>
-         </property>
-        </widget>
-       </item>
-       <item row="4" column="0">
-        <widget class="QLabel" name="acAllowIncompleteLabel">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="toolTip">
-          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines whether incomplete database entries are permitted. It is highly recommended to keep this option off.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-         </property>
-         <property name="text">
-          <string>Allow incomplete Entries </string>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="2">
-        <widget class="QComboBox" name="styleComboBox"/>
-       </item>
-       <item row="1" column="2">
-        <widget class="QFontComboBox" name="fontComboBox">
-         <property name="enabled">
-          <bool>false</bool>
-         </property>
-        </widget>
-       </item>
        <item row="2" column="2">
         <widget class="QComboBox" name="pilotSortComboBox">
          <property name="toolTip">
@@ -1015,28 +941,30 @@
          </item>
         </widget>
        </item>
-       <item row="0" column="1">
-        <widget class="QPushButton" name="resetStylePushButton">
-         <property name="text">
-          <string>Reset to Default</string>
+       <item row="1" column="3">
+        <widget class="QSpinBox" name="fontSpinBox">
+         <property name="enabled">
+          <bool>false</bool>
          </property>
-        </widget>
-       </item>
-       <item row="0" column="0">
-        <widget class="QLabel" name="styleLabel">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
+         <property name="maximumSize">
+          <size>
+           <width>80</width>
+           <height>16777215</height>
+          </size>
          </property>
-         <property name="text">
-          <string>Style</string>
+         <property name="minimum">
+          <number>8</number>
+         </property>
+         <property name="maximum">
+          <number>18</number>
+         </property>
+         <property name="value">
+          <number>10</number>
          </property>
         </widget>
        </item>
-       <item row="5" column="0">
-        <widget class="QLabel" name="logbookViewLabel">
+       <item row="4" column="0">
+        <widget class="QLabel" name="acAllowIncompleteLabel">
          <property name="sizePolicy">
           <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
            <horstretch>0</horstretch>
@@ -1044,13 +972,20 @@
           </sizepolicy>
          </property>
          <property name="toolTip">
-          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines how your logbook is displayed in the logbook tab. This has no influence on what details are logged, just on what is displayed by default.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines whether incomplete database entries are permitted. It is highly recommended to keep this option off.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
          </property>
-         <property name="whatsThis">
-          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines how your logbook is displayed in the logbook tab. This has no influence on what details are logged, just on what is displayed by default.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+         <property name="text">
+          <string>Allow incomplete Entries </string>
          </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
+        <widget class="QCheckBox" name="fontCheckBox">
          <property name="text">
-          <string>Logbook Dispay</string>
+          <string>Use System Font</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
          </property>
         </widget>
        </item>
@@ -1083,6 +1018,25 @@
          </item>
         </widget>
        </item>
+       <item row="3" column="0">
+        <widget class="QLabel" name="acftSortLabel">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="toolTip">
+          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines by which column to sort the display of Aircaft in the Aircraft Tab.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+         </property>
+         <property name="whatsThis">
+          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines by which column to sort the display of Aircaft in the Aircraft Tab.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+         </property>
+         <property name="text">
+          <string>Sort Aircraft by</string>
+         </property>
+        </widget>
+       </item>
        <item row="4" column="2">
         <widget class="QComboBox" name="acAllowIncompleteComboBox">
          <property name="toolTip">
@@ -1100,6 +1054,32 @@
          </item>
         </widget>
        </item>
+       <item row="5" column="0">
+        <widget class="QLabel" name="logbookViewLabel">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="toolTip">
+          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines how your logbook is displayed in the logbook tab. This has no influence on what details are logged, just on what is displayed by default.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+         </property>
+         <property name="whatsThis">
+          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Determines how your logbook is displayed in the logbook tab. This has no influence on what details are logged, just on what is displayed by default.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+         </property>
+         <property name="text">
+          <string>Logbook Dispay</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QPushButton" name="resetStylePushButton">
+         <property name="text">
+          <string>Reset to Default</string>
+         </property>
+        </widget>
+       </item>
        <item row="5" column="2">
         <widget class="QComboBox" name="logbookViewComboBox">
          <property name="toolTip">
@@ -1117,6 +1097,36 @@
          </item>
         </widget>
        </item>
+       <item row="0" column="0">
+        <widget class="QLabel" name="styleLabel">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>Style</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="2">
+        <widget class="QFontComboBox" name="fontComboBox">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="2">
+        <widget class="QComboBox" name="languageComboBox"/>
+       </item>
+       <item row="6" column="0">
+        <widget class="QLabel" name="languageLabel">
+         <property name="text">
+          <string>Language</string>
+         </property>
+        </widget>
+       </item>
       </layout>
      </widget>
      <widget class="QWidget" name="aboutTab">

+ 6 - 0
src/opl.h

@@ -85,6 +85,12 @@ public:
 }; // class ANotificationHandler
 
 enum class Translations {English, German, Spanish};
+static const QMap<Translations, QString> Translations_Strings {
+    {Translations::English, QStringLiteral("English")},
+    {Translations::German, QStringLiteral("Deutsch")},
+    {Translations::Spanish, QStringLiteral("Español")},
+    //[...]
+};
 
 static const auto ApproachTypes = QStringList{
         QLatin1String("VISUAL"),