[뒤끝팁] 국가 별로 현지화된 ‘다국어 공지’ 개별 노출 방법!

해외 출시에 있어 가장 중요한 것은 ‘현지화’입니다. 

그리고 현지화의 기본이 되는 부분은 바로 언어인데요. 게임을 통해 유저에게 좋은 경험을 선사하기 위해서는 인 게임 UI부터 튜토리얼, 공지사항까지 모두 현지 언어로 제공하는 것이 효과적입니다. 

그중 오늘은, 유저의 국가에 꼭 맞는 언어로 현지화된 공지를 제공하는 방법을 함께 알아보겠습니다.
뒤끝 공지사항 기능으로 다국어 공지 만들기지금부터 안내드릴게요.

목차

[이론 편] 기존 공지사항 기능으로는 이렇게 만들 수 있어요!

현재 제공되는 공지사항은 아래 두 가지 특징이 존재합니다. 

▪ 국가 정보가 있는 유저는, 미리 준비된 국가 별 공지 노출
▪ 국가 정보가 없는 유저는, 자동으로 '기본 양식' 형태의 공지 노출
▪ 하나의 공지에는 하나의 사진 + URL만 삽입 가능

기본적으로 다국어 공지는 ‘유저의 국가 정보’를 기반으로 노출이 됩니다. 때문에 반드시 유저의 국가를 식별할 수 있어야 하며, 이 부분은 뒤끝의 국가 코드 기능을 활용하거나, 국가 선택 UI를 직접 구현하는 등의 방법을 활용할 수 있습니다.

유저 국가 식별이 가능하다면, 아래 방법으로 다국어 공지를 구현할 수 있습니다. 

1️⃣ 타깃으로 하는 국가의 수만큼 공지사항을 생성합니다.

2️⃣ 공지사항을 여러 개 생성했다면, 각 공지사항 설정 페이지에 원하는 내용을 채워 넣습니다. (자동으로 제공되는 '기본 양식' 공지가 노출되지 않도록 하는 작업은 아래 3번에서 진행)

3️⃣ 기본 양식은 일괄 예외 처리를 할 예정이므로, 제목은 DEFAULT로 시작하도록 규칙을 정합니다.

위와 같이 처리하고 나면, 유저는 아래 로직을 거쳐 자신의 국가 코드에 꼭 맞는 현지화된 공지를 받아보게 됩니다.

1️⃣ 유저의 국가 정보에 맞는 공지가 있나요?  YES - 해당 공지를 불러옵니다.
                      NO - 제목이 DEFAULT인 기본 공지를 불러옵니다.

2️⃣ NO의 경우, 해당 공지가 유저에게 노출되지 않도록 클라이언트에서 처리해 줍니다. 사실 이 부분은, 유저의 국가를 완벽히 식별해 낸다면 걱정하지 않아도 되는 사항입니다.

이제 실전 편을 통해 과정을 함께 보겠습니다.

[실전 편] '업데이트가 있습니다' 국가 별 공지 작성해 보기

오늘 함께 작성해 볼 공지의 조건은 아래와 같습니다. 

✍ 내용    8월 19일에 업데이트가 있습니다.
🌏 국가 분류 대한민국, 미국

이 조건에 맞춰 공지가 노출되도록, ①뒤끝 콘솔 작업과 ②클라이언트 작업으로 나누어 과정을 함께 보겠습니다.

① 뒤끝 콘솔 작업

먼저 대한민국 유저🙋‍♀️에게 노출할 공지를 작성합니다.

우선 ‘기본’ 탭은 두고, 바로 옆 추가 버튼을 눌러 아래와 같이 공지를 추가합니다.
국가 선택란을 대한민국으로 설정하고, 공지의 제목과 내용 그리고 이미지를 삽입합니다.

공지 작성이 완료되었다면, 기본 탭을 눌러 DEFAULT 공지를 작성합니다. 이 공지는 유저에게 노출될 일이 없기 때문에, 내용 없이 글자만 채워줍니다.

단! 제목 텍스트는 ‘DEFAULT’로 시작하도록 설정합니다.
이후 클라이언트 로직에서 제목의 해당 문자를 기준으로 예외 처리를 할 것이기 때문입니다.

기본 양식을 작성한다.

다음으로 미국 유저🙋‍♂️에게 노출할 공지를 작성합니다.

방법은 대한민국과 동일합니다. 우선 ‘기본’ 탭은 두고, 바로 옆 추가 버튼을 눌러 아래와 같이 공지를 추가합니다. 국가 선택란을 미국으로 설정하고, 공지의 제목과 내용 그리고 이미지를 삽입합니다.

뒤끝 콘솔에서 미국 용 공지를 등록한다.

공지 작성이 완료되었다면, 기본 탭을 눌러 DEFAULT 공지를 작성합니다. 제목 텍스트는 ‘DEFAULT’로 시작하도록 설정합니다. 

기본 공지를 작성한다.

공지를 모두 작성하고 나면, 아래와 같이 공지 목록을 확인할 수 있습니다. 
이때 제목이 기본 폼의 제목으로 보인다면 공지가 잘 등록된 것입니다.

② 클라이언트 작업 (예제 코드 있어요!)

