Skip to content
스토브
마지막 업데이트

국가/언어

이해하기


글로벌 언어 정책

스토브 플랫폼 및 게임 이용자에게 노출되는 언어는 기본적으로 스토브가 정한 글로벌 언어 운영 정책에 따라 제공해요. 아래 상위 정책을 기준으로 적용하며, 세부 사항은 현업에 맞추어 조정할 수 있으니 퍼블리싱 기술 담당자를 통해 논의해 주세요.


글로벌 언어 상위 정책

구분 설명
시스템 언어 스토브 플랫폼 전반의 UI/UX 언어. 스토브 플랫폼 기본 언어인 한/영/일/번/간 제공
이용자 언어 스토브 플랫폼 내 이용자가 생산하는 텍스트 전반. 이용자의 고유 창작물로 임의로 언어 수정하지 않음
단, 이용자 간 원활한 소통 지원을 위해 노출 제외·분류 적용·자동 번역툴 지원 등의 조치 가능
입점사 언어 스토브 플랫폼에 입점하는 입점사가 작성한 전시·운영 영역의 언어. 입점사가 서비스 목적 고려하여 범위 자율 선택
단, 운영 언어 정책에 반하는 경우 전시 제외 또는 수정 조치
운영 언어 스토브 플랫폼 및 입점 게임 홍보 언어. 서비스별 목적에 따라 언어 자율 제공
단, 특정 권역에 서비스하려면 권역의 대표 언어 필수 제공

스토브 서비스 언어 노출 기준

항목 내용
기본 정책 ㆍ 쿠키는 이용자가 '언어 선택(GNB 등)' 영역에서 직접 언어를 변경하는 경우에만 생성돼요.
ㆍ 언어 Path는 쿠키를 업데이트하지 않아요.
언어 설정 우선 순위 URL path > 쿠키 > 브라우저 언어 > 서비스별 default 언어
※ 참고 노출되는 언어는 ① 기기 환경, ② 이용자 설정, ③ 진입 경로에 따라 결정되며, 접속 IP와는 무관해요.

국가/언어 서비스란?

스토브 SDK는 현재 접속한 이용자의 국가 정보(GDS)와 파트너스에 등록된 게임 상수 정보를 초기화 이후 조회할 수 있는 기능을 제공해요.
또한 스토브 플랫폼의 표시 언어를 게임 언어에 맞춰 변경할 수 있어, 플레이어가 경험하는 언어를 일관되게 유지할 수 있어요.
모든 기능은 SDK initialize 완료 이후에 동작해요.


기능 구성

기능 설명 Mobile PC
GDS 획득 현재 접속한 이용자의 국가 정보(Global Domain Service) 조회
nation, lang, regulation, timezone 등 포함
게임 상수 정보 획득 파트너스에 등록한 key, value를 초기화 이후 클라이언트에서 조회
플랫폼 표시 언어 변경 스토브 플랫폼 표시 언어를 게임 언어에 맞춰 변경
게임 언어 변경 시 함께 호출하면 언어 일관 유지
디바이스 언어로 변경 플랫폼 표시 언어를 디바이스 설정 언어(System)로 복원

플랫폼 표시 언어 지원 목록

총 10개 언어를 지원해요.

언어 코드 언어명
System 디바이스의 설정 언어
English 영어
German 독일어
Spanish 스페인어
French 프랑스어
Japanese 일본어
Korean 한국어
Portuguese 포르투갈어
Thai 태국어
SimplifiedChinese 중국어 간체
TraditionalChinese 중국어 번체

개발하기


국가/게임 정보 얻기

이 섹션에서는 두 가지 정보를 가져오는 방법을 다뤄요.

  • GDS 획득: 현재 접속한 이용자의 국가 정보(Global Domain Service)를 가져와요. nation, lang, regulation, timezone 등을 포함해요. (Mobile / PC 모두 지원)
  • 게임 상수 정보 획득: 파트너스에 등록한 key-value를 클라이언트에서 조회해요. (Mobile 전용, PC 환경 미지원)

GDS 응답 예시: {"is_default":false,"nation":"KR","lang":"ko","regulation":"KOREA","timezone":"Asia/Seoul","utc_offset":540,"ip":"211.34.57.xxx"}

모바일

사전 준비
개발 흐름

