Unity : Localization
https://www.youtube.com/watch?v=VNhzMEsy7xc
1. 설치
Localization 패키지, Addressables 패키지 설치
Edit > Project Settings > Localization > ( _Locale 폴더 새로 만들어서) Create
Locale Selectors
Command Line Locale Selector : 커맨드로 언어 바꾸는 거
System Locale Selector : 시스템에서 언어 설정돼있는거
Specific Locale Selector : 이 부분을 건드려야 된다
2. 파일 추가
Add Locale > 원하는 언어 선택 > (_Locale 폴더에) Add Locales
Specific Locale Selector를 골랐던 언어만큼 더 추가하고 Locale Id 설정
Project Locale Identifier
이 프로젝트에서 기본이 될 언어는 무엇인지
Window > Asset Management > Localization Tables > New Table Collection (_Locale 폴더 안에 Tables 폴더 새로 만들어서)
New Entry > Key는 딕셔너리의 key라고 생각하고 쓰면 된다
(필수는 아님) 다 채웠으면 위쪽의 중괄호 두개로 감싸져 있는 기호 클릭하면 metadata(이 데이터가 무슨 데이터인지 코멘트) 수정
3. 컴포넌트 설정
다국어화할 텍스트 오브젝트에 Localize String Event 컴포넌트 (Localize 이벤트가 실행되면 문자열을 해당하는 언어로 바꿔줌) 추가
(컴포넌트 우측 상단 점 세개 눌러서 Localize 눌러도 추가됨)
String Reference > ‘None (String)’ 클릭 > 텍스트에 해당하는 String 선택
Update String > 해당 오브젝트의 Text 혹은 TextMeshPro 할당 > (TextMeshPro 기준) No Function 클릭 > TextMeshProUGUI > text
Runtime only를 Editor And Runtime으로 바꾸면 게임 안 켜고도 바로 보임
게임 켜보면 게임 뷰 우측 상단에 언어 설정이 생기고, 바꾸면 언어 바꿔서 볼 수 있다.
컴포넌트에서 직접 Table Entry를 추가할 수도 있다.
String Reference가 안 보여서 직접 찾아가야 한다면 (버전마다 다름)
Preferences > Localization > Asset Search Picker, String Search Picker 체크 해제
Update String
언어 바꿀 때 바뀌는 텍스트 설정
4. 스크립트로 언어 변경
Locale Manager 오브젝트를 만들고
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;
}
}
스크립트 붙인 뒤에
버튼의 OnClick()에 LocaleManager.ChangeLocale 할당
Asset Table Collection
언어에 따라 스프라이트, 텍스처도 바뀌게 하고 싶을 때 사용
(영상 15:45부터)
언어별 오브젝트 속성 변경
Window > Asset Management > Localization Scene Controls
(영상 19:20부터)
스마트 문자열로 데이터가 포함된 동적 문자열
Entry에서 Smart를 체크하고 Edit을 누른 뒤
Local Variables를 바로 추가하거나
Create > Localization > Variables Group를 만들고 Local Variables에 Nested Variable Group을 추가한 뒤
”{global.player-name}가 접속했습니다” 와 같이 적용
Preview를 누르면 어떻게 출력될지 보여줌
(영상 22:32부터)
Locale 데이터에 직접 접근하여 가져오기
(영상 30:49부터)
가져오는 예시
Locale currentLocale = Localization.SelectedLocale;
nameText.text = LocalizationSettings.StringDatabase.GetLocalizedString("MyTable",talker.talkerName,currentLocale);
중간에 언어를 바꾸면 이미 불러온 데이터가 갱신되지 않는 경우가 생길 수 있으니
private void Start()
{
LocalizationSettings.SelectedLocaleChanged += OnChangeLocale;
}
로 이벤트를 할당한다
CSV 파일로 저장 및 불러오기
Table 가서 Extension > Csv Extension 추가 > Save
(Google Sheets Extension으로 온라인 연동도 가능. 보안 문제가 있기 때문에 매뉴얼 보면서 진행해야함)
Open으로 불러오기도 가능