UpdateEra 완전정복 (1) - UpdateEra 소개와 기능설명


=== 들어가며 ===


텍겜채널 글들을 멍하니 뒤적거리다 보니 UpdateEra 라는 갓프로그램 사용법이 실전되어 개발자들 및 번역가들에게

그냥 단어나 바꿔주는 간단 툴로 인식되는 것이 안타까워 설명서나 끄적여볼까 해서 쓰게 되었습니다.


사용방법을 아시는 분들도 계시겠지만 간간이 사용법을 묻는 분들도 꽤 계시던데 이 설명서가 도움이 되었으면 합니다.



=== UpdateEra 란 무엇인가? ===


옛날에 에라 번역에는 Search & Replace 라는 툴이 사용되고 있었는데 기능상 답답함을 느낀 모 참치넷 유저가 만든

*범용* 텍스트 치환 및 버전 업데이트용 툴입니다. 원래는 에라 번역을 위해 만든 툴이라 UpdateEra 라는 이름이 붙었지만

이 툴 안에는 에라 문법에 대해 처리하는 부분은 없습니다. 실제로 저도 에라 말고도 여러 곳에 사용하고 있고요.



=== UpdateEra 의 기능 ===


UpdateEra 의 기능은 크게 두 가지가 있습니다.


1. 텍스트 검색 - 치환 기능


어떤 텍스트에서 문자열을 검색해서 치환해 주는 기능입니다. 텍스트 에디터에서 바꾸기 기능을 여러 파일에 해 주는

기능이라고 이해하면 됩니다. 많은 분들이 UpdateEra의 기능이 이것이라고 알고 계실 겁니다.



2. 버전 업데이트 기능



구버전 원본과 번역본을 비교해서 신버전 원본의 해당 부분을 바꿔주는 기능입니다. 특히 자주 개발되고 새로운 버전이

나오는 경우 유용합니다. AkumaMaid 라던가 DoL 이라던가... 저는 예전에 업데이트 자주되는 RPG만들기 게임 번역에도

적용하곤 했습니다.



=== 사용방법 ===


1. https://arca.live/b/textgame/9276833 에서 UpdateEra 를 다운받습니다.

2. 적용하려는 작업에 맞게 .conf 파일을 설정합니다.

3. 적용하려는 파일을 정해진 폴더에 집어넣습니다.

4. 미리 준비해 놓은 .conf 를 사용하여 UpdateEra 를 기동합니다.

5. report.txt 를 보고 문제가 없는지 확인합니다.

6. 적용 완료된 파일을 작업중인 내용에 추가합니다.


... 라고 하고 끝! 이라고 입 싹 닦으면 욕 얻어먹겠죠? ㅎㅎ 하나하나 설명해 보겠습니다.



* run.cmd


UpdateEra는 명령행 유틸리티이기 때문에 윈도우 세대에는 잘 맞지 않습니다. 그래도 명색이 완전정복이니 언급은 하고 가겠습니다.


UpdateEra 설정파일.conf


여기서 설정파일.conf 에 어떤 설정이 되어있느냐에 따라 UpdateEra의 동작방식이 바뀌는데, 맨날 cmd 창 열어서 쓰기 귀찮았는지

제작자가 run.cmd 라는 배치파일을 만들어 놓았습니다. 이걸 그냥 실행시키면 base_without_srs.conf 를 기본 설정으로 동작하고,

다른 설정파일을 사용할 때는 해당 conf 파일을 run.cmd 에 떨어뜨려 실행하도록 되어 있는데요, 개인적으로 이 파일을 아래

이미지처럼 텍스트 에디터로 열어서 사용하는 conf 파일로 이름을 바꿔두고 쓰는 것을 권장합니다. 여러 설정을 사용한다면

run.cmd 파일을 복사해서 각각 설정을 바꿔두고 실행시키거나요.



* .conf 파일의 구조


여기서는 각 설정의 의미만 짚고 넘어가고, 실전에서 어떻게 설정할지는 나중에 다시 다루기로 하겠습니다.

