From 56185e8a1bd7a270a16b9e9a48eddd78d05d16bc Mon Sep 17 00:00:00 2001 From: J-D-K Date: Wed, 26 Nov 2025 15:55:07 -0500 Subject: [PATCH] Add English Safe Titles option. Code revisions. --- Assets/Text/DE.json | 70 ++++++++++++----------- Assets/Text/ENGB.json | 70 ++++++++++++----------- Assets/Text/ENUS.json | 70 ++++++++++++----------- Assets/Text/ES.json | 70 ++++++++++++----------- Assets/Text/ES419.json | 70 ++++++++++++----------- Assets/Text/FR.json | 70 ++++++++++++----------- Assets/Text/FRCA.json | 72 ++++++++++++------------ Assets/Text/IT.json | 70 ++++++++++++----------- Assets/Text/JA.json | 70 ++++++++++++----------- Assets/Text/KO.json | 72 ++++++++++++------------ Assets/Text/NL.json | 70 ++++++++++++----------- Assets/Text/PT.json | 70 ++++++++++++----------- Assets/Text/PTBR.json | 70 ++++++++++++----------- Assets/Text/RU.json | 68 +++++++++++----------- Assets/Text/ZHCN.json | 70 ++++++++++++----------- Assets/Text/ZHTW.json | 70 ++++++++++++----------- include/config/ConfigContext.hpp | 22 ++------ include/config/keys.hpp | 1 + include/data/TitleInfo.hpp | 4 ++ include/error.hpp | 6 ++ source/appstates/SettingsState.cpp | 90 +++++++++++++++--------------- source/config/ConfigContext.cpp | 68 ++++++++++++---------- source/config/config.cpp | 16 ++---- source/data/TitleInfo.cpp | 46 ++++++++++++++- source/error.cpp | 30 +++++++++- source/tasks/backup.cpp | 31 ++++------ source/tasks/savecreate.cpp | 4 +- source/tasks/saveimport.cpp | 2 +- source/tasks/titleoptions.cpp | 18 ++---- source/tasks/useroptions.cpp | 6 +- source/ui/Menu.cpp | 15 ++++- 31 files changed, 790 insertions(+), 691 deletions(-) diff --git a/Assets/Text/DE.json b/Assets/Text/DE.json index c0e5749..d634932 100644 --- a/Assets/Text/DE.json +++ b/Assets/Text/DE.json @@ -167,23 +167,24 @@ "5: Lädt Backups automatisch in den Remote-Speicher hoch und löscht sie lokal.", "6: Behaltet das lokale Backup, das erstellt wurde, wenn das automatische Hochladen aktiviert ist, anstatt es zu löschen.", "7: Verwendet immer Anwendungs-IDs für Exportordnernamen.", - "8: Ob das Halten von [A] für drei Sekunden erforderlich ist, um Backups zu löschen.", - "9: Ob das Halten von [A] für drei Sekunden erforderlich ist, um Backups wiederherzustellen.", - "10: Ob das Halten von [A] für drei Sekunden erforderlich ist, um Backups zu überschreiben.", - "11: Zeigt beim Start nur Speicherstände an, die JKSV erfolgreich öffnen kann.", - "12: Zeigt Systemspeicherstände, die an ein Konto gebunden sind.", - "13: Aktiviert das Wiederherstellen von Systemspeicherständen und das Schreiben auf NAND-Partitionen. *Dies kann gefährlich sein.*", - "14: Exportiert Speicherstände als ZIP-Archive statt als entpackte Ordner.", - "15: Kompressions- oder Deflate-Level beim Schreiben in ZIP. Der Standardwert ist 6. Niedrigere Werte sind schneller, bieten aber weniger Kompression und Speicherplatzersparnis. Null bedeutet 'Store' oder keine Kompression.", - "16: Steuert die Art und Weise, wie Titel sortiert und angezeigt werden.", - "17: Zeigt Titel als Textmenüs wie im ursprünglichen JKSM auf dem 3DS an, anstatt als Symbolraster.", - "18: Erzwingt die Verwendung von Englisch anstelle der erkannten Systemsprache.", - "19: Ob gemeinsam genutzte Speicherstände aller Benutzer geladen und angezeigt werden. *Dies erfordert einen Neustart, um wirksam zu werden!*", - "20: Ob BCAT-Speicherstände geladen und angezeigt werden. Diese werden häufig verwendet, um Spielinhalte und Ereignisse außerhalb vollständiger Updates zu verteilen. *Dies erfordert einen Neustart, um wirksam zu werden!*", - "21: Ob Cache-Speicherstände geladen und angezeigt werden. Diese können zur Speicherung von DLC und verschiedenen anderen Dingen verwendet werden. *Dies erfordert einen Neustart, um wirksam zu werden!*", - "22: Ob Systemspeicherstände geladen und angezeigt werden. *Dies erfordert einen Neustart, um wirksam zu werden!*", - "23: Verschiebt gelöschte Backups in den Ordner _TRASH_, anstatt sie dauerhaft zu löschen. Dies betrifft nur lokale Backups.", - "24: Legt die Geschwindigkeit fest, mit der Übergänge und Animationen ablaufen. Niedriger ist schneller. Eins ist sofort, vier ist das langsamste, bevor Dinge fehlerhaft werden." + "8: Priorisiert die Verwendung von US-englischen Titeln für die Generierung von dateisystem-sicheren Pfaden.", + "9: Ob das Halten von [A] für drei Sekunden erforderlich ist, um Backups zu löschen.", + "10: Ob das Halten von [A] für drei Sekunden erforderlich ist, um Backups wiederherzustellen.", + "11: Ob das Halten von [A] für drei Sekunden erforderlich ist, um Backups zu überschreiben.", + "12: Zeigt beim Start nur Speicherstände an, die JKSV erfolgreich öffnen kann.", + "13: Zeigt Systemspeicherstände, die an ein Konto gebunden sind.", + "14: Aktiviert das Wiederherstellen von Systemspeicherständen und das Schreiben auf NAND-Partitionen. *Dies kann gefährlich sein.*", + "15: Exportiert Speicherstände als ZIP-Archive statt als entpackte Ordner.", + "16: Kompressions- oder Deflate-Level beim Schreiben in ZIP. Der Standardwert ist 6. Niedrigere Werte sind schneller, bieten aber weniger Kompression und Speicherplatzersparnis. Null bedeutet 'Store' oder keine Kompression.", + "17: Steuert die Art und Weise, wie Titel sortiert und angezeigt werden.", + "18: Zeigt Titel als Textmenüs wie im ursprünglichen JKSM auf dem 3DS an, anstatt als Symbolraster.", + "19: Erzwingt die Verwendung von Englisch anstelle der erkannten Systemsprache.", + "20: Ob gemeinsam genutzte Speicherstände aller Benutzer geladen und angezeigt werden. *Dies erfordert einen Neustart, um wirksam zu werden!*", + "21: Ob BCAT-Speicherstände geladen und angezeigt werden. Diese werden häufig verwendet, um Spielinhalte und Ereignisse außerhalb vollständiger Updates zu verteilen. *Dies erfordert einen Neustart, um wirksam zu werden!*", + "22: Ob Cache-Speicherstände geladen und angezeigt werden. Diese können zur Speicherung von DLC und verschiedenen anderen Dingen verwendet werden. *Dies erfordert einen Neustart, um wirksam zu werden!*", + "23: Ob Systemspeicherstände geladen und angezeigt werden. *Dies erfordert einen Neustart, um wirksam zu werden!*", + "24: Verschiebt gelöschte Backups in den Ordner _TRASH_, anstatt sie dauerhaft zu löschen. Dies betrifft nur lokale Backups.", + "25: Legt die Geschwindigkeit fest, mit der Übergänge und Animationen ablaufen. Niedriger ist schneller. Eins ist sofort, vier ist das langsamste, bevor Dinge fehlerhaft werden." ], "SettingsMenu": [ "0: JKSV-Ausgabeordner festlegen.", @@ -194,23 +195,24 @@ "5: Backups automatisch in Remote-Speicher hochladen: %s", "6: Lokale Backups behalten: %s", "7: Immer Anwendungs-IDs verwenden: %s", - "8: Halten zum Löschen von Backups: %s", - "9: Halten zum Wiederherstellen von Backups: %s", - "10: Halten zum Überschreiben von Backups: %s", - "11: Nur einbindbare Titel anzeigen: %s", - "12: Kontosystem-Speicherstände anzeigen: %s", - "13: Schreiben in Systemspeicherstände und NAND aktivieren: %s", - "14: Speicherstände als ZIP exportieren: %s", - "15: ZIP-Kompressionsstufe: %u", - "16: Titel-Sortierart: %s", - "17: Textmenü (JKSM)-Modus: %s", - "18: Englisch erzwingen: %s", - "19: Geräte- oder gemeinsame Speicherstände anzeigen: %s", - "20: BCAT-Speicherstände anzeigen: %s", - "21: Cache-Speicherstände anzeigen: %s", - "22: Systemspeicherstände anzeigen: %s", - "23: Papierkorb aktivieren: %s", - "24: Animationsskalierung: %.02f" + "8: Englische sichere Titel: %s", + "9: Halten zum Löschen von Backups: %s", + "10: Halten zum Wiederherstellen von Backups: %s", + "11: Halten zum Überschreiben von Backups: %s", + "12: Nur einbindbare Titel anzeigen: %s", + "13: Kontosystem-Speicherstände anzeigen: %s", + "14: Schreiben in Systemspeicherstände und NAND aktivieren: %s", + "15: Speicherstände als ZIP exportieren: %s", + "16: ZIP-Kompressionsstufe: %u", + "17: Titel-Sortierart: %s", + "18: Textmenü (JKSM)-Modus: %s", + "19: Englisch erzwingen: %s", + "20: Geräte- oder gemeinsame Speicherstände anzeigen: %s", + "21: BCAT-Speicherstände anzeigen: %s", + "22: Cache-Speicherstände anzeigen: %s", + "23: Systemspeicherstände anzeigen: %s", + "24: Papierkorb aktivieren: %s", + "25: Animationsskalierung: %.02f" ], "SettingsPops": [ "0: Blacklist ist leer!", diff --git a/Assets/Text/ENGB.json b/Assets/Text/ENGB.json index 63a122c..733b3bd 100644 --- a/Assets/Text/ENGB.json +++ b/Assets/Text/ENGB.json @@ -166,23 +166,24 @@ "5: Automatically uploads backups to remote and deletes them locally.", "6: Keeps the local backup created when auto upload is enabled instead of deleting it.", "7: Always uses Application IDs for export folder names.", - "8: Whether or not holding [A] for three seconds is required to delete backups.", - "9: Whether or not holding [A] for three seconds is required to restore backups.", - "10: Whether or not holding [A] for three seconds is required to overwrite backups.", - "11: Only shows save data JKSV can successfully open upon boot.", - "12: Shows system saves that are tied to an account.", - "13: Enables restoring system saves and writing to NAND partitions. *This can be dangerous.*", - "14: Exports save data to ZIP archives instead of unpacked folders.", - "15: Compression or deflate level used when writing to ZIP. The default value is 6. Lower values can be faster, but offer less compression and space savings. Zero is store, or no compression.", - "16: Controls the way titles are sorted and displayed.", - "17: Displays titles as text menus like the original JKSM on 3DS instead of icon grids.", - "18: Forces English to be used as the language instead of the detected system language.", - "19: Whether or not to load and display save data that is shared by all users. *This requires a restart to take effect!*", - "20: Whether or not to load and display BCAT save data. This often used to distribute in-game content and events outside of full updates. *This requires a restart to take effect!*", - "21: Whether or not to load and display Cache save data. This can be used to store DLC and various other things. *This requires a restart to take effect!*", - "22: Whether or not the system save data is loaded and displayed. *This requires a restart to take effect!*", - "23: Moves deleted backups to the _TRASH_ folder instead of permanently deleting them. This only effects local backups.", - "24: Sets the speed at which transitions and animations occur. Lower is faster. One is instant, four is the slowest before things start breaking." + "8: Prioritizes using United States English titles for filesystem safe path generation.", + "9: Whether or not holding [A] for three seconds is required to delete backups.", + "10: Whether or not holding [A] for three seconds is required to restore backups.", + "11: Whether or not holding [A] for three seconds is required to overwrite backups.", + "12: Only shows save data JKSV can successfully open upon boot.", + "13: Shows system saves that are tied to an account.", + "14: Enables restoring system saves and writing to NAND partitions. *This can be dangerous.*", + "15: Exports save data to ZIP archives instead of unpacked folders.", + "16: Compression or deflate level used when writing to ZIP. The default value is 6. Lower values can be faster, but offer less compression and space savings. Zero is store, or no compression.", + "17: Controls the way titles are sorted and displayed.", + "18: Displays titles as text menus like the original JKSM on 3DS instead of icon grids.", + "19: Forces English to be used as the language instead of the detected system language.", + "20: Whether or not to load and display save data that is shared by all users. *This requires a restart to take effect!*", + "21: Whether or not to load and display BCAT save data. This often used to distribute in-game content and events outside of full updates. *This requires a restart to take effect!*", + "22: Whether or not to load and display Cache save data. This can be used to store DLC and various other things. *This requires a restart to take effect!*", + "23: Whether or not the system save data is loaded and displayed. *This requires a restart to take effect!*", + "24: Moves deleted backups to the _TRASH_ folder instead of permanently deleting them. This only effects local backups.", + "25: Sets the speed at which transitions and animations occur. Lower is faster. One is instant, four is the slowest before things start breaking." ], "SettingsMenu": [ "0: Set JKSV output folder.", @@ -193,23 +194,24 @@ "5: Auto-upload backups to remote storage: %s", "6: Keep Local Backups: %s", "7: Always use Application IDs: %s", - "8: Hold to delete backups: %s", - "9: Hold to restore backups: %s", - "10: Hold to overwrite backups: %s", - "11: Only list mountable titles: %s", - "12: Show account system saves: %s", - "13: Enable writing to system saves and NAND: %s", - "14: Export saves to ZIP: %s", - "15: Zip compression level: %u", - "16: Title sort type: %s", - "17: Text menu (JKSM) mode: %s", - "18: Force English: %s", - "19: Show Device or shared save data: %s", - "20: Show BCAT save data: %s", - "21: Show Cache save data: %s", - "22: Show System Save Data: %s", - "23: Enable trash bin: %s", - "24: Animation scaling: %.02f" + "8: English Safe Titles: %s", + "9: Hold to delete backups: %s", + "10: Hold to restore backups: %s", + "11: Hold to overwrite backups: %s", + "12: Only list mountable titles: %s", + "13: Show account system saves: %s", + "14: Enable writing to system saves and NAND: %s", + "15: Export saves to ZIP: %s", + "16: Zip compression level: %u", + "17: Title sort type: %s", + "18: Text menu (JKSM) mode: %s", + "19: Force English: %s", + "20: Show Device or shared save data: %s", + "21: Show BCAT save data: %s", + "22: Show Cache save data: %s", + "23: Show System Save Data: %s", + "24: Enable trash bin: %s", + "25: Animation scaling: %.02f" ], "SettingsPops": [ "0: Blacklist is empty!", diff --git a/Assets/Text/ENUS.json b/Assets/Text/ENUS.json index 3a4f47b..21aa900 100644 --- a/Assets/Text/ENUS.json +++ b/Assets/Text/ENUS.json @@ -167,23 +167,24 @@ "5: Automatically uploads backups to remote and deletes them locally.", "6: Keeps the local backup created when auto upload is enabled instead of deleting it.", "7: Always uses Application IDs for export folder names.", - "8: Whether or not holding [A] for three seconds is required to delete backups.", - "9: Whether or not holding [A] for three seconds is required to restore backups.", - "10: Whether or not holding [A] for three seconds is required to overwrite backups.", - "11: Only shows save data JKSV can successfully open upon boot.", - "12: Shows system saves that are tied to an account.", - "13: Enables restoring system saves and writing to NAND partitions. *This can be dangerous.*", - "14: Exports save data to ZIP archives instead of unpacked folders.", - "15: Compression or deflate level used when writing to ZIP. The default value is 6. Lower values can be faster, but offer less compression and space savings. Zero is store, or no compression.", - "16: Controls the way titles are sorted and displayed.", - "17: Displays titles as text menus like the original JKSM on 3DS instead of icon grids.", - "18: Forces English to be used as the language instead of the detected system language.", - "19: Whether or not to load and display save data that is shared by all users. *This requires a restart to take effect!*", - "20: Whether or not to load and display BCAT save data. This often used to distribute in-game content and events outside of full updates. *This requires a restart to take effect!*", - "21: Whether or not to load and display Cache save data. This can be used to store DLC and various other things. *This requires a restart to take effect!*", - "22: Whether or not the system save data is loaded and displayed. *This requires a restart to take effect!*", - "23: Moves deleted backups to the _TRASH_ folder instead of permanently deleting them. This only effects local backups.", - "24: Sets the speed at which transitions and animations occur. Lower is faster. One is instant, four is the slowest before things start breaking." + "8: Prioritizes using United States English titles for filesystem safe path generation.", + "9: Whether or not holding [A] for three seconds is required to delete backups.", + "10: Whether or not holding [A] for three seconds is required to restore backups.", + "11: Whether or not holding [A] for three seconds is required to overwrite backups.", + "12: Only shows save data JKSV can successfully open upon boot.", + "13: Shows system saves that are tied to an account.", + "14: Enables restoring system saves and writing to NAND partitions. *This can be dangerous.*", + "15: Exports save data to ZIP archives instead of unpacked folders.", + "16: Compression or deflate level used when writing to ZIP. The default value is 6. Lower values can be faster, but offer less compression and space savings. Zero is store, or no compression.", + "17: Controls the way titles are sorted and displayed.", + "18: Displays titles as text menus like the original JKSM on 3DS instead of icon grids.", + "19: Forces English to be used as the language instead of the detected system language.", + "20: Whether or not to load and display save data that is shared by all users. *This requires a restart to take effect!*", + "21: Whether or not to load and display BCAT save data. This often used to distribute in-game content and events outside of full updates. *This requires a restart to take effect!*", + "22: Whether or not to load and display Cache save data. This can be used to store DLC and various other things. *This requires a restart to take effect!*", + "23: Whether or not the system save data is loaded and displayed. *This requires a restart to take effect!*", + "24: Moves deleted backups to the _TRASH_ folder instead of permanently deleting them. This only effects local backups.", + "25: Sets the speed at which transitions and animations occur. Lower is faster. One is instant, four is the slowest before things start breaking." ], "SettingsMenu": [ "0: Set JKSV output folder.", @@ -194,23 +195,24 @@ "5: Auto-upload backups to remote storage: %s", "6: Keep Local Backups: %s", "7: Always use Application IDs: %s", - "8: Hold to delete backups: %s", - "9: Hold to restore backups: %s", - "10: Hold to overwrite backups: %s", - "11: Only list mountable titles: %s", - "12: Show account system saves: %s", - "13: Enable writing to system saves and NAND: %s", - "14: Export saves to ZIP: %s", - "15: Zip compression level: %u", - "16: Title sort type: %s", - "17: Text menu (JKSM) mode: %s", - "18: Force English: %s", - "19: Show Device or shared save data: %s", - "20: Show BCAT save data: %s", - "21: Show Cache save data: %s", - "22: Show System Save Data: %s", - "23: Enable trash bin: %s", - "24: Animation scaling: %.02f" + "8: English Safe Titles: %s", + "9: Hold to delete backups: %s", + "10: Hold to restore backups: %s", + "11: Hold to overwrite backups: %s", + "12: Only list mountable titles: %s", + "13: Show account system saves: %s", + "14: Enable writing to system saves and NAND: %s", + "15: Export saves to ZIP: %s", + "16: Zip compression level: %u", + "17: Title sort type: %s", + "18: Text menu (JKSM) mode: %s", + "19: Force English: %s", + "20: Show Device or shared save data: %s", + "21: Show BCAT save data: %s", + "22: Show Cache save data: %s", + "23: Show System Save Data: %s", + "24: Enable trash bin: %s", + "25: Animation scaling: %.02f" ], "SettingsPops": [ "0: Blacklist is empty!", diff --git a/Assets/Text/ES.json b/Assets/Text/ES.json index 99b129f..667e500 100644 --- a/Assets/Text/ES.json +++ b/Assets/Text/ES.json @@ -167,23 +167,24 @@ "5: Sube automáticamente las copias de seguridad al almacenamiento remoto y las elimina localmente.", "6: Mantiene la copia local creada cuando la carga automática está activada en lugar de eliminarla.", "7: Siempre utiliza los ID de aplicación para los nombres de las carpetas de exportación.", - "8: Si se requiere mantener pulsado [A] durante tres segundos para eliminar copias de seguridad.", - "9: Si se requiere mantener pulsado [A] durante tres segundos para restaurar copias de seguridad.", - "10: Si se requiere mantener pulsado [A] durante tres segundos para sobrescribir copias de seguridad.", - "11: Solo muestra datos guardados que JKSV puede abrir correctamente al iniciar.", - "12: Muestra partidas del sistema vinculadas a una cuenta.", - "13: Permite restaurar partidas del sistema y escribir en particiones NAND. *Esto puede ser peligroso.*", - "14: Exporta datos guardados a archivos ZIP en lugar de carpetas sin comprimir.", - "15: Nivel de compresión o deflate usado al escribir en ZIP. El valor predeterminado es 6. Valores más bajos son más rápidos, pero ofrecen menos compresión y ahorro de espacio. Cero es almacenar, o sin compresión.", - "16: Controla la forma en que se ordenan y muestran los títulos.", - "17: Muestra los títulos como menús de texto como el JKSM original en 3DS en lugar de cuadrículas de iconos.", - "18: Obliga a usar inglés como idioma en lugar del detectado por el sistema.", - "19: Si se cargan y muestran datos guardados compartidos por todos los usuarios. *¡Esto requiere reiniciar para aplicarse!*", - "20: Si se cargan y muestran datos guardados BCAT. Estos suelen usarse para distribuir contenido y eventos del juego fuera de actualizaciones completas. *¡Esto requiere reiniciar para aplicarse!*", - "21: Si se cargan y muestran datos guardados de caché. Estos pueden usarse para almacenar DLC y otras cosas. *¡Esto requiere reiniciar para aplicarse!*", - "22: Si se cargan y muestran datos guardados del sistema. *¡Esto requiere reiniciar para aplicarse!*", - "23: Mueve las copias de seguridad eliminadas a la carpeta _TRASH_ en lugar de borrarlas permanentemente. Esto solo afecta a copias de seguridad locales.", - "24: Controla la velocidad a la que ocurren las transiciones y animaciones. Valores más bajos son más rápidos. Uno es instantáneo, cuatro es el más lento antes de que se produzcan fallos." + "8: Prioriza el uso de títulos en inglés de Estados Unidos para generar rutas seguras en el sistema de archivos.", + "9: Si se requiere mantener pulsado [A] durante tres segundos para eliminar copias de seguridad.", + "10: Si se requiere mantener pulsado [A] durante tres segundos para restaurar copias de seguridad.", + "11: Si se requiere mantener pulsado [A] durante tres segundos para sobrescribir copias de seguridad.", + "12: Solo muestra datos guardados que JKSV puede abrir correctamente al iniciar.", + "13: Muestra partidas del sistema vinculadas a una cuenta.", + "14: Permite restaurar partidas del sistema y escribir en particiones NAND. *Esto puede ser peligroso.*", + "15: Exporta datos guardados a archivos ZIP en lugar de carpetas sin comprimir.", + "16: Nivel de compresión o deflate usado al escribir en ZIP. El valor predeterminado es 6. Valores más bajos son más rápidos, pero ofrecen menos compresión y ahorro de espacio. Cero es almacenar, o sin compresión.", + "17: Controla la forma en que se ordenan y muestran los títulos.", + "18: Muestra los títulos como menús de texto como el JKSM original en 3DS en lugar de cuadrículas de iconos.", + "19: Obliga a usar inglés como idioma en lugar del detectado por el sistema.", + "20: Si se cargan y muestran datos guardados compartidos por todos los usuarios. *¡Esto requiere reiniciar para aplicarse!*", + "21: Si se cargan y muestran datos guardados BCAT. Estos suelen usarse para distribuir contenido y eventos del juego fuera de actualizaciones completas. *¡Esto requiere reiniciar para aplicarse!*", + "22: Si se cargan y muestran datos guardados de caché. Estos pueden usarse para almacenar DLC y otras cosas. *¡Esto requiere reiniciar para aplicarse!*", + "23: Si se cargan y muestran datos guardados del sistema. *¡Esto requiere reiniciar para aplicarse!*", + "24: Mueve las copias de seguridad eliminadas a la carpeta _TRASH_ en lugar de borrarlas permanentemente. Esto solo afecta a copias de seguridad locales.", + "25: Controla la velocidad a la que ocurren las transiciones y animaciones. Valores más bajos son más rápidos. Uno es instantáneo, cuatro es el más lento antes de que se produzcan fallos." ], "SettingsMenu": [ "0: Establecer carpeta de salida de JKSV.", @@ -194,23 +195,24 @@ "5: Subir copias automáticamente al almacenamiento remoto: %s", "6: Mantener copias locales: %s", "7: Usar siempre ID de aplicación: %s", - "8: Mantener pulsado para eliminar copias: %s", - "9: Mantener pulsado para restaurar copias: %s", - "10: Mantener pulsado para sobrescribir copias: %s", - "11: Mostrar solo títulos montables: %s", - "12: Mostrar partidas de sistema vinculadas a cuentas: %s", - "13: Permitir escritura en partidas de sistema y NAND: %s", - "14: Exportar partidas a ZIP: %s", - "15: Nivel de compresión ZIP: %u", - "16: Tipo de orden de títulos: %s", - "17: Modo menú de texto (JKSM): %s", - "18: Forzar inglés: %s", - "19: Mostrar partidas compartidas o de dispositivo: %s", - "20: Mostrar partidas BCAT: %s", - "21: Mostrar partidas de caché: %s", - "22: Mostrar datos guardados del sistema: %s", - "23: Activar papelera: %s", - "24: Escalado de animación: %.02f" + "8: Títulos seguros en inglés: %s", + "9: Mantener pulsado para eliminar copias: %s", + "10: Mantener pulsado para restaurar copias: %s", + "11: Mantener pulsado para sobrescribir copias: %s", + "12: Mostrar solo títulos montables: %s", + "13: Mostrar partidas de sistema vinculadas a cuentas: %s", + "14: Permitir escritura en partidas de sistema y NAND: %s", + "15: Exportar partidas a ZIP: %s", + "16: Nivel de compresión ZIP: %u", + "17: Tipo de orden de títulos: %s", + "18: Modo menú de texto (JKSM): %s", + "19: Forzar inglés: %s", + "20: Mostrar partidas compartidas o de dispositivo: %s", + "21: Mostrar partidas BCAT: %s", + "22: Mostrar partidas de caché: %s", + "23: Mostrar datos guardados del sistema: %s", + "24: Activar papelera: %s", + "25: Escalado de animación: %.02f" ], "SettingsPops": [ "0: ¡La lista negra está vacía!", diff --git a/Assets/Text/ES419.json b/Assets/Text/ES419.json index ca6380b..dd02226 100644 --- a/Assets/Text/ES419.json +++ b/Assets/Text/ES419.json @@ -167,23 +167,24 @@ "5: Sube automáticamente los respaldos al almacenamiento remoto y los borra localmente.", "6: Conserva la copia local creada cuando la subida automática está activada en lugar de borrarla.", "7: Siempre utiliza los ID de aplicación para los nombres de las carpetas de exportación.", - "8: Si es necesario mantener presionado [A] durante tres segundos para borrar respaldos.", - "9: Si es necesario mantener presionado [A] durante tres segundos para restaurar respaldos.", - "10: Si es necesario mantener presionado [A] durante tres segundos para sobrescribir respaldos.", - "11: Solo muestra los datos guardados que JKSV puede abrir correctamente al iniciar.", - "12: Muestra partidas del sistema vinculadas a una cuenta.", - "13: Permite restaurar partidas del sistema y escribir en particiones NAND. *Esto puede ser peligroso.*", - "14: Exporta datos guardados como archivos ZIP en lugar de carpetas sin comprimir.", - "15: Nivel de compresión o deflate usado al escribir en ZIP. El valor predeterminado es 6. Valores más bajos son más rápidos, pero ofrecen menos compresión y ahorro de espacio. Cero es almacenar, o sin compresión.", - "16: Controla la manera en que se ordenan y muestran los títulos.", - "17: Muestra los títulos como menús de texto como el JKSM original en 3DS en lugar de cuadrículas de íconos.", - "18: Obliga a usar inglés como idioma en lugar del detectado por el sistema.", - "19: Si se cargan y muestran los datos guardados compartidos por todos los usuarios. *¡Esto requiere reiniciar para aplicarse!*", - "20: Si se cargan y muestran los datos guardados BCAT. Estos se usan a menudo para distribuir contenido y eventos del juego fuera de las actualizaciones completas. *¡Esto requiere reiniciar para aplicarse!*", - "21: Si se cargan y muestran los datos guardados de caché. Estos pueden usarse para almacenar DLC y otras cosas. *¡Esto requiere reiniciar para aplicarse!*", - "22: Si se cargan y muestran los datos guardados del sistema. *¡Esto requiere reiniciar para aplicarse!*", - "23: Mueve los respaldos eliminados a la carpeta _TRASH_ en lugar de borrarlos permanentemente. Esto solo afecta a respaldos locales.", - "24: Controla la velocidad a la que ocurren las transiciones y animaciones. Valores más bajos son más rápidos. Uno es instantáneo, cuatro es el más lento antes de que empiecen los errores." + "8: Prioriza el uso de títulos en inglés de Estados Unidos para generar rutas seguras en el sistema de archivos.", + "9: Si es necesario mantener presionado [A] durante tres segundos para borrar respaldos.", + "10: Si es necesario mantener presionado [A] durante tres segundos para restaurar respaldos.", + "11: Si es necesario mantener presionado [A] durante tres segundos para sobrescribir respaldos.", + "12: Solo muestra los datos guardados que JKSV puede abrir correctamente al iniciar.", + "13: Muestra partidas del sistema vinculadas a una cuenta.", + "14: Permite restaurar partidas del sistema y escribir en particiones NAND. *Esto puede ser peligroso.*", + "15: Exporta datos guardados como archivos ZIP en lugar de carpetas sin comprimir.", + "16: Nivel de compresión o deflate usado al escribir en ZIP. El valor predeterminado es 6. Valores más bajos son más rápidos, pero ofrecen menos compresión y ahorro de espacio. Cero es almacenar, o sin compresión.", + "17: Controla la manera en que se ordenan y muestran los títulos.", + "18: Muestra los títulos como menús de texto como el JKSM original en 3DS en lugar de cuadrículas de íconos.", + "19: Obliga a usar inglés como idioma en lugar del detectado por el sistema.", + "20: Si se cargan y muestran los datos guardados compartidos por todos los usuarios. *¡Esto requiere reiniciar para aplicarse!*", + "21: Si se cargan y muestran los datos guardados BCAT. Estos se usan a menudo para distribuir contenido y eventos del juego fuera de las actualizaciones completas. *¡Esto requiere reiniciar para aplicarse!*", + "22: Si se cargan y muestran los datos guardados de caché. Estos pueden usarse para almacenar DLC y otras cosas. *¡Esto requiere reiniciar para aplicarse!*", + "23: Si se cargan y muestran los datos guardados del sistema. *¡Esto requiere reiniciar para aplicarse!*", + "24: Mueve los respaldos eliminados a la carpeta _TRASH_ en lugar de borrarlos permanentemente. Esto solo afecta a respaldos locales.", + "25: Controla la velocidad a la que ocurren las transiciones y animaciones. Valores más bajos son más rápidos. Uno es instantáneo, cuatro es el más lento antes de que empiecen los errores." ], "SettingsMenu": [ "0: Definir carpeta de salida de JKSV.", @@ -194,23 +195,24 @@ "5: Subir respaldos automáticamente al almacenamiento remoto: %s", "6: Mantener copias locales: %s", "7: Usar siempre ID de aplicación: %s", - "8: Mantener presionado para borrar respaldos: %s", - "9: Mantener presionado para restaurar respaldos: %s", - "10: Mantener presionado para sobrescribir respaldos: %s", - "11: Mostrar solo títulos montables: %s", - "12: Mostrar partidas de sistema vinculadas a cuentas: %s", - "13: Permitir escritura en partidas de sistema y NAND: %s", - "14: Exportar partidas a ZIP: %s", - "15: Nivel de compresión ZIP: %u", - "16: Tipo de orden de títulos: %s", - "17: Modo menú de texto (JKSM): %s", - "18: Forzar inglés: %s", - "19: Mostrar partidas compartidas o de dispositivo: %s", - "20: Mostrar partidas BCAT: %s", - "21: Mostrar partidas de caché: %s", - "22: Mostrar datos guardados del sistema: %s", - "23: Activar papelera: %s", - "24: Escalado de animación: %.02f" + "8: Títulos seguros en inglés: %s", + "9: Mantener presionado para borrar respaldos: %s", + "10: Mantener presionado para restaurar respaldos: %s", + "11: Mantener presionado para sobrescribir respaldos: %s", + "12: Mostrar solo títulos montables: %s", + "13: Mostrar partidas de sistema vinculadas a cuentas: %s", + "14: Permitir escritura en partidas de sistema y NAND: %s", + "15: Exportar partidas a ZIP: %s", + "16: Nivel de compresión ZIP: %u", + "17: Tipo de orden de títulos: %s", + "18: Modo menú de texto (JKSM): %s", + "19: Forzar inglés: %s", + "20: Mostrar partidas compartidas o de dispositivo: %s", + "21: Mostrar partidas BCAT: %s", + "22: Mostrar partidas de caché: %s", + "23: Mostrar datos guardados del sistema: %s", + "24: Activar papelera: %s", + "25: Escalado de animación: %.02f" ], "SettingsPops": [ "0: ¡La lista negra está vacía!", diff --git a/Assets/Text/FR.json b/Assets/Text/FR.json index ffd2dbf..308f043 100644 --- a/Assets/Text/FR.json +++ b/Assets/Text/FR.json @@ -167,23 +167,24 @@ "5: Téléverse automatiquement les sauvegardes vers un stockage distant et les supprime localement.", "6: Conserve la sauvegarde locale créée lorsque le téléversement automatique est activé au lieu de la supprimer.", "7: Utilise toujours les IDs d’application pour les noms de dossiers d’exportation.", - "8: Indique si maintenir [A] pendant trois secondes est requis pour supprimer des sauvegardes.", - "9: Indique si maintenir [A] pendant trois secondes est requis pour restaurer des sauvegardes.", - "10: Indique si maintenir [A] pendant trois secondes est requis pour écraser des sauvegardes.", - "11: N’affiche que les données sauvegardées que JKSV peut ouvrir avec succès au démarrage.", - "12: Affiche les sauvegardes système liées à un compte.", - "13: Active la restauration des sauvegardes système et l’écriture sur les partitions NAND. *Ceci peut être dangereux.*", - "14: Exporte les données sauvegardées en archives ZIP au lieu de dossiers non compressés.", - "15: Niveau de compression ou deflate utilisé lors de l’écriture dans un ZIP. La valeur par défaut est 6. Des valeurs plus basses sont plus rapides mais offrent moins de compression et d’économie d’espace. Zéro signifie stocker, sans compression.", - "16: Contrôle la manière dont les titres sont triés et affichés.", - "17: Affiche les titres sous forme de menus texte comme le JKSM original sur 3DS au lieu de grilles d’icônes.", - "18: Force l’utilisation de l’anglais comme langue au lieu de la langue détectée du système.", - "19: Indique si les sauvegardes partagées par tous les utilisateurs doivent être chargées et affichées. *Ceci nécessite un redémarrage pour prendre effet!*", - "20: Indique si les sauvegardes BCAT doivent être chargées et affichées. Celles-ci sont souvent utilisées pour distribuer du contenu et des événements en dehors des mises à jour complètes. *Ceci nécessite un redémarrage pour prendre effet!*", - "21: Indique si les sauvegardes du cache doivent être chargées et affichées. Elles peuvent être utilisées pour stocker des DLC et diverses autres choses. *Ceci nécessite un redémarrage pour prendre effet!*", - "22: Indique si les sauvegardes système doivent être chargées et affichées. *Ceci nécessite un redémarrage pour prendre effet!*", - "23: Déplace les sauvegardes supprimées dans le dossier _TRASH_ au lieu de les supprimer définitivement. Ceci n’affecte que les sauvegardes locales.", - "24: Définit la vitesse à laquelle se produisent les transitions et animations. Plus bas est plus rapide. Un est instantané, quatre est le plus lent avant que cela ne commence à dysfonctionner." + "8: Priorise l’utilisation des titres en anglais américain pour générer des chemins sûrs pour le système de fichiers.", + "9: Indique si maintenir [A] pendant trois secondes est requis pour supprimer des sauvegardes.", + "10: Indique si maintenir [A] pendant trois secondes est requis pour restaurer des sauvegardes.", + "11: Indique si maintenir [A] pendant trois secondes est requis pour écraser des sauvegardes.", + "12: N’affiche que les données sauvegardées que JKSV peut ouvrir avec succès au démarrage.", + "13: Affiche les sauvegardes système liées à un compte.", + "14: Active la restauration des sauvegardes système et l’écriture sur les partitions NAND. *Ceci peut être dangereux.*", + "15: Exporte les données sauvegardées en archives ZIP au lieu de dossiers non compressés.", + "16: Niveau de compression ou deflate utilisé lors de l’écriture dans un ZIP. La valeur par défaut est 6. Des valeurs plus basses sont plus rapides mais offrent moins de compression et d’économie d’espace. Zéro signifie stocker, sans compression.", + "17: Contrôle la manière dont les titres sont triés et affichés.", + "18: Affiche les titres sous forme de menus texte comme le JKSM original sur 3DS au lieu de grilles d’icônes.", + "19: Force l’utilisation de l’anglais comme langue au lieu de la langue détectée du système.", + "20: Indique si les sauvegardes partagées par tous les utilisateurs doivent être chargées et affichées. *Ceci nécessite un redémarrage pour prendre effet!*", + "21: Indique si les sauvegardes BCAT doivent être chargées et affichées. Celles-ci sont souvent utilisées pour distribuer du contenu et des événements en dehors des mises à jour complètes. *Ceci nécessite un redémarrage pour prendre effet!*", + "22: Indique si les sauvegardes du cache doivent être chargées et affichées. Elles peuvent être utilisées pour stocker des DLC et diverses autres choses. *Ceci nécessite un redémarrage pour prendre effet!*", + "23: Indique si les sauvegardes système doivent être chargées et affichées. *Ceci nécessite un redémarrage pour prendre effet!*", + "24: Déplace les sauvegardes supprimées dans le dossier _TRASH_ au lieu de les supprimer définitivement. Ceci n’affecte que les sauvegardes locales.", + "25: Définit la vitesse à laquelle se produisent les transitions et animations. Plus bas est plus rapide. Un est instantané, quatre est le plus lent avant que cela ne commence à dysfonctionner." ], "SettingsMenu": [ "0: Définir le dossier de sortie de JKSV.", @@ -194,23 +195,24 @@ "5: Téléversement automatique des sauvegardes vers stockage distant: %s", "6: Conserver les sauvegardes locales : %s", "7: Toujours utiliser les IDs d’application: %s", - "8: Maintenir pour supprimer des sauvegardes: %s", - "9: Maintenir pour restaurer des sauvegardes: %s", - "10: Maintenir pour écraser des sauvegardes: %s", - "11: N’afficher que les titres montables: %s", - "12: Afficher les sauvegardes système liées à un compte: %s", - "13: Activer l’écriture dans les sauvegardes système et NAND: %s", - "14: Exporter sauvegardes en ZIP: %s", - "15: Niveau de compression ZIP: %u", - "16: Type de tri des titres: %s", - "17: Mode menu texte (JKSM): %s", - "18: Forcer l’anglais: %s", - "19: Afficher les sauvegardes d’appareil ou partagées: %s", - "20: Afficher les sauvegardes BCAT: %s", - "21: Afficher les sauvegardes cache: %s", - "22: Afficher les sauvegardes système: %s", - "23: Activer la corbeille: %s", - "24: Échelle d’animation: %.02f" + "8: Titres sûrs en anglais : %s", + "9: Maintenir pour supprimer des sauvegardes: %s", + "10: Maintenir pour restaurer des sauvegardes: %s", + "11: Maintenir pour écraser des sauvegardes: %s", + "12: N’afficher que les titres montables: %s", + "13: Afficher les sauvegardes système liées à un compte: %s", + "14: Activer l’écriture dans les sauvegardes système et NAND: %s", + "15: Exporter sauvegardes en ZIP: %s", + "16: Niveau de compression ZIP: %u", + "17: Type de tri des titres: %s", + "18: Mode menu texte (JKSM): %s", + "19: Forcer l’anglais: %s", + "20: Afficher les sauvegardes d’appareil ou partagées: %s", + "21: Afficher les sauvegardes BCAT: %s", + "22: Afficher les sauvegardes cache: %s", + "23: Afficher les sauvegardes système: %s", + "24: Activer la corbeille: %s", + "25: Échelle d’animation: %.02f" ], "SettingsPops": [ "0: La liste noire est vide !", diff --git a/Assets/Text/FRCA.json b/Assets/Text/FRCA.json index 617affe..c1fa05c 100644 --- a/Assets/Text/FRCA.json +++ b/Assets/Text/FRCA.json @@ -166,24 +166,25 @@ "4: Nomme automatiquement les sauvegardes et ignore le clavier.", "5: Téléverse automatiquement les sauvegardes vers un stockage à distance et les supprime localement.", "6: Conserve la sauvegarde locale créée lorsque le téléversement automatique est activé au lieu de la supprimer.", - "7 Utilise toujours les identifiants d’application pour les noms de dossiers d’exportation.", - "8 Si maintenir [A] pendant trois secondes est requis pour supprimer des sauvegardes.", - "9 Si maintenir [A] pendant trois secondes est requis pour restaurer des sauvegardes.", - "10: Si maintenir [A] pendant trois secondes est requis pour écraser des sauvegardes.", - "11: N’affiche que les données sauvegardées que JKSV peut ouvrir correctement au démarrage.", - "12: Affiche les sauvegardes système liées à un compte.", - "13: Permet la restauration des sauvegardes système et l’écriture sur les partitions NAND. *Cela peut être dangereux.*", - "14: Exporte les données sauvegardées en fichiers ZIP plutôt qu’en dossiers non compressés.", - "15: Niveau de compression ou deflate utilisé lors de l’écriture dans un ZIP. La valeur par défaut est 6. Des valeurs plus faibles sont plus rapides mais offrent moins de compression et d’économie d’espace. Zéro signifie stocker, ou sans compression.", - "16: Contrôle la manière dont les titres sont triés et affichés.", - "17: Affiche les titres comme menus texte comme le JKSM original sur 3DS plutôt que comme grilles d’icônes.", - "18: Force l’utilisation de l’anglais au lieu de la langue détectée du système.", - "19: Si les sauvegardes partagées par tous les utilisateurs doivent être chargées et affichées. *Cela nécessite un redémarrage pour prendre effet!*", - "20: Si les sauvegardes BCAT doivent être chargées et affichées. Elles servent souvent à distribuer du contenu et des événements hors mises à jour complètes. *Cela nécessite un redémarrage pour prendre effet!*", - "21: Si les sauvegardes cache doivent être chargées et affichées. Elles peuvent servir à stocker du contenu téléchargeable et divers autres éléments. *Cela nécessite un redémarrage pour prendre effet!*", - "22: Si les sauvegardes système doivent être chargées et affichées. *Cela nécessite un redémarrage pour prendre effet!*", - "23: Déplace les sauvegardes supprimées vers le dossier _TRASH_ plutôt que de les supprimer définitivement. Ceci n’affecte que les sauvegardes locales.", - "24: Définit la vitesse des transitions et des animations. Plus bas est plus rapide. 1 est instantané, 4 est le plus lent avant que ça ne cause des problèmes." + "7: Utilise toujours les identifiants d’application pour les noms de dossiers d’exportation.", + "8: Priorise l’utilisation des titres en anglais américain pour générer des chemins sûrs pour le système de fichiers.", + "9: Si maintenir [A] pendant trois secondes est requis pour supprimer des sauvegardes.", + "10: Si maintenir [A] pendant trois secondes est requis pour restaurer des sauvegardes.", + "11: Si maintenir [A] pendant trois secondes est requis pour écraser des sauvegardes.", + "12: N’affiche que les données sauvegardées que JKSV peut ouvrir correctement au démarrage.", + "13: Affiche les sauvegardes système liées à un compte.", + "14: Permet la restauration des sauvegardes système et l’écriture sur les partitions NAND. *Cela peut être dangereux.*", + "15: Exporte les données sauvegardées en fichiers ZIP plutôt qu’en dossiers non compressés.", + "16: Niveau de compression ou deflate utilisé lors de l’écriture dans un ZIP. La valeur par défaut est 6. Des valeurs plus faibles sont plus rapides mais offrent moins de compression et d’économie d’espace. Zéro signifie stocker, ou sans compression.", + "17: Contrôle la manière dont les titres sont triés et affichés.", + "18: Affiche les titres comme menus texte comme le JKSM original sur 3DS plutôt que comme grilles d’icônes.", + "19: Force l’utilisation de l’anglais au lieu de la langue détectée du système.", + "20: Si les sauvegardes partagées par tous les utilisateurs doivent être chargées et affichées. *Cela nécessite un redémarrage pour prendre effet!*", + "21: Si les sauvegardes BCAT doivent être chargées et affichées. Elles servent souvent à distribuer du contenu et des événements hors mises à jour complètes. *Cela nécessite un redémarrage pour prendre effet!*", + "22: Si les sauvegardes cache doivent être chargées et affichées. Elles peuvent servir à stocker du contenu téléchargeable et divers autres éléments. *Cela nécessite un redémarrage pour prendre effet!*", + "23: Si les sauvegardes système doivent être chargées et affichées. *Cela nécessite un redémarrage pour prendre effet!*", + "24: Déplace les sauvegardes supprimées vers le dossier _TRASH_ plutôt que de les supprimer définitivement. Ceci n’affecte que les sauvegardes locales.", + "25: Définit la vitesse des transitions et des animations. Plus bas est plus rapide. 1 est instantané, 4 est le plus lent avant que ça ne cause des problèmes." ], "SettingsMenu": [ "0: Définir le dossier de sortie de JKSV.", @@ -194,23 +195,24 @@ "5: Téléverser automatiquement les sauvegardes vers le stockage distant: %s", "6: Conserver les sauvegardes locales : %s", "7: Toujours utiliser les identifiants d’application: %s", - "8: Maintenir pour supprimer des sauvegardes: %s", - "9: Maintenir pour restaurer des sauvegardes: %s", - "10: Maintenir pour écraser des sauvegardes: %s", - "11: Afficher seulement les titres montables: %s", - "12: Afficher les sauvegardes système liées aux comptes: %s", - "13: Activer l’écriture dans les sauvegardes système et NAND: %s", - "14: Exporter les sauvegardes en ZIP: %s", - "15: Niveau de compression ZIP: %u", - "16: Type de tri des titres: %s", - "17: Mode menu texte (JKSM): %s", - "18: Forcer l’anglais: %s", - "19: Afficher les sauvegardes d’appareil ou partagées: %s", - "20: Afficher les sauvegardes BCAT: %s", - "21: Afficher les sauvegardes cache: %s", - "22: Afficher les sauvegardes système: %s", - "23: Activer la corbeille: %s", - "24: Échelle d’animation: %.02f" + "8: Titres sûrs en anglais : %s", + "9: Maintenir pour supprimer des sauvegardes: %s", + "10: Maintenir pour restaurer des sauvegardes: %s", + "11: Maintenir pour écraser des sauvegardes: %s", + "12: Afficher seulement les titres montables: %s", + "13: Afficher les sauvegardes système liées aux comptes: %s", + "14: Activer l’écriture dans les sauvegardes système et NAND: %s", + "15: Exporter les sauvegardes en ZIP: %s", + "16: Niveau de compression ZIP: %u", + "17: Type de tri des titres: %s", + "18: Mode menu texte (JKSM): %s", + "19: Forcer l’anglais: %s", + "20: Afficher les sauvegardes d’appareil ou partagées: %s", + "21: Afficher les sauvegardes BCAT: %s", + "22: Afficher les sauvegardes cache: %s", + "23: Afficher les sauvegardes système: %s", + "24: Activer la corbeille: %s", + "25: Échelle d’animation: %.02f" ], "SettingsPops": [ "0: La liste noire est vide !", diff --git a/Assets/Text/IT.json b/Assets/Text/IT.json index ee86b9c..1489b49 100644 --- a/Assets/Text/IT.json +++ b/Assets/Text/IT.json @@ -167,23 +167,24 @@ "5: Carica automaticamente i backup sullo storage remoto e li elimina localmente.", "6: Mantiene il backup locale creato quando il caricamento automatico è abilitato invece di eliminarlo.", "7: Usa sempre gli ID applicazione per i nomi delle cartelle di esportazione.", - "8: Se è richiesto tenere premuto [A] per tre secondi per eliminare i backup.", - "9: Se è richiesto tenere premuto [A] per tre secondi per ripristinare i backup.", - "10: Se è richiesto tenere premuto [A] per tre secondi per sovrascrivere i backup.", - "11: Mostra solo i salvataggi che JKSV può aprire correttamente all’avvio.", - "12: Mostra i salvataggi di sistema legati a un account.", - "13: Abilita il ripristino dei salvataggi di sistema e la scrittura sulle partizioni NAND. *Questo può essere pericoloso.*", - "14: Esporta i salvataggi in archivi ZIP invece che in cartelle non compresse.", - "15: Livello di compressione o deflate usato per scrivere nei ZIP. Il valore predefinito è 6. Valori più bassi possono essere più veloci, ma offrono meno compressione e risparmio di spazio. Zero significa 'store', ovvero nessuna compressione.", - "16: Controlla come vengono ordinati e mostrati i titoli.", - "17: Mostra i titoli come menu testuali come l’originale JKSM su 3DS invece di griglie di icone.", - "18: Forza l’inglese come lingua invece di usare quella rilevata dal sistema.", - "19: Se caricare e mostrare i salvataggi condivisi tra tutti gli utenti. *Richiede un riavvio per avere effetto!*", - "20: Se caricare e mostrare i salvataggi BCAT. Questi vengono spesso usati per distribuire contenuti e eventi di gioco fuori dagli aggiornamenti completi. *Richiede un riavvio per avere effetto!*", - "21: Se caricare e mostrare i salvataggi della cache. Possono essere usati per contenere DLC e altre cose. *Richiede un riavvio per avere effetto!*", - "22: Se caricare e mostrare i salvataggi di sistema. *Richiede un riavvio per avere effetto!*", - "23: Sposta i backup cancellati nella cartella _TRASH_ invece di eliminarli definitivamente. Questo riguarda solo i backup locali.", - "24: Imposta la velocità con cui avvengono transizioni e animazioni. Valori più bassi sono più veloci. Uno è istantaneo, quattro è il più lento prima che inizino errori." + "8: Priorità all’uso dei titoli in inglese americano per la generazione di percorsi sicuri nel filesystem.", + "9: Se è richiesto tenere premuto [A] per tre secondi per eliminare i backup.", + "10: Se è richiesto tenere premuto [A] per tre secondi per ripristinare i backup.", + "11: Se è richiesto tenere premuto [A] per tre secondi per sovrascrivere i backup.", + "12: Mostra solo i salvataggi che JKSV può aprire correttamente all’avvio.", + "13: Mostra i salvataggi di sistema legati a un account.", + "14: Abilita il ripristino dei salvataggi di sistema e la scrittura sulle partizioni NAND. *Questo può essere pericoloso.*", + "15: Esporta i salvataggi in archivi ZIP invece che in cartelle non compresse.", + "16: Livello di compressione o deflate usato per scrivere nei ZIP. Il valore predefinito è 6. Valori più bassi possono essere più veloci, ma offrono meno compressione e risparmio di spazio. Zero significa 'store', ovvero nessuna compressione.", + "17: Controlla come vengono ordinati e mostrati i titoli.", + "18: Mostra i titoli come menu testuali come l’originale JKSM su 3DS invece di griglie di icone.", + "19: Forza l’inglese come lingua invece di usare quella rilevata dal sistema.", + "20: Se caricare e mostrare i salvataggi condivisi tra tutti gli utenti. *Richiede un riavvio per avere effetto!*", + "21: Se caricare e mostrare i salvataggi BCAT. Questi vengono spesso usati per distribuire contenuti e eventi di gioco fuori dagli aggiornamenti completi. *Richiede un riavvio per avere effetto!*", + "22: Se caricare e mostrare i salvataggi della cache. Possono essere usati per contenere DLC e altre cose. *Richiede un riavvio per avere effetto!*", + "23: Se caricare e mostrare i salvataggi di sistema. *Richiede un riavvio per avere effetto!*", + "24: Sposta i backup cancellati nella cartella _TRASH_ invece di eliminarli definitivamente. Questo riguarda solo i backup locali.", + "25: Imposta la velocità con cui avvengono transizioni e animazioni. Valori più bassi sono più veloci. Uno è istantaneo, quattro è il più lento prima che inizino errori." ], "SettingsMenu": [ "0: Imposta la cartella di output di JKSV.", @@ -194,23 +195,24 @@ "5: Carica automaticamente i backup sullo storage remoto: %s", "6: Mantieni backup locali: %s", "7: Usa sempre gli ID applicazione: %s", - "8: Tieni premuto per eliminare i backup: %s", - "9: Tieni premuto per ripristinare i backup: %s", - "10: Tieni premuto per sovrascrivere i backup: %s", - "11: Mostra solo titoli montabili: %s", - "12: Mostra salvataggi di sistema legati all’account: %s", - "13: Abilita scrittura su salvataggi di sistema e NAND: %s", - "14: Esporta salvataggi in ZIP: %s", - "15: Livello compressione ZIP: %u", - "16: Tipo di ordinamento titoli: %s", - "17: Modalità menu testo (JKSM): %s", - "18: Forza inglese: %s", - "19: Mostra salvataggi di dispositivo o condivisi: %s", - "20: Mostra salvataggi BCAT: %s", - "21: Mostra salvataggi cache: %s", - "22: Mostra dati salvataggi di sistema: %s", - "23: Abilita cestino: %s", - "24: Scala animazioni: %.02f" + "8: Titoli sicuri in inglese: %s", + "9: Tieni premuto per eliminare i backup: %s", + "10: Tieni premuto per ripristinare i backup: %s", + "11: Tieni premuto per sovrascrivere i backup: %s", + "12: Mostra solo titoli montabili: %s", + "13: Mostra salvataggi di sistema legati all’account: %s", + "14: Abilita scrittura su salvataggi di sistema e NAND: %s", + "15: Esporta salvataggi in ZIP: %s", + "16: Livello compressione ZIP: %u", + "17: Tipo di ordinamento titoli: %s", + "18: Modalità menu testo (JKSM): %s", + "19: Forza inglese: %s", + "20: Mostra salvataggi di dispositivo o condivisi: %s", + "21: Mostra salvataggi BCAT: %s", + "22: Mostra salvataggi cache: %s", + "23: Mostra dati salvataggi di sistema: %s", + "24: Abilita cestino: %s", + "25: Scala animazioni: %.02f" ], "SettingsPops": [ "0: La lista nera è vuota!", diff --git a/Assets/Text/JA.json b/Assets/Text/JA.json index 4423b4f..d389544 100644 --- a/Assets/Text/JA.json +++ b/Assets/Text/JA.json @@ -167,23 +167,24 @@ "5: バックアップを自動的にリモートにアップロードし、ローカルでは削除します。", "6: 自動アップロードが有効な場合に作成されたローカルバックアップを削除せずに保持します。", "7: エクスポートフォルダ名に常にアプリケーションIDを使用します。", - "8: バックアップを削除する際に [A] を3秒間保持する必要があるかどうか。", - "9: バックアップを復元する際に [A] を3秒間保持する必要があるかどうか。", - "10: バックアップを上書きする際に [A] を3秒間保持する必要があるかどうか。", - "11: 起動時に JKSV が正常に開けるセーブデータのみを表示します。", - "12: アカウントに紐づくシステムセーブを表示します。", - "13: システムセーブの復元および NAND への書き込みを有効にします。*危険な場合があります。*", - "14: セーブデータを展開フォルダではなく ZIP アーカイブにエクスポートします。", - "15: ZIP 書き込み時の圧縮レベル。デフォルトは 6。値を小さくすると高速になりますが、圧縮率や容量節約は低下します。0 は非圧縮 (store) です。", - "16: タイトルの並べ方と表示方法を制御します。", - "17: タイトルを 3DS の元の JKSM のようにテキストメニューで表示します。", - "18: 検出されたシステム言語ではなく、英語を強制使用します。", - "19: すべてのユーザーと共有されているセーブデータを読み込み表示するかどうか。*適用には再起動が必要です!*", - "20: BCAT セーブデータを読み込み表示するかどうか。これはゲーム内コンテンツやイベント配信に使用されます。*適用には再起動が必要です!*", - "21: キャッシュセーブデータを読み込み表示するかどうか。DLC などの保存に使用されます。*適用には再起動が必要です!*", - "22: システムセーブデータを読み込み表示するかどうか。*適用には再起動が必要です!*", - "23: 削除されたバックアップを _TRASH_ フォルダに移動し、完全削除を回避します。ローカルバックアップのみ影響します。", - "24: トランジションやアニメーションの速度を設定します。値が小さいほど速く、1 は即時、4 は最も遅く、破損が始まる直前です。" + "8: ファイルシステム用の安全なパス生成に米国英語のタイトルを優先して使用します。", + "9: バックアップを削除する際に [A] を3秒間保持する必要があるかどうか。", + "10: バックアップを復元する際に [A] を3秒間保持する必要があるかどうか。", + "11: バックアップを上書きする際に [A] を3秒間保持する必要があるかどうか。", + "12: 起動時に JKSV が正常に開けるセーブデータのみを表示します。", + "13: アカウントに紐づくシステムセーブを表示します。", + "14: システムセーブの復元および NAND への書き込みを有効にします。*危険な場合があります。*", + "15: セーブデータを展開フォルダではなく ZIP アーカイブにエクスポートします。", + "16: ZIP 書き込み時の圧縮レベル。デフォルトは 6。値を小さくすると高速になりますが、圧縮率や容量節約は低下します。0 は非圧縮 (store) です。", + "17: タイトルの並べ方と表示方法を制御します。", + "18: タイトルを 3DS の元の JKSM のようにテキストメニューで表示します。", + "19: 検出されたシステム言語ではなく、英語を強制使用します。", + "20: すべてのユーザーと共有されているセーブデータを読み込み表示するかどうか。*適用には再起動が必要です!*", + "21: BCAT セーブデータを読み込み表示するかどうか。これはゲーム内コンテンツやイベント配信に使用されます。*適用には再起動が必要です!*", + "22: キャッシュセーブデータを読み込み表示するかどうか。DLC などの保存に使用されます。*適用には再起動が必要です!*", + "23: システムセーブデータを読み込み表示するかどうか。*適用には再起動が必要です!*", + "24: 削除されたバックアップを _TRASH_ フォルダに移動し、完全削除を回避します。ローカルバックアップのみ影響します。", + "25: トランジションやアニメーションの速度を設定します。値が小さいほど速く、1 は即時、4 は最も遅く、破損が始まる直前です。" ], "SettingsMenu": [ "0: JKSV 出力フォルダを設定", @@ -194,23 +195,24 @@ "5: バックアップをリモートに自動アップロード: %s", "6: ローカルバックアップを保持: %s", "7: 常にアプリケーションIDを使用: %s", - "8: バックアップ削除時に保持: %s", - "9: バックアップ復元時に保持: %s", - "10: バックアップ上書き時に保持: %s", - "11: マウント可能タイトルのみ表示: %s", - "12: アカウントのシステムセーブを表示: %s", - "13: システムセーブおよび NAND 書き込みを有効に: %s", - "14: セーブを ZIP にエクスポート: %s", - "15: ZIP 圧縮レベル: %u", - "16: タイトルソートタイプ: %s", - "17: テキストメニュー (JKSM) モード: %s", - "18: 英語を強制: %s", - "19: デバイスまたは共有セーブを表示: %s", - "20: BCAT セーブを表示: %s", - "21: キャッシュセーブを表示: %s", - "22: システムセーブを表示: %s", - "23: ゴミ箱を有効: %s", - "24: アニメーションスケーリング: %.02f" + "8: 英語安全タイトル: %s", + "9: バックアップ削除時に保持: %s", + "10: バックアップ復元時に保持: %s", + "11: バックアップ上書き時に保持: %s", + "12: マウント可能タイトルのみ表示: %s", + "13: アカウントのシステムセーブを表示: %s", + "14: システムセーブおよび NAND 書き込みを有効に: %s", + "15: セーブを ZIP にエクスポート: %s", + "16: ZIP 圧縮レベル: %u", + "17: タイトルソートタイプ: %s", + "18: テキストメニュー (JKSM) モード: %s", + "19: 英語を強制: %s", + "20: デバイスまたは共有セーブを表示: %s", + "21: BCAT セーブを表示: %s", + "22: キャッシュセーブを表示: %s", + "23: システムセーブを表示: %s", + "24: ゴミ箱を有効: %s", + "25: アニメーションスケーリング: %.02f" ], "SettingsPops": [ "0: ブラックリストは 空です!", diff --git a/Assets/Text/KO.json b/Assets/Text/KO.json index 7ad9030..bfdf288 100644 --- a/Assets/Text/KO.json +++ b/Assets/Text/KO.json @@ -167,23 +167,24 @@ "5: 백업을 원격으로 자동 업로드하고 로컬에서는 삭제합니다.", "6: 자동 업로드가 활성화될 때 생성된 로컬 백업을 삭제하지 않고 유지합니다.", "7: 내보내기 폴더 이름에 항상 애플리케이션 ID를 사용합니다.", - "8: 백업을 삭제할 때 [A]를 3초간 누를지 여부.", - "9: 백업을 복원할 때 [A]를 3초간 누를지 여부.", - "10: 백업을 덮어쓸 때 [A]를 3초간 누를지 여부.", - "11: 부팅 시 JKSV가 정상적으로 열 수 있는 세이브만 표시합니다.", - "12: 계정에 연결된 시스템 세이브를 표시합니다.", - "13: 시스템 세이브 복원 및 NAND 쓰기를 활성화합니다. *위험할 수 있습니다.*", - "14: 세이브를 풀 폴더 대신 ZIP 아카이브로 내보냅니다.", - "15: ZIP 작성 시 압축 또는 deflate 수준. 기본값은 6입니다. 낮은 값은 더 빠르지만 압축률과 공간 절약이 적습니다. 0은 저장(store) 또는 압축 없음입니다.", - "16: 타이틀의 정렬 및 표시 방식을 제어합니다.", - "17: 원래 3DS JKSM처럼 텍스트 메뉴로 타이틀 표시, 아이콘 그리드 아님.", - "18: 시스템 언어 대신 영어 사용 강제.", - "19: 모든 사용자가 공유하는 세이브를 불러와 표시할지 여부. *적용하려면 재시작 필요!*", - "20: BCAT 세이브를 불러와 표시할지 여부. 주로 게임 내 콘텐츠 및 이벤트 배포용. *적용하려면 재시작 필요!*", - "21: 캐시 세이브를 불러와 표시할지 여부. DLC 등 저장용. *적용하려면 재시작 필요!*", - "22: 시스템 세이브를 불러와 표시할지 여부. *적용하려면 재시작 필요!*", - "23: 삭제된 백업을 _TRASH_ 폴더로 이동하고 완전 삭제하지 않습니다. 로컬 백업만 해당.", - "24: 전환 및 애니메이션 속도를 설정합니다. 낮을수록 빠름. 1은 즉시, 4는 가장 느리며 오류 발생 직전입니다." + "8: 파일 시스템 안전 경로 생성을 위해 미국 영어 제목 사용을 우선합니다.", + "9: 백업을 삭제할 때 [A]를 3초간 누를지 여부.", + "10: 백업을 복원할 때 [A]를 3초간 누를지 여부.", + "11: 백업을 덮어쓸 때 [A]를 3초간 누를지 여부.", + "12: 부팅 시 JKSV가 정상적으로 열 수 있는 세이브만 표시합니다.", + "13: 계정에 연결된 시스템 세이브를 표시합니다.", + "14: 시스템 세이브 복원 및 NAND 쓰기를 활성화합니다. *위험할 수 있습니다.*", + "15: 세이브를 풀 폴더 대신 ZIP 아카이브로 내보냅니다.", + "16: ZIP 작성 시 압축 또는 deflate 수준. 기본값은 6입니다. 낮은 값은 더 빠르지만 압축률과 공간 절약이 적습니다. 0은 저장(store) 또는 압축 없음입니다.", + "17: 타이틀의 정렬 및 표시 방식을 제어합니다.", + "18: 원래 3DS JKSM처럼 텍스트 메뉴로 타이틀 표시, 아이콘 그리드 아님.", + "19: 시스템 언어 대신 영어 사용 강제.", + "20: 모든 사용자가 공유하는 세이브를 불러와 표시할지 여부. *적용하려면 재시작 필요!*", + "21: BCAT 세이브를 불러와 표시할지 여부. 주로 게임 내 콘텐츠 및 이벤트 배포용. *적용하려면 재시작 필요!*", + "22: 캐시 세이브를 불러와 표시할지 여부. DLC 등 저장용. *적용하려면 재시작 필요!*", + "23: 시스템 세이브를 불러와 표시할지 여부. *적용하려면 재시작 필요!*", + "24: 삭제된 백업을 _TRASH_ 폴더로 이동하고 완전 삭제하지 않습니다. 로컬 백업만 해당.", + "25: 전환 및 애니메이션 속도를 설정합니다. 낮을수록 빠름. 1은 즉시, 4는 가장 느리며 오류 발생 직전입니다." ], "SettingsMenu": [ "0: JKSV 출력 폴더 설정", @@ -194,23 +195,24 @@ "5: 백업을 원격에 자동 업로드: %s", "6: 로컬 백업 유지: %s", "7: 항상 애플리케이션 ID 사용: %s", - "8: 백업 삭제 시 유지: %s", - "9: 백업 복원 시 유지: %s", - "10: 백업 덮어쓰기 시 유지: %s", - "11: 마운트 가능한 타이틀만 표시: %s", - "12: 계정 시스템 세이브 표시: %s", - "13: 시스템 세이브 및 NAND 쓰기 활성화: %s", - "14: 세이브를 ZIP으로 내보내기: %s", - "15: ZIP 압축 수준: %u", - "16: 타이틀 정렬 유형: %s", - "17: 텍스트 메뉴 (JKSM) 모드: %s", - "18: 영어 강제: %s", - "19: 장치 또는 공유 세이브 표시: %s", - "20: BCAT 세이브 표시: %s", - "21: 캐시 세이브 표시: %s", - "22: 시스템 세이브 표시: %s", - "23: 휴지통 활성화: %s", - "24: 애니메이션 스케일: %.02f" + "8: 영어 안전 제목: %s", + "9: 백업 삭제 시 유지: %s", + "10: 백업 복원 시 유지: %s", + "11: 백업 덮어쓰기 시 유지: %s", + "12: 마운트 가능한 타이틀만 표시: %s", + "13: 계정 시스템 세이브 표시: %s", + "14: 시스템 세이브 및 NAND 쓰기 활성화: %s", + "15: 세이브를 ZIP으로 내보내기: %s", + "16: ZIP 압축 수준: %u", + "17: 타이틀 정렬 유형: %s", + "18: 텍스트 메뉴 (JKSM) 모드: %s", + "19: 영어 강제: %s", + "20: 장치 또는 공유 세이브 표시: %s", + "21: BCAT 세이브 표시: %s", + "22: 캐시 세이브 표시: %s", + "23: 시스템 세이브 표시: %s", + "24: 휴지통 활성화: %s", + "25: 애니메이션 스케일: %.02f" ], "SettingsPops": [ "0: 블랙리스트가 비어 있습니다!", @@ -307,4 +309,4 @@ "1: 아니요 [B]", "2: 확인 [A]" ] -} +} \ No newline at end of file diff --git a/Assets/Text/NL.json b/Assets/Text/NL.json index 829a7d5..1012e27 100644 --- a/Assets/Text/NL.json +++ b/Assets/Text/NL.json @@ -167,23 +167,24 @@ "5: Uploadt back-ups automatisch naar remote en verwijdert ze lokaal.", "6: Bewaart de lokale backup die is gemaakt wanneer automatisch uploaden is ingeschakeld in plaats van deze te verwijderen.", "7: Gebruikt altijd applicatie-ID’s voor exportmappen.", - "8: Of het nodig is [A] drie seconden ingedrukt te houden om back-ups te verwijderen.", - "9: Of het nodig is [A] drie seconden ingedrukt te houden om back-ups te herstellen.", - "10: Of het nodig is [A] drie seconden ingedrukt te houden om back-ups te overschrijven.", - "11: Toont alleen save data die JKSV succesvol kan openen bij opstarten.", - "12: Toont systeem-saves die aan een account gekoppeld zijn.", - "13: Staat het herstellen van systeem-saves en schrijven naar NAND toe. *Kan gevaarlijk zijn.*", - "14: Exporteert save data naar ZIP-bestanden in plaats van uitgepakte mappen.", - "15: Compressie- of deflateniveau bij het schrijven naar ZIP. Standaard is 6. Lagere waarden zijn sneller, maar bieden minder compressie en ruimtebesparing. 0 is opslaan zonder compressie.", - "16: Bepaalt hoe titels worden gesorteerd en weergegeven.", - "17: Toont titels als tekstmenu’s zoals originele JKSM op 3DS in plaats van icoonroosters.", - "18: Forceert Engels als taal in plaats van systeemtaal.", - "19: Laad en toon save data die door alle gebruikers gedeeld wordt. *Vereist herstart!*", - "20: Laad en toon BCAT save data, vaak gebruikt voor in-game content en evenementen. *Vereist herstart!*", - "21: Laad en toon cache save data, gebruikt voor DLC en andere dingen. *Vereist herstart!*", - "22: Laad en toon systeem-saves. *Vereist herstart!*", - "23: Verplaatst verwijderde back-ups naar de _TRASH_ map in plaats van permanent te verwijderen. Alleen lokaal van toepassing.", - "24: Bepaalt de snelheid van overgangen en animaties. Lager = sneller. 1 = direct, 4 = langzaamste zonder fouten." + "8: Geeft prioriteit aan het gebruik van Amerikaanse Engelse titels voor het genereren van bestandssysteem-veilige paden.", + "9: Of het nodig is [A] drie seconden ingedrukt te houden om back-ups te verwijderen.", + "10: Of het nodig is [A] drie seconden ingedrukt te houden om back-ups te herstellen.", + "11: Of het nodig is [A] drie seconden ingedrukt te houden om back-ups te overschrijven.", + "12: Toont alleen save data die JKSV succesvol kan openen bij opstarten.", + "13: Toont systeem-saves die aan een account gekoppeld zijn.", + "14: Staat het herstellen van systeem-saves en schrijven naar NAND toe. *Kan gevaarlijk zijn.*", + "15: Exporteert save data naar ZIP-bestanden in plaats van uitgepakte mappen.", + "16: Compressie- of deflateniveau bij het schrijven naar ZIP. Standaard is 6. Lagere waarden zijn sneller, maar bieden minder compressie en ruimtebesparing. 0 is opslaan zonder compressie.", + "17: Bepaalt hoe titels worden gesorteerd en weergegeven.", + "18: Toont titels als tekstmenu’s zoals originele JKSM op 3DS in plaats van icoonroosters.", + "19: Forceert Engels als taal in plaats van systeemtaal.", + "20: Laad en toon save data die door alle gebruikers gedeeld wordt. *Vereist herstart!*", + "21: Laad en toon BCAT save data, vaak gebruikt voor in-game content en evenementen. *Vereist herstart!*", + "22: Laad en toon cache save data, gebruikt voor DLC en andere dingen. *Vereist herstart!*", + "23: Laad en toon systeem-saves. *Vereist herstart!*", + "24: Verplaatst verwijderde back-ups naar de _TRASH_ map in plaats van permanent te verwijderen. Alleen lokaal van toepassing.", + "25: Bepaalt de snelheid van overgangen en animaties. Lager = sneller. 1 = direct, 4 = langzaamste zonder fouten." ], "SettingsMenu": [ "0: Stel JKSV uitvoermap in", @@ -194,23 +195,24 @@ "5: Upload back-ups automatisch naar remote: %s", "6: Lokale back-ups bewaren: %s", "7: Gebruik altijd applicatie-ID’s: %s", - "8: Houd ingedrukt om back-ups te verwijderen: %s", - "9: Houd ingedrukt om back-ups te herstellen: %s", - "10: Houd ingedrukt om back-ups te overschrijven: %s", - "11: Alleen mountbare titels tonen: %s", - "12: Toont systeem-saves gekoppeld aan accounts: %s", - "13: Schrijven naar systeem-saves en NAND inschakelen: %s", - "14: Exporteer saves naar ZIP: %s", - "15: ZIP compressieniveau: %u", - "16: Titel sorteringstype: %s", - "17: Tekstmenu (JKSM) modus: %s", - "18: Forceer Engels: %s", - "19: Toon apparaat- of gedeelde saves: %s", - "20: Toon BCAT save data: %s", - "21: Toon cache save data: %s", - "22: Toon systeem-saves: %s", - "23: Prullenbak inschakelen: %s", - "24: Animatie schaal: %.02f" + "8: Engelse veilige titels: %s", + "9: Houd ingedrukt om back-ups te verwijderen: %s", + "10: Houd ingedrukt om back-ups te herstellen: %s", + "11: Houd ingedrukt om back-ups te overschrijven: %s", + "12: Alleen mountbare titels tonen: %s", + "13: Toont systeem-saves gekoppeld aan accounts: %s", + "14: Schrijven naar systeem-saves en NAND inschakelen: %s", + "15: Exporteer saves naar ZIP: %s", + "16: ZIP compressieniveau: %u", + "17: Titel sorteringstype: %s", + "18: Tekstmenu (JKSM) modus: %s", + "19: Forceer Engels: %s", + "20: Toon apparaat- of gedeelde saves: %s", + "21: Toon BCAT save data: %s", + "22: Toon cache save data: %s", + "23: Toon systeem-saves: %s", + "24: Prullenbak inschakelen: %s", + "25: Animatie schaal: %.02f" ], "SettingsPops": [ "0: De blacklist is leeg!", diff --git a/Assets/Text/PT.json b/Assets/Text/PT.json index 31aff04..e3fa563 100644 --- a/Assets/Text/PT.json +++ b/Assets/Text/PT.json @@ -167,23 +167,24 @@ "5: Faz upload automático dos backups para remoto e os apaga localmente.", "6: Mantém o backup local criado quando o upload automático está ativado, em vez de o apagar.", "7: Usa sempre IDs de aplicação para nomes de pastas de exportação.", - "8: Se é necessário manter [A] pressionado por três segundos para apagar backups.", - "9: Se é necessário manter [A] pressionado por três segundos para restaurar backups.", - "10: Se é necessário manter [A] pressionado por três segundos para sobrescrever backups.", - "11: Mostra apenas saves que JKSV consegue abrir com sucesso no arranque.", - "12: Mostra saves de sistema ligados a uma conta.", - "13: Permite restaurar saves de sistema e escrever em partições NAND. *Pode ser perigoso.*", - "14: Exporta saves para arquivos ZIP em vez de pastas descompactadas.", - "15: Nível de compressão ou deflate ao escrever em ZIP. O padrão é 6. Valores mais baixos são mais rápidos, mas oferecem menos compressão. 0 é armazenar, sem compressão.", - "16: Controla como os títulos são ordenados e exibidos.", - "17: Mostra títulos como menus de texto como o JKSM original em 3DS em vez de grelhas de ícones.", - "18: Força o inglês em vez da língua do sistema detectada.", - "19: Carrega e exibe saves compartilhados por todos os usuários. *Requer reinício!*", - "20: Carrega e exibe saves BCAT. Usados frequentemente para distribuir conteúdo e eventos. *Requer reinício!*", - "21: Carrega e exibe saves de cache. Podem armazenar DLC e outros dados. *Requer reinício!*", - "22: Carrega e exibe saves do sistema. *Requer reinício!*", - "23: Move backups apagados para a pasta _TRASH_ em vez de apagar permanentemente. Afeta apenas backups locais.", - "24: Define a velocidade das transições e animações. Valores mais baixos = mais rápido. 1 = instantâneo, 4 = mais lento antes de falhas." + "8: Prioriza o uso de títulos em inglês dos Estados Unidos para a geração de caminhos seguros no sistema de arquivos.", + "9: Se é necessário manter [A] pressionado por três segundos para apagar backups.", + "10: Se é necessário manter [A] pressionado por três segundos para restaurar backups.", + "11: Se é necessário manter [A] pressionado por três segundos para sobrescrever backups.", + "12: Mostra apenas saves que JKSV consegue abrir com sucesso no arranque.", + "13: Mostra saves de sistema ligados a uma conta.", + "14: Permite restaurar saves de sistema e escrever em partições NAND. *Pode ser perigoso.*", + "15: Exporta saves para arquivos ZIP em vez de pastas descompactadas.", + "16: Nível de compressão ou deflate ao escrever em ZIP. O padrão é 6. Valores mais baixos são mais rápidos, mas oferecem menos compressão. 0 é armazenar, sem compressão.", + "17: Controla como os títulos são ordenados e exibidos.", + "18: Mostra títulos como menus de texto como o JKSM original em 3DS em vez de grelhas de ícones.", + "19: Força o inglês em vez da língua do sistema detectada.", + "20: Carrega e exibe saves compartilhados por todos os usuários. *Requer reinício!*", + "21: Carrega e exibe saves BCAT. Usados frequentemente para distribuir conteúdo e eventos. *Requer reinício!*", + "22: Carrega e exibe saves de cache. Podem armazenar DLC e outros dados. *Requer reinício!*", + "23: Carrega e exibe saves do sistema. *Requer reinício!*", + "24: Move backups apagados para a pasta _TRASH_ em vez de apagar permanentemente. Afeta apenas backups locais.", + "25: Define a velocidade das transições e animações. Valores mais baixos = mais rápido. 1 = instantâneo, 4 = mais lento antes de falhas." ], "SettingsMenu": [ "0: Definir pasta de saída do JKSV", @@ -194,23 +195,24 @@ "5: Upload automático para remoto: %s", "6: Manter backups locais: %s", "7: Usar sempre IDs de aplicação: %s", - "8: Manter pressionado para apagar backups: %s", - "9: Manter pressionado para restaurar backups: %s", - "10: Manter pressionado para sobrescrever backups: %s", - "11: Mostrar apenas títulos montáveis: %s", - "12: Mostrar saves de sistema ligados a contas: %s", - "13: Permitir escrita em saves de sistema e NAND: %s", - "14: Exportar saves para ZIP: %s", - "15: Nível de compressão ZIP: %u", - "16: Tipo de ordenação de títulos: %s", - "17: Modo menu de texto (JKSM): %s", - "18: Forçar inglês: %s", - "19: Mostrar saves do dispositivo ou compartilhados: %s", - "20: Mostrar saves BCAT: %s", - "21: Mostrar saves de cache: %s", - "22: Mostrar saves do sistema: %s", - "23: Ativar lixeira: %s", - "24: Escala de animação: %.02f" + "8: Títulos seguros em inglês: %s", + "9: Manter pressionado para apagar backups: %s", + "10: Manter pressionado para restaurar backups: %s", + "11: Manter pressionado para sobrescrever backups: %s", + "12: Mostrar apenas títulos montáveis: %s", + "13: Mostrar saves de sistema ligados a contas: %s", + "14: Permitir escrita em saves de sistema e NAND: %s", + "15: Exportar saves para ZIP: %s", + "16: Nível de compressão ZIP: %u", + "17: Tipo de ordenação de títulos: %s", + "18: Modo menu de texto (JKSM): %s", + "19: Forçar inglês: %s", + "20: Mostrar saves do dispositivo ou compartilhados: %s", + "21: Mostrar saves BCAT: %s", + "22: Mostrar saves de cache: %s", + "23: Mostrar saves do sistema: %s", + "24: Ativar lixeira: %s", + "25: Escala de animação: %.02f" ], "SettingsPops": [ "0: A blacklist está vazia!", diff --git a/Assets/Text/PTBR.json b/Assets/Text/PTBR.json index dcb1b31..f58c959 100644 --- a/Assets/Text/PTBR.json +++ b/Assets/Text/PTBR.json @@ -167,23 +167,24 @@ "5: Faz upload automático dos backups para o remoto e apaga localmente.", "6: Mantém o backup local criado quando o upload automático está ativado, em vez de apagá-lo.", "7: Sempre usa IDs de aplicação para nomes de pastas de exportação.", - "8: Se é necessário segurar [A] por três segundos para apagar backups.", - "9: Se é necessário segurar [A] por três segundos para restaurar backups.", - "10: Se é necessário segurar [A] por três segundos para sobrescrever backups.", - "11: Mostra apenas saves que o JKSV consegue abrir corretamente no boot.", - "12: Mostra saves de sistema ligados a uma conta.", - "13: Habilita restauração de saves de sistema e escrita em NAND. *Pode ser perigoso.*", - "14: Exporta saves para arquivos ZIP em vez de pastas descompactadas.", - "15: Nível de compressão ou deflate ao escrever em ZIP. Padrão é 6. Valores mais baixos podem ser mais rápidos, mas comprimem menos. 0 = sem compressão.", - "16: Controla a forma como os títulos são ordenados e exibidos.", - "17: Exibe títulos como menus de texto, como o JKSM original no 3DS, em vez de grelha de ícones.", - "18: Força o inglês em vez da língua do sistema.", - "19: Carrega e mostra saves compartilhados por todos os usuários. *Requer reinício!*", - "20: Carrega e mostra saves BCAT. Usados para conteúdo e eventos in-game. *Requer reinício!*", - "21: Carrega e mostra saves de cache. Pode armazenar DLC e outras coisas. *Requer reinício!*", - "22: Carrega e mostra saves de sistema. *Requer reinício!*", - "23: Move backups apagados para a pasta _TRASH_ em vez de apagar permanentemente. Afeta apenas backups locais.", - "24: Define a velocidade de transições e animações. Menor = mais rápido. 1 = instantâneo, 4 = mais lento antes de erros." + "8: Prioriza o uso de títulos em inglês dos Estados Unidos para gerar caminhos seguros no sistema de arquivos.", + "9: Se é necessário segurar [A] por três segundos para apagar backups.", + "10: Se é necessário segurar [A] por três segundos para restaurar backups.", + "11: Se é necessário segurar [A] por três segundos para sobrescrever backups.", + "12: Mostra apenas saves que o JKSV consegue abrir corretamente no boot.", + "13: Mostra saves de sistema ligados a uma conta.", + "14: Habilita restauração de saves de sistema e escrita em NAND. *Pode ser perigoso.*", + "15: Exporta saves para arquivos ZIP em vez de pastas descompactadas.", + "16: Nível de compressão ou deflate ao escrever em ZIP. Padrão é 6. Valores mais baixos podem ser mais rápidos, mas comprimem menos. 0 = sem compressão.", + "17: Controla a forma como os títulos são ordenados e exibidos.", + "18: Exibe títulos como menus de texto, como o JKSM original no 3DS, em vez de grelha de ícones.", + "19: Força o inglês em vez da língua do sistema.", + "20: Carrega e mostra saves compartilhados por todos os usuários. *Requer reinício!*", + "21: Carrega e mostra saves BCAT. Usados para conteúdo e eventos in-game. *Requer reinício!*", + "22: Carrega e mostra saves de cache. Pode armazenar DLC e outras coisas. *Requer reinício!*", + "23: Carrega e mostra saves de sistema. *Requer reinício!*", + "24: Move backups apagados para a pasta _TRASH_ em vez de apagar permanentemente. Afeta apenas backups locais.", + "25: Define a velocidade de transições e animações. Menor = mais rápido. 1 = instantâneo, 4 = mais lento antes de erros." ], "SettingsMenu": [ "0: Definir pasta de saída do JKSV", @@ -194,23 +195,24 @@ "5: Upload automático para remoto: %s", "6: Manter backups locais: %s", "7: Usar sempre IDs de aplicação: %s", - "8: Segurar para apagar backups: %s", - "9: Segurar para restaurar backups: %s", - "10: Segurar para sobrescrever backups: %s", - "11: Mostrar apenas títulos montáveis: %s", - "12: Mostrar saves de sistema ligados a contas: %s", - "13: Habilitar escrita em saves de sistema e NAND: %s", - "14: Exportar saves para ZIP: %s", - "15: Nível de compressão ZIP: %u", - "16: Tipo de ordenação de títulos: %s", - "17: Modo menu de texto (JKSM): %s", - "18: Forçar inglês: %s", - "19: Mostrar saves do dispositivo ou compartilhados: %s", - "20: Mostrar saves BCAT: %s", - "21: Mostrar saves de cache: %s", - "22: Mostrar saves do sistema: %s", - "23: Ativar lixeira: %s", - "24: Escala de animação: %.02f" + "8: Títulos seguros em inglês: %s", + "9: Segurar para apagar backups: %s", + "10: Segurar para restaurar backups: %s", + "11: Segurar para sobrescrever backups: %s", + "12: Mostrar apenas títulos montáveis: %s", + "13: Mostrar saves de sistema ligados a contas: %s", + "14: Habilitar escrita em saves de sistema e NAND: %s", + "15: Exportar saves para ZIP: %s", + "16: Nível de compressão ZIP: %u", + "17: Tipo de ordenação de títulos: %s", + "18: Modo menu de texto (JKSM): %s", + "19: Forçar inglês: %s", + "20: Mostrar saves do dispositivo ou compartilhados: %s", + "21: Mostrar saves BCAT: %s", + "22: Mostrar saves de cache: %s", + "23: Mostrar saves do sistema: %s", + "24: Ativar lixeira: %s", + "25: Escala de animação: %.02f" ], "SettingsPops": [ "0: A lista negra está vazia!", diff --git a/Assets/Text/RU.json b/Assets/Text/RU.json index 3802ac1..0371454 100644 --- a/Assets/Text/RU.json +++ b/Assets/Text/RU.json @@ -167,23 +167,24 @@ "5: Автоматически загружает резервные копии на удалённое хранилище и удаляет локально.", "6: Сохраняет локальную резервную копию, созданную при включённой автоматической загрузке, вместо её удаления.", "7: Всегда использует ID приложений для названий папок экспорта.", - "8: Требуется ли удерживать [A] три секунды для удаления резервных копий.", - "9: Требуется ли удерживать [A] три секунды для восстановления резервных копий.", - "10: Требуется ли удерживать [A] три секунды для перезаписи резервных копий.", - "11: Показывать только сохранения, которые JKSV может успешно открыть при запуске.", - "12: Показывать системные сохранения, привязанные к аккаунту.", - "13: Разрешает восстановление системных сохранений и запись в NAND. *Это может быть опасно.*", - "14: Экспортирует сохранения в ZIP вместо распакованных папок.", - "15: Уровень сжатия ZIP. По умолчанию 6. Меньшие значения быстрее, но дают меньше сжатия. 0 = хранить без сжатия.", - "16: Контролирует способ сортировки и отображения игр.", - "17: Показывать игры как текстовое меню, как в оригинальном JKSM на 3DS, вместо сетки иконок.", - "18: Принудительно использовать английский вместо языка системы.", - "19: Загружать и показывать сохранения, общие для всех пользователей. *Требуется перезапуск!*", - "20: Загружать и показывать BCAT сохранения. Используются для контента и событий в игре. *Требуется перезапуск!*", - "21: Загружать и показывать кешированные сохранения. Можно использовать для DLC и других данных. *Требуется перезапуск!*", - "22: Загружать и показывать системные сохранения. *Требуется перезапуск!*", - "23: Перемещает удаленные резервные копии в папку _TRASH_ вместо полного удаления. Влияет только на локальные копии.", - "24: Настройка скорости переходов и анимаций. Меньшее = быстрее. 1 = мгновенно, 4 = медленнее всего перед сбоями." + "8: Приоритетное использование американских английских названий для генерации безопасных путей в файловой системе.", + "9: Требуется ли удерживать [A] три секунды для удаления резервных копий.", + "10: Требуется ли удерживать [A] три секунды для восстановления резервных копий.", + "11: Требуется ли удерживать [A] три секунды для перезаписи резервных копий.", + "12: Показывать только сохранения, которые JKSV может успешно открыть при запуске.", + "13: Показывать системные сохранения, привязанные к аккаунту.", + "14: Разрешает восстановление системных сохранений и запись в NAND. *Это может быть опасно.*", + "15: Экспортирует сохранения в ZIP вместо распакованных папок.", + "16: Уровень сжатия ZIP. По умолчанию 6. Меньшие значения быстрее, но дают меньше сжатия. 0 = хранить без сжатия.", + "17: Контролирует способ сортировки и отображения игр.", + "18: Показывать игры как текстовое меню, как в оригинальном JKSM на 3DS, вместо сетки иконок.", + "19: Принудительно использовать английский вместо языка системы.", + "20: Загружать и показывать сохранения, общие для всех пользователей. *Требуется перезапуск!*", + "21: Загружать и показывать BCAT сохранения. Используются для контента и событий в игре. *Требуется перезапуск!*", + "22: Загружать и показывать кешированные сохранения. Можно использовать для DLC и других данных. *Требуется перезапуск!*", + "23: Загружать и показывать системные сохранения. *Требуется перезапуск!*", + "24: Перемещает удаленные резервные копии в папку _TRASH_ вместо полного удаления. Влияет только на локальные копии.", + "25: Настройка скорости переходов и анимаций. Меньшее = быстрее. 1 = мгновенно, 4 = медленнее всего перед сбоями." ], "SettingsMenu": [ "0: Установить папку для вывода JKSV", @@ -195,22 +196,23 @@ "6: Сохранять локальные резервные копии: %s", "7: Всегда использовать ID приложений: %s", "8: Удерживать для удаления бэкапов: %s", - "9: Удерживать для восстановления бэкапов: %s", - "10: Удерживать для перезаписи бэкапов: %s", - "11: Показывать только монтируемые игры: %s", - "12: Показать системные сохранения аккаунта: %s", - "13: Включить запись в системные сохранения и NAND: %s", - "14: Экспортировать сохранения в ZIP: %s", - "15: Уровень ZIP сжатия: %u", - "16: Тип сортировки игр: %s", - "17: Режим текстового меню (JKSM): %s", - "18: Принудительно английский: %s", - "19: Показать сохранения устройства или общие: %s", - "20: Показать BCAT сохранения: %s", - "21: Показать кешированные сохранения: %s", - "22: Показать системные сохранения: %s", - "23: Включить корзину: %s", - "24: Масштаб анимации: %.02f" + "9: Безопасные английские названия: %s", + "10: Удерживать для восстановления бэкапов: %s", + "11: Удерживать для перезаписи бэкапов: %s", + "12: Показывать только монтируемые игры: %s", + "13: Показать системные сохранения аккаунта: %s", + "14: Включить запись в системные сохранения и NAND: %s", + "15: Экспортировать сохранения в ZIP: %s", + "16: Уровень ZIP сжатия: %u", + "17: Тип сортировки игр: %s", + "18: Режим текстового меню (JKSM): %s", + "19: Принудительно английский: %s", + "20: Показать сохранения устройства или общие: %s", + "21: Показать BCAT сохранения: %s", + "22: Показать кешированные сохранения: %s", + "23: Показать системные сохранения: %s", + "24: Включить корзину: %s", + "25: Масштаб анимации: %.02f" ], "SettingsPops": [ "0: Черный список пуст!", diff --git a/Assets/Text/ZHCN.json b/Assets/Text/ZHCN.json index f4ac723..d070058 100644 --- a/Assets/Text/ZHCN.json +++ b/Assets/Text/ZHCN.json @@ -167,23 +167,24 @@ "5: 自动将备份上传到远程,并在本地删除。", "6: 当启用自动上传时,保留已创建的本地备份,而不是删除它。", "7: 始终使用应用 ID 作为导出文件夹名。", - "8: 删除备份时是否需要按住 [A] 三秒。", - "9: 恢复备份时是否需要按住 [A] 三秒。", - "10: 覆盖备份时是否需要按住 [A] 三秒。", - "11: 启动时仅显示 JKSV 能成功打开的存档。", - "12: 显示绑定到账户的系统存档。", - "13: 启用恢复系统存档并写入 NAND。*可能有危险*", - "14: 将存档导出为 ZIP 文件而非解压文件夹。", - "15: 写入 ZIP 时的压缩等级。默认值为 6。较低值速度更快,但压缩率和节省空间较低。0 为存储,无压缩。", - "16: 控制标题的排序和显示方式。", - "17: 以文本菜单显示标题,如原版 3DS JKSM,而非图标网格。", - "18: 强制使用英文而非系统语言。", - "19: 是否加载并显示所有用户共享的存档。*需重启生效!*", - "20: 是否加载并显示 BCAT 存档。通常用于分发游戏内内容和活动。*需重启生效!*", - "21: 是否加载并显示缓存存档。可用于存储 DLC 及其他内容。*需重启生效!*", - "22: 是否加载并显示系统存档。*需重启生效!*", - "23: 将已删除的备份移动到 _TRASH_ 文件夹,而非永久删除。仅影响本地备份。", - "24: 设置过渡和动画速度。值越小越快。1 为即时,4 为最慢,接近出错前的速度。" + "8: 优先使用美式英语标题生成文件系统安全路径。", + "9: 删除备份时是否需要按住 [A] 三秒。", + "10: 恢复备份时是否需要按住 [A] 三秒。", + "11: 覆盖备份时是否需要按住 [A] 三秒。", + "12: 启动时仅显示 JKSV 能成功打开的存档。", + "13: 显示绑定到账户的系统存档。", + "14: 启用恢复系统存档并写入 NAND。*可能有危险*", + "15: 将存档导出为 ZIP 文件而非解压文件夹。", + "16: 写入 ZIP 时的压缩等级。默认值为 6。较低值速度更快,但压缩率和节省空间较低。0 为存储,无压缩。", + "17: 控制标题的排序和显示方式。", + "18: 以文本菜单显示标题,如原版 3DS JKSM,而非图标网格。", + "19: 强制使用英文而非系统语言。", + "20: 是否加载并显示所有用户共享的存档。*需重启生效!*", + "21: 是否加载并显示 BCAT 存档。通常用于分发游戏内内容和活动。*需重启生效!*", + "22: 是否加载并显示缓存存档。可用于存储 DLC 及其他内容。*需重启生效!*", + "23: 是否加载并显示系统存档。*需重启生效!*", + "24: 将已删除的备份移动到 _TRASH_ 文件夹,而非永久删除。仅影响本地备份。", + "25: 设置过渡和动画速度。值越小越快。1 为即时,4 为最慢,接近出错前的速度。" ], "SettingsMenu": [ "0: 设置 JKSV 输出文件夹", @@ -194,23 +195,24 @@ "5: 自动上传备份到远程: %s", "6: 保留本地备份: %s", "7: 始终使用应用 ID: %s", - "8: 按住删除备份: %s", - "9: 按住恢复备份: %s", - "10: 按住覆盖备份: %s", - "11: 仅显示可挂载的标题: %s", - "12: 显示账户系统存档: %s", - "13: 启用写入系统存档和 NAND: %s", - "14: 导出存档为 ZIP: %s", - "15: ZIP 压缩等级: %u", - "16: 标题排序类型: %s", - "17: 文本菜单 (JKSM) 模式: %s", - "18: 强制英文: %s", - "19: 显示设备或共享存档: %s", - "20: 显示 BCAT 存档: %s", - "21: 显示缓存存档: %s", - "22: 显示系统存档: %s", - "23: 启用回收站: %s", - "24: 动画缩放: %.02f" + "8: 英文安全标题: %s", + "9: 按住删除备份: %s", + "10: 按住恢复备份: %s", + "11: 按住覆盖备份: %s", + "12: 仅显示可挂载的标题: %s", + "13: 显示账户系统存档: %s", + "14: 启用写入系统存档和 NAND: %s", + "15: 导出存档为 ZIP: %s", + "16: ZIP 压缩等级: %u", + "17: 标题排序类型: %s", + "18: 文本菜单 (JKSM) 模式: %s", + "19: 强制英文: %s", + "20: 显示设备或共享存档: %s", + "21: 显示 BCAT 存档: %s", + "22: 显示缓存存档: %s", + "23: 显示系统存档: %s", + "24: 启用回收站: %s", + "25: 动画缩放: %.02f" ], "SettingsPops": [ "0: 黑名单为空!", diff --git a/Assets/Text/ZHTW.json b/Assets/Text/ZHTW.json index f318dc1..6684961 100644 --- a/Assets/Text/ZHTW.json +++ b/Assets/Text/ZHTW.json @@ -167,23 +167,24 @@ "5: 自動將備份上傳至遠端,並於本地刪除。", "6: 當啟用自動上傳時,保留已建立的本地備份,而不是刪除它。", "7: 預設使用應用程式ID 作為匯出資料夾名稱。", - "8: 刪除備份時是否需要按住 [A] 三秒。", - "9: 還原備份時是否需要按住 [A] 三秒。", - "10: 覆蓋備份時是否需要按住 [A] 三秒。", - "11: 啟動時僅顯示 JKSV 能成功開啟的存檔。", - "12: 顯示綁定至帳號的系統存檔。", - "13: 啟用還原系統存檔並寫入 NAND。*可能有危險*", - "14: 將存檔匯出為 ZIP 檔案而非解壓資料夾。", - "15: 寫入 ZIP 時的壓縮等級。預設值為 6。數字越小速度越快,壓縮率也越小,越佔空間。0 僅儲存,無壓縮。", - "16: 控制遊戲項目的排序和顯示方式。", - "17: 以文字選單顯示標題,如原版 3DS JKSM,而非圖示網格。", - "18: 介面強制顯示英文而非系統語言。", - "19: 是否載入並顯示所有使用者共享的存檔。*需重新啟動後生效!*", - "20: 是否載入並顯示 BCAT 存檔。通常用於分發遊戲內內容及活動。*需重新啟動後生效!*", - "21: 是否載入並顯示快取存檔。可用於儲存 DLC 及其他內容。*需重新啟動後生效!*", - "22: 是否載入並顯示系統存檔。*需重新啟動後生效!*", - "23: 將已刪除的備份移至 _TRASH_ 資料夾,而非永久刪除。僅影響本地備份。", - "24: 設定轉場與動畫速度。數字越小越快。1 為立即,4 為最慢。" + "8: 優先使用美式英語標題以生成檔案系統安全路徑。", + "9 刪除備份時是否需要按住 [A] 三秒。", + "10: 還原備份時是否需要按住 [A] 三秒。", + "11: 覆蓋備份時是否需要按住 [A] 三秒。", + "12: 啟動時僅顯示 JKSV 能成功開啟的存檔。", + "13: 顯示綁定至帳號的系統存檔。", + "14: 啟用還原系統存檔並寫入 NAND。*可能有危險*", + "15: 將存檔匯出為 ZIP 檔案而非解壓資料夾。", + "16: 寫入 ZIP 時的壓縮等級。預設值為 6。數字越小速度越快,壓縮率也越小,越佔空間。0 僅儲存,無壓縮。", + "17: 控制遊戲項目的排序和顯示方式。", + "18: 以文字選單顯示標題,如原版 3DS JKSM,而非圖示網格。", + "19: 介面強制顯示英文而非系統語言。", + "20: 是否載入並顯示所有使用者共享的存檔。*需重新啟動後生效!*", + "21: 是否載入並顯示 BCAT 存檔。通常用於分發遊戲內內容及活動。*需重新啟動後生效!*", + "22: 是否載入並顯示快取存檔。可用於儲存 DLC 及其他內容。*需重新啟動後生效!*", + "23: 是否載入並顯示系統存檔。*需重新啟動後生效!*", + "24: 將已刪除的備份移至 _TRASH_ 資料夾,而非永久刪除。僅影響本地備份。", + "25: 設定轉場與動畫速度。數字越小越快。1 為立即,4 為最慢。" ], "SettingsMenu": [ "0: 設定 JKSV 匯出資料夾", @@ -194,23 +195,24 @@ "5: 自動上傳備份至遠端: %s", "6: 保留本地備份: %s", "7: 預設使用應用程式 ID: %s", - "8: 刪除備份時按住三秒確認: %s", - "9: 還原備份時按住三秒確認: %s", - "10: 覆蓋備份時按住三秒確認: %s", - "11: 僅顯示可掛載的遊戲項目: %s", - "12: 顯示帳號系統存檔: %s", - "13: 啟用寫入系統存檔與 NAND: %s", - "14: 匯出存檔為 ZIP: %s", - "15: ZIP 壓縮等級: %u", - "16: 遊戲項目排序準則: %s", - "17: 文字選單 (JKSM) 模式: %s", - "18: 介面強制英文: %s", - "19: 顯示裝置或共享存檔: %s", - "20: 顯示 BCAT 存檔: %s", - "21: 顯示快取存檔: %s", - "22: 顯示系統存檔: %s", - "23: 啟用垃圾桶: %s", - "24: 轉場動畫: %.02f" + "8: 英文安全標題: %s", + "9: 刪除備份時按住三秒確認: %s", + "10: 還原備份時按住三秒確認: %s", + "11: 覆蓋備份時按住三秒確認: %s", + "12: 僅顯示可掛載的遊戲項目: %s", + "13: 顯示帳號系統存檔: %s", + "14: 啟用寫入系統存檔與 NAND: %s", + "15: 匯出存檔為 ZIP: %s", + "16: ZIP 壓縮等級: %u", + "17: 遊戲項目排序準則: %s", + "18: 文字選單 (JKSM) 模式: %s", + "19: 介面強制英文: %s", + "20: 顯示裝置或共享存檔: %s", + "21: 顯示 BCAT 存檔: %s", + "22: 顯示快取存檔: %s", + "23: 顯示系統存檔: %s", + "24: 啟用垃圾桶: %s", + "25: 轉場動畫: %.02f" ], "SettingsPops": [ "0: 黑名單沒有項目!", diff --git a/include/config/ConfigContext.hpp b/include/config/ConfigContext.hpp index e0b513b..c1869ba 100644 --- a/include/config/ConfigContext.hpp +++ b/include/config/ConfigContext.hpp @@ -13,13 +13,14 @@ namespace config class ConfigContext { public: - ConfigContext() = default; + /// @brief Constructor. Initializes the map with default values. + ConfigContext(); /// @brief Ensures the config directory exists. void create_directory(); /// @brief Resets and saves the config back to the default values. - void reset(); + void initialize(); /// @brief Loads the config and custom paths files from the SD card if possible. bool load(); @@ -82,23 +83,8 @@ namespace config void get_custom_path(uint64_t applicationID, char *buffer, size_t bufferSize); private: - /// @brief These allow unordered_map with string key and string_view finds. - // clang-format off - struct StringViewHash - { - using is_transparent = void; - size_t operator() (std::string_view view) const noexcept { return std::hash{}(view); } - }; - - struct StringViewEqual - { - using is_transparent = void; - bool operator() (std::string_view viewA, std::string_view viewB) const noexcept { return viewA == viewB; } - }; - // clang-format on - /// @brief This is where the majority of the config values are. - std::unordered_map m_configMap{}; + std::unordered_map m_configMap{}; /// @brief The main directory JKSV operates from. fslib::Path m_workingDirectory{}; diff --git a/include/config/keys.hpp b/include/config/keys.hpp index 6426d1f..718e735 100644 --- a/include/config/keys.hpp +++ b/include/config/keys.hpp @@ -10,6 +10,7 @@ namespace config::keys inline constexpr std::string_view AUTO_UPLOAD = "AutoUploadToRemote"; inline constexpr std::string_view KEEP_LOCAL_BACKUPS = "KeepLocalBackups"; inline constexpr std::string_view USE_TITLE_IDS = "AlwaysUseTitleID"; + inline constexpr std::string_view ENGLISH_SAFE_TITLES = "EnglishSafeTitles"; inline constexpr std::string_view HOLD_FOR_DELETION = "HoldForDeletion"; inline constexpr std::string_view HOLD_FOR_RESTORATION = "HoldForRestoration"; inline constexpr std::string_view HOLD_FOR_OVERWRITE = "HoldForOverWrite"; diff --git a/include/data/TitleInfo.hpp b/include/data/TitleInfo.hpp index 135b004..353e2b5 100644 --- a/include/data/TitleInfo.hpp +++ b/include/data/TitleInfo.hpp @@ -118,5 +118,9 @@ namespace data /// @brief Private function to get/create the path safe title. void get_create_path_safe_title() noexcept; + + /// @brief Checks and returns whether or not a US English or GB English title exists. + /// @param titleOut Pointer to pointer to store title pointer. + bool get_english_title(const char **titleOut) const noexcept; }; } // namespace data diff --git a/include/error.hpp b/include/error.hpp index f83a55b..d732712 100644 --- a/include/error.hpp +++ b/include/error.hpp @@ -1,4 +1,5 @@ #pragma once +#include #include #include @@ -12,4 +13,9 @@ namespace error /// @brief Returns whether or not the pointer passed is null. Records the location in which this occurred. bool is_null(const void *pointer, const std::source_location &location = std::source_location::current()) noexcept; + + /// @brief Returns whether or not the span of pointers passed contains any nullptrs. + bool is_null(std::initializer_list pointers, + const std::source_location &location = std::source_location::current()) noexcept; + } diff --git a/source/appstates/SettingsState.cpp b/source/appstates/SettingsState.cpp index d62c269..7933f10 100644 --- a/source/appstates/SettingsState.cpp +++ b/source/appstates/SettingsState.cpp @@ -19,24 +19,14 @@ namespace { - // All of these states share the same render target. + /// @brief Name of the target all "secondary" states share. constexpr std::string_view SECONDARY_TARGET = "SecondaryTarget"; + /// @brief This is used to place "NULL" keys in our local array constexpr std::string_view CONFIG_KEY_NULL = "NULL"; - enum - { - CHANGE_WORK_DIR = 0, - EDIT_BLACKLIST = 1, - CYCLE_ZIP = 15, - CYCLE_SORT_TYPE = 16, - TOGGLE_JKSM = 17, - TOGGLE_TRASH = 23, - CYCLE_SCALING = 24 - }; - - // This is needed to be able to get and set keys by index. Anything "NULL" isn't a key that can be easily toggled. - constexpr std::array CONFIG_KEY_ARRAY = {CONFIG_KEY_NULL, + /// @brief This makes it easier to work with key indexes. Anything NULL is something that is not easily toggled. + constexpr std::array CONFIG_KEY_ARRAY = {CONFIG_KEY_NULL, CONFIG_KEY_NULL, config::keys::INCLUDE_DEVICE_SAVES, config::keys::AUTO_BACKUP_ON_RESTORE, @@ -44,6 +34,7 @@ namespace config::keys::AUTO_UPLOAD, config::keys::KEEP_LOCAL_BACKUPS, config::keys::USE_TITLE_IDS, + config::keys::ENGLISH_SAFE_TITLES, config::keys::HOLD_FOR_DELETION, config::keys::HOLD_FOR_RESTORATION, config::keys::HOLD_FOR_OVERWRITE, @@ -61,6 +52,19 @@ namespace config::keys::SHOW_SYSTEM_USER, config::keys::ENABLE_TRASH_BIN, CONFIG_KEY_NULL}; + + /// @brief These are the indexes used for case indexing. + enum CaseIndexes + { + ChangeWorkDir = 0, + EditBlacklist = 1, + CycleZip = 16, + CycleSortType = 17, + ToggleJKSM = 18, + ToggleTrash = 24, + CycleScaling = 25 + }; + } // namespace // ---- Construction ---- @@ -110,7 +114,8 @@ void SettingsState::render() void SettingsState::load_settings_menu() { - for (int i = 0; const char *option = strings::get_by_name(strings::names::SETTINGS_MENU, i); i++) + const char *option{}; + for (int i = 0; (option = strings::get_by_name(strings::names::SETTINGS_MENU, i)); i++) { m_settingsMenu->add_option(option); } @@ -118,17 +123,16 @@ void SettingsState::load_settings_menu() void SettingsState::load_extra_strings() { - for (int i = 0; const char *onOff = strings::get_by_name(strings::names::ON_OFF, i); i++) { m_onOff[i] = onOff; } - for (int i = 0; const char *sortType = strings::get_by_name(strings::names::SORT_TYPES, i); i++) - { - m_sortTypes[i] = sortType; - } + const char *onOff{}, *sortType{}; + for (int i = 0; (onOff = strings::get_by_name(strings::names::ON_OFF, i)); i++) { m_onOff[i] = onOff; } + for (int i = 0; (sortType = strings::get_by_name(strings::names::SORT_TYPES, i)); i++) { m_sortTypes[i] = sortType; } } void SettingsState::update_menu_options() { - static constexpr std::array TOGGLE_INDEXES = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 17, 18, 19, 20, 21, 22, 23}; + // These are the indexes that are a really simple toggle. + static constexpr std::array TOGGLE_INDEXES = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 18, 19, 20, 21, 22, 23, 24}; for (const int index : TOGGLE_INDEXES) { @@ -140,25 +144,25 @@ void SettingsState::update_menu_options() } { - const char *zipCompFormat = strings::get_by_name(strings::names::SETTINGS_MENU, CYCLE_ZIP); - const uint8_t zipLevel = config::get_by_key(CONFIG_KEY_ARRAY[CYCLE_ZIP]); + const char *zipCompFormat = strings::get_by_name(strings::names::SETTINGS_MENU, CaseIndexes::CycleZip); + const uint8_t zipLevel = config::get_by_key(CONFIG_KEY_ARRAY[CaseIndexes::CycleZip]); const std::string zipOption = stringutil::get_formatted_string(zipCompFormat, zipLevel); - m_settingsMenu->edit_option(CYCLE_ZIP, zipOption); + m_settingsMenu->edit_option(CaseIndexes::CycleZip, zipOption); } { - const char *titleSortFormat = strings::get_by_name(strings::names::SETTINGS_MENU, CYCLE_SORT_TYPE); - const uint8_t sortType = config::get_by_key(CONFIG_KEY_ARRAY[CYCLE_SORT_TYPE]); + const char *titleSortFormat = strings::get_by_name(strings::names::SETTINGS_MENU, CaseIndexes::CycleSortType); + const uint8_t sortType = config::get_by_key(CONFIG_KEY_ARRAY[CaseIndexes::CycleSortType]); const char *typeText = SettingsState::get_sort_type_text(sortType); const std::string sortTypeOption = stringutil::get_formatted_string(titleSortFormat, typeText); - m_settingsMenu->edit_option(CYCLE_SORT_TYPE, sortTypeOption); + m_settingsMenu->edit_option(CaseIndexes::CycleSortType, sortTypeOption); } { - const char *scalingFormat = strings::get_by_name(strings::names::SETTINGS_MENU, CYCLE_SCALING); + const char *scalingFormat = strings::get_by_name(strings::names::SETTINGS_MENU, CaseIndexes::CycleScaling); const double scaling = config::get_animation_scaling(); const std::string scalingOption = stringutil::get_formatted_string(scalingFormat, scaling); - m_settingsMenu->edit_option(CYCLE_SCALING, scalingOption); + m_settingsMenu->edit_option(CaseIndexes::CycleScaling, scalingOption); } } @@ -169,8 +173,8 @@ void SettingsState::change_working_directory() const char *popSuccessFormat = strings::get_by_name(strings::names::SETTINGS_POPS, 1); const char *popFailed = strings::get_by_name(strings::names::SETTINGS_POPS, 2); - const fslib::Path oldPath = config::get_working_directory(); std::array pathBuffer = {0}; + const fslib::Path oldPath = config::get_working_directory(); const bool input = keyboard::get_input(SwkbdType_Normal, oldPath.string().c_str(), inputHeader, pathBuffer.data(), FS_MAX_PATH); @@ -190,9 +194,7 @@ void SettingsState::change_working_directory() moved = fs::move_directory_recursively(oldPath, newPath); error::fslib(fslib::delete_directory_recursively(oldPath)); } - else { - moved = fslib::rename_directory(oldPath, newPath); - } + else { moved = fslib::rename_directory(oldPath, newPath); } if (!moved) { @@ -228,14 +230,14 @@ void SettingsState::toggle_options() switch (selected) { - case CHANGE_WORK_DIR: SettingsState::change_working_directory(); break; - case EDIT_BLACKLIST: SettingsState::create_push_blacklist_edit(); break; - case CYCLE_ZIP: SettingsState::cycle_zip_level(); break; - case CYCLE_SORT_TYPE: SettingsState::cycle_sort_type(); break; - case TOGGLE_JKSM: SettingsState::toggle_jksm_mode(); break; - case TOGGLE_TRASH: SettingsState::toggle_trash_folder(); break; - case CYCLE_SCALING: SettingsState::cycle_anim_scaling(); break; - default: config::toggle_by_key(CONFIG_KEY_ARRAY[selected]); break; + case CaseIndexes::ChangeWorkDir: SettingsState::change_working_directory(); break; + case CaseIndexes::EditBlacklist: SettingsState::create_push_blacklist_edit(); break; + case CaseIndexes::CycleZip: SettingsState::cycle_zip_level(); break; + case CaseIndexes::CycleSortType: SettingsState::cycle_sort_type(); break; + case CaseIndexes::ToggleJKSM: SettingsState::toggle_jksm_mode(); break; + case CaseIndexes::ToggleTrash: SettingsState::toggle_trash_folder(); break; + case CaseIndexes::CycleScaling: SettingsState::cycle_anim_scaling(); break; + default: config::toggle_by_key(CONFIG_KEY_ARRAY[selected]); break; } SettingsState::update_menu_options(); @@ -290,9 +292,7 @@ void SettingsState::toggle_trash_folder() config::toggle_by_key(config::keys::ENABLE_TRASH_BIN); if (trashEnabled) { error::fslib(fslib::delete_directory_recursively(trashPath)); } - else { - error::fslib(fslib::create_directory(trashPath)); - } + else { error::fslib(fslib::create_directory(trashPath)); } } void SettingsState::cycle_anim_scaling() diff --git a/source/config/ConfigContext.cpp b/source/config/ConfigContext.cpp index b79c105..92f69a3 100644 --- a/source/config/ConfigContext.cpp +++ b/source/config/ConfigContext.cpp @@ -21,6 +21,14 @@ namespace constexpr const char *APP_ID_HEX_FORMAT = "%016llX"; } +// ---- Construction ---- + +config::ConfigContext::ConfigContext() +{ + // This will default value everything. + ConfigContext::initialize(); +} + // ---- Public functions ---- void config::ConfigContext::create_directory() @@ -32,32 +40,33 @@ void config::ConfigContext::create_directory() error::fslib(fslib::create_directories_recursively(configDir)); } -void config::ConfigContext::reset() +void config::ConfigContext::initialize() { - m_workingDirectory = PATH_DEFAULT_WORK_DIR; - m_configMap[config::keys::INCLUDE_DEVICE_SAVES.data()] = 0; - m_configMap[config::keys::AUTO_BACKUP_ON_RESTORE.data()] = 1; - m_configMap[config::keys::AUTO_NAME_BACKUPS.data()] = 0; - m_configMap[config::keys::AUTO_UPLOAD.data()] = 0; - m_configMap[config::keys::KEEP_LOCAL_BACKUPS.data()] = 0; - m_configMap[config::keys::USE_TITLE_IDS.data()] = 0; - m_configMap[config::keys::HOLD_FOR_DELETION.data()] = 1; - m_configMap[config::keys::HOLD_FOR_RESTORATION.data()] = 1; - m_configMap[config::keys::HOLD_FOR_OVERWRITE.data()] = 1; - m_configMap[config::keys::ONLY_LIST_MOUNTABLE.data()] = 1; - m_configMap[config::keys::LIST_ACCOUNT_SYS_SAVES.data()] = 0; - m_configMap[config::keys::ALLOW_WRITING_TO_SYSTEM.data()] = 0; - m_configMap[config::keys::EXPORT_TO_ZIP.data()] = 1; - m_configMap[config::keys::ZIP_COMPRESSION_LEVEL.data()] = 6; - m_configMap[config::keys::TITLE_SORT_TYPE.data()] = 0; - m_configMap[config::keys::JKSM_TEXT_MODE.data()] = 0; - m_configMap[config::keys::FORCE_ENGLISH.data()] = 0; - m_configMap[config::keys::SHOW_DEVICE_USER.data()] = 1; - m_configMap[config::keys::SHOW_BCAT_USER.data()] = 0; - m_configMap[config::keys::SHOW_CACHE_USER.data()] = 0; - m_configMap[config::keys::SHOW_SYSTEM_USER.data()] = 0; - m_configMap[config::keys::ENABLE_TRASH_BIN.data()] = 0; - m_animationScaling = DEFAULT_SCALING; + m_workingDirectory = PATH_DEFAULT_WORK_DIR; + m_configMap[config::keys::INCLUDE_DEVICE_SAVES] = 0; + m_configMap[config::keys::AUTO_BACKUP_ON_RESTORE] = 1; + m_configMap[config::keys::AUTO_NAME_BACKUPS] = 0; + m_configMap[config::keys::AUTO_UPLOAD] = 0; + m_configMap[config::keys::KEEP_LOCAL_BACKUPS] = 0; + m_configMap[config::keys::USE_TITLE_IDS] = 0; + m_configMap[config::keys::ENGLISH_SAFE_TITLES] = 0; + m_configMap[config::keys::HOLD_FOR_DELETION] = 1; + m_configMap[config::keys::HOLD_FOR_RESTORATION] = 1; + m_configMap[config::keys::HOLD_FOR_OVERWRITE] = 1; + m_configMap[config::keys::ONLY_LIST_MOUNTABLE] = 1; + m_configMap[config::keys::LIST_ACCOUNT_SYS_SAVES] = 0; + m_configMap[config::keys::ALLOW_WRITING_TO_SYSTEM] = 0; + m_configMap[config::keys::EXPORT_TO_ZIP] = 1; + m_configMap[config::keys::ZIP_COMPRESSION_LEVEL] = 6; + m_configMap[config::keys::TITLE_SORT_TYPE] = 0; + m_configMap[config::keys::JKSM_TEXT_MODE] = 0; + m_configMap[config::keys::FORCE_ENGLISH] = 0; + m_configMap[config::keys::SHOW_DEVICE_USER] = 1; + m_configMap[config::keys::SHOW_BCAT_USER] = 0; + m_configMap[config::keys::SHOW_CACHE_USER] = 0; + m_configMap[config::keys::SHOW_SYSTEM_USER] = 0; + m_configMap[config::keys::ENABLE_TRASH_BIN] = 0; + m_animationScaling = DEFAULT_SCALING; } bool config::ConfigContext::load() @@ -196,10 +205,11 @@ bool config::ConfigContext::load_config_file() const char *key = json_object_iter_peek_name(&configIter); json_object *value = json_object_iter_peek_value(&configIter); - const bool workDir = std::strcmp(key, config::keys::WORKING_DIRECTORY.data()) == 0; - const bool scaling = std::strcmp(key, config::keys::UI_ANIMATION_SCALE.data()) == 0; - const bool favorites = std::strcmp(key, config::keys::FAVORITES.data()) == 0; - const bool blacklist = std::strcmp(key, config::keys::BLACKLIST.data()) == 0; + // These keys require special handling. + const bool workDir = key == config::keys::WORKING_DIRECTORY; + const bool scaling = key == config::keys::UI_ANIMATION_SCALE; + const bool favorites = key == config::keys::FAVORITES; + const bool blacklist = key == config::keys::BLACKLIST; if (workDir) { m_workingDirectory = json_object_get_string(value); } else if (scaling) { m_animationScaling = json_object_get_double(value); } diff --git a/source/config/config.cpp b/source/config/config.cpp index 57688ea..494ef89 100644 --- a/source/config/config.cpp +++ b/source/config/config.cpp @@ -10,14 +10,14 @@ namespace void config::initialize() { - // This is needed so new config options can be added without invalidating old configurations. - s_context.reset(); - + // Ensure the directory actually exists. s_context.create_directory(); + + // This will load the config if the file is found. s_context.load(); } -void config::reset_to_default() { s_context.reset(); } +void config::reset_to_default() { s_context.initialize(); } void config::save() { s_context.save(); } @@ -39,9 +39,7 @@ void config::add_remove_favorite(uint64_t applicationID) { const bool favorite = s_context.is_favorite(applicationID); if (favorite) { s_context.remove_favorite(applicationID); } - else { - s_context.add_favorite(applicationID); - } + else { s_context.add_favorite(applicationID); } } bool config::is_favorite(uint64_t applicationID) noexcept { return s_context.is_favorite(applicationID); } @@ -50,9 +48,7 @@ void config::add_remove_blacklist(uint64_t applicationID) { const bool blacklisted = s_context.is_blacklisted(applicationID); if (blacklisted) { s_context.remove_from_blacklist(applicationID); } - else { - s_context.add_to_blacklist(applicationID); - } + else { s_context.add_to_blacklist(applicationID); } } void config::get_blacklisted_titles(std::vector &listOut) { s_context.get_blacklist(listOut); } diff --git a/source/data/TitleInfo.cpp b/source/data/TitleInfo.cpp index 29518e2..17b55b1 100644 --- a/source/data/TitleInfo.cpp +++ b/source/data/TitleInfo.cpp @@ -4,6 +4,7 @@ #include "error.hpp" #include "graphics/colors.hpp" #include "graphics/gfxutil.hpp" +#include "logging/logger.hpp" #include "stringutil.hpp" #include @@ -83,6 +84,7 @@ int64_t data::TitleInfo::get_save_data_size(uint8_t saveType) const noexcept case FsSaveDataType_Temporary: return nacp.temporary_storage_size; case FsSaveDataType_Cache: return nacp.cache_storage_size; } + return 0; } @@ -97,6 +99,7 @@ int64_t data::TitleInfo::get_save_data_size_max(uint8_t saveType) const noexcept case FsSaveDataType_Temporary: return nacp.temporary_storage_size; case FsSaveDataType_Cache: return std::max(nacp.cache_storage_size, nacp.cache_storage_data_and_journal_size_max); } + return 0; } @@ -111,6 +114,7 @@ int64_t data::TitleInfo::get_journal_size(uint8_t saveType) const noexcept case FsSaveDataType_Temporary: return nacp.temporary_storage_size; case FsSaveDataType_Cache: return nacp.cache_storage_journal_size; } + return 0; } @@ -127,6 +131,7 @@ int64_t data::TitleInfo::get_journal_size_max(uint8_t saveType) const noexcept case FsSaveDataType_Cache: return std::max(nacp.cache_storage_journal_size, nacp.cache_storage_data_and_journal_size_max); } + return 0; } @@ -140,6 +145,7 @@ bool data::TitleInfo::has_save_data_type(uint8_t saveType) const noexcept case FsSaveDataType_Device: return nacp.device_save_data_size > 0 || nacp.device_save_data_size_max > 0; case FsSaveDataType_Cache: return nacp.cache_storage_size > 0 || nacp.cache_storage_data_and_journal_size_max > 0; } + return false; } @@ -175,14 +181,52 @@ void data::TitleInfo::load_icon() void data::TitleInfo::get_create_path_safe_title() noexcept { + // Check if the title has a custom output path instead. const bool hasCustom = config::has_custom_path(m_applicationID); if (hasCustom) { + // Read it into our local buffer. config::get_custom_path(m_applicationID, m_pathSafeTitle, TitleInfo::SIZE_PATH_SAFE); return; } + // This is whether or not to use the title ID. It's used to bypass the English check. const bool useTitleId = config::get_by_key(config::keys::USE_TITLE_IDS); - const bool sanitized = !useTitleId && stringutil::sanitize_string_for_path(m_entry->name, m_pathSafeTitle, SIZE_PATH_SAFE); + const bool useEnglish = config::get_by_key(config::keys::ENGLISH_SAFE_TITLES); + + // Grab the English title in case it's needed. + const char *englishTitle{}; + const bool hasEnglish = TitleInfo::get_english_title(&englishTitle); + + // Final condition for override. + const bool englishSafeTitle = useEnglish && hasEnglish; + + // This is our final string to use. + const char *safeTarget = englishSafeTitle ? englishTitle : m_entry->name; + + const bool sanitized = !useTitleId && stringutil::sanitize_string_for_path(safeTarget, m_pathSafeTitle, SIZE_PATH_SAFE); if (useTitleId || !sanitized) { std::snprintf(m_pathSafeTitle, TitleInfo::SIZE_PATH_SAFE, "%016lX", m_applicationID); } } + +bool data::TitleInfo::get_english_title(const char **titleOut) const noexcept +{ + // These are the indexes for the english titles. + static constexpr uint8_t ENUS_INDEX = 0; + static constexpr uint8_t ENGB_INDEX = 1; + + // Grab the pointers to them. + const char *enUs = m_data.nacp.lang[ENUS_INDEX].name; + const char *enGb = m_data.nacp.lang[ENGB_INDEX].name; + + // If they're both empty, return false. + if (enUs[0] == 0x00 && enGb[0] == 0x00) { return false; } + + // Get the length. Assign whichever is longer. + const size_t enUsLength = std::char_traits::length(enUs); + const size_t enGbLength = std::char_traits::length(enGb); + + // Assign whichever is longer. EnUS wins on match. + *titleOut = enUsLength >= enGbLength ? enUs : enGb; + + return true; +} diff --git a/source/error.cpp b/source/error.cpp index 290d860..680f0f3 100644 --- a/source/error.cpp +++ b/source/error.cpp @@ -49,14 +49,40 @@ bool error::is_null(const void *pointer, const std::source_location &location) n return true; } +bool error::is_null(std::initializer_list pointers, const std::source_location &location) noexcept +{ + // Loop through the list. Using index so the error logged can be tracked. + int index{}; + for (const void *pointer : pointers) + { + // If it's null, log and return true. + if (!pointer) + { + std::string_view file{}, function{}; + prep_locations(file, function, location); + logger::log("%s::%s::%u::%u::nullptr{%i}!", + file.data(), + function.data(), + location.line(), + location.column(), + index); + + return true; + } + ++index; + } + // Nothing was null. + return false; +} + static void prep_locations(std::string_view &file, std::string_view &function, const std::source_location &location) noexcept { file = location.file_name(); function = location.function_name(); - size_t fileBegin = file.find_last_of('/'); + const size_t fileBegin = file.find_last_of('/'); if (fileBegin != file.npos) { file = file.substr(fileBegin + 1); } - size_t functionBegin = function.find_first_of(' '); + const size_t functionBegin = function.find_first_of(' '); if (functionBegin != function.npos) { function = function.substr(functionBegin + 1); } } diff --git a/source/tasks/backup.cpp b/source/tasks/backup.cpp index 3e80043..805b1a0 100644 --- a/source/tasks/backup.cpp +++ b/source/tasks/backup.cpp @@ -38,7 +38,7 @@ void tasks::backup::create_new_backup_local(sys::threadpool::JobData taskData) const bool killTask = castData->killTask; if (error::is_null(task)) { return; } - else if (error::is_null(user) || error::is_null(titleInfo) || error::is_null(saveInfo)) { TASK_FINISH_RETURN(task); } + else if (error::is_null({user, titleInfo, saveInfo})) { TASK_FINISH_RETURN(task); } const std::string targetString = target.string(); const bool hasZipExt = std::strstr(targetString.c_str(), STRING_ZIP_EXT); @@ -84,7 +84,7 @@ void tasks::backup::create_new_backup_remote(sys::threadpool::JobData taskData) remote::Storage *remote = remote::get_remote_storage(); if (error::is_null(task)) { return; } - else if (error::is_null(user) || error::is_null(titleInfo) || error::is_null(remote) || error::is_null(saveInfo)) + else if (error::is_null({user, titleInfo, remote, saveInfo})) { TASK_FINISH_RETURN(task); } { TASK_FINISH_RETURN(task); } @@ -158,7 +158,7 @@ void tasks::backup::overwrite_backup_remote(sys::threadpool::JobData taskData) remote::Storage *remote = remote::get_remote_storage(); if (error::is_null(task)) { return; } - else if (error::is_null(remote) || error::is_null(target)) { TASK_FINISH_RETURN(task); } + else if (error::is_null({remote, target})) { TASK_FINISH_RETURN(task); } const fslib::Path tempPath{PATH_JKSV_TEMP}; const int popTicks = ui::PopMessageManager::DEFAULT_TICKS; @@ -203,10 +203,7 @@ void tasks::backup::restore_backup_local(sys::threadpool::JobData taskData) BackupMenuState *spawningState = castData->spawningState; if (error::is_null(task)) { return; } - else if (error::is_null(user) || error::is_null(titleInfo) || error::is_null(saveInfo) || error::is_null(spawningState)) - { - TASK_FINISH_RETURN(task); - } + else if (error::is_null({user, titleInfo, saveInfo, spawningState})) { TASK_FINISH_RETURN(task); } FsSaveDataExtraData extraData{}; const uint8_t saveType = saveInfo->save_data_type; @@ -275,10 +272,7 @@ void tasks::backup::restore_backup_remote(sys::threadpool::JobData taskData) const bool autoBackup = config::get_by_key(config::keys::AUTO_BACKUP_ON_RESTORE); if (error::is_null(task)) { return; } - else if (error::is_null(user) || error::is_null(titleInfo) || error::is_null(saveInfo) || error::is_null(remote)) - { - TASK_FINISH_RETURN(task); - } + else if (error::is_null({user, titleInfo, saveInfo, remote})) { TASK_FINISH_RETURN(task); } if (autoBackup) { auto_backup(task, castData); } @@ -402,7 +396,7 @@ void tasks::backup::delete_backup_remote(sys::threadpool::JobData taskData) remote::Storage *remote = remote::get_remote_storage(); if (error::is_null(task)) { return; } - else if (error::is_null(target) || error::is_null(spawningState) || error::is_null(remote)) { TASK_FINISH_RETURN(task); } + else if (error::is_null({target, spawningState, remote})) { TASK_FINISH_RETURN(task); } const int popTicks = ui::PopMessageManager::DEFAULT_TICKS; { @@ -433,7 +427,7 @@ void tasks::backup::upload_backup(sys::threadpool::JobData taskData) remote::Storage *remote = remote::get_remote_storage(); if (error::is_null(task)) { return; } - else if (error::is_null(spawningState) || error::is_null(remote)) { TASK_FINISH_RETURN(task); } + else if (error::is_null({spawningState, remote})) { TASK_FINISH_RETURN(task); } { const char *filename = path.get_filename(); @@ -458,10 +452,7 @@ void tasks::backup::patch_backup(sys::threadpool::JobData taskData) BackupMenuState *spawningState = castData->spawningState; remote::Storage *remote = remote::get_remote_storage(); if (error::is_null(task)) { return; } - else if (error::is_null(remoteItem) || error::is_null(spawningState) || error::is_null(remote)) - { - TASK_FINISH_RETURN(task); - } + else if (error::is_null({remoteItem, spawningState, remote})) { TASK_FINISH_RETURN(task); } { const char *filename = path.get_filename(); @@ -483,7 +474,7 @@ static void auto_backup(sys::ProgressTask *task, BackupMenuState::TaskData taskD data::TitleInfo *titleInfo = taskData->titleInfo; const FsSaveDataInfo *saveInfo = taskData->saveInfo; fslib::Path &target = taskData->path; - if (error::is_null(user) || error::is_null(titleInfo) || error::is_null(saveInfo)) { return; } + if (error::is_null({user, titleInfo, saveInfo})) { return; } { fs::ScopedSaveMount testMount{fs::DEFAULT_SAVE_MOUNT, saveInfo, false}; @@ -534,7 +525,7 @@ static bool read_and_process_meta(const fslib::Path &targetDir, BackupMenuState: data::TitleInfo *titleInfo = taskData->titleInfo; const FsSaveDataInfo *saveInfo = taskData->saveInfo; if (error::is_null(task)) { return false; } - else if (error::is_null(user) || error::is_null(titleInfo) || error::is_null(saveInfo)) { return false; } + else if (error::is_null({user, titleInfo, saveInfo})) { return false; } const int popTicks = ui::PopMessageManager::DEFAULT_TICKS; { @@ -571,7 +562,7 @@ static bool read_and_process_meta(fs::MiniUnzip &unzip, BackupMenuState::TaskDat data::User *user = taskData->user; data::TitleInfo *titleInfo = taskData->titleInfo; const FsSaveDataInfo *saveInfo = taskData->saveInfo; - if (error::is_null(user) || error::is_null(titleInfo) || error::is_null(saveInfo)) { return false; } + if (error::is_null({user, titleInfo, saveInfo})) { return false; } const int popTicks = ui::PopMessageManager::DEFAULT_TICKS; { diff --git a/source/tasks/savecreate.cpp b/source/tasks/savecreate.cpp index 9523e80..b413a1d 100644 --- a/source/tasks/savecreate.cpp +++ b/source/tasks/savecreate.cpp @@ -19,7 +19,7 @@ void tasks::savecreate::create_save_data_for(sys::threadpool::JobData taskData) const uint16_t saveIndex = isCache ? castData->saveDataIndex : 0; if (error::is_null(task)) { return; } - else if (error::is_null(user) || error::is_null(titleInfo) || error::is_null(spawningState)) { TASK_FINISH_RETURN(task); } + else if (error::is_null({user, titleInfo, spawningState})) { TASK_FINISH_RETURN(task); } const int popTicks = ui::PopMessageManager::DEFAULT_TICKS; const char *statusFormat = strings::get_by_name(strings::names::USEROPTION_STATUS, 0); @@ -57,7 +57,7 @@ void tasks::savecreate::create_save_data_for_sd(sys::threadpool::JobData taskDat const uint16_t saveIndex = isCache ? castData->saveDataIndex : 0; if (error::is_null(task)) { return; } - else if (error::is_null(user) || error::is_null(titleInfo) || error::is_null(spawningState)) { TASK_FINISH_RETURN(task); } + else if (error::is_null({user, titleInfo, spawningState})) { TASK_FINISH_RETURN(task); } const int popTicks = ui::PopMessageManager::DEFAULT_TICKS; const char *statusFormat = strings::get_by_name(strings::names::USEROPTION_STATUS, 0); diff --git a/source/tasks/saveimport.cpp b/source/tasks/saveimport.cpp index f74204e..fcad59a 100644 --- a/source/tasks/saveimport.cpp +++ b/source/tasks/saveimport.cpp @@ -129,7 +129,7 @@ static bool test_for_save(data::User *user, const fs::SaveMetaData &saveMeta) static bool create_save_data_from_meta(sys::ProgressTask *task, data::User *user, const fs::SaveMetaData &saveMeta) { - if (error::is_null(task) || error::is_null(user)) { return false; } + if (error::is_null({task, user})) { return false; } // Gonna borrow this. const char *statusFormat = strings::get_by_name(strings::names::USEROPTION_STATUS, 0); diff --git a/source/tasks/titleoptions.cpp b/source/tasks/titleoptions.cpp index 0e4b628..53a8d89 100644 --- a/source/tasks/titleoptions.cpp +++ b/source/tasks/titleoptions.cpp @@ -22,11 +22,7 @@ void tasks::titleoptions::blacklist_title(sys::threadpool::JobData taskData) TitleOptionState *spawningState = castData->spawningState; if (error::is_null(task)) { return; } - else if (error::is_null(titleInfo) || error::is_null(spawningState)) - { - task->complete(); - return; - } + else if (error::is_null({titleInfo, spawningState})) { TASK_FINISH_RETURN(task); } const uint64_t applicationID = titleInfo->get_application_id(); config::add_remove_blacklist(applicationID); @@ -89,7 +85,7 @@ void tasks::titleoptions::delete_all_remote_backups_for_title(sys::threadpool::J remote::Storage *remote = remote::get_remote_storage(); if (error::is_null(task)) { return; } - else if (error::is_null(titleInfo) || error::is_null(remote)) { TASK_FINISH_RETURN(task); } + else if (error::is_null({titleInfo, remote})) { TASK_FINISH_RETURN(task); } const char *title = titleInfo->get_title(); const std::string_view remoteTitle = remote->supports_utf8() ? titleInfo->get_title() : titleInfo->get_path_safe_title(); @@ -146,7 +142,7 @@ void tasks::titleoptions::reset_save_data(sys::threadpool::JobData taskData) data::TitleInfo *titleInfo = castData->titleInfo; const FsSaveDataInfo *saveInfo = castData->saveInfo; if (error::is_null(task)) { return; } - else if (error::is_null(user) || error::is_null(titleInfo) || error::is_null(saveInfo)) { TASK_FINISH_RETURN(task); } + else if (error::is_null({user, titleInfo, saveInfo})) { TASK_FINISH_RETURN(task); } const int popTicks = ui::PopMessageManager::DEFAULT_TICKS; const char *popFailed = strings::get_by_name(strings::names::TITLEOPTION_POPS, 2); @@ -181,11 +177,7 @@ void tasks::titleoptions::delete_save_data_from_system(sys::threadpool::JobData TitleSelectCommon *titleSelect = castData->titleSelect; TitleOptionState *spawningState = castData->spawningState; if (error::is_null(task)) { return; } - else if (error::is_null(user) || error::is_null(titleInfo) || error::is_null(saveInfo) || error::is_null(titleSelect) || - error::is_null(spawningState)) - { - TASK_FINISH_RETURN(task); - } + else if (error::is_null({user, titleInfo, saveInfo, titleSelect, spawningState})) { TASK_FINISH_RETURN(task); } const int popTicks = ui::PopMessageManager::DEFAULT_TICKS; { @@ -220,7 +212,7 @@ void tasks::titleoptions::extend_save_data(sys::threadpool::JobData taskData) data::TitleInfo *titleInfo = castData->titleInfo; const FsSaveDataInfo *saveInfo = castData->saveInfo; if (error::is_null(task)) { return; } - else if (error::is_null(user) || error::is_null(titleInfo) || error::is_null(saveInfo)) { TASK_FINISH_RETURN(task); } + else if (error::is_null({user, titleInfo, saveInfo})) { TASK_FINISH_RETURN(task); } std::array sizeBuffer = {0}; FsSaveDataExtraData extraData{}; diff --git a/source/tasks/useroptions.cpp b/source/tasks/useroptions.cpp index 6dba7a4..17052eb 100644 --- a/source/tasks/useroptions.cpp +++ b/source/tasks/useroptions.cpp @@ -72,7 +72,7 @@ void tasks::useroptions::backup_all_for_user_remote(sys::threadpool::JobData tas data::User *user = castData->user; remote::Storage *remote = remote::get_remote_storage(); if (error::is_null(task)) { return; } - else if (error::is_null(user) || error::is_null(remote)) { TASK_FINISH_RETURN(task); } + else if (error::is_null({user, remote})) { TASK_FINISH_RETURN(task); } auto backupStruct = std::make_shared(); backupStruct->task = task; @@ -122,7 +122,7 @@ void tasks::useroptions::create_all_save_data_for_user(sys::threadpool::JobData data::User *user = castData->user; UserOptionState *spawningState = castData->spawningState; if (error::is_null(task)) { return; } - else if (error::is_null(user) || error::is_null(spawningState)) { TASK_FINISH_RETURN(task); } + else if (error::is_null({user, spawningState})) { TASK_FINISH_RETURN(task); } data::TitleInfoList infoList{}; data::get_title_info_list(infoList); @@ -162,7 +162,7 @@ void tasks::useroptions::delete_all_save_data_for_user(sys::threadpool::JobData data::User *user = castData->user; UserOptionState *spawningState = castData->spawningState; if (error::is_null(task)) { return; } - else if (error::is_null(user) || error::is_null(spawningState) || user->get_account_save_type() == FsSaveDataType_System) + else if (error::is_null({user, spawningState}) || user->get_account_save_type() == FsSaveDataType_System) { TASK_FINISH_RETURN(task); } diff --git a/source/ui/Menu.cpp b/source/ui/Menu.cpp index 2d3147d..a642531 100644 --- a/source/ui/Menu.cpp +++ b/source/ui/Menu.cpp @@ -170,7 +170,6 @@ void ui::Menu::initialize_sounds() static constexpr const char *CURSOR_PATH = "romfs:/Sound/MenuCursor.wav"; if (sm_cursor) { return; } - sm_cursor = sdl::SoundManager::load(CURSOR_NAME, CURSOR_PATH); } @@ -198,6 +197,7 @@ void ui::Menu::handle_input() const bool wrapEnd = upPressed && m_selected - 1 < 0; const bool wrapBegin = downPressed && m_selected + 1 >= optionsSize; + // This is used to tell whether or not to play the sound. const int previousSelected = m_selected; if (wrapEnd) { m_selected = optionsSize - 1; } @@ -217,17 +217,28 @@ void ui::Menu::handle_input() void ui::Menu::update_scrolling() { + // Get the option count. Bail if the menu isn't long enough to need scrolling. const int optionsSize = m_options.size(); if (optionsSize <= m_maxDisplayOptions) { return; } + // This is where scrolling menu down (or upward) ends. const int endScrollPoint = optionsSize - (m_maxDisplayOptions - m_scrollLength); - const int scrolledItems = m_selected - m_scrollLength; + // This is the total number of items scrolled passed the length where scrolling needs to occur. + const int scrolledItems = m_selected - m_scrollLength; + + // This is our updated target. int targetY{}; + // We need this for comparison later. const int previousTarget = m_transition.get_target_y(); + if (m_selected < m_scrollLength) { targetY = m_originalY; } // Don't bother. There's no point. + // If the selected index is passed the point where we stop scrolling, set it to the position where we need to stop to keep + // the menu in place. else if (m_selected >= endScrollPoint) { targetY = m_originalY - (optionsSize - m_maxDisplayOptions) * m_optionHeight; } + // If the selected option is passed our scrolling length, calculate the new target. else if (m_selected >= m_scrollLength) { targetY = m_originalY - (scrolledItems * m_optionHeight); } + // If our current target doesn't match the previous, update the target. if (targetY != previousTarget) { m_transition.set_target_y(targetY); } }