GDS 획득

  1. SDK 초기화 완료 콜백 안에서 Constants.get("gds", "")를 호출해 GDS 정보를 조회해요.
  2. 반환값(JSON 문자열)에서 nation, lang, regulation, timezone 등을 파싱해 사용해요.
  3. 국가 코드만 필요하면 Constants.get("nation", "")로 간단히 조회할 수 있어요.
  4. is_defaulttrue면 IP로 국가 판별이 어려워 스토브 기본값이 반환된 상태예요. 분기 로직에서 기본값 처리나 재시도 정책을 적용해요.

게임 상수 정보 획득

  1. 파트너스 game_config 모듈에 게임이 사용할 key-value 항목을 등록해요.
  2. SDK 초기화 완료 콜백 안에서 Constants.get("game_config", "")를 호출해 등록된 값을 JSON 문자열로 받아요.
  3. JSON을 파싱해 필요한 key 값을 사용해요.
트러블슈팅

GDS 획득

상황원인조치
빈 문자열 / nil 반환SDK 초기화(initialize) 미완료, 또는 첫 실행에서 네트워크 실패 후 캐시 없음initialize 콜백 완료 이후에만 Constants.get을 호출하도록 호출 시점을 옮기세요. 첫 실행 + 네트워크 단절 상황에서는 이용자에게 네트워크 연결을 안내하고 SDK 초기화를 재시도하세요.
is_default == trueIP로 국가 판별 실패 (VPN, 데이터센터 IP 등) — 스토브 기본값이 반환됨게임 내 기본 국가 코드를 적용하거나, Android는 Locale.getDefault() / iOS는 Locale.preferredLanguages로 디바이스 언어에 맞춰 폴백하세요. 결제·연령 등 국가 의존 로직은 해당 분기에서 보수적으로 동작하도록 작성하세요.
캐시된 이전 값이 반환됨Constants는 SharedPreferences(Android) / UserDefaults 암호화(iOS)에 캐시되며, 신규 init 응답이 와야 갱신됨이용자 위치·언어 변경 시점이나 장기 미사용 후 진입 시 SDK를 재초기화해 최신 GDS를 받아오세요.

게임 상수 정보 획득

상황원인조치
빈 문자열 / nil 반환파트너스 SDK Config에 game_config 모듈 미추가, 또는 등록 key 오타파트너스 콘솔의 game_config 모듈에 해당 key가 등록돼 있는지, 클라이언트에서 사용하는 key 문자열과 정확히 일치하는지 확인하고 수정하세요.
플랫폼별 boolean 반환값이 다름Android는 JSONObject, iOS는 암호화 NSDictionary 기반 직렬화 차이가능하면 boolean 대신 "Y"/"N"이나 0/1 같은 일관된 형식으로 등록하세요. 기존 boolean 키를 유지해야 한다면 Android("true"/"false")와 iOS("0"/"1") 양쪽 반환값을 모두 처리하는 분기를 클라이언트에 명시적으로 작성하세요.
SDK 초기화 전 호출위 안내와 동일 (default / nil 반환)initialize 콜백 안에서만 Constants.get("game_config", ...)을 호출하도록 호출 위치를 조정하세요.
샘플 코드

GDS 획득

csharp
public void GetGds() {
    string gds = Constants.Get("gds");
    //ex) {"is_default":false,"nation":"KR","lang":"ko","regulation":"KOREA","timezone":"Asia/Seoul","utc_offset":540,"ip":"211.34.57.xxx"}
    string nation = Constants.Get("nation"); // ex) KR
}

게임 상수 정보 획득

csharp
public void GetGameConstants() {
    string gameConfig = Constants.Get("game_config");
}

PC (PCSDK)

사전 준비
  • BaseSDK 초기화(Base_Initialize)가 완료된 이후에 호출해요. 초기화 전에 호출하면 BASE_NOT_INITIALIZED(16) 에러가 반환돼요.
  • Base_GetGds는 동기 함수예요. 콜백 등록이 필요 없어요.
  • 게임 상수 정보(game_config)는 PCSDK에서 제공하지 않아요. 모바일 전용 기능이에요.
개발 흐름
  1. 게임 시작 시 Base_RestartAppIfNecessary 콜백 → Base_Initialize 완료 이후 Base_GetGds(&gds)를 호출해 GDS 정보를 조회해요.
  2. 반환된 결과(Result)를 IsSuccessful()로 검증해요.
  3. 성공 시 StovePCGds 객체에서 GetNation(), GetLanguage(), GetRegulation(), GetTimeZone(), GetUtcOffset(), IsDefault() 값을 사용해요.
  4. 실패 시 에러 코드별 처리(트러블슈팅 표 참고)를 진행해요.
