diff --git a/.gitignore b/.gitignore
index 2f203cf95..71c2c75ed 100644
--- a/.gitignore
+++ b/.gitignore
@@ -49,3 +49,4 @@ desktop.ini
# User additions
/zzz_backup
+/arm9/source/language.inl
diff --git a/Makefile b/Makefile
index 7ff49e5aa..a38055627 100644
--- a/Makefile
+++ b/Makefile
@@ -23,6 +23,10 @@ ifeq ($(NTRBOOT),1)
VRAM_SCRIPTS := resources/gm9/scripts
endif
+# Definitions for translation files
+SOURCE_JSON := resources/languages/source.json
+LANGUAGE_INL := arm9/source/language.inl
+
ifeq ($(OS),Windows_NT)
ifeq ($(TERM),cygwin)
PY3 := py -3 # Windows / CMD/PowerShell
@@ -51,7 +55,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)
unmarked_readme: .FORCE
@$(PY3) utils/unmark.py -f README.md data/README_internal.md
@@ -85,11 +89,15 @@ $(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 $< $@
+
%.elf: .FORCE
@echo "Building $@"
@$(MAKE) --no-print-directory -C $(@D)
-arm9/arm9.elf: $(VRAM_TAR)
+arm9/arm9.elf: $(VRAM_TAR) $(LANGUAGE_INL)
firm: $(ELF)
@mkdir -p $(call dirname,"$(FIRM)") $(call dirname,"$(FIRMD)")
diff --git a/arm9/source/language.inl b/arm9/source/language.inl
deleted file mode 100644
index 547f10b2c..000000000
--- 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/utils/transcp.py b/utils/transcp.py
new file mode 100755
index 000000000..001a39946
--- /dev/null
+++ b/utils/transcp.py
@@ -0,0 +1,27 @@
+#!/usr/bin/env python3
+
+from argparse import ArgumentParser, FileType
+import json
+
+# This is to be incremented every time the order changes
+# New strings added to the end will not cause issues
+TRANSLATION_VER = 1
+
+# This is the language name key in the JSON, which is to be deleted
+LANGUAGE_NAME = "GM9_LANGUAGE"
+
+parser = ArgumentParser(description="Creates the language.inl file from source.json")
+parser.add_argument("source", type=FileType("r"), help="source.json")
+parser.add_argument("inl", type=FileType("w"), help="language.inl")
+args = parser.parse_args()
+
+# Load the JSON and remove the language name
+source = json.load(args.source)
+del source[LANGUAGE_NAME]
+
+# Create the header file
+args.inl.write("#define TRANSLATION_VER %d\n\n" % TRANSLATION_VER)
+for key in source:
+ # Escape \r, \n, and quotes
+ val = source[key].replace("\r", "\\r").replace("\n", "\\n").replace('"', '\\"')
+ args.inl.write('STRING(%s, "%s")\n' % (key, val))