From 822c2ae233728cc5000bad397b39193dbd55b672 Mon Sep 17 00:00:00 2001 From: Akash Mozumdar Date: Thu, 3 Oct 2019 15:27:41 -0400 Subject: [PATCH] add korean translation --- README_KR.md | 77 ++++++++++++++++++++++++++++++++ text.cpp | 122 +++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 177 insertions(+), 22 deletions(-) create mode 100644 README_KR.md diff --git a/README_KR.md b/README_KR.md new file mode 100644 index 0000000..e47915b --- /dev/null +++ b/README_KR.md @@ -0,0 +1,77 @@ +# Textractor + +![How it looks](screenshot.png) + +[Español](README_ES.md) ● [简体中文](README_SC.md) ● [日本語](README_JP.md) ● [Русский](README_RU.md) ● [Bahasa](README_ID.md) ● [Português](README_PT.md) ● [ไทย](README_TH.md) + +**Textractor** (a.k.a. NextHooker)는 Windows/Wine에서 작동하는 [ITHVNR](http://www.hongfire.com/forum/showthread.php/438331-ITHVNR-ITH-with-the-VNR-engine)을 기반으로 한 오픈소스 x86/x64 비디오게임 텍스트 후커 입니다.
+빠른 사용법의 이해를 위해 [tutorial video](https://tinyurl.com/textractor-tutorial) 를 참고하세요. + +[![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=akashmozumdar%40gmail.com&item_name=Textractor%20development¤cy_code=USD) + +## 다운로드 + +[여기](https://github.com/Artikash/Textractor/releases)에서 Textractor 최신버전을 받으실 수 있습니다.
+최신버전의 ITHVNR은 [여기](https://drive.google.com/open?id=13aHF4uIXWn-3YML_k2YCDWhtGgn5-tnO)서 받을 수 있습니다.
+Textractor 실행오류를 겪는다면 vcredist를 실행해 보시기 바랍니다. + +## 특징 + +- 높은 확장성과 커스터마이즈 +- 많은 게임엔진의 자동 후킹이 가능 (몇몇의 VNR로 후킹 불가능한 경우도 포함) +- /H "hook" 코드를 통한 후킹 (많은 AGTH 코드가 지원됨) +- /R "read" 코드를 통해 직접적으로 텍스트 추출이 가능 + +## 지원 + +버그나, 후킹에 문제가 있는 게임이나, 기능요청 혹은 제안들을 알려주시기 바랍니다.
+특정 게임의 문제해결을 위하여 해당게임을 무료로 받을 수 있는 링크나 [Steam](https://steamcommunity.com/profiles/76561198097566313/)을 통한 제공을 받고 있습니다. + +## 확장기능 + +어떻게 확장기능을 만드는지 [Example Extension project](https://github.com/Artikash/ExampleExtension) 을 확인해 보시기 바랍니다.
+확장기능 폴더를 확인해 확장기능들이 어떤 역할들을 하는지 알아보세요. + +## 기여 + +모든 기여자들에게 감사하고 있습니다! 코드베이스에 궁금한 점이 있다면 akashmozumdar@gmail.com 에 이메일 해 주시기 바랍니다. + +## 컴파일링 + +*Textractor*를 컴파일링 하기 전에, Qt version 5.11과 CMake를 포함한 Visual Studio가 있어야 합니다.
+그 이후로는, 단순히 Visual Studio를 통해 폴더를 열고 빌드하는 것으로 실행이 가능합니다. + +## 프로젝트 아키텍쳐 + +The host (see GUI/host folder) injects texthook.dll (created from the texthook folder) into the target process and connects to it via 2 pipe files.
+Host writes to hostPipe, texthook writes to hookPipe.
+texthook waits for the pipe to be connected, then injects a few instructions into any text outputting functions (e.g. TextOut, GetGlyphOutline) that cause their input to be sent through the pipe.
+Additional information about hooks is exchanged via shared memory.
+The text that the host receives through the pipe is then processed a little before being dispatched back to the GUI.
+Finally, the GUI dispatches the text to extensions before displaying it. + +## 개발자들 + +이하의 리스트에서 링크변경이 필요하다면 연락주시기 바랍니다. +- Textractor mainly made by [Me](https://github.com/Artikash) with the help of + - [DoumanAsh](https://github.com/DoumanAsh) + - [Niakr1s](https://github.com/Niakr1s) + - [tinyAdapter](https://github.com/tinyAdapter) +- Spanish translation by [scese250](https://github.com/scese250) +- Turkish translation by niisokusu +- Simplified Chinese translation by [tinyAdapter](https://github.com/tinyAdapter) +- Russian translation by [TokcDK](https://github.com/TokcDK) +- Indonesian translation by [Hawxone](https://github.com/Hawxone) +- Portuguese translation by [TsumiHokiro](https://github.com/TsumiHokiro) +- Thai translation by [azmadoppler](https://github.com/azmadoppler) +- ITHVNR updated by [mireado](https://github.com/mireado), [Eguni](https://github.com/Eguni), and [IJEMIN](https://github.com/IJEMIN) +- ITHVNR originally made by [Stomp](http://www.hongfire.com/forum/member/325894-stomp) +- VNR engine made by [jichi](https://archive.is/prJwr) +- ITH updated by [Andys](https://github.com/AndyScull) +- ITH originally made by [kaosu](http://www.hongfire.com/forum/member/562651-kaosu) +- Locale Emulator library made by [xupefei](https://github.com/xupefei) +- MinHook library made by [TsudaKageyu](https://github.com/TsudaKageyu) + +## Special Thanks + +- Everybody adding issues! diff --git a/text.cpp b/text.cpp index 31c4d22..341732c 100644 --- a/text.cpp +++ b/text.cpp @@ -3,6 +3,7 @@ #else #define ARCH "x86" #endif + const char* ATTACH = u8"Attach to game"; const char* LAUNCH = u8"Launch game"; const char* DETACH = u8"Detach from game"; @@ -424,8 +425,8 @@ I'm currently looking for a new job: email me if you know anyone hiring US softw EXTRA_WINDOW_INFO = u8R"(Правый клик для изменения настроек Нажмите и перетащите за края - для перемещения, или за правый-нижний угол - для изменения размера)"; TOPMOST = u8"Поверх всех окон"; - SHOW_ORIGINAL = u8"Исходный текст"; - SHOW_ORIGINAL_INFO = u8R"(Исходный текст будет скрыт + SHOW_ORIGINAL = u8"Исходный текст"; + SHOW_ORIGINAL_INFO = u8R"(Исходный текст будет скрыт Работает только если это расширение используется после расширения перевода)"; SIZE_LOCK = u8"Фиксированный размер"; BG_COLOR = u8"Цвет заднего фона"; @@ -572,8 +573,8 @@ Estou a procura de um novo trabalho: por favor enviê-me uma mensagem de e-mail Se você gostou desse projeto, divulgue a todos :))"; UPDATE_AVAILABLE = L"Atualização disponível: baixe em https://github.com/Artikash/Textractor/releases"; ALREADY_INJECTED = L"Textractor: já está injetado"; - NEED_32_BIT = L"Textractor: arquitetura errada: apenas o Textractor x86 pode injetar neste processo"; - NEED_64_BIT = L"Textractor: arquitetura errada: apenas o Textractor x64 pode injetar neste processo"; + NEED_32_BIT = L"Textractor: arquitetura errada: apenas o Textractor x86 pode injetar neste processo"; + NEED_64_BIT = L"Textractor: arquitetura errada: apenas o Textractor x64 pode injetar neste processo"; INJECT_FAILED = L"Textractor: não pode injetar"; LAUNCH_FAILED = L"Textractor: não pode iniciar"; INVALID_CODE = L"Textractor: código inválido"; @@ -596,29 +597,29 @@ Se você gostou desse projeto, divulgue a todos :))"; SELECT_LANGUAGE_MESSAGE = u8"Qual lingua deve o/a %1 traduzir para?"; TOO_MANY_TRANS_REQUESTS = L"Foram feitos pedidos de tradução demais: recusa na feitura de mais pedidos"; TRANSLATION_ERROR = L"Erro enquanto traduzindo"; - EXTRA_WINDOW_INFO = u8R"(Clique com o botão direito para mudar as opções + EXTRA_WINDOW_INFO = u8R"(Clique com o botão direito para mudar as opções Clique e arraste nas beiradas da janela para mover, ou no canto inferior direito para redimessionar)"; TOPMOST = u8"Sempre em cima"; - SHOW_ORIGINAL = u8"Texto original"; - SHOW_ORIGINAL_INFO = u8R"(Texto original não será mostrado + SHOW_ORIGINAL = u8"Texto original"; + SHOW_ORIGINAL_INFO = u8R"(Texto original não será mostrado Apenas funciona se essa extensão for usada diretamente após uma extensão de tradução)"; - SIZE_LOCK = u8"Travar o Tamanho"; - BG_COLOR = u8"Cor de fundo"; - TEXT_COLOR = u8"Cor do Texto"; - FONT = u8"Fonte"; - REGEX_FILTER = u8"Fíltro regex"; - INVALID_REGEX = u8"Regex inválido"; - CURRENT_FILTER = u8"Atualmente filtrando: %1"; - REPLACER_INSTRUCTIONS = LR"(Este arquivo apenas faz algo quando a extensão "Replacer" está sendo utilizada. + SIZE_LOCK = u8"Travar o Tamanho"; + BG_COLOR = u8"Cor de fundo"; + TEXT_COLOR = u8"Cor do Texto"; + FONT = u8"Fonte"; + REGEX_FILTER = u8"Fíltro regex"; + INVALID_REGEX = u8"Regex inválido"; + CURRENT_FILTER = u8"Atualmente filtrando: %1"; + REPLACER_INSTRUCTIONS = LR"(Este arquivo apenas faz algo quando a extensão "Replacer" está sendo utilizada. Comandos de substituição devem ser formatos da seguinte maneira: |ORIG|texto_original|BECOMES|texto_substituido|END| Todo texto fora de um comando de substituição é ignorado. Espaços contidos no texto original serão ignorados, mas o texto substituído pode conter espaços, novas línhas, etc. Esse arquívo deve ser codifícado em (UTF-16 little endian).)"; - THREAD_LINKER = u8"Ligador de Threads"; - LINK = u8"Ligar"; - THREAD_LINK_FROM = u8"Número do thread para ligar de"; - THREAD_LINK_TO = u8"Número do thread para ligar para"; + THREAD_LINKER = u8"Ligador de Threads"; + LINK = u8"Ligar"; + THREAD_LINK_FROM = u8"Número do thread para ligar de"; + THREAD_LINK_TO = u8"Número do thread para ligar para"; #endif // PORTUGUESE #ifdef THAI @@ -647,10 +648,10 @@ Esse arquívo deve ser codifícado em (UTF-16 little endian).)"; ถ้าหากพบเจอปัญหาสามารถติดต่อมาได้ รวมไปถึงการแนะนำฟังก์ชั้นที่อยากให้มี หรือ คำถามเกี่ยวกับโปรแกรม Textractor สามารถติดต่อ ผ่านหน้าเว็บไซต์หลักผ่านทางหน้า Issue หรือทางอีเมลล์ Source code สามารถหาได้จากส่วนของ GPLv3 ที่หน้าหลักของเว็บไซต์)"; - UPDATE_AVAILABLE = L"มีอัพเดทใหม่ : สามารถดาวน์โหลดได้จาก https://github.com/Artikash/Textractor/releases"; + UPDATE_AVAILABLE = L"มีอัพเดทใหม่ : สามารถดาวน์โหลดได้จาก https://github.com/Artikash/Textractor/releases"; ALREADY_INJECTED = L"Textractor: ได้ถูกเชื่อมแล้ว"; - NEED_32_BIT = L"ระบบปฏิบัติการ Textractor ไม่ถูกต้อง : เฉพาะ Textractor x86 เท่านั่นสามารถเชื่อม Process นี้ได้"; - NEED_64_BIT = L"ระบบปฏิบัติการ Textractor ไม่ถูกต้อง : เฉพาะ Textractor x64 เท่านั่นสามารถเชื่อม Process นี้ได้"; + NEED_32_BIT = L"ระบบปฏิบัติการ Textractor ไม่ถูกต้อง : เฉพาะ Textractor x86 เท่านั่นสามารถเชื่อม Process นี้ได้"; + NEED_64_BIT = L"ระบบปฏิบัติการ Textractor ไม่ถูกต้อง : เฉพาะ Textractor x64 เท่านั่นสามารถเชื่อม Process นี้ได้"; INJECT_FAILED = L"Textractor: ไม่สามารถเชื่อมได้"; LAUNCH_FAILED = L"Textractor: ไม่สามารถเริ่มได้"; INVALID_CODE = L"Textractor: รหัสไม่ถูกต้อง"; @@ -682,5 +683,82 @@ Source code สามารถหาได้จากส่วนของ GPLv FONT = u8"ฟ้อนต์"; #endif // THAI +#ifdef KOREAN + ATTACH = u8"게임에 부착"; + LAUNCH = u8"게임 실행"; + DETACH = u8"게임에서 탈착"; + FORGET = u8"게임 저장정보 삭제"; + ADD_HOOK = u8"후킹주소 추가"; + REMOVE_HOOKS = u8"후킹주소 삭제"; + SAVE_HOOKS = u8"후킹주소 저장"; + SEARCH_FOR_HOOKS = u8"후킹주소 찾기"; + SETTINGS = u8"설정"; + EXTENSIONS = u8"확장기능"; + SELECT_PROCESS = u8"프로세스 선택"; + ATTACH_INFO = u8R"(부착하려는 게임이 보이지 않는다면, 관리자 권한으로 실행해보세요. 프로세스 id를 입력 할 수도 있습니다.)"; + SELECT_PROCESS_INFO = u8"직접 프로세스파일 이름을 타이핑한다면, 정확한 경로를 입력하세요"; + FROM_COMPUTER = u8"컴퓨터로부터 선택"; + PROCESSES = u8"프로세스 (*.exe)"; + SAVE_SETTINGS = u8"설정 저장"; + EXTEN_WINDOW_INSTRUCTIONS = u8R"(확장기능을 추가하려면 리스트에서 오른쪽 클릭하거나 + 폴더에서 드래그하세요. +확장기능 순서를 변경하려면 리스트에서 드래그합니다. +(확장기능은 위부터 순서대로 작동합니다.) +확장기능을 삭제하려면 delete 를 누르세요.)"; + ADD_EXTENSION = u8"확장기능 추가"; + INVALID_EXTENSION = u8"%1 은 유효하지 않은 확장기능입니다."; + CONFIRM_EXTENSION_OVERWRITE = u8"다른버전의 동일한 확장기능이 존재합니다. 덮어씌우시겠습니까?"; + EXTENSION_WRITE_ERROR = u8"확장기능을 저장하는데 실패하였습니다."; + USE_JP_LOCALE = u8"일본어 로케일로 에뮬레이트합니까?"; + HOOK_SEARCH_UNSTABLE_WARNING = u8"후킹주소 찾기는 불안정합니다! 게임의 강제종료에 대비하세요!"; + SEARCH_CJK = u8"한국어/일본어/중국어 찾기"; + CODEPAGE = u8"코드페이지"; + SEARCH_FOR_TEXT = u8"특정 텍스트 찾기"; + START_HOOK_SEARCH = u8"주소찾기 시작"; + SAVE_SEARCH_RESULTS = u8"찾기결과 저장"; + DOUBLE_CLICK_TO_REMOVE_HOOK = u8"더블클릭으로 주소 제거"; + FILTER_REPETITION = u8"반복문 필터"; + AUTO_ATTACH = u8"자동 부착"; + ATTACH_SAVED_ONLY = u8"자동 부착 (저장된 게임만)"; + SHOW_SYSTEM_PROCESSES = u8"시스템 프로세스 보기"; + DEFAULT_CODEPAGE = u8"기본 코드페이지"; + FLUSH_DELAY = u8"플러시 딜레이"; + MAX_BUFFER_SIZE = u8"최대 버퍼 크기"; + MAX_HISTORY_SIZE = u8"최대 히스토리 크기"; + CONSOLE = L"콘솔"; + CLIPBOARD = L"클립보드"; + UPDATE_AVAILABLE = L"업데이트가 있습니다:https://github.com/Artikash/Textractor/releases"; + ALREADY_INJECTED = L"Textractor: 이미 부착되어 있습니다"; + NEED_32_BIT = L"Textractor: 아키텍쳐 불일치: Textractor x86을 사용해야 합니다"; + NEED_64_BIT = L"Textractor: 아키텍쳐 불일치: Textractor x64을 사용해야 합니다"; + INJECT_FAILED = L"Textractor: 부착할 수 없습니다"; + LAUNCH_FAILED = L"Textractor: 실행할 수 없습니다"; + INVALID_CODE = L"Textractor: 유효하지 않은 코드"; + INVALID_CODEPAGE = L"Textractor: 텍스트를 변환할 수 없습니다 (유효하지 않은 코드페이지?)"; + SELECT_LANGUAGE = u8"언어 선택"; + SELECT_LANGUAGE_MESSAGE = u8"어떤 언어로 %1 번역하시겠습니까?"; + TOO_MANY_TRANS_REQUESTS = L"너무 많은 번역요청: 요청 거부됨"; + TRANSLATION_ERROR = L"번역 에러"; + EXTRA_WINDOW_INFO = u8R"(오른쪽 클릭으로 설정변경 +드래그로 창 이동이 가능하고, 오른쪽 모서리에서 크기조절이 가능)"; + TOPMOST = u8"항상 위"; + SHOW_ORIGINAL = u8"원문"; + SHOW_ORIGINAL_INFO = u8R"(원문이 출력되지 않음 +이 확장기능이 번역확장기능 이후에 사용될때만 동작함)"; + SIZE_LOCK = u8"사이즈 고정"; + BG_COLOR = u8"배경색"; + TEXT_COLOR = u8"글씨색"; + FONT = u8"폰트"; + REGEX_FILTER = u8"정규식 필터"; + INVALID_REGEX = u8"유효하지 않은 정규식"; + CURRENT_FILTER = u8"현재 필터중: %1"; + REPLACER_INSTRUCTIONS = LR"(이 파일은 "Replacer" 확장기능이 작동중일때만 사용됨. +Replacement commands는 아래 형식을 따라야 함: +|ORIG|original_text|BECOMES|replacement_text|END| +이 파일에서 replacement command 바깥의 텍스트는 무시됨. +original_text의 빈공간은 무시되지만, replacement_text는 공백과 엔터등을 포함 가능. +이 파일은 유니코드로 저장되어야만 함 (UTF-16 little endian).)"; +#endif // KOREAN + return 0; }();