base.conf 를 기준으로 설명합니다.


1. 폴더 설정

    "OO_Directory"    :    "old_original"        ,

    "OT_Directory"    :    "old_translated"    ,

    "NO_Directory"    :    "new_original"        ,

    "NT_Directory"    :    "new_translated"    ,


먼저 OO, OT, NO, NT 가 무엇인지 설명하겠습니다.


OO = Old Original, 구버전 원본

OT = Old Translated, 구버전 번역본

NO = New Original, 신버전 원본

NT = New Translated, 신버전 번역본


옆에 써 있다고요? 그렇죠; 그래도 아는 척 해야죠 ㅎㅎ;

어쨌든, 적용하려는 파일들을 넣어둘 폴더명을 설정해 주는 것입니다. UpdateEra 폴더 안에

각각의 폴더가 아마 미리 만들어져 있을 것입니다. 따라서 신경 안 써줘도 될 겁니다...


2. 인코딩 설정    

    "OO_Encoding"    :    "mskanji"            ,

    "OT_Encoding"    :    "mskanji"            ,

    "NO_Encoding"    :    "mskanji"            ,

    "NT_Encoding"    :    "utf_16"            ,


각각 폴더 안의 작업파일의 글자 인코딩입니다. mskanji는 일본어 인코딩 (=cp932), euc_kr은 한국어 인코딩,

utf-8 은 가변형 유니코드, utf_16은 2바이트 유니코드. sig 붙은 것은 유니코드 앞에 인식문자 붙는 것.

인코딩 문자열에 대한 자세한 사항은 https://docs.python.org/ko/3/library/codecs.html#standard-encodings

참조하시면 됩니다.


3. 자동 인코딩 설정

    "OO_Autodetect"    :    "safedetect"                ,

    "OT_Autodetect"    :    "safedetect"                ,

    "NO_Autodetect"    :    "safedetect"                ,

    "NT_Autodetect"    :    "safedetect"                ,


각각 폴더 안의 파일 인코딩을 자동으로 확인하는 설정입니다. 잘못해서 utf-8 폴더에 euc_kr 파일을 넣었다 할 때

자동으로 확인해서 진짜 인코딩을 찾습니다. 신경 안 써줘도 되는 설정이지만 일단 가능한 옵션을 보자면,


no = 무조건 2에 적힌 인코딩으로 설정합니다.

chardet = 파일 전체를 확인해 인코딩을 찾습니다. 파일이 크면 느립니다.

safedetect = 파일 앞부분 (10자)만 확인합니다. chardet 보다 빠르지만 오판정 가능성이 있습니다.

mskanji = 일본어 인코딩이 확실한지 확인합니다.


4. 치환 사전 (srs) 설정

    "RI_File"        :    "srs.srs"            ,

    "RI_Encoding"    :    "utf-8-sig"            ,

    "RI_Autodetect"    :    "safedetect"                ,


RI 는 Replace Index 약자입니다..는 별로 안 중요하고, srs 는 Search & Replace Script 의 약자입니다..도 안 중요하군요. ㅎㅎ

어쨌든, 치환 사전 설정을 하는 부분입니다.


RI_File = 치환 사전 파일입니다. .srs (Search & Replace 툴용 사전), .simplesrs (.srs 를 간단하게 바꾼 사전), 

        .RIChain (이건 다음 기회에 설명) 의 확장자를 가진 파일을 사용할 수 있습니다.

RI_Encoding = 치환 사전 파일의 인코딩입니다. 2와 동일.

RI_Autodetect = 치환 사전 파일의 자동확인 설정입니다. 3과 동일.


5. 각 경우 (Case) 별 폴더 설정

    "Case1_Out"        :    "update"            ,

    "Case2_Out"        :    "deleted"            ,

    "Case3_Out"        :    "not_translated"    ,

    "Case4_Out"        :    "deleted"            ,

    "Case5_Out"        :    "rare_case"            ,

    "Case6_Out"        :    "translation_only"    ,

    "Case7_Out"        :    "new"                ,

    "Failed_Out"    :    "failed"            ,


