안드로이드 앱 하나가 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가 언젠가 그 언어를 지원 목록에 추가하면 바로 쓸 수 있게요.
솔직히 말하면 그날이 올 거라는 근거는 없습니다. 그냥 버리는 것보다 남겨두는 비용이 더 싸서 그렇게 했습니다.
당신 앱의 스토어 리스팅 개수를 지금 세어보세요. 지원 언어 개수와 다르면, 차이 하나하나가 이 표 어딘가에 있습니다.