From 8cde50e09132a11c1117e81263bd6dff4c7b7eeb Mon Sep 17 00:00:00 2001 From: Pk11 Date: Sat, 30 Nov 2024 05:24:15 -0600 Subject: [PATCH] Automate translation files (#880) * Automate language.inl file * Move version number to JSON file Better than being a magic number somewhere in the code, source code gets it from source.json * Automate creation of .trf translation files --- .gitignore | 2 + Makefile | 23 +- arm9/source/language.inl | 809 ------------------------------- resources/gm9/languages/de.trf | Bin 22336 -> 0 bytes resources/gm9/languages/en.trf | Bin 72 -> 0 bytes resources/gm9/languages/es.trf | Bin 22460 -> 0 bytes resources/gm9/languages/fr.trf | Bin 26004 -> 0 bytes resources/gm9/languages/id.trf | Bin 25204 -> 0 bytes resources/gm9/languages/it.trf | Bin 5528 -> 0 bytes resources/gm9/languages/ja.trf | Bin 37764 -> 0 bytes resources/gm9/languages/nl.trf | Bin 22624 -> 0 bytes resources/gm9/languages/pl.trf | Bin 3440 -> 0 bytes resources/gm9/languages/ru.trf | Bin 6028 -> 0 bytes resources/languages/de.json | 1 + resources/languages/en.json | 3 +- resources/languages/es.json | 1 + resources/languages/fr.json | 1 + resources/languages/id.json | 1 + resources/languages/it.json | 1 + resources/languages/ja-KANA.json | 1 + resources/languages/ja.json | 1 + resources/languages/nl.json | 1 + resources/languages/pl.json | 1 + resources/languages/ru.json | 1 + resources/languages/ry.json | 1 + resources/languages/source.json | 1 + utils/transcp.py | 26 + utils/transriff.py | 35 +- 28 files changed, 87 insertions(+), 823 deletions(-) delete mode 100644 arm9/source/language.inl delete mode 100644 resources/gm9/languages/de.trf delete mode 100644 resources/gm9/languages/en.trf delete mode 100644 resources/gm9/languages/es.trf delete mode 100644 resources/gm9/languages/fr.trf delete mode 100644 resources/gm9/languages/id.trf delete mode 100644 resources/gm9/languages/it.trf delete mode 100644 resources/gm9/languages/ja.trf delete mode 100644 resources/gm9/languages/nl.trf delete mode 100644 resources/gm9/languages/pl.trf delete mode 100644 resources/gm9/languages/ru.trf create mode 100755 utils/transcp.py diff --git a/.gitignore b/.gitignore index 2f203cf..ae5aeca 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,5 @@ desktop.ini # User additions /zzz_backup +/arm9/source/language.inl +*.trf diff --git a/Makefile b/Makefile index 7ff49e5..da57d2e 100644 --- a/Makefile +++ b/Makefile @@ -23,6 +23,16 @@ ifeq ($(NTRBOOT),1) VRAM_SCRIPTS := resources/gm9/scripts endif +# Definitions for translation files +JSON_FOLDER := resources/languages +TRF_FOLDER := resources/gm9/languages + +SOURCE_JSON := $(JSON_FOLDER)/source.json +LANGUAGE_INL := arm9/source/language.inl + +JSON_FILES := $(filter-out $(SOURCE_JSON),$(wildcard $(JSON_FOLDER)/*.json)) +TRF_FILES := $(subst $(JSON_FOLDER),$(TRF_FOLDER),$(JSON_FILES:.json=.trf)) + ifeq ($(OS),Windows_NT) ifeq ($(TERM),cygwin) PY3 := py -3 # Windows / CMD/PowerShell @@ -51,7 +61,7 @@ clean: @set -e; for elf in $(ELF); do \ $(MAKE) --no-print-directory -C $$(dirname $$elf) clean; \ done - @rm -rf $(OUTDIR) $(RELDIR) $(FIRM) $(FIRMD) $(VRAM_TAR) + @rm -rf $(OUTDIR) $(RELDIR) $(FIRM) $(FIRMD) $(VRAM_TAR) $(LANGUAGE_INL) $(TRF_FILES) unmarked_readme: .FORCE @$(PY3) utils/unmark.py -f README.md data/README_internal.md @@ -85,13 +95,20 @@ $(VRAM_TAR): $(SPLASH) $(OVERRIDE_FONT) $(VRAM_DATA) $(VRAM_SCRIPTS) @echo "Creating $@" @$(PY3) utils/add2tar.py $(VRAM_FLAGS) $(VRAM_TAR) $(shell find $^ -type f) +$(LANGUAGE_INL): $(SOURCE_JSON) + @echo "Creating $@" + @$(PY3) utils/transcp.py $< $@ + +$(TRF_FOLDER)/%.trf: $(JSON_FOLDER)/%.json + @$(PY3) utils/transriff.py $< $@ + %.elf: .FORCE @echo "Building $@" @$(MAKE) --no-print-directory -C $(@D) -arm9/arm9.elf: $(VRAM_TAR) +arm9/arm9.elf: $(VRAM_TAR) $(LANGUAGE_INL) -firm: $(ELF) +firm: $(ELF) $(TRF_FILES) @mkdir -p $(call dirname,"$(FIRM)") $(call dirname,"$(FIRMD)") @echo "[FLAVOR] $(FLAVOR)" @echo "[VERSION] $(VERSION)" diff --git a/arm9/source/language.inl b/arm9/source/language.inl deleted file mode 100644 index 547f10b..0000000 --- a/arm9/source/language.inl +++ /dev/null @@ -1,809 +0,0 @@ -// This is to be incremented every time the order changes -// New strings added to the end will not cause issues -#define TRANSLATION_VER 1 - -STRING(DATE_TIME_FORMAT, "%1$s%2$02lX-%3$02lX-%4$02lX %5$02lX:%6$02lX") -STRING(DECIMAL_SEPARATOR, ".") -STRING(THOUSAND_SEPARATOR, ",") -STRING(FIRM_TOO_BIG, "FIRM too big, can't boot") -STRING(PATH_DO_NOT_BOOT_UNTRUSTED, "%s (%dkB)\nWarning: Do not boot FIRMs\nfrom untrusted sources.\n \nBoot FIRM?") -STRING(NOT_BOOTABLE_FIRM, "Not a bootable FIRM.") -STRING(FIRM_ENCRYPTED, "FIRM is encrypted.\n \nDecrypt before boot?") -STRING(MAKE_COPY_AT_OUT_TEMP_FIRM, "Make a copy at %s/temp.firm") -STRING(TRY_BOOT_ANYWAYS, "Try to boot anyways") -STRING(WARNING_BOOT_UNSUPPORTED_LOCATION, "Warning: Trying to boot from an\nunsupported location.") -STRING(ROOT, "[root]") -STRING(LOADING, "LOADING...") -STRING(PANE_N, "PANE #%lu") -STRING(CURRENT, "CURRENT") -STRING(DIR, "(dir)") -STRING(SD_FAT, "(SD FAT)") -STRING(RAMDRIVE_FAT, "(RAMdrive FAT)") -STRING(GAME_VIRTUAL, "(Game Virtual)") -STRING(SYSNAND_FAT, "(SysNAND FAT)") -STRING(SYSNAND_VIRTUAL, "(SysNAND Virtual)") -STRING(EMUNAND_FAT, "(EmuNAND FAT)") -STRING(EMUNAND_VIRTUAL, "(EmuNAND Virtual)") -STRING(IMAGE_FAT, "(Image FAT)") -STRING(XORPAD_VIRTUAL, "(XORpad Virtual)") -STRING(MEMORY_VIRTUAL, "(Memory Virtual)") -STRING(ALIAS_FAT, "(Alias FAT)") -STRING(GAMECART_VIRTUAL, "(Gamecart Virtual)") -STRING(VRAM_VIRTUAL, "(VRAM Virtual)") -STRING(SEARCH, "(Search)") -STRING(TITLEMANAGER_VIRTUAL, "(TitleManager Virtual)") -STRING(LAB_SDCARD, "SDCARD") -STRING(LAB_SYSNAND_CTRNAND, "SYSNAND CTRNAND") -STRING(LAB_SYSNAND_TWLN, "SYSNAND TWLN") -STRING(LAB_SYSNAND_TWLP, "SYSNAND TWLP") -STRING(LAB_SYSNAND_SD, "SYSNAND SD") -STRING(LAB_SYSNAND_VIRTUAL, "SYSNAND VIRTUAL") -STRING(LAB_EMUNAND_CTRNAND, "EMUNAND CTRNAND") -STRING(LAB_EMUNAND_TWLN, "EMUNAND TWLN") -STRING(LAB_EMUNAND_TWLP, "EMUNAND TWLP") -STRING(LAB_EMUNAND_SD, "EMUNAND SD") -STRING(LAB_EMUNAND_VIRTUAL, "EMUNAND VIRTUAL") -STRING(LAB_IMGNAND_CTRNAND, "IMGNAND CTRNAND") -STRING(LAB_IMGNAND_TWLN, "IMGNAND TWLN") -STRING(LAB_IMGNAND_TWLP, "IMGNAND TWLP") -STRING(LAB_IMGNAND_VIRTUAL, "IMGNAND VIRTUAL") -STRING(LAB_GAMECART, "GAMECART") -STRING(LAB_GAME_IMAGE, "GAME IMAGE") -STRING(LAB_AESKEYDB_IMAGE, "AESKEYDB IMAGE") -STRING(LAB_BDRI_IMAGE, "BDRI IMAGE") -STRING(LAB_DISA_DIFF_IMAGE, "DISA/DIFF IMAGE") -STRING(LAB_MEMORY_VIRTUAL, "MEMORY VIRTUAL") -STRING(LAB_VRAM_VIRTUAL, "VRAM VIRTUAL") -STRING(LAB_TITLE_MANAGER, "TITLE MANAGER") -STRING(LAB_LAST_SEARCH, "LAST SEARCH") -STRING(LAB_FAT_IMAGE, "FAT IMAGE") -STRING(LAB_BONUS_DRIVE, "BONUS DRIVE") -STRING(LAB_RAMDRIVE, "RAMDRIVE") -STRING(LAB_NOLABEL, "NOLABEL") -STRING(N_BYTE, "%s Byte") -STRING(BYTE, " Byte") -STRING(KB, " kB") -STRING(MB, " MB") -STRING(GB, " GB") -STRING(CLIPBOARD, "[CLIPBOARD]") -STRING(PLUS_N_MORE, "+ %lu more") -STRING(MARK_DELETE_COPY, "L - MARK files (use with ↑↓→←)\nX - DELETE / [+R] RENAME file(s)\nY - COPY files / [+R] CREATE entry\n") -STRING(MARK_DELETE_PASTE, "L - MARK files (use with ↑↓→←)\nX - DELETE / [+R] RENAME file(s)\nY - PASTE files / [+R] CREATE entry\n") -STRING(RELOCK_WRITE_PERMISSION, "R+Y - Relock write permissions\n") -STRING(UNMOUNT_IMAGE, "R+X - Unmount image\n") -STRING(UNMOUNT_SD, "R+B - Unmount SD card\n") -STRING(REMOUNT_SD, "R+B - Remount SD card\n") -STRING(DIRECTORY_OPTIONS, "R+A - Directory options\n") -STRING(DRIVE_OPTIONS, "R+A - Drive options\n") -STRING(MAKE_SCREENSHOT, "R+L - Make a Screenshot\n") -STRING(PREV_NEXT_PANE, "R+←→ - Switch to prev/next pane\n") -STRING(CLEAR_CLIPBOARD, "SELECT - Clear Clipboard\n") -STRING(RESTORE_CLIPBOARD, "SELECT - Restore Clipboard\n") -STRING(REBOOT_POWEROFF_HOME, "START - Reboot / [+R] Poweroff\nHOME button for HOME menu") -STRING(NO_EMUNAND, "No EmuNAND") -STRING(REDNAND_SIZE_MIN, "RedNAND size (min)") -STRING(GW_EMUNAND_SIZE_FULL, "GW EmuNAND size (full)") -STRING(MULTINAND_SIZE_2X, "MultiNAND size (2x)") -STRING(MULTINAND_SIZE_3X, "MultiNAND size (3x)") -STRING(MULTINAND_SIZE_4X, "MultiNAND size (4x)") -STRING(USER_INPUT, "User input...") -STRING(AUTO, "Auto") -STRING(16KB_CLUSTERS, "16KB Clusters") -STRING(32KB_CLUSTERS, "32KB Clusters") -STRING(64KB_CLUSTERS, "64KB Clusters") -STRING(SD_NOT_DETECTED, "Error: SD card not detected.") -STRING(FORMAT_SD_CHOOSE_EMUNAND, "Format SD card (%lluMB)?\nChoose EmuNAND size:") -STRING(SD_SIZE_IS_ENTER_EMUNAND_SIZE, "SD card size is %lluMB.\nEnter EmuNAND size (MB) below:") -STRING(FORMAT_SD_CHOOSE_CLUSTER, "Format SD card (%lluMB)?\nChoose cluster size:") -STRING(FORMAT_SD_ENTER_LABEL, "Format SD card (%lluMB)?\nEnter label:") -STRING(FORMAT_SD_FAILED, "Format SD: failed!") -STRING(REDNAND_TYPE, "RedNAND type") -STRING(REDNAND_TYPE_MULTI, "RedNAND type (multi)") -STRING(REDNAND_TYPE_SINGLE, "RedNAND type (single)") -STRING(GW_EMUNAND_TYPE, "GW EmuNAND type") -STRING(DONT_SET_UP, "Don't set up") -STRING(CHOOSE_EMUNAND_TYPE, "Choose EmuNAND type to set up:") -STRING(CLONE_SYSNAND_TO_REDNAND, "Clone SysNAND to RedNAND?") -STRING(CLONING_SYSNAND_TO_EMUNAND_FAILED, "Cloning SysNAND to EmuNAND: failed!") -STRING(PRESS_A_TO_CONTINUE, "Press to continue") -STRING(HEXEDITOR_CONTROLS, "Hexeditor Controls:\n \n↑↓→←(+R) - Scroll\nR+Y - Switch view\nX - Search / goto...\nA - Enter edit mode\nA+↑↓→← - Edit value\nB - Exit\n") -STRING(NOT_FOUND, "Not found!") -STRING(GO_TO_OFFSET, "Go to offset") -STRING(SEARCH_FOR_STRING, "Search for string") -STRING(SEARCH_FOR_DATA, "Search for data") -STRING(CURRENT_OFFSET_SELECT_ACTION, "Current offset: %08lX\nSelect action:") -STRING(CURRENT_OFFSET_ENTER_NEW, "Current offset: %08lX\nEnter new offset below.") -STRING(ENTER_SEARCH_REPEAT_SEARCH, "Enter search string below.\n(R+X to repeat search)") -STRING(MADE_EDITS_SAVE_CHANGES, "You made edits in %lu place(s).\nWrite changes to file?") -STRING(FAILED_WRITING_TO_FILE, "Failed writing to file!") -STRING(CALCULATING_SHA_FAILED, "Calculating SHA-%s: failed!") -STRING(SHA_VERIFICATION_PASSED, "\nSHA verification: passed!") -STRING(SHA_VERIFICATION_FAILED, "\nSHA verification: failed") -STRING(IDENTICAL_WITH_PREVIOUS, "\n \nIdentical with previous file:\n") -STRING(WRITE_SHA_FILE, "\n \nWrite .SHA file?") -STRING(WRITE_SHA1_FILE, "\n \nWrite .SHA1 file?") -STRING(CALCULATING_CMAC_FAILED, "Calculating CMAC: failed!") -STRING(CMAC_VERIFICATION_PASSED, "CMAC verification: passed!") -STRING(CMAC_VERIFICATION_FAILED, "CMAC verification: failed!") -STRING(FIX_CMAC_IN_FILE, "\n \nFix CMAC in file?") -STRING(FIXING_CMAC_FAILED, "Fixing CMAC: failed!") -STRING(COPY_ALL_SELECTED_ITEMS, "Copy all %lu selected items?") -STRING(FAILED_COPYING_ITEM, "Failed copying item") -STRING(ITEMS_COPIED_TO_OUT, "%lu items copied to %s") -STRING(PATH_COPIED_TO_OUT, "%s\nCopied to %s") -STRING(CART_INIT_FAILED, "Cart init failed!") -STRING(CART_DETECTED_SIZE_INPUT_BELOW, "Cart: %s\nDetected size: %s\n \nInput dump size below.") -STRING(NDS_CART_DECRYPT_SECURE_AREA, "Cart: %s\nNDS cart detected\nDecrypt the secure area?") -STRING(FAILED_DUMPING_CART, "%s\nFailed dumping cart") -STRING(PATH_DUMPED_TO_OUT, "%s\nDumped to %s") -STRING(CREATED, "created") -STRING(MODIFIED, "modified") -STRING(ANALYZING_DRIVE, "Analyzing drive, please wait...") -STRING(ANALYZING_DIR, "Analyzing dir, please wait...") -STRING(N_FILES_N_SUBDIRS_TOTAL_SIZE_FREE_USED_TOTAL, "%lu files & %lu subdirs\n%s total size\n \nspace free: %s\nspace used: %s\nspace total: %s") -STRING(N_FILES_N_SUBDIRS_TOTAL_SIZE, "%lu files & %lu subdirs\n%s total size") -STRING(FILESIZE_X, "filesize: %s") -STRING(READONLY_HIDDEN_SYSTEM_ARCHIVE_VIRTUAL, " \n[%c] %sread-only [%c] %shidden\n[%c] %ssystem [%c] %sarchive\n[%c] %svirtual\n%s") -STRING(UDRL_CHANGE_ATTRIBUTES, " \n(↑↓→← to change attributes)\n") -STRING(A_TO_CONTINUE, "( to continue)") -STRING(A_APPLY_B_CANCEL, "( to apply, to cancel)") -STRING(A_YES_B_NO, "( yes, no)") -STRING(A_SELECT_B_CANCEL, "( select, cancel)") -STRING(HOLD_B_TO_CANCEL, "(hold B to cancel)") -STRING(FAILED_TO_SET_ATTRIBUTES, "Failed to set attributes!") -STRING(NAND_IMAGE_OPTIONS, "NAND image options...") -STRING(CTRNAND_OPTIONS, "CTRNAND options...") -STRING(MOUNT_FAT_IMAGE, "Mount as FAT image") -STRING(CIA_IMAGE_OPTIONS, "CIA image options...") -STRING(NCSD_IMAGE_OPTIONS, "NCSD image options...") -STRING(NCCH_IMAGE_OPTIONS, "NCCH image options...") -STRING(MOUNT_AS_EXEFS_IMAGE, "Mount as EXEFS image") -STRING(MOUNT_AS_ROMFS_IMAGE, "Mount as ROMFS image") -STRING(TMD_FILE_OPTIONS, "TMD file options...") -STRING(TMD_CDN_OPTIONS, "TMD/CDN options...") -STRING(TMD_TWL_OPTIONS, "TMD/TWL options...") -STRING(MANAGE_TITLE, "Manage Title...") -STRING(BOSS_FILE_OPTIONS, "BOSS file options...") -STRING(DECRYPT_NUS_CDN_FILE, "Decrypt NUS/CDN file") -STRING(SHOW_SMDH_TITLE_INFO, "Show SMDH title info") -STRING(NDS_IMAGE_OPTIONS, "NDS image options...") -STRING(GBA_IMAGE_OPTIONS, "GBA image options...") -STRING(TICKET_OPTIONS, "Ticket options...") -STRING(TAD_IMAGE_OPTIONS, "TAD image options...") -STRING(SHOW_3DSX_TITLE_INFO, "Show 3DSX title info") -STRING(FIRM_IMAGE_OPTIONS, "FIRM image options...") -STRING(AGBSAVE_OPTIONS, "AGBSAVE options...") -STRING(DUMP_GBA_VC_SAVE, "Dump GBA VC save") -STRING(TICKET_DB_OPTIONS, "Ticket.db options...") -STRING(MOUNT_AS_DIFF_IMAGE, "Mount as DIFF image") -STRING(MOUNT_AS_DISA_IAMGE, "Mount as DISA image") -STRING(INSTALL_CIFINISH_BIN, "Install cifinish.bin") -STRING(TITLEKEY_OPTIONS, "Titlekey options...") -STRING(AESKEYDB_OPTIONS, "AESkeydb options...") -STRING(BUILD_X, "Build %s") -STRING(NCCHINFO_OPTIONS, "NCCHinfo options...") -STRING(EXECUTE_GM9_SCRIPT, "Execute GM9 script") -STRING(FONT_OPTIONS, "Font options...") -STRING(LANGUAGE_OPTIONS, "Language options...") -STRING(VIEW_PNG_FILE, "View PNG file") -STRING(REBUILD_NCSD_HEADER, "Rebuild NCSD header") -STRING(SHOW_IN_HEXEDITOR, "Show in Hexeditor") -STRING(CALCULATE_SHA256, "Calculate SHA-256") -STRING(CALCULATE_SHA1, "Calculate SHA-1") -STRING(SHOW_FILE_INFO, "Show file info") -STRING(SHOW_IN_TEXTVIEWER, "Show in Textviewer") -STRING(CALCULATE_CMAC, "Calculate CMAC") -STRING(COPY_TO_OUT, "Copy to %s") -STRING(DUMP_TO_OUT, "Dump to %s") -STRING(INJECT_DATA_AT_OFFSET, "Inject data @offset") -STRING(OPEN_THIS_FOLDER, "Open this folder") -STRING(OPEN_CONTAINING_FOLDER, "Open containing folder") -STRING(OPEN_TITLE_FOLDER, "Open title folder") -STRING(PATH_N_FILES_SELECTED, "%s\n(%lu files selected)") -STRING(CHECK_CURRENT_CMAC_ONLY, "Check current CMAC only") -STRING(VERIFY_CMAC_FOR_ALL, "Verify CMAC for all") -STRING(FIX_CMAC_FOR_ALL, "Fix CMAC for all") -STRING(N_N_N_FILES_OK_FIXED_TOTAL_N_OF_N_HAVE_NO_CMAC, "%lu/%lu/%lu files ok/fixed/total\n%lu/%lu have no CMAC") -STRING(N_OF_N_FILES_VERIFIED_N_OF_N_FILES_FIXED, "%lu/%lu files verified ok\n%lu/%lu files fixed") -STRING(N_OF_N_FILES_VERIFIED_N_OF_N_HAVE_NO_CMAC, "%lu/%lu files verified ok\n%lu/%lu have no CMAC") -STRING(N_OF_N_FILES_VERIFIED, "%lu/%lu files verified ok") -STRING(INJECT_DATA_FROM_SPECIFY_OFFSET_BELOW, "Inject data from %s?\nSpecify offset below.") -STRING(FAILED_INJECTING_PATH, "Failed injecting %s") -STRING(MOUNT_CXI_NDS_TO_DRIVE, "Mount CXI/NDS to drive") -STRING(MOUNT_IMAGE_TO_DRIVE, "Mount image to drive") -STRING(RESTORE_SYSNAND_SAFE, "Restore SysNAND (safe)") -STRING(UPDATE_EMBEDDED_BACKUP, "Update embedded backup") -STRING(SHOW_TITLE_INFO, "Show title info") -STRING(DECRYPT_FILE, "Decrypt file (...)") -STRING(DECRYPT_FILE_OUT, "Decrypt file (%s)") -STRING(ENCRYPT_FILE, "Encrypt file (...)") -STRING(ENCRYPT_FILE_OUT, "Encrypt file (%s)") -STRING(BUILD_CIA_FROM_FILE, "Build CIA from file") -STRING(BUILD_CIA_STANDARD, "Build CIA (standard)") -STRING(BUILD_CIA_LEGIT, "Build CIA (legit)") -STRING(DUMP_CXI_NDS_FILE, "Dump CXI/NDS file") -STRING(INSTALL_GAME_IMAGE, "Install game image") -STRING(INSTALL_TICKET, "Install ticket") -STRING(DUMP_TICKET_FILE, "Dump ticket file") -STRING(UNINSTALL_TITLE, "Uninstall title") -STRING(VERIFY_FILE, "Verify file") -STRING(TRANSFER_IMAGE_TO_CTRNAND, "Transfer image to CTRNAND") -STRING(INJECT_TO_H_AND_S, "Inject to H&S") -STRING(TRIM_FILE, "Trim file") -STRING(RENAME_FILE, "Rename file") -STRING(BUILD_XORPADS_SD, "Build XORpads (SD output)") -STRING(BUILD_XORPADS_INPLACE, "Build XORpads (inplace)") -STRING(EXTRACT_X, "Extract %s") -STRING(INIT_X, "Init %s") -STRING(INSTALL_X, "Install %s") -STRING(INSTALL_FIRM, "Install FIRM") -STRING(BOOT_FIRM, "Boot FIRM") -STRING(SET_AS_ACTIVE_FONT, "Set as active font") -STRING(SET_AS_ACTIVE_LANGUAGE, "Set as active language") -STRING(DUMP_BA_VC_SAVE, "Dump GBA VC save") -STRING(INJECT_GBA_VC_SAVE, "Inject GBA VC save") -STRING(SET_AS_DEFAULT, "Set as default") -STRING(MOUNTING_IMAGE_FAILED, "Mounting image: failed") -STRING(PATH_MOUNTED_AS_DRIVE_ENTER_PATH_NOW, "%s\nMounted as drive %s\nEnter path now?") -STRING(DECRYPT_TO_OUT, "Decrypt to %s") -STRING(DECRYPT_INPLACE, "Decrypt inplace") -STRING(TRY_TO_DECRYPT_ALL_N_SELECTED_FILES, "Try to decrypt all %lu selected files?") -STRING(TRYING_TO_DECRYPT_N_FILES, "Trying to decrypt %lu files...") -STRING(DECRYPTION_FAILED_CONTINUE, "Decryption failed\n \nContinue?") -STRING(N_OF_N_FILES_DECRYPTED_N_OF_N_NOT_ENCRYPTED_N_OF_N_NOT_SAME_TYPE, "%lu/%lu files decrypted ok\n%lu/%lu not encrypted\n%lu/%lu not of same type") -STRING(N_OF_N_FILES_DECRYPTED, "%lu/%lu files decrypted ok") -STRING(N_FILES_WRITTEN_TO_OUT, "%lu files written to %s") -STRING(FILE_NOT_ENCRYPTED, "File is not encrypted") -STRING(DECRYPTION_SUCCESS, "Decryption success") -STRING(DECRYPTION_FAILED, "Decryption failed") -STRING(PATH_DECRYPTED_TO_OUT, "%s\nDecrypted to %s") -STRING(ENCRYPT_TO_OUT, "Encrypt to %s") -STRING(ENCRYPT_INPLACE, "Encrypt inplace") -STRING(TRY_TO_ENCRYPT_N_SELECTED_FILES, "Try to encrypt all %lu selected files?") -STRING(TRYING_TO_ENCRYPT_N_FILES, "Trying to encrypt %lu files...") -STRING(ENCRYPTION_FAILED_CONTINUE, "Encryption failed\n \nContinue?") -STRING(N_OF_N_FILES_ENCRYPTED_N_OF_N_NOT_SAME_TYPE, "%lu/%lu files encrypted ok\n%lu/%lu not of same type") -STRING(N_OF_N_FILES_ENCRYPTED, "%lu/%lu files encrypted ok") -STRING(ENCRYPTION_SUCCESS, "Encryption success") -STRING(ENCRYPTION_FAILED, "Encryption failed") -STRING(PATH_ENCRYPTED_TO_OUT, "%s\nEncrypted to %s") -STRING(TRY_TO_PROCESS_N_SELECTED_FILES, "Try to process all %lu selected files?") -STRING(PATH_BUILD_TYPE_FAILED_CONTINUE, "%s\nBuild %s failed\n \nContinue?") -STRING(N_OF_N_TYPES_BUILT_N_OF_N_NOT_SAME_TYPE, "%lu/%lu %ss built ok\n%lu/%lu not of same type") -STRING(N_OF_N_TYPES_BUILT, "%lu/%lu %ss built ok") -STRING(N_FILES_FAILED_CONVERTION_VERIFICATION_RECOMMENDED, "%lu file(s) failed conversion.\nVerification is recommended.") -STRING(PATH_TYPE_BUILT_TO_OUT, "%s\n%s built to %s") -STRING(PATH_TYPE_BUILD_FAILED, "%s\n%s build failed") -STRING(FILE_FAILED_CONVERSION_VERIFY_NOW, "file failed conversion.\n \nVerify now?") -STRING(VERIFICATION_SUCCESS, "Verification success") -STRING(VERIFICATION_FAILED, "Verification failed") -STRING(CONTENT_IS_MISSING, "Content is missing") -STRING(INSTALL_TO_SYSNAND, "Install to SysNAND") -STRING(INSTALL_TO_EMUNAND, "Install to EmuNAND") -STRING(TRY_TO_INSTALL_N_SELECTED_FILES, "Try to install all %lu selected files?") -STRING(TRYING_TO_INSTALL_N_FILES, "Trying to install %lu files...") -STRING(INSTALL_FAILED_CONTINUE, "Install failed\n \nContinue?") -STRING(N_OF_N_FILES_INSTALLED_N_OF_N_NOT_SAME_TYPE, "%lu/%lu files installed ok\n%lu/%lu not of same type") -STRING(N_OF_N_FILES_INSTALLED, "%lu/%lu files installed ok") -STRING(INSTALL_SUCCESS, "Install success") -STRING(INSTALL_FAILED, "Install failed") -STRING(FILE_FAILED_INSTALL_VERIFY_NOW, "file failed install.\n \nVerify now?") -STRING(KEEP_TICKET_AND_SAVEGAME, "Keep ticket & savegame") -STRING(UNINSTALL_EVERYTHING, "Uninstall everything") -STRING(ABORT_UNINSTALL, "Abort uninstall") -STRING(UNINSTALL_N_SELECTED_TITLES, "Uninstall %lu selected titles?") -STRING(UNINSTALL_SELECTED_TITLE, "Uninstall selected title?") -STRING(N_OF_N_TITLES_UNINSTALLED, "%lu/%lu titles uninstalled") -STRING(UNINSTALLING_PLEASE_WAIT, "Uninstalling, please wait...") -STRING(UNINSTALL_FAILED, "Uninstall failed!") -STRING(TRY_TO_VERIFY_N_SELECTED_FILES, "Try to verify all %lu selected files?") -STRING(VERIFICATION_FAILED_CONTINUE, "Verification failed\n \nContinue?") -STRING(N_OF_N_FILES_VERIFIED_N_OF_N_NOT_SAME_TYPE, "%lu/%lu files verified ok\n%lu/%lu not of same type") -STRING(VERIFYING_FILE_PLEASE_WAIT, "Verifying file, please wait...") -STRING(NAND_VALIDATION_SUCCESS, "NAND validation success") -STRING(NAND_VALIDATION_FAILED, "NAND validation failed") -STRING(DUMP_FOR_N_SELECTED_FILES, "Dump for all %lu selected files?") -STRING(N_OF_N_LEGIT_TICKETS_DUMPED_ATTEMPT_DUMP_ALL, "%lu/%lu legit tickets dumped.\n \nAttempt to dump all tickets?") -STRING(N_OF_N_TICKETS_DUMPED_TO_OUT, "%lu/%lu tickets dumped to %s") -STRING(PATH_TICKET_DUMPED_TO_OUT, "%s\nTicket dumped to %s") -STRING(LEGIT_TICKET_NOT_FOUND_DUMP_ANYWAYS, "%s\nLegit ticket not found.\n \nDump anyways?") -STRING(DUMP_TICKET_FAILED, "Dump ticket failed!") -STRING(BUILDING_X, "Building %s...") -STRING(BUILDING_X_SYSNAND, "Building %s (SysNAND)...") -STRING(BUILDING_X_EMUNAND, "Building %s (EmuNAND)...") -STRING(PATH_N_OF_N_FILES_PROCESSED_N_OF_N_FILES_IGNORED, "%s\n%lu/%lu files processed\n%lu/%lu files ignored") -STRING(PATH_N_OF_N_FILES_PROCESSED, "%s\n%lu/%lu files processed") -STRING(BUILD_DATABASE_SUCCESS, "Build database success.") -STRING(BUILD_DATABASE_FAILED, "Build database failed.") -STRING(TRY_TO_TRIM_N_SELECTED_FILES, "Try to trim all %lu selected files?") -STRING(TRIMMING_FAILED_CONTINUE, "Trimming failed\n \nContinue?") -STRING(N_OF_N_FILES_TRIMMED_N_OF_N_NOT_OF_SAME_TYPE_X_SAVED, "%lu/%lu files trimmed ok\n%lu/%lu not of same type\n%s saved") -STRING(N_OF_N_FILES_TRIMMED_X_SAVED, "%lu/%lu files trimmed ok\n%s saved") -STRING(FILE_CANT_BE_TRIMMED, "File can't be trimmed.") -STRING(FILE_ALREADY_TRIMMED, "File is already trimmed.") -STRING(PATH_CURRENT_SIZE_TRIMMED_SIZE_DIFFERENCE_TRIM_FILE, "%s\nCurrent size: %s\nTrimmed size: %s\nDifference: %s\n \nTrim this file?") -STRING(TRIMMING_FAILED, "Trimming failed.") -STRING(PATH_TRIMMED_BY_X, "%s\nTrimmed by %s.") -STRING(TRY_TO_RENAME_N_SELECTED_FILES, "Try to rename all %lu selected files?") -STRING(N_OF_N_RENAMED, "%lu/%lu renamed ok") -STRING(COULD_NOT_RENAME_TO_GOOD_NAME, "Could not rename to good name") -STRING(SYSNAND_H_AND_S_INJECT, "SysNAND H&S inject") -STRING(EMUNAND_H_AND_S_INJECT, "EmuNAND H&S inject") -STRING(H_AND_S_INJECT_SUCCESS, "H&S inject success") -STRING(H_AND_S_INJECT_FAILURE, "H&S inject failure") -STRING(TRY_EXTRACT_ALL_N_SELECTED_FILES, "Try to extract all %lu selected files?") -STRING(N_OF_N_FILES_EXTRACTED_N_OF_N_NOT_SAME_TYPE, "%lu/%lu files extracted ok\n%lu/%lu not of same type") -STRING(N_OF_N_FILES_EXTRACTED, "%lu/%lu files extracted ok") -STRING(EXTRACTING_DOT_CODE, "Extracting .code, please wait...") -STRING(PATH_EXT_EXTRACTED_TO_OUT, "%s\n%s extracted to %s") -STRING(DOT_CODE_EXTRACT_FAILED, ".code extract failed") -STRING(TRANSFER_TO_SYSNAND, "Transfer to SysNAND") -STRING(TRANSFER_TO_EMUNAND, "Transfer to EmuNAND") -STRING(CTRNAND_TRANSFER_SUCCESS, "CTRNAND transfer success") -STRING(CTRNAND_TRANSFER_FAILED, "CTRNAND transfer failed") -STRING(NO_VALID_DESTINATION_FOUND, "No valid destination found") -STRING(NAND_RESTORE_SUCCESS, "NAND restore success") -STRING(NAND_RESTORE_FAILED, "NAND restore failed") -STRING(REBUILD_NCSD_SUCCESS, "Rebuild NCSD success") -STRING(REBUILD_NCSD_FAILED, "Rebuild NCSD failed") -STRING(PATH_NCCHINFO_PADGEN_SUCCESS, "%s\nNCCHinfo padgen success%cOutput dir: %s") -STRING(PATH_NCCHINFO_PADGEN_FAILED, "%s\nNCCHinfo padgen failed%c%0.0s") -STRING(UPDATING_EMBEDDED_BACKUP, "Updating embedded backup...") -STRING(BACKUP_UPDATE_NOT_REQUIRED, "Backup update: not required") -STRING(BACKUP_UPDATE_COMPLETED, "Backup update: completed") -STRING(BACKUP_UPDATE_FAILED, "Backup update: failed!") -STRING(WARNING_KEYS_NOT_VERIFIED_CONTINUE_AT_YOUR_OWN_RISK, "Warning: Keys are not verified.\nContinue on your own risk?") -STRING(AESKEYDB_INIT_SUCCESS, "AESkeydb init success") -STRING(AESKEYDB_INIT_FAILED, "AESkeydb init failed") -STRING(AESKEYDB_INSTALL_SUCCESS, "AESkeydb install success") -STRING(AESKEYDB_INSTALL_FAILED, "AESkeydb install failed") -STRING(INSTALL_TO_FIRM0, "Install to FIRM0") -STRING(INSTALL_TO_FIRM1, "Install to FIRM1") -STRING(INSTALL_TO_BOTH, "Install to both") -STRING(PATH_N_KB_INSTALL_TO_SYSNAND, "%s (%dkB)\nInstall to SysNAND?") -STRING(PATH_N_KB_INSTALL_SUCCESS, "%s (%dkB)\nInstall success") -STRING(PATH_N_KB_INSTALL_FAILED, "%s (%dkB)\nInstall failed") -STRING(WARNING_DO_NOT_RUN_UNTRUSTED_SCRIPTS, "Warning: Do not run scripts\nfrom untrusted sources.\n \nExecute script?") -STRING(SCRIPT_EXECUTE_SUCCESS, "Script execute success") -STRING(SCRIPT_EXECUTE_FAILURE, "Script execute failure") -STRING(ERROR_CANNOT_VIEW_FILE, "Error: Cannot view file\n(Hint: maybe it's too big)") -STRING(SAVEGAME_DUMPED_TO_OUT, "Savegame dumped to %s.") -STRING(SAVEGAME_DUMP_FAILED, "Savegame dump failed!") -STRING(GBA_SAVEGAME_MUST_BE_IN_CLIPBOARD, "GBA VC savegame has to\nbe in the clipboard.") -STRING(SAVEGAME_INJECT_SUCCESS, "Savegame inject success.") -STRING(SAVEGAME_INJECT_FAILED, "Savegame inject failed!") -STRING(FONT_WILL_BE_ACTIVE_ON_NEXT_BOOT, "Font will be active on next boot") -STRING(LANGUAGE_WILL_BE_ACTIVE_ON_NEXT_BOOT, "Language will be active on next boot") -STRING(HOME_MORE_MENU_SELECT_ACTION, "HOME more... menu.\nSelect action:") -STRING(SD_FORMAT_MENU, "SD format menu") -STRING(BONUS_DRIVE_MENU, "Bonus drive setup") -STRING(SWITCH_EMUNAND, "Switch EmuNAND") -STRING(BUILD_SUPPORT_FILES, "Build support files") -STRING(RESTORE_H_AND_S, "Restore H&S") -STRING(SET_RTC_DATE_TIME, "Set RTC date&time") -STRING(CONFGURE_BRIGHTNESS, "Configure brightness") -STRING(CALIBRATE_TOUCHSCREEN, "Calibrate touchscreen") -STRING(SYSTEM_INFO, "System info") -STRING(SHOW_README, "Show ReadMe") -STRING(INITIALIZING_SD_FAILED_RETRY, "Initializing SD card failed! Retry?") -STRING(SETUP_FAILED, "Setup failed!") -STRING(CURRENT_EMUNAND_OFFSET_IS_N_SWITCH_TO_NEXT, "Current EmuNAND offset is %06lX.\nSwitch to next offset?") -STRING(BUILT_IN_OUT_STATUSES, "Built in %s:\n \n%-18.18s %s\n%-18.18s %s\n%-18.18s %s") -STRING(OK_SYS_EMU, "OK (Sys&Emu)") -STRING(OK_SYS, "OK (Sys)") -STRING(FAILED, "Failed") -STRING(RESTORE_H_AND_S_EMUNAND, "Restore H&S (EmuNAND)") -STRING(RESTORE_H_AND_S_SYSNAND, "Restore H&S (SysNAND)") -STRING(TITLE_SET_RTC_DATE_TIME, "Set RTC date&time:") -STRING(NEW_RTC_DATE_TIME_IS_TIME, "New RTC date&time is:\n%s\n \nHint: HOMEMENU time needs\nmanual adjustment after\nsetting the RTC.") -STRING(TOUCHSCREEN_CALIBRATION_SUCCESS, "Touchscreen calibration success!") -STRING(TOUCHSCREEN_CALIBRATION_FAILED, "Touchscreen calibration failed!") -STRING(GODMODE9_README_TOC, "GodMode9 ReadMe Table of Contents") -STRING(ESSENTIAL_BACKUP_NOT_FOUND_CREATE_NOW, "Essential files backup not found.\nCreate one now?") -STRING(BACKUP_EMBEDDED_WRITTEN_TO_OUT, "Backup embedded in SysNAND\nand written to %s.") -STRING(RTC_DATE_TIME_SEEMS_TO_BE_WRONG_SET_NOW, "RTC date&time seems to be\nwrong. Set it now?") -STRING(RESUME_GODMODE9, "Resume GodMode9") -STRING(RESUME_BOOTLOADER, "Resume bootloader") -STRING(SELECT_PAYLOAD, "Select payload...") -STRING(SELECT_SCRIPT, "Select script...") -STRING(POWEROFF_SYSTEM, "Poweroff system") -STRING(REBOOT_SYSTEM, "Reboot system") -STRING(FLAVOR_BOOTLOADER_SELECT_OPTION, "%s bootloader menu.\nSelect action:") -STRING(BOOTLOADER_PAYLOADS_MENU_SELECT_PAYLOAD, "Bootloader payloads menu.\nSelect payload:") -STRING(BOOTLOADER_SCRIPTS_MENU_SELECT_SCRIPT, "Bootloader scripts menu.\nSelect script:") -STRING(NO_BOOTABLE_FIRM_FOUND_RESUMING_GODMODE9, "No bootable FIRM found.\nNow resuming GodMode9...") -STRING(OUT_OF_MEMORY, "Out of memory.") -STRING(INVALID_DIRECTORY_OBJECT, "Invalid directory object") -STRING(INVALID_ROOT_DIRECTORY, "Invalid root directory.") -STRING(WRITE_PERMISSIONS_WERE_CHANGED_RELOCK, "Write permissions were changed.\nRelock them?") -STRING(OPEN_TITLE_MANAGER, "Open title manager") -STRING(SEARCH_FOR_FILES, "Search for files...") -STRING(FIX_CMACS_FOR_DRIVE, "Fix CMACs for drive") -STRING(SHOW_DIRECTORY_INFO, "Show directory info") -STRING(SHOW_DRIVE_INFO, "Show drive info") -STRING(FAILED_SETTING_UP_TITLE_MANAGER, "Failed setting up title manager!") -STRING(SEARCH_FILE_ENTER_SEARCH_BELOW, "Search %s?\nEnter search below.") -STRING(FOUND_N_RESULTS, "Found %lu results.") -STRING(FIX_CMACS_FOR_DRIVE_FINISHED, "Fix CMACs for drive finished.") -STRING(FAILED_TO_ANALYZE_DRIVE, "Failed to analyze drive\n") -STRING(FAILED_TO_ANALYZE_DIR, "Failed to analyze dir\n") -STRING(NOT_ALLOWED_IN_VIRTUAL_PATH, "Not allowed in virtual path") -STRING(DELETE_N_PATHS, "Delete %lu path(s)?") -STRING(DELETING_FILES_PLEASE_WAIT, "Deleting files, please wait...") -STRING(FAILED_DELETING_N_OF_N_PATHS, "Failed deleting %lu/%lu path(s)") -STRING(DELETE_FILE, "Delete \"%s\"?") -STRING(FAILED_DELETING_PATH, "Failed deleting:\n%s") -STRING(NOT_ALLOWED_IN_SEARCH_DRIVE, "Not allowed in search drive") -STRING(NOT_ALLOWED_IN_VIRTUAL_GAME_PATH, "Not allowed in virtual game path") -STRING(NOT_ALLOWED_IN_XORPAD_DRIVE, "Not allowed in XORpad drive") -STRING(NOT_ALLOWED_IN_GAMECART_DRIVE, "Not allowed in gamecart drive") -STRING(NOT_ALLOWED_IN_ALIAS_PATH, "Not allowed in alias path") -STRING(COPY_PATHS, "Copy path(s)") -STRING(MOVE_PATHS, "Move path(s)") -STRING(PASTE_FILE_HERE, "Paste \"%s\" here?") -STRING(PASTE_N_PATHS_HERE, "Paste %lu paths here?") -STRING(FAILED_COPYING_PATH_PROCESS_REMAINING, "Failed copying path:\n%s\nProcess remaining?") -STRING(FAILED_COPYING_PATH, "Failed copying path:\n%s") -STRING(FAILED_MOVING_PATH_PROCESS_REMAINING, "Failed moving path:\n%s\nProcess remaining?") -STRING(FAILED_MOVING_PATH, "Failed moving path:\n%s") -STRING(RENAME_FILE_ENTER_NEW_NAME_BELOW, "Rename %s?\nEnter new name below.") -STRING(FAILED_RENAMING_PATH, "Failed renaming path:\n%s") -STRING(CREATE_A_NEW_ENTRY_HERE_SELECT_TYPE, "Create a new entry here?\nSelect type.") -STRING(CREATE_A_FOLDER, "Create a folder") -STRING(CREATE_A_DUMMY_FILE, "Create a dummy file") -STRING(CREATE_NEW_FOLDER_HERE_ENTER_NAME_BELOW, "Create a new folder here?\nEnter name below.") -STRING(CREATE_NEW_FILE_HERE_ENTER_NAME_BELOW, "Create a new file here?\nEnter name below.") -STRING(CREATE_NEW_FILE_HERE_ENTER_SIZE_BELOW, "Create a new %s here?\nEnter file size below.") -STRING(FAILED_CREATING_FOLDER_PATH, "Failed creating folder:\n%s") -STRING(FAILED_CREATING_FILE_PATH, "Failed creating file:\n%s") -STRING(TITLE_MANAGER, "Title manager") -STRING(BRICK_MY_3DS, "Brick my 3DS") -STRING(LANGUAGE, "Language...") -STRING(SCRIPTS, "Scripts...") -STRING(PAYLOADS, "Payloads...") -STRING(MORE, "More...") -STRING(BRACKET_MORE, "[more...]") -STRING(HOME_BUTTON_PRESSED_SELECT_ACTION, "HOME button pressed.\nSelect action:") -STRING(POWER_BUTTON_PRESSED_SELECT_ACTION, "POWER button pressed.\nSelect action:") -STRING(1_DRIVE_NAND_TWL, "[1:] NAND / TWL") -STRING(4_DRIVE_NAND_TWL, "[4:] NAND / TWL") -STRING(A_DRIVE_SD_CARD, "[A:] SD CARD") -STRING(B_DRIVE_SD_CARD, "[B:] SD CARD") -STRING(TITLE_MANAGER_MENU_SELECT_TITLES_SOURCE, "Title manager menu.\nSelect titles source:") -STRING(LANGUAGES_DIRECTORY_NOT_FOUND, "Languages directory not found.\n(default path: 0:/gm9/%s)") -STRING(SCRIPTS_DIRECTORY_NOT_FOUND, "Scripts directory not found.\n(default path: 0:/gm9/%s)") -STRING(HOME_LANGUAGE_MENU_SELECT_LANGUAGE, "HOME language... menu.\nSelect language:") -STRING(HOME_SCRIPTS_MENU_SELECT_SCRIPT, "HOME scripts... menu.\nSelect script:") -STRING(PAYLOADS_DIRECTORY_NOT_FOUND, "Payloads directory not found.\n(default path: 0:/gm9/%s)") -STRING(HOME_PAYLOADS_MENU_SELECT_PAYLOAD, "HOME payloads... menu.\nSelect payload:") -STRING(UNEXPECTED_SD_CARD_REMOVAL_TO_PREVENT_DATA_LOSS_UNMOUNT_BEFORE_EJECT, "!Unexpected SD card removal!\n \nTo prevent data loss, unmount\nbefore ejecting the SD card.") -STRING(FLAVOR_SCRIPTS_MENU_SELECT_SCRIPT, "%s scripts menu.\nSelect script:") -STRING(COMPILED_AS_SCRIPT_AUTORUNNER_BUT_NO_SCRIPT_DERP, "Compiled as script autorunner\nbut no script provided.\n \nDerp!") -STRING(KEYBOARD_CONTROLS_DETAILS, "Keyboard Controls:\n \n←/→ - Move cursor\nR - Caps / Capslock\nX - Delete char\nY - Insert char\nA - Submit\nB - Cancel\n \nSELECT switches to\nclassic prompt") -STRING(TOUCH_CROSSHAIRS_TO_CALIBRATE_TOUCHSCREEN_USE_STYLUS, "Touch the red crosshairs to\ncalibrate your touchscreen.\n \nUse the stylus for best\nresults!") -STRING(INVALID, "INVALID") -STRING(TO_PROCEED_ENTER_THIS, "To proceed, enter this:") -STRING(TO_PROCEED_HOLD_X, "To proceed, hold :") -STRING(N_MORE, " [%d more]") -STRING(CANCEL, "cancel") -STRING(R_FAST_SCROLL_L_CLEAR_DATA, "R - (↑↓) fast scroll\nL - clear data") -STRING(X_REMOVE_CHAR_Y_INSERT_CHAR, "X - remove char\nY - insert char") -STRING(ETA_N_MIN_N_SEC, "ETA %02llum%02llus") -STRING(BRIGHTNESS_CONTROLS, "[←] Decrease brightness\n[→] Increase brightness\n \n[X] Use volume slider control\n[A] Set current brightness\n[B] Cancel") -STRING(SEARCHING_PLEASE_WAIT, "Searching, please wait...") -STRING(RENAME_TO_GOOD_NAME, "Rename to good name?") -STRING(SD_WRITE_PROTECTED_CANT_CONTINUE, "SD card is write protected!\nCan't continue.") -STRING(SYSNAND_LVL_N, "SysNAND (lvl%lu)") -STRING(EMUNAND_LVL_N, "EmuNAND (lvl%lu)") -STRING(GAME_IMAGES, "game images") -STRING(GAMECART_SAVES, "gamecart saves") -STRING(IMAGES, "images") -STRING(MEMORY_AREAS, "memory areas") -STRING(SD_SYSTEM_DATA, "SD system data") -STRING(SD_CARD, "SD card") -STRING(RAM_DRIVE, "RAM drive") -STRING(WRITING_TO_DRIVE_IS_LOCKED_UNLOCK_NOW, "Writing to %s is locked!\nUnlock it now?") -STRING(UNLOCK_WRITE_FOR_DRIVE_NOT_ALLOWED, "Unlock write permission for\n%s is not allowed.") -STRING(ENABLE_BASE_WRITE, "You want to enable base\nwriting permissions.") -STRING(ENABLE_SD_WRITE, "You want to enable SD card\nwriting permissions.") -STRING(ENABLE_IMAGE_WRITE, "You want to enable image\nwriting permissions.") -STRING(ENABLE_RAM_DRIVE_WRITE, "You want to enable RAM drive\nwriting permissions.") -STRING(ENABLE_EMUNAND_0_WRITE, "You want to enable EmuNAND\nlvl0 writing permissions.") -STRING(ENABLE_SYSNAND_0_WRITE, "You want to enable SysNAND\nlvl0 writing permissions.") -STRING(ENABLE_EMUNAND_1_WRITE, "You want to enable EmuNAND\nlvl1 writing permissions.\n \nThis enables you to modify\nrecoverable system data,\nuser data & savegames.") -STRING(ENABLE_SYSNAND_1_WRITE, "You want to enable SysNAND\nlvl1 writing permissions.\n \nThis enables you to modify\nsystem data, installations,\nuser data & savegames.") -STRING(ENABLE_GAMECART_SAVE_WRITE, "You want to enable gamecart\nsave writing permissions.") -STRING(ENABLE_SYSNAND_2_WRITE, "!Better be careful!\n \nYou want to enable SysNAND\nlvl2 writing permissions.\n \nThis enables you to modify\nirrecoverable system data!") -STRING(ENABLE_MEMORY_WRITE, "!Better be careful!\n \nYou want to enable memory\nwriting permissions.\n \nWriting to certain areas may\nlead to unexpected results.") -STRING(ENABLE_SD_DATA_WRITE, "!THIS IS NOT RECOMMENDED!\n \nYou want to enable SD data\nwriting permissions.\n \nEverything here is encrypted.\nIt is recommended to use the\nA:/B: drives for modification\nof installations, user data &\nsavegames instead.") -STRING(ENABLE_SYSNAND_3_WRITE, "!THIS IS YOUR ONLY WARNING!\n \nYou want to enable SysNAND\nlvl3 writing permissions.\n \nThis enables you to OVERWRITE\nyour bootloader installation,\nessential system files and/or\nBRICK your console!") -STRING(UNLOCK_WRITE_NOT_ALLOWED, "Unlock write permission is not allowed.") -STRING(CANT_UNLOCK_WRITE_TRY_GODMODE9, "Can't unlock write permission.\nTry GodMode9 instead!") -STRING(ERROR_SD_TOO_SMALL, "Error: SD card is too small") -STRING(WARNING_PROCEEDING_WILL_FORMAT_SD_DELETE_ALL_DATA, "!WARNING!\n \nProceeding will format this SD.\nThis will irreversibly delete\nALL data on it.") -STRING(FORMAT_BONUS_DRIVE_DELETE_ALL_DATA, "Format the bonus drive?\nThis will irreversibly delete\nALL data on it.") -STRING(FORMATTING_SD_PLEASE_WAIT, "Formatting SD, please wait...") -STRING(FORMATTING_DRIVE_PLEASE_WAIT, "Formatting drive, please wait...") -STRING(ERROR_SD_CARD_IO_FAILURE, "Error: SD card i/o failure") -STRING(FILE_IS_MOUNTED_UNMOUNT_TO_UNLOCK, "File is currently mounted.\nUnmount to unlock?") -STRING(ERROR_CANT_INJECT_FILE_INTO_ITSELF, "Error: Can't inject file into itself") -STRING(OPERATION_WOULD_WRITE_BEYOND_EOF, "Operation would write beyond end of file") -STRING(NOT_ENOUGH_DATA_IN_FILE, "Not enough data in file") -STRING(CANCEL_IS_NOT_ALLOWED_HERE, "Cancel is not allowed here") -STRING(B_DETECTED_CANCEL, "B button detected. Cancel?") -STRING(ERROR_CANNOT_APPEND_FOLDER, "Error: Cannot append a folder") -STRING(ERROR_OVERWRITING_FILE_WITH_DIR, "Error: Overwriting file with dir") -STRING(ERROR_OVERWRITING_DIR_WITH_FILE, "Error: Overwriting dir with file") -STRING(ERROR_CANNOT_OPEN_DESTINATION_FILE, "Error: Cannot open destination file") -STRING(ERROR_NOT_ENOUGH_SPACE_AVAILABLE, "Error: Not enough space available") -STRING(ERROR_ONLY_FAT_FILES_CAN_BE_MOVED, "Error: Only FAT files can be moved") -STRING(ERROR_DESTINATION_IS_PART_OF_ORIGIN, "Error: Destination is part of origin") -STRING(ERROR_DESTINATION_EQUALS_ORIGIN_CHOOSE_ANOTHER_NAME, "Destination equals origin\nChoose another name?") -STRING(CHOOSE_NEW_NAME, "Choose new name") -STRING(OVERWRITE_FILES, "Overwrite file(s)") -STRING(SKIP_FILES, "Skip file(s)") -STRING(OVERWRITE_ALL, "Overwrite all") -STRING(SKIP_ALL, "Skip all") -STRING(DESTINATION_ALREADY_EXISTS, "Destination already exists:\n%s") -STRING(CHOOSE_NEW_DESTINATION_NAME, "Choose new destination name") -STRING(COPY_OPERATION_IS_NOT_ALLOWED, "Copy operation is not allowed") -STRING(DESTINATION_EQUALS_ORIGIN, "Destination equals origin") -STRING(ENTRY_NOT_FOUND_PATH_INJECT_INTO_PATH_INSTEAD, "Entry not found: %s\nInject into %s instead?") -STRING(FILE_SMALLER_THAN_SPACE_SIZES_CONTINUE, "File smaller than available space:\n%s (%s)\n%s (%s)\nContinue?") -STRING(NO_USABLE_ENTRIES_FOUND, "No usable entries found.") -STRING(BEAT_NO_ERROR, "No error") -STRING(BEAT_END_OF_ACTION_LIST, "End of action list") -STRING(BEAT_ABORTED_BY_USER, "Aborted by user") -STRING(BEAT_FAILED_TO_READ_WRITE_FILE, "Failed to read/write file") -STRING(BEAT_ATTEMPTED_TO_WRITE_BEYOND_EOF, "Attempted to write beyond end of file") -STRING(BEAT_INVALID_PATCH_FILE, "Invalid patch file") -STRING(BEAT_INVALID_INPUT_FILE, "Invalid input file") -STRING(BEAT_OUTPUT_FILE_CHECKSUM_MISMATCH, "Output file checksum mismatch") -STRING(BEAT_FILE_CHECKSUM_FAILED, "File checksum failed") -STRING(BEAT_EXPECTED_MORE_PATCH_DATA, "Expected more patch data") -STRING(BEAT_OUT_OF_MEMORY, "Out of memory") -STRING(BEAT_UNKNOWN_ERROR, "Unknown error") -STRING(FAILED_TO_INITIALIZE_BPM_FILE, "Failed to initialize BPM file:\n%s") -STRING(FAILED_TO_INITIALIZE_BPS_FILE, "Failed to initialize BPS file:\n%s") -STRING(PATCH_SUCCESSFULLY_APPLIED, "Patch successfully applied") -STRING(PATCHING_ABORTED_BY_USER, "Patching aborted by user") -STRING(FAILED_TO_RUN_PATCH, "Failed to run patch:\n%s") -STRING(DECOMPRESSING_DOT_CODE, "Decompressing .code...") -STRING(DECOMPRESSING_DOT_CODE_B_DETECTED_CANCEL, "Decompressing .code...\nB button detected. Cancel?") -STRING(COMPRESSING_DOT_CODE, "Compressing .code...") -STRING(COMPRESSING_DOT_CODE_B_DETECTED_CANCEL, "Compressing .code...\nB button detected. Cancel?") -STRING(PATCH_MOST_LIKELY_NOT_FOR_THIS_FILE, "The patch is most likely not intended for this file.") -STRING(YOU_MOST_LIKELY_APPLIED_PATCH_ON_OUTPUT, "You most likely applied the patch on the output file.") -STRING(PATCH_TECHNICALLY_VALID_BUT_SEEMS_SCRAMBLED, "The patch is technically valid,\nbut seems scrambled or malformed.") -STRING(PATCH_IS_INVALID, "The patch is invalid.") -STRING(FILES_BIGGER_THAN_16MB_IPS_DOESNT_SUPPORT_THAT, "One or both files are bigger than 16MB.\nThe IPS format doesn't support that.") -STRING(REQUESTED_FILE_PATH_WAS_INVALID, "The requested file path was invalid.") -STRING(PATCHING_CANCELED, "Patching canceled.") -STRING(NOT_ENOUGH_MEMORY, "Not enough memory.") -STRING(REGION_AMERICAS, "Americas") -STRING(REGION_AUSTRALIA, "Australia") -STRING(REGION_BRAZIL, "Brazil") -STRING(REGION_CHINA, "China") -STRING(REGION_EUROPE, "Europe") -STRING(REGION_FRANCE, "France") -STRING(REGION_GERMANY, "Germany") -STRING(REGION_ITALY, "Italy") -STRING(REGION_JAPAN, "Japan") -STRING(REGION_KOREA, "Korea") -STRING(REGION_SPAIN, "Spain") -STRING(REGION_TAIWAN, "Taiwan") -STRING(REGION_UNKNOWN, "Unknown") -STRING(REGION_UNITED_KINGDOM, "United Kingdom") -STRING(REGION_MIDDLE_EAST, "Middle East") -STRING(GENERATING_QR_CODE, "Generating QR code...") -STRING(REINITIALIZING_SD_CARD, "Reinitializing SD card...") -STRING(DUMPING_STATE_TO_SD_CARD, "Dumping state to SD card...") -STRING(PRESS_POWER_TO_TURN_OFF, "Press POWER to turn off") -STRING(CLEANING_UP_TITLES_PLEASE_WAIT, "Cleaning up titles, please wait...") -STRING(ERROR_NOT_NCCH_FILE, "Error: Not an NCCH file") -STRING(ERROR_FILE_IS_TOO_SMALL, "Error: File is too small") -STRING(ATTEMPT_FIX_THIS_TIME, "Attempt fix this time") -STRING(ATTEMPT_FIX_ALWAYS, "Attempt fix always") -STRING(ABORT_VERIFICATION, "Abort verification") -STRING(ERROR_BAD_CRYPTO_FLAGS, "Error: Bad crypto flags") -STRING(ERROR_BAD_EXEFS_HEADER, "Error: Bad ExeFS header") -STRING(ERROR_MISSING_EXTHEADER, "Error: Missing ExtHeader") -STRING(ERROR_CRYPTO_NOT_SET_UP, "Error: Crypto not set up") -STRING(PATH_NCCH_VERIFICATION_FAILED_INFO, "%s\nNCCH verification failed:\nExtHdr/ExeFS/RomFS: %s/%s/%s") -STRING(OK, "ok") -STRING(FAIL, "fail") -STRING(ERROR_NOT_NCSD_FILE, "Error: Not an NCSD file") -STRING(PATH_CONTENT_N_SIZE_AT_OFFSET_VERIFICATION_FAILED, "%s\nContent%lu (%08lX@%08lX):\nVerification failed") -STRING(ERROR_PROBABLY_NOT_CIA_FILE, "Error: Probably not a CIA file") -STRING(ERROR_TMD_PROBABLY_CORRUPTED, "Error: TMD probably corrupted") -STRING(PATH_ID_N_SIZE_AT_OFFSET_VERIFICATION_FAILED, "%s\nID %08lX (%08llX@%08llX)\nVerification failed") -STRING(ERROR_CDN_TITLEKEY_NOT_FOUND, "Error: CDN titlekey not found") -STRING(DLC_CONTENT_IS_MISSING_IGNORE_ALL_AND_CONTINUE, "DLC content is missing\n \nIgnore all and continue?") -STRING(PATH_SECTION_N_HASH_MISMATCH, "%s\nSection %lu hash mismatch") -STRING(ARM9_ENTRYPOINT_IS_MISSING, "ARM9 entrypoint is missing") -STRING(WARNING_ARM11_ENTRYPOINT_IS_MISSING, "Warning: ARM11 entrypoint is missing") -STRING(ERROR_NOT_A_BOSS_FILE, "Error: Not a BOSS file") -STRING(BOSS_PAYLOAD_HASH_MISMATCH_TRY_TO_FIX_IT, "BOSS payload hash mismatch.\n \nTry to fix it?") -STRING(GENERIC_TICKET_PIRATE_LEGIT, "Generic ticket (\"pirate legit\")") -STRING(PERSONALIZED_TICKET_LEGIT, "Personalized ticket (legit)") -STRING(ID_N_LEGIT_TICKET_IS_PERSONALIZED_USING_THIS_NOT_RECOMMENDED_CHOOSE_DEFAULT_ACTION, "ID %016llX\nLegit ticket is personalized.\nUsing this is not recommended.\nChoose default action:") -STRING(ID_N_TITLEKEY_NOT_FOUND, "ID %016llX\nTitlekey not found.") -STRING(ID_N_TMD_IN_TAD_NOT_LEGIT, "ID %016llX\nTMD in TAD is not legit.") -STRING(ID_N_TMD_NOT_LEGIT, "ID %016llX\nTMD is not legit.") -STRING(ID_N_DOT_N_STATUS, "ID %016llX.%08lX\n%s") -STRING(CONTENT_IS_CORRUPT, "Content is corrupt") -STRING(INSERT_CONTENT_FAILED, "Insert content failed") -STRING(INSTALL_CONTENT_FAILED, "Install content failed") -STRING(INSTALL_ERROR_THIS_SYSTEM_IS_MISSING_DB_FILES_MAYBE_SD_MISSING_OR_UNINITIALIZED, "Install error:\nThis system is missing one or\nmore .db files.\n \nMaybe the SD card is missing\nor uninitialized?") -STRING(INSTALL_ERROR_THIS_SYSTEM_IS_MISSING_TICKET_DB, "Install error:\nThis system is missing the\nticket.db file.") -STRING(SKIPPED_TITLE_0004008C000CBD00_NEEDS_SPECIAL_COMPILE_FLAGS, "Skipped title:\nTitle with id 0004008C000CBD00\nneeds special compiler flags.") -STRING(ERROR_FAKE_SIGNED_TICKET_ONLY_VALID_SIGNED_TICKETS_CAN_BE_INSTALLED, "Error: Fake-signed ticket\n \nOnly valid signed tickets can\nbe installed to the system.") -STRING(PATH_ERROR_UNKNOWN_CID_N_THIS_TICKET_DOES_NOT_BELONG_TO_THIS_3DS, "%s\nError: Unknown cid %08lX\n \nThis ticket does not belong to\nthis 3DS console.") -STRING(INSTALLING_TICKET, "Installing ticket...") -STRING(POSSIBLY_BROKEN, "Possibly Broken") -STRING(PERSONAL_LEGIT, "Personal Legit") -STRING(PERSONAL_LEGIT_DLC, "Personal Legit DLC") -STRING(PERSONAL_PIRATE_LEGIT, "Personal Pirate Legit") -STRING(PERSONAL_PIRATE_LEGIT_DLC, "Personal Pirate Legit DLC") -STRING(PERSONAL_CUSTOM, "Personal Custom") -STRING(PERSONAL_CUSTOM_DLC, "Personal Custom DLC") -STRING(UNIVERSAL_LEGIT, "Universal Legit") -STRING(UNIVERSAL_LEGIT_DLC, "Universal Legit DLC") -STRING(UNIVERSAL_PIRATE_LEGIT, "Universal Pirate Legit") -STRING(UNIVERSAL_PIRATE_LEGIT_DLC, "Universal Pirate Legit DLC") -STRING(UNIVERSAL_CUSTOM, "Universal Custom") -STRING(UNIVERSAL_CUSTOM_DLC, "Universal Custom DLC") -STRING(CONTENTS_IN_CIA_FOUND_TOTAL, "Contents in CIA: %lu/%lu") -STRING(CONTENTS_IN_CIA_TOTAL, "Contents in TMD: %lu") -STRING(CONSOLE_ID_N, "Console ID: %08lX\n") -STRING(SHOW_GAME_INFO_DETAILS, "%s\n%s %s Title\n \nTitle ID: %016llX\nTitle version: %lu.%lu.%lu\nContents size: %s\n%s\n%s \nTicket/TMD: %s/%s\nVerification: %s") -STRING(STATE_LEGIT, "legit") -STRING(STATE_ILLEGIT, "illegit") -STRING(STATE_UNKNOWN, "unknown") -STRING(STATE_INVALID, "invalid") -STRING(STATE_PENDING_PROCEED_WITH_VERIFICATION, "pending\n \nProceed with verification?") -STRING(STATE_PASSED, "passed") -STRING(STATE_FAILED, "failed") -STRING(OUTPUT_FILE_ALREADY_EXISTS_UPDATE_THIS, "Output file already exists.\nUpdate this?") -STRING(DSI_ENHANCED, "DSi Enhanced") -STRING(DSI_EXCLUSIVE, "DSi Exclusive") -STRING(FIXING_CMACS_PLEASE_WAIT, "Fixing CMACs, please wait...") -STRING(NCSD_HEADER_IS_NOT_VALID, "NCSD header is not valid") -STRING(NAND_DUMP_MISSING_DATA, "NAND dump missing data") -STRING(ERROR_CTR_MBR_IS_CORRUPT, "Error: CTR MBR is corrupt") -STRING(ERROR_TWL_MBR_IS_CORRUPT, "Error: TWL MBR is corrupt") -STRING(PATH_ERROR_CTR_PARTITION_N_IS_CORRUPT, "%s\nError: CTR partition%lu is corrupt") -STRING(PATH_ERROR_TWL_PARTITION_N_IS_CORRUPT, "%s\nError: TWL partition%lu is corrupt") -STRING(NO_VALID_FIRM_FOUND, "No valid FIRM found") -STRING(ERROR_NAND_DUMP_IS_CORRUPT_STILL_CONTINUE, "Error: NAND dump is corrupt.\nStill continue?") -STRING(ERROR_SYSTEM_IS_LOCKED, "Error: System is locked.") -STRING(ESSENTIAL_FILES_BACKUP_IS_REQUIRED_CREATE_ONE_NOW, "Essential files backup is required.\nCreate one now?") -STRING(WARNING_PROCEEDING_WILL_OVERWRITE_SYSNAND_WITH_DUMP, "!WARNING!\n \nProceeding will overwrite the\nSysNAND with the provided dump.\n \n(B9S/A9LH will be left intact.)") -STRING(IMAGE_NCSD_CORRUPT_OR_CUSTOMIZED_SAFE_RESTORE_NOT_POSSIBLE, "Image NCSD corrupt or customized,\nsafe restore is not possible!") -STRING(WARNING_NCSD_DIFFERS_BETWEEN_IMAGE_AND_LOCAL_ELEVATED_WRITE_PERMISSIONS_REQUIRED, "!WARNING!\n \nNCSD differs between image and local,\nelevated write permissions required\n \nProceed on your own risk?") -STRING(NOT_AN_INSTALLABLE_FIRM, "Not a installable FIRM.") -STRING(FIRM_LOAD_VERIFY_ERROR, "FIRM load/verify error.") -STRING(PATH_FIRM_N_NOT_FOUND_OR_TOO_SMALL, "%s\nFIRM%lu not found or too small.") -STRING(SECTOR_0X96_CRYPTO_FAIL, "Sector 0x96 crypto fail.") -STRING(SECTOR_0X96_CORRUPTED_PROVIDE_SECRET_SECTOR_BIN_TO_FIX, "Sector 0x96 is corrupted.\n \nProvide \"secret_sector.bin\"\nto fix sector 0x96.") -STRING(SECTOR_0X96_CORRUPTED_FIX_DURING_INSTALLATION, "Sector 0x96 is corrupted.\n \nFix sector 0x96 during\nthe installation?") -STRING(WARNING_PROCEEDING_WILL_INSTALL_FIRM_TO_SYSNAND_AND_INJECT_SIGHAX_UNSUPPORTED_FIRM_WILL_BRICK, "!WARNING!\n \nProceeding will install the\nprovided FIRM to the SysNAND\nand inject sighax.\n \nInstalling an unsupported FIRM\nwill BRICK your console!") -STRING(INSTALLING_FIRM_PLEASE_WAIT, "Installing FIRM, please wait...") -STRING(THIS_IS_BAD_FAILED_WRITING_SECTOR_0X96_TRY_FIX_BEFORE_REBOOT, "!THIS IS BAD!\n \nFailed writing sector 0x96.\nTry to fix before reboot!") -STRING(THIS_IS_BAD_FAILED_WRITING_FIRM_N_TRY_FIX_BEFORE_REBOOT, "!THIS IS BAD!\n \nFailed writing FIRM%lu.\nTry to fix before reboot!") -STRING(CHECKING_INSTALLATION_PLEASE_WAIT, "Checking installation, please wait...") -STRING(THIS_IS_BAD_FAILED_VERIFYING_SECTOR_0X96_TRY_FIX_BEFORE_REBOOT, "!THIS IS BAD!\n \nFailed verifying sector 0x96.\nTry to fix before reboot!") -STRING(THIS_IS_BAD_FAILED_VERIFYING_FIRM_N_TRY_FIX_BEFORE_REBOOT, "!THIS IS BAD!\n \nFailed verifying FIRM%lu.\nTry to fix before reboot!") -STRING(PERFECT_KEYDB_IS_ALREADY_INSTALLED, "Perfect %s is already installed!") -STRING(PATH_NOT_PERFECT_KEYDB_IMAGE_CANNOT_INSTALL_TO_NAND, "%s\nNot a perfect %s image.\nCannot install to NAND!") -STRING(PATH_FAILED_WRITING_KEYDB_TO_NAND, "%s\nFailed writing %s to NAND!") -STRING(USE_L_R_TO_SAVE, "(use L+R to save)") -STRING(EASTER_NOT_FOUND, "(%s not found)") -STRING(BUILDING_TO_OUT_ARG, "Building to %s:\n%s ...") -STRING(EJECT_SD_CARD, "Eject SD card...") -STRING(INSERT_SD_CARD, "Insert SD card...") -STRING(SCRIPTERR_UNKNOWN_CMD, "unknown cmd") -STRING(SCRIPTERR_BAD_NUMBER_OF_ARGS, "bad # of args") -STRING(SCRIPTERR_UNRECOGNIZED_FLAGS, "unrecognized flags") -STRING(SCRIPTERR_ILLEGAL_FLAG, "illegal flag") -STRING(SCRIPTERR_UNRESOLVED_QUOTES, "unresolved quotes") -STRING(SCRIPTERR_TOO_MANY_ARGUMENTS, "too many arguments") -STRING(SCRIPTERR_ARGUMENT_EXPAND_FAILED, "argument expand failed") -STRING(SCRIPTERR_QUOTE_NOT_AN_ERROR, "'not' an error") -STRING(SCRIPTERR_SYNTAX_ERROR_AFTER_IF, "syntax error after 'if'") -STRING(SCRIPTERR_ELIF_WITHOUT_IF, "'elif' without 'if'") -STRING(SCRIPTERR_SYNTAX_ERROR_AFTER_ELIF, "syntax error after 'elif'") -STRING(SCRIPTERR_ELSE_WITHOUT_IF, "'else' without 'if'") -STRING(SCRIPTERR_END_WITHOUT_IF, "'end' without 'if'") -STRING(SCRIPTERR_FOR_INSIDE_FOR, "'for' inside 'for'") -STRING(SCRIPTERR_DIR_NOT_FOUND, "dir not found") -STRING(SCRIPTERR_FOR_WITHOUT_NEXT, "'for' without 'next'") -STRING(SCRIPTERR_NEXT_WITHOUT_FOR, "'next' without 'for'") -STRING(SCRIPTERR_FORPATH_ERROR, "forpath error") -STRING(SCRIPTERR_LABEL_NOT_FOUND, "label not found") -STRING(SCRIPTERR_USER_ABORT, "user abort") -STRING(SCRIPTERR_KEY_NOT_PRESSED, "key not pressed") -STRING(SCRIPTERR_OUT_OF_MEMORY, "out of memory") -STRING(SCRIPTERR_VAR_FAIL, "var fail") -STRING(SCRIPTERR_FORBIDDEN_DRIVE, "forbidden drive") -STRING(SCRIPTERR_INVALID_PATH, "invalid path") -STRING(SCRIPTERR_FILESELECT_ABORT, "fileselect abort") -STRING(SCRIPTERR_DIRSELECT_ABORT, "dirselect abort") -STRING(SCRIPTERR_SET_FAIL, "set fail") -STRING(SCRIPTERR_CHAR_NOT_FOUND, "char not found") -STRING(SCRIPTERR_ARGV_2_IS_NOT_CHAR, "argv[2] is not a char") -STRING(SCRIPTERR_ARGV_2_MUST_BE_2_CHARS, "argv[2] must be 2 chars") -STRING(SCRIPTERR_ARG_MATCH, "arg match") -STRING(SCRIPTERR_NO_ARG_MATCH, "no arg match") -STRING(SCRIPTERR_PERMISSION_FAIL, "permission fail") -STRING(SCRIPTERR_COPY_FAIL, "copy fail") -STRING(SCRIPTERR_MOVE_FAIL, "move fail") -STRING(SCRIPTERR_INJECT_FAIL, "inject fail") -STRING(SCRIPTERR_FILLBYTE_FAIL, "fillbyte fail") -STRING(SCRIPTERR_FILL_FAIL, "fill fail") -STRING(SCRIPTERR_BAD_FILESIZE, "bad filesize") -STRING(SCRIPTERR_CREATE_DUMMY_FILE, "create dummy fail") -STRING(SCRIPTERR_REMOVE_FAIL, "remove fail") -STRING(SCRIPTERR_MAKEDIR_FAIL, "makedir fail") -STRING(SCRIPTERR_MOUNT_FAIL, "mount fail") -STRING(SCRIPTERR_FIND_FAIL, "find fail") -STRING(SCRIPTERR_FINDNOT_FAIL, "findnot fail") -STRING(SCRIPTERR_NO_SIZE_GIVEN, "no size given") -STRING(SCRIPTERR_SIZE_TOO_BIG, "size too big") -STRING(SCRIPTERR_READ_FAIL, "read fail") -STRING(SCRIPTERR_CONVERSION_FAIL, "conversion fail") -STRING(SCRIPTERR_INVALID_DATA, "invalid data") -STRING(SCRIPTERR_WRITE_FAIL, "write fail") -STRING(SCRIPTERR_SHA_ARG0_FAIL, "sha arg0 fail") -STRING(SCRIPTERR_SHA_ARG1_FAIL, "sha arg1 fail") -STRING(SCRIPTERR_SHA_DOES_NOT_MATCH, "sha does not match") -STRING(SCRIPTERR_SHA_WRITE_FAIL, "sha write fail") -STRING(SCRIPTERR_FILE_WRITE_FAIL, "file write fail") -STRING(SCRIPTERR_FIXCMAC_FAILED, "fixcmac failed") -STRING(SCRIPTERR_VERIFICATION_FAILED, "verification failed") -STRING(SCRIPTERR_DECRYPT_FAILED, "decrypt failed") -STRING(SCRIPTERR_ENCRYPT_FAILED, "encrypt failed") -STRING(SCRIPTERR_BUILD_CIA_FAILED, "build CIA failed") -STRING(SCRIPTERR_INSTALL_GAME_FAILED, "install game failed") -STRING(SCRIPTERR_DOES_NOT_CONTAIN_DOT_CODE, "does not contain .code") -STRING(SCRIPTERR_EXTRACT_DOT_CODE_FAILED, "extract .code failed") -STRING(SCRIPTERR_COMPRESS_DOT_CODE_FAILED, "compress .code failed") -STRING(SCRIPTERR_BUILD_FAILED, "build failed") -STRING(SCRIPTERR_UNKNOWN_FILE, "unknown file") -STRING(SCRIPTERR_APPLY_IPS_FAILD, "apply IPS failed") -STRING(SCRIPTERR_APPLY_BPS_FAILED, "apply BPS failed") -STRING(SCRIPTERR_APPLY_BPM_FAILED, "apply BPM failed") -STRING(SCRIPTERR_TEXTVIEWER_FAILED, "textviewer failed") -STRING(SCRIPTERR_BAD_DUMPSIZE, "bad dumpsize") -STRING(SCRIPTERR_CART_INIT_FAIL, "cart init fail") -STRING(SCRIPTERR_CART_DUMP_FAILED, "cart dump failed") -STRING(SCRIPTERR_NOT_A_DIR, "not a dir") -STRING(SCRIPTERR_FILE_NOT_FOUND, "file not found") -STRING(SCRIPTERR_NOT_A_BOOTABLE_FIRM, "not a bootable firm") -STRING(SCRIPTERR_SD_NOT_MOUNTED, "SD not mounted") -STRING(SCRIPTERR_UNKNOWN_ERROR, "unknown error") -STRING(SCRIPTERR_COMMAND_SUCCESS, "command success") -STRING(SCRIPTERR_CONTROL_FLOW_ERROR, "control flow error") -STRING(SCRIPTERR_UNCLOSED_CONDITIONAL, "unclosed conditional") -STRING(SCRIPTERR_ERROR_MESSAGE_FAIL, "error message fail") -STRING(ERROR_INVALID_TEXT_DATA, "Error: Invalid text data") -STRING(TEXTVIEWER_CONTROLS_DETAILS, "Textviewer Controls:\n \n↑↓→←(+R) - Scroll\nR+Y - Toggle wordwrap\nR+X - Goto line #\nB - Exit\n") -STRING(CURRENT_LINE_N_ENTER_NEW_LINE_BELOW, "Current line: %i\nEnter new line below.") -STRING(PREVIEW_DISABLED, "(preview disabled)") -STRING(PATH_LINE_N_ERR_LINE, "%s\nline %lu: %s\n%s") -STRING(END_OF_SCRIPT_UNRESOLVED_IF, "end of script: unresolved 'if'") -STRING(END_OF_SCRIPT_UNRESOLVED_FOR, "end of script: unresolved 'for'") -STRING(SYSINFO_MODEL, "Model: %s (%s)\r\n") -STRING(SYSINFO_SERIAL, "Serial: %s\r\n") -STRING(SYSINFO_REGION_SYSTEM, "Region (system): %s\r\n") -STRING(SYSINFO_REGION_SALES, "Region (sales): %s\r\n") -STRING(SYSINFO_SOC_MANUFACTURING_DATE, "SoC manufacturing date: %s\r\n") -STRING(SYSINFO_SYSTEM_ASSEMBLY_DATE, "System assembly date: %s\r\n") -STRING(SYSINFO_ORIGINAL_FIRMWARE, "Original firmware: %s\r\n") -STRING(SYSINFO_FRIENDCODE_SEED, "Friendcode seed: %s\r\n") -STRING(SYSINFO_SD_KEYY, "SD keyY: %s\r\n") -STRING(SYSINFO_NAND_CID, "NAND CID: %s\r\n") -STRING(SYSINFO_SD_CID, "SD CID: %s\r\n") -STRING(SYSINFO_SYSTEM_ID0, "System ID0: %s\r\n") -STRING(SYSINFO_SYSTEM_ID1, "System ID1: %s\r\n") -STRING(SORTING_TICKETS_PLEASE_WAIT, "Sorting tickets, please wait ...") diff --git a/resources/gm9/languages/de.trf b/resources/gm9/languages/de.trf deleted file mode 100644 index 18d7b55ef3332209e9ac1f4a9977371cbb7ae1f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22336 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 diff --git a/resources/gm9/languages/en.trf b/resources/gm9/languages/en.trf deleted file mode 100644 index e3888ff43e84167eae575c0d16e9474db72613c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72 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 diff --git a/resources/gm9/languages/fr.trf b/resources/gm9/languages/fr.trf deleted file mode 100644 index 1d1f1b278019f3ec50d860288f4445213bd5cf1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26004 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 diff --git a/resources/gm9/languages/id.trf b/resources/gm9/languages/id.trf deleted file mode 100644 index e02177640c11eabd669c0f82cfd67c2ce001469a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25204 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 diff --git a/resources/gm9/languages/it.trf b/resources/gm9/languages/it.trf deleted file mode 100644 index 9d4ec2aac60e9504c14372a831acc5f672e10701..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5528 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 diff --git a/resources/gm9/languages/nl.trf b/resources/gm9/languages/nl.trf deleted file mode 100644 index 066871214cc9d71250eb6be083d385e4c8273dba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22624 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 R#?m`W_m}>(l!D(&{{_LLU#Yg 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 int: @@ -43,7 +45,25 @@ def get_language(data: dict) -> bytes: try: return data[LANGUAGE_NAME].encode("utf-8") except KeyError as exception: - raise ValueError("invalid language data") from exception + raise ValueError("missing language name") from exception + +def get_version(data: dict) -> int: + """ + Get translation version from JSON data. + + Args: + data: JSON translation data. + + Returns: + The translation's version. + + Raises: + ValueError: If no version exists. + """ + try: + return data[VERSION] + except KeyError as exception: + raise ValueError("missing verison number") from exception def load_translations(data: dict) -> dict[str, bytearray]: @@ -59,7 +79,7 @@ def load_translations(data: dict) -> dict[str, bytearray]: return { key: bytearray(value, "utf-8") + b"\0" for key, value in data.items() - if key != LANGUAGE_NAME + if key not in (LANGUAGE_NAME, VERSION) } @@ -119,19 +139,19 @@ def strings_to_trf(mapping: dict[str, bytearray], version: int, language: str) - return trfdata -def main(source: pathlib.Path, dest: pathlib.Path, version: int) -> None: +def main(source: pathlib.Path, dest: pathlib.Path) -> None: """ Entrypoint of transriff. Args: source: JSON to convert from. dest: TRF file to write. - version: Translation version. """ data = json.loads(source.read_text()) try: language = get_language(data) + version = get_version(data) except ValueError as exception: sys.exit(f"Fatal: {exception}.") mapping = load_translations(data) @@ -157,12 +177,7 @@ if __name__ == "__main__": type=pathlib.Path, help="TRF file to write" ) - parser.add_argument( - "version", - type=int, - help="translation version, from language.yml" - ) args = parser.parse_args() - main(args.source, args.dest, args.version) + main(args.source, args.dest)