[ Localization 사용을 위한 초기 세팅 ]
1 . 설치하기
[ 설치하기 ]
- PackageManager - Localization 패키지를 설치한다 .
- 패키지의 효과적인 관리를 위해 Addressable도 같이 설치가 될 것이다 .
2 . 설정 세팅하기
[ 세팅 생성하기 ]
- Project Setting - Localization - Create 로 세팅을 생성해준다 .
[ 언어 추가하기 ]
- Command Line Locale Selector : 커멘드 라인에서 변경시 사용
- System Locale Selector : OS에 세팅된 기본언어를 가져올때 사용
- Specific Locale Selector : 컨텐츠 내부 임의적 선택시 사용 . 우리는 이걸 만들어준다 .
- Add Locale로 언어를 추가해주자 .
- 원하는 언어를 선택하자 . Ko와 En을 선택하였다 .
- 하단 +를 눌러 Specific Locale Selector 를 추가하고 방금 만든 언어를 넣어준다
- Project Locale Identifier는 프로젝트에서 기본이 될 언어를 말한다 .
3 . 테이블 추가하기
Window - Asset Management - Localization Tables 선택
- New Table Collection - String Table Collection을 선택한다 . 이후 Create 로 생성한다 .
- 위와 같이 테이블이 생성된다 .
[ 테이블 채우기 ]
- 다음과 같이 내용을 채워준다 .
- Edit Table는 테이블에 대한 정보를 넣을수 있는 부가정보이다 .
[ Localization 사용하기 ]
1 . Text에 적용하기
[ TMP에 적용하기 ]
- 로컬라이징 대상 텍스트 옆 점 3개를 누르고 Localize를 선택
- string Reference를 눌러준다 . 여기서 1번 테이블을 눌러 적용 .
- Editor String 하단 Editor And Runtime으로 바꿔주어 에디터에서도 볼 수 있게 한다 .
[ 테이블 바로 생성하기 ]
- Table Collection이 선택된 상황에서 Add Table Entry를 눌러 바로 추가가 가능하다
- 다음과 같이 Entry Name - English - Korea를 채워주고 Add Table Entry를 해주면 완료 .
- 실행해보면 이렇게 바뀜을 볼 수 있다 .
- 우측 상단 언어의 변경으로 즉석에서 바뀌는걸 볼 수 있다 .
2 . Smart 사용하기
[ 변수 그룹 생성 ]
- Create - Localization - Variable Group을 눌러 변수 그룹을 생성
- 변수를 만든다 .
[ Smart 텍스트 사용 ]
- Smart 체크후 {}안에 방금 생성한 Variables의 Name을 넣는다 .
- Preview를 통해 다음과 같이 보인다면 성공 .
[ 스크립트에서 사용하기 ]
1 . 언어 설정 변경하기
[ 언어 변경 ]
async UniTask SetUp()
{
await LocalizationSettings.InitializationOperation;
}
void ChangeLocalization(int index)
{
LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[0];
}
- 먼저 로컬라이제이션 세팅이 준비될때까지 대기가 필요하다 . InitializationOperation을 통해 대기한다 .
- 이후 Selected Locale을 통해 언어 설정 변경이 가능하다 .
2 . 문자열 가져오기
[ 동기 ]
void GetLocal()
{
Locale currentLanguage = LocalizationSettings.SelectedLocale;
var a = LocalizationSettings.StringDatabase.GetLocalizedString("MyTable", "Cry", currentLanguage);
//만약 currentLanguage가 없다면 현재 언어를 기준으로 가져온다 . 즉 , 선택사항
var a2 = LocalizationSettings.StringDatabase.GetLocalizedString("MyTable", "Cry");
}
- 위와 같이 동기 방식으로 가져 올 수 있다 .
[ 동기 ]
async UniTask<string> GetLocalAsync()
{
return await LocalizationSettings.StringDatabase.GetLocalizedStringAsync("MyTable", "Cry");
}
- GetLocalizedString: 성능과 차단이 큰 문제가 아닌 간단하고 즉각적인 요구에 가장 적합합니다. 빠르고 간단한 현지화 작업에 이상적입니다.
- GetLocalizedStringAsync: 성능이 중요하고 대규모 지역화 데이터 세트를 로드하거나 비동기 초기화를 처리해야 하는 시나리오에 가장 적합합니다. 강력하고 확장 가능한 현지화 솔루션에 이상적입니다.
3 . String.Format을 통해 문자열 대체하기
[ 대체 ]
public async UniTask<string> GetLocalizedStringAsync(string key, params string[] replacements)
{
var localizedString = await LocalizationSettings.StringDatabase.GetLocalizedStringAsync(key);
if (replacements != null && replacements.Length > 0)
{
localizedString = string.Format(localizedString, replacements);
}
return localizedString;
}
4 . SetReference로 변경하기
[ 대체 ]
void SetReference()
{
localizedString.SetReference("LocalizationTable", "1");
// 로컬라이즈된 문자열이 변경될 때 UI를 업데이트하도록 StringChanged 이벤트 구독
localizedString.StringChanged += UpdateUIText;
//// 현재 로컬라이즈된 문자열을 즉시 표시하도록 강제로 업데이트
UpdateUIText(localizedString.GetLocalizedString());
}
void UpdateUIText(string value)
{
uiText.text = value;
}
// 런타임에 로컬라이제이션 참조를 동적으로 변경하는 예제 메서드
public void ChangeLocalizationReference(string newTable, string newKey)
{
localizedString.SetReference(newTable, newKey);
UpdateUIText(localizedString.GetLocalizedString());
}
5 . smart 사용
[ 대체 ]
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using UnityEngine.Localization;
using Cysharp.Threading.Tasks;
using System;
public class Test : MonoBehaviour
{
public LocalizedString localizedTimeString;
public TextMeshProUGUI timeText;
private void Start()
{
// Optionally, you can set up a repeating function to update the time every minute.
UpdateTime().Forget();
}
async UniTask UpdateTime()
{
while(true)
{
await UniTask.Delay(TimeSpan.FromSeconds(1f));
string currentTime = System.DateTime.Now.ToString("HH:mm::ss");
localizedTimeString.Arguments = new string[] { currentTime };
localizedTimeString.StringChanged += OnLocalizedStringChanged;
localizedTimeString.RefreshString();
}
}
private void OnLocalizedStringChanged(string localizedString)
{
timeText.text = localizedString;
}
private void OnDestroy()
{
// Clean up the event subscription.
localizedTimeString.StringChanged -= OnLocalizedStringChanged;
}
}
[ CSV로 사용하기 ]
1 . CSV 파일로 내보내기
[ Extension 생성하기 ]
- 생성한 Table을 선택하면 Extensions를 볼 수 있다 .
- CSV Extension을 눌러 생성한다 .
- Include ID / Include Comments가 필요없다면 체크 해제한다 .
- Save를 눌러 저장 .
2 . 스프레드 시트에 추가하기
[ 시트 추가 ]
- 해당 기능은 따로 Extension이 있지만 복잡해 일단 이렇게 사용해보려 한다 .
- 빈 스프레드 시트를 생성 , 가져오기를 눌러준다 .
- 업로드를 눌러 가져온다 .
- 다음과 같이 스프레드 시트에 추가됨을 볼 수 있다 .
3 . 스프레드 시트에서 가져오기
[ 다운로드 ]
- 파일 - 다운로드 - CSV를 눌러 다운
- Import - CSV로 가져온다 .
'유니티' 카테고리의 다른 글
[ 유니티 ] 모바일 해상도 대응하기 (0) | 2024.06.18 |
---|---|
[ 유니티 ] 앱 이름 로컬라이징 하기 (0) | 2023.10.30 |
[ 유니티 ]TMP_Text에 일본어 추가하기 (0) | 2023.10.19 |
[ Unity ] Notification 01 . Unity Notificatioin에 관하여 (0) | 2023.08.01 |
[ 유니티 ]인터넷 연결확인 (0) | 2023.06.26 |