Preventing Theme App Extension Block Settings from Being Translated

I’m building a theme app extension with a block (blocks/market_selector.liquid), and I need its text settings not to be translated/localized by Shopify Markets or translation apps.

Example scheme (simplified):

{% schema %}
{
“name”: “Geo Market Selector”,
“settings”: [
{
“type”: “text”,
“id”: “modal_title”,
“label”: “Title”,
“default”: “Select Your Region”
},
{
“type”: “text”,
“id”: “classic_position_selector”,
“label”: “Target Element Selector”,
“default”: “.banner__box”
}
]
}
{% endschema %}

1 Like

Hey @Mudassar_Tariq - thanks for reaching out!

There isn’t a built-in flag on the schema side to opt an individual text setting out of translation, but there is a workaround I can suggest that might help here, specifically using your theme app extension’s storefront locale files for these values instead of exposing them as merchant-facing text settings.

The docs do mention that merchants can’t edit the strings in theme app extension storefront locale files, meaning those values are controlled entirely by your app rather than by the merchant’s translation workflow in the theme editor or Language Editor.

For your two settings specifically:

  • classic_position_selector (the CSS selector): since .banner__box shouldn’t really be changing per-merchant or per-language, I’d avoid exposing it as a text setting entirely. You might want to hardcode it in your block’s liquid file, or if you want it configurable, put it in locales/en.default.json and reference via {{ ‘market_selector.position_selector’ | t }}. That should keep the selector under your app’s control rather than in a surface where merchants or Language Editor could modify it.

  • modal_title: if you want to own the translations yourself rather than leaving it up to the merchant, move it to your extension’s storefront locale files (locales/en.default.json, locales/fr.json, etc.) and reference it the same way. You control all language variants
    at the app level.

If there’s a reason these need to stay as merchant-facing settings, unfortunately there isn’t a way to exclude them from translation today, so the locale file route is the path I’d recommend.

Relevant docs:

Hope this helps! Let me know if I can clarify anything on our end here.