UE 현지화가 잘 동작하지 않는다면

분명 미래의 나는 여기서 또 걸려 넘어질것이라고 나는 생각합니다. 그래서 나는 메모를 남깁니다.

Needs Review 체크: 뭔가가 안보이거나 잘못 표시되고 있다면

항목이 안 보이면, 해당 항목이 Needs Review 에 걸려있지 않은지 확인하세요.
이 기능은 여러 사람이 작업할 때는 꼭 필요한 기능이겠으나, 제 경우엔 여러 차례 엉뚱한 곳을 헤매게 만들었던 요소입니다.

디버깅이 더 빠를 수 있다

문서나 포스팅 검색보다는 디버깅이 빠를 수 있습니다.

현지화 작업은 여러 단계에 걸쳐 진행됩니다. 그리고 그 사이에는 비슷해보이지만 미묘하게 서로 다른 요소들이 많이 존재합니다. 심지어 언리얼 엔진의 현지화 관련 기능들은 수정이 자주 되었던 것으로 보입니다. 이것들이 의미하는 바는 다음과 같습니다: 언리얼 엔진의 현지화는 문서화의 난이도가 매우 높습니다. 이 때문에, 현지화 작업에 대해 웹에 존재하는 자료는 세부적이거나 깊이 있는 내용을 제공하지 못하는 경우가 많습니다. 또한 최신 사항을 반영하지 못하는 경우도 있을 수 있습니다.

현지화 데이터를 엔진이 로드하는 부분

FLocalizationResourceTextSource::LoadLocalizedResources() : GitHub 링크 폴더명이 하드코딩되어 있는 게 강렬했습니다. 하지만 생각해보면 Contents 폴더 이름도 하드코딩이죠.

Count Words 동작 문제와 관련하여 commandlet 디버깅을 했던 것에 관한 메모

사용한 옵션은 다음과 같습니다.

-run=GatherText -config="Config/Localization/LocalizationTargetName_GenerateReports.ini"

기록해놓고 싶은 주요 중단점들의 위치는 아래와 같습니다.

  • FLocTextHelper::GetWordCountReport() : 단어를 세는 지점 GitHub 링크
  • UGatherTextCommandlet::ProcessGatherConfig() : 커맨들렛 동작 시작지점 GitHub 링크

스트링 테이블 현지화와 더미 컬쳐

이 포럼 게시물은 인상적이었습니다.

How to localize your game using String Tables

네이티브 컬쳐의 번역 전 후 텍스트는 동일해야 한다

이것들이 달라지면, 단어 세기가 잘못 됩니다. 이에 대해서는 별도의 게시물에서 자세히 다루겠습니다. 참고로 이렇게 될 경우, 번역된 텍스트들은 멀쩡하게 잘 출력되기 때문에, 어디가 잘못된 건지 파악하는 게 쉽지 않습니다.

현지화 워크 플로우와 중간 리소스들이 생성되는 과정

타겟 이름을 ExampleTargetName 로 하고, en-US-POSIX, ko, jp 의 컬쳐를 사용한다고 가정하겠습니다. en-US-POSIX 의 정체와 용도에 대해서는 위에서 언급한 포럼 게시물을 참고하세요. 타겟 이름은 위의 현지화 대시보드 스크린샷을 보면 알 수 있을 것이라고 생각합니다.

이와 같이 현지화 관련 세팅을 하고 텍스트를 수집하면, 아래와 같이 수집한 내용이 저장됩니다.

Project
 └─Content
    └─Localization
       └─ExampleTargetName
          ├─ExampleTargetName.manifest 
           // 수집된 텍스트들이 저장되는 곳.
          
          ├─en-US-POSIX //Native culture
            └─ExampleTargetName.archive 
             //네이티브 컬쳐 번역 데이터, 컴파일 전.
             //수집된 텍스트들은 여기에 복사되며
             //번역 후 텍스트에도 동일하게 수집된 텍스트가 채워집니다.
          
          ├─ko
            └─ExampleTargetName.archive
             //네이티브가 아닌 컬쳐의 번역 데이터, 컴파일 전
             //수집된 텍스트들은 여기에 복사되며
             //번역 후 텍스트는 비어 있습니다. 사용자가 채워야 합니다.
          
          └─jp
             └─ExampleTargetName.archive 

수집된 단어들이 manifest 파일 에 저장되며, 이를 기반으로 각 컬쳐 폴더의 archive 파일에 번역 전 텍스트의 값이 채워지게 됩니다.

예외적으로, 네이티브 컬쳐의 경우엔 번역 전 텍스트와 번역 후 텍스트에 같은 내용이 채워지게 됩니다.

보통 여기서 번역 후 텍스트들(여기서는 ko 와 jp)에 값을 채워 넣은 다음, 텍스트를 컴파일해서 최종 현지화 데이터를 만들게 될 것입니다.

여기까지 진행하면 아래와 같은 형태가 됩니다.

Project
 └─Content
    └─Localization
       └─ExampleTargetName
          ├─ExampleTargetName.manifest 
          ├─en-US-POSIX 
            └─ExampleTargetName.archive 
            └─ExampleTargetName.locres //컴파일된 현지화 데이터
          
          ├─ko
            └─ExampleTargetName.archive
            └─ExampleTargetName.locres 
          
          └─jp
             └─ExampleTargetName.archive 
             └─ExampleTargetName.locres 
태그