StoreKit 2 returns primary-language product metadata in sandbox despite an approved localization for the storefront's language

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-BR in CFBundleLocalizations.
  • 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.

  1. Is localized product metadata expected to be served in the sandbox environment?
  2. 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?
  3. How can we verify product localizations before releasing to production?

Update, with a production comparison. The Swedish localization for the same product was approved about twelve hours ago. On the same iPhone, with a Swedish storefront and a Swedish device, after deleting and reinstalling the app each time:

  • App Store build: Product.description is Swedish, and the purchase sheet is fully Swedish, with the price in SEK.
  • TestFlight build (sandbox), installed over it minutes later: Product.description is English (U.S.), the product’s primary language.

So production serves the approved localization and the sandbox does not, for the same product at the same time. This matches the earlier Brazil result. This version of the app’s bundle declares no localizations, and it makes no difference in production, so the question is only why the sandbox serves the primary language.