스크린샷과 에셋5 분 읽기

앱은 16개 언어를 지원하는데 스토어 리스팅은 15개만 생겼습니다

앱이 쓰는 언어 코드와 Play 스토어가 쓰는 리스팅 코드는 다른 체계입니다. 그리고 앱은 지원하는데 스토어는 아예 지원하지 않는 언어가 있었습니다.

#google-play#localization#gotchas#verification#screenshots
개념 도식: 앱 리소스 폴더 코드와 Play 리스팅 코드의 매핑 차이, 그리고 매핑이 존재하지 않는 언어
글 내용을 요약한 개념 도식.

안드로이드 앱 하나가 16개 언어를 지원합니다. Play 스토어 리스팅을 올려보니 15개만 생겼습니다.

당신은 앱의 리소스 폴더 이름을 그대로 스토어 리스팅 코드로 쓰고 있습니까?

두 체계는 같지 않습니다

앱이 쓰는 코드 Play가 원하는 코드
in (인도네시아어) id
bn bn-BD (그냥 bn은 거부)
tr tr-TR (그냥 tr은 거부)
az az-AZ (그냥 az는 거부)
en en-US
하우사어 없음 — 어떤 코드로도 거부

인도네시아어가 특히 잔인합니다. 안드로이드 리소스는 역사적 이유로 in을 쓰는데, Play는 id를 원합니다. 폴더 이름을 그대로 넘기면 조용히 실패하거나 업로드 자체가 거부됩니다.

진열대가 없는 언어

가장 놀라운 건 마지막 줄입니다. 앱 자체는 하우사어로 정상 표시되는데, Play 스토어 페이지는 그 언어를 아예 지원하지 않습니다.

그 나라 사용자가 스토어에 들어오면 자동으로 영어 페이지를 봅니다. 앱은 준비돼 있는데 진열대만 없는 상태입니다.

번역 비용을 들여 앱을 그 언어로 만들어도, 그 언어 사용자는 영어 설명을 읽고 설치 여부를 결정합니다. 이건 코드로 고칠 수 있는 문제가 아닙니다.

여기서 선택이 갈립니다

어떤 코드가 유효한지 확인해야 합니다. 공식 문서를 뒤지겠습니까, API에 직접 물어보겠습니까?

API가 빨랐고 더 정확했습니다. 문서와 실제 동작은 미묘하게 다를 수 있습니다.

service.edits().listings().get(
    packageName=pkg, editId=edit_id, language=code
).execute()
# 400 → 무효 코드
# 404 → 유효한 코드, 리스팅 미생성

이 구분이 핵심입니다.

  • **400은 "그런 코드는 없다"**입니다.
  • **404는 "코드는 맞는데 아직 안 만들었다"**입니다 — 정상 상태입니다.

둘을 헷갈리면 지원되는 언어를 포기하거나, 지원 안 되는 언어에 계속 매달립니다.

업로드 성공은 반영이 아닙니다

업로드가 "성공"으로 응답했다고 끝난 게 아닙니다. 업로드 뒤에는 반드시 다시 조회해서 보낸 값과 응답값을 필드별로 대조했습니다.

커밋 성공 응답이 실제 반영을 보장하지 않는 경우가 있었기 때문입니다. 조용히 버려지는 필드는 응답 코드로는 절대 안 보입니다.

자가진단

  • 앱 리소스 코드와 스토어 리스팅 코드를 같은 값으로 쓰고 있습니까? 매핑 표가 있습니까?
  • 리스팅 개수가 지원 언어 개수와 정확히 일치합니까? 하나 적으면 그게 신호입니다.
  • 업로드 후 되읽어서 대조합니까, 200만 보고 넘어갑니까?

솔직한 부분

하우사어로 이미 찍어둔 스토어 스크린샷은 버리지 않고 남겨뒀습니다. Play가 언젠가 그 언어를 지원 목록에 추가하면 바로 쓸 수 있게요.

솔직히 말하면 그날이 올 거라는 근거는 없습니다. 그냥 버리는 것보다 남겨두는 비용이 더 싸서 그렇게 했습니다.

당신 앱의 스토어 리스팅 개수를 지금 세어보세요. 지원 언어 개수와 다르면, 차이 하나하나가 이 표 어딘가에 있습니다.

관련 글