asc-subscription-localization

asc-subscription-localization

热门

使用 asc CLI 批量本地化 App Store 各语言区的订阅、订阅组以及内购项目(IAP)的显示名称与描述,支持 API 4.4.1 版本作用域的 v2 资源。适合在无需手动操作 App Store Connect 后台界面的情况下,快速填充或更新订阅/IAP 的多语言名称与描述。

948Star
50Fork
更新于 2026/7/31
SKILL.md
只读
名称
asc-subscription-localization
描述

使用 asc CLI 批量本地化 App Store 各语言区的订阅、订阅组以及内购项目(IAP)的显示名称与描述,支持 API 4.4.1 版本作用域的 v2 资源。适合在无需手动操作 App Store Connect 后台界面的情况下,快速填充或更新订阅/IAP 的多语言名称与描述。

asc subscription localization

使用此 Skill 可以在所有 App Store Connect 支持的语言区中,批量创建或更新订阅、订阅组和内购项目(IAP)的显示名称及描述(若支持)。这无需再逐个点击 App Store Connect 后台的语言页面去重复填写相同名称,省去了繁琐的手工操作。

前提条件

  • 已配置身份认证(运行 asc auth login 或设置 ASC_* 环境变量)。
  • 明确应用 ID(使用 ASC_APP_ID 环境变量或 --app 参数)。
  • 对应的订阅组和订阅项目已存在。

优先选择正确的 API 作用域

API 4.4.1 为 IAP、订阅及订阅组引入了独立的版本概念。版本 ID(Version ID)与产品 ID(Product ID)、订阅 ID(Subscription ID)或订阅组 ID(Group ID)并不相同。

  • 所有新的本地化工作均须使用 asc ... versions localizations ... 路径下的命令。
  • 切勿使用产品作用域或订阅组作用域的 v1 本地化命令。API 4.4.1 已经弃用了这些资源,CLI 对其兼容命令会输出迁移警告。
  • 绝不要向版本作用域(version-scoped)的命令中传入产品 ID、订阅 ID 或订阅组 ID。

在进行本地化配置前,先查询或创建对应的版本:

asc iap versions list --iap-id "IAP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output table
asc subscriptions versions list --subscription-id "SUB_ID" --state PREPARE_FOR_SUBMISSION --paginate --output table
asc subscriptions groups versions list --group-id "GROUP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output table

根据各个查询结果分别分支处理:匹配数为 0 则创建版本;匹配数为 1 则复用该版本 ID;若匹配数大于 1,则停止执行并要求指定明确的版本 ID。仅在匹配数为 0 的分支下运行下列对应创建命令:

# 仅当 IAP 版本列表返回 0 个匹配项时运行:
asc iap versions create --iap-id "IAP_ID" --output json
# 仅当订阅版本列表返回 0 个匹配项时运行:
asc subscriptions versions create --subscription-id "SUB_ID" --output json
# 仅当订阅组版本列表返回 0 个匹配项时运行:
asc subscriptions groups versions create --group-id "GROUP_ID" --output json

这三类版本均未提供版本删除命令。请查询并复用唯一处于 PREPARE_FOR_SUBMISSION 状态的版本;只有在匹配数为 0 时才创建新版本,存在多个匹配时必须暂停并提示要求提供明确 ID。由于线上删除父级对象并不会级联删除对应的 IAP 或订阅版本,因此切勿假定删除父级对象就能清理掉测试时创建的版本。

支持的 App Store 语言区(Locales)

以下是 App Store Connect 为订阅及 IAP 本地化所支持的语言区代码:

ar-SA, ca, cs, da, de-DE, el, en-AU, en-CA, en-GB, en-US,
es-ES, es-MX, fi, fr-CA, fr-FR, he, hi, hr, hu, id, it,
ja, ko, ms, nl-NL, no, pl, pt-BR, pt-PT, ro, ru, sk,
sv, th, tr, uk, vi, zh-Hans, zh-Hant

工作流:批量本地化订阅版本(v2)

先列出已有本地化项,仅创建缺少的语言区,最后进行验证:

asc subscriptions versions localizations list --version-id "VERSION_ID" --paginate --output table
asc subscriptions versions localizations create --version-id "VERSION_ID" --locale "LOCALE" --name "Display Name" --description "Description"
asc subscriptions versions localizations list --version-id "VERSION_ID" --paginate --output table

更新时需明确区分省略值、非空字符串以及 JSON null

asc subscriptions versions localizations update --id "LOC_ID" --name "New Name" --description "Updated description"

不要将设值参数与对应的 --clear-name--clear-description 清除标志同时使用。虽然 4.4.1 Schema 允许 JSON null,但 Apple 线上服务目前会拒绝订阅版本本地化中的空 --description--clear-description,因为描述内容必须至少包含一个字符。

因此,创建缺少的订阅版本本地化项时必须提供非空描述。如果执行任务时仅提供了显示名称,可以更新已有本地化项的名称,但在用户提供非空语言区专属描述或通用后备描述之前,绝不能创建新的语言区本地化项。

工作流:批量本地化订阅组版本(v2)

