--- 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 ASC 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 login` or `ASC_*` env vars). - Know your app ID (`ASC_APP_ID` or `--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 ```bash # Find subscription groups asc subscriptions groups list --app "APP_ID" --output table # Find subscriptions within a group asc subscriptions list --group "GROUP_ID" --output table ``` ### 2. Check existing localizations ```bash 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: ```bash asc subscriptions localizations create \ --subscription-id "SUB_ID" \ --locale "LOCALE" \ --name "Display Name" ``` For example, to set "Monthly Pro" across all locales: ```bash # 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 ```bash 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 ```bash asc subscriptions groups localizations list --group-id "GROUP_ID" --paginate --output table ``` ### 2. Create for missing locales ```bash asc subscriptions groups localizations create \ --group-id "GROUP_ID" \ --locale "LOCALE" \ --name "Group Display Name" ``` Optional: set a custom app name for the group: ```bash asc subscriptions groups localizations create \ --group-id "GROUP_ID" \ --locale "LOCALE" \ --name "Group Display Name" \ --custom-app-name "My App" ``` ### 3. Verify ```bash 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 ```bash asc iap list --app "APP_ID" --output table ``` ### 2. Check existing localizations ```bash asc iap localizations list --iap-id "IAP_ID" --paginate --output table ``` ### 3. Create for missing locales ```bash asc iap localizations create \ --iap-id "IAP_ID" \ --locale "LOCALE" \ --name "Display Name" ``` Optional description: ```bash 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 ```bash asc iap localizations list --iap-id "IAP_ID" --paginate --output table ``` ## Updating Existing Localizations To change the display name for existing localizations: ### Subscriptions ```bash asc subscriptions localizations update --id "LOC_ID" --name "New Name" ``` ### Subscription Groups ```bash asc subscriptions groups localizations update --id "LOC_ID" --name "New Group Name" ``` ### In-App Purchases ```bash asc iap localizations update --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: ```bash # 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 "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 `--description` on create. Otherwise omit it. - Use `--output table` for 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 `--paginate` on list commands to ensure all existing localizations are returned. - Use the `asc-id-resolver` skill if you only have app names instead of IDs.