사용자 도구

사이트 도구


raylib:다국어_지원하기
다국어 지원하기

문서의 이전 판입니다!


필요성

한국은 너무 좁다. 한국어만 지원한다면 한국어 사용인구 5천만(북한까지 7천만)을 제외하고 나머지를 포기하는 것이다.

그렇다고 영어로 앱을 만들자니 모국어를 지원도 하지 않는 것은 말이 안될 것이다.

앱을 2개로 만드는 것은 그다지 좋은 방법은 아닐 것이다. 따라서 설정에 따라 지원되는 언어가 바뀌게 해보자.

스타팅 파일

개념

JSON 파일 구조를 어떻게 할 것인지를 고민해보자.

한 나라별로 문자열을 만들 것인지 아니면 해당 문자열에 대하여 각 나라별로 정리할 것인지 2가지 방법이 있을 것이다.

일단은 문자열이 많지 않으니 각 나라별로 문자열을 정리하도록 하자

즉, 각 나라가 배열의 첫번째 요소이다. 이런 식으로 localization.json이란 파일을 만들자.

localization.json
{
    "en": {
        "Load": "Load",
        "Log": "Log",
        "MainMenu": "MainMenu",
        "Save": "Save",
        "Settings": "Settings",
        "SettingsScreen": "Settings Screen",
        "Start": "Start",
        "Title": "DK Flappy Bird!",
        "Volume": "Volume",
        "exit": "Exit"
    },
    "ko": {
        "Load": "불러오기",
        "Log": "로그기록",
        "MainMenu": "메인메뉴",
        "Save": "저장하기",
        "Settings": "환경설정",
        "SettingsScreen": "환결설정 화면",
        "Start": "시작하기",
        "Title": "DK 플래피 버드!",
        "Volume": "볼륨",
        "exit": "끝내기"
    }
}

다국어 매니저 만들기

1. 헤더파일

기존 config.h 헤더파일에 LangManager란 싱글톤 클래스를 만들었다.

class LangManager
{
    private:
        LangManager() {} 
        static LangManager* instance; 
        std::string GetString(const char* lang, std::string _elem);
        nlohmann::json outputData;
    public:
        static LangManager* GetInstance()
        {
            if (instance != nullptr)
            {
                return instance;
            }else
            {
                instance = new LangManager();
                return instance;
            }
        }
        ~LangManager();
        void Init();
        void LoadStrings(const char* lang);
        // 멤버 변수 
        std::string title, start, mainMenu, settings, exit, settingsScreen, save, load, volume, log;
};

Niels Lohmann의 JSON라이브러리가 c++의 std::string 값을 아웃풋으로 내놓으므로, 저장할 멤버 변수들도 모두 std::string 타입으로 지정하였다.

2. 구현 파일

로그인하면 댓글을 남길 수 있습니다.

raylib/다국어_지원하기.1699196609.txt.gz · 마지막으로 수정됨: (바깥 편집)