사실 나도 첨에 아무것도 몰라서 맨땅에 헤딩을 존나게 했기 때문에 더 많은 번역모드 핫산들이 쉽게 입문하길 바라는 마음에서 간단하게 번역 가이드라인을 쓰게 됐음.
사실 그렇게 어려운 것도 아니니까 잘 따라오면 너도 할 수 있어.
그리고 미리 말해두지만 다른 번역툴을 쓰거나 하는 방식으로 자신만의 번역 방법을 찾아도 돼. 여기서는 내가 번역하는 방법에 대해서만 알려줄 거니까.
우선 준비물이 2가지 필요함.
첫 번째 파일은 바로 ExportTool이야.
https://github.com/Norbyte/lslib/releases/tag/v1.18.7
일단 Pak파일을 패킹(묶기), 언패킹(풀기) 할 수 있는 도구가 필요해. 이 도구는 Loca파일과 Xml파일을 서로 컨버팅하는 프로그램이기도 해.
일단 받으면 아무 곳에나 압축을 풀어주면 돼. 이 툴의 위치는 아무런 영향을 미치지 않아.
바탕화면에 두든, 문서 폴더에 넣든 아무런 상관이 없어.
https://notepad-plus-plus.org/downloads/
두 번째로 필요한 파일은 노트패드++라는 프로그램이야.
굳이 이걸 권장하는 이유는 기본적인 메모장 따위랑은 편의성이나 유용성이 차원이 달라서야.
이건 그냥 받아서 바로 설치하면 돼.
이런 구조로 되어 있어.
플러그인 관리에 들어가면 사용 가능 항목에서 플러그인(추가 기능)을 다운받아 사용할 수 있어.
체크박스를 클릭해서 체크하고 우측 상단의 설치를 누르면 알아서 받아줄 거야.
여기서 번역에 쓸 만한 플러그인을 추천해 줄게.
1. Compare(대조) 플러그인
이건 번역하려면 사실 필수야. 자세한 기능은 나중에 설명할게.
2. XML Tools
발더스3의 모드를 번역하려면 사실 이것도 필수에 가까워.
특히 문법적 오류를 잡는 용도로는 아주 탁월한 성능을 발휘해.
일단 여기까지 준비되었다고 가정하고, 직접 번역을 하는 걸 보여줄게.
https://www.nexusmods.com/baldursgate3/mods/2786
예시 상대로 고른 mystic 클래스 모드야. 분량이 씹창이라 번역할 때 개고생한 탓에 여러모로 깊은 인상을 줬던 모드라서 선정해 봤어.
일단 번역을 하려면, Manual Download(수동 다운로드)를 받아야 해. 물론 모드 매니저를 써도 상관은 없지만, 볼텍스 유저는 모드 매니저에서 파일을 꺼내와야 해서 수고가 두 배로 들어.
모드 파일을 받았으면 아무 곳에나 두자. 이것도 위치는 아무 상관없어. 기왕이면 ExportTools랑 가까운 데 두면 덜 헷갈리겠지?
모드 파일의 압축을 풀면 이런 식으로 되어있을 거야. Info는 이런 모드예용~하고 모드 매니저한테 알려주는 역할 정도라 무시해도 돼.
중요한 건 Pak파일이지.
이제 ExportTool을 압축 풀었던 곳으로 가서 ConverterApp.exe를 열자.
시방 이게 뭔 소리냐 싶을 거야. 뭐가 뭔지 대략 정신이 멍해질 수도 있고.
일단 게임을 발더스 게이트 3으로 설정해 두자.
뭔가 존나게 많지만, 우리가 여기서 번역에 쓸 건 단 두 가지 기능뿐이야.
1. PAK/LSV Tools
Pak파일을 풀거나(언패킹) 다시 원래대로 되돌리는(패킹) 기능이야.
아까 모드 파일 압축을 풀었을 때 나온 파일 확장자가 Pak인 건 기억하지?
2. Localization
XML파일과 Loca 파일을 서로 변환할 수 있는 기능이야.
XML파일은 우리가 읽을 수 있는 파일(인간용), Loca파일은 컴퓨터가 읽을 수 있는 파일(컴퓨터용)이라고 보면 돼.
여기서 XML, Loca는 각각 파일 확장자를 의미해.
이제 앞에서 말했던 Notepad++랑, ExportTool의 이 두 가지 기능을 사용해서 모드를 번역해 볼 거야.
먼저 사용할 건 Extract Package(패키지 파일 추출하기) 기능이야. Pak 확장자로 묶인 파일을 풀어주는 역할을 해.
Package Path: 패키지 파일 있는 위치
Destination Path: 패키지 파일을 풀 위치
한 번 해보자고.
우선 Package Path의 오른쪽에 있는 … 칸을 눌러.
그리고 아까 모드의 압축을 해제했던 데로 들어가서 Pak파일을 선택한 뒤 하단의 열기를 눌러.
자, 패킹을 풀 pak파일의 경로가 설정됐어.
이제 어디로 풀 건지만 정해주면 돼. 개인적으론 바탕화면 추천. 여러 번 딸깍질하기 귀찮아서…
이제 Destination Path의 오른쪽에 있는 … 칸을 눌러.
미리 폴더를 만들어놔도 되고, 새 폴더 만들기로 압축을 풀 폴더를 만들어도 돼.
당연히 이것도 폴더를 어디에 만들던지 간에 상관은 없어.
아무튼 추출할 폴더를 선택하고 확인.
이렇게 패키지 경로와 패키지를 풀 경로가 모두 설정이 완료됐어. 이제 하단의 Extract Package를 누르면…
???: 추출 다 했어영
이제 바탕화면에 추출할 경로를 잡아놨던 폴더를 보자.
ㅇㅋ 잘 풀어졌네.
여기서 번역을 할 거면 Localization 폴더만 건드리면 돼.
들어가면 이런 식으로 파일들이 있을 거야. 우리가 번역할 때 쓸 건 Xml 확장자 파일이야.
???: ㅅㅂ XML 확장자 파일이 없는데?
가끔 이런 배려심 없는 모드가 종종 있어. 없으면 만들면 돼.
ExportTool의 Localization 항목으로 들어가자.
앞서 말했듯이, XML과 Loca를 서로 컨버팅하게 해 주는 기능이야.
Input file Path를 눌러서 Loca 파일을 먼저 고르고.
Output file path도 경로만 잡아 주고…
확장자를 수정해서 XML로 내보내 달라고 하면 돼.
이렇게 경로 설정이 끝나면 Convert를 눌러주자.
이렇게 떠야 정상이야.
어쨌든 이런 식으로 되면 이제서야 번역 시작이야. 글로 풀어서 쓰니까 길어 보이지만, 실제론 그냥 마우스 몇 번 딸깍딸깍하면 끝이니까 걱정할 거 없어.
이제 XML파일을 노트패드로 열어보자.
노트패드는 XMl 파일을 열면 이런 식으로 색깔별로 구분을 해 줘.
우리가 번역해야 할 부분은 저기서 검은 글자들이야.
일단 번역을 하기 전에 파일->새 파일을 눌러서 파일을 하나 더 만들자.
그 다음 Compare 플러그인의 Compare 기능을 사용하면…
(익숙해지면 그냥 Ctrl+ALT+C 단축키 쓰면 돼)
이런 식으로 화면이 쪼개져.
이제 왼쪽을 토대로, 오른쪽에 번역을 작성하면 되는 거야.
일단 번역을 개시하기 전에 새 파일에 먼저 위 코드를 작성하고, 확장자를 XML로 해서 Ctrl+s를 눌러 저장해 주자.
파일 이름은 상관없어. 확장자가 중요하지.
이러면 하면서도 번역의 문법 오류를 검토할 수 있게 돼.
예를 들어서
이런 식으로 </content>인데 실수로 <content>만 입력했다고 하자. 이 때 저장(ctrl+s)을 누르면
???: 태그 맞춰라 이 빡대가리 새끼야
이렇게 알려주니까 편하단 말이지.
근데 만약 길게 썼는데 이렇게 경고를 띄워주면 대체 어디서 오류가 났는지 어떻게 아느냔 말이야.
그럴 때 필요한 게 바로 위에서 언급한 XML Tools야.
바로 Pretty print 기능이지.
요약하면 “자, 코드 정리해서 한 번 이쁘게 써 봐” 라는 기능이야. 모드는 원래 시작~코드~끝이여야 되는데 중간에 뭔가 빠지면 그게 안 되거든.
그래서 이렇게 티가 나. 딱 봐도 줄 빈칸이 다르고 왼쪽에 뭔가 붙어있지?
여기서 /를 빼먹었다는 거야.
만약 다른 오타가 있다면
색깔을 나눠서 이런 식으로 오류를 잡아주기 때문에 기껏 번역해 놓고 Not Found가 뜰 확률이 매우 낮아져.
아무튼 이런 식으로 까만 글씨만 직접 쓰든, 번역기를 쓰든 열심히 번역하면 돼.
다만 번역기는 코드를 못 읽거나 생략하는 경우가 종종 있어서 파탄을 내 놓는 경우가 있어. 그래서 XML tools가 필요한 거야. Compare 기능으로 줄 번호 비교해가면서 번역기가 빠뜨린 코드가 있나 검증할 수도 있고.
다만 단순히 까만 글씨라고 무조건 번역기만 돌려도 안 되는 게, 위와 같이 중간중간 코드가 삽입된 경우가 있어.
이건 수치를 입력하는 대신 해당 기술에 저장된 데이터를 불러오는 코드야.
왜, 발더스 스킬 설명문에 보면
“상대에 대해 유리 보정을 가집니다.” 하면서 지 혼자 글자색 다르고 커서 갖다대면 관련 정보가 작은 창으로 뜨는 거 있잖아? 그게 저 LsTag 코드야.
그리고 [1], [2], [3] 이런 건 관련 수치를 불러오는 정보야. 범위, 피해량, 회복량 등등 다양한데, 이건 설명문 상에서는 수치가 직접적으로 주어지지 않기 때문에 주변 문구를 보면서 눈치껏 잘 때려 맞춰야 해.
정 감이 안 잡히면 일단 대충 넘기고 인게임에 적용해 본 뒤 무슨 수치인지 파악하던지.
한 번 예시를 보여줄게.
Yur gain [3] Psi Point(s).
아하, 뭔진 몰라도 [3] 만큼의 뭔가를 얻는 거야. 그런데 뒤에 Psi Point(s)라고 되어 있지?
그럼 이 [3]은 사이오닉 포인트의 수치를 나타낼 가능성이 매우 높아. 그러면..
이렇게 되는 거지.
이제 뒤의 문장을 볼까?
which are restored on a&_lt;LSTag Tooltip="LongRest"&_gt;Long Rest&_lt;/LSTag&_gt;
여기서 주의. &_lt;와 &_gt;는 태그를 정의하는 코드야.
한 가지 명심할 점은, &_lt; 다음에는 무조건 &_gt;가 와.
일부 번역기는 이걸 그냥
&_lt; = <
&_gt; = >
이렇게 바꿔버리는 경우가 있어. 이러면 나가리야. 번역기를 쓸 때 가장 주의해야 할 부분이라고 볼 수 있어.
HTML문서나 웹에서 텍스트를 쓸 때, <>로 둘러싸인 부분은 기본적으로 내용이 아닌 '태그'로 해석하기 때문에 이걸 “글자(문자)”라고 인식하지 못해.
근데 문제는 발더스 3도 HTML 엔티티를 사용한다는 거야.
물론 디시도 HTML을 쓰기 때문에 <>로 떠서, 여기서는 &_lt;와 &_gt;로 바꿔서 쓸 거야.
그러니까 이 글에서 &_lt; &_gt;를 볼 때 _는 없다고 쳐.
그러니까 예를 들면
내 이름은 &_lt; 타브 &_gt; 입니다.
이걸
내 이름은 <타브> 입니다.
이렇게 바꿔버리면 인게임에서는
내 이름은 입니다.
이렇게 뜬다는 거야. 겜이 못 읽어서 몰?루를 시전해버리기 때문에 아예 생략이 되어버리는 거지. 사실 인겜까지 갈 것도 없이, 만약 이런 상태로 ExportTool을 통해 XML파일을 Loca로 변환하려고 하면
ExportTool: 몰?루!
그리고 사실 ExportTool까지 가지도 못해.
???: 내가 태그 신경 쓰라고 했지 빡대가리야
저장은 되지만 이렇게 노트패드에서 경고를 때려버려. 그러니까 그때그때 저장 버튼을 눌러가면서 노트패드의 저장 시 경고 기능을 잘 활용해서 오류 없는 코드를 작성해주는 게 좋아.
다시 돌아와서...
which are restored on a &_lt;LSTag Tooltip="LongRest"&_gt;Long Rest &_lt;/LSTag&_gt;
이제 이 문장을 오류 없이 번역해보자고.
&_lt; 는 Less Than(<, 보다 작은)
&_gt; 는 Greater Than (>, 보다 큰)
이걸 의미하는 건 맞지만, 그렇다고 “&_lt;랑 &_gt; 대신 <>를 때려넣어서는 안 된다.”
이해했지?
Restore=회복, Long Rest=긴 휴식이야. 그러면 일단 바로 작업해보자.
which are restored on a &_lt;LSTag Tooltip="LongRest"&_gt;Long Rest&_lt;/LSTag&_gt;
이 코드는 이렇게 해석할 수 있어.
which are restored on a <LS태그 툴팁 종류=LongRest> Long Rest(인게임 표기) <툴팁 종료>
툴팁 종류와 툴팁 종료 코드는 건드리면 안 되겠지?
자판기에서 돈을 넣고 생수를 눌렀을 때, 생수가 아니라 다른 게 나오면 안 되니까.
우리는 인게임 표기 부분만 한글로 바꿔주면 되는 거야.
즉, 자판기에서 돈을 넣고 생수를 뽑되, 생수의 라벨만 Samdasoo에서 삼다수로 바꿔주는 거라고 보면 돼.
직관적으로는
번역할 부분 &_lt;LSTag Tooltip="xx"&_gt; 번역할 부분 &_lt;/LSTag&_gt; 번역할 부분
이렇게 된다는 거야.
이런 것도 마찬가지야. Type(유형)를 지정하는 코드 하나가 추가됐을 뿐이지.
그럼 어떻게 해야 할까?
번역할 부분 &_lt;LSTag Type="xx" Tooltip="yy"&_gt; 번역할 부분 &_lt;/LSTag&_gt; 번역할 부분
이렇게 생각하고 번역하면 되는 거야.
which are restored on a &_lt;LSTag Tooltip="LongRest"&_gt;Long Rest&_lt;/LSTag&_gt;.
자, 그럼 위 문장은 인게임에서는 어떻게 나올까?
which are restored on a Long Rest.
긴 휴식 때 회복되는 것.
이걸 이전의 문장과 합쳐서 자연스럽게 읽히도록 조정하면
이렇게 되는 거지.
&_lt;br&_gt;는 그냥 줄바꿈 코드니까 건드리지 않아도 돼.
좀 더 강조하면, &_lt; 와 &_gt; 사이의 문구는 전부 코드이므로 건드리지 말 것!
이제 [1] [2] 이런 코드에 대해서 알아보자. 피해량, 범위 등의 수치를 불러오는 코드라고 아까 말했었던 걸 기억하고 있을 거야.
Reaction은 공식 번역에서는 "대응"이지?
자, 여기까지 왔어. 이제 수치를 짐작해 볼 차례야.
Dealing [1] => 피해량 관련 코드임에 분명해.
Within [2] => “within ~” 는 “~ 이내”니까 범위 관련 코드겠지?
여기서 피해량 코드는 무기 툴팁에 나와있는 것처럼 2d4 화염 피해, 2d5 참격/관통/타격 피해 등을 의미해.
근데 여기서는 산을 뿌린다고 했으니까 산성 피해겠지?
그렇다면…
이렇게 되는 거야. 이 문장은 인게임에서는 어떻게 나올까? 수치는 나도 모르니까 대충 예시를 들면,
당신은 피해를 입을 경우 대응 행동으로 상처로부터 산을 흩뿌릴 수 있으며, 이 경우 3m 범위 내의 크리쳐에게 2~10 산성 피해를 입힙니다.
이런 식으로 나올 거야.
피해량 관련 수치는 단순히 숫자만 나오는 게 아니라 ~속성/유형 피해까지 같이 나오기 때문에, dealing이 있다고 해서 위 코드에서 [1] 뒤에 피해를 같이 써 버리면
당신은 피해를 입을 경우 대응 행동으로 상처로부터 산을 흩뿌릴 수 있으며, 이 경우 3m 범위 내의 크리쳐에게 2~10 산성 피해피해를 입힙니다.
이렇게 중복이 되어버릴 거야. 그러니까 피해량 관련 수치 코드를 번역할 땐 피해라는 단어를 붙이지 않는 게 좋아.
자 , 흔히 말하는 3줄 요약을 해 보자.
1. 노트패드에서 까만 글씨만 번역하되 "&_lt;랑 &_gt; 대신 < 랑 >를 때려넣어서는 안 된다.”(에러남!!)
2. &_lt; 와 &_gt; 사이의 문구는 전부 코드이므로 건드리지 말 것!
3. [1], [2], [3] 등의 대괄호는 인게임에서 관련 수치를 불러오는 코드이므로 감안해서 번역할 것!
이 3줄 요약만 알아도 XML파일을 보면서 번역하는 데는 문제가 없을 거야. 남은 건 해 보면서 익숙해지는 것 뿐이지.
아무튼 이런 식으로 번역을 끝냈다면, 아까의 역순으로
Xml을 Loca로 컨버팅해주고 나서 번역파일이 든 Localization 안의 English 폴더를 복사해서 Korean으로 하나 더 만들어 준 다음
(사실 이건 필수 작업은 아닌 거 같아. 공식한패 이후로도 English만 있어도 한글화는 되더라고. 괜히 찜찜해서 하고 있긴 한데...)
경로를 반대로 해서 그대로 Create Package를 눌러 패키지 파일로 만들어 주면
이렇게 패키지 파일 생성이 완료돼.
이제 둘을 예쁘게 묶어서 압축파일로 올리면 번역 끝!
궁금하거나 막히면 댓글로 질문해주면 아는 데까지는 답해주겠음.
나보다 더 효율적으로 하는 갤럼이 있을 수 있는데, 일단 나는 이렇게 하는 중임.
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.