본문 바로가기
Unity

[ UNITY ] Localization 사용법, 언어 현지화, 다중언어

by 까꿍봉봉 2023. 3. 14.
728x90
반응형

앱을 만들다 보면 언어 현지화, 다중 언어를 사용하고 싶어진다.

현지화에 맞게 언어를 변경하고 싶을 때 사용하는 Localization.

사용법은 간단하다.

순서대로 차근차근 따라 하면 쉽게 언어를 변경할 수 있다.

 

먼저 Package Manager에서 Localization을 검색해서 설치해 주자.

Unity 버전이 낮을 경우에는 검색을 해도 안 나오는 경우가 있었다.

그럴 때는 왼쪽에 +를 누르면 "git URL"이라고 있다. 거기에 com.unity.localization을 입력하고 Add를 누르면 된다.

com.unity.localization

 

설치가 끝나고 Edit - Project Settings - Localization에 들어간다.

 

Create를 누르면 폴더가 나오는데, 새 폴더를 하나 만든다.

 

난 [ 8.LocalSettings ]라고 폴더를 만들었고, 만든 폴더를 더블클릭한다.

 

만든 폴더 안에 LocalSettingLanguage라는 이름의 파일을 저장한다.

 

그러면 창이 조금 변한다. 

locale Generator를 클릭한다. 오른쪽 창이 나오는 데 사용할 언어를 선택한다.

난 영어랑 한글을 선택한 후 Generate Locales 클릭.

폴더가 또 나오는데 처음에 만들었던 "8.LocalSettings"폴더를 선택한 후 

폴더 안에 새로운 폴더를 만들어 준다.

 

난 Locales라고 폴더를 만들었다.

그 폴더를 더블클릭 한 후 폴더선택 버튼을 클릭한다.

 

그러면 위에 내가 사용할 언어 두 개가 적용되어 있다.

그리고 난 후 Specific Locale Selector를 선택한다.

그러면 창이 하나 뜬다. 이것은 기본 언어를 어떤 걸 사용할 것인지 선택해라는 것이다.

난 기본 언어를 한글로 하기 때문에 "Korean"을 선택했다.

 

Project Locale Identifier도 동일하게 언어를 선택해 준다.

 

Window - Asset Management - Localization Tables를 선택한다.

 

내가 쓸 언어를 적용시킬 테이블을 하나 만들어줘야 한다.

New Table Collection 선택한 후 Type은 String Table Collection을 선택한다.

그리고 그 테이블 이름을 써주면 된다. 난 StringlanguageTable이라고 적어주었다.

 

그러고 나서 Create버튼을 클릭하면 또 폴더가 하나 뜬다.

처음에 만들었던 "8.LocalSettings"폴더를 더블클릭하고 그 안에 새로운 폴더를 만들어준다.

난 Tables라는 폴더를 하나 만들었다.

 

Tables 폴더를 더블클릭한 후 폴더 선택 버튼을 누른다.

 

그러면 창이 이렇게 되어있을 것이다.

Add New Entry를 누르면 입력할 수 있는 란이 생긴다.

사용할 명령어 인 Key 이름을 지어주고, 변경할 언어를 적어준다.

그리고 위에 중괄호로 되어있는 모양의 버튼을 누르면, 오른쪽처럼 나타난다.

 Preload All Tables를 선택하면, 아래도 자동을 선택이 된다. 꼭 체크를 해줘야 한다.

 

이제 내가 만든 걸 적용할 차례다.

난 버튼에 있는 글자를 변경하려고 한다.

TextMeshPro에 Localize String Event를 넣어준다.

 

그리고 String Reference를 선택하면 내가 만들었던 테이블과 Key명령어가 나타난다.

만들었던 Key값을 선택한다.

 

Update String에서 +를 선택한다.

그리고 TextMeshPro로 드래그해준다.

 

타입이 TextMeshProUGUI이니 선택한 후 text를 선택한다.

 

그리고 플레이하면 Game 씬 오른쪽에 버튼 같은 게 생겨있다.

거기서 언어를 선택하면 자동으로 변경되는 걸 확인할 수 있다.

이건 Unity 에디터에서 사용할 수 있는 것이고, 이게 코딩으로 변경할 수 있게 하자.

 

밑에 코딩을 사용하면 된다.

언어 순서를 저 차례가 순서인 거 같다.

영어가 0번, 한글이 1번이었다.

using UnityEngine.Localization.Settings;

void Start()
    {
        int id = PlayerPrefs.GetInt("Language", 0);
        LanguageChange(id);
    }

    private bool active = false;

    public void LanguageChange(int _localeId)
    {
        if (active.Equals(true))
            return;
        StartCoroutine(SetLanguage(_localeId));
    }

    IEnumerator SetLanguage(int _localeId)
    {
        active = true;
        yield return LocalizationSettings.InitializationOperation;
        LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[_localeId];

        PlayerPrefs.SetInt("Language", _localeId);
        active = false;
    }

Language Manager를 하나 만들어서 스크립트를 넣어준다.

그리고 세팅창 같은 곳에 언어선택하는 화면을 만들어 준 후에 

LanguageChange() 함수에 언어 번호를 넣어주면 끝.

 

도움이 되셨길 바랍니다~!

728x90
반응형

댓글