Browse Source

Add multi-language support with English and German translations

Co-authored-by: djeada <[email protected]>
copilot-swe-agent[bot] 1 month ago
parent
commit
e9f150272c
11 changed files with 1108 additions and 272 deletions
  1. 2 0
      .gitignore
  2. 13 1
      CMakeLists.txt
  3. 3 1
      Makefile
  4. 60 0
      app/core/language_manager.cpp
  5. 34 0
      app/core/language_manager.h
  6. 3 0
      main.cpp
  7. 6 0
      translations.qrc
  8. BIN
      translations/app_de.qm
  9. 704 0
      translations/app_de.ts
  10. BIN
      translations/app_en.qm
  11. 283 270
      translations/app_en.ts

+ 2 - 0
.gitignore

@@ -30,6 +30,8 @@ ui_*.h
 Makefile*
 *build-*
 *.qm
+# Exception: keep translation files
+!translations/*.qm
 *.prl
 
 # Qt unit tests

+ 13 - 1
CMakeLists.txt

@@ -45,11 +45,19 @@ add_subdirectory(game)
 add_subdirectory(ui)
 add_subdirectory(tools)
 
+# ---- Translation support ----
+# Define default language (can be overridden with -DDEFAULT_LANG=de)
+if(NOT DEFINED DEFAULT_LANG)
+    set(DEFAULT_LANG "en")
+endif()
+add_compile_definitions(DEFAULT_LANG="${DEFAULT_LANG}")
+
 # ---- Executable ----
 if(QT_VERSION_MAJOR EQUAL 6)
     qt6_add_executable(standard_of_iron
         main.cpp
         app/core/game_engine.cpp
+        app/core/language_manager.cpp
         app/models/cursor_manager.cpp
         app/models/hover_tracker.cpp
         app/models/selected_units_model.cpp
@@ -63,6 +71,7 @@ else()
     add_executable(standard_of_iron
         main.cpp
         app/core/game_engine.cpp
+        app/core/language_manager.cpp
         app/models/cursor_manager.cpp
         app/models/hover_tracker.cpp
         app/models/selected_units_model.cpp
@@ -98,13 +107,16 @@ if(QT_VERSION_MAJOR EQUAL 6)
             assets/shaders/grid.frag
             assets/maps/test_map.json
             assets/visuals/unit_visuals.json
+            translations/app_en.qm
+            translations/app_de.qm
         DEPENDENCIES
             Qt6::QuickControls2
     )
 else()
     qt5_add_resources(qml_resources qml_resources.qrc)
     qt5_add_resources(assets_resources assets.qrc)
-    target_sources(standard_of_iron PRIVATE ${qml_resources} ${assets_resources})
+    qt5_add_resources(translations_resources translations.qrc)
+    target_sources(standard_of_iron PRIVATE ${qml_resources} ${assets_resources} ${translations_resources})
 endif()
 
 target_link_libraries(standard_of_iron

+ 3 - 1
Makefile

@@ -8,6 +8,7 @@
 BUILD_DIR := build
 BINARY_NAME := standard_of_iron
 MAP_EDITOR_BINARY := map_editor
+DEFAULT_LANG ?= en
 
 # Formatting config
 CLANG_FORMAT ?= clang-format
@@ -49,6 +50,7 @@ help:
 	@echo "  make install    # Install dependencies"
 	@echo "  make dev        # Complete development setup"
 	@echo "  make run        # Build and run the game"
+	@echo "  DEFAULT_LANG=de make build  # Build with German as default language"
 
 # Install dependencies
 .PHONY: install
@@ -71,7 +73,7 @@ build-dir:
 .PHONY: configure
 configure: build-dir
 	@echo "$(BOLD)$(BLUE)Configuring build with CMake...$(RESET)"
-	@cd $(BUILD_DIR) && cmake ..
+	@cd $(BUILD_DIR) && cmake -DDEFAULT_LANG=$(DEFAULT_LANG) ..
 	@echo "$(GREEN)✓ Configuration complete$(RESET)"
 
 # Build the project

+ 60 - 0
app/core/language_manager.cpp

@@ -0,0 +1,60 @@
+#include "language_manager.h"
+#include <QCoreApplication>
+#include <QDebug>
+
+LanguageManager::LanguageManager(QObject *parent)
+    : QObject(parent), m_currentLanguage("en"), m_translator(new QTranslator(this)) {
+  m_availableLanguages << "en"
+                       << "de";
+
+#ifndef DEFAULT_LANG
+#define DEFAULT_LANG "en"
+#endif
+
+  QString defaultLang = QString(DEFAULT_LANG);
+  if (m_availableLanguages.contains(defaultLang)) {
+    loadLanguage(defaultLang);
+  } else {
+    loadLanguage("en");
+  }
+}
+
+LanguageManager::~LanguageManager() {}
+
+QString LanguageManager::currentLanguage() const { return m_currentLanguage; }
+
+QStringList LanguageManager::availableLanguages() const {
+  return m_availableLanguages;
+}
+
+void LanguageManager::setLanguage(const QString &language) {
+  if (language == m_currentLanguage || !m_availableLanguages.contains(language)) {
+    return;
+  }
+
+  loadLanguage(language);
+}
+
+void LanguageManager::loadLanguage(const QString &language) {
+  QCoreApplication::removeTranslator(m_translator);
+
+  QString qmFile = QString(":/translations/translations/app_%1.qm").arg(language);
+
+  if (m_translator->load(qmFile)) {
+    QCoreApplication::installTranslator(m_translator);
+    m_currentLanguage = language;
+    qInfo() << "Language changed to:" << language;
+    emit languageChanged();
+  } else {
+    qWarning() << "Failed to load translation file:" << qmFile;
+  }
+}
+
+QString LanguageManager::languageDisplayName(const QString &language) const {
+  if (language == "en") {
+    return "English";
+  } else if (language == "de") {
+    return "Deutsch (German)";
+  }
+  return language;
+}

+ 34 - 0
app/core/language_manager.h

@@ -0,0 +1,34 @@
+#ifndef LANGUAGE_MANAGER_H
+#define LANGUAGE_MANAGER_H
+
+#include <QObject>
+#include <QTranslator>
+
+class LanguageManager : public QObject {
+  Q_OBJECT
+  Q_PROPERTY(QString currentLanguage READ currentLanguage WRITE setLanguage
+                 NOTIFY languageChanged)
+  Q_PROPERTY(QStringList availableLanguages READ availableLanguages CONSTANT)
+
+public:
+  explicit LanguageManager(QObject *parent = nullptr);
+  ~LanguageManager();
+
+  QString currentLanguage() const;
+  QStringList availableLanguages() const;
+
+  Q_INVOKABLE void setLanguage(const QString &language);
+  Q_INVOKABLE QString languageDisplayName(const QString &language) const;
+
+signals:
+  void languageChanged();
+
+private:
+  QString m_currentLanguage;
+  QTranslator *m_translator;
+  QStringList m_availableLanguages;
+
+  void loadLanguage(const QString &language);
+};
+
+#endif

+ 3 - 0
main.cpp

@@ -12,6 +12,7 @@
 #include <QTextStream>
 
 #include "app/core/game_engine.h"
+#include "app/core/language_manager.h"
 #include "ui/gl_view.h"
 #include "ui/theme.h"
 
@@ -36,9 +37,11 @@ int main(int argc, char *argv[]) {
 
   QGuiApplication app(argc, argv);
 
+  auto languageManager = new LanguageManager();
   auto gameEngine = new GameEngine();
 
   QQmlApplicationEngine engine;
+  engine.rootContext()->setContextProperty("languageManager", languageManager);
   engine.rootContext()->setContextProperty("game", gameEngine);
   engine.addImportPath("qrc:/StandardOfIron/ui/qml");
   qmlRegisterType<GLView>("StandardOfIron", 1, 0, "GLView");

+ 6 - 0
translations.qrc

@@ -0,0 +1,6 @@
+<RCC>
+    <qresource prefix="/translations">
+        <file>translations/app_en.qm</file>
+        <file>translations/app_de.qm</file>
+    </qresource>
+</RCC>

BIN
translations/app_de.qm


+ 704 - 0
translations/app_de.ts

@@ -0,0 +1,704 @@
+<?xml version='1.0' encoding='utf-8'?>
+<TS version="2.1" language="de_DE">
+<context>
+    <name>BattleSummary</name>
+    <message>
+        <location filename="../ui/qml/BattleSummary.qml" line="134" />
+        <source>VICTORY!</source>
+        <translation>SIEG!</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/BattleSummary.qml" line="134" />
+        <source>FAILURE!</source>
+        <translation>NIEDERLAGE!</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/BattleSummary.qml" line="278" />
+        <source>VICTORIOUS</source>
+        <translation>SIEGREICH</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/BattleSummary.qml" line="278" />
+        <source>DEFEATED</source>
+        <translation>BESIEGT</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/BattleSummary.qml" line="303" />
+        <source>Kills: %1</source>
+        <translation>Abschüsse: %1</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/BattleSummary.qml" line="314" />
+        <source>Losses: %1</source>
+        <translation>Verluste: %1</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/BattleSummary.qml" line="325" />
+        <source>Units Trained: %1</source>
+        <translation>Einheiten ausgebildet: %1</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/BattleSummary.qml" line="336" />
+        <source>Villages: %1</source>
+        <translation>Dörfer: %1</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/BattleSummary.qml" line="347" />
+        <source>Play Time: %1</source>
+        <translation>Spielzeit: %1</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/BattleSummary.qml" line="371" />
+        <source>SCORE</source>
+        <translation>PUNKTZAHL</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/BattleSummary.qml" line="483" />
+        <source>YOU</source>
+        <translation>DU</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/BattleSummary.qml" line="500" />
+        <source>Return to Menu</source>
+        <translation>Zurück zum Menü</translation>
+    </message>
+</context>
+<context>
+    <name>HUDBottom</name>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="43" />
+        <source>SELECTED UNITS</source>
+        <translation>AUSGEWÄHLTE EINHEITEN</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="157" />
+        <source>◉ Select Troops for Commands</source>
+        <translation>◉ Wähle Truppen für Befehle</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="157" />
+        <source>◉ Normal Mode</source>
+        <translation>◉ Normaler Modus</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="157" />
+        <source>⚔️ ATTACK MODE - Click Enemy</source>
+        <translation>⚔️ ANGRIFFSMODUS - Feind anklicken</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="157" />
+        <source>🛡️ GUARD MODE - Click Position</source>
+        <translation>🛡️ WACHMODUS - Position anklicken</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="157" />
+        <source>🚶 PATROL MODE - Set Waypoints</source>
+        <translation>🚶 PATROUILLENMODUS - Wegpunkte setzen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="157" />
+        <source>⏹️ STOP COMMAND</source>
+        <translation>⏹️ STOPP-BEFEHL</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="205" />
+        <source>Attack</source>
+        <translation>Angriff</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="214" />
+        <source>Attack enemy units or buildings.
+Units will chase targets.</source>
+        <translation>Feindliche Einheiten oder Gebäude angreifen.
+Einheiten verfolgen Ziele.</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="214" />
+        <location filename="../ui/qml/HUDBottom.qml" line="247" />
+        <location filename="../ui/qml/HUDBottom.qml" line="280" />
+        <location filename="../ui/qml/HUDBottom.qml" line="313" />
+        <location filename="../ui/qml/HUDBottom.qml" line="353" />
+        <source>Select troops first</source>
+        <translation>Wähle zuerst Truppen aus</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="238" />
+        <source>Guard</source>
+        <translation>Bewachen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="247" />
+        <source>Guard a position.
+Units will defend from all sides.</source>
+        <translation>Eine Position bewachen.
+Einheiten verteidigen von allen Seiten.</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="271" />
+        <source>Patrol</source>
+        <translation>Patrouille</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="280" />
+        <source>Patrol between waypoints.
+Click start and end points.</source>
+        <translation>Zwischen Wegpunkten patrouillieren.
+Start- und Endpunkte anklicken.</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="304" />
+        <source>Stop</source>
+        <translation>Stopp</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="313" />
+        <source>Stop all actions immediately</source>
+        <translation>Alle Aktionen sofort stoppen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="344" />
+        <source>Hold</source>
+        <translation>Halten</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="353" />
+        <source>Exit hold mode (toggle)</source>
+        <translation>Haltemodus beenden (umschalten)</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDBottom.qml" line="353" />
+        <source>Hold position and defend</source>
+        <translation>Position halten und verteidigen</translation>
+    </message>
+</context>
+<context>
+    <name>HUDTop</name>
+    <message>
+        <location filename="../ui/qml/HUDTop.qml" line="145" />
+        <source>Speed:</source>
+        <translation>Geschwindigkeit:</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDTop.qml" line="250" />
+        <source>Camera:</source>
+        <translation>Kamera:</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDTop.qml" line="264" />
+        <source>Follow</source>
+        <translation>Folgen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDTop.qml" line="295" />
+        <source>Reset</source>
+        <translation>Zurücksetzen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDTop.qml" line="458" />
+        <source>MINIMAP</source>
+        <translation>MINIKARTE</translation>
+    </message>
+</context>
+<context>
+    <name>HUDVictory</name>
+    <message>
+        <location filename="../ui/qml/HUDVictory.qml" line="58" />
+        <source>VICTORY!</source>
+        <translation>SIEG!</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDVictory.qml" line="58" />
+        <source>DEFEAT</source>
+        <translation>NIEDERLAGE</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDVictory.qml" line="66" />
+        <source>Enemy barracks destroyed!</source>
+        <translation>Feindliche Kaserne zerstört!</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDVictory.qml" line="66" />
+        <source>Your barracks was destroyed!</source>
+        <translation>Deine Kaserne wurde zerstört!</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/HUDVictory.qml" line="73" />
+        <source>Continue</source>
+        <translation>Weiter</translation>
+    </message>
+</context>
+<context>
+    <name>LoadGamePanel</name>
+    <message>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="117" />
+        <source>Load Game</source>
+        <translation>Spiel laden</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="125" />
+        <source>Cancel</source>
+        <translation>Abbrechen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="164" />
+        <location filename="../ui/qml/LoadGamePanel.qml" line="188" />
+        <location filename="../ui/qml/LoadGamePanel.qml" line="405" />
+        <source>No saves found</source>
+        <translation>Keine Speicherstände gefunden</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="243" />
+        <source>No Preview</source>
+        <translation>Keine Vorschau</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="265" />
+        <source>Slot: %1</source>
+        <translation>Speicherplatz: %1</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="285" />
+        <source>Last saved: %1</source>
+        <translation>Zuletzt gespeichert: %1</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="293" />
+        <source>Play time: %1</source>
+        <translation>Spielzeit: %1</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="313" />
+        <source>Load</source>
+        <translation>Laden</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="322" />
+        <source>Delete</source>
+        <translation>Löschen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="366" />
+        <source>Selected: %1</source>
+        <translation>Ausgewählt: %1</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="366" />
+        <source>Select a save to load</source>
+        <translation>Wähle einen Speicherstand zum Laden</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="372" />
+        <source>Load Selected</source>
+        <translation>Ausgewähltes laden</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="396" />
+        <source>Confirm Delete</source>
+        <translation>Löschen bestätigen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="433" />
+        <source>Are you sure you want to delete the save:
+"%1"?
+
+This action cannot be undone.</source>
+        <translation>Bist du sicher, dass du den Speicherstand löschen möchtest:
+"%1"?
+
+Diese Aktion kann nicht rückgängig gemacht werden.</translation>
+    </message>
+</context>
+<context>
+    <name>Main</name>
+    <message>
+        <location filename="../ui/qml/Main.qml" line="18" />
+        <source>Standard of Iron - RTS Game</source>
+        <translation>Standard of Iron - RTS-Spiel</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/Main.qml" line="92" />
+        <source>PAUSED</source>
+        <translation>PAUSIERT</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/Main.qml" line="100" />
+        <source>Press Space to resume</source>
+        <translation>Drücke Leertaste zum Fortsetzen</translation>
+    </message>
+</context>
+<context>
+    <name>MainMenu</name>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="84" />
+        <source>STANDARD OF IRON</source>
+        <translation>STANDARD OF IRON</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="94" />
+        <source>A tiny but ambitious RTS</source>
+        <translation>Ein kleines, aber ambitioniertes RTS</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="109" />
+        <source>Play — Skirmish</source>
+        <translation>Spielen — Gefecht</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="110" />
+        <source>Select a map and start</source>
+        <translation>Wähle eine Karte und starte</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="115" />
+        <source>Save Game</source>
+        <translation>Spiel speichern</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="116" />
+        <source>Save your current progress</source>
+        <translation>Speichere deinen aktuellen Fortschritt</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="121" />
+        <source>Load Game</source>
+        <translation>Spiel laden</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="122" />
+        <source>Resume a previous game</source>
+        <translation>Setze ein vorheriges Spiel fort</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="127" />
+        <source>Settings</source>
+        <translation>Einstellungen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="128" />
+        <source>Adjust graphics &amp; controls</source>
+        <translation>Grafik &amp; Steuerung anpassen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="133" />
+        <source>Exit</source>
+        <translation>Beenden</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="134" />
+        <source>Quit the game</source>
+        <translation>Spiel verlassen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="249" />
+        <source>v0.9 — prototype</source>
+        <translation>v0.9 — Prototyp</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="295" />
+        <source>Featured</source>
+        <translation>Vorgestellt</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="303" />
+        <source>Skirmish Mode</source>
+        <translation>Gefecht-Modus</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="312" />
+        <source>Pick a map, adjust your forces and jump into battle. Modern controls and responsive UI.</source>
+        <translation>Wähle eine Karte, passe deine Streitkräfte an und springe in die Schlacht. Moderne Steuerung und reaktionsschnelle Benutzeroberfläche.</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="338" />
+        <source>Tips</source>
+        <translation>Tipps</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MainMenu.qml" line="346" />
+        <source>Hover menu items or use Up/Down and Enter to navigate. Play opens map selection.</source>
+        <translation>Bewege den Mauszeiger über Menüeinträge oder verwende Auf/Ab und Enter zur Navigation. Spielen öffnet die Kartenauswahl.</translation>
+    </message>
+</context>
+<context>
+    <name>MapSelect</name>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="271" />
+        <source>Maps</source>
+        <translation>Karten</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="486" />
+        <source>No maps available</source>
+        <translation>Keine Karten verfügbar</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="519" />
+        <location filename="../ui/qml/MapSelect.qml" line="596" />
+        <source>Loading maps...</source>
+        <translation>Karten werden geladen...</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="548" />
+        <source>► %1</source>
+        <translation>► %1</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="548" />
+        <source>Select a map to continue</source>
+        <translation>Wähle eine Karte zum Fortfahren</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="703" />
+        <source>Loading map details...</source>
+        <translation>Kartendetails werden geladen...</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="720" />
+        <source>No Map Selected</source>
+        <translation>Keine Karte ausgewählt</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="786" />
+        <source>Players</source>
+        <translation>Spieler</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="810" />
+        <source>• Click color/team to cycle</source>
+        <translation>• Klicke auf Farbe/Team zum Wechseln</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="888" />
+        <source>Player color: %1 - Click to change</source>
+        <translation>Spielerfarbe: %1 - Klicken zum Ändern</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="888" />
+        <source>Color</source>
+        <translation>Farbe</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="950" />
+        <source>Team %1 - Click to change</source>
+        <translation>Team %1 - Klicken zum Ändern</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="966" />
+        <source>Team %1</source>
+        <translation>Team %1</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="1016" />
+        <source>Remove player</source>
+        <translation>Spieler entfernen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="1087" />
+        <source>+ Add CPU</source>
+        <translation>+ CPU hinzufügen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="1094" />
+        <source>Add AI opponent</source>
+        <translation>KI-Gegner hinzufügen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="1324" />
+        <source>Back</source>
+        <translation>Zurück</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="1330" />
+        <source>Return to main menu (Esc)</source>
+        <translation>Zurück zum Hauptmenü (Esc)</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="1404" />
+        <source>Play</source>
+        <translation>Spielen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/MapSelect.qml" line="1411" />
+        <source>Start game (Enter)</source>
+        <translation>Spiel starten (Enter)</translation>
+    </message>
+</context>
+<context>
+    <name>ProductionPanel</name>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="56" />
+        <source>PRODUCTION QUEUE</source>
+        <translation>PRODUKTIONSWARTESCHLANGE</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="210" />
+        <source>Units Produced: %1 / %2</source>
+        <translation>Produzierte Einheiten: %1 / %2</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="243" />
+        <source>RECRUIT UNITS</source>
+        <translation>EINHEITEN REKRUTIEREN</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="280" />
+        <source>Archer</source>
+        <translation>Bogenschütze</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="316" />
+        <source>Recruit Archer
+Cost: %1 villagers
+Build time: %2s</source>
+        <translation>Bogenschütze rekrutieren
+Kosten: %1 Dorfbewohner
+Bauzeit: %2s</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="316" />
+        <location filename="../ui/qml/ProductionPanel.qml" line="390" />
+        <location filename="../ui/qml/ProductionPanel.qml" line="464" />
+        <source>Queue is full (5/5)</source>
+        <translation>Warteschlange ist voll (5/5)</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="316" />
+        <location filename="../ui/qml/ProductionPanel.qml" line="390" />
+        <location filename="../ui/qml/ProductionPanel.qml" line="464" />
+        <source>Unit cap reached</source>
+        <translation>Einheitenlimit erreicht</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="316" />
+        <location filename="../ui/qml/ProductionPanel.qml" line="390" />
+        <location filename="../ui/qml/ProductionPanel.qml" line="464" />
+        <source>Cannot recruit</source>
+        <translation>Kann nicht rekrutieren</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="354" />
+        <source>Knight</source>
+        <translation>Ritter</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="390" />
+        <source>Recruit Knight
+Cost: %1 villagers
+Build time: %2s</source>
+        <translation>Ritter rekrutieren
+Kosten: %1 Dorfbewohner
+Bauzeit: %2s</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="428" />
+        <source>Spearman</source>
+        <translation>Speerträger</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="464" />
+        <source>Recruit Spearman
+Cost: %1 villagers
+Build time: %2s</source>
+        <translation>Speerträger rekrutieren
+Kosten: %1 Dorfbewohner
+Bauzeit: %2s</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="518" />
+        <source>📍 Click Map to Set Rally</source>
+        <translation>📍 Karte anklicken zum Setzen des Sammelpunkts</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="518" />
+        <source>📍 Set Rally Point</source>
+        <translation>📍 Sammelpunkt setzen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="523" />
+        <source>Set where newly recruited units will gather.
+Right-click to cancel.</source>
+        <translation>Lege fest, wo sich neu rekrutierte Einheiten sammeln.
+Rechtsklick zum Abbrechen.</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="546" />
+        <source>Right-click to cancel</source>
+        <translation>Rechtsklick zum Abbrechen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="583" />
+        <source>No Barracks Selected</source>
+        <translation>Keine Kaserne ausgewählt</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/ProductionPanel.qml" line="591" />
+        <source>Select a barracks to recruit units</source>
+        <translation>Wähle eine Kaserne zum Rekrutieren von Einheiten</translation>
+    </message>
+</context>
+<context>
+    <name>SaveGamePanel</name>
+    <message>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="72" />
+        <source>Save Game</source>
+        <translation>Spiel speichern</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="80" />
+        <source>Cancel</source>
+        <translation>Abbrechen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="97" />
+        <source>Save Name:</source>
+        <translation>Speichername:</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="106" />
+        <source>Enter save name...</source>
+        <translation>Speichernamen eingeben...</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="121" />
+        <source>Save</source>
+        <translation>Speichern</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="137" />
+        <source>Existing Saves</source>
+        <translation>Vorhandene Speicherstände</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="231" />
+        <source>No Preview</source>
+        <translation>Keine Vorschau</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="252" />
+        <source>Slot: %1</source>
+        <translation>Speicherplatz: %1</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="268" />
+        <source>Last saved: %1</source>
+        <translation>Zuletzt gespeichert: %1</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="278" />
+        <source>Overwrite</source>
+        <translation>Überschreiben</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="316" />
+        <source>Confirm Overwrite</source>
+        <translation>Überschreiben bestätigen</translation>
+    </message>
+    <message>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="335" />
+        <source>Are you sure you want to overwrite the save:
+"%1"?</source>
+        <translation>Bist du sicher, dass du den Speicherstand überschreiben möchtest:
+"%1"?</translation>
+    </message>
+</context>
+</TS>

BIN
translations/app_en.qm


+ 283 - 270
translations/app_en.ts

@@ -1,691 +1,704 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
+<?xml version='1.0' encoding='utf-8'?>
 <TS version="2.1" language="en_US">
 <context>
     <name>BattleSummary</name>
     <message>
-        <location filename="../ui/qml/BattleSummary.qml" line="134"/>
+        <location filename="../ui/qml/BattleSummary.qml" line="134" />
         <source>VICTORY!</source>
-        <translation type="unfinished"></translation>
+        <translation>VICTORY!</translation>
     </message>
     <message>
-        <location filename="../ui/qml/BattleSummary.qml" line="134"/>
+        <location filename="../ui/qml/BattleSummary.qml" line="134" />
         <source>FAILURE!</source>
-        <translation type="unfinished"></translation>
+        <translation>FAILURE!</translation>
     </message>
     <message>
-        <location filename="../ui/qml/BattleSummary.qml" line="278"/>
+        <location filename="../ui/qml/BattleSummary.qml" line="278" />
         <source>VICTORIOUS</source>
-        <translation type="unfinished"></translation>
+        <translation>VICTORIOUS</translation>
     </message>
     <message>
-        <location filename="../ui/qml/BattleSummary.qml" line="278"/>
+        <location filename="../ui/qml/BattleSummary.qml" line="278" />
         <source>DEFEATED</source>
-        <translation type="unfinished"></translation>
+        <translation>DEFEATED</translation>
     </message>
     <message>
-        <location filename="../ui/qml/BattleSummary.qml" line="303"/>
+        <location filename="../ui/qml/BattleSummary.qml" line="303" />
         <source>Kills: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Kills: %1</translation>
     </message>
     <message>
-        <location filename="../ui/qml/BattleSummary.qml" line="314"/>
+        <location filename="../ui/qml/BattleSummary.qml" line="314" />
         <source>Losses: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Losses: %1</translation>
     </message>
     <message>
-        <location filename="../ui/qml/BattleSummary.qml" line="325"/>
+        <location filename="../ui/qml/BattleSummary.qml" line="325" />
         <source>Units Trained: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Units Trained: %1</translation>
     </message>
     <message>
-        <location filename="../ui/qml/BattleSummary.qml" line="336"/>
+        <location filename="../ui/qml/BattleSummary.qml" line="336" />
         <source>Villages: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Villages: %1</translation>
     </message>
     <message>
-        <location filename="../ui/qml/BattleSummary.qml" line="347"/>
+        <location filename="../ui/qml/BattleSummary.qml" line="347" />
         <source>Play Time: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Play Time: %1</translation>
     </message>
     <message>
-        <location filename="../ui/qml/BattleSummary.qml" line="371"/>
+        <location filename="../ui/qml/BattleSummary.qml" line="371" />
         <source>SCORE</source>
-        <translation type="unfinished"></translation>
+        <translation>SCORE</translation>
     </message>
     <message>
-        <location filename="../ui/qml/BattleSummary.qml" line="483"/>
+        <location filename="../ui/qml/BattleSummary.qml" line="483" />
         <source>YOU</source>
-        <translation type="unfinished"></translation>
+        <translation>YOU</translation>
     </message>
     <message>
-        <location filename="../ui/qml/BattleSummary.qml" line="500"/>
+        <location filename="../ui/qml/BattleSummary.qml" line="500" />
         <source>Return to Menu</source>
-        <translation type="unfinished"></translation>
+        <translation>Return to Menu</translation>
     </message>
 </context>
 <context>
     <name>HUDBottom</name>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="43"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="43" />
         <source>SELECTED UNITS</source>
-        <translation type="unfinished"></translation>
+        <translation>SELECTED UNITS</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="157"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="157" />
         <source>◉ Select Troops for Commands</source>
-        <translation type="unfinished"></translation>
+        <translation>◉ Select Troops for Commands</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="157"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="157" />
         <source>◉ Normal Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>◉ Normal Mode</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="157"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="157" />
         <source>⚔️ ATTACK MODE - Click Enemy</source>
-        <translation type="unfinished"></translation>
+        <translation>⚔️ ATTACK MODE - Click Enemy</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="157"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="157" />
         <source>🛡️ GUARD MODE - Click Position</source>
-        <translation type="unfinished"></translation>
+        <translation>🛡️ GUARD MODE - Click Position</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="157"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="157" />
         <source>🚶 PATROL MODE - Set Waypoints</source>
-        <translation type="unfinished"></translation>
+        <translation>🚶 PATROL MODE - Set Waypoints</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="157"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="157" />
         <source>⏹️ STOP COMMAND</source>
-        <translation type="unfinished"></translation>
+        <translation>⏹️ STOP COMMAND</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="205"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="205" />
         <source>Attack</source>
-        <translation type="unfinished"></translation>
+        <translation>Attack</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="214"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="214" />
         <source>Attack enemy units or buildings.
 Units will chase targets.</source>
-        <translation type="unfinished"></translation>
+        <translation>Attack enemy units or buildings.
+Units will chase targets.</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="214"/>
-        <location filename="../ui/qml/HUDBottom.qml" line="247"/>
-        <location filename="../ui/qml/HUDBottom.qml" line="280"/>
-        <location filename="../ui/qml/HUDBottom.qml" line="313"/>
-        <location filename="../ui/qml/HUDBottom.qml" line="353"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="214" />
+        <location filename="../ui/qml/HUDBottom.qml" line="247" />
+        <location filename="../ui/qml/HUDBottom.qml" line="280" />
+        <location filename="../ui/qml/HUDBottom.qml" line="313" />
+        <location filename="../ui/qml/HUDBottom.qml" line="353" />
         <source>Select troops first</source>
-        <translation type="unfinished"></translation>
+        <translation>Select troops first</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="238"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="238" />
         <source>Guard</source>
-        <translation type="unfinished"></translation>
+        <translation>Guard</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="247"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="247" />
         <source>Guard a position.
 Units will defend from all sides.</source>
-        <translation type="unfinished"></translation>
+        <translation>Guard a position.
+Units will defend from all sides.</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="271"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="271" />
         <source>Patrol</source>
-        <translation type="unfinished"></translation>
+        <translation>Patrol</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="280"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="280" />
         <source>Patrol between waypoints.
 Click start and end points.</source>
-        <translation type="unfinished"></translation>
+        <translation>Patrol between waypoints.
+Click start and end points.</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="304"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="304" />
         <source>Stop</source>
-        <translation type="unfinished"></translation>
+        <translation>Stop</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="313"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="313" />
         <source>Stop all actions immediately</source>
-        <translation type="unfinished"></translation>
+        <translation>Stop all actions immediately</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="344"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="344" />
         <source>Hold</source>
-        <translation type="unfinished"></translation>
+        <translation>Hold</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="353"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="353" />
         <source>Exit hold mode (toggle)</source>
-        <translation type="unfinished"></translation>
+        <translation>Exit hold mode (toggle)</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDBottom.qml" line="353"/>
+        <location filename="../ui/qml/HUDBottom.qml" line="353" />
         <source>Hold position and defend</source>
-        <translation type="unfinished"></translation>
+        <translation>Hold position and defend</translation>
     </message>
 </context>
 <context>
     <name>HUDTop</name>
     <message>
-        <location filename="../ui/qml/HUDTop.qml" line="145"/>
+        <location filename="../ui/qml/HUDTop.qml" line="145" />
         <source>Speed:</source>
-        <translation type="unfinished"></translation>
+        <translation>Speed:</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDTop.qml" line="250"/>
+        <location filename="../ui/qml/HUDTop.qml" line="250" />
         <source>Camera:</source>
-        <translation type="unfinished"></translation>
+        <translation>Camera:</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDTop.qml" line="264"/>
+        <location filename="../ui/qml/HUDTop.qml" line="264" />
         <source>Follow</source>
-        <translation type="unfinished"></translation>
+        <translation>Follow</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDTop.qml" line="295"/>
+        <location filename="../ui/qml/HUDTop.qml" line="295" />
         <source>Reset</source>
-        <translation type="unfinished"></translation>
+        <translation>Reset</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDTop.qml" line="458"/>
+        <location filename="../ui/qml/HUDTop.qml" line="458" />
         <source>MINIMAP</source>
-        <translation type="unfinished"></translation>
+        <translation>MINIMAP</translation>
     </message>
 </context>
 <context>
     <name>HUDVictory</name>
     <message>
-        <location filename="../ui/qml/HUDVictory.qml" line="58"/>
+        <location filename="../ui/qml/HUDVictory.qml" line="58" />
         <source>VICTORY!</source>
-        <translation type="unfinished"></translation>
+        <translation>VICTORY!</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDVictory.qml" line="58"/>
+        <location filename="../ui/qml/HUDVictory.qml" line="58" />
         <source>DEFEAT</source>
-        <translation type="unfinished"></translation>
+        <translation>DEFEAT</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDVictory.qml" line="66"/>
+        <location filename="../ui/qml/HUDVictory.qml" line="66" />
         <source>Enemy barracks destroyed!</source>
-        <translation type="unfinished"></translation>
+        <translation>Enemy barracks destroyed!</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDVictory.qml" line="66"/>
+        <location filename="../ui/qml/HUDVictory.qml" line="66" />
         <source>Your barracks was destroyed!</source>
-        <translation type="unfinished"></translation>
+        <translation>Your barracks was destroyed!</translation>
     </message>
     <message>
-        <location filename="../ui/qml/HUDVictory.qml" line="73"/>
+        <location filename="../ui/qml/HUDVictory.qml" line="73" />
         <source>Continue</source>
-        <translation type="unfinished"></translation>
+        <translation>Continue</translation>
     </message>
 </context>
 <context>
     <name>LoadGamePanel</name>
     <message>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="117"/>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="117" />
         <source>Load Game</source>
-        <translation type="unfinished"></translation>
+        <translation>Load Game</translation>
     </message>
     <message>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="125"/>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="125" />
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="164"/>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="188"/>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="405"/>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="164" />
+        <location filename="../ui/qml/LoadGamePanel.qml" line="188" />
+        <location filename="../ui/qml/LoadGamePanel.qml" line="405" />
         <source>No saves found</source>
-        <translation type="unfinished"></translation>
+        <translation>No saves found</translation>
     </message>
     <message>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="243"/>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="243" />
         <source>No Preview</source>
-        <translation type="unfinished"></translation>
+        <translation>No Preview</translation>
     </message>
     <message>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="265"/>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="265" />
         <source>Slot: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Slot: %1</translation>
     </message>
     <message>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="285"/>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="285" />
         <source>Last saved: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Last saved: %1</translation>
     </message>
     <message>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="293"/>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="293" />
         <source>Play time: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Play time: %1</translation>
     </message>
     <message>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="313"/>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="313" />
         <source>Load</source>
-        <translation type="unfinished"></translation>
+        <translation>Load</translation>
     </message>
     <message>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="322"/>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="322" />
         <source>Delete</source>
-        <translation type="unfinished"></translation>
+        <translation>Delete</translation>
     </message>
     <message>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="366"/>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="366" />
         <source>Selected: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Selected: %1</translation>
     </message>
     <message>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="366"/>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="366" />
         <source>Select a save to load</source>
-        <translation type="unfinished"></translation>
+        <translation>Select a save to load</translation>
     </message>
     <message>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="372"/>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="372" />
         <source>Load Selected</source>
-        <translation type="unfinished"></translation>
+        <translation>Load Selected</translation>
     </message>
     <message>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="396"/>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="396" />
         <source>Confirm Delete</source>
-        <translation type="unfinished"></translation>
+        <translation>Confirm Delete</translation>
     </message>
     <message>
-        <location filename="../ui/qml/LoadGamePanel.qml" line="433"/>
+        <location filename="../ui/qml/LoadGamePanel.qml" line="433" />
         <source>Are you sure you want to delete the save:
-&quot;%1&quot;?
+"%1"?
 
 This action cannot be undone.</source>
-        <translation type="unfinished"></translation>
+        <translation>Are you sure you want to delete the save:
+"%1"?
+
+This action cannot be undone.</translation>
     </message>
 </context>
 <context>
     <name>Main</name>
     <message>
-        <location filename="../ui/qml/Main.qml" line="18"/>
+        <location filename="../ui/qml/Main.qml" line="18" />
         <source>Standard of Iron - RTS Game</source>
-        <translation type="unfinished"></translation>
+        <translation>Standard of Iron - RTS Game</translation>
     </message>
     <message>
-        <location filename="../ui/qml/Main.qml" line="92"/>
+        <location filename="../ui/qml/Main.qml" line="92" />
         <source>PAUSED</source>
-        <translation type="unfinished"></translation>
+        <translation>PAUSED</translation>
     </message>
     <message>
-        <location filename="../ui/qml/Main.qml" line="100"/>
+        <location filename="../ui/qml/Main.qml" line="100" />
         <source>Press Space to resume</source>
-        <translation type="unfinished"></translation>
+        <translation>Press Space to resume</translation>
     </message>
 </context>
 <context>
     <name>MainMenu</name>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="84"/>
+        <location filename="../ui/qml/MainMenu.qml" line="84" />
         <source>STANDARD OF IRON</source>
-        <translation type="unfinished"></translation>
+        <translation>STANDARD OF IRON</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="94"/>
+        <location filename="../ui/qml/MainMenu.qml" line="94" />
         <source>A tiny but ambitious RTS</source>
-        <translation type="unfinished"></translation>
+        <translation>A tiny but ambitious RTS</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="109"/>
+        <location filename="../ui/qml/MainMenu.qml" line="109" />
         <source>Play — Skirmish</source>
-        <translation type="unfinished"></translation>
+        <translation>Play — Skirmish</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="110"/>
+        <location filename="../ui/qml/MainMenu.qml" line="110" />
         <source>Select a map and start</source>
-        <translation type="unfinished"></translation>
+        <translation>Select a map and start</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="115"/>
+        <location filename="../ui/qml/MainMenu.qml" line="115" />
         <source>Save Game</source>
-        <translation type="unfinished"></translation>
+        <translation>Save Game</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="116"/>
+        <location filename="../ui/qml/MainMenu.qml" line="116" />
         <source>Save your current progress</source>
-        <translation type="unfinished"></translation>
+        <translation>Save your current progress</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="121"/>
+        <location filename="../ui/qml/MainMenu.qml" line="121" />
         <source>Load Game</source>
-        <translation type="unfinished"></translation>
+        <translation>Load Game</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="122"/>
+        <location filename="../ui/qml/MainMenu.qml" line="122" />
         <source>Resume a previous game</source>
-        <translation type="unfinished"></translation>
+        <translation>Resume a previous game</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="127"/>
+        <location filename="../ui/qml/MainMenu.qml" line="127" />
         <source>Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Settings</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="128"/>
+        <location filename="../ui/qml/MainMenu.qml" line="128" />
         <source>Adjust graphics &amp; controls</source>
-        <translation type="unfinished"></translation>
+        <translation>Adjust graphics &amp; controls</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="133"/>
+        <location filename="../ui/qml/MainMenu.qml" line="133" />
         <source>Exit</source>
-        <translation type="unfinished"></translation>
+        <translation>Exit</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="134"/>
+        <location filename="../ui/qml/MainMenu.qml" line="134" />
         <source>Quit the game</source>
-        <translation type="unfinished"></translation>
+        <translation>Quit the game</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="249"/>
+        <location filename="../ui/qml/MainMenu.qml" line="249" />
         <source>v0.9 — prototype</source>
-        <translation type="unfinished"></translation>
+        <translation>v0.9 — prototype</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="295"/>
+        <location filename="../ui/qml/MainMenu.qml" line="295" />
         <source>Featured</source>
-        <translation type="unfinished"></translation>
+        <translation>Featured</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="303"/>
+        <location filename="../ui/qml/MainMenu.qml" line="303" />
         <source>Skirmish Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Skirmish Mode</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="312"/>
+        <location filename="../ui/qml/MainMenu.qml" line="312" />
         <source>Pick a map, adjust your forces and jump into battle. Modern controls and responsive UI.</source>
-        <translation type="unfinished"></translation>
+        <translation>Pick a map, adjust your forces and jump into battle. Modern controls and responsive UI.</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="338"/>
+        <location filename="../ui/qml/MainMenu.qml" line="338" />
         <source>Tips</source>
-        <translation type="unfinished"></translation>
+        <translation>Tips</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MainMenu.qml" line="346"/>
+        <location filename="../ui/qml/MainMenu.qml" line="346" />
         <source>Hover menu items or use Up/Down and Enter to navigate. Play opens map selection.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hover menu items or use Up/Down and Enter to navigate. Play opens map selection.</translation>
     </message>
 </context>
 <context>
     <name>MapSelect</name>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="271"/>
+        <location filename="../ui/qml/MapSelect.qml" line="271" />
         <source>Maps</source>
-        <translation type="unfinished"></translation>
+        <translation>Maps</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="486"/>
+        <location filename="../ui/qml/MapSelect.qml" line="486" />
         <source>No maps available</source>
-        <translation type="unfinished"></translation>
+        <translation>No maps available</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="519"/>
-        <location filename="../ui/qml/MapSelect.qml" line="596"/>
+        <location filename="../ui/qml/MapSelect.qml" line="519" />
+        <location filename="../ui/qml/MapSelect.qml" line="596" />
         <source>Loading maps...</source>
-        <translation type="unfinished"></translation>
+        <translation>Loading maps...</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="548"/>
+        <location filename="../ui/qml/MapSelect.qml" line="548" />
         <source>► %1</source>
-        <translation type="unfinished"></translation>
+        <translation>► %1</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="548"/>
+        <location filename="../ui/qml/MapSelect.qml" line="548" />
         <source>Select a map to continue</source>
-        <translation type="unfinished"></translation>
+        <translation>Select a map to continue</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="703"/>
+        <location filename="../ui/qml/MapSelect.qml" line="703" />
         <source>Loading map details...</source>
-        <translation type="unfinished"></translation>
+        <translation>Loading map details...</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="720"/>
+        <location filename="../ui/qml/MapSelect.qml" line="720" />
         <source>No Map Selected</source>
-        <translation type="unfinished"></translation>
+        <translation>No Map Selected</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="786"/>
+        <location filename="../ui/qml/MapSelect.qml" line="786" />
         <source>Players</source>
-        <translation type="unfinished"></translation>
+        <translation>Players</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="810"/>
+        <location filename="../ui/qml/MapSelect.qml" line="810" />
         <source>• Click color/team to cycle</source>
-        <translation type="unfinished"></translation>
+        <translation>• Click color/team to cycle</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="888"/>
+        <location filename="../ui/qml/MapSelect.qml" line="888" />
         <source>Player color: %1 - Click to change</source>
-        <translation type="unfinished"></translation>
+        <translation>Player color: %1 - Click to change</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="888"/>
+        <location filename="../ui/qml/MapSelect.qml" line="888" />
         <source>Color</source>
-        <translation type="unfinished"></translation>
+        <translation>Color</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="950"/>
+        <location filename="../ui/qml/MapSelect.qml" line="950" />
         <source>Team %1 - Click to change</source>
-        <translation type="unfinished"></translation>
+        <translation>Team %1 - Click to change</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="966"/>
+        <location filename="../ui/qml/MapSelect.qml" line="966" />
         <source>Team %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Team %1</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="1016"/>
+        <location filename="../ui/qml/MapSelect.qml" line="1016" />
         <source>Remove player</source>
-        <translation type="unfinished"></translation>
+        <translation>Remove player</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="1087"/>
+        <location filename="../ui/qml/MapSelect.qml" line="1087" />
         <source>+ Add CPU</source>
-        <translation type="unfinished"></translation>
+        <translation>+ Add CPU</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="1094"/>
+        <location filename="../ui/qml/MapSelect.qml" line="1094" />
         <source>Add AI opponent</source>
-        <translation type="unfinished"></translation>
+        <translation>Add AI opponent</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="1324"/>
+        <location filename="../ui/qml/MapSelect.qml" line="1324" />
         <source>Back</source>
-        <translation type="unfinished"></translation>
+        <translation>Back</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="1330"/>
+        <location filename="../ui/qml/MapSelect.qml" line="1330" />
         <source>Return to main menu (Esc)</source>
-        <translation type="unfinished"></translation>
+        <translation>Return to main menu (Esc)</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="1404"/>
+        <location filename="../ui/qml/MapSelect.qml" line="1404" />
         <source>Play</source>
-        <translation type="unfinished"></translation>
+        <translation>Play</translation>
     </message>
     <message>
-        <location filename="../ui/qml/MapSelect.qml" line="1411"/>
+        <location filename="../ui/qml/MapSelect.qml" line="1411" />
         <source>Start game (Enter)</source>
-        <translation type="unfinished"></translation>
+        <translation>Start game (Enter)</translation>
     </message>
 </context>
 <context>
     <name>ProductionPanel</name>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="56"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="56" />
         <source>PRODUCTION QUEUE</source>
-        <translation type="unfinished"></translation>
+        <translation>PRODUCTION QUEUE</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="210"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="210" />
         <source>Units Produced: %1 / %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Units Produced: %1 / %2</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="243"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="243" />
         <source>RECRUIT UNITS</source>
-        <translation type="unfinished"></translation>
+        <translation>RECRUIT UNITS</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="280"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="280" />
         <source>Archer</source>
-        <translation type="unfinished"></translation>
+        <translation>Archer</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="316"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="316" />
         <source>Recruit Archer
 Cost: %1 villagers
 Build time: %2s</source>
-        <translation type="unfinished"></translation>
+        <translation>Recruit Archer
+Cost: %1 villagers
+Build time: %2s</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="316"/>
-        <location filename="../ui/qml/ProductionPanel.qml" line="390"/>
-        <location filename="../ui/qml/ProductionPanel.qml" line="464"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="316" />
+        <location filename="../ui/qml/ProductionPanel.qml" line="390" />
+        <location filename="../ui/qml/ProductionPanel.qml" line="464" />
         <source>Queue is full (5/5)</source>
-        <translation type="unfinished"></translation>
+        <translation>Queue is full (5/5)</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="316"/>
-        <location filename="../ui/qml/ProductionPanel.qml" line="390"/>
-        <location filename="../ui/qml/ProductionPanel.qml" line="464"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="316" />
+        <location filename="../ui/qml/ProductionPanel.qml" line="390" />
+        <location filename="../ui/qml/ProductionPanel.qml" line="464" />
         <source>Unit cap reached</source>
-        <translation type="unfinished"></translation>
+        <translation>Unit cap reached</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="316"/>
-        <location filename="../ui/qml/ProductionPanel.qml" line="390"/>
-        <location filename="../ui/qml/ProductionPanel.qml" line="464"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="316" />
+        <location filename="../ui/qml/ProductionPanel.qml" line="390" />
+        <location filename="../ui/qml/ProductionPanel.qml" line="464" />
         <source>Cannot recruit</source>
-        <translation type="unfinished"></translation>
+        <translation>Cannot recruit</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="354"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="354" />
         <source>Knight</source>
-        <translation type="unfinished"></translation>
+        <translation>Knight</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="390"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="390" />
         <source>Recruit Knight
 Cost: %1 villagers
 Build time: %2s</source>
-        <translation type="unfinished"></translation>
+        <translation>Recruit Knight
+Cost: %1 villagers
+Build time: %2s</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="428"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="428" />
         <source>Spearman</source>
-        <translation type="unfinished"></translation>
+        <translation>Spearman</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="464"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="464" />
         <source>Recruit Spearman
 Cost: %1 villagers
 Build time: %2s</source>
-        <translation type="unfinished"></translation>
+        <translation>Recruit Spearman
+Cost: %1 villagers
+Build time: %2s</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="518"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="518" />
         <source>📍 Click Map to Set Rally</source>
-        <translation type="unfinished"></translation>
+        <translation>📍 Click Map to Set Rally</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="518"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="518" />
         <source>📍 Set Rally Point</source>
-        <translation type="unfinished"></translation>
+        <translation>📍 Set Rally Point</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="523"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="523" />
         <source>Set where newly recruited units will gather.
 Right-click to cancel.</source>
-        <translation type="unfinished"></translation>
+        <translation>Set where newly recruited units will gather.
+Right-click to cancel.</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="546"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="546" />
         <source>Right-click to cancel</source>
-        <translation type="unfinished"></translation>
+        <translation>Right-click to cancel</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="583"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="583" />
         <source>No Barracks Selected</source>
-        <translation type="unfinished"></translation>
+        <translation>No Barracks Selected</translation>
     </message>
     <message>
-        <location filename="../ui/qml/ProductionPanel.qml" line="591"/>
+        <location filename="../ui/qml/ProductionPanel.qml" line="591" />
         <source>Select a barracks to recruit units</source>
-        <translation type="unfinished"></translation>
+        <translation>Select a barracks to recruit units</translation>
     </message>
 </context>
 <context>
     <name>SaveGamePanel</name>
     <message>
-        <location filename="../ui/qml/SaveGamePanel.qml" line="72"/>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="72" />
         <source>Save Game</source>
-        <translation type="unfinished"></translation>
+        <translation>Save Game</translation>
     </message>
     <message>
-        <location filename="../ui/qml/SaveGamePanel.qml" line="80"/>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="80" />
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../ui/qml/SaveGamePanel.qml" line="97"/>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="97" />
         <source>Save Name:</source>
-        <translation type="unfinished"></translation>
+        <translation>Save Name:</translation>
     </message>
     <message>
-        <location filename="../ui/qml/SaveGamePanel.qml" line="106"/>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="106" />
         <source>Enter save name...</source>
-        <translation type="unfinished"></translation>
+        <translation>Enter save name...</translation>
     </message>
     <message>
-        <location filename="../ui/qml/SaveGamePanel.qml" line="121"/>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="121" />
         <source>Save</source>
-        <translation type="unfinished"></translation>
+        <translation>Save</translation>
     </message>
     <message>
-        <location filename="../ui/qml/SaveGamePanel.qml" line="137"/>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="137" />
         <source>Existing Saves</source>
-        <translation type="unfinished"></translation>
+        <translation>Existing Saves</translation>
     </message>
     <message>
-        <location filename="../ui/qml/SaveGamePanel.qml" line="231"/>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="231" />
         <source>No Preview</source>
-        <translation type="unfinished"></translation>
+        <translation>No Preview</translation>
     </message>
     <message>
-        <location filename="../ui/qml/SaveGamePanel.qml" line="252"/>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="252" />
         <source>Slot: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Slot: %1</translation>
     </message>
     <message>
-        <location filename="../ui/qml/SaveGamePanel.qml" line="268"/>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="268" />
         <source>Last saved: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Last saved: %1</translation>
     </message>
     <message>
-        <location filename="../ui/qml/SaveGamePanel.qml" line="278"/>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="278" />
         <source>Overwrite</source>
-        <translation type="unfinished"></translation>
+        <translation>Overwrite</translation>
     </message>
     <message>
-        <location filename="../ui/qml/SaveGamePanel.qml" line="316"/>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="316" />
         <source>Confirm Overwrite</source>
-        <translation type="unfinished"></translation>
+        <translation>Confirm Overwrite</translation>
     </message>
     <message>
-        <location filename="../ui/qml/SaveGamePanel.qml" line="335"/>
+        <location filename="../ui/qml/SaveGamePanel.qml" line="335" />
         <source>Are you sure you want to overwrite the save:
-&quot;%1&quot;?</source>
-        <translation type="unfinished"></translation>
+"%1"?</source>
+        <translation>Are you sure you want to overwrite the save:
+"%1"?</translation>
     </message>
 </context>
-</TS>
+</TS>