UE 현지화 대시보드에서 단어 세기 수가 잘못되었을 때

결론

네이티브 컬쳐의 번역 전 텍스트와 번역 후 텍스트가 달라서 그렇습니다. 동일한 값으로 유지하세요.

세부

먼저 현지화 데이터가 어떤 순서로 가공되는지에 대해 알아두는 게 좋습니다: 링크

텍스트를 수집한 직후의 단계를 좀 더 자세히 보겠습니다.

Project
 └─Content
    └─Localization
       └─ExampleTargetName
          ├─ExampleTargetName.manifest // 1. 수집된 단어들이 저장되는 파일
          ├─en-US-POSIX //네이티브 컬쳐
            └─ExampleTargetName.archive 
              // 2. 번역 데이터, 네이티브 컬쳐
              // 번역 전: [A]수집된 텍스트 / 번역 후: [B]수집된 텍스트
          
          ├─ko
            └─ExampleTargetName.archive
              // 3. 번역 데이터, 네이티브 컬쳐 아님
              // 번역 전: [C]수집된 텍스트 / 번역 후: [D]비어있음
          
          └─jp
             └─ExampleTargetName.archive 
               // 3. 번역 데이터, 네이티브 컬쳐 아님
               // 번역 전: [E]수집된 텍스트 / 번역 후: [F]비어있음

여기서, 네이티브 컬쳐의 번역 파일(.archive) 의 번역 후 텍스트([B]수집된 텍스트) 를 바꾸면 아래와 같이 됩니다.

Project
 └─Content
    └─Localization
       └─ExampleTargetName
          ├─ExampleTargetName.manifest // 1. 수집된 단어들이 저장되는 파일
          ├─en-US-POSIX //Native culture
            └─ExampleTargetName.archive 
              // 2. 번역 데이터, 네이티브 컬쳐
              // 번역 전: [A]수집된 텍스트 / 번역 후: [B]**수정된 텍스트**
          
          ├─ko
            └─ExampleTargetName.archive
              // 3. 번역 데이터, 네이티브 컬쳐 아님
              // 번역 전: [C]**수정된 텍스트** / 번역 후: [D]Empty
          
          └─jp
             └─ExampleTargetName.archive 
               // 3. 번역 데이터, 네이티브 컬쳐 아님
               // 번역 전: [E]**수정된 텍스트** / 번역 후: [F]Empty

여기서 내가 혼동했던 부분이 있습니다.

네이티브 컬쳐가 아닌 번역 파일(.archive)의 번역전 텍스트에 들어오는 텍스트는 네이티브 컬쳐 번역 파일(.archive)의 번역 후 텍스트[B] 가 됩니다.

네이티브 컬쳐의 번역 전 텍스트[A]가 아닙니다.

네이티브 컬쳐 번역 파일(.archive)의 번역 후 텍스트[B] 는, 변경이 될 때 마다, 모든 네이티브가 아닌 컬쳐의 번역 파일의 번역 전 텍스트([C],[E])에 복사되는 방식으로 동기화됩니다. (참고로, 이 때 만약 번역 후 텍스트가 완료됨 상태였다면, 해당 항목은 리뷰 필요 상태로 돌아옵니다.)

가능성이 아주 낮기는 하겠지만, 만약 네이티브 컬쳐 번역 파일(.archive)의 번역 후 텍스트가 수정되어 번역 전 텍스트와 다른 값을 가지게 된다면, 다음의 과정을 거쳐 단어 세기 과정에서 제외됩니다.

FLocTextHelper::GetWordCountReport() GitHub 링크 에서, 실제로 단어를 세는 부분은 여기입니다: GitHub 링크 여기서 각 컬쳐 별로, manifest 의 항목들을 순회하면서 단어를 세게 되는데요.

여기서 사용되는 FLocTextHelper::GetExportText() GitHub 링크 함수가 문제가 되는 부분입니다. 이 함수의 첫 부분에서 OutSource = InSource; 로 일단 manifest 에서 “수집된 단어"를 OutSource에 복사합니다. 그리고 중간에 보면 아래와 같은 코드가 있습니다. GitHub 링크

 1
 2
 3
 4
 5
 6
 7
 8
 9
10

    TSharedPtr<FArchiveEntry> ArchiveEntry = FindTranslationImpl(InCulture, InNamespace, InKey, InKeyMetadataObj);
    if (ArchiveEntry.IsValid())
    {
        // Set the export text to use the current translation if the entry source matches the export source
        if (ArchiveEntry->Source.IsExactMatch(OutSource))
        {
            OutTranslation = ArchiveEntry->Translation;
        }
    }

번역 파일(.archive) 의 번역 전 텍스트manifest 에 저장된 수집된 텍스트 와 일치하는지 체크를 하고 있습니다.

하지만, 앞서 말한대로, 만약 네이티브 컬쳐 번역 파일(.archive)의 번역 후 텍스트를 수정했다면, 여기서의 번역 파일(.archive) 의 번역 전 텍스트 는 네이티브 컬쳐 번역 파일(.archive)의 번역 후 텍스트가 됩니다. 즉, 이 체크는 항상 실패합니다.

예를 들어, 텍스트 수집 직후 상태가 다음과 같았다면

항목 값 예시 위치
0. 수집된 텍스트 수집된 텍스트 .manifest
1. 네이티브 컬쳐의 번역 전 텍스트 수집된 텍스트 .archive
2. 네이티브 컬쳐의 번역 후 텍스트 수집된 텍스트 .archive
3. 작업할 컬쳐의 번역 전 텍스트 수집된 텍스트 .archive

네이티브 컬쳐의 번역 후 텍스트를 수정했을 경우 아래와 같이 됩니다.

항목 값 예시 위치
0. 수집된 텍스트 수집된 텍스트 .manifest
1. 네이티브 컬쳐의 번역 전 텍스트 수집된 텍스트 .archive
2. 네이티브 컬쳐의 번역 후 텍스트 수정한 텍스트 .archive
3. 작업할 컬쳐의 번역 전 텍스트 수정한 텍스트 .archive

0 과 3 의 값이 다르면 카운트 대상에서 제외되는 것인데, 3의 값은 2에서 동기화됩니다. 그래서 2의 값을 바꾸면 카운트 대상에서 제외됩니다.

참고로, 이 부분은 컴파일에 영향을 주지 않습니다. 단어 세기의 결과는 틀리게 나오지만, 컴파일 시 컴파일 된 현지화 파일(.locres)에는 해당 단어들이 제대로 들어갑니다. 이 이유로 문제를 찾기가 쉽지 않았습니다.

태그