유니티3D

다국어 처리

codehunter 2024. 5. 13. 11:59

이 글은 개인적으로 학습한 내용을 기록하기 위한 글이다. 

 

유니티 : 2022.3.22f1

로컬라이제이션 : 1.4.5

 

유니티가 기본으로 제공하는 Localization를 사용하면 다국어 처리를 비교적 쉽게 처리할수 있다.

 

골드메탈의 영상 강좌 : https://youtu.be/VNhzMEsy7xc

참고 블로그는 https://dev-junwoo.tistory.com/125

 

일단 Localization 패키지를 받는데 이때 Addressables 패키지가 설치되어 있지 않다면 같이 받아야 한다.

 

Localization 패키지를 다운받고 최초 세팅을 진행해야 하는데 Project Settings > Localization 선택하면 세팅파일이 없는 상태인데 아래 Create 버튼을 눌러서 적당한 폴더에다가 Setting 파일을 만든다. 이왕이면 Locale 관련 폴더를 따로 만들어두면 관리에 편리하다.

 

만든 세팅파일의 인스펙터를 살펴보면 중간 부분에 Locale Selectors 항목이 있는데 나머지 2개는 놔두고

Specific Locale Selector를 세팅해야 한다. 현재는 비어있다. 바로 위에 보면 Locale Generator 버튼이 보이는데 이걸 눌러서 원하는 국가의 언어세팅를 생성한다. 

 

영어, 한글을 선택한다. 하단의 Generate Locales를 눌러서 언어별 세팅파일을 저장한다.

 

생성하고 나면 폴더와 인스펙터 화면은 다음과 같이 된다.

위 화면에서 Specific Locale Selector 항목의 첫번째 Locale ID에서 언어를 세팅하고 항목을 지원하려는 언어갯수만큼 추가해서 세팅한다. 하단에 보면 Project Local Identifier 항목이 이 프로젝트에서 기본이 되는 언어를 세팅한다.

 

여기까지가 기본 세팅이 완료된 상태이다.

 

이제 언어별로 데이터를 구성해야 하는데 상단메뉴의 Window > Asset Management > Localization Tables를 누르면 테이블 세팅화면이 뜬다.

 

여기서 New Table Collection 탭 > 타입은 String Table Collection > Name에다가는 적당한 이름을 넣고 Create를 눌러서 

생성한다.

 

세팅이 되면 아래와 같이 언어별 데이터를 세팅할수 있는 테이블 화면이 뜨게 되는데 키값 항목은 게임내에서 쓰일 키값을 세팅하고 각 언어별 데이터를 입력하면 된다.

 

이후 프로그램처리를 하면 되는데. 몇가지 방식이 있다.

 

번역해야 할 언어가 있는 항목에다가 Localize String Event 컴포넌트를 붙여서 String Refernce에서 위 테이블에서 입력한 키값을 선택한뒤 Update String 이벤트에다가 변경시 처리할수 있는 이벤트를 연결하면 된다. 여기서는 해당 텍스트를 연결하면 된다.

즉 Text 컴포넌트가 있는데는 Localize String Event 이벤트를 붙여서 자동으로 처리할수 있다는 얘기이다.

 

이런식으로 인스펙터적으로 처리하는 방법과 프로그램적으로 처리하는 방법이 있는데

 

ChangeRoutine 으로 원하는 언어 테이블로 변경하는 것이고, GetLocaleString으로 변경된 언어 테이블에서 얻고자 하는 키값에 해당하는 데이터를 얻는 함수이다. 이 둘을 이용해서 프로그램적으로도 언어 처리를 할수가 있다.

public class LocaleManager : MonoBehaviour
{
    bool isChanging;

    public void ChangeLocale(int index)
    {
        if (isChanging)
            return;

        StartCoroutine(ChangeRoutine(index));
    }

    IEnumerator ChangeRoutine(int index)
    {
        isChanging = true;

        yield return LocalizationSettings.InitializationOperation;
        LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[index];

        isChanging = false;
    }

    public string GetLocaleString(string key)
    {
        Locale currentLanguage = LocalizationSettings.SelectedLocale;
        return LocalizationSettings.StringDatabase.GetLocalizedString("EnglishKoreaTable", key, currentLanguage);
    }
}

 

사용 예

void Start()
{
    // 디폴트 언어 설정
    localeManager.ChangeLocale(1); // 0:영어, 1:한글
}


...

강제로 특정언어의 문자열로 변경할때
...
string temp = localeManager.GetLocaleString("UI_Title_InsertCoin");
UI.txtCoinTitle.text = temp;
...

'유니티3D' 카테고리의 다른 글

구글 애드몹 광고  (4) 2024.04.29