앱내에서 다국어를 지원하기 위해 Unity에서 제공하는 Localization Packag를 사용했습니다.
포스팅 순서는 1. 설치 순서 -> 2. Localization 생성 -> 3. Localization 셋팅 -> 4. Localization 적용 순으로 진행하겠습니다.
1. 설치 순서
1. [Window] -> [PackageManagement] -> [PackageManager] 를 선택합니다.
2-1 좌측에 [Unity Registry] 를 선택 후 검새창에 Localization을 검색해서 Install 합니다.

2-2. 만약에 없는 경우 왼쪽 상단에 [+] 버튼을 클릭후 [Install package from git URL] 을 선택합니다.

3. 입력창에 [ com.unity.localization ] 입력후 Install 버튼을 누릅니다.
NOTE) 해당 유니티 버전은 6000.3.2f1인데 이 버전에서 git URL에 pakcage 설치했을 때 실제 설치가 완료되도 설치되지 않았다는 경고가 뜨는 오류가 있다고 들었어서 해당 부분은 무시했습니다.
2. Localization 파일 생성

1. 왼쪽 상단에 [Edit] -> [Project Settings] 를 선택합니다.

2. 좌측에 [Localization] 선택 후 [Create] 버튼을 클릭하여 원하는 위치에 Localization Settings 파일을 생성합니다.

3. [Add Locale] 버튼을 선택한 뒤 추가할 언어들을 선택하고 [Add Locales] 버튼을 클릭하여 원하는 위치에 언어 파일을 저장합니다.

이때 하단에 [Specific Locale Selector] 를 선택하게되면 Locale Id에 설정된 언어 파일이 있는데 에디터에서 사용할 프로젝트 기본 언어를 설정할 수 입습니다.
3. Localization 셋팅
1. [Window] -> [AssetManagement] -> [Localization Tables] 를 선택합니다.

2. 좌측 상단에 [+ New Table Collection] 버튼을 클릭하면 이미지 오른쪽 창이 뜨게 되는데 여기서 설정한 언어들을 선택한 이후 [Create] 버튼을 클릭하여 원하는 위치에 Table 파일을 생성합니다.

3. [New Entry] 버튼을 클릭하여 각 Localize별 문자열을 설정합니다.



3-1. Localization Tables에 값을 넣을 때 CSV 파일을 활용하면 보다 편하게 사용할 수 있습니다.
NOTE) 주의할 사항은 CSV 파일 상단에 Column 명을 Localization Tables에 Column명과 일치해야 데이터값이 정확하게 들어갑니다.
4. Localization 적용

1. [TextMeshPro에서 마우스 오른쪽 키] -> [Localize] 선택합니다.


2. [String Refernce] 오른쪽 None부분 선택 후 만들어뒀던 Tables에 Key들 중 하나 선택하면 오른쪽 이미지 처럼 적용됩니다.
이렇게 적용해서 아래의 간단한 언어 변경 Script를 버튼에 적용해보면 아래의 Glf처럼 작동됩니다.

// 언어 변경용 Script 예시
public class ChangeLanguage : MonoBehaviour
{
// 전달받은 Locale Code를 기준으로 언어를 변경하는 공통 함수
public void change(string localeCode)
{
// 프로젝트에 등록된 모든 Locale 목록을 가져옴
var locales = LocalizationSettings.AvailableLocales.Locales;
// 등록된 Locale들을 하나씩 검사
foreach (Locale locale in locales)
{
// 현재 Locale의 코드가 전달받은 코드와 같으면
if (locale.Identifier.Code == localeCode)
{
// 해당 Locale을 현재 선택된 언어로 적용
LocalizationSettings.SelectedLocale = locale;
return;
}
}
}
// 한국어 버튼에서 호출할 함수
public void ChangeKo() => change("ko");
// 영어 버튼에서 호출할 함수
public void ChangeEn() => change("en");
}
추가로 만약에라도 Script에서 TextMeshPro의 text를 바꾸게 되는 경우에는 언어 설정을 어떻게 할지가 고민이였습니다.
그래서 찾아보던중 아래의 스크립트로 TableName과 key를 입력해서 데이터를 가지고 올 수 있다는 것을 알게되어 Cash해두는 Manager를 따로 둔 뒤 초기 Start일 때 필요한 String들을 저장해두고 이후에 언어 변경이 일어날 때 다시 호출하여 Refresh 해주는 식으로 사용했습니다.
public async UniTask<string> GetTextAsync(string tableName, string key)
{
return await LocalizationSettings.StringDatabase
.GetLocalizedStringAsync(tableName, key)
.Task
.AsUniTask();
}'Project' 카테고리의 다른 글
| Unity 3D - 장애물 장판 (0) | 2026.03.24 |
|---|---|
| Unity 3D - 코요테 타임(Coyote Time)과 점프 버퍼(Jump Buffer) 적용 (0) | 2026.03.24 |
| Unity 3D - 상점 미리보기 (3D Preview, Render Texture) (0) | 2026.03.24 |
| Unity 2D - sprite 횡 무한맵 (1) | 2025.09.14 |