공지사항 클래스

				
					public class NoticeItem
{
    public string title;
    public string contents;
    public DateTime postingDate;
    public string imageKey;
    public string inDate;
    public string uuid;
    public string linkUrl;
    public bool isPublic;
    public string linkButtonName;
    public string author;
    public override string ToString()
    {
        return $"title : {title}\n" +
        $"contents : {contents}\n" +
        $"postingDate : {postingDate}\n" +
        $"imageKey : {imageKey}\n" +
        $"inDate : {inDate}\n" +
        $"uuid : {uuid}\n" +
        $"linkUrl : {linkUrl}\n" +
        $"isPublic : {isPublic}\n" +
        $"linkButtonName : {linkButtonName}\n" +
        $"author : {author}\n";
    }
}
				
			

공지사항 불러오는 로직

				
					public void GetNotice() {
    Backend.BMember.CustomLogin("kr1","kr1");
    Backend.BMember.UpdateCountryCode(GlobalSupport.CountryCode.SouthKorea);

    List<NoticeItem> noticeList = new List<NoticeItem>();

    var bro = Backend.Notice.NoticeList(10);

    if(bro.IsSuccess()) {
        var jsonList = bro.FlattenRows();
        for(int i = 0; i < jsonList.Count; i++) {
            
            string title = jsonList[i]["title"].ToString();

            // 기본폼으로 출력될 경우
            // 내 국가 정보로 등록된 공지가 아니라면 제외한다
            if(title.StartsWith("DEFAULT")) {
                continue;
            }

            NoticeItem notice = new NoticeItem();
            notice.title = jsonList[i]["title"].ToString();
            notice.contents = jsonList[i]["content"].ToString();
            notice.postingDate = DateTime.Parse(jsonList[i]["postingDate"].ToString());
            notice.inDate = jsonList[i]["inDate"].ToString();
            notice.uuid = jsonList[i]["uuid"].ToString();
            notice.isPublic = jsonList[i]["isPublic"].ToString() == "y" ? true : false;
            notice.author = jsonList[i]["author"].ToString();
            if (jsonList[i].ContainsKey("imageKey"))
            {
                notice.imageKey = "http://upload-console.thebackend.io" + jsonList[i]["imageKey"].ToString();
            }
            if (jsonList[i].ContainsKey("linkUrl"))
            {
                notice.linkUrl = jsonList[i]["linkUrl"].ToString();
            }
            if (jsonList[i].ContainsKey("linkButtonName"))
            {
                notice.linkButtonName = jsonList[i]["linkButtonName"].ToString();
            }
            noticeList.Add(notice);
        }
        foreach(var notice in noticeList) {
            Debug.Log(notice.ToString());
            Debug.Log("---");
        }
    }
}
				
			

여기서 중요한 것은 바로 if(title.StartsWith(”DEFAULT”)) ⬅이 로직을 통해 DEFAULT로 시작하는 공지들, 즉 기본폼으로 불러온 공지들은 모두 건너뛰게 된다는 것입니다.

그렇다면 Debug.Log의 출력은 어떻게 될까요?

				
					title : 8.19 2.3.1 업데이트 공지
contents : 이번 8월 19일에 업데이트가 있습니다.
postingDate : 2023-08-17 오후 5:07:33
imageKey : http://upload-console.thebackend.io/upload/2147483648/notice/2023-08-17T08:01:36.279Z764883845.jpg
inDate : 2023-08-17T08:07:31.355Z
uuid : 1d5f27a0-3cd5-11ee-bf45-1b822f745e40
linkUrl : 
isPublic : True
linkButtonName : 
author : 관리자
				
			

위와 같이 정상적으로 작동하는 것을 확인할 수 있습니다. 즉, 국가 코드가 ‘대한민국’으로 등록된 유저에게는 대한민국 용 공지만 보이게 됩니다. 

이때 앞서 작성한 로직을 뜯어보시면, 다국어 공지의 작동 방식을 알 수 있습니다.

국가 별로 필요한 공지만 불러오는 것이 아니라, 콘솔에 등록된 모든 공지를 모두 불러온 후, 서로 필요 없는 공지(=DEFAULT로 시작하는 공지)는 예외로 처리되어 noticeList에 추가하지 않는 방식입니다.

오늘은 공지사항을 다양한 언어로, 국가에 맞게 호출하는 방법을 알아보았습니다. 오늘 소개 드린 방법을 활용하면 아래 두 상황에서 원하는 방향으로 공지를 노출할 수 있습니다.

❓ 한국 유저와 미국 유저에게, 각각 한국어와 영어로 된 공지를 노출하고 싶은 경우
❓ 한국 유저는 제외하고, 미국 유저에게만 공지를 하고 싶은 경우

뒤끝의 기능들은 완성되어 있어 바로 쓰기만 하면 된다는 장점이 있습니다. 그렇지만 준비된 기능들을 오늘 사례와 같이 응용해 보신다면 더 만족스러운 개발을 하실 수 있을 것이라 기대됩니다😊

추후에는 이러한 기능들을 더 쉽게 사용하실 수 있도록 개선할 예정인데요. 다만 그전까지 다국어 공지가 필요하시다면, 오늘의 방법을 활용해 보시면 좋을 듯합니다.

그럼, 다음에도 알아두면 좋은 팁 가득 들고 올 예정이니 기다려주세요!
감사합니다.

1

댓글