$npx -y skills add rorkai/app-store-connect-cli-skills --skill asc-subscription-localizationBulk-localize subscription, subscription-group, and in-app purchase display names across App Store locales using asc, including API 4.4.1 version-scoped v2 resources. Use when filling or updating subscription/IAP names and descriptions without App Store Connect UI work.
| 1 | # asc subscription localization |
| 2 | |
| 3 | Use this skill to bulk-create or bulk-update display names and, where supported, |
| 4 | descriptions for subscriptions, subscription groups, and in-app purchases across |
| 5 | all App Store Connect locales. This eliminates the tedious manual process of |
| 6 | clicking through each language in App Store Connect to set the same display |
| 7 | name. |
| 8 | |
| 9 | ## Preconditions |
| 10 | - Auth configured (`asc auth login` or `ASC_*` env vars). |
| 11 | - Know your app ID (`ASC_APP_ID` or `--app`). |
| 12 | - Subscription groups and subscriptions already exist. |
| 13 | |
| 14 | ## Choose the API scope first |
| 15 | |
| 16 | API 4.4.1 adds discrete versions for IAPs, subscriptions, and subscription |
| 17 | groups. A version ID is different from its product, subscription, or group ID. |
| 18 | |
| 19 | - Use `asc ... versions localizations ...` for all new localization work. |
| 20 | - Do not use the product- or group-scoped v1 localization commands. API 4.4.1 |
| 21 | deprecates those resources, and the CLI now emits migration warnings for |
| 22 | their compatibility commands. |
| 23 | - Never pass a product, subscription, or group ID to a version-scoped command. |
| 24 | |
| 25 | Resolve or create versions before localizing them: |
| 26 | |
| 27 | ```bash |
| 28 | asc iap versions list --iap-id "IAP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output table |
| 29 | asc subscriptions versions list --subscription-id "SUB_ID" --state PREPARE_FOR_SUBMISSION --paginate --output table |
| 30 | asc subscriptions groups versions list --group-id "GROUP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output table |
| 31 | ``` |
| 32 | |
| 33 | Branch independently on each list result: zero matches means create, one means |
| 34 | reuse that version ID, and more than one means stop and require an explicit |
| 35 | version ID. Run each command below only for its zero-match branch: |
| 36 | |
| 37 | ```bash |
| 38 | # If and only if the IAP version list returned zero matches: |
| 39 | asc iap versions create --iap-id "IAP_ID" --output json |
| 40 | # If and only if the subscription version list returned zero matches: |
| 41 | asc subscriptions versions create --subscription-id "SUB_ID" --output json |
| 42 | # If and only if the group version list returned zero matches: |
| 43 | asc subscriptions groups versions create --group-id "GROUP_ID" --output json |
| 44 | ``` |
| 45 | |
| 46 | None of the three version families has a version delete command. List and |
| 47 | reuse the single `PREPARE_FOR_SUBMISSION` version; create only for zero matches, |
| 48 | and stop for an explicit ID when multiple matches exist. Live parent deletion |
| 49 | did not cascade IAP or subscription versions, so do not assume parent deletion |
| 50 | cleans up versions created for testing. |
| 51 | |
| 52 | ## Supported App Store Locales |
| 53 | |
| 54 | These are the locales supported by App Store Connect for subscription and IAP localizations: |
| 55 | |
| 56 | ``` |
| 57 | ar-SA, ca, cs, da, de-DE, el, en-AU, en-CA, en-GB, en-US, |
| 58 | es-ES, es-MX, fi, fr-CA, fr-FR, he, hi, hr, hu, id, it, |
| 59 | ja, ko, ms, nl-NL, no, pl, pt-BR, pt-PT, ro, ru, sk, |
| 60 | sv, th, tr, uk, vi, zh-Hans, zh-Hant |
| 61 | ``` |
| 62 | |
| 63 | ## Workflow: Bulk-localize a subscription version (v2) |
| 64 | |
| 65 | List existing localizations, create only missing locales, then verify: |
| 66 | |
| 67 | ```bash |
| 68 | asc subscriptions versions localizations list --version-id "VERSION_ID" --paginate --output table |
| 69 | asc subscriptions versions localizations create --version-id "VERSION_ID" --locale "LOCALE" --name "Display Name" --description "Description" |
| 70 | asc subscriptions versions localizations list --version-id "VERSION_ID" --paginate --output table |
| 71 | ``` |
| 72 | |
| 73 | Updates distinguish omitted values, non-empty strings, and JSON `null`: |
| 74 | |
| 75 | ```bash |
| 76 | asc subscriptions versions localizations update --id "LOC_ID" --name "New Name" --description "Updated description" |
| 77 | ``` |
| 78 | |
| 79 | Do not combine a value flag with its matching `--clear-name` or |
| 80 | `--clear-description` flag. The 4.4.1 schema permits JSON `null`, but Apple's |
| 81 | live service currently rejects both an empty `--description` and |
| 82 | `--clear-description` for subscription-version localizations because the |
| 83 | description must contain at least one character. |
| 84 | |
| 85 | Creating a missing subscription-version localization therefore requires a |
| 86 | non-empty description. A display-name-only run may update the name of an |
| 87 | existing localization, but must not create a missing locale until the user |
| 88 | provides a non-empty locale-specific or shared fallback description. |
| 89 | |
| 90 | ## Workflow: Bulk-localize a subscription group version (v2) |
| 91 | |
| 92 | ```bash |
| 93 | asc subscriptions groups versions localizations list --version-id "VERSION_ID" --paginate --output table |
| 94 | asc subscriptions groups versions localizations create --version-id "VERSION_ID" --locale "LOCALE" --name "Group Display Name" --custom-app-name "My App" |
| 95 | asc subscriptions groups versions localizations update --id "LOC_ID" --name "Updated Group Display Name" --custom-app-name "My App" |
| 96 | asc subscriptions groups versions localizations list --version-id "VERSION_ID" --paginate --output table |
| 97 | ``` |
| 98 | |
| 99 | Clearing metad |