diff --git a/text.cpp b/text.cpp index 59c91bf..d5ac6fa 100644 --- a/text.cpp +++ b/text.cpp @@ -1,1288 +1,1339 @@ -#ifdef _WIN64 -#define ARCH "x64" -#else -#define ARCH "x86" -#endif - -#if 0 -#define TURKISH -#define SPANISH -#define SIMPLIFIED_CHINESE -#define RUSSIAN -#define INDONESIAN -#define ITALIAN -#define THAI -#define PORTUGUESE -#define KOREAN -#define FRENCH -#endif - -// If you are updating a previous translation see https://github.com/Artikash/Textractor/issues/313 - -const char* NATIVE_LANGUAGE = "English"; -const char* ATTACH = u8"Attach to game"; -const char* LAUNCH = u8"Launch game"; -const char* GAME_CONFIG = u8"Configure game"; -const char* DETACH = u8"Detach from game"; -const char* FORGET = u8"Forget game"; -const char* ADD_HOOK = u8"Add hook"; -const char* REMOVE_HOOKS = u8"Remove hook(s)"; -const char* SAVE_HOOKS = u8"Save hook(s)"; -const char* SEARCH_FOR_HOOKS = u8"Search for hooks"; -const char* SETTINGS = u8"Settings"; -const char* EXTENSIONS = u8"Extensions"; -const char* SELECT_PROCESS = u8"Select process"; -const char* ATTACH_INFO = u8R"(If you don't see the process you want to attach, try running with admin rights -You can also type in the process id)"; -const char* SELECT_PROCESS_INFO = u8"If you manually type in the process file name, please use the absolute path"; -const char* FROM_COMPUTER = u8"Select from computer"; -const char* PROCESSES = u8"Processes (*.exe)"; -const char* CODE_INFODUMP = u8R"(Enter read code -R{S|Q|V|M}[null_length<][codepage#]@addr -OR -Enter hook code -H{A|B|W|H|S|Q|V|M}[F][null_length<][N][codepage#][padding+]data_offset[*deref_offset][:split_offset[*deref_offset]]@addr[:module[:func]] -All numbers except codepage/null_length in hexadecimal -Default codepage is 932 (Shift-JIS) but this can be changed in settings -A/B: codepage char little/big endian -W: UTF-16 char -H: Two hex bytes -S/Q/V/M: codepage/UTF-16/UTF-8/hex string -F: treat strings as full lines of text -N: don't use context -null_length: length of null terminator used for string -padding: length of padding data before string (C struct { int64_t size; char string[500]; } needs padding = 8) -Negatives for data_offset/split_offset refer to registers --4 for EAX, -8 for ECX, -C for EDX, -10 for EBX, -14 for ESP, -18 for EBP, -1C for ESI, -20 for EDI --C for RAX, -14 for RBX, -1C for RCX, -24 for RDX, and so on for RSP, RBP, RSI, RDI, R8-R15 -* means dereference pointer+deref_offset)"; -const char* SAVE_SETTINGS = u8"Save settings"; -const char* EXTEN_WINDOW_INSTRUCTIONS = u8R"(To add an extension, right click the extension list -Alternatively, drag and drop the extension file from your computer -To reorder extensions, drag and drop them within the list -(Extensions are used from top to bottom: order DOES matter) -To remove an extension, select it and press delete)"; -const char* ADD_EXTENSION = u8"Add extension"; -const char* INVALID_EXTENSION = u8"%1 is an invalid extension"; -const char* CONFIRM_EXTENSION_OVERWRITE = u8"Another version of this extension already exists, do you want to delete and overwrite it?"; -const char* EXTENSION_WRITE_ERROR = u8"Failed to save extension"; -const char* USE_JP_LOCALE = u8"Emulate japanese locale?"; -const char* FAILED_TO_CREATE_CONFIG_FILE = u8"Failed to create config file \"%1\""; -const char* HOOK_SEARCH_UNSTABLE_WARNING = u8"Searching for hooks is unstable! Be prepared for your game to crash!"; -const char* SEARCH_CJK = u8"Search for Chinese/Japanese/Korean"; -const char* SEARCH_PATTERN = u8"Search pattern (hex byte array)"; -const char* SEARCH_DURATION = u8"Search duration (ms)"; -const char* SEARCH_MODULE = u8"Search within module"; -const char* PATTERN_OFFSET = u8"Offset from pattern start"; -const char* MAX_HOOK_SEARCH_RECORDS = u8"Search result cap"; -const char* MIN_ADDRESS = u8"Minimum address (hex)"; -const char* MAX_ADDRESS = u8"Maximum address (hex)"; -const char* STRING_OFFSET = u8"String offset (hex)"; -const char* HOOK_SEARCH_FILTER = u8"Results must match this regex"; -const char* TEXT = u8"Text"; -const char* CODEPAGE = u8"Codepage"; -const char* SEARCH_FOR_TEXT = u8"Search for specific text"; -const char* START_HOOK_SEARCH = u8"Start hook search"; -const char* SAVE_SEARCH_RESULTS = u8"Save search results"; -const char* TEXT_FILES = u8"Text (*.txt)"; -const char* DOUBLE_CLICK_TO_REMOVE_HOOK = u8"Double click a hook to remove it"; -const char* FILTER_REPETITION = u8"Filter repetition"; -const char* AUTO_ATTACH = u8"Auto attach"; -const char* ATTACH_SAVED_ONLY = u8"Auto attach (saved only)"; -const char* SHOW_SYSTEM_PROCESSES = u8"Show system processes"; -const char* DEFAULT_CODEPAGE = u8"Default codepage"; -const char* FLUSH_DELAY = u8"Flush delay"; -const char* MAX_BUFFER_SIZE = u8"Max buffer size"; -const char* MAX_HISTORY_SIZE = u8"Max history size"; -const char* CONFIG_JP_LOCALE = u8"Launch with JP locale"; -const wchar_t* CONSOLE = L"Console"; -const wchar_t* CLIPBOARD = L"Clipboard"; -const wchar_t* ABOUT = L"Textractor " ARCH L" v" VERSION LR"( made by me: Artikash (email: akashmozumdar@gmail.com) -Project homepage: https://github.com/Artikash/Textractor -Tutorial video: https://tinyurl.com/textractor-tutorial -FAQ: https://github.com/Artikash/Textractor/wiki/FAQ -Please contact me with any problems, feature requests, or questions relating to Textractor -You can do so via the project homepage (issues section) or via email -Source code available under GPLv3 at project homepage -If you like this project, please tell everyone about it :))"; -const wchar_t* CL_OPTIONS = LR"(usage: Textractor [-p{process id|"process name"}]... -example: Textractor -p4466 -p"My Game.exe" tries to inject processes with id 4466 or with name My Game.exe)"; -const wchar_t* UPDATE_AVAILABLE = L"Update available: download it from https://github.com/Artikash/Textractor/releases"; -const wchar_t* ALREADY_INJECTED = L"Textractor: already injected"; -const wchar_t* NEED_32_BIT = L"Textractor: architecture mismatch: only Textractor x86 can inject this process"; -const wchar_t* NEED_64_BIT = L"Textractor: architecture mismatch: only Textractor x64 can inject this process"; -const wchar_t* INJECT_FAILED = L"Textractor: couldn't inject"; -const wchar_t* LAUNCH_FAILED = L"Textractor: couldn't launch"; -const wchar_t* INVALID_CODE = L"Textractor: invalid code"; -const wchar_t* INVALID_CODEPAGE = L"Textractor: couldn't convert text (invalid codepage?)"; -const char* PIPE_CONNECTED = u8"Textractor: pipe connected"; -const char* INSERTING_HOOK = u8"Textractor: inserting hook: %s"; -const char* REMOVING_HOOK = u8"Textractor: removing hook: %s"; -const char* HOOK_FAILED = u8"Textractor: failed to insert hook"; -const char* TOO_MANY_HOOKS = u8"Textractor: too many hooks: can't insert"; -const char* STARTING_SEARCH = u8"Textractor: starting search"; -const char* NOT_ENOUGH_TEXT = u8"Textractor: not enough text to search accurately"; -const char* HOOK_SEARCH_INITIALIZED = u8"Textractor: search initialized with %zd hooks"; -const char* MAKE_GAME_PROCESS_TEXT = u8"Textractor: please click around in the game to force it to process text during the next %d seconds"; -const char* HOOK_SEARCH_FINISHED = u8"Textractor: hook search finished, %d results found"; -const char* OUT_OF_RECORDS_RETRY = u8"Textractor: out of search records, please retry if results are poor (default record count increased)"; -const char* FUNC_MISSING = u8"Textractor: function not present"; -const char* MODULE_MISSING = u8"Textractor: module not present"; -const char* GARBAGE_MEMORY = u8"Textractor: memory constantly changing, useless to read"; -const char* SEND_ERROR = u8"Textractor: Send ERROR (likely an unstable/incorrect H-code)"; -const char* READ_ERROR = u8"Textractor: Reader ERROR (likely an incorrect R-code)"; -const char* HIJACK_ERROR = u8"Textractor: Hijack ERROR"; -const char* COULD_NOT_FIND = u8"Textractor: could not find text"; -const char* TRANSLATE_TO = u8"Translate to"; -const char* TRANSLATE_SELECTED_THREAD_ONLY = u8"Translate selected text thread only"; -const char* RATE_LIMIT_ALL_THREADS = u8"Rate limit all text threads"; -const char* RATE_LIMIT_SELECTED_THREAD = u8"Rate limit selected text thread"; -const char* USE_TRANS_CACHE = u8"Use translation cache"; -const char* RATE_LIMIT_TOKEN_COUNT = u8"Rate limiter token count"; -const char* RATE_LIMIT_TOKEN_RESTORE_DELAY = u8"Rate limiter token restore delay (ms)"; -const wchar_t* TOO_MANY_TRANS_REQUESTS = L"Rate limit exceeded: refuse to make more translation requests"; -const wchar_t* TRANSLATION_ERROR = L"Error while translating"; -const char* USE_PREV_SENTENCE_CONTEXT = u8"Use previous sentence as context"; -const char* API_KEY = u8"API key"; -const char* EXTRA_WINDOW_INFO = u8R"(Right click to change settings -Click and drag on window edges to move, or the bottom right corner to resize)"; -const char* SENTENCE_TOO_BIG = u8"Sentence too large to display"; -const char* MAX_SENTENCE_SIZE = u8"Max sentence size"; -const char* TOPMOST = u8"Always on top"; -const char* DICTIONARY = u8"Dictionary"; -const char* DICTIONARY_INSTRUCTIONS = u8R"(This file is used only for the "Dictionary" feature of the Extra Window extension. -It uses a custom format specific to Textractor and is not meant to be written manually. -You should look for a dictionary in this format online (https://github.com/Artikash/Textractor-Dictionaries/releases is a good place to start). -Alternatively, if you're a programmer, you can write a script to convert a dictionary from another format with the info below. -Once you have a dictionary, to look up some text in Extra Window, hover over it. You can scroll through all the matching definitions. -Definitions are formatted like this:|TERM|Hola<