UpdateEra는 파일의 존재여부에 따라 작동 방식을 정해줄 수 있는데, 그 때 작업이 끝난 결과 파일을 각각의

경우에 따라 분류해서 NT 폴더에 각각의 폴더를 만들어 넣어줍니다. 그 폴더 설정입니다. 작업이 끝나면

다음 이미지와 비슷한 폴더가 만들어지게 됩니다. 뭐 손 안 대도 됩니다만..



각 경우에 대한 설명은 아래 Action 설정에서 다루겠습니다.


6. 각 경우별 치환 설정

    "Case1_RI"        :    true                ,

    "Case2_RI"        :    false                ,

    "Case3_RI"        :    true                ,

    "Case4_RI"        :    false                ,

    "Case5_RI"        :    true                ,

    "Case6_RI"        :    true                ,

    "Case7_RI"        :    true                ,

    

각 경우별 치환 설정입니다. 치환을 하려면 true, 원본 상태로 놔두려면 false. 역시 손 안 대도 됩니다.


7. 각 경우별 작동방식 설정

    "Case1_Action"    :    "update"            ,

    "Case2_Action"    :    "copy-ot"            ,

    "Case3_Action"    :    "copy-no"            ,

    "Case4_Action"    :    "copy-oo"            ,

    "Case5_Action"    :    "copy-no"            ,

    "Case6_Action"    :    "copy-ot"            ,

    "Case7_Action"    :    "copy-no"            ,


먼저 각 경우(Case) 가 무엇을 의미하는지부터 설명해야겠죠? OO, OT, NO, NT 는 이해하셨으리라 믿고..

Case1 : OO 존재, OT 존재, NO 존재 - 원래 파일과 동일하거나 내용이 수정되었을 경우

Case2 : OO 존재, OT 존재, NO 없음 - 신버전에서 통합되었거나 삭제된 경우

Case3 : OO 존재, OT 없음, NO 존재 - 아직 번역이 안되어 번역본 파일이 없는 경우

Case4 : OO 존재, OT 없음, NO 없음 - 번역도 안 되었지만 신버전에서도 삭제/통합된 경우

Case5 : OO 없음, OT 존재, NO 존재 - 구버전 원본이 없는데 신기하게 번역본과 신버전에도 있는 경우

Case6 : OO 없음, OT 존재, NO 없음 - 번역가가 일부러 집어넣은 파일. 예: 조사처리용 파일 등

Case7 : OO 없음, OT 없음, NO 존재 - 신버전에서 추가된 파일

Failed : 경우라기보다는.. 처리하다가 문제가 생기면 전부 이리로 들어가게 됩니다.


그리고 각각의 작동방식은 이런 것이 들어갑니다.

update : OO 와 OT 를 참고하여 NO 를 번역합니다.

update-hash : OO 와 OT 를 참고하여 NO 를 번역하는데 Hash 방식만 사용합니다. 이건 나중에 다시 설명.

copy-oo : OO (구버전 원본) 에서 복사합니다.

copy-ot : OT (구버전 번역본) 에서 복사합니다.

copy-no : NO (신버전 원본) 에서 복사합니다.


복잡하지만, 사실 이 설정도 건드리지 않아도 됩니다. ㅎㅎ


8. 결과 보고서 파일

    "Report_File"    :    "report.txt"        ,

    

처리결과를 저장하는 파일명입니다. 처리가 끝나고 확인하는 파일이죠.


9. 업데이트시 문장 앞의 빈 칸 처리 설정

    "Trim_Prefix"    :    ""


여기에 빈 칸으로 인식할 문자를 넣으면 해당 빈 칸은 무시하고 비교합니다.


DoL 같은 게임의 스크립트를 보면 들여쓰기가 되어 있는 경우가 많은데, 이 설정을 하지 않으면 들여쓰기에

