앱 하나가 26개 로케일을 갖는다. 앱 17개면 문자열 파일만 2,153개다. 9월 초에 그 번역을 한 번에 감사하고 고쳐서 17개 앱을 심사에 넣었다. 그리고 제출 직후에 수정본을 다시 검토했다. 제출 전에 못 본 걸 제출 뒤에라도 보려고.
걱정했던 것과 실제로 나온 것
걱정은 하나였다. 대량으로 손본 번역이 기계 냄새를 풍기지 않을까. 그래서 검토를 세 겹으로 짰다.
- 기계 검사. 지적 항목별로 현재 값 대조, placeholder와 스크립트 누출 스캔, 인접 중복이나 조사 겹침 같은 치환 사고 시그니처, 한국어 받침-조사 규칙, 메타데이터 1,932개 파일의 길이 한도.
- 앱별 리뷰어 6개. old→new 덤프를 전수로 읽는다. 판정 기준은 첫 감사와 같은 루브릭에 회귀, 과금 정확성, 대량 생성 흔적을 더했다.
- 다른 모델의 독립 횡단 리뷰. 앱 사이의 고지 불일치, 복붙, 치환 사고를 본다.
결과. 기계 번역 티는 없었다. 대신 진짜 결함은 일괄 치환 사고였다. 원인은 하나, 앱은 셋.
| 앱 | 문장 | 무슨 일이 있었나 |
|---|---|---|
| constella (ja) | …評価につながる**される**時期です |
부분 문자열 치환이 동사와 겹침 |
| constella (zh) | …踏实积起、**成为中**情绪变化 |
成为中|心的流势 경계에서 절단 |
| constella (zh) | 知道**自己自己**的性格与优势 |
중복 |
| focusmind (ko) | 조사 파손 6건 | 명사만 바꾸고 뒤에 붙은 조사를 안 바꿈 |
| LogoForm | 1건 | 같은 종류 |
세 앱 밖에는 없었다. 17개 앱의 새 문자열을 전수로 뒤졌다.
돈이 걸린 문장이 제일 오래 걸렸다
페이월과 구독 고지는 번역 하나가 심사 반려나 환불 분쟁으로 이어진다. 그래서 여기에 시간을 제일 많이 썼다.
- 공용 페이월의 한국어 기간 표기를
월간/연간에서1개월/1년으로. en·ja·zh·es가 이미 그 꼴이었다. - 번체 중국어 50키를 대만 어휘로.
設定,回復購買項目,隱私權政策. - 일본어 결제 맥락의
解除. 한국어 '해제'를 옮긴 건데 일본어로는 '해지'로 읽힌다.購入,利用으로 바꿨다. - 한 앱은 무료 체험 조건에 없는 24시간 조항이 들어 있었다. 4개 로케일에서 지웠다.
- 다른 앱은 구독으로 뭘 받는지 설명하는 문장이 5개 로케일에서 "앱에 표시된 프리미엄 기능이 포함됩니다"로 비어 있었다. 심사 지침 3.1.2 소지. 메타데이터만 고쳐 다시 냈다.
리뷰어 지적을 기각한 것
리뷰어가 올린 것 중 넷은 근거를 대조해 기각했다. "설명문이 로케일마다 다르다"는 지적은 그 앱에 해당 로케일 설명문 자체가 없었고, "스토어는 워터마크 없음인데 앱에는 페이월이 있다"는 지적은 소스에 페이월 뷰가 없었다. 죽은 카탈로그 항목이 번역된 것이었다. 리뷰어 출력은 검증의 시작이지 판정이 아니다.
그 다음, 안드로이드
iOS에서 고친 걸 안드로이드 이식 앱 9개에 옮겼다. 원칙은 셋. iOS HEAD가 정답이다. base와의 diff가 작업 목록이다. 생성기가 있으면 생성기를 돌린다.
옮기다가 구조 결함 둘을 찾았다.
- 생성물 ARB를 손으로 고친 것이 재생성으로 사라져 있었다. 전 세션이 넣은 안드로이드 결제 문구 7키×5언어가 Apple 문구로 되돌아가 있었다.
overrides.json계층으로 옮겼다. 37건. - iOS 대조 테스트가 실패가 아니라 skip으로 빠져 있었다. 폴더를 옮기면서 상대 경로가 깨졌고, 매핑 36개와 l10n 전체가 초록불인 채 아무것도 대조하지 않았다.
그리고 실제 버그 하나. constella가 Play 사용자에게 "환불은 Apple 정책을 따른다"고 고지하고 있었다. 한 키 안에서 첫 문장은 5개 로케일이 오버라이드됐는데 둘째 문장은 ko만 됐다. 오버라이드가 문장 단위로 샜다. 새 가드는 키가 아니라 값을 스캔하고, 스토어 고지 항목이 5개 로케일 전부에서 Google을 언급하는지까지 본다.
남긴 규칙
- 번역 일괄 치환은 단어가 아니라 문장 단위로. 조사와 동사 어미가 붙는 언어에서는 특히.
- 리뷰가 초록이면 리뷰가 뭘 봤는지 확인한다. skip은 초록이 아니다.
- 플랫폼 고유 문구(환불·결제 주체)는 값 스캔으로 지킨다.