name: asc-localize-metadata description: 使用LLM翻译和asc CLI自动将App Store元数据(描述、关键词、更新内容、副标题)翻译并同步到多种语言。当需要本地化应用的App Store列表、翻译应用描述或向App Store Connect添加新语言时使用。
asc 本地化元数据
使用此技能来拉取英文(或任何源语言)的App Store元数据,使用LLM进行翻译,并将翻译推回App Store Connect — 全部自动化。
命令发现和输出约定
- 始终使用
--help确认特定asc版本的标志:asc localizations --helpasc localizations download --helpasc localizations upload --helpasc app-info set --help
- 优先使用显式长标志(
--app、--version、--version-id、--type、--app-info)。 - 默认输出是JSON;仅用于人工验证步骤时使用
--output table。 - 优先使用基于ID的确定性操作。除非用户明确同意,不要通过
head -1“选择第一行”。
前提条件
- 认证配置(
asc auth login或ASC_*环境变量) - 知道您的应用ID(使用
asc apps list查找) - 至少有一个语言环境(通常是en-US)在App Store Connect中已有元数据
支持的语言环境
App Store Connect的版本和应用信息本地化语言环境:
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
两种类型的元数据
版本本地化(每个版本)
字段:description、keywords、whatsNew、supportUrl、marketingUrl、promotionalText
应用信息本地化(应用级别,持久)
字段:name、subtitle、privacyPolicyUrl、privacyChoicesUrl、privacyPolicyText
工作流程
步骤1:解析ID
# 查找应用ID
asc apps list --output table
# 查找最新版本ID
asc versions list --app "APP_ID" --state READY_FOR_DISTRIBUTION --output table
# 或用于可编辑版本:
asc versions list --app "APP_ID" --state PREPARE_FOR_SUBMISSION --output table
# 查找应用信息ID(用于应用级别字段如name/subtitle)
asc app-infos list --app "APP_ID" --output table
注意:
- 版本本地化字段(描述、关键词、whatsNew等)是每个版本的。
- 应用信息字段(name、subtitle、隐私URL/文本)是应用级别的,使用
--type app-info。 - 如果只有名称(应用名称、版本字符串)并需要确定性ID,使用
asc-id-resolver。
步骤2:下载源语言环境
# 下载版本本地化到本地 .strings 文件
# (描述、关键词、whatsNew、promotionalText、supportUrl、marketingUrl等)
asc localizations download --version "VERSION_ID" --path "./localizations"
# 下载应用信息本地化到本地 .strings 文件
# (name、subtitle、privacyPolicyUrl、privacyChoicesUrl、privacyPolicyText等)
asc localizations download --app "APP_ID" --type app-info --app-info "APP_INFO_ID" --path "./app-info-localizations"
这将创建文件如 ./localizations/en-US.strings 和 ./app-info-localizations/en-US.strings。如果下载不可用,单独读取字段:
# 列出版本本地化以查看现有语言环境及其内容
asc localizations list --version "VERSION_ID" --output table
步骤3:使用LLM翻译
对于每个目标语言环境,翻译源文本。遵循以下规则:
翻译指南
- 语调和寄存器:始终使用正式、礼貌的语言。在语言区分的地方使用正式的“您”形式(俄语:«вы»,德语:«Sie»,法语:«vous»,西班牙语:«usted»,荷兰语:«u»,意大利语:«Lei»,葡萄牙语:«você» 正式等)。App Store描述是专业的营销文案 — 切勿使用随意或非正式寄存器。
- 描述:自然翻译,调整语调以适应本地市场。保持格式(换行、项目符号、表情符号)。保持在4000字符内。
- 关键词:不要字面翻译。研究该语言环境的用户会搜索什么。逗号分隔,总最大100字符。无重复,不包括应用名称(Apple会自动添加)。
- 更新内容:翻译发布说明。保持简洁。最大4000字符。
- 促销文本:翻译营销钩子。最大170字符。这可以在不发布新版本的情况下更新。
- 副标题:翻译或适配标语。最大30字符 — 这非常紧凑,可能需要创意适配。
- 名称:通常保留原始应用名称。仅当用户明确要求时翻译。最大30字符。
LLM翻译提示模板
对于每个目标语言环境,使用此方法:
将以下App Store元数据从{source_locale}翻译到{target_locale}。
规则:
- 描述:自然、流畅的翻译。保留格式(换行、项目符号、表情符号)。最大4000字符。
- 关键词:不要字面翻译。选择母语者在App Store中会搜索的关键词。逗号分隔,总最大100字符。不包括应用名称。
- 更新内容:自然翻译发布说明。最大4000字符。
- 促销文本:翻译营销标语。最大170字符。
- 副标题:创意适配标语以适合最大30字符。
- 名称:保留原始应用名称,除非明确要求翻译。最大30字符。
- 使用正式、礼貌的语言和正式的“您”形式(俄语:вы,德语:Sie,法语:vous,西班牙语:usted,荷兰语:u等)。App Store文案是专业营销 — 切勿使用非正式寄存器。
- 尊重文化背景。英语中的 playful 语调可能需要为正式市场(如 ja、de-DE)调整。
源({source_locale}):
描述:"""
{描述}
"""
关键词:{关键词}
更新内容:"""
{更新内容}
"""
促销文本:{促销文本}
名称:{名称}
副标题:{副标题}
步骤4:上传翻译
选项A:通过 .strings 文件(批量)
在适当的目录中为每个语言环境创建一个 .strings 文件。
版本本地化示例:
// nl-NL.strings
"描述" = "Je app-beschrijving hier";
"关键词" = "wiskunde,kinderen,tafels,leren";
"更新内容" = "Bugfixes en verbeteringen";
"促销文本" = "Leer de tafels van vermenigvuldiging!";
然后上传版本本地化:
asc localizations upload --version "VERSION_ID" --path "./localizations"
应用信息本地化示例:
// nl-NL.strings
"副标题" = "Leer tafels spelenderwijs";
然后上传应用信息本地化:
asc localizations upload --app "APP_ID" --type app-info --app-info "APP_INFO_ID" --path "./app-info-localizations"
选项B:通过单独命令(精细控制)
# 版本本地化字段(精细控制)。
# 优先传递显式版本ID以获得确定性。
asc app-info set --app "APP_ID" --version-id "VERSION_ID" --locale "nl-NL" \
--描述 "Je beschrijving..." \
--关键词 "wiskunde,kinderen,tafels" \
--更新内容 "Bugfixes en verbeteringen"
对于应用级别字段:
# 副标题/名称(应用信息本地化)通过应用信息本地化管理。
# 使用应用信息本地化 .strings + 上传流程(没有 `asc app-infos localizations ...` 命令)。
#
# 1) 编辑:./app-info-localizations/nl-NL.strings
# "副标题" = "Leer tafels spelenderwijs";
#
# 2) 上传:
asc localizations upload --app "APP_ID" --type app-info --app-info "APP_INFO_ID" --path "./app-info-localizations"
步骤5:验证
# 检查所有语言环境是否存在
asc localizations list --version "VERSION_ID" --output table
# 检查应用信息本地化
asc localizations list --app "APP_ID" --type app-info --app-info "APP_INFO_ID" --output table
字符限制(上传前强制检查!)
| 字段 | 限制 |
|---|---|
| 名称 | 30 |
| 副标题 | 30 |
| 关键词 | 100(逗号分隔) |
| 描述 | 4000 |
| 更新内容 | 4000 |
| 促销文本 | 170 |
始终验证 翻译文本在上传前符合限制。截断的文本看起来不专业。如果翻译超过限制,缩短它 — 不要在中途截断。
完整示例:添加 nl-NL 和 ru 到 Roxy Math
# 1) 确定性解析ID(不要自动选择“第一行”)
# 如果只有名称,使用 asc-id-resolver 技能。
asc apps list --output table
APP_ID="APP_ID_HERE"
asc versions list --app "$APP_ID" --state PREPARE_FOR_SUBMISSION --output table
VERSION_ID="VERSION_ID_HERE"
asc app-infos list --app "$APP_ID" --output table
APP_INFO_ID="APP_INFO_ID_HERE"
# 2) 下载英文源(或您选择的源语言环境)
asc localizations download --version "$VERSION_ID" --path "./localizations"
asc localizations download --app "$APP_ID" --type app-info --app-info "$APP_INFO_ID" --path "./app-info-localizations"
# 3) 读取 en-US.strings,翻译到 nl-NL 和 ru(LLM步骤)
# 4) 写入 nl-NL.strings 和 ru.strings 到:
# - ./localizations/(版本本地化字段)
# - ./app-info-localizations/(副标题/名称/隐私字段)
# 5) 上传所有
asc localizations upload --version "$VERSION_ID" --path "./localizations"
asc localizations upload --app "$APP_ID" --type app-info --app-info "$APP_INFO_ID" --path "./app-info-localizations"
# 6) 验证
asc localizations list --version "$VERSION_ID" --output table
asc localizations list --app "$APP_ID" --type app-info --app-info "$APP_INFO_ID" --output table
代理行为
- 始终从阅读源语言环境开始 — 切勿从记忆或假设翻译。
- 首先检查现有本地化 — 除非用户要求更新,否则不要覆盖现有翻译。
- 版本与应用信息不同 — 版本字段位于
--version "VERSION_ID"下;副标题/名称/隐私位于--app ... --type app-info下。 - 优先使用确定性ID — 除非明确请求,不要通过
head -1选择ID;使用--output table进行选择或asc-id-resolver。 - 上传前验证字符限制。计算每个字段的字符数。如果超过限制,重新翻译更短。
- 关键词是特殊的 — 不要字面翻译。研究适合语言环境的搜索词。像该语言用户在App Store中搜索一样思考。
- 在上传前向用户显示翻译 — 呈现所有字段 × 语言环境的摘要表以供批准。未经确认不要推送。
- 如果翻译多种语言,一次处理一个语言环境 — 更容易审查和捕获错误。
- 如果某个语言环境上传失败,记录错误,继续其他语言环境,最后报告所有失败。
- 对于更新现有本地化 — 下载当前,显示将更改的差异,获得批准,然后上传。
注意
- 版本本地化绑定到特定版本。如果版本不存在,先创建它。
promotionalText可以随时更新,无需新版本提交。whatsNew仅与更新相关,不适用于第一个版本。- 如果只有应用/版本名称而不是ID,使用
asc-id-resolver技能。 - 对于非翻译元数据操作,使用
asc-metadata-sync技能。 - 对于订阅/IAP显示名称本地化,使用
asc-subscription-localization技能。