Description
Detection of Shopify's synthetic single-variant option ("Title" / "Default Title") is hardcoded to the English option name. Shopify translates the option name per market (on /de it renders as "Titel"), so the check fails and the placeholder leaks into the UI: the variant selector renders on single-variant PDPs showing Titel: Default Title, and the placeholder appears in cart and bundle labels.
In the markets observed so far the option name is translated while the value still reads "Default Title" — so requiring both sides with && is what breaks. Note the value and the variant title are translatable resources too, so a fix should not depend on any single one of them staying English.
Affected code
app/utils/product.ts — hasOnlyDefaultVariant() requires option.name === "Title"
app/components/cart/cart-line-item.tsx — isDefaultVariant = name === "Title" && value === "Default Title"
app/components/product/bundled-variants.tsx — bundledVariant.title !== "Default Title"
Suggested fix
- Normalize (trim + lowercase) and match against a shared marker set (
title, default title) instead of exact English strings.
- Accept any side that still carries the untranslated marker (
|| instead of &&): option value, option name, or the variant title.
- For
hasOnlyDefaultVariant(), require the structural shape first (exactly one option with exactly one value), then the marker check.
- Expose shared helpers (e.g.
isDefaultTitleOption, isDefaultVariantTitle) so all three call sites use one implementation.
Keep genuine single-value options (Size: One size, Color: Black) rendering — a purely structural check (one option / one value) would hide those too, which is not what we want.
Steps to reproduce
- Open a single-variant product PDP on a non-English market (e.g.
/de).
- Observe the variant selector renders with
Titel: Default Title instead of being hidden.
- Add the item to cart and observe the placeholder in the cart line options.
Description
Detection of Shopify's synthetic single-variant option ("Title" / "Default Title") is hardcoded to the English option name. Shopify translates the option name per market (on
/deit renders as "Titel"), so the check fails and the placeholder leaks into the UI: the variant selector renders on single-variant PDPs showingTitel: Default Title, and the placeholder appears in cart and bundle labels.In the markets observed so far the option name is translated while the value still reads "Default Title" — so requiring both sides with
&&is what breaks. Note the value and the variant title are translatable resources too, so a fix should not depend on any single one of them staying English.Affected code
app/utils/product.ts—hasOnlyDefaultVariant()requiresoption.name === "Title"app/components/cart/cart-line-item.tsx—isDefaultVariant = name === "Title" && value === "Default Title"app/components/product/bundled-variants.tsx—bundledVariant.title !== "Default Title"Suggested fix
title,default title) instead of exact English strings.||instead of&&): option value, option name, or the variant title.hasOnlyDefaultVariant(), require the structural shape first (exactly one option with exactly one value), then the marker check.isDefaultTitleOption,isDefaultVariantTitle) so all three call sites use one implementation.Keep genuine single-value options (
Size: One size,Color: Black) rendering — a purely structural check (one option / one value) would hide those too, which is not what we want.Steps to reproduce
/de).Titel: Default Titleinstead of being hidden.