I’m building a Shopify Theme App Extension and need to get the product object in the default language (English). Right now, when a customer switches the storefront language, the product object automatically reflects the selected language.
I want to fetch the default locale product (variants, images, metafields, etc.) in Liquid, regardless of the current language.
Is there a Liquid-only solution?
Neither liquid nor the frontend api’s were built for intermingling different languages.
If you must force multiple languages onto visitors for some reason put the literal translations in the content itself.
All of those things should already be the default data unless someone’s gone out of the way to localize them.
In which case why force unlocalized content on visitors that have specifically selected THEIR language.
Regardless of what hoops your trying to jump through.
This type of has to be done on the frontend such as if using dynamic urls
https://shopify.dev/docs/storefronts/themes/markets/multiple-currencies-languages#locale-aware-urls
So /en/ directory as a prefix on routes may be the way to go etc
https://shopify.dev/docs/api/ajax/section-rendering#locale-aware-urls
Thanks for the explanation! I understand your point that product/title/description data should normally be the default unless translated.
However, my use case is a bit different:
I am building a Theme App Extension (TAE) where my app stores and references metaobjects + product option configurations that are always created in English, because that’s the store’s default language and the only locale app APIs allow writing to.
The issue I’m facing:
When the storefront language changes (example: French, Japanese, etc.), the Liquid product object exposed inside a TAE block becomes localized. This means product.options_with_values, variant titles, and sometimes metafields return localized values — while my app’s saved configurations remain in English.
Because of that, I need to fetch the default (en) version of the product object so I can match the product options/values correctly with my app’s configuration.
I’m not trying to show English to customers — just need the English keys internally for logic comparisons inside the TAE.
If Liquid provided a way to access:
product | locale: 'en'
—or something similar—
it would solve this without relying on AJAX calls or the Storefront API.
Using /en/ prefixed URLs works on the frontend, but TAE Liquid code doesn’t run through URL prefixes and doesn’t let me dynamically fetch the product in another locale.
So my actual question is:
Is there any Liquid-level method to access the default-language product object (en) inside a Theme App Extension block, or is the Storefront API the only option?
Any insights appreciated!