rudrankriyam/asc-skills/asc-localize-metadata
- community
Checking that the SKILL.md file is still in the repository.
Automatically translate and sync App Store metadata (description, keywords, what's new, subtitle) to multiple languages using LLM translation and asc CLI. Use when asked to localize an app's App Store listing, translate app descriptions, or add new languages to App Store Connect.
Install
npx vskill@latest install rudrankriyam/asc-skills/asc-localize-metadataSKILL.md
asc localize metadata
Use this skill to pull English (or any source locale) App Store metadata, translate it with LLM, and push translations back to App Store Connect — all automated.
Command discovery and output conventions
- Always confirm flags with
--helpfor the exactascversion: asc localizations --helpasc localizations download --helpasc localizations upload --helpasc apps info edit --help- Prefer explicit long flags (
--app,--version,--version-id,--type,--app-info). - Output defaults are TTY-aware: table in interactive terminals and JSON in CI or other non-interactive contexts. Use explicit
--outputwhen the format matters. - Prefer deterministic ID-based operations. Do not "pick the first row" via
head -1unless the user explicitly agrees.
Preconditions
- Auth configured (
asc auth loginorASC_*env vars) - Know your app ID (
asc apps listto find it) - At least one locale (typically en-US) already has metadata in App Store Connect
Supported Locales
App Store Connect locales for version and app-info localizations:
Two Types of Metadata
Version Localizations (per-release)
Fields: description, keywords, whatsNew, supportUrl, marketingUrl, promotionalText
App Info Localizations (app-level, persistent)
Fields: name, subtitle, privacyPolicyUrl, privacyChoicesUrl, privacyPolicyText
Workflow
Step 1: Resolve IDs
Notes:
- Version-localization fields (description, keywords, whatsNew, etc.) are per-version.
- App-info fields (name, subtitle, privacy URLs/text) are app-level and use
--type app-info. - If you only have names (app name, version string) and need IDs deterministically, use
asc-id-resolver.
Step 2: Download source locale
This creates files like ./localizations/en-US.strings and ./app-info-localizations/en-US.strings. If download is unavailable, read fields individually:
Step 3: Translate with LLM
For each target locale, translate the source text. Follow these rules:
Translation Guidelines
- Tone & Register: Always use formal, polite language. Use formal "you" forms where the language distinguishes them (Russian: «вы», German: «Sie», French: «vous», Spanish: «usted», Dutch: «u», Italian: «Lei», Portuguese: «você» formal, etc.). App Store descriptions are professional marketing copy — never use casual or informal register.
- description: Translate naturally, adapt tone to local market. Keep formatting (line breaks, bullet points, emoji). Stay within 4000 chars.
- keywords: Do NOT literally translate. Research what users in that locale would search for. Comma-separated, max 100 chars total. No duplicates, no app name (Apple adds it automatically).
- whatsNew: Translate release notes. Keep it concise. Max 4000 chars.
- promotionalText: Translate marketing hook. Max 170 chars. This can be updated without a new version.
- subtitle: Translate or adapt tagline. Max 30 chars — this is very tight, may need creative adaptation.
- name: Usually keep the original app name. Only translate if the user explicitly asks. Max 30 chars.
LLM Translation Prompt Template
For each target locale, use this approach:
Step 4: Upload translations
Option A: Via .strings files (bulk)
Create a .strings file per locale in the appropriate directory.
Version localization example:
Then upload version localizations:
App-info localization example:
Then upload app-info localizations:
Option B: Via individual commands (fine control)
For app-level fields:
Step 5: Verify
Character Limits (enforce before upload!)
| Field | Limit | |
|---|---|---|
| Name | 30 | |
| Subtitle | 30 | |
| Keywords | 100 (comma-separated) | |
| Description | 4000 | |
| What's New | 4000 | |
| Promotional Text | 170 |
Always validate translated text fits within limits before uploading. Truncated text looks unprofessional. If translation exceeds the limit, shorten it — do not truncate mid-sentence.
Full Example: Add nl-NL and ru to Roxy Math
Agent Behavior
- Always start by reading the source locale — never translate from memory or assumptions.
- Check existing localizations first — don't overwrite existing translations unless the user asks to update them.
- Version vs app-info is different — version fields live under
--version "VERSION_ID"; subtitle/name/privacy live under--app ... --type app-info. - Prefer deterministic IDs — do not select IDs via
head -1unless explicitly requested; use--output tablefor selection orasc-id-resolver. - Validate character limits before uploading. Count characters for each field. If over limit, re-translate shorter.
- Keywords are special — do not literally translate. Research locale-appropriate search terms. Think like a user searching the App Store in that language.
- Show the user translations before uploading — present a summary table of all fields × locales for approval. Do not push without confirmation.
- Process one locale at a time if translating many languages — easier to review and catch errors.
- If upload fails for a locale, log the error, continue with other locales, report all failures at the end.
- For updates to existing localizations — download current, show diff of what will change, get approval, then upload.
Notes
- Version localizations are tied to a specific version. Create the version first if it doesn't exist.
promotionalTextcan be updated anytime without a new version submission.whatsNewis only relevant for updates, not the first version.- Use
asc-id-resolverskill if you only have app/version names instead of IDs. - Use
asc-metadata-syncskill for non-translation metadata operations. - For subscription/IAP display name localization, use
asc-subscription-localizationskill instead.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationFailed, 60 of 100Degrading. 1 run. Evaluated 7 months ago.
Source
- SKILL.md in the repositoryCheckingskills/asc-localize-metadata/SKILL.md
Popularity
- Repository stars
- 823
- Repository forks
- 44
- 7-day trend score
- 34
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 2 Apr 2026, 6 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/rudrankriyam/asc-skills/asc-localize-metadata)