트러블슈팅
상황원인해결 방법
게임 시작 직후 Base_GetGds를 호출했더니 BASE_NOT_INITIALIZED(16)가 반환돼요Base_RestartAppIfNecessary는 비동기이며 콜백은 Base_RunCallback 호출 시 디스패치돼요. Base_Initialize(동기)는 해당 콜백의 requiresRestart == false 분기 안에서 호출해야 해요. 이 두 단계가 완료되기 전에 GDS 조회를 호출하면 16번 오류가 발생해요.Base_RestartAppIfNecessary 콜백에서 requiresRestart == false를 확인한 뒤 Base_Initialize를 호출하고, Base_Initialize가 성공한 이후에 GDS 조회를 호출해야 해요. 게임 시작 시 국가별 분기가 필요하다면 이 순서대로 부팅 시퀀스를 잡으면 문제없어요.
GDS 조회에서 INVALID_GDS_INFO(83)가 반환돼요클라이언트와 스토브 서버 간 GDS 정보 동기화에 실패한 상태예요. 게임 시작 시점에 이용자 네트워크가 단절돼 있거나 스토브 측 일시 장애일 때 발생해요.잠시 후 BaseSDK 재초기화로 GDS를 다시 받아오거나, 게임을 종료하고 재시작하도록 안내해야 해요. 무한 재시도 대신 이용자에게 네트워크 점검을 안내하면 문제없어요.
GDS 정보를 받았는데 IsDefault()true예요이용자 IP로 국가를 판별할 수 없는 환경(VPN, 데이터센터 IP, 일부 모바일 통신망)일 때 스토브 기본 국가 코드가 내려와요. 오류는 아니지만 실제 이용자 위치와 다를 수 있어요.국가 의존 로직(결제, 연령 등급, 언어 등)에서는 IsDefault()true이면 보수적으로 동작하도록 분기를 둬야 해요. 게임 내 국가 선택 화면을 두고 이용자 입력으로 보정하거나, 디폴트 동작을 명시적으로 설계하면 문제없어요.
Base_GetGds 호출 시 INVALID_PARAM(5)가 반환돼요전달한 out 파라미터 포인터(StovePCGds*)가 nullptr이거나 잘못된 주소를 가리키고 있어요.호출 직전에 StovePCGds 변수를 선언하고 그 주소를 넘겨야 해요. 조회한 정보를 콜백 이후에도 사용할 거라면 필요한 값을 미리 복사해 두면 문제없어요.

IsDefault() 값을 함께 확인해 주세요
IP로 국가 판별이 불가능한 경우 스토브 기본 국가 코드가 반환되며 IsDefault()true로 나와요. 이 경우 국가별 분기 로직에서 기본값으로 처리하거나 재시도 정책을 적용해요.

샘플 코드
cpp
// BaseSDK 초기화 완료 콜백 안에서 호출 (기존 구 API)
Stove::PCSDK::Base::StovePCGds gds;
auto result = Stove::PCSDK::Base::Base_GetGds(&gds);
if (result.IsSuccessful())
{
    const wchar_t* nation = gds.GetNation();
    const wchar_t* language = gds.GetLanguage();
    // 국가/언어에 따른 분기 로직을 구현해 주세요.
}
else
{
    // 실패 시 로직을 구현해 주세요. (에러 코드별 처리 참고)
}

플랫폼 표시 언어변경

모바일

사전 준비
  • SDK 초기화 완료 이후에 호출해요.
  • 지원 언어는 총 10개이며, Language.System을 전달하면 디바이스 설정 언어를 따라요.
  • 지원하지 않는 언어로 설정을 시도하면 디폴트 언어인 영어(English)로 노출돼요.
개발 흐름
  1. 게임 내 언어 설정이 변경되거나, 게임 시작 시 이용자 언어를 적용할 때 Localization.setLanguage(...)를 호출해요.
  2. 명시적 언어로 변경하려면 원하는 Language 값을 인자로 전달해요. (예: Language.English)
  3. 디바이스 언어로 되돌리려면 Language.System을 전달해요. (게임에서 별도로 언어를 지정하지 않거나 초기화 상태로 돌리고 싶을 때 사용)
트러블슈팅

에러 반환 없음
Localization.setLanguage는 로컬 저장(SharedPreferences/UserDefaults)만 수행하므로 항상 성공해요. 잘못된 enum 값은 컴파일 단계에서 차단되어 런타임 에러 코드가 없어요.

