Textractor_test/text.cpp

498 lines
29 KiB
C++
Raw Normal View History

2019-02-28 00:33:17 +08:00
#include "defs.h"
2019-02-02 05:56:10 +08:00
#ifdef _WIN64
#define ARCH "x64"
#else
#define ARCH "x86"
#endif
2019-02-02 05:56:10 +08:00
const char* ATTACH = u8"Attach to game";
const char* LAUNCH = u8"Launch game";
const char* DETACH = u8"Detach from game";
const char* ADD_HOOK = u8"Add hook";
2019-06-10 13:49:11 +08:00
const char* REMOVE_HOOKS = u8"Remove hook(s)";
2019-02-02 05:56:10 +08:00
const char* SAVE_HOOKS = u8"Save hook(s)";
const char* SEARCH_FOR_HOOKS = u8"Search for hooks";
2019-02-02 05:56:10 +08:00
const char* SETTINGS = u8"Settings";
const char* EXTENSIONS = u8"Extensions";
const char* SELECT_PROCESS = u8"Select process";
2019-02-02 05:56:10 +08:00
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* SEARCH_GAME = u8"Select from computer";
const char* PROCESSES = u8"Processes (*.exe)";
const char* CODE_INFODUMP = u8R"(Search for text
S[codepage#]text
OR
Enter read code
R{S|Q|V}[null_length<][codepage#]@addr
2019-02-02 05:56:10 +08:00
OR
Enter hook code
H{A|B|W|S|Q|V}[null_length<][N][codepage#][padding+]data_offset[*deref_offset][:split_offset[*deref_offset]]@addr[:module[:func]]
All numbers except codepage/null_length in hexadecimal
2019-02-02 05:56:10 +08:00
Default codepage is 932 (Shift-JIS) but this can be changed in settings
A/B: codepage char little/big endian
W: UTF-16 char
S/Q/V: codepage/UTF-16/UTF-8 string
N: don't use context
2019-03-28 11:35:22 +08:00
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
2019-02-02 05:56:10 +08:00
-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
2019-02-02 05:56:10 +08:00
* means dereference pointer+deref_offset)";
const char* SAVE_SETTINGS = u8"Save settings";
const char* EXTEN_WINDOW_INSTRUCTIONS = u8R"(Drag and drop extension (.dll) files here from your computer to add them
(Does not work if running as administrator)
Drag and drop within the list to reorder
2019-06-05 11:14:46 +08:00
(Extensions are used from top to bottom: order DOES matter)
2019-02-02 05:56:10 +08:00
Press delete with an extension selected to remove it)";
2019-06-05 11:14:46 +08:00
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";
2019-02-02 05:56:10 +08:00
const char* USE_JP_LOCALE = u8"Emulate japanese locale?";
2019-06-09 18:19:54 +08:00
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* PATTERN_OFFSET = u8"Offset from pattern start";
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* START_HOOK_SEARCH = u8"Start hook search";
const char* SAVE_SEARCH_RESULTS = u8"Save search results";
const char* TEXT_FILES = u8"Text (*.txt)";
2019-06-11 10:47:58 +08:00
const char* DOUBLE_CLICK_TO_REMOVE_HOOK = u8"Double click a hook to remove it";
2019-02-05 04:53:13 +08:00
const char* FILTER_REPETITION = u8"Repetition Filter";
2019-02-02 05:56:10 +08:00
const char* DEFAULT_CODEPAGE = u8"Default Codepage";
const char* FLUSH_DELAY = u8"Flush Delay";
const char* MAX_BUFFER_SIZE = u8"Max Buffer Size";
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)
2019-02-02 05:56:10 +08:00
Project homepage: https://github.com/Artikash/Textractor
2019-06-06 04:58:45 +08:00
Tutorial video: https://tinyurl.com/textractor-tutorial
2019-02-02 05:56:10 +08:00
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
2019-02-11 03:08:08 +08:00
I'm currently looking for a new job: email me if you know anyone hiring US software engineers
If you like this project, please tell everyone about it :))";
2019-06-04 07:39:22 +08:00
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)";
2019-02-02 05:56:10 +08:00
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";
2019-02-02 05:56:10 +08:00
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";
2019-06-02 14:09:17 +08:00
const char* STARTING_SEARCH = u8"Textractor: starting search";
2019-02-02 05:56:10 +08:00
const char* NOT_ENOUGH_TEXT = u8"Textractor: not enough text to search accurately";
2019-06-02 14:09:17 +08:00
const char* HOOK_SEARCH_INITIALIZED = u8"Textractor: search initialized with %zd hooks";
const char* HOOK_SEARCH_FINISHED = u8"Textractor: hook search finished, %d results found";
2019-02-02 05:56:10 +08:00
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 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* SELECT_LANGUAGE = u8"Select language";
2019-06-13 16:01:29 +08:00
const char* SELECT_LANGUAGE_MESSAGE = u8"What language should %1 translate to?";
2019-02-11 10:46:39 +08:00
const wchar_t* TOO_MANY_TRANS_REQUESTS = L"Too many translation requests: refuse to make more";
2019-02-02 05:56:10 +08:00
const wchar_t* TRANSLATION_ERROR = L"Error while translating";
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)";
2019-02-25 13:00:20 +08:00
const char* TOPMOST = u8"Always on Top";
2019-06-16 05:30:41 +08:00
const char* SHOW_ORIGINAL = u8"Original Text";
const char* SHOW_ORIGINAL_INFO = u8R"(Original text will not be shown
Only works if this extension is used directly after a translation extension)";
2019-02-25 13:00:20 +08:00
const char* SIZE_LOCK = u8"Size Locked";
2019-02-02 05:56:10 +08:00
const char* BG_COLOR = u8"Background Color";
const char* TEXT_COLOR = u8"Text Color";
2019-06-17 12:42:42 +08:00
const char* FONT = u8"Font";
const char* FONT_FAMILY = u8"Font Family";
2019-02-02 05:56:10 +08:00
const char* FONT_SIZE = u8"Font Size";
2019-06-17 12:42:42 +08:00
const char* FONT_WEIGHT = u8"Font Weight";
2019-02-18 07:52:09 +08:00
const char* LUA_INTRO = u8R"(--[[
ProcessSentence is called each time Textractor receives a sentence of text.
Param sentence: sentence received by Textractor (UTF-8).
Param sentenceInfo: table of miscellaneous info about the sentence.
If you return a string, the sentence will be turned into that string.
If you return nil, the sentence will be unmodified.
This extension uses several copies of the Lua interpreter for thread safety.
Modifications to global variables from ProcessSentence are not guaranteed to persist.
Properties in sentenceInfo:
"current select": 0 unless sentence is in the text thread currently selected by the user.
"process id": process id that the sentence is coming from. 0 for console and clipboard.
"text number": number of the current text thread. Counts up one by one as text threads are created. 0 for console, 1 for clipboard.
--]]
function ProcessSentence(sentence, sentenceInfo)
--Your code here...
end)";
const char* LOAD_LUA_SCRIPT = u8"Load Script";
2019-06-02 01:59:37 +08:00
const wchar_t* LUA_ERROR = L"Lua error: %s";
2019-02-02 05:56:10 +08:00
const char* REGEX_FILTER = u8"Regex Filter";
const char* INVALID_REGEX = u8"Invalid regex";
2019-06-02 01:59:37 +08:00
const char* CURRENT_FILTER = u8"Currently filtering: %1";
2019-02-02 05:56:10 +08:00
const wchar_t* REPLACER_INSTRUCTIONS = LR"(This file only does anything when the "Replacer" extension is used.
Replacement commands must be formatted like this:
|ORIG|original_text|BECOMES|replacement_text|END|
All text in this file outside of a replacement command is ignored.
Whitespace in original_text is ignored, but replacement_text can contain spaces, newlines, etc.
2019-02-20 15:19:30 +08:00
This file must be encoded in Unicode (UTF-16 little endian).)";
2019-02-02 05:56:10 +08:00
const char* THREAD_LINKER = u8"Thread Linker";
const char* LINK = u8"Link";
const char* THREAD_LINK_FROM = u8"Thread number to link from";
const char* THREAD_LINK_TO = u8"Thread number to link to";
2019-06-13 16:01:29 +08:00
const char* HEXADECIMAL = u8"Hexadecimal";
2019-02-02 05:56:10 +08:00
2019-06-13 16:01:29 +08:00
static auto _ = []
2019-02-02 05:56:10 +08:00
{
#ifdef TURKISH
ATTACH = u8"Oyuna bağla";
DETACH = u8"Oyundan kopar";
ADD_HOOK = u8"Kanca ekle";
SAVE_HOOKS = u8"Kancaları kaydet";
SETTINGS = u8"Ayarlar";
EXTENSIONS = u8"Uzantılar";
SELECT_PROCESS = u8"İşlem seçin";
2019-02-02 05:56:10 +08:00
ATTACH_INFO = u8"Bağlanmak istediğiniz işlemi görmüyorsanız yönetici olarak çalıştırmayı deneyin";
DEFAULT_CODEPAGE = u8"Varsayılan Kod Sayfası";
FLUSH_DELAY = u8"Temizleme Gecikmesi";
MAX_BUFFER_SIZE = u8"Maksimum Arabellek Boyu";
ABOUT = L"Textractor " ARCH L" v" VERSION LR"( (proje ana sayfası: https://github.com/Artikash/Textractor)
2019-02-02 05:56:10 +08:00
Benim tarafımdan yapıldı: Artikash (e-posta: akashmozumdar@gmail.com)
Textractor ile ilgili tüm sorunlarınız, istekleriniz ve sorularınız için lütfen benimle iletişime geçin
Benimle, proje ana sayfasından (issues kısmından) ya da e-posta aracılığıyla iletişime geçebilirsiniz
Kaynak kodu GKLv3 koruması altında proje ana sayfasında mevcut
Şu anda aramaktayım: Eğer ABDli yazılım mühendislerini işe alıyorsanız lütfen bana e-posta atın)";
UPDATE_AVAILABLE = L"Güncelleme mevcut: https://github.com/Artikash/Textractor/releases adresinden indirin";
ALREADY_INJECTED = L"Textractor: Zaten enjekte edili";
2019-04-22 22:02:59 +08:00
NEED_32_BIT = L"Textractor: Mimari uyumsuzluğu: Lütfen Textractorın 32 bitlik sürümünü deneyin";
2019-02-02 05:56:10 +08:00
INJECT_FAILED = L"Textractor: Enjekte edilemedi";
INVALID_CODE = L"Textractor: Geçersiz kod";
INVALID_CODEPAGE = L"Textractor: Metne dönüştürülemedi (geçersiz kod sayfası?)";
PIPE_CONNECTED = u8"Textractor: Boru bağlandı";
INSERTING_HOOK = u8"Textractor: Kanca ekleniyor: %s";
REMOVING_HOOK = u8"Textractor: Kanca çıkarılıyor:: %s";
HOOK_FAILED = u8"Textractor: Kanca eklenemedi";
TOO_MANY_HOOKS = u8"Textractor: Çok fazla kanca var: Eklenemiyor";
FUNC_MISSING = u8"Textractor: Fonksiyon mevcut değil";
MODULE_MISSING = u8"Textractor: Modül mevcut değil";
GARBAGE_MEMORY = u8"Textractor: Hafıza sürekli değişiyor, okumak boşa";
#endif // TURKISH
#ifdef SPANISH
ATTACH = u8"Adjuntar juego";
LAUNCH = u8"Iniciar juego";
DETACH = u8"Desconectar juego";
ADD_HOOK = u8"Añadir hook";
SAVE_HOOKS = u8"Guardar hook(s)";
SETTINGS = u8"Opciones";
EXTENSIONS = u8"Extensiones";
SELECT_PROCESS = u8"Seleccionar procreso";
ATTACH_INFO = u8R"(Si no ves el proceso que quieras adjuntar, ejecuta este programa como administrador
También puedes escribir la ID del proceso)";
SEARCH_GAME = u8"Seleccionar desde computadora";
PROCESSES = u8"Procesos (*.exe)";
SAVE_SETTINGS = u8"Guardar opciones";
EXTEN_WINDOW_INSTRUCTIONS = u8R"(Arrrastra y suelta la extension (.dll) aquí desde tu computadora para añadirlos
Arrastra y suelta la lista para reordenar
Presiona supr en una extension seleccionada para removerla)";
USE_JP_LOCALE = u8"¿Emular idioma japonés?";
DEFAULT_CODEPAGE = u8"Default Codepage";
FLUSH_DELAY = u8"Flush Delay";
MAX_BUFFER_SIZE = u8"Max Buffer Size";
CONSOLE = L"Consola";
CLIPBOARD = L"Portapapeles";
ABOUT = L"Textractor " ARCH L" v" VERSION LR"( hecho por mí: Artikash (correo: akashmozumdar@gmail.com)
2019-02-02 05:56:10 +08:00
Página del proyecto: https://github.com/Artikash/Textractor
2019-06-06 04:58:45 +08:00
Video tutorial: https://tinyurl.com/textractor-tutorial
2019-02-02 05:56:10 +08:00
No dudes en conectarme si tienes algún problema, petición de característica o preguntas relacionadas con Textractor
Puedes hacerlo en la página del proyecto (en el apartado de "Issues") o por correo. Usa el inglés para comunicarte.
Código fuente disponible bajo GPLv3 en la página del proyecto
Estoy buscando un nuevo trabajo: por favor envíame un correo si estás contratando ingenieros de software de EE.UU.)";
UPDATE_AVAILABLE = L"Actualización disponible: descárguela en https://github.com/Artikash/Textractor/releases";
ALREADY_INJECTED = L"Textractor: ya inyectado";
INJECT_FAILED = L"Textractor: no se puede inyectar";
LAUNCH_FAILED = L"Textractor: no se puede iniciar";
INVALID_CODE = L"Textractor: código inválido";
INVALID_CODEPAGE = L"Textractor: no se puede convertir texto (¿Codepage inválido?)";
PIPE_CONNECTED = u8"Textractor: pipe connected";
INSERTING_HOOK = u8"Textractor: insertando hook: %s";
REMOVING_HOOK = u8"Textractor: removiendo hook: %s";
HOOK_FAILED = u8"Textractor: no se puede insertar hook";
TOO_MANY_HOOKS = u8"Textractor: demasiados hooks: no se puede insertar";
NOT_ENOUGH_TEXT = u8"Textractor: no hay suficiente texto para buscar con precisión";
FUNC_MISSING = u8"Textractor: función no presente";
MODULE_MISSING = u8"Textractor: module not present";
GARBAGE_MEMORY = u8"Textractor: memory constantly changing, useless to read";
SEND_ERROR = u8"Textractor: Send ERROR (probablemente un H-code incorrecto)";
READ_ERROR = u8"Textractor: Reader ERROR (probablemente un R-code incorrecto)";
HIJACK_ERROR = u8"Textractor: Hijack ERROR";
COULD_NOT_FIND = u8"Textractor: no se puede encontrar texto";
SELECT_LANGUAGE = u8"Seleccionar lenguaje";
2019-06-13 16:01:29 +08:00
SELECT_LANGUAGE_MESSAGE = u8"¿A qué idioma debe traducir %1?";
2019-02-11 10:46:39 +08:00
TOO_MANY_TRANS_REQUESTS = L"Demasiadas peticiones de traducción: no se puede hacer más";
2019-02-02 05:56:10 +08:00
TRANSLATION_ERROR = L"Error al traducir";
EXTRA_WINDOW_INFO = u8R"(Clic derecho para configurar
Clic y arrastra los bordes de la ventana para moverla, o en la esquina inferior derecha para cambiar el tamaño)";
BG_COLOR = u8"Color de fondo";
TEXT_COLOR = u8"Color de texto";
FONT_SIZE = u8"Tamaño de letra";
TOPMOST = u8"Siempre visible";
REGEX_FILTER = u8"Filtro Regex";
INVALID_REGEX = u8"Regex inválido";
2019-06-02 01:59:37 +08:00
CURRENT_FILTER = u8"Actualmente filtrando: %1";
2019-02-02 05:56:10 +08:00
#endif // SPANISH
#ifdef SIMPLIFIED_CHINESE
ATTACH = u8"附加到游戏";
LAUNCH = u8"启动游戏";
DETACH = u8"从游戏分离";
ADD_HOOK = u8"添加钩子";
SAVE_HOOKS = u8"保存钩子";
SETTINGS = u8"设置";
EXTENSIONS = u8"扩展";
SELECT_PROCESS = u8"选择进程";
ATTACH_INFO = u8R"(如果没看见想要附加的进程,尝试使用管理员权限运行
ID)";
SEARCH_GAME = u8"从计算机中选择";
PROCESSES = u8"进程 (*.exe)";
SAVE_SETTINGS = u8"保存设置";
EXTEN_WINDOW_INSTRUCTIONS = u8R"(从计算机拖拽扩展 (.dll) 文件到这里来添加
(使)
使 delete )";
USE_JP_LOCALE = u8"模拟日本区域设置?";
DEFAULT_CODEPAGE = u8"默认代码页";
FLUSH_DELAY = u8"刷新延迟";
MAX_BUFFER_SIZE = u8"最大缓冲区长度";
CONSOLE = L"控制台";
CLIPBOARD = L"剪贴板";
ABOUT = L"Textractor " ARCH L" v" VERSION LR"( 作者: Artikash (email: akashmozumdar@gmail.com)
2019-02-02 05:56:10 +08:00
: https://github.com/Artikash/Textractor
2019-06-06 04:58:45 +08:00
: https://tinyurl.com/textractor-tutorial
2019-02-02 05:56:10 +08:00
Textractor
()
GPLv3
: )";
UPDATE_AVAILABLE = L"有可用的更新: 请从 https://github.com/Artikash/Textractor/releases 下载";
ALREADY_INJECTED = L"Textractor: 已经注入";
NEED_32_BIT = L"Textractor: 架构不匹配: 请尝试使用 Textractor x86";
2019-02-02 05:56:10 +08:00
INJECT_FAILED = L"Textractor: 无法注入";
LAUNCH_FAILED = L"Textractor: 无法启动";
INVALID_CODE = L"Textractor: 无效代码";
INVALID_CODEPAGE = L"Textractor: 无法转换文本 (无效的代码页?)";
PIPE_CONNECTED = u8"Textractor: 管道已连接";
INSERTING_HOOK = u8"Textractor: 注入钩子: %s";
REMOVING_HOOK = u8"Textractor: 移除钩子: %s";
HOOK_FAILED = u8"Textractor: 钩子注入失败";
TOO_MANY_HOOKS = u8"Textractor: 钩子太多: 无法注入";
NOT_ENOUGH_TEXT = u8"Textractor: 没有足够的文本来精确搜索";
FUNC_MISSING = u8"Textractor: 函数不存在";
MODULE_MISSING = u8"Textractor: 模块不存在";
GARBAGE_MEMORY = u8"Textractor: 内存一直在变,读了也没用";
SEND_ERROR = u8"Textractor: Sender 错误 (H码可能不正确)";
READ_ERROR = u8"Textractor: Reader 错误 (R码可能不正确)";
HIJACK_ERROR = u8"Textractor: Hijack 错误";
COULD_NOT_FIND = u8"Textractor: 无法找到文本";
SELECT_LANGUAGE = u8"选择语言";
2019-06-13 16:01:29 +08:00
SELECT_LANGUAGE_MESSAGE = u8"想要使用 %1 翻译到哪种语言?";
2019-02-11 10:46:39 +08:00
TOO_MANY_TRANS_REQUESTS = L"太多翻译请求: 拒绝生成更多";
2019-02-02 05:56:10 +08:00
TRANSLATION_ERROR = L"翻译时出错";
EXTRA_WINDOW_INFO = u8R"(右键修改设置
)";
BG_COLOR = u8"背景颜色";
TEXT_COLOR = u8"文本颜色";
FONT_SIZE = u8"字体大小";
TOPMOST = u8"总是位于最上层";
REGEX_FILTER = u8"正则表达式过滤器";
INVALID_REGEX = u8"无效的正则表达式";
2019-06-02 01:59:37 +08:00
CURRENT_FILTER = u8"当前过滤中: %1";
2019-02-02 05:56:10 +08:00
#endif // SIMPLIFIED_CHINESE
2019-03-25 18:29:47 +08:00
#ifdef RUSSIAN
ATTACH = u8"Присоединить к игре";
LAUNCH = u8"Запустить игру";
DETACH = u8"Отсоединить от игры";
ADD_HOOK = u8"Добавить хук";
SAVE_HOOKS = u8"Сохранить хук(и)";
SETTINGS = u8"Настройки";
EXTENSIONS = u8"Расширения";
SELECT_PROCESS = u8"Выберете процесс";
ATTACH_INFO = u8R"(Если вы не видите процесс, к которому хотите присоединить, попробуйте запуск с правами администратора
Вы также можете ввести id процесса)";
SEARCH_GAME = u8"Найти в проводнике";
PROCESSES = u8"Процессы (*.exe)";
SAVE_SETTINGS = u8"Сохранить настройки";
EXTEN_WINDOW_INSTRUCTIONS = u8R"(Перетащите сюда (.dll) файлы расширений из проводника для их добавления
(Не работает при запуске от администратора)
Перетаскивайте по списку для изменения порядка
Нажмите клавишу удаления, чтобы удалить выбранное расширение)";
USE_JP_LOCALE = u8"Симулировать японскую локаль";
FILTER_REPETITION = u8"Фильтр повторений";
DEFAULT_CODEPAGE = u8"Кодировка по умолчанию";
FLUSH_DELAY = u8"Задержка сброса";
MAX_BUFFER_SIZE = u8"Максимальный размер буфера";
CONSOLE = L"Консоль";
CLIPBOARD = L"Буфер обмена";
ABOUT = L"Textractor " ARCH L" в." VERSION LR"( автор: Artikash (email: akashmozumdar@gmail.com)
2019-03-25 18:29:47 +08:00
Домашняя страница: https://github.com/Artikash/Textractor
2019-06-06 04:58:45 +08:00
Обучающее видео: https://tinyurl.com/textractor-tutorial
2019-03-25 18:29:47 +08:00
Сообщайте о любых проблемах, желаемых для добавления функциях, или задавайте вопросы, касающиеся Textractor
Сделать это вы можете домашней странице (секция issues) или через электронную почту
Исходный код доступен по лицензии GPLv3 на домашней странице проекта
I'm currently looking for a new job: email me if you know anyone hiring US software engineers
Если эта программа вам понравилась, расскажите всем о ней :))";
CL_OPTIONS = LR"(usage: Textractor [-p{process id|"process name"}]...)";
UPDATE_AVAILABLE = L"Доступно обновление: загрузите его на https://github.com/Artikash/Textractor/releases";
ALREADY_INJECTED = L"Textractor: уже присоединен";
NEED_32_BIT = L"Textractor: несоответствие архитектуры: попробуйте Textractor x86 вместо этого";
2019-03-25 18:29:47 +08:00
INJECT_FAILED = L"Textractor: невозможно присоединиться";
LAUNCH_FAILED = L"Textractor: невозможно запустить";
INVALID_CODE = L"Textractor: неверный код";
2019-06-13 13:50:06 +08:00
INVALID_CODEPAGE = L"Textractor: невозможно конвертировать текст (неверная кодировка?)";
PIPE_CONNECTED = u8"Textractor: канал присоединен";
2019-03-25 18:29:47 +08:00
INSERTING_HOOK = u8"Textractor: вставка хука: %s";
REMOVING_HOOK = u8"Textractor: удаление хука: %s";
HOOK_FAILED = u8"Textractor: не удалось вставить хук";
TOO_MANY_HOOKS = u8"Textractor: слишком много хуков: невозможно вставить";
NOT_ENOUGH_TEXT = u8"Textractor: не достаточно текста для точного поиска";
FUNC_MISSING = u8"Textractor: функция отсутствует";
MODULE_MISSING = u8"Textractor: модуль отсутствует";
GARBAGE_MEMORY = u8"Textractor: память постоянно изменяется, бесполезно читать";
SEND_ERROR = u8"Textractor: Send ERROR (вероятно неверный H-code)";
READ_ERROR = u8"Textractor: Reader ERROR (вероятно неверный R-code)";
HIJACK_ERROR = u8"Textractor: Hijack ERROR";
COULD_NOT_FIND = u8"Textractor: невозможно найти текст";
SELECT_LANGUAGE = u8"Выберете язык";
2019-06-13 16:01:29 +08:00
SELECT_LANGUAGE_MESSAGE = u8"На какой язык переводить в %1?";
2019-03-25 18:29:47 +08:00
TOO_MANY_TRANS_REQUESTS = L"Слишком много запросов для перевода: отклонено";
TRANSLATION_ERROR = L"Ошибка при переводе";
EXTRA_WINDOW_INFO = u8R"(Правый клик для изменения настроек
2019-06-13 13:50:06 +08:00
Нажмите и перетащите за края - для перемещения, или за правый-нижний угол - для изменения размера)";
2019-03-25 18:29:47 +08:00
TOPMOST = u8"Поверх всех окон";
2019-06-16 05:30:41 +08:00
SHOW_ORIGINAL = u8"Исходный текст";
SHOW_ORIGINAL_INFO = u8R"(Исходный текст будет скрыт
Работает только если это расширение используется после расширения перевода)";
2019-03-25 18:29:47 +08:00
SIZE_LOCK = u8"Фиксированный размер";
BG_COLOR = u8"Цвет заднего фона";
TEXT_COLOR = u8"Цвет текста";
FONT_SIZE = u8"Размер шрифта";
LUA_INTRO = u8R"(--[[
ProcessSentence вызывается каждый раз, когда Textractor получает предложение с текстом.
Param sentence: предложение полученое в Textractor (UTF-8).
Param sentenceInfo: таблица различной информации о предложении.
При возвращении строки предложение будет изменено на эту строку.
При возвращении нуля, предложение останетсябез изменения.
Это расширение использует несколько копий интерпретатора Lua для безопасности нити.
Модификации глобальных переменных из ProcessSentence не обязательно сохраняется.
Параметры в sentenceInfo:
"current select": равно 0, если предложение не находится в текстовой нити, выбранной в данный момент пользователем.
"process id": id процесса, из которого предложение поступило. Равно 0, когда это консоль или буфер обмена.
"text number": номер текущей текстовой нити. Растет один за другим по мере создания текстовых нитей. 0 для консоли, 1 для буфера обмена.
--]]
function ProcessSentence(sentence, sentenceInfo)
--Ваш код здесь...
end)";
LOAD_LUA_SCRIPT = u8"Загрузить скрипт";
2019-06-02 01:59:37 +08:00
LUA_ERROR = L"Ошибка Lua: %s";
2019-03-25 18:29:47 +08:00
REGEX_FILTER = u8"Фильтр Regex";
INVALID_REGEX = u8"Неверный regex";
2019-06-02 01:59:37 +08:00
CURRENT_FILTER = u8"Сейчас фильтруется: %1";
2019-03-25 18:29:47 +08:00
REPLACER_INSTRUCTIONS = LR"(Этот файл делает что-то только когда используется расширение "Replacer".
Команды для замены должны выглядеть так:
|ORIG|текст_оригинала|BECOMES|текстамены|END|
Весь текст в этом файле вне команд заменителей будет проигнорирован.
Пробелы в текст_оригинала игнорируются, но текстамены может содержать пробелы, новые строки и пр.
Этот файл должен быть в кодировке Unicode (UTF-16 little endian).)";
THREAD_LINKER = u8"Связыватель нитей";
LINK = u8"Связь";
THREAD_LINK_FROM = u8"Номер нити, от которой связывать";
THREAD_LINK_TO = u8"Номер нити, к которой привязывать";
#endif // RUSSIAN
2019-05-31 17:40:13 +08:00
#ifdef INDONESIAN
ATTACH = u8"Tempelkan kedalam game";
LAUNCH = u8"Mulai game";
DETACH = u8"Lepaskan dari game";
ADD_HOOK = u8"Tambahkan hook";
SAVE_HOOKS = u8"Simpan hook";
SETTINGS = u8"Pengaturan";
EXTENSIONS = u8"Ekstensi";
SELECT_PROCESS = u8"Pilih Proses";
ATTACH_INFO = u8R"(Jika kamu tidak dapat melihat proses yang akan ditempelkan, coba menjalankan dengan mode administrator
2019-05-31 21:39:15 +08:00
Kamu juga dapat mengetik process id game yang akan ditempel)";
2019-05-31 17:40:13 +08:00
SEARCH_GAME = u8"Pilih dari komputer";
PROCESSES = u8"Proses (*.exe)";
SAVE_SETTINGS = u8"Simpan pengaturan";
EXTEN_WINDOW_INSTRUCTIONS = u8R"(Drag and drop file ekstensi (.dll) kedalam sini dari komputer kamu untuk menambah ekstensi
(Tidak bekerja dalam mode administrator)
Drag and drop ekstensi di dalam list untuk mengatur list
Tekan delete pada ekstensi yang dipilih untuk menghapus ekstensi)";
2019-05-31 17:40:13 +08:00
USE_JP_LOCALE = u8"Gunakan locale jepang?";
DEFAULT_CODEPAGE = u8"Codepage standar";
FLUSH_DELAY = u8"Flush Delay";
MAX_BUFFER_SIZE = u8"Max Buffer Size";
CONSOLE = L"Konsol";
CLIPBOARD = L"Papan clipboard";
ABOUT = L"Textractor " ARCH L" v" VERSION LR"( dibuat oleh saya: Artikash (email: akashmozumdar@gmail.com)
Halaman project: https://github.com/Artikash/Textractor
2019-06-06 04:58:45 +08:00
Video tutorial : https://tinyurl.com/textractor-tutorial
2019-05-31 17:40:13 +08:00
Tolong hubungi saya jika kamu memiliki masalah terkait masalah, permintaan fitur, atau pertanyaan terkait Textractor
Kamu dapat melakukannya lewat halaman utama project (bagian issues) atau lewat email
Source code tersedia dibawah lisensi GPLv3 di halaman utama project
Saya sedang mencari pekerjaan baru : email saya jika kamu mengenal orang yang dapat memperkerjakan software engineer Amerika
Jika kamu menyukai project ini, tolong sebarluaskan project ini :))";
UPDATE_AVAILABLE = L"Pembaharuan tersedia: pembaharuan dapat di unduh di https://github.com/Artikash/Textractor/releases";
ALREADY_INJECTED = L"Textractor: sudah ditempelkan";
INJECT_FAILED = L"Textractor: menempelkan gagal";
LAUNCH_FAILED = L"Textractor: game tidak dapat dijalankan";
INVALID_CODE = L"Textractor: kode tidak sesuai";
INVALID_CODEPAGE = L"Textractor: tidak dapat mengkonversi teks (Codepage tidak sesuai?)";
PIPE_CONNECTED = u8"Textractor: pipe tersambung";
INSERTING_HOOK = u8"Textractor: memasukkan hook: %s";
REMOVING_HOOK = u8"Textractor: menghapus hook: %s";
HOOK_FAILED = u8"Textractor: gagal memasukkan hook";
TOO_MANY_HOOKS = u8"Textractor: terlalu banyak hook: tidak dapat memasukkan hook";
NOT_ENOUGH_TEXT = u8"Textractor: tidak cukup teks untuk melakukan pencarian secara akurat";
FUNC_MISSING = u8"Textractor: tidak ada fungsi";
MODULE_MISSING = u8"Textractor: tidak ada modul";
GARBAGE_MEMORY = u8"Textractor: memory terus berganti, tidak dapat dibaca";
SEND_ERROR = u8"Textractor: Send ERROR (kemungkinan H-Code salah)";
READ_ERROR = u8"Textractor: Reader ERROR (Kemungkinan R-Code salah)";
HIJACK_ERROR = u8"Textractor: Hijack ERROR";
COULD_NOT_FIND = u8"Textractor: tidak dapat menemukan teks";
SELECT_LANGUAGE = u8"Pilih bahasa";
2019-06-13 16:01:29 +08:00
SELECT_LANGUAGE_MESSAGE = u8"Bahasa apakah yang %1 harus terjemahkan?";
2019-05-31 17:40:13 +08:00
TOO_MANY_TRANS_REQUESTS = L"Terlalu banyak permintaan terjemahan: menolak untuk menerjemahkan";
TRANSLATION_ERROR = L"Terjadi kesalahan ketika menerjemahkan";
EXTRA_WINDOW_INFO = u8R"(Klik kanan untuk merubah pengaturan
Klik dan tarik pinggiran jendela untuk memindahkan, atau sudut kanan bawah untuk mengatur ukuran jendela)";
BG_COLOR = u8"Warna latar";
TEXT_COLOR = u8"Warna teks";
FONT_SIZE = u8"Ukuran teks";
TOPMOST = u8"Selalu berada di atas";
REGEX_FILTER = u8"Filter regex";
INVALID_REGEX = u8"Regex tidak sesuai";
CURRENT_FILTER = u8"Regex yang digunakan sekarang: %1";
2019-05-31 17:40:13 +08:00
#endif // INDONESIAN
2019-02-02 05:56:10 +08:00
return 0;
}();