앱을 만들다 보면 언어 현지화, 다중 언어를 사용하고 싶어진다.
현지화에 맞게 언어를 변경하고 싶을 때 사용하는 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() 함수에 언어 번호를 넣어주면 끝.
도움이 되셨길 바랍니다~!
댓글