結合 LLM 翻譯與 asc CLI,自動將 App Store 元數據(包含 App 描述、關鍵字、新功能更新、副標題等)翻譯並同步至多種語言。當需要本地化 App 的 App Store 頁面、翻譯 App 描述,或是為 App Store Connect 新增語言版本時,請使用此 Skill。
asc localize metadata
使用此 Skill 來拉取英文(或任何來源語系)的 App Store 元數據,透過 LLM 進行翻譯,並將翻譯結果自動推送回 App Store Connect — 全流程自動化。
指令探索與輸出規範
- 務必透過
--help確認目前使用的asc版本支援哪些參數選項(flags):asc localizations --helpasc localizations download --helpasc localizations upload --helpasc apps info edit --help
- 優先使用明確的完整選項(long flags,如
--app、--version、--version-id、--type、--app-info)。 - 預設輸出格式為 JSON;僅在需要人工核對結果時使用
--output table。 - 優先採用具確定性的 ID 操作。除非使用者明確同意,否則切勿使用
head -1「直接取第一列」。
前置條件
- 已配置身份驗證(使用
asc auth login或設定ASC_*環境變數) - 已知曉 App ID(可執行
asc apps list查詢) - App Store Connect 中至少已有一個語系(通常為 en-US)填寫了元數據
支援的語系
App Store Connect 支援的版本(version)與 App 資訊(app-info)本地化語系如下:
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
兩大類型的元數據
版本本地化(Version Localizations,每次版本更新獨立設定)
欄位:description(描述)、keywords(關鍵字)、whatsNew(新功能)、supportUrl(支援網址)、marketingUrl(行銷網址)、promotionalText(宣傳文字)
App 資訊本地化(App Info Localizations,App 層級,跨版本持續有效)
欄位:name(名稱)、subtitle(副標題)、privacyPolicyUrl(隱私權政策網址)、privacyChoicesUrl(隱私權選擇網址)、privacyPolicyText(隱私權政策內文)
工作流程
步驟 1:取得相關 ID
# 查詢 App 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
# 查詢 App Info ID(用於名稱/副標題等 App 層級欄位)
asc apps info list --app "APP_ID" --output table
注意事項:
- 版本本地化欄位(description、keywords、whatsNew 等)依各個版本獨立設定。
- App 資訊欄位(name、subtitle、隱私權網址/文字)屬於 App 層級,需搭配
--type app-info使用。 - 若手上只有名稱(App 名稱、版本號字串),且需要精準取得對應 ID,請使用
asc-id-resolver。
步驟 2:下載來源語系資料
# 下載版本本地化內容至本地 .strings 檔案
# (description, keywords, whatsNew, promotionalText, supportUrl, marketingUrl, ...)
asc localizations download --version "VERSION_ID" --path "./localizations"
# 下載 App 資訊本地化內容至本地 .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 描述屬於專業行銷文案,切勿使用隨意或口語化的表達方式。
- description:翻譯需自然流暢,並針對當地市場微調語氣。請保留原本的排版格式(換行、列點符號、表情符號等)。字數限制在 4000 字以內。
- keywords:切勿字面直譯!請研究該語系使用者在 App Store 中實際會搜尋的關鍵字。以逗號分隔,總字數最多 100 字。不可重複,且不需包含 App 名稱(Apple 會自動納入)。
- whatsNew:翻譯版本更新說明。保持簡明扼要。最多 4000 字。
- promotionalText:翻譯行銷主打標語。最多 170 字。此欄位無需提交新版本即可隨時更新。
- subtitle:翻譯或意譯副標標語。最多 30 字 — 上限相當嚴格,可能需要發揮創意重新潤飾。
- name:通常保留原始 App 名稱。除非使用者明確要求翻譯,否則不需變更。最多 30 字。
LLM 翻譯 Prompt 範本
針對各個目標語系,請使用以下 Prompt 結構:
Translate the following App Store metadata from {source_locale} to {target_locale}.
Rules:
- description: Natural, fluent translation. Preserve formatting (line breaks, bullets, emoji). Max 4000 chars.
- keywords: Do NOT literally translate. Choose keywords native speakers would search for in the App Store. Comma-separated, max 100 chars total. Do not include the app name.
- whatsNew: Translate release notes naturally. Max 4000 chars.
- promotionalText: Translate marketing tagline. Max 170 chars.
- subtitle: Adapt tagline creatively to fit 30 chars max.
- name: Keep the original app name unless explicitly requested to translate it. Max 30 chars.
- Use formal, polite language and formal "you" forms (Russian: вы, German: Sie, French: vous, Spanish: usted, Dutch: u, etc.). App Store copy is professional marketing — never use informal register.
- Respect cultural context. A playful tone in English may need adjustment for formal markets (e.g., ja, de-DE).
Source ({source_locale}):
description: """
{description}
"""
keywords: {keywords}
whatsNew: """
{whatsNew}
"""
promotionalText: {promotionalText}
name: {name}
subtitle: {subtitle}
步驟 4:上傳翻譯結果
方案 A:透過 .strings 檔案(批量上傳)
在對應的目錄中,為每個語系建立一個 .strings 檔案。
版本本地化範例:
// nl-NL.strings
"description" = "Je app-beschrijving hier";
"keywords" = "wiskunde,kinderen,tafels,leren";
"whatsNew" = "Bugfixes en verbeteringen";
"promotionalText" = "Leer de tafels van vermenigvuldiging!";
接著上傳版本本地化檔案:
asc localizations upload --version "VERSION_ID" --path "./localizations"
App 資訊本地化範例:
// nl-NL.strings
"subtitle" = "Leer tafels spelenderwijs";
接著上傳 App 資訊本地化檔案:
asc localizations upload --app "APP_ID" --type app-info --app-info "APP_INFO_ID" --path "./app-info-localizations"
方案 B:透過單獨指令(精細控制)
# 版本本地化欄位(精細控制)
# 為確保精準度,建議明確指定 Version ID
asc apps info edit --app "APP_ID" --version-id "VERSION_ID" --locale "nl-NL" \
--description "Je beschrijving..." \
--keywords "wiskunde,kinderen,tafels" \
--whats-new "Bugfixes en verbeteringen"
針對 App 層級欄位:
# 副標題/名稱(App 資訊本地化)需透過 app-info localizations 進行管理。
# 請使用 app-info 本地化的 .strings + 上傳流程;目前沒有獨立編輯 app-info 本地化的指令。
#
# 1) 編輯:./app-info-localizations/nl-NL.strings
# "subtitle" = "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
# 檢查 App 資訊本地化設定
asc localizations list --app "APP_ID" --type app-info --app-info "APP_INFO_ID" --output table
字數限制(上傳前務必核對!)
| 欄位 | 上限 |
|---|---|
| 名稱(Name) | 30 |
| 副標題(Subtitle) | 30 |
| 關鍵字(Keywords) | 100(以逗號分隔) |
| 描述(Description) | 4000 |
| 新功能(What's New) | 4000 |
| 宣傳文字(Promotional Text) | 170 |
上傳前務必確認翻譯後的文字符合字數限制。文字被硬生生截斷會顯得非常不專業。若翻譯超過上限,請精簡文案 — 切勿在句子中途直接裁切。
完整範例:為 Roxy Math 新增 nl-NL 與 ru 語系
# 1) 精準取得各項 ID(請勿自動選取「第一列」)
# 若只有 App 或版本名稱,請使用 asc-id-resolver Skill。
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 apps info 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,並透過 LLM 翻譯為 nl-NL 與 ru
# 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
Agent 行為規範
- 務必先讀取來源語系內容 — 絕不憑記憶或主觀假設進行翻譯。
- 先檢查現有的本地化內容 — 除非使用者明確要求更新,否則請勿直接覆蓋現有的翻譯。
- 區分「版本本地化」與「App 資訊本地化」 — 版本欄位位於
--version "VERSION_ID"下;副標題/名稱/隱私權政策等則屬於--app ... --type app-info。 - 優先採用精準確定的 ID — 除非使用者明確指示,否則請勿透過
head -1隨機選擇 ID;建議使用--output table進行人工確認或搭配asc-id-resolver。 - 在上傳前驗證字數限制。精確計算每個欄位的字數,若超出上限,請重新潤飾為更精簡的版本。
- 關鍵字(Keywords)需特別處理 — 切勿字面直譯!請研究適合該語系的搜尋詞彙,站在該語言使用者搜尋 App Store 的角度思考。
- 在上傳前先展示翻譯結果供使用者確認 — 提供包含所有「欄位 × 語系」的摘要表格供審核,未經確認切勿直接推送。
- 若需翻譯多種語言,建議一次處理一個語系 — 這樣更方便審核並及時發現錯誤。
- 若某個語系上傳失敗,請記錄錯誤訊息後繼續處理其他語系,並在最後統一報告所有失敗項目。
- 若要更新現有的本地化內容 — 先下載目前版本,顯示變更前後的差異(diff),取得使用者同意後再進行上傳。
注意事項
- 版本本地化內容會綁定至特定版本。若該版本尚不存在,請先建立版本。
promotionalText(宣傳文字)可隨時更新,無需隨新版本一併提交。whatsNew(新功能)僅適用於版本更新,首次上架的 App 不適用。- 若手上只有 App 或版本名稱而非 ID,請使用
asc-id-resolverSkill。 - 如需進行非翻譯類的元數據操作,請使用
asc-metadata-syncSkill。 - 若要本地化訂閱項目或 App 內購(IAP)的顯示名稱,請改用
asc-subscription-localizationSkill。






