Device: iPhone 11, iOS 26.5
Build: development build, built with Xcode 26.6, iOS SDK 26.5, using the StoreKit sandbox
Problem
For a non-consumable in-app purchase, Product.displayName and Product.description (StoreKit 2, fetched with Product.products(for:)) always return the English (U.S.) localization, which is the product's primary language, instead of the approved Portuguese (Brazil) one. The App Store purchase sheet shows the English (U.S.) display name too.
Setup
- The product is Approved. Its English (U.S.), Portuguese (Brazil) and Indonesian localizations are all Approved in App Store Connect.
- The app's App Store localizations include Portuguese (Brazil).
- The iPhone's preferred languages are Português (Brasil) first, then English (U.S.) and Svenska. The app's language in Settings → Apps → [app] → Language is Português (Brasil).
- The app's Info.plist declares
pt-BRinCFBundleLocalizations. - The sandbox tester was newly created in App Store Connect with Brazil as its country or region. Prices come back in BRL, so the Brazil storefront is in use.
Questions
TN2413 says the language follows the test account's store, and an App Store Commerce Engineer said in thread 756918 that a sandbox account set to the desired country should return that country's language. Our setup matches both, yet we get the primary language.
- Is localized product metadata expected to be served in the sandbox environment?
- If so, what else determines the language StoreKit returns, and why would it fall back to the primary language when an approved localization exists for the storefront's default language?
- How can we verify product localizations before releasing to production?