英文版顺利过审,日文版却被拒,审核员说日文副标题里写了主语言版本里没有的承诺;或者你的西班牙语截图展示的是三个版本前就移除的功能,因为本地化团队拿不到最新设计稿;或者某些 locale 直接显示英文,因为翻译从来没确认过。App Store Connect 把每个 locale 当独立上架审,差异就从这里开始反噬。
修复分两步:一是审计(找出每一个偏离主语言的 locale),二是流程改造(停止让本地化”另起一条线”)。绝大多数清理只改 metadata 就能重交,不用动 build。
常见原因
按命中率排序,#1 最常见。
1. 本地化标题 / 副标题为抢 ASO 加了新承诺
营销或地区团队为日区 ASO 在日文副标题加了 “#1 AI productivity app” 或 “with built-in voice assistant”。主语言从没这么写过。地区审核员一看 App 给他这地区不提供这能力,标记拒回。
如何判断:App Store Connect → App Information,切换 locale 下拉到每一个支持语言。把 title / subtitle / promotional text / description 抄到一张表里。逐行和主语言 diff。任何只在某个 locale 出现的名词、动词、数字承诺都标记。
2. 本地化截图展示老 UI 或不存在的功能
本地化团队半年前拿到截图模板,换上文字层就出货了。底图还停在 build 1.4 你现在已经 2.7。按钮位移、功能下线、深色模式变化——只在本地化上架页才能看到。
如何判断:从 App Store Connect 把每个 locale 的截图全下载下来(右键保存)。exiftool 看时间戳或者目视和你最新开发 build 的截图对比。任何”看起来比当前 build 老”的就是过期。
3. Locale 加了但本地化字段从没复核
你在 App Store Connect 里开了法语分发,但本地化标题还是主语言英文,因为没人填。审核员看到法区 App Store 页显示英文,标记为低质量上架。
如何判断:每个 locale 看 title 和 description 是否和主语言一字不差。是的话要么是没翻译要么是字段没覆盖。
4. Custom Product Pages / Variant Pages 和 locale 重叠
你为德区某广告活动建了 Custom Product Page,但页面截图还用美区文字。德区用户落到一个”自定义”页,视觉上和主上架页矛盾。
如何判断:App Store Connect → Custom Product Pages → 看每个页面适用的 locale。在真机上用德区 storefront 打开它,和主德区上架页对比。
5. 关键词字段混 locale 或含被禁词
100 字符关键词字段是按 locale 算的。有的团队把英文关键词粘进日文字段,或用了某地区有商标但他地区没的竞品名。地区审核员逮个正着。
如何判断:App Store Connect → Pricing and Availability 看 storefront 列表;再 App Information → Keywords(每个 locale 一份)。某 locale 字段含英文 token 或竞品品牌名就有风险。
6. App 内 locale 和上架页 locale 对不上
你在 App Store 页列出支持法语,但 App 设成 fr-FR 时回退英文。审核员发现不匹配,标 2.3.7(Metadata Accuracy)。
如何判断:模拟器设成法语跑一次 App。任何用户可见的字符串还是英文,上架页就在 over-promise。
动手前先确认
- 确认拒回到底只针对某 locale 还是全部 locale,文案在 Resolution Center 里不同。
- 锁定主语言(多数情况是 English U.S.)作为 canonical,所有其他 locale 与它对齐。
- 决定是仅改 metadata 重交,还是需要重打 build(比如上架页承诺的法语字符串 App 里真没有)。
- 改之前把当前所有 locale 字段截图归档,App Store Connect 不保留历史版本。
需要收集的信息
- 审核员拒回原文 + 涉及的 locale。
- 一张所有 locale 字段的电子表:title / subtitle / description / keywords / promo / 截图。
- 主语言版本各字段作为 ground truth。
- 本地化截图原文件(从 App Store Connect 下载)。
- Custom Product Pages 和 Variant Pages 清单及它们适用的 locale。
最短修复路径
Step 1:建 locale 矩阵
用 App Store Connect API 或网页 UI 提取所有本地化字段:
# App Store Connect API:列出某版本的所有本地化
curl -H "Authorization: Bearer $JWT" \
"https://api.appstoreconnect.apple.com/v1/appStoreVersions/$VERSION_ID/appStoreVersionLocalizations" \
| jq '.data[] | {locale: .attributes.locale, name: .attributes.name, subtitle: .attributes.subtitle, description: .attributes.description}'
导出 CSV。每行一个 locale,列是 name / subtitle / description / keywords / promo。主语言是第 1 行。
Step 2:逐 locale 对照主语言 diff
按表走每个 cell,问自己:
- 含主语言没有的名词、动词、承诺?标删。
- 含主语言没有的数字承诺(“#1”、“Best of 2026”)?标删。
- 和主语言一字不差(没翻译)?标重译。
- 提到竞品品牌名?标删。
Step 3:从真实本地化 build 重截截图
Xcode 里把模拟器设成目标 locale(Edit Scheme → Run → Options → App Language),跑你的 build,重截规范化截图集。不要在主语言截图上 Photoshop 加文字——必须从真实本地化运行里截。
自动化:
# fastlane snapshot 多 locale Snapfile
fastlane snapshot --languages "ja-JP,fr-FR,es-ES,zh-Hans"
Step 4:回填每个 locale 的上架字段
App Store Connect → Localizable Information,逐 locale 改:
- 承诺集是主语言的”翻译”而不是”扩展”。
- 关键词字段用 locale 本土 token,无竞品名。
- 截图来自当前版本的真实本地化 build。
Step 5:核对 Custom Product Pages 和 Variant Pages
每个 Custom Product Page / Variant 都要按同一套 canonical 承诺集核截图和文字。Variant 是和主上架一起审的,不一致直接拒。
Step 6:重新提交(binary 没动就 metadata-only)
拒回只针对 locale 字段就直接重交,不动 build。如果还需要补 App 内本地化字符串,先 Archive 新 build。
怎么确认已经修好
- locale 矩阵审计走完后零标记。
- 每个 locale 的截图都在当前发版窗口内。
- 每个 locale 的母语者读上架页,确认描述准确。
- 触发拒回的 locale 重交后状态回到 Waiting for Review。
如果还是没修好
- 在 Resolution Center 回复时附上 locale 矩阵,展示被标承诺的 before/after。
- 让审核员澄清具体哪个词或哪屏被标——某些 2.3.7 拒回比较模糊。
- 在 Pricing and Availability 临时关闭问题 locale 让其余上架,修好再开。
- 某 locale 审核员持续标记主语言里也有的承诺时,通过 Apple Developer Relations 升级。
预防建议
- 把本地化纳入发布分支,不要并行做;要求 metadata 翻译完成才能合 PR。
- 用
fastlane deliver或 App Store Connect API 从仓库里的单一真源文件(app-store/metadata/<locale>.txt)推送本地化字段。 - 每个翻译都配一个截图复核员,跑真实本地化 build 而不只是看文字。
- 发布清单加一条:每个 locale 都要从当前 build 重截或重核截图。
- 别为了 SEO 在某地区加单独承诺——短期排名提升远抵不过审核反复的代价。