패치 완성도 높이고자 열겜 좀 하다가 너무 질려서 쉬고있던 차에 업데이트 소식보고는 다시 기운이 나서 이래저래 정리를 좀 했습니다.
패치는 그동안에도 계속 수정해서 업데이트는 하고 있었어서 아마 최신으로 받으신 분과 업데이트 알림글 기준과는 차이가 좀 있습니다.
일괄로 한번에 여러개를 고치는데도 별별 이상한 텍스트가 남아있네요.
아무튼 전에 말씀드렸던 패치로그를 공개해볼까 합니다.
1. state of decay 2 localize
모든 패치의 시작이었습니다. 구글에 저걸로 검색하니까 패치 방법이 아주 쉽게 나와있었습니다.
검색하면 나오는 링크로 들어가보면 패치 방법에 대하여 나와있습니다.
https://zenhax.com/viewtopic.php?t=14047
간략히 설명해보면
1) 게임파일로부터 언어파일을 추출
2) 언어파일로부터 텍스트 파일을 추출하고 수정 후 다시 언어파일로 변환
3) 지정된 폴더에 언어파일을 배치
입니다.
위 과정에 필요한 QuickBMS는 별도링크에서 받을 수 있는데 첨부되어있는 파일들은 크롬에서 다운로드를 하면 크롬이 중간에 막아버립니다. 아마 파일을 추출하는 구조가 해킹과 유사해서 막은 것 같습니다. 그래서 엣지로 다운받았습니다. 그리고 위 과정대로 해보면
1) QuickBMS로 pakchunk000025-WindowsNoEditor파일을 언팩
2) 하고 결과물 폴더에 있는 en-US 폴더에 있는 Game.locres 로부터 텍스트파일을 추출하고 그 텍스트파일을 수정한 뒤에 다시 Game.locres로 변환
3) 텍스트 파일을 StateOfDecay2\Content\Localization\Game\en-US 폴더에 넣음
이렇게 해서 한글을 표현하는 것까지 할 수 있었습니다.
여기에 댄큐님이 올려주셨던 폰트파일이 기존에 있었기에 아마 한글로 잘 나오는 것일겁니다.
2. 영문 텍스트 가공
모든 작업을 시작하기전에 제일먼저 해야하는 일은 현재의 텍스트에 인덱스를 붙이는 일입니다.
일종의 아이디 개념인데 첫번째 텍스트는 1, 두번째는 2 ... 마지막 텍스트는 130810.
이 인덱스만 있으면 추후에 업데이트가 됐든 이상한 번역물이 있든 원문을 찾아서 대조해가지고 수정하는 것이 가능합니다.
하지만 인덱스가 없이 작업을 하면 추후에 업데이트가 돼서 인덱스가 바뀌거나 하면.... 지금까지의 모든 작업이 거의 수포로 돌아갈 수도 있습니다.
그래서 반드시 시작할 때 원문의 순서를 아이디로 삼아 정리를 하고 시작해야합니다.
영문을 한글로 바꾸기 전에 반드시 해야하는 필수과정이 있는데 시스템 예약어와 약속된 명사를 미리 처리하는 것 입니다.
시스템 예약어는 "{target}을 추방하시겠습니까?" 에서 {target}같은 것들인데 저기에 캐릭터 이름이 들어가서 "john을 추방하시겠습니까?" 등으로 표현됩니다.
번역기로 돌리다보니 처리를 잘못하면 "{대상}을 추방하시겠습니까?"가 되어 텍스트 결과가 이상하거나 그대로 {대상}이라는 텍스트가 노출되게 됩니다.
따라서 저런 예약어들이 번역되버리지 않도록 일종의 예외처리가 필요합니다.
약속된 명사는 red talon이나 plague 같은 것들 입니다. 이것들은 문맥에 따라서 붉은 발톱, 붉은 탈론, 역병, 페스트, 전염병 등 다양하게 읽히기 때문에 사전에 동일한 단어로 변경을 해주면 좋습니다. 일단 구글번역이 한글로 번역된 결과에 대해서는 웬만하면 건드리지 않고 그냥 두는 것 같습니다.(아닌 경우도 있습니다.)
그래서 약속된 명사를 원문으로부터 미리 바꿔두었습니다.
바꾸는 방법으로는 단어 하나하나를 교체해줘야 하는데 저는 엑셀이 편하기에 엑셀에서 간단히 VBA를 짜고 원문으로부터 지정된 단어들을 약속된 명사로 바꿔주었습니다.
바꿀때는 또 앞에다가 ZQ라는 별도의 약속어를 붙여놨는데 이유는 구글번역이 한글을 제거하는 결과를 낼 때가 있어서 그렇습니다.
예를 들어 "run away from 레드탈론" 이런 문장이 있을 때 번역 결과가 "도망쳐야한다!" 이런식으로 레드탈론이라는 단어를 누락시키고 변역결과를 줄 때가 있습니다.
이때 ZQ를 붙여두면 꽤 높은 확률로 "ZQ레드탈론으로부터 도망쳐!" 혹은 "ZQ로부터 도망쳐!" 이런식의 결과가 나옵니다.
그래서 한글로 미리 번역한 약속어가 잘 살아있는지를 체크하기 위해서 ZQ라는 식별자를 한 붙여서 번역기를 돌렸습니다.
*이 과정은 VBA를 써서 했습니다. 바꿔줘야하는 단어가 상시로 늘어날 수 있기 때문에 셀에다가 변경 툴을 구성하기 보다는 변경단어 리스트가 있어서 VBA를 통해 바꾸기 작업을 반복해주는게 리스트 변경에 대응하기도 쉬울 것입니다.
시스템예약어의 경우 절대 번역이 되면 안되기 때문에 아예 문구 자체를 바꿔버렸습니다.
먼저 {} 문자를 찾아서 중괄호 안의 내용을 다른 문자로 치환해줍니다.
그리고 그 상태로 번역기를 돌립니다. 번역이 끝난 뒤 치환된 문자를 다시 원래의 문자로 교체를 합니다.
교체과정에서 원래 문자가 없는 경우가 있을 수 있습니다. 그래서 원문에 있던 {의 개수와 번역결과물의 {의 개수를 비교해서 누락개수를 확인하고 여기서부터 일일이 수정을 할 수밖에 없었습니다.
이처럼 {}를 포함한 내용을 ■SYS01□과 같은 내용으로 바꿔줍니다. 이후에 번역을 하면 ■SYS01□을 남긴채 번역 결과가 나옵니다.
그리고 ■SYS01□은 다시 한번 원래의 시스템예약어로 교체를 해줍니다.
*이 작업을 완벽하게 하기 위해서는 여러개의 셀에 SUBSTITUTE 수식으로 노가다를 해줍니다. 첫번째 {}를 찾아서 바꿔주고 두번째 {}를 찾아서 바꿔주는 식으로합니다.
최대 몇개까지 해야하는지도 알아야하는데 LEN(원문)-LEN(SUBSTITUTE(원문,"{",""))의 개수로 문자 안에 있는 {의 개수를 파악할 수 있습니다.
여기까지가 50%였습니다. 원하는 명사와 시스템 예약어를 제외한 나머지를 구글번역을 통해 번역을 했고 치환한 시스템 예약어를 원래 용어로 바꿔주었습니다.
이 과정까지가 걸린 시간이 대충 3시간 정도였는데 진짜 노가다는 다음이었습니다.
3. 추가 정리 작업
앞서 한것들로 정리는 다 됐을 것이라 생각했는데 하다보니 심각한 문제가 몇가지가 더 있었습니다.
1) 시스템 예약어를 빵꾸낸 케이스가 너무 많아서 하나한 수작업을 하기에는 시간이 너무 오래 걸릴 것 같았습니다.
2) 뭔가를 잘못 번역했는지 게임이 자꾸 튕기는 문제가 발생했습니다.
3) or문법을 사용한 텍스트가 있었어서 아까와는 다른 방식의 수정 번역이 필요했습니다.
하나하나 해결보기는 했는데 여러가지 시행착오가 있었기에 쉽지는 않았습니다.
시스템 예약어 빵꾸는 먼저 시스템 예약어 비교를 하고 맞지 않는 케이스를 찾아서 하나하나 고쳐주었습니다.
튕기는 문제는 이전글에서도 설명했듯이 무언가 건드려서는 안되는 텍스트를 번역한 것이 문제일 것이라 유추했습니다.
보통은 특정 텍스트가 등장할때 튕기거나 하는데 밑도끝도없이 15분정도 플레이를 하면 튕기니까 너무 답답하더군요.
심지어 게임에 들어가서 15분동안 아무것도 안해본적도 있고 CPU랑 메모리 상태를 체크해보기도 했습니다.
튕기는 현상이 있을 때 특징중 하나가 자동차 내구성이 떨어져도 불이 안나더군요. 처음에는 내구성이 매우 좋아진 버그가 생긴줄 알았습니다;;
이런저런 시도를 하다가 생각난것이 과거에 댄큐님이 튕기는 현상에 대하여 언급했던 기억이 났습니다.
그때의 글들을 다시 보다가 번역과정에서 있었던 몇가지 의문의 문구들이 문제의 문구라는 것을 알아냈습니다.
이 과정이 참 재밌었는데 텍스트 전체에서 보면 TEMP라던가 DEPRECATED라던가 왠지 번역하면 안될 것 같은 문구들이 보이기는 합니다.
하지만 이것들이 맞는지 하나하나 테스트를 하기에도 한두가지가 아닌지라 시간이 매우 오래걸리게 됩니다.
이것이 맞다는 완벽한 검증수단이 필요했는데 마침 그것은 스페인어 번역물이었습니다.
앞에 1번에서 추출한 결과물 중에 정식번역파일로 스페인어가 있었는데 이 버전과 영어버전을 비교해보니 인덱스에 따른 문장이 거의 유사했습니다.
문장길이로 순서를 대충 유추해보는데 중간중간 순서가 안맞을때면 영어문장에 꼭 TEMP나 DEPRECATED 등이 쓰여진 문구가 끼어있었습니다.
여기서 저는 확신을 했습니다. 얘네들이 특정 단어 기준으로 필터링을 걸어놨고 필터된 결과물을 기준으로 다른 번역 파일이 만들어진 것이구나.
그래서 위와 같은 방식으로 하나씩 추려낸 결과 몇가지 단어를 추려내었고 이것들이 포함된 텍스트를 모두 제거하자 스페인어 파일과 동일한 분량의 영어파일을 만들 수 있었습니다.
대략 TEMP, DEPRECATED, DEBUG, PLACEHOLDER, DNL 이런 것들이었습니다.
이 단어들이 들어갈 경우 절대로 수정이 되면 안되기 때문에 가장 마지막에 처리를 붙여놨습니다.
*셀안에서 특정 문자를 찾아내는 제일 빠른 방법은 FIND 수식입니다. FIND 수식은 특정 문자를 찾아내면 문자의 위치를 알려주고 문자가 없으면 에러를 뱉습니다.
IFERROR와 같이 사용하면 특정 문자가 들어간 수식을 빠르게 찾아낼 수 있습니다. 찾아낼 문자열을 범위로 잡고 FIND수식을 걸어서 1이상의 값이 나온지를 체크한 다음에 있을 경우 원문이 나오도록 하면 위 문자열이 들어간 것들은 번역결과를 패스할 수 있습니다.
그리고 또 한가지 문제점을 발견했는데 엑셀 특성상 몇가지 용어는 자동변환을 해버립니다. 예를 들어 11/11 이런 것을 입력하면 지맘대로 11월 11일이라고 자동입력이 되버립니다.
그래서 문장이 아닌 용어로 보이는 문구들을 전부 추려서 텍스트기반으로 다시 변환을 해서 위 과정을 따로 한번 더 했습니다.
이렇게까지하자 드디어 튕기는 문제는 해결이 되었습니다. 자동차 내구도가 닳때 불이 나는 것을 보고는 완전히 고쳐졌음을 직감했습니다.
마지막으로 남은 문제는 or문법을 사용한 텍스트들 입니다.
플레이하다보면 "그는 우리는 위협한다" 뭐 이런 문구가 있지 않았습니까? 여기서 "그는" 이 부분은 캐릭터에 따라서 그녀가 될 수도 있는데 이런 것들이 전부다 시스템문구로 잘 분리가 되어있었습니다.
예를 들면 다음 문구 같은 것들입니다.
{[EnclaveLeader.Gender:m|f|x]his|her|their}의 그룹에 일부 {Item.name#+}를 제공하는 것에 대해 {EnclaveLeader.Name}과 대화하십시오.
저 문구같은 경우 앞에 있는 {[EnclaveLeader.Gender:m|f|x]his|her|their} 중에서 his|her|their 이것만 번역을 해도 되는 문구였습니다.
스오디 참 디테일 합니다.
그래서 | 문자가 들어있는 문구를 따로 추려서 또 수정을 했습니다.
추려서 수정하다보니 |은 다른 경우에도 쓰인다는 것을 알았습니다.
{[0,+|1]Copies|Copy} of Encyclopedia (Vol.18) 이런 경우 입니다. 대충 백과사전 단행본|단행본들 이라는 복수개 표현인데... 아이템을 복수로 가지고 있을 경우를 표현하는 것 같았씁니다. 미국에서는 복수개를 갖고 있을 때 복수개임을 확실하게 표현을 안하면 어색한 것인지... 고민끝에 저런 경우는 다 날려버렸습니다.
한국인 기준으로는 내가 수류탄을 5개 갖고 있다 그래서 "수류탄들 5개" 꼭 이렇게 표현 안해도 어색한 표현은 아니라고 판단해서입니다.
이렇게까지 하니 진짜로 시스템 관련 노가다는 끝난거나 다름없었습니다.
이제 남은 것은 검수입니다.
4. 검수
테스트해보는데 검수거리가 한두가지가 아니더군요.
설정에서 비디오가 영상으로 되어있질 않나 홈커밍이 동창회로 나오질 않나...
여기서부터는 수작업이었습니다. 전부다 테스트해보고 하나하나 찾아서 수정했습니다.
구글이가 이상하게 번역해놓은것도 힘들었지만 최초로 했었던 ZQ를 붙여둔 예약어들이 지맘대로 바뀌어있는 경우가 제일 힘들었습니다.
페럴 이런것들이 페린으로 되어있질 않나 구글번역 규칙은 지금도 참 모르겠습니다.
그래도 스오디2를 너무 좋아하는지라 크게 질리지않고 계속 트럼블벨리를 탐험하면서 재밌게 수정한 것 같습니다.
검수를 하다보니 번역기 관련하여 몇가지 규칙을 발견한게 있습니다.
스오디2는 욕이 참 많습니다. 그중에서 특히 shit이 매우 많은데 이 shit이 들어갈 경우 매끄러운 번역을 해주지 않습니다.
반면에 파파고는 꽤 그럴싸한 번역을 해줄때가 많았습니다.
다만 제가 구글베이스로 번역을 한 이유는 표준어 기준으로는 구글번역이 훨씬 잘 돼있었습니다.
두 번역기의 성능이 좀 다른데 구글번역이 영어를 학교서 배운 모범생이라면 파파고는 미드로 영어를 배운 너드같은 느낌이었습니다.
그래서 현재 욕이 들어간 문자을 모두 따로 추려서 그것들만 파파고로 따로 번역을 할려고 데이터를 만져보고 있습니다.
구글번역을 제일 빠르게 작업하는 방법은 텍스트파일을 이용하는 것입니다.
단순히 abc.txt 파일을 크롬에 올려놓고 우클릭해서 한국어 번역을 누르면 바로 번역이 됩니다.
아무 제한도 없기에 매우 빠르게 작업할 수 있었습니다.
반면에 파파고는 제 특정 계정에 파일을 올리고 접속해서 번역을 시도했어야했는데 이 과정이 좀 귀찮긴 했습니다.
5. 다음 일정
이주정도 엄청나게 했더니 너무 질려서 요즘은 용과같이6라던가.. 그란디아라던가.. 다른 게임을 좀 하고 있습니다.
조만간 업데이트가 뜰 것 같으니 그때 다시 열겜하면서 추가 수정을 할까 합니다.
일단 지난번 업데이트로부터 현재까지 플레이하면서 추가 수정을 더 하고 있고요 위에서 말한 일반 문장을 좀더 매끄럽게 하는 방법을 연구해보고 있습니다.
기타 용어들 관련해서 번역을 빼고 원문에 가깝게 만드는 것도 계속 수정해보고 있습니다.
최근까지 한 작업물과 작업용 파일들을 공유해봅니다.
최신 번역파일
SOD2 한글 작업파일
좀 전에 업데이트 받고 수정 중에 있습니다!
감사합니다
와...이걸 추천 안한다고??
감사합니다 (__)
추천!
퇴근해서 게임켜니까 27업데이트된것같은데 전부 영어로 나오네요 어떻게 해야되나요 ㅜ,ㅜ
좀 전에 업데이트 받고 수정 중에 있습니다!
혹시 해결 하셨나 모르겠는데 혹시나 해서 SteamLibrary\steamapps\common\StateOfDecay2\StateOfDecay2\Content\Paks 들어가서 pakchunk000025-WindowsNoEditor.pak 이거 다시 생기셨으면 한패 과정처럼 삭제 해주면 됩니다
너무 감사합니다 ㅜㅜ 추천!
좋은 한글패치 공유 감사합니다 잘받구가용ㅎㅎㅎ
올려주신 최신번역파일을 받아서 패치방법 링크를 보고 하면 되는건가요..??
와 무슨말인지 모르겠네요..ㅠ