Automated summary
This skill bulk-creates or bulk-updates display names (and descriptions) for subscriptions, subscription groups, and in-app purchases across every App Store Connect locale using the asc command-line tool.
Strengths
- Covers the full list of App Store Connect locales so none are missed
- Includes a check of existing localizations so only missing locales get created
- Built on explicit, scriptable asc commands for ID resolution and per-locale creation
- Eliminates the manual click-through of each language in App Store Connect
Limitations
- Requires asc authentication to be set up and subscription groups/subscriptions to already exist
- The example reuses the same string for every locale, so actual translated names are still up to you
- Does not cover update/delete commands or recovery from partially failed bulk runs
Use it when you need to quickly fill in or complete display names for subscriptions and in-app purchases across all App Store Connect languages.
Avoid it if your asc credentials are not configured or the subscription groups do not yet exist in App Store Connect.
Security analysis
CautionThe skill instructs legitimate App Store Connect operations via the asc CLI. While not destructive or exfiltrating, it performs bulk write operations to production metadata and requires credentials, so caution is warranted.
- •Uses the asc CLI with App Store Connect credentials to modify production metadata in bulk.
- •No guardrails or confirmation steps are suggested before creating many localizations, increasing the risk of accidental unintended changes.
- •Relies on environment variables or auth state that may be present in the executing environment.
Examples
Use asc to set the display name "Monthly Pro" for subscription SUB_ID across all App Store Connect locales, skipping any locale that already has a localization.List the existing localizations for subscription SUB_ID with asc and tell me which App Store locales are still missing a display name.List the subscription groups for app 123456789 with asc, then list the subscriptions in the first group so I can pick the one to localize.name: asc-subscription-localization description: Bulk-localize subscription and in-app purchase display names across all App Store locales using asc. Use when you want to fill in subscription/IAP names for every language without clicking through App Store Connect manually.
asc subscription localization
Use this skill to bulk-create or bulk-update display names (and descriptions) for subscriptions, subscription groups, and in-app purchases across all App Store Connect locales. This eliminates the tedious manual process of clicking through each language in App Store Connect to set the same display name.
Preconditions
- Auth configured (
asc auth loginorASC_*env vars). - Know your app ID (
ASC_APP_IDor--app). - Subscription groups and subscriptions already exist.
Supported App Store Locales
These are the locales supported by App Store Connect for subscription and IAP localizations:
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
Workflow: Bulk-Localize a Subscription
1. Resolve IDs
# Find subscription groups
asc subscriptions groups list --app "APP_ID" --output table
# Find subscriptions within a group
asc subscriptions list --group-id "GROUP_ID" --output table
2. Check existing localizations
asc subscriptions localizations list --subscription-id "SUB_ID" --paginate --output table
This shows which locales already have a name set. Only create localizations for missing locales.
3. Create localizations for all missing locales
For each locale that does not already have a localization, run:
asc subscriptions localizations create \
--subscription-id "SUB_ID" \
--locale "LOCALE" \
--name "Display Name"
For example, to set "Monthly Pro" across all locales:
# One command per locale (skip any that already exist)
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "ar-SA" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "ca" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "cs" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "da" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "de-DE" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "el" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "en-AU" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "en-CA" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "en-GB" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "es-ES" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "es-MX" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "fi" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "fr-CA" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "fr-FR" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "he" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "hi" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "hr" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "hu" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "id" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "it" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "ja" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "ko" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "ms" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "nl-NL" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "no" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "pl" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "pt-BR" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "pt-PT" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "ro" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "ru" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "sk" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "sv" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "th" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "tr" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "uk" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "vi" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "zh-Hans" --name "Monthly Pro"
asc subscriptions localizations create --subscription-id "SUB_ID" --locale "zh-Hant" --name "Monthly Pro"
4. Verify
asc subscriptions localizations list --subscription-id "SUB_ID" --paginate --output table
Workflow: Bulk-Localize a Subscription Group
Subscription groups also have their own display name per locale (this is the "group name" shown to users in the subscription management sheet).
1. Check existing group localizations
asc subscriptions groups localizations list --group-id "GROUP_ID" --paginate --output table
2. Create for missing locales
asc subscriptions groups localizations create \
--group-id "GROUP_ID" \
--locale "LOCALE" \
--name "Group Display Name"
Optional: set a custom app name for the group:
asc subscriptions groups localizations create \
--group-id "GROUP_ID" \
--locale "LOCALE" \
--name "Group Display Name" \
--custom-app-name "My App"
3. Verify
asc subscriptions groups localizations list --group-id "GROUP_ID" --paginate --output table
Workflow: Bulk-Localize an In-App Purchase
IAPs have their own localization commands with the same pattern.
1. Resolve IAP ID
asc iap list --app "APP_ID" --output table
2. Check existing localizations
asc iap localizations list --iap-id "IAP_ID" --paginate --output table
3. Create for missing locales
asc iap localizations create \
--iap-id "IAP_ID" \
--locale "LOCALE" \
--name "Display Name"
Optional description:
asc iap localizations create \
--iap-id "IAP_ID" \
--locale "LOCALE" \
--name "Unlock All Features" \
--description "One-time purchase to unlock all premium features"
4. Verify
asc iap localizations list --iap-id "IAP_ID" --paginate --output table
Updating Existing Localizations
To change the display name for existing localizations:
Subscriptions
asc subscriptions localizations update --id "LOC_ID" --name "New Name"
Subscription Groups
asc subscriptions groups localizations update --id "LOC_ID" --name "New Group Name"
In-App Purchases
asc iap localizations update --localization-id "LOC_ID" --name "New Name"
To bulk-update, list existing localizations first, extract the IDs, then update each one.
Bulk-Localize All Subscriptions in an App
For a full app with multiple subscription groups and subscriptions:
# 1. List all groups
asc subscriptions groups list --app "APP_ID" --paginate
# 2. For each group, localize the group itself
# (repeat group localization workflow above)
# 3. For each group, list subscriptions
asc subscriptions list --group-id "GROUP_ID" --paginate
# 4. For each subscription, localize it
# (repeat subscription localization workflow above)
Agent Behavior
- Always list existing localizations first to avoid duplicate creation errors.
- Skip locales that already have a localization; only create missing ones.
- When the user provides a single display name, use it for all locales (same name everywhere).
- When the user provides translated names per locale, use the locale-specific name for each.
- If a description is provided, pass
--descriptionon create. Otherwise omit it. - Use
--output tablefor verification steps so the user can visually confirm. - Use default JSON output for intermediate automation steps.
- After bulk creation, always run the list command to verify completeness.
- For apps with many subscriptions, process them sequentially per group to keep output readable.
- If a create call fails for a locale, log the locale and error, then continue with the remaining locales. After the batch completes, report all failures together so the user can address them.
Notes
- Subscription display names are what users see on the subscription management sheet and in purchase dialogs.
- Creating a localization for a locale that already exists will fail; always check first.
- There is no bulk API; each locale requires a separate create call.
- Use
--paginateon list commands to ensure all existing localizations are returned. - Use the
asc-id-resolverskill if you only have app names instead of IDs.
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/bulk-asc-subscription-localization-ms1aw68g/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/bulk-asc-subscription-localization-ms1aw68g' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/bulk-asc-subscription-localization-ms1aw68g/download' --output '.skill-downloads/bulk-asc-subscription-localization-ms1aw68g/SKILL.md.part' && mv '.skill-downloads/bulk-asc-subscription-localization-ms1aw68g/SKILL.md.part' '.skill-downloads/bulk-asc-subscription-localization-ms1aw68g/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/bulk-asc-subscription-localization-ms1aw68g/SKILL.md' && test -s '.skill-downloads/bulk-asc-subscription-localization-ms1aw68g/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/asc-subscription-localization' && cp -R '.skill-downloads/bulk-asc-subscription-localization-ms1aw68g' '.claude/skills/asc-subscription-localization'Cursor
test -f '.skill-downloads/bulk-asc-subscription-localization-ms1aw68g/SKILL.md' && test -s '.skill-downloads/bulk-asc-subscription-localization-ms1aw68g/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/asc-subscription-localization' && cp -R '.skill-downloads/bulk-asc-subscription-localization-ms1aw68g' '.cursor/skills/asc-subscription-localization'Codex
test -f '.skill-downloads/bulk-asc-subscription-localization-ms1aw68g/SKILL.md' && test -s '.skill-downloads/bulk-asc-subscription-localization-ms1aw68g/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/asc-subscription-localization' && cp -R '.skill-downloads/bulk-asc-subscription-localization-ms1aw68g' '.agents/skills/asc-subscription-localization'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/bulk-asc-subscription-localization-ms1aw68g'openskills read 'bulk-asc-subscription-localization-ms1aw68g'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/bulk-asc-subscription-localization-ms1aw68g/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
React Hook Form Best Practices
Development
Master React Hook Form: avoid anti-patterns, manage subscriptions, and handle reset, dirty state, and controlled inputs correctly.
Emotion to Mantine Migration
Development
Migrate Emotion styled-components to Mantine components with style props and CSS modules. Use when converting .styled.tsx files or removing @emotion imports.
Scope Creep Detector
Development
Analyzes git diffs against a stated intent to detect scope creep, unrelated files, broad PRs, and oversized changes, then suggests keep, split, or justify actions.