[뒤끝팁] 국가 별로 현지화된 ‘다국어 공지’ 개별 노출 방법!mini2023년 8월 22일뒤끝 팁 해외 출시에 있어 가장 중요한 것은 ‘현지화’입니다. 그리고 현지화의 기본이 되는 부분은 바로 언어인데요. 게임을 통해 유저에게 좋은 경험을 선사하기 위해서는 인 게임 UI부터 튜토리얼, 공지사항까지 모두 현지 언어로 제공하는 것이 효과적입니다. 그중 오늘은, 유저의 국가에 꼭 맞는 언어로 현지화된 공지를 제공하는 방법을 함께 알아보겠습니다.뒤끝 공지사항 기능으로 다국어 공지 만들기! 지금부터 안내드릴게요. 목차 [이론 편] 기존 공지사항 기능으로는 이렇게 만들 수 있어요! 현재 제공되는 공지사항은 아래 두 가지 특징이 존재합니다. 국가 정보가 있는 유저는, 미리 준비된 국가 별 공지 노출 국가 정보가 없는 유저는, 자동으로 '기본 양식' 형태의 공지 노출 하나의 공지에는 하나의 사진 + URL만 삽입 가능 기본적으로 다국어 공지는 ‘유저의 국가 정보’를 기반으로 노출이 됩니다. 때문에 반드시 유저의 국가를 식별할 수 있어야 하며, 이 부분은 뒤끝의 국가 코드 기능을 활용하거나, 국가 선택 UI를 직접 구현하는 등의 방법을 활용할 수 있습니다. 유저 국가 식별이 가능하다면, 아래 방법으로 다국어 공지를 구현할 수 있습니다. 타깃으로 하는 국가의 수만큼 공지사항을 생성합니다. 공지사항을 여러 개 생성했다면, 각 공지사항 설정 페이지에 원하는 내용을 채워 넣습니다. (자동으로 제공되는 '기본 양식' 공지가 노출되지 않도록 하는 작업은 아래 3번에서 진행) 기본 양식은 일괄 예외 처리를 할 예정이므로, 제목은 DEFAULT로 시작하도록 규칙을 정합니다. 위와 같이 처리하고 나면, 유저는 아래 로직을 거쳐 자신의 국가 코드에 꼭 맞는 현지화된 공지를 받아보게 됩니다. 유저의 국가 정보에 맞는 공지가 있나요? YES - 해당 공지를 불러옵니다. NO - 제목이 DEFAULT인 기본 공지를 불러옵니다. 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 noticeList = new List(); 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 공지사항뒤끝베이스해외 출시현지화 Facebook Twitter Pinterest LinkedIn ❤️🔥함께 읽으면 좋아요! [공지] 2024년 4월 19일, 뒤끝 로고 표시 의무가 사라집니다. 2024년 4월 19일 [뒤끝팁] 뒤끝의 유니크 ID, inDate 알아보기 2024년 4월 12일 [뒤끝팁] 닉네임부터 길드 이름까지! 비속어 필터링 SDK 2024년 3월 20일