Overview
이미 엘더 스크롤 온라인은 한글화가 매우 잘 구성되어 있다.
오랫동안 많은 커뮤니티 유저들이 EsoKR 애드온을 잘 구현한 덕분이다.
그런데, 해당 애드온은 중국어 언어팩 파일을 기반으로, 구현하고 있고,
이것 때문인지 새로운 패치로 새로운 언어 소스나, 해외 애드온에서 한글화가 되지 않을 때는 원천 소스인 중국어가 나오게 된다.
왜, 영어 언어팩을 기반으로 하지 않았는지는 모르겠지만 충분히 이유가 있을 것으로 예상된다.
나는, 애드온 제작을 해본적 없지만 매우 궁금하며,
공부차 언어팩을 건드려 보며 기록하기로 했다.
목표는 나만의 한글화 + 나머지는 영어 언어팩 그대로 노출되는 심플한 애드온의 구현이지만
영어 언어팩에서 한글화가 어려울 경우, 해당 주제는 더 이상 게시하지 않을 것이다.
Descriptions
Requirements
Writing your first addon를 따라하면 기본적인 애드온 제작에 이해도를 높일 수 있다.
해당 과정 따라하기 중에, 유독 'd() function'으로 Chat에 duebug message를 전송하는 것이 안되었고, 구글링을 해도 많은 포럼 유저들이 같은 증상이 있었다.
확인 결과, 여러 애드온 사용에 범벅이 되어 있었던 지(해당 과정 따라하기 전 모든 애드온을 비활성화 했지만)
Chat을 삭제하고 새로 생성하니 그때부터 잘 되었다.
EsoExtractData애드온 페이지에서 해당 Windows Tool을 받는다.
해당 툴로, EOS 게임 파일을 추출할 수 있다.
ESO Mod:EsoExtractData에서 기본 사용 방법을 알 수 있다.
Extract a data
위 세가지가 모두 준비가 되었으면,C:\Program Files (x86)\Steam\steamapps\common\Zenimax Online\The Elder Scrolls Online\depot\eso.mnf
파일을 추출한다.
set HOME=C:\Program Files (x86)\Steam\steamapps\common\Zenimax Online\The Elder Scrolls Online
EsoExtractData.exe "%HOME%\depot\eso.mnf" --filename "en.lang"
... (the following is logs) ...
EsoExtractData v0.53 (30 April 2024)
Loading MNF file 'C:\Program Files (x86)\Steam\steamapps\common\Zenimax Online\The Elder Scrolls Online\depot\eso.mnf'...
Trying to find and load ZOSFT entry from MNF file!
Successfully loaded the ZOSFT entry for MNF file!
Extracting any filename matching 'en.lang'...
Extracting matching subfile #880!
Extracting matching subfile #1150333!
(나도 이 글을 읽어도 모르는 사람과 동일하게 무지하다.)
#880, #1150333은 eso.mnf 파일 인덱스로 보여지고, 두개의 인덱스가 en.lang 파일이 위치하고 있는 것으로 예상된다.
gamedata\lang 아래에 en.lang, en.lang.csv 파일이 추출된다.
여기서 추출된 en.lang.csv는 사용하지 않을 것이다.
EsoExtractData.exe --lang gamedata\lang\en.lang -o gamedata\lang\en.orig.csv -t -p
... (the following is logs) ...
EsoExtractData v0.53 (30 April 2024)
Converting LANG file 'gamedata\lang\en.lang' to TXT 'gamedata\lang\en.orig.csv'...
Loaded LANG file 'gamedata\lang\en.lang'...
Saved the LANG file to 'gamedata\lang\en.orig.csv'!
Saved the ID text file to 'gamedata\lang\en.orig.csv.id.txt'!
Skipping MNF export...no file specified!
명령으로 이전 추출한 en.lang(english language source pack)에서 대화 스크립트로 보여지는 데이터를 en.orig.csv 로 내보낸다.
Modify the csv
그랏우드 서약퀘스트 NPC 중에 Urgarlag Chief-Bane(우그라그 치프 베인, 오크 여성)이 있다.
해당 NPC의 대사는 4가지 종류를 랜덤하게 뿌리는 것으로 보이는데, 일단 아래의 메시지를 기억하자.
"I can't help but envy such a great pledge." 를 en.orig.csv 에서 수정하고, my.csv로 저장한다.
나는 사이트 주소를 앞단에 추가했다.
찾은 라인 근처를 보면, 위 NPC가 반복해서 말하는 대사가 없다. 연속적으로 저장되지는 않는다.
Create a lang file
my.csv 를 my.lang 새로운 언어팩으로 만든다.
이때, 대화 메시지를 indexing한 idfile 또한 필수적으로 있어야 한다.
EsoExtractData.exe --createlang gamedata\lang\my.csv --idfile gamedata\lang\en.orig.csv.id.txt -t -p -o gamedata\lang\en.new.lang
... (the following is logs) ...
EsoExtractData v0.53 (30 April 2024)
Converting TXT file 'gamedata\lang\my.csv' to LANG 'gamedata\lang\my.lang'...
Loaded ID file 'gamedata\lang\en.orig.csv.id.txt' with 1070406 rows...
Loaded TXT file 'gamedata\lang\my.csv' with 2140812 rows...
UsePOFormat = 1
Created 1070406 language records from TEXT data...
Created the LANG file from the input TEXT data...
Saved the LANG file to 'gamedata\lang\my.lang'!
Skipping MNF export...no file specified!
my.lang 파일은 애드온의 게임 데이터로 사용해야 하므로,
C:\Users\%USERNAME%\Documents\Elder Scrolls Online\live\AddOns\gamedata\lang
에 넣는다.
Create an addon
이전에 Addon 학습과정을 따라 했다면 FooAddon 이 있을 것이다.
다음처럼 수정한다.
-- SavedVariables 초기화
FooAddon = FooAddon or {}
FooAddon.Defaults = {
lang = "my"
}
FooAddon.savedVars = ZO_SavedVars:NewAccountWide("FooAddonSavedVariables", 1, nil, FooAddon.Defaults)
function FooAddon:SetLanguage()
local currentLang = GetCVar("language.2")
-- 현재 언어가 설정하려는 언어와 다른 경우에만 설정 및 리로드
if currentLang ~= FooAddon.savedVars.lang then
SetCVar("language.2", FooAddon.savedVars.lang)
-- 잠시 대기 후 UI를 리로드하여 설정이 적용되도록 함
zo_callLater(function()
ReloadUI()
end, 500) -- 500 밀리초 대기
else
-- UI가 리로드된 후 언어 값을 확인
d("Current language.2 value: " .. currentLang)
end
end
function FooAddon:OnInit(eventCode, addOnName)
if addOnName ~= "FooAddon" then return end
-- 애드온 로드 시 언어를 설정
self:SetLanguage()
-- 이벤트 핸들러 등록 해제
EVENT_MANAGER:UnregisterForEvent("FooAddon_OnAddOnLoaded", EVENT_ADD_ON_LOADED)
end
-- 애드온 로드 시 OnInit 함수 호출
EVENT_MANAGER:RegisterForEvent("FooAddon_OnAddOnLoaded", EVENT_ADD_ON_LOADED, function(eventCode, addOnName)
FooAddon:OnInit(eventCode, addOnName)
end)
In-game
인게임에서 /reloadui 하고 채팅창 명령으로 /script d(GetCVar("language.2")) 을 실행하면 아래처럼 'my' 결과가 출력되어 있다.
그리고 NPC 에게 대화를 걸다보면 아래 처럼 확인된다.
'엘더 스크롤 온라인' 카테고리의 다른 글
[엘더 스크롤 온라인] Better Dungenon Finder 애드온 (0) | 2024.08.24 |
---|---|
[엘더 스크롤 온라인] 언던티드 서약 퀘스트로 열쇠 얻기 (0) | 2024.08.18 |
[엘더 스크롤 온라인] pchat 애드온 뉴비 가이드 (0) | 2024.07.29 |
[엘더 스크롤 온라인] 리븐스파이어 노스 포인트의 행방 여관 조사하기 (0) | 2024.07.28 |
[엘더 스크롤 온라인] 리븐스파이어 로크라타 언덕 퀘스트 시작점 (0) | 2024.07.27 |