Sky Studio -개발 내용 - 다중언어 지원
초반에는 위와 같이 모든 텍스트를 영어로 작성하였지만,
앱 사용자들로부터 다국어 지원에 대한 피드백을 받게 되어 다국어 지원을 하기로 하였다.
하지만, 다중 언어 번역 기능은 Unity Engine에서 제공되지 않는 것 같았다. 따라서 앱 내에서 사용되는 모든 텍스트에 대해 각 나라 언어별로 번역 데이터를 만들어 보기로 하였다.
Sky 공식 디스코드를 통해 다양한 국가의 플레이어들에게 도움을 받아
각 나라별 번역 데이터를 Json 형식으로 제작하였고, 9개의 언어를 지원 할 수 있게 되었다.
.
Parsing 단계는 앱 실행 시 또는 앱에서 언어 변경 시 이루어진다.
Parsing 후 생성된 LanguageBox 객체는 앱 종료 전까지 소멸되지 않고
Scene을 Load 할 때마다 Scene 내의 text들에 대응되는 string을 제공한다.
Scene에 있는 모든 Text들에 접근 가능하도록 하여 Scene Load 시점에 text를 할당해 주도록 하였다.
하지만 이를 위해서 프로그램 코드의 구조를 되짚어 볼 필요가 있었다.
.
.
.
악보를 작곡하는 툴인 만큼 UI 요소가 매우 많아 그에 해당하는 클래스도 매우 많을 수 밖에 없었는데,
이 많은 UI 클래스들을 다른 코드들에서 직접 참조했다가는 코드의 의존성이 매우 복잡해질 거라는 생각이 들었다.
따라서 이 UI 클래스들을 관리하는 UIManager 클래스를 별도로 두었다.
public class UIManager : MonoBehaviour
{
public static MainUI main;
public static SliderUI slider;
public static ScrollUI scroll;
public static MovementUI movement;
public static SheetEditorUI sheetEditor;
public static HistoryUI history;
public static PlayNPauseUI util;
public static MessageUI message;
public static SaveUI save;
public static MenuUI menu;
public static WarningUI warning;
public static SetPitchUI pitch;
public static PracticeUI practice;
public static SettingUI setting;
public static UIManager instance;
.
.
<생략>
}
이를 통해서라면 특정 UI요소에 접근하기 위해서는 UIManager를 거쳐야 하기 때문에
UI에 접근하는 모든 참조위치를 한눈에 보기 쉬워졌고, 비교적 관리하기가 수월해졌다.
아래는 Menu class에서 MenuUI의 텍스트들을 할당하는 코드 일부이다.
.
.
.
사실 포스팅 하다가 좀 더 좋은 방법이 있지 않았을까 하는 생각에 멈칫 하기도 하였지만,
좋은 코드는 결국, 멋진 테크닉을 많이 쓰는 것이 아니라,
이해하기 쉬운 코드가 가장 베스트인 것 같다는 생각이 들었다.
약 2년 가까이 지난 코드였지만, 보고 쉽게 구조를 파악 할 수 있었기 때문에 나름 성공적이었다는 생각이 든다.