상황원인조치
앱 재시작 후 설정한 언어가 유지되지 않음영속 저장(SharedPreferences/UserDefaults) 권한 문제 또는 앱 데이터 초기화앱 재설치·이용자 데이터 삭제 외에는 거의 발생하지 않아요. 발생 시 디바이스 저장소 권한과 해당 키 접근을 점검하고, 필요하면 게임 시작 직후 다시 한 번 setLanguage를 호출해 동기화하세요.
지정한 언어가 영어로 노출됨전달한 언어가 SDK 지원 10개 외이거나 해당 리소스가 미준비SDK 지원 언어 enum(English/Korean/Japanese 등 10종) 안의 값만 전달하세요. 그 외 언어는 자동으로 영어로 폴백돼요.
Language.System이 의도와 다른 언어로 노출됨디바이스 OS 언어가 SDK 미지원 → 영어 폴백명시적인 언어 노출이 필요하면 Language.System 대신 SDK 지원 enum 값을 직접 전달하세요. 게임에서 별도로 이용자 언어를 선택받는 화면을 두는 것을 권장해요.
샘플 코드

언어 설정하기

원하는 언어 코드를 전달해 플랫폼 언어를 명시적으로 변경해요.

csharp
public void SetLanguage(Localization.Language language)
{
    Localization.SetLanguage(language);
}

디바이스 언어로 변경하기

Language.System을 전달해 디바이스 기본 언어를 따르도록 설정해요.

csharp
public void SetDefaultLanguage()
{
    Localization.SetLanguage(Localization.Language.System);
}

PC (PCSDK)

