[Unreal5] 언리얼 Locationlization 현지화 적용

Boramen·2024년 1월 30일
2
post-thumbnail

프로덕트를 개발중에 언어 변경에 대한 요구사항은 심심치 않게 거의 항상 있었던 것 같다. 언어변경이 필요할때마다 UI에 전시 되는 위젯을 직접 전부 바꿔 실행파일을 다르게 패키징해 사용한다 하면 엄청 귀찮고 번거로운 일이 되었겠지만 언리얼에서는 다행히 Localization 기능을 제공한다.

언리얼 도큐먼트에 나와 있는 내용을 인용해서 말하자면 언리얼에서 제공하는 현지화(Localization)은 아래와 같다고 한다.

Localization 현지화

현지화 및 국제화

  • Localization(현지화) 및 Internationalization(국제화)는 '현지화'의 산물로 결합되는 두가지의 개념이다.
  • 하지만 그 둘은 별개의 것으로, 언리얼 엔진에서는 다르게 처리한다. 언리얼의 현지화 시스템은 '텍스트'유형을 중심으로 하는 반면, 국제화 지원은 유니코드용 국제 구성요소(ICU) 라이브러리를 활용해야 한다.

ICU 및 현지화 지원

  • ICU는 국제화 라이브러리로, 언리얼에서는 이를 사용하여 문화권(컬처) 관련 데이터의 취급 또는 처리하고 있다.
  • ICU 작동을 위해 필요한 컬처 관련 데이터는 ICU 자체 외부에 저장되며, 언리얼은 프로젝트 크기를 최소화하기 위해 대략적인 데이터 세트를 제공한다.
  • 어느 문화권(컬처)를 설정할지는 프로젝트를 현지화하려는 지역에 따라 달라지며, 해당 설정은 프로젝트 세팅에서 설정할 수 있다. 국제화 데이터를 올바르게 패키지하기 위해서는 프로젝트 세팅의 고급 패키지 섹션 아래 일부 세팅을 조정해야 한다.

컬처

  • 언리얼 컬처에는 특정 로케일에 대한 국제화 정보가 포함되어 있다. 컬처 이름은 하이픈으로 구분된 세 부분으로 IETF 언어 태그로 구성된다.
  • 특정 컬처의 가장 넓은 범위를 포함하려면 가장 구체적이지 않은 유효 컬처 코드를 사용하면 된다. 보통 언어 코드만 넣으면 되지만, 지역에 따라 언어가 달라질 수 있음에 유의해야 한다.
  • 대부분의 경우 이런 지역적 변형은 특정 국가 코드에 한정시켜, 해결한다. 하지만 중국어, 스페인어 같이 조금 더 복잡한 경우는 언리얼 공식 문서를 참고하여 활용해야 한다.

현지화 타깃

  • Localization Targets(현지화 타깃)은 현지화 데이터의 독립형 모듈로 아래와 같은 정보가 있다.

    • 지정된 소스 세트에서 수집한 텍스트가 있다.
    • 이 텍스트는 manifest 파일에 저장된다.
    • 그 manifest의 번역은 컬처 별 archive 파일에 저장한다.
    • 이를 컬처 별 현지화 리소스(locres)파일로 컴파일하고, 시스템에서 그 locres 파일을 표시한다.
  • 프로젝트는 현지화 타깃을 하나만 만들어 단순하게 할 수 있지만 여러 개로 만들어 프로젝트의 현지화 데이터를 섹션별로 나눌 수도 있다.

  • 언리얼 에디터의 현지화 타깃은 언리얼 나머지 부분과 분리되어 있어, 게임에 현지화 데이터를 포함시키지 않고 에디터를 현지화 할 수도 있다.

  • 일반적으로 게임은 모든 바탕 프로젝트의 현지화 데이터에 대해 하나의 현지화 타깃이 있고, 확정되는 부분에 대해 추가 현지화 타깃을 만든다.

현지화 파이프라인

  • 언리얼 현지화 파이프라인은 'author-at-source' 방식을 따르고 있다. 즉 UI에 'Hello World'라는 텍스트가 필요하면 텍스트 프로퍼티에 'Hello World!'를 입력하면 현지화 수집 툴(gatherer)이 그 텍스트를 현지화 할 수 있도록 한다.
  • 소스에 저작하는 방식은 언리얼 내부에서 동적으로 작동하는 거라 개발자가 따로 처리해야 하는 부분은 없다.
  • 하지만 프로젝트에 사용할 텍스트를 엄격히 제어하는 팀에게는 오히려 좋지 않을 수 있어 이를 해결하기 위해 언리얼에서는 스트링 테이블을 지원하여 'author-once-and-reference' 현지화 방식을 사용할 수 있다.
  • 현지화 파이프라인 자체는 현지화 타깃에서 작동하며, 현지화 타깃은 두 부분으로 이루어진다. (Config/Localization/에 저장되는) 환경설정과 (Content/Localization/{TargetName}/에 저장되는) 데이터 이다.

Localization 설정하기

1. 언리얼 엔진 툴 > 현지화 대시보드를 클릭하여 대시보드를 실행한다.

2. 대시 보드 화면이 전시된다.

3. 위젯 및 에셋에서의 텍스트 변경이 필요하므로 텍스트 수집패키지에서 수집의 설정을 활성화 한다. 패키지에서 수집의 세부 항목 중 파일 확장자 부분을 보면 '.umap', '.uasset'이 설정되어 있다.