사용된 탭이나 빈 칸을 전부 비교해 보기 때문에 처리가 안 되는 경우가 있습니다. 그럴 때 " \t" 등으로

설정해주면 빈 칸을 무시하고 실제 문자열 부분만 처리하게 됩니다.



* 적용하려는 파일을 폴더에 집어넣기


각 파일을 그냥 넣으라는 이야기가 아니라... 폴더째로 집어넣으시면 됩니다. 폴더 구석구석 전부 확인해서 

처리합니다. 복사할지 이동할지는 알아서. 단, 안에 들어간 파일들은 확장자가 뭐든간에 처리하니까 텍스트가

아닌 파일들은 빼 놓으시기 바랍니다.



* UpdateEra 기동


위에서 설명한 run.cmd 파일 혹은 따로 만들어둔 .cmd 파일을 실행시켜 UpdateEra 를 기동하면 됩니다.

처리가 끝날 때까지 잠시 기다려 주세요; (이런 것도 적어야 하나?)


* report.txt 확인


무슨 문제가 난 것이 있는지 report.txt 를 보고 확인합니다. 문제가 있을 경우 해결 후 UpdateEra 기동으로.


report.txt 는 이런 식으로 되어 있습니다. (예제)


 - 인코딩 (old_original\CSV\CHARA24_東豪寺麗華.CSV): mskanji

 - 인코딩 (old_translated\CSV\CHARA24_東豪寺麗華.CSV): utf-8-sig

 - 인코딩 (new_original\CSV\CHARA24_東豪寺麗華.CSV): utf-8-sig

$파일 읽기

$Prefix, Postfix 선처리

$번역 계획 수립

 -> Hash 번역을 사용합니다.

$적용 중

총 39 줄 중 7 줄이 치환되어 저장되었습니다.

.

.

(각 파일별 번역 결과)

.

.

.

########################################################################

########################################################################


                          작업이 완료되었습니다.


########################################################################

########################################################################



[update] 다음 파일들은 변경점이 없습니다. (Case 1)

작업: 업데이트

(치환이 적용되었습니다)

 - CSV\STR.CSV

 - (파일들)

 

[update] 다음 파일들은 변경점이 있습니다. (Case 1)

작업: 업데이트

(치환이 적용되었습니다)

 - CSV\ABL.CSV

 - (파일들)

.

.

(각 Case 별 처리된 파일들)

.



[failed] <<ERROR @ Case 1>> **실패** 다음 파일은 업데이트 중 에러가 났습니다.

(치환은 적용되지 않습니다)

 - CSV\DATASUMMARY.HTML

 - (각 Case 별 에러난 파일들)



* 적용 완료된 파일을 작업중인 내용에 추가


처리가 끝나면 파일들은 NT 폴더에 각각의 결과폴더로 들어가게 됩니다. 여기서 UpdateEra의 문제점이

하나 있는데, 파일명을 무조건 대문자로 만들어 버립니다;; 마음에 안 드시는 분들은 Renamer 같은

이름변경 전용 유틸리티를 사용해서 소문자로 변경후 기존 작업파일에 덮어씌우시면 되겠습니다.


보통 update, translation_only 파일만 가져다 신버전 원본에 덮어씌우고 deleted 등의 파일을 참고하여

신버전에 어디에 통합되었는지 확인하여 번역하는 경우가 대부분입니다.


===========================================================

 

글이 너무 어려웠는지 모르겠군요. 특히 .conf 설정하는 부분이 복잡했을 지 모르겠네요.

하지만 .conf 설정은 처음 한 번만 세팅해 두고 손 대지 않아도 되니까 대충 그렇구나 하고

넘어가셔도 됩니다. 나중에 다시 다룰 테니까요.. 귀차니즘으로 포기만 안 하면 말입니다만.


다음 글에서는 텍스트 검색-치환 기능에 대해 다루어 보도록 하겠습니다.