asc subscriptions groups versions localizations list --version-id "VERSION_ID" --paginate --output table
asc subscriptions groups versions localizations create --version-id "VERSION_ID" --locale "LOCALE" --name "Group Display Name" --custom-app-name "My App"
asc subscriptions groups versions localizations update --id "LOC_ID" --name "Updated Group Display Name" --custom-app-name "My App"
asc subscriptions groups versions localizations list --version-id "VERSION_ID" --paginate --output table

清除元数据是一项显式的独立操作。确认用户确实想要移除已有的自定义应用名称后,再执行:

asc subscriptions groups versions localizations update --id "LOC_ID" --clear-custom-app-name

在标准的批量本地化工作流中,切勿包含 --clear-name--clear-custom-app-name。只有当明确意图置为 JSON null 时才使用这两个标志;省略标志则保持该属性原样不变。

工作流:批量本地化 IAP 版本(v2)

asc iap versions localizations list --version-id "VERSION_ID" --paginate --output table
asc iap versions localizations create --version-id "VERSION_ID" --locale "LOCALE" --name "Display Name" --description "Description"
asc iap versions localizations update --localization-id "LOC_ID" --description "Updated description"
asc iap versions localizations list --version-id "VERSION_ID" --paginate --output table

即便 4.4.1 Schema 允许 JSON null,Apple 线上服务同样拒绝 IAP 版本本地化中的空描述与 --clear-description。与订阅逻辑一致,仅提供显示名称的操作可以更新现有的 IAP 本地化项,但在拿到非空描述前,不得创建缺少的语言区。

批量本地化 App 内的所有订阅版本

对于包含多个订阅组和订阅项目的完整应用:

# 1. 查询订阅组列表,并获取每个组唯一的未提交/可编辑版本(mutable version)。
asc subscriptions groups list --app "APP_ID" --paginate --output json
asc subscriptions groups versions list --group-id "GROUP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json

# 2. 本地化各个订阅组版本。
asc subscriptions groups versions localizations list --version-id "GROUP_VERSION_ID" --paginate --output json
asc subscriptions groups versions localizations create --version-id "GROUP_VERSION_ID" --locale "LOCALE" --name "Group Display Name"

# 3. 查询订阅项目列表,并获取每个订阅项目唯一的未提交/可编辑版本。
asc subscriptions list --group-id "GROUP_ID" --paginate --output json
asc subscriptions versions list --subscription-id "SUB_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json

# 4. 本地化各个订阅版本。
asc subscriptions versions localizations list --version-id "SUBSCRIPTION_VERSION_ID" --paginate --output json
asc subscriptions versions localizations create --version-id "SUBSCRIPTION_VERSION_ID" --locale "LOCALE" --name "Display Name" --description "Description"

对各个版本查询列表同样适用 0/1/多 判定规则:匹配数为 0 时创建版本,匹配数为 1 时直接复用,若返回多个匹配项则暂停并要求明确指定 ID。

Agent 行为规范

  • 开展新本地化工作时,必须仅使用版本作用域(version-scoped)的 v2 资源。
  • 严禁混淆版本 ID 与产品 ID、订阅 ID 及订阅组 ID。
  • 务必先列出已有本地化项,避免重复创建引发错误。
  • 遇缺失语言区则创建,已存在但字段值不一致时更新解析出的本地化 ID,字段值完全一致时不做任何操作。
  • 若用户仅提供单个显示名称,则在所有语言区统一使用该名称。
  • 若用户按语言区提供了翻译名称,则各语言区使用对应的本地化名称。
  • 对于订阅和 IAP 版本的本地化,每次创建时均要求提供非空的 --description。如果用户只提供了显示名称,应按解析出的 ID 更新已有本地化项,跳过缺失语言区的创建,并提示用户提供语言区专属描述或一个非空后备描述后再执行创建。
  • 更新已有订阅或 IAP 版本本地化项时,除非用户显式提供了新的非空值,否则应省略 --description 参数;绝不可自行推断为空值或执行清除。
  • 订阅组版本的本地化项没有描述字段。按正常逻辑创建或更新其名称即可,仅在用户显式提供该值时才附带 --custom-app-name
  • 在验证步骤中使用 --output table,方便用户直观确认。
  • 在自动化中间步骤显式使用 --output json;默认输出会根据是否为 TTY 环境自动调整。
  • 批量写入完成后,务必再次运行 list 命令检查完整性。
  • 对于包含大量订阅的应用,按订阅组顺序逐个处理,确保输出内容清晰易读。
  • 若某个语言区的创建或更新调用失败,记录该语言区与错误日志,随后继续处理其余语言区。待整批任务完成后,汇总报告所有失败项,方便用户统一处理。

注意事项

  • 订阅显示名称即用户在订阅管理弹框及购买确认界面看到的文本。
  • 为已存在的语言区重复创建本地化项会导致失败;如需修改,请先查询列表并更新对应解析出的 ID。
  • 不存在批量接口,每个语言区均需发起单独的创建请求。
  • 在查询命令中使用 --paginate 参数,确保获取全部已有的本地化项。
  • 如果只有应用名称而没有 ID,可调用 asc-id-resolver Skill 进行解析。