4.패키지에서 수집 > 경로 와일드카드 포함에서 텍스트 수집을 원하는 폴더의 경로를 입력한다.
이 예제에서는 텍스트 수집이 필요한 모든 에셋이 Content/Blueprint/* 안에 있으므로 해당 경로를 입력한다.

5. 텍스트 수집에 대한 설정을 완료한 뒤 컬처의 텍스트 수집 버튼을 눌러 텍스트 수집을 시작한다.

6. 텍스트 수집이 완료되는 것을 확인한다. 텍스트 수집이 정상적으로 완료된 것을 확인한 뒤 아래의 확인버튼을 클릭한다.

7. 확인 버튼을 누르게 되면 게더링 된 텍스트의 개수가 수집한 컬처의 단어수에 전시된다.

8. 한국어 컬처로 단어가 게더링 된 것을 확인하고 영어로 번역을 위해 영어 컬처의 번역 편집 버튼을 클릭한다.

9. 영어 컬처 편집 창이 전시된다. 상단에 미번역, 리뷰필요, 완료로 되어 있는 탭을 확인하고 미번역 부분을 확인하여 영어로 번역이 필요한 텍스트를 확인한다. 옆에 'Translation'창에 있는 텍스트 필드를 선택하여 각 텍스트의 영어 번역을 입력한다.

10. 번역이 완료 되었으면 좌측 상단에 있는 저장 버튼을 클릭하여 저장한다.

11. 현지화 대시보드의 컬처 부분에서 각 컬처별로 'translate' 버튼을 클릭하게 되면 추후 위젯에서 각 컬처별로 현지화가 적용된 프리뷰를 확인할 수 있다. 'translate' 버튼을 클릭하여 컴파일을 완료 한 뒤 에디터를 다시 실행한다.

12. None(없음)으로 되어 있는 위젯의 현지화 프리뷰 설정을 영어로 변경하면, 번역을 마친 텍스트가 영어로 바뀌어 전시된다.

13. 에디터 편집> 프로젝트 세팅을 클릭하여 패키징을 선택한다. 패키징의 고급 설정 중 패키지시 포함할 언어에서 패키징시 현지화가 필요한 언어인 '영어'와 '한국어'를 체크한다.

.archive 파일 직접 수정

  • 언리얼 현지화는 주로 에디터의 현지화 대시보드를 통해 진행되나 추천하는 방법은 아니여도 직접 .archive 파일을 수정하여 번역 업무를 진행할 수 있다.
  • Content 폴더 안에 하위 폴더로 있는 Localization 폴더를 확인해보면 현지화 설정에 관련된 파일들을 확인할 수 있다.
  • Content/Localization/Game 폴더 안으로 들어가게 되면 위에 현지화 설정을 했던 culture인 en , ko-KR 폴더가 있는 것을 확인할 수 있다.
  • 이 중 en 폴더안으로 들어가게 되면 확장자가 .archive로 되어 있는 파일을 확인할 수 있는데 해당 파일을 수정하여 번역 작업이 가능하다. .archive 파일은 JSON 형태로 데이터가 구성되어 있고 내용은 아래 이미지와 같다.
  • 위 이미지를 보면 Source 부분과 Translation 부분이 있는데 Source의 값은 원래 원본의 텍스트이고 Translation의 값은 번역이 적용된 텍스트 값이다. 해당 파일의 Translation.Text 부분을 수정하여 번역된 데이터를 변경할 수 있다.
  • 해당 파일의 Tranlation.Text 값을 변경한 후 파일을 저장한 뒤 에디터를 실행하고 현지화 대시 보드를 킨다.
  • 현지화 대시보드에서 영어 > translate 버튼을 눌러 번역 창을 킨다.
  • 영어 번역 에디터에서 .archive 파일에서 바꿨던 내용이 반영된 것을 확인할 수 있다.
  • 변경된 번역 내용을 확인한 뒤 '텍스트 컴파일' 버튼을 눌러 번역된 내용을 Game 클라이언트에 반영할 수 있게 한다.
  • 텍스트 컴파일을 완료 한 뒤 독립형 실행으로 프로젝트를 실행하여 .archive에서 수정한 번역 내용이 반영된 것을 확인한다.

현지화 런타임 변경 예시

  • 현지화 설정을 변경할 수 있는 함수를 호출하여 클라이언트에서 런타임 중 적용되어 있는 언어 변경이 가능하다.
  • 함수 'Set Current Culture'를 호출하여 원하는 언어 상태로 culture를 변경할 수 있다.
  • 함수 'Get Localized Cultures' 를 호출하여 현재 활성화되어 있는 현지화 culture 목록을 IETF 언어로 반환한다.
  • 함수 'Get Culture Display Name' 를 호출하면 IETF 언어로 되어 있는 culutre 명이 display 형으로 반환된다.
    ex ) en -> English
  • 함수 'Get Current Culture'를 호출하면 현재 설정되어 잇는 현지화 culture 명이 전시된다.

구현 예시

1. 현지화 언어 설정 및 번역 과정이 완료되었다고 가정한다.
2. Get Current Culture 함수를 호출하여 현재 활성화 되어 있는 culture 명을 반환한다.
3. culture 명을 기준으로 String Switch를 통해 영어 일 경우 한국어로 변환, 한국어일 경우 영어로 변환하게 설정한다.
4. 변환 시 'Set Current Culture' 함수를 호출하여 현재 활성화 되어 있는 culture 명을 변환한다.
5. 해당 코드를 원하는 시점( 버튼 클릭, 키 입력 )에 바인딩 한다.

현지화 대시보드를 통해 현지화 별로 번역이 가능하나 별도로 폰트를 설정하지는 못한다. 위젯에 텍스트를 전시 할때 적용되는 폰트가 각 현지화 언어를 지원하는지 확인해야 하고, 버튼 등에 자식으로 추가한 텍스트인 경우 버튼, 이미지 등이 현지화 텍스트에 따라 사이즈가 변경되지 않게 UI를 잘 구현해야 할 것으로 보인다.

profile
Unreal Engine Developer

0개의 댓글