Add proper translation UI

This commit is contained in:
wheremyfoodat 2024-12-04 20:20:52 +02:00
parent b4d212c510
commit 59016c2ffd
9 changed files with 319 additions and 197 deletions

View file

@ -647,7 +647,7 @@ if(NOT BUILD_HYDRA_CORE AND NOT BUILD_LIBRETRO_CORE)
set(FRONTEND_SOURCE_FILES src/panda_qt/main.cpp src/panda_qt/screen.cpp src/panda_qt/main_window.cpp src/panda_qt/about_window.cpp set(FRONTEND_SOURCE_FILES src/panda_qt/main.cpp src/panda_qt/screen.cpp src/panda_qt/main_window.cpp src/panda_qt/about_window.cpp
src/panda_qt/config_window.cpp src/panda_qt/zep.cpp src/panda_qt/text_editor.cpp src/panda_qt/cheats_window.cpp src/panda_qt/mappings.cpp src/panda_qt/config_window.cpp src/panda_qt/zep.cpp src/panda_qt/text_editor.cpp src/panda_qt/cheats_window.cpp src/panda_qt/mappings.cpp
src/panda_qt/patch_window.cpp src/panda_qt/elided_label.cpp src/panda_qt/shader_editor.cpp src/panda_qt/patch_window.cpp src/panda_qt/elided_label.cpp src/panda_qt/shader_editor.cpp src/panda_qt/translations.cpp
) )
set(FRONTEND_HEADER_FILES include/panda_qt/screen.hpp include/panda_qt/main_window.hpp include/panda_qt/about_window.hpp set(FRONTEND_HEADER_FILES include/panda_qt/screen.hpp include/panda_qt/main_window.hpp include/panda_qt/about_window.hpp
include/panda_qt/config_window.hpp include/panda_qt/text_editor.hpp include/panda_qt/cheats_window.hpp include/panda_qt/config_window.hpp include/panda_qt/text_editor.hpp include/panda_qt/cheats_window.hpp
@ -701,8 +701,8 @@ if(NOT BUILD_HYDRA_CORE AND NOT BUILD_LIBRETRO_CORE)
docs/img/rnap_icon.png docs/img/rcow_icon.png docs/img/skyemu_icon.png docs/img/rnap_icon.png docs/img/rcow_icon.png docs/img/skyemu_icon.png
) )
set(QT_TRANSLATIONS "${PROJECT_SOURCE_DIR}/docs/translations") # Translation files in Qt's .ts format. Will be converted into binary files and embedded into the executable
file(GLOB_RECURSE TRANSLATIONS_TS ${QT_TRANSLATIONS}/*.ts) set(TRANSLATIONS_TS docs/translations/en.ts docs/translations/el.ts)
set_source_files_properties(${TRANSLATIONS_TS} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/translations") set_source_files_properties(${TRANSLATIONS_TS} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/translations")
qt_add_translation(TRANSLATIONS_QM ${TRANSLATIONS_TS}) qt_add_translation(TRANSLATIONS_QM ${TRANSLATIONS_TS})

View file

@ -134,371 +134,396 @@
<translation>Εικονίδιο Παραθύρου</translation> <translation>Εικονίδιο Παραθύρου</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="99"/> <location filename="../../src/panda_qt/config_window.cpp" line="100"/>
<source>Language</source>
<translation>Γλώσσα</translation>
</message>
<message>
<location filename="../../src/panda_qt/config_window.cpp" line="102"/>
<source>Show version on window title</source> <source>Show version on window title</source>
<translation>Εμφάνιση έκδοσης στον τίτλο του παραθύρου</translation> <translation>Εμφάνιση έκδοσης στον τίτλο του παραθύρου</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="106"/> <location filename="../../src/panda_qt/config_window.cpp" line="109"/>
<source>Alber v%1</source> <source>Alber v%1</source>
<translation>Αλβέρτος v%1</translation> <translation>Αλβέρτος v%1</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="106"/> <location filename="../../src/panda_qt/config_window.cpp" line="109"/>
<source>Alber</source> <source>Alber</source>
<translation>Αλβέρτος</translation> <translation>Αλβέρτος</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="111"/> <location filename="../../src/panda_qt/config_window.cpp" line="114"/>
<source>Remember window position</source> <source>Remember window position</source>
<translation>Αποθήκευση θέσης παραθύρου</translation> <translation>Αποθήκευση θέσης παραθύρου</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="116"/> <location filename="../../src/panda_qt/config_window.cpp" line="119"/>
<source>General Settings</source> <source>General Settings</source>
<translation>Γενικές Ρυθμίσεις</translation> <translation>Γενικές Ρυθμίσεις</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="127"/> <location filename="../../src/panda_qt/config_window.cpp" line="130"/>
<source>Browse...</source> <source>Browse...</source>
<translation>Περιήγηση</translation> <translation>Περιήγηση</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="131"/> <location filename="../../src/panda_qt/config_window.cpp" line="134"/>
<source>Select Directory</source> <source>Select Directory</source>
<translation>Επιλογή φακέλου</translation> <translation>Επιλογή φακέλου</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="143"/> <location filename="../../src/panda_qt/config_window.cpp" line="146"/>
<source>Default ROMs path</source> <source>Default ROMs path</source>
<translation>Προεπιλεγμένος φάκελος ROM</translation> <translation>Προεπιλεγμένος φάκελος ROM</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="145"/> <location filename="../../src/panda_qt/config_window.cpp" line="148"/>
<source>Enable Discord RPC</source> <source>Enable Discord RPC</source>
<translation>Ενεργοποίηση Discord RPC</translation> <translation>Ενεργοποίηση Discord RPC</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="149"/> <location filename="../../src/panda_qt/config_window.cpp" line="152"/>
<source>Use portable build</source> <source>Use portable build</source>
<translation>Ενεργοποίηση φορητής εγκατάστασης</translation> <translation>Ενεργοποίηση φορητής εγκατάστασης</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="153"/> <location filename="../../src/panda_qt/config_window.cpp" line="156"/>
<source>Print version in console output</source> <source>Print version in console output</source>
<translation>Εκτύπωση έκδοσης στην κονσόλα</translation> <translation>Εκτύπωση έκδοσης στην κονσόλα</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="158"/> <location filename="../../src/panda_qt/config_window.cpp" line="161"/>
<source>Graphics Settings</source> <source>Graphics Settings</source>
<translation>Ρυθμίσεις Γραφικών</translation> <translation>Ρυθμίσεις Γραφικών</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="164"/> <location filename="../../src/panda_qt/config_window.cpp" line="167"/>
<location filename="../../src/panda_qt/config_window.cpp" line="218"/> <location filename="../../src/panda_qt/config_window.cpp" line="221"/>
<source>Null</source> <source>Null</source>
<translation>Κανένα</translation> <translation>Κανένα</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="165"/> <location filename="../../src/panda_qt/config_window.cpp" line="168"/>
<source>OpenGL</source> <source>OpenGL</source>
<translation type="unfinished"/> <translation type="unfinished"/>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="166"/> <location filename="../../src/panda_qt/config_window.cpp" line="169"/>
<source>Vulkan</source> <source>Vulkan</source>
<translation type="unfinished"/> <translation type="unfinished"/>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="172"/> <location filename="../../src/panda_qt/config_window.cpp" line="175"/>
<source>GPU renderer</source> <source>GPU renderer</source>
<translation>Πυρήνας GPU</translation> <translation>Πυρήνας GPU</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="174"/> <location filename="../../src/panda_qt/config_window.cpp" line="177"/>
<source>Enable Renderdoc</source> <source>Enable Renderdoc</source>
<translation>Ενεργοποίηση Renderdoc</translation> <translation>Ενεργοποίηση Renderdoc</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="178"/> <location filename="../../src/panda_qt/config_window.cpp" line="181"/>
<source>Enable shader JIT</source> <source>Enable shader JIT</source>
<translation>Ενεργοποίηση μεταγλωττιστή shaders</translation> <translation>Ενεργοποίηση μεταγλωττιστή shaders</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="182"/> <location filename="../../src/panda_qt/config_window.cpp" line="185"/>
<source>Enable VSync</source> <source>Enable VSync</source>
<translation>Ενεργοποίηση VSync</translation> <translation>Ενεργοποίηση VSync</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="186"/> <location filename="../../src/panda_qt/config_window.cpp" line="189"/>
<source>Use ubershaders (No stutter, maybe slower)</source> <source>Use ubershaders (No stutter, maybe slower)</source>
<translation>Χρήση ubershaders (Χωρίς stutter, ίσως πιο αργό)</translation> <translation>Χρήση ubershaders (Χωρίς stutter, ίσως πιο αργό)</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="190"/> <location filename="../../src/panda_qt/config_window.cpp" line="193"/>
<source>Accurate shader multiplication</source> <source>Accurate shader multiplication</source>
<translation>Ακριβής πολλαπλασιασμός στα shaders</translation> <translation>Ακριβής πολλαπλασιασμός στα shaders</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="194"/> <location filename="../../src/panda_qt/config_window.cpp" line="197"/>
<source>Accelerate shaders</source> <source>Accelerate shaders</source>
<translation>Επιτάχυνση shaders</translation> <translation>Επιτάχυνση shaders</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="198"/> <location filename="../../src/panda_qt/config_window.cpp" line="201"/>
<source>Force shadergen when rendering lights</source> <source>Force shadergen when rendering lights</source>
<translation>Εξαναγκασμός shadergen όταν υπάρχουν φώτα</translation> <translation>Εξαναγκασμός shadergen όταν υπάρχουν φώτα</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="209"/> <location filename="../../src/panda_qt/config_window.cpp" line="212"/>
<source>Light threshold for forcing shadergen</source> <source>Light threshold for forcing shadergen</source>
<translation>Αριθμός φωτών για εξαναγκασμό shadergen</translation> <translation>Αριθμός φωτών για εξαναγκασμό shadergen</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="212"/> <location filename="../../src/panda_qt/config_window.cpp" line="215"/>
<source>Audio Settings</source> <source>Audio Settings</source>
<translation>Ρυθμίσεις Ήχου</translation> <translation>Ρυθμίσεις Ήχου</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="219"/> <location filename="../../src/panda_qt/config_window.cpp" line="222"/>
<source>LLE</source> <source>LLE</source>
<translation type="unfinished"/> <translation type="unfinished"/>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="220"/> <location filename="../../src/panda_qt/config_window.cpp" line="223"/>
<source>HLE</source> <source>HLE</source>
<translation type="unfinished"/> <translation type="unfinished"/>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="226"/> <location filename="../../src/panda_qt/config_window.cpp" line="229"/>
<source>DSP emulation</source> <source>DSP emulation</source>
<translation>Εξομοίωση DSP</translation> <translation>Εξομοίωση DSP</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="228"/> <location filename="../../src/panda_qt/config_window.cpp" line="231"/>
<source>Enable audio</source> <source>Enable audio</source>
<translation>Ενεργοποίηση ήχου</translation> <translation>Ενεργοποίηση ήχου</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="232"/> <location filename="../../src/panda_qt/config_window.cpp" line="235"/>
<source>Enable AAC audio</source> <source>Enable AAC audio</source>
<translation>Ενεργοποίηση ήχου AAC</translation> <translation>Ενεργοποίηση ήχου AAC</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="236"/> <location filename="../../src/panda_qt/config_window.cpp" line="239"/>
<source>Print DSP firmware</source> <source>Print DSP firmware</source>
<translation>Εκτύπωση λογισμικού DSP</translation> <translation>Εκτύπωση λογισμικού DSP</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="240"/> <location filename="../../src/panda_qt/config_window.cpp" line="243"/>
<source>Mute audio device</source> <source>Mute audio device</source>
<translation>Σίγαση συσκευής ήχου</translation> <translation>Σίγαση συσκευής ήχου</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="245"/> <location filename="../../src/panda_qt/config_window.cpp" line="248"/>
<source>Cubic</source> <source>Cubic</source>
<translation>Κυβική</translation> <translation>Κυβική</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="246"/> <location filename="../../src/panda_qt/config_window.cpp" line="249"/>
<source>Linear</source> <source>Linear</source>
<translation>Γραμμική</translation> <translation>Γραμμική</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="252"/> <location filename="../../src/panda_qt/config_window.cpp" line="255"/>
<source>Volume curve</source> <source>Volume curve</source>
<translation>Κλίμακα ήχου</translation> <translation>Κλίμακα ήχου</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="270"/> <location filename="../../src/panda_qt/config_window.cpp" line="273"/>
<source>Audio device volume</source> <source>Audio device volume</source>
<translation>Ένταση ήχου</translation> <translation>Ένταση ήχου</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="273"/> <location filename="../../src/panda_qt/config_window.cpp" line="276"/>
<source>Battery Settings</source> <source>Battery Settings</source>
<translation>Ρυθμίσεις μπαταρίας</translation> <translation>Ρυθμίσεις μπαταρίας</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="285"/> <location filename="../../src/panda_qt/config_window.cpp" line="288"/>
<source>Battery percentage</source> <source>Battery percentage</source>
<translation>Ποσοστό μπαταρίας</translation> <translation>Ποσοστό μπαταρίας</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="287"/> <location filename="../../src/panda_qt/config_window.cpp" line="290"/>
<source>Charger plugged</source> <source>Charger plugged</source>
<translation>Φορτιστής</translation> <translation>Φορτιστής</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="292"/> <location filename="../../src/panda_qt/config_window.cpp" line="295"/>
<source>SD Card Settings</source> <source>SD Card Settings</source>
<translation>Ρυθμίσης κάρτας SD</translation> <translation>Ρυθμίσης κάρτας SD</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="297"/> <location filename="../../src/panda_qt/config_window.cpp" line="300"/>
<source>Enable virtual SD card</source> <source>Enable virtual SD card</source>
<translation>Ενεργοποίηση εικονικής SD</translation> <translation>Ενεργοποίηση εικονικής SD</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="301"/> <location filename="../../src/panda_qt/config_window.cpp" line="304"/>
<source>Write protect virtual SD card</source> <source>Write protect virtual SD card</source>
<translation>Προστασία της SD από εγγραφή</translation> <translation>Προστασία της SD από εγγραφή</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="306"/> <location filename="../../src/panda_qt/config_window.cpp" line="309"/>
<source>Interface</source> <source>Interface</source>
<translation>Διεπαφή</translation> <translation>Διεπαφή</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="306"/> <location filename="../../src/panda_qt/config_window.cpp" line="309"/>
<source>User Interface settings</source> <source>User Interface settings</source>
<translation>Ρυθμίσεις διεπαφής</translation> <translation>Ρυθμίσεις διεπαφής</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="307"/> <location filename="../../src/panda_qt/config_window.cpp" line="310"/>
<source>General</source> <source>General</source>
<translation>Γενικά</translation> <translation>Γενικά</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="307"/> <location filename="../../src/panda_qt/config_window.cpp" line="310"/>
<source>General emulator settings</source> <source>General emulator settings</source>
<translation>Γενικές ρυθμίσεις εξομοιωτή</translation> <translation>Γενικές ρυθμίσεις εξομοιωτή</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="308"/> <location filename="../../src/panda_qt/config_window.cpp" line="311"/>
<source>Graphics</source> <source>Graphics</source>
<translation>Γραφικά</translation> <translation>Γραφικά</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="308"/> <location filename="../../src/panda_qt/config_window.cpp" line="311"/>
<source>Graphics emulation and output settings</source> <source>Graphics emulation and output settings</source>
<translation>Ρυθμίσεις εξομοίωσης γραφικών</translation> <translation>Ρυθμίσεις εξομοίωσης γραφικών</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="309"/> <location filename="../../src/panda_qt/config_window.cpp" line="312"/>
<source>Audio</source> <source>Audio</source>
<translation>Ήχος</translation> <translation>Ήχος</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="309"/> <location filename="../../src/panda_qt/config_window.cpp" line="312"/>
<source>Audio emulation and output settings</source> <source>Audio emulation and output settings</source>
<translation>Ρυθμίσεις εξομοίωσης ήχου</translation> <translation>Ρυθμίσεις εξομοίωσης ήχου</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="310"/> <location filename="../../src/panda_qt/config_window.cpp" line="313"/>
<source>Battery</source> <source>Battery</source>
<translation>Μπαταρία</translation> <translation>Μπαταρία</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="310"/> <location filename="../../src/panda_qt/config_window.cpp" line="313"/>
<source>Battery emulation settings</source> <source>Battery emulation settings</source>
<translation>Ρυθμίσεις εξομοίωσης μπαταρίας</translation> <translation>Ρυθμίσεις εξομοίωσης μπαταρίας</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="311"/> <location filename="../../src/panda_qt/config_window.cpp" line="314"/>
<source>SD Card</source> <source>SD Card</source>
<translation>Κάρτα SD</translation> <translation>Κάρτα SD</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="311"/> <location filename="../../src/panda_qt/config_window.cpp" line="314"/>
<source>SD Card emulation settings</source> <source>SD Card emulation settings</source>
<translation>Ρυθμίσεις εξομοίωσης κάρτας SD</translation> <translation>Ρυθμίσεις εξομοίωσης κάρτας SD</translation>
</message> </message>
<message>
<location filename="../../src/panda_qt/translations.cpp" line="75"/>
<source>Language change successful</source>
<translation>Επιτυχία αλλαγής γλώσσας</translation>
</message>
<message>
<location filename="../../src/panda_qt/translations.cpp" line="76"/>
<source>Restart Panda3DS for the new language to be used.</source>
<translation>Επανεκκινήστε το Panda3DS για να εφαρμοστεί η νέα γλώσσα.</translation>
</message>
<message>
<location filename="../../src/panda_qt/translations.cpp" line="82"/>
<source>Language change failed</source>
<translation>Αποτυχία αλλαγής γλώσσας</translation>
</message>
<message>
<location filename="../../src/panda_qt/translations.cpp" line="83"/>
<source>The language you selected is not included in Panda3DS. If you&apos;re seeing this, someone messed up the language UI code...</source>
<translation>Το Panda3DS δεν υποστηρίζει τον γλώσσα που επιλέξατε. Αν το βλέπετε αυτό, κάποιος έκανε λάθος στον κώδικα, κατηγορήστε τον Πάρη...</translation>
</message>
</context> </context>
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="19"/> <location filename="../../src/panda_qt/main_window.cpp" line="20"/>
<source>Alber</source> <source>Alber</source>
<translation>Αλβέρτος</translation> <translation>Αλβέρτος</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="37"/> <location filename="../../src/panda_qt/main_window.cpp" line="38"/>
<source>File</source> <source>File</source>
<translation>Αρχείο</translation> <translation>Αρχεία</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="38"/> <location filename="../../src/panda_qt/main_window.cpp" line="39"/>
<source>Emulation</source> <source>Emulation</source>
<translation>Εξομοίωση</translation> <translation>Εξομοίωση</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="39"/> <location filename="../../src/panda_qt/main_window.cpp" line="40"/>
<source>Tools</source> <source>Tools</source>
<translation>Εργαλεία</translation> <translation>Εργαλεία</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="40"/> <location filename="../../src/panda_qt/main_window.cpp" line="41"/>
<source>About</source> <source>About</source>
<translation>Σχετικά</translation> <translation>Σχετικά</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="43"/> <location filename="../../src/panda_qt/main_window.cpp" line="44"/>
<source>Load game</source> <source>Load game</source>
<translation>Φόρτωση παιχνιδιού</translation> <translation>Φόρτωση παιχνιδιού</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="44"/> <location filename="../../src/panda_qt/main_window.cpp" line="45"/>
<source>Load Lua script</source> <source>Load Lua script</source>
<translation>Φόρτωση αρχείου Lua</translation> <translation>Φόρτωση αρχείου Lua</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="45"/> <location filename="../../src/panda_qt/main_window.cpp" line="46"/>
<source>Open Panda3DS folder</source> <source>Open Panda3DS folder</source>
<translation>Άνοιγμα φακέλου Panda3DS</translation> <translation>Άνοιγμα φακέλου Panda3DS</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="54"/> <location filename="../../src/panda_qt/main_window.cpp" line="55"/>
<source>Pause</source> <source>Pause</source>
<translation>Παύση</translation> <translation>Παύση</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="55"/> <location filename="../../src/panda_qt/main_window.cpp" line="56"/>
<source>Resume</source> <source>Resume</source>
<translation>Συνέχεια</translation> <translation>Συνέχεια</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="56"/> <location filename="../../src/panda_qt/main_window.cpp" line="57"/>
<source>Reset</source> <source>Reset</source>
<translation>Επανέναρξη</translation> <translation>Επανέναρξη</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="57"/> <location filename="../../src/panda_qt/main_window.cpp" line="58"/>
<source>Configure</source> <source>Configure</source>
<translation>Ρύθμιση</translation> <translation>Ρύθμιση</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="63"/> <location filename="../../src/panda_qt/main_window.cpp" line="64"/>
<source>Dump RomFS</source> <source>Dump RomFS</source>
<translation type="unfinished"/> <translation type="unfinished"/>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="64"/> <location filename="../../src/panda_qt/main_window.cpp" line="65"/>
<source>Open Lua Editor</source> <source>Open Lua Editor</source>
<translation>Άνοιγμα Lua Editor</translation> <translation>Άνοιγμα Lua Editor</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="65"/> <location filename="../../src/panda_qt/main_window.cpp" line="66"/>
<source>Open Cheats Editor</source> <source>Open Cheats Editor</source>
<translation>Άνοιγμα Editor κωδικών</translation> <translation>Άνοιγμα Editor κωδικών</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="66"/> <location filename="../../src/panda_qt/main_window.cpp" line="67"/>
<source>Open Patch Window</source> <source>Open Patch Window</source>
<translation>Άνοιγμα παραθύρου για patching</translation> <translation>Άνοιγμα παραθύρου για patching</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="67"/> <location filename="../../src/panda_qt/main_window.cpp" line="68"/>
<source>Open Shader Editor</source> <source>Open Shader Editor</source>
<translation type="unfinished"/> <translation type="unfinished"/>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="68"/> <location filename="../../src/panda_qt/main_window.cpp" line="69"/>
<source>Dump loaded DSP firmware</source> <source>Dump loaded DSP firmware</source>
<translation type="unfinished"/> <translation type="unfinished"/>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="77"/> <location filename="../../src/panda_qt/main_window.cpp" line="78"/>
<source>About Panda3DS</source> <source>About Panda3DS</source>
<translation>Σχετικά με το Panda3DS</translation> <translation>Σχετικά με το Panda3DS</translation>
</message> </message>
@ -552,7 +577,7 @@
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="299"/> <location filename="../../src/panda_qt/main_window.cpp" line="299"/>
<source>No RomFS partition was found in the loaded app</source> <source>No RomFS partition was found in the loaded app</source>
<translation type="unfinished"/> <translation>Δεν βρέθηκε RomFS στην εφαρμογή που έχει φορτωθεί</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="305"/> <location filename="../../src/panda_qt/main_window.cpp" line="305"/>
@ -567,7 +592,7 @@
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="320"/> <location filename="../../src/panda_qt/main_window.cpp" line="320"/>
<source>No DSP firmware loaded</source> <source>No DSP firmware loaded</source>
<translation type="unfinished"/> <translation>Δεν έχει φορτωθεί DSP firmware</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="320"/> <location filename="../../src/panda_qt/main_window.cpp" line="320"/>
@ -577,7 +602,7 @@
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="331"/> <location filename="../../src/panda_qt/main_window.cpp" line="331"/>
<source>Failed to open output file</source> <source>Failed to open output file</source>
<translation type="unfinished"/> <translation>Αποτυχία ανοίγματος του αρχείου εξόδου</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="332"/> <location filename="../../src/panda_qt/main_window.cpp" line="332"/>
@ -638,7 +663,7 @@
<message> <message>
<location filename="../../src/panda_qt/patch_window.cpp" line="71"/> <location filename="../../src/panda_qt/patch_window.cpp" line="71"/>
<source>Please provide paths for both the input file and the patch file</source> <source>Please provide paths for both the input file and the patch file</source>
<translation type="unfinished"/> <translation>Παρακαλούμε διαλέξτε και αρχείο εισόδου και αρχείο patch</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/patch_window.cpp" line="80"/> <location filename="../../src/panda_qt/patch_window.cpp" line="80"/>
@ -648,32 +673,32 @@
<message> <message>
<location filename="../../src/panda_qt/patch_window.cpp" line="84"/> <location filename="../../src/panda_qt/patch_window.cpp" line="84"/>
<source>No output path</source> <source>No output path</source>
<translation type="unfinished"/> <translation>Δεν επιλέχθηκε φάκελος εξόδου</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/patch_window.cpp" line="84"/> <location filename="../../src/panda_qt/patch_window.cpp" line="84"/>
<source>No path was provided for the output file, no patching was done</source> <source>No path was provided for the output file, no patching was done</source>
<translation type="unfinished"/> <translation>Δεν επιλέχθηκε αρχείο εξόδου. Δεν έγινε patching</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/patch_window.cpp" line="99"/> <location filename="../../src/panda_qt/patch_window.cpp" line="99"/>
<source>Unknown patch format</source> <source>Unknown patch format</source>
<translation type="unfinished"/> <translation>Άγνωστο είδος patch</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/patch_window.cpp" line="99"/> <location filename="../../src/panda_qt/patch_window.cpp" line="99"/>
<source>Unknown format for patch file. Currently IPS, UPS and BPS are supported</source> <source>Unknown format for patch file. Currently IPS, UPS and BPS are supported</source>
<translation type="unfinished"/> <translation>Άγνωστο είδος αρχείου patch. Υποστηρίζονται αρχεία IPS, UPS και BPS</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/patch_window.cpp" line="108"/> <location filename="../../src/panda_qt/patch_window.cpp" line="108"/>
<source>Failed to open input files</source> <source>Failed to open input files</source>
<translation type="unfinished"/> <translation>Αποτυχία ανοίγματος των αρχείων εισόδου</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/patch_window.cpp" line="108"/> <location filename="../../src/panda_qt/patch_window.cpp" line="108"/>
<source>Make sure they&apos;re in a directory Panda3DS has access to</source> <source>Make sure they&apos;re in a directory Panda3DS has access to</source>
<translation type="unfinished"/> <translation>Βεβαιωθείτε ότι είναι σε φάκελο που έχει πρόσβαση το Panda3DS</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/patch_window.cpp" line="135"/> <location filename="../../src/panda_qt/patch_window.cpp" line="135"/>
@ -693,17 +718,17 @@
<message> <message>
<location filename="../../src/panda_qt/patch_window.cpp" line="142"/> <location filename="../../src/panda_qt/patch_window.cpp" line="142"/>
<source>Patch was applied successfully but a checksum mismatch was detected. The input or output files might not be correct</source> <source>Patch was applied successfully but a checksum mismatch was detected. The input or output files might not be correct</source>
<translation type="unfinished"/> <translation>Το patch εφαρμόστηκε με επιτυχία αλλά ανιχνεύτηκε σφάλμα στο checksum. Ενδέχεται τα αρχεία εισόδου η εξόδου να είναι λανθασμένα</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/patch_window.cpp" line="146"/> <location filename="../../src/panda_qt/patch_window.cpp" line="146"/>
<source>Patching error</source> <source>Patching error</source>
<translation type="unfinished"/> <translation>Σφάλμα στο patching</translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/patch_window.cpp" line="146"/> <location filename="../../src/panda_qt/patch_window.cpp" line="146"/>
<source>An error occured while patching</source> <source>An error occured while patching</source>
<translation type="unfinished"/> <translation>Προέκυψε σφάλμα στο patching</translation>
</message> </message>
</context> </context>
<context> <context>
@ -719,7 +744,7 @@
<message> <message>
<location filename="../../src/panda_qt/shader_editor.cpp" line="26"/> <location filename="../../src/panda_qt/shader_editor.cpp" line="26"/>
<source>Reload shader</source> <source>Reload shader</source>
<translation type="unfinished"/> <translation>Επαναφόρτωση shader</translation>
</message> </message>
</context> </context>
<context> <context>

View file

@ -136,371 +136,397 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="99"/> <location filename="../../src/panda_qt/config_window.cpp" line="100"/>
<source>Language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/panda_qt/config_window.cpp" line="102"/>
<source>Show version on window title</source> <source>Show version on window title</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="106"/> <location filename="../../src/panda_qt/config_window.cpp" line="15"/>
<location filename="../../src/panda_qt/config_window.cpp" line="109"/>
<source>Alber v%1</source> <source>Alber v%1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="106"/> <location filename="../../src/panda_qt/config_window.cpp" line="109"/>
<source>Alber</source> <source>Alber</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="111"/> <location filename="../../src/panda_qt/config_window.cpp" line="114"/>
<source>Remember window position</source> <source>Remember window position</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="116"/> <location filename="../../src/panda_qt/config_window.cpp" line="119"/>
<source>General Settings</source> <source>General Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="127"/> <location filename="../../src/panda_qt/config_window.cpp" line="130"/>
<source>Browse...</source> <source>Browse...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="131"/> <location filename="../../src/panda_qt/config_window.cpp" line="134"/>
<source>Select Directory</source> <source>Select Directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="143"/> <location filename="../../src/panda_qt/config_window.cpp" line="146"/>
<source>Default ROMs path</source> <source>Default ROMs path</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="145"/> <location filename="../../src/panda_qt/config_window.cpp" line="148"/>
<source>Enable Discord RPC</source> <source>Enable Discord RPC</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="149"/> <location filename="../../src/panda_qt/config_window.cpp" line="152"/>
<source>Use portable build</source> <source>Use portable build</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="153"/> <location filename="../../src/panda_qt/config_window.cpp" line="156"/>
<source>Print version in console output</source> <source>Print version in console output</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="158"/> <location filename="../../src/panda_qt/config_window.cpp" line="161"/>
<source>Graphics Settings</source> <source>Graphics Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="164"/> <location filename="../../src/panda_qt/config_window.cpp" line="167"/>
<location filename="../../src/panda_qt/config_window.cpp" line="218"/> <location filename="../../src/panda_qt/config_window.cpp" line="221"/>
<source>Null</source> <source>Null</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="165"/> <location filename="../../src/panda_qt/config_window.cpp" line="168"/>
<source>OpenGL</source> <source>OpenGL</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="166"/> <location filename="../../src/panda_qt/config_window.cpp" line="169"/>
<source>Vulkan</source> <source>Vulkan</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="172"/> <location filename="../../src/panda_qt/config_window.cpp" line="175"/>
<source>GPU renderer</source> <source>GPU renderer</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="174"/> <location filename="../../src/panda_qt/config_window.cpp" line="177"/>
<source>Enable Renderdoc</source> <source>Enable Renderdoc</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="178"/> <location filename="../../src/panda_qt/config_window.cpp" line="181"/>
<source>Enable shader JIT</source> <source>Enable shader JIT</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="182"/> <location filename="../../src/panda_qt/config_window.cpp" line="185"/>
<source>Enable VSync</source> <source>Enable VSync</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="186"/> <location filename="../../src/panda_qt/config_window.cpp" line="189"/>
<source>Use ubershaders (No stutter, maybe slower)</source> <source>Use ubershaders (No stutter, maybe slower)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="190"/> <location filename="../../src/panda_qt/config_window.cpp" line="193"/>
<source>Accurate shader multiplication</source> <source>Accurate shader multiplication</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="194"/> <location filename="../../src/panda_qt/config_window.cpp" line="197"/>
<source>Accelerate shaders</source> <source>Accelerate shaders</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="198"/> <location filename="../../src/panda_qt/config_window.cpp" line="201"/>
<source>Force shadergen when rendering lights</source> <source>Force shadergen when rendering lights</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="209"/> <location filename="../../src/panda_qt/config_window.cpp" line="212"/>
<source>Light threshold for forcing shadergen</source> <source>Light threshold for forcing shadergen</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="212"/> <location filename="../../src/panda_qt/config_window.cpp" line="215"/>
<source>Audio Settings</source> <source>Audio Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="219"/> <location filename="../../src/panda_qt/config_window.cpp" line="222"/>
<source>LLE</source> <source>LLE</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="220"/> <location filename="../../src/panda_qt/config_window.cpp" line="223"/>
<source>HLE</source> <source>HLE</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="226"/> <location filename="../../src/panda_qt/config_window.cpp" line="229"/>
<source>DSP emulation</source> <source>DSP emulation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="228"/> <location filename="../../src/panda_qt/config_window.cpp" line="231"/>
<source>Enable audio</source> <source>Enable audio</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="232"/> <location filename="../../src/panda_qt/config_window.cpp" line="235"/>
<source>Enable AAC audio</source> <source>Enable AAC audio</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="236"/> <location filename="../../src/panda_qt/config_window.cpp" line="239"/>
<source>Print DSP firmware</source> <source>Print DSP firmware</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="240"/> <location filename="../../src/panda_qt/config_window.cpp" line="243"/>
<source>Mute audio device</source> <source>Mute audio device</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="245"/> <location filename="../../src/panda_qt/config_window.cpp" line="248"/>
<source>Cubic</source> <source>Cubic</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="246"/> <location filename="../../src/panda_qt/config_window.cpp" line="249"/>
<source>Linear</source> <source>Linear</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="252"/> <location filename="../../src/panda_qt/config_window.cpp" line="255"/>
<source>Volume curve</source> <source>Volume curve</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="270"/> <location filename="../../src/panda_qt/config_window.cpp" line="273"/>
<source>Audio device volume</source> <source>Audio device volume</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="273"/> <location filename="../../src/panda_qt/config_window.cpp" line="276"/>
<source>Battery Settings</source> <source>Battery Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="285"/> <location filename="../../src/panda_qt/config_window.cpp" line="288"/>
<source>Battery percentage</source> <source>Battery percentage</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="287"/> <location filename="../../src/panda_qt/config_window.cpp" line="290"/>
<source>Charger plugged</source> <source>Charger plugged</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="292"/> <location filename="../../src/panda_qt/config_window.cpp" line="295"/>
<source>SD Card Settings</source> <source>SD Card Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="297"/> <location filename="../../src/panda_qt/config_window.cpp" line="300"/>
<source>Enable virtual SD card</source> <source>Enable virtual SD card</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="301"/> <location filename="../../src/panda_qt/config_window.cpp" line="304"/>
<source>Write protect virtual SD card</source> <source>Write protect virtual SD card</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="306"/> <location filename="../../src/panda_qt/config_window.cpp" line="309"/>
<source>Interface</source> <source>Interface</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="306"/> <location filename="../../src/panda_qt/config_window.cpp" line="309"/>
<source>User Interface settings</source> <source>User Interface settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="307"/> <location filename="../../src/panda_qt/config_window.cpp" line="310"/>
<source>General</source> <source>General</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="307"/> <location filename="../../src/panda_qt/config_window.cpp" line="310"/>
<source>General emulator settings</source> <source>General emulator settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="308"/> <location filename="../../src/panda_qt/config_window.cpp" line="311"/>
<source>Graphics</source> <source>Graphics</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="308"/> <location filename="../../src/panda_qt/config_window.cpp" line="311"/>
<source>Graphics emulation and output settings</source> <source>Graphics emulation and output settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="309"/> <location filename="../../src/panda_qt/config_window.cpp" line="312"/>
<source>Audio</source> <source>Audio</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="309"/> <location filename="../../src/panda_qt/config_window.cpp" line="312"/>
<source>Audio emulation and output settings</source> <source>Audio emulation and output settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="310"/> <location filename="../../src/panda_qt/config_window.cpp" line="313"/>
<source>Battery</source> <source>Battery</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="310"/> <location filename="../../src/panda_qt/config_window.cpp" line="313"/>
<source>Battery emulation settings</source> <source>Battery emulation settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="311"/> <location filename="../../src/panda_qt/config_window.cpp" line="314"/>
<source>SD Card</source> <source>SD Card</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/config_window.cpp" line="311"/> <location filename="../../src/panda_qt/config_window.cpp" line="314"/>
<source>SD Card emulation settings</source> <source>SD Card emulation settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../../src/panda_qt/translations.cpp" line="75"/>
<source>Language change successful</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/panda_qt/translations.cpp" line="76"/>
<source>Restart Panda3DS for the new language to be used.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/panda_qt/translations.cpp" line="82"/>
<source>Language change failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../src/panda_qt/translations.cpp" line="83"/>
<source>The language you selected is not included in Panda3DS. If you&apos;re seeing this, someone messed up the language UI code...</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="19"/> <location filename="../../src/panda_qt/main_window.cpp" line="20"/>
<source>Alber</source> <source>Alber</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="37"/> <location filename="../../src/panda_qt/main_window.cpp" line="38"/>
<source>File</source> <source>File</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="38"/> <location filename="../../src/panda_qt/main_window.cpp" line="39"/>
<source>Emulation</source> <source>Emulation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="39"/> <location filename="../../src/panda_qt/main_window.cpp" line="40"/>
<source>Tools</source> <source>Tools</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="40"/> <location filename="../../src/panda_qt/main_window.cpp" line="41"/>
<source>About</source> <source>About</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="43"/> <location filename="../../src/panda_qt/main_window.cpp" line="44"/>
<source>Load game</source> <source>Load game</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="44"/> <location filename="../../src/panda_qt/main_window.cpp" line="45"/>
<source>Load Lua script</source> <source>Load Lua script</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="45"/> <location filename="../../src/panda_qt/main_window.cpp" line="46"/>
<source>Open Panda3DS folder</source> <source>Open Panda3DS folder</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="54"/> <location filename="../../src/panda_qt/main_window.cpp" line="55"/>
<source>Pause</source> <source>Pause</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="55"/> <location filename="../../src/panda_qt/main_window.cpp" line="56"/>
<source>Resume</source> <source>Resume</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="56"/> <location filename="../../src/panda_qt/main_window.cpp" line="57"/>
<source>Reset</source> <source>Reset</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="57"/> <location filename="../../src/panda_qt/main_window.cpp" line="58"/>
<source>Configure</source> <source>Configure</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="63"/> <location filename="../../src/panda_qt/main_window.cpp" line="64"/>
<source>Dump RomFS</source> <source>Dump RomFS</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="64"/> <location filename="../../src/panda_qt/main_window.cpp" line="65"/>
<source>Open Lua Editor</source> <source>Open Lua Editor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="65"/> <location filename="../../src/panda_qt/main_window.cpp" line="66"/>
<source>Open Cheats Editor</source> <source>Open Cheats Editor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="66"/> <location filename="../../src/panda_qt/main_window.cpp" line="67"/>
<source>Open Patch Window</source> <source>Open Patch Window</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="67"/> <location filename="../../src/panda_qt/main_window.cpp" line="68"/>
<source>Open Shader Editor</source> <source>Open Shader Editor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="68"/> <location filename="../../src/panda_qt/main_window.cpp" line="69"/>
<source>Dump loaded DSP firmware</source> <source>Dump loaded DSP firmware</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../src/panda_qt/main_window.cpp" line="77"/> <location filename="../../src/panda_qt/main_window.cpp" line="78"/>
<source>About Panda3DS</source> <source>About Panda3DS</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View file

@ -24,6 +24,7 @@ struct FrontendSettings {
Theme theme = Theme::Dark; Theme theme = Theme::Dark;
WindowIcon icon = WindowIcon::Rpog; WindowIcon icon = WindowIcon::Rpog;
std::string language = "en";
static Theme themeFromString(std::string inString); static Theme themeFromString(std::string inString);
static const char* themeToString(Theme theme); static const char* themeToString(Theme theme);

View file

@ -45,6 +45,8 @@ class ConfigWindow : public QDialog {
void setTheme(FrontendSettings::Theme theme); void setTheme(FrontendSettings::Theme theme);
void setIcon(FrontendSettings::WindowIcon icon); void setIcon(FrontendSettings::WindowIcon icon);
QComboBox* createLanguageSelect();
public: public:
ConfigWindow(ConfigCallback configCallback, MainWindowCallback windowCallback, const EmulatorConfig& config, QWidget* parent = nullptr); ConfigWindow(ConfigCallback configCallback, MainWindowCallback windowCallback, const EmulatorConfig& config, QWidget* parent = nullptr);
~ConfigWindow(); ~ConfigWindow();

View file

@ -141,6 +141,7 @@ void EmulatorConfig::load() {
frontendSettings.theme = FrontendSettings::themeFromString(toml::find_or<std::string>(ui, "Theme", "dark")); frontendSettings.theme = FrontendSettings::themeFromString(toml::find_or<std::string>(ui, "Theme", "dark"));
frontendSettings.icon = FrontendSettings::iconFromString(toml::find_or<std::string>(ui, "WindowIcon", "rpog")); frontendSettings.icon = FrontendSettings::iconFromString(toml::find_or<std::string>(ui, "WindowIcon", "rpog"));
frontendSettings.language = toml::find_or<std::string>(ui, "Language", "en");
} }
} }
} }
@ -202,6 +203,7 @@ void EmulatorConfig::save() {
data["UI"]["Theme"] = std::string(FrontendSettings::themeToString(frontendSettings.theme)); data["UI"]["Theme"] = std::string(FrontendSettings::themeToString(frontendSettings.theme));
data["UI"]["WindowIcon"] = std::string(FrontendSettings::iconToString(frontendSettings.icon)); data["UI"]["WindowIcon"] = std::string(FrontendSettings::iconToString(frontendSettings.icon));
data["UI"]["Language"] = frontendSettings.language;
std::ofstream file(path, std::ios::out); std::ofstream file(path, std::ios::out);
file << data; file << data;

View file

@ -12,7 +12,7 @@ ConfigWindow::ConfigWindow(ConfigCallback configCallback, MainWindowCallback win
// Set the window title of the main window appropriately if we enable showing the app version on the window // Set the window title of the main window appropriately if we enable showing the app version on the window
if (config.windowSettings.showAppVersion) { if (config.windowSettings.showAppVersion) {
getMainWindow()->setWindowTitle("Alber v" PANDA3DS_VERSION); getMainWindow()->setWindowTitle(tr("Alber v%1").arg(PANDA3DS_VERSION));
} }
// Initialize the widget list and the widget container widgets // Initialize the widget list and the widget container widgets
@ -96,6 +96,9 @@ ConfigWindow::ConfigWindow(ConfigCallback configCallback, MainWindowCallback win
}); });
guiLayout->addRow(tr("Window icon"), iconSelect); guiLayout->addRow(tr("Window icon"), iconSelect);
QComboBox* languageSelect = createLanguageSelect();
guiLayout->addRow(tr("Language"), languageSelect);
QCheckBox* showAppVersion = new QCheckBox(tr("Show version on window title")); QCheckBox* showAppVersion = new QCheckBox(tr("Show version on window title"));
showAppVersion->setChecked(config.windowSettings.showAppVersion); showAppVersion->setChecked(config.windowSettings.showAppVersion);
connect(showAppVersion, &QCheckBox::toggled, this, [&](bool checked) { connect(showAppVersion, &QCheckBox::toggled, this, [&](bool checked) {

View file

@ -3,7 +3,6 @@
#include <QDesktopServices> #include <QDesktopServices>
#include <QFileDialog> #include <QFileDialog>
#include <QString> #include <QString>
#include <QTranslator>
#include <cmath> #include <cmath>
#include <cstdio> #include <cstdio>
#include <fstream> #include <fstream>
@ -15,6 +14,8 @@
#include "version.hpp" #include "version.hpp"
MainWindow::MainWindow(QApplication* app, QWidget* parent) : QMainWindow(parent), keyboardMappings(InputMappings::defaultKeyboardMappings()) { MainWindow::MainWindow(QApplication* app, QWidget* parent) : QMainWindow(parent), keyboardMappings(InputMappings::defaultKeyboardMappings()) {
emu = new Emulator();
loadTranslation(); loadTranslation();
setWindowTitle(tr("Alber")); setWindowTitle(tr("Alber"));
@ -77,7 +78,6 @@ MainWindow::MainWindow(QApplication* app, QWidget* parent) : QMainWindow(parent)
auto aboutAction = aboutMenu->addAction(tr("About Panda3DS")); auto aboutAction = aboutMenu->addAction(tr("About Panda3DS"));
connect(aboutAction, &QAction::triggered, this, &MainWindow::showAboutMenu); connect(aboutAction, &QAction::triggered, this, &MainWindow::showAboutMenu);
emu = new Emulator();
emu->setOutputSize(screen->surfaceWidth, screen->surfaceHeight); emu->setOutputSize(screen->surfaceWidth, screen->surfaceHeight);
// Set up misc objects // Set up misc objects
@ -680,32 +680,4 @@ void MainWindow::setupControllerSensors(SDL_GameController* controller) {
if (haveAccelerometer) { if (haveAccelerometer) {
SDL_GameControllerSetSensorEnabled(controller, SDL_SENSOR_ACCEL, SDL_TRUE); SDL_GameControllerSetSensorEnabled(controller, SDL_SENSOR_ACCEL, SDL_TRUE);
} }
}
void MainWindow::loadTranslation() {
// TODO: This should become a member variable when we allow changing language at runtime.
QTranslator* translator = nullptr;
auto language = QString::fromStdString("el");
const QString baseDir = QStringLiteral(":/translations");
QString basePath = QStringLiteral("%1/%2.qm").arg(baseDir).arg(language);
if (QFile::exists(basePath)) {
if (translator != nullptr) {
qApp->removeTranslator(translator);
}
translator = new QTranslator(qApp);
if (!translator->load(basePath)) {
QMessageBox::warning(
nullptr, QStringLiteral("Translation Error"),
QStringLiteral("Failed to find load translation file for '%1':\n%2").arg(language).arg(basePath)
);
delete translator;
} else {
qApp->installTranslator(translator);
}
} else {
printf("Language file %s does not exist\n", basePath.toStdString().c_str());
}
} }

View file

@ -0,0 +1,91 @@
#include <QFile>
#include <QTranslator>
#include <array>
#include <cstdio>
#include "panda_qt/config_window.hpp"
#include "panda_qt/main_window.hpp"
void MainWindow::loadTranslation() {
// TODO: This should become a member variable when we allow changing language at runtime.
QTranslator* translator = nullptr;
// Fetch the .qm file for our language and load it
auto language = QString::fromStdString(emu->getConfig().frontendSettings.language);
const QString baseDir = QStringLiteral(":/translations");
const QString basePath = QStringLiteral("%1/%2.qm").arg(baseDir).arg(language);
if (QFile::exists(basePath)) {
if (translator != nullptr) {
qApp->removeTranslator(translator);
}
translator = new QTranslator(qApp);
if (!translator->load(basePath)) {
QMessageBox::warning(
nullptr, QStringLiteral("Translation Error"),
QStringLiteral("Failed to find load translation file for '%1':\n%2").arg(language).arg(basePath)
);
delete translator;
} else {
qApp->installTranslator(translator);
}
} else {
printf("Language file %s does not exist. Defaulting to English\n", basePath.toStdString().c_str());
}
}
struct LanguageInfo {
QString name; // Full name of the language (for example "English (US)")
const char* code; // ISO 639 language code (for example "en_us")
explicit LanguageInfo(const QString& name, const char* code) : name(name), code(code) {}
};
// List of languages in the order they should appear in the menu
// Please keep this list mostly in alphabetical order.
// Also, for Unicode characters in language names, use Unicode keycodes instead of writing out the name,
// as some compilers/toolchains may not enjoy Unicode in source files.
static std::array<LanguageInfo, 2> languages = {
LanguageInfo(QStringLiteral(u"English"), "en"), // English
LanguageInfo(QStringLiteral(u"\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC"), "el"), // Greek
};
QComboBox* ConfigWindow::createLanguageSelect() {
QComboBox* select = new QComboBox();
for (usize i = 0; i < languages.size(); i++) {
const auto& lang = languages[i];
select->addItem(lang.name);
if (config.frontendSettings.language == lang.code) {
select->setCurrentIndex(i);
}
}
connect(select, &QComboBox::currentIndexChanged, this, [&](int index) {
const QString baseDir = QStringLiteral(":/translations");
const QString basePath = QStringLiteral("%1/%2.qm").arg(baseDir).arg(languages[index].code);
if (QFile::exists(basePath)) {
config.frontendSettings.language = languages[index].code;
updateConfig();
QMessageBox messageBox(
QMessageBox::Icon::Information, tr("Language change successful"),
tr("Restart Panda3DS for the new language to be used.")
);
messageBox.exec();
} else {
QMessageBox messageBox(
QMessageBox::Icon::Warning, tr("Language change failed"),
tr("The language you selected is not included in Panda3DS. If you're seeing this, someone messed up the language UI code...")
);
messageBox.exec();
}
});
return select;
}