사전 준비
  • BaseSDK 초기화 완료 이후에 호출해요.
  • 언어는 enum 또는 문자열(ISO 639-1)로 지정할 수 있어요.
    • enum 기반: Base_SetLanguage(StoveLanguage) — 미리 정의된 StoveLanguage enum 값을 전달해요.
    • 문자열 기반: Base_SetLanguageEx(C/C++ const wchar_t*, C# string) — 게임에서 사용하는 ISO 639-1 언어 코드를 그대로 전달해요.
  • PCSDK는 12개 언어를 지원해요(system / en / ko / ja / zh-cn / zh-tw / de / fr / es / pt / th / vi).
개발 흐름
  1. 게임 내 언어 설정이 변경되거나, 게임 시작 시 이용자 언어를 적용할 때 호출해요.
  2. 문자열(ISO 639-1)로 언어를 지정해 Base_SetLanguageEx를 호출하거나, enum 값으로 Base_SetLanguage를 호출해요.
  3. 디바이스 언어로 되돌리려면 문자열 "system"을 전달해요.
  4. 반환된 결과를 IsSuccessful()로 검증해요.
트러블슈팅
상황원인해결 방법
게임 시작 직후 언어 설정 API를 호출했더니 BASE_NOT_INITIALIZED(16)가 반환돼요Base_RestartAppIfNecessary는 비동기이며 콜백은 Base_RunCallback 호출 시 디스패치돼요. Base_Initialize(동기)는 해당 콜백의 requiresRestart == false 분기 안에서 호출해야 해요. 이 두 단계가 완료되기 전에 언어 설정을 호출하면 16번 오류가 발생해요.Base_RestartAppIfNecessary 콜백에서 requiresRestart == false를 확인한 뒤 Base_Initialize를 호출하고, Base_Initialize가 성공한 이후에 언어 설정을 호출해야 해요. 부팅 시퀀스에서 이 순서대로 초기화한 뒤 언어를 적용하면 이후 SDK 메시지가 올바른 언어로 노출되므로 문제없어요.
이용자 설정 언어 코드를 전달했더니 INVALID_PARAM(5)가 반환돼요SDK가 시작 시 스토브 클라우드에서 받아둔 지원 언어 목록에 없는 코드를 명시적으로 넘기면 5번이 반환돼요. (단, "system"으로 호출했을 때 OS 언어가 미지원인 경우는 오류 없이 영어(en)로 자동 폴백돼요.)게임 자체 언어 선택 UI를 운영한다면 SDK 지원 언어 코드 문자열 목록에 매핑해 전달해야 해요. 이용자 선호가 없을 때는 "system" 값을 전달해 OS 언어 → 영어 폴백 흐름을 그대로 사용하면 문제없어요.
SDK 메시지(셧다운/본인인증/규제 알림 등)가 게임이 설정한 언어와 다르게 노출돼요SDK 내부 언어는 다음 순서로 결정돼요. ① BaseSDK 초기화 시 OS 시스템 언어(미지원 시 영어 폴백)로 시작 → ② 런처(스토브 클라이언트)가 토큰과 함께 전달한 언어 값이 도착하면 자동으로 덮어쓰기 → ③ 게임이 언어 설정 API를 호출한 시점부터 그 값이 우선. 게임이 ② 시점 전에 언어를 지정하면 런처 값에 다시 덮여요.런처 언어를 따르려면 게임에서 언어 설정 API를 호출하지 않으면 돼요. 게임이 자체 언어를 강제하려면 OnInitializeFinished 성공 콜백을 받은 뒤(런처 값 적용 시점 이후), 그리고 게임 내 언어 변경이 발생할 때마다 언어 설정 API를 호출해야 해요. 두 시점만 지키면 문제없어요.

언어 폴백·번역 리소스 미준비 동작
언어 설정 API에 "system"을 전달하면 OS 언어를 따라가되, OS 언어가 SDK 미지원이면 자동으로 영어(en)로 폴백돼요. 단, 게임이 직접 미지원 언어 코드를 전달하면 폴백 없이 INVALID_PARAM(5)이 반환돼요.
또한 SDK 시작 시점에 스토브 클라우드에서 받는 번역 리소스에 특정 언어가 미준비된 경우, 해당 언어로 설정돼도 일부 문구가 영어로 출력될 수 있어요. de, fr, es, pt 4개 언어는 v3.4.0에서 추가됐으나 번역이 단계적으로 추가되는 중이라 현재는 일부 문구가 영어로 표시될 수 있어요.

샘플 코드
cpp
// enum 기반 (기존 구 API)
auto result = Stove::PCSDK::Base::Base_SetLanguage(Stove::PCSDK::Base::StoveLanguage::ko);
if (result.IsSuccessful())
{
    // 성공 시 로직을 구현해 주세요.
}
else
{
    // 실패 시 로직을 구현해 주세요.
}

// 문자열 기반 (ISO 639-1)
Stove::PCSDK::Base::Base_SetLanguageEx(L"ko");

// 디바이스 언어로 복귀
Stove::PCSDK::Base::Base_SetLanguageEx(L"system");

자주 묻는 질문



Q1. GDS 정보는 언제부터 조회할 수 있나요?
A. SDK initialize 완료 이후부터 조회할 수 있어요.
initialize 이전에 호출하면 정상적인 값을 반환하지 않으므로, 반드시 초기화 완료 콜백 이후에 호출해 주세요.
Q2. 게임 상수 정보(game_config)를 PC 환경에서 사용할 수 있나요?
A. 아니요, game_config 기능은 모바일 전용으로 제공하는 기능이라 멀티플랫폼 PC 환경에서는 사용할 수 없어요.
PC 환경에서 게임 상수 정보가 필요한 경우 별도의 방법을 검토해 주세요.
Q3. game_config에 boolean 값을 등록했는데 Android와 iOS에서 반환값이 다르게 나와요.
A. 플랫폼별 특성으로 인해 boolean 값은 플랫폼마다 다른 형태로 반환돼요.
예를 들어 true로 등록한 경우 Android에서는 "true", iOS에서는 "0"으로 값이 반환돼요.
클라이언트에서 파싱 시 플랫폼별 분기 처리가 필요해요.
Q4. 게임 언어를 변경할 때 스토브 플랫폼 언어도 함께 변경하려면 어떻게 하나요?
A. 게임 내 언어 변경 이벤트가 발생하는 시점에 Localization.setLanguage()를 함께 호출해 주세요.
그러면 스토브 플랫폼의 표시 언어도 게임 언어에 맞춰 동기화돼요.
Q5. 지원하지 않는 언어로 설정하면 어떻게 되나요?
A. 지원하지 않는 언어로 설정을 시도하면 디폴트 언어인 영어(English)로 노출돼요.
현재 지원 언어는 총 10개이며, 지원 목록은 위의 제공 언어 표를 참고해 주세요.
Q6. 플랫폼 언어를 디바이스 기본 언어로 되돌리려면 어떻게 하나요?
A. Language.System을 인자로 전달해 Localization.setLanguage()를 호출하면 돼요.
디바이스에 설정된 언어로 자동으로 변경되며, 별도로 언어를 지정하지 않은 초기 상태와 동일하게 동작해요.



직접 문의하고 싶으신가요? stove.developers@smilegate.com