[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-vercel-enable-shopify-markets":3,"mdc-bqsfx1-key":36,"related-repo-vercel-enable-shopify-markets":5002,"related-org-vercel-enable-shopify-markets":5103},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":34,"mdContent":35},"enable-shopify-markets","enable multi-locale support with Shopify Markets","Enable Shopify Markets with regional locales, localized Storefront API context, and next-intl routing. Supports locale-prefixed, invisible cookie-based, and per-domain routing without a separate market URL segment or market mapping.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"vercel","Vercel","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fvercel.png",[12,14,17,20,22],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Marketing","marketing",{"name":18,"slug":19,"type":13},"E-commerce","e-commerce",{"name":21,"slug":21,"type":13},"i18n",{"name":23,"slug":24,"type":13},"Shopify","shopify",32,"https:\u002F\u002Fgithub.com\u002Fvercel\u002Fshop","2026-07-30T05:31:19.636559",null,9,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":33},[],"vercel\u002Fshop","https:\u002F\u002Fgithub.com\u002Fvercel\u002Fshop\u002Ftree\u002FHEAD\u002Fpackages\u002Fplugin\u002Fskills\u002Fenable-shopify-markets","---\nname: enable-shopify-markets\ndescription: >\n  Enable Shopify Markets with regional locales, localized Storefront API context,\n  and next-intl routing. Supports locale-prefixed, invisible cookie-based, and\n  per-domain routing without a separate market URL segment or market mapping.\nargument-hint: \"[sub-path|invisible-cookie|per-domain]\"\n---\n\n# Enable Shopify Markets\n\nAdd multi-region commerce to the Vercel Shop template. A validated regional locale such as `en-US`, `en-CA`, or `fr-CA` is the complete market context: its language scopes translated content and its region scopes Shopify's country context. Do not create a separate market key, market-to-locale map, currency map, or `\u002Fmarket\u002Flocale` route.\n\nExamples of valid public routing:\n\n- Locale sub-path: `\u002Ffr-CA\u002Fproducts\u002Fshoe`\n- Invisible cookie routing: `\u002Fproducts\u002Fshoe` for every locale\n- Per-domain: `example.ca\u002Ffr-CA\u002Fproducts\u002Fshoe` or a single locale on `example.fr\u002Fproducts\u002Fshoe`\n\nNever generate redundant paths such as `\u002Fca\u002Ffr-CA\u002Fproducts\u002Fshoe`.\n\n## Before editing\n\nRead the current versions of:\n\n- `lib\u002Fi18n\u002Findex.ts`, `lib\u002Fi18n\u002Frequest.ts`, and `lib\u002Fparams.ts`\n- `next.config.ts` and any existing `proxy.ts`\n- Every Storefront API operation and cache wrapper\n- Cart creation, cart actions, and buyer identity updates\n- Customer Account auth context\n- Agent\u002Fchat request payload and tools\n- SEO, robots, sitemap, and markdown content-negotiation routes\n\nThe template uses Next.js 16 with Cache Components. Read the installed Next.js routing\u002Fproxy docs and the installed next-intl routing types before applying examples from the web.\n\nFor any Shopify GraphQL edit, use Shopify AI Toolkit to confirm current API facts and validate the complete operation. Then follow `shopify-graphql-reference` for this template's placement, transforms, cache role, locale flow, and invalidation.\n\n## 1. Ask for routing and locales\n\nIf the user has not already decided, ask which strategy they want:\n\n1. **Locale sub-path** — one regional locale segment, such as `\u002Fen-US\u002F...` and `\u002Ffr-CA\u002F...`.\n2. **Invisible cookie** — all public paths stay clean; next-intl internally rewrites `\u002Fproducts\u002F...` to `\u002F[locale]\u002Fproducts\u002F...` using the locale cookie.\n3. **Per-domain** — domains select the available\u002Fdefault locale context; paths may be prefixed only when a domain supports multiple languages.\n\nFor sub-path routing, ask whether the default locale should be:\n\n- `as-needed`: `\u002Fproducts\u002F...` for the default and `\u002Ffr-CA\u002Fproducts\u002F...` for others\n- `always`: `\u002Fen-US\u002Fproducts\u002F...` and `\u002Ffr-CA\u002Fproducts\u002F...`\n\nThen ask for the default locale and all enabled locales. Require regional BCP 47 tags with both language and region. For example:\n\n```text\nen-US, en-CA, fr-CA, de-DE\n```\n\nDo not accept bare language tags such as `en` or `fr` for Markets mode. Do not ask for a separate market identifier or currency.\n\nBefore choosing invisible cookie routing, state its SEO tradeoff: every locale shares one canonical URL, so search engines and shared links cannot target a specific cookie-selected version. Use locale sub-paths or per-domain URLs when each localized version must be independently indexed.\n\n## 2. Make regional locales the source of truth\n\nUpdate `lib\u002Fi18n\u002Findex.ts` so the locale list is the only market configuration:\n\n```ts\nexport const locales = [\"en-US\", \"en-CA\", \"fr-CA\"] as const;\n\nexport type Locale = (typeof locales)[number];\n\nexport const defaultLocale: Locale = \"en-US\";\nexport const enabledLocales: readonly Locale[] = locales;\nexport const localeSwitchingEnabled = enabledLocales.length > 1;\nexport const LOCALE_COOKIE_NAME = \"NEXT_LOCALE\";\n```\n\nKeep boundary validation through `isEnabledLocale` \u002F `resolveLocale`. Derive Shopify context directly from the validated locale:\n\n```ts\nexport function getCountryCode(locale: Locale): string {\n  return new Intl.Locale(locale).region ?? new Intl.Locale(defaultLocale).region ?? \"US\";\n}\n\nexport function getLanguageCode(locale: Locale): string {\n  return new Intl.Locale(locale).language.toUpperCase();\n}\n```\n\nPrefer `Locale` over `string` for internal locale parameters. Request bodies, cookies, headers, route params, and query params remain untrusted strings until validated.\n\n### Currency rule\n\nCurrency always comes from Shopify's localized response (`MoneyV2.currencyCode`, cart cost, product prices, etc.). Never infer currency from locale and never add `localeCurrency`, `marketCurrency`, or a locale-to-currency lookup.\n\nWhen UI outside a price object needs a currency code, pass one from fetched Shopify data. If Shopify returns no product or cart from which to derive it, omit currency-specific UI rather than guessing.\n\n## 3. Add message catalogs\n\nAdd a message loader and catalog for every enabled locale. Reuse a language catalog only intentionally; for example, `en-US` and `en-CA` may share `en.json` while Shopify still receives distinct country contexts.\n\nValidate every generated JSON file after writing it. Keep all locale catalogs structurally aligned.\n\n## 4. Configure routing\n\nCreate `lib\u002Fi18n\u002Frouting.ts` and use `enabledLocales` directly. There is no market mapping layer.\n\n### Locale sub-path\n\n```ts\nimport { defineRouting } from \"next-intl\u002Frouting\";\n\nimport { defaultLocale, enabledLocales, LOCALE_COOKIE_NAME } from \".\";\n\nexport const routing = defineRouting({\n  defaultLocale,\n  localeCookie: { name: LOCALE_COOKIE_NAME, sameSite: \"lax\" },\n  localePrefix: \"as-needed\", \u002F\u002F or \"always\"\n  locales: enabledLocales,\n});\n```\n\nUse full regional locale prefixes. One segment is enough.\n\n### Invisible cookie routing\n\n```ts\nimport { defineRouting } from \"next-intl\u002Frouting\";\n\nimport { defaultLocale, enabledLocales, LOCALE_COOKIE_NAME } from \".\";\n\nexport const routing = defineRouting({\n  alternateLinks: false,\n  defaultLocale,\n  localeCookie: { name: LOCALE_COOKIE_NAME, sameSite: \"lax\" },\n  localeDetection: true,\n  localePrefix: \"never\",\n  locales: enabledLocales,\n});\n```\n\n`localePrefix: \"never\"` keeps the locale segment internal. On a request for `\u002Fproducts\u002Fshoe`, next-intl resolves the cookie (or first-visit language preference\u002Fdefault), then rewrites internally to a route such as `\u002Ffr-CA\u002Fproducts\u002Fshoe`. The browser URL stays `\u002Fproducts\u002Fshoe`.\n\nDo not implement a second custom market rewrite on top of this. The internal `[locale]` segment is an implementation detail, not a public URL.\n\n### Per-domain routing\n\n```ts\nexport const routing = defineRouting({\n  defaultLocale,\n  domains: [\n    { defaultLocale: \"en-US\", domain: \"example.com\", locales: [\"en-US\"] },\n    { defaultLocale: \"en-CA\", domain: \"example.ca\", locales: [\"en-CA\", \"fr-CA\"] },\n  ],\n  localeCookie: { name: LOCALE_COOKIE_NAME, sameSite: \"lax\" },\n  localePrefix: \"as-needed\",\n  locales: enabledLocales,\n});\n```\n\nThe domain configuration is routing configuration, not a separate commerce market model. Shopify country and language still derive from the resolved regional locale.\n\nCreate client navigation exports only for components that explicitly switch locales:\n\n```ts\nimport { createNavigation } from \"next-intl\u002Fnavigation\";\n\nimport { routing } from \".\u002Frouting\";\n\nexport const { usePathname, useRouter } = createNavigation(routing);\n```\n\nDo not replace every `next\u002Flink` import in the Server Component tree. Keep ordinary links request-independent under Cache Components.\n\n## 5. Move page routes under `app\u002F[locale]\u002F`\n\nMove the root layout and all localized pages under `app\u002F[locale]\u002F`. The locale layout must be the root layout; do not leave `app\u002Flayout.tsx` above it.\n\nMove:\n\n- `app\u002Flayout.tsx` to `app\u002F[locale]\u002Flayout.tsx`\n- Page routes such as home, products, collections, search, cart, and account into `app\u002F[locale]\u002F...`\n\nKeep these unlocalized at `app\u002F`:\n\n- `api\u002F`\n- markdown route handlers under `md\u002F`\n- `robots.ts`\n- `sitemap.xml\u002F` and `sitemap\u002F`\n- `globals.css`, `global-error.tsx`, and static metadata files\n\nUpdate typed route generics to include `[locale]`, fix the moved `globals.css` import, and add locale values to every `instant.unstable_samples[].params` object.\n\nDo not call `setRequestLocale` with Cache Components. Resolve locale through the root param so locale becomes an explicit route\u002Fcache input.\n\n## 6. Resolve locale from the root param\n\nUpdate `lib\u002Fparams.ts`:\n\n```ts\nimport { notFound } from \"next\u002Fnavigation\";\nimport { locale as rootLocale } from \"next\u002Froot-params\";\n\nimport { isEnabledLocale, type Locale } from \".\u002Fi18n\";\n\nexport async function getLocale(): Promise\u003CLocale> {\n  const value = await rootLocale();\n  if (!value || !isEnabledLocale(value)) notFound();\n  return value;\n}\n```\n\nUpdate `lib\u002Fi18n\u002Frequest.ts` to call `getLocale()` and load the matching messages. Do not resolve locale by reading cookies or request headers from a cached component. The proxy owns request negotiation; React receives the validated internal route param.\n\n## 7. Extend the proxy\n\nUpdate the existing root `proxy.ts` to run next-intl for matched requests:\n\n```ts\nimport createMiddleware from \"next-intl\u002Fmiddleware\";\nimport type { NextRequest, NextResponse } from \"next\u002Fserver\";\n\nimport { routing } from \"@\u002Flib\u002Fi18n\u002Frouting\";\n\nconst handleI18n = createMiddleware(routing);\n\nexport function proxy(request: NextRequest): NextResponse {\n  return handleI18n(request);\n}\n\nexport const config = {\n  matcher: [\n    \"\u002F((?!api|_next\u002Fstatic|_next\u002Fimage|_next\u002Fdata|_vercel|favicon.ico|robots.txt|sitemap.xml|.*\\\\..*).*)\",\n    \"\u002F.well-known\u002F:path*\",\n  ],\n};\n```\n\nPreserve any other request handling already composed in `proxy()` and keep the template matcher unless the current checkout adds a route with different requirements. The matcher excludes framework internals and public files while keeping application routes and `\u002F.well-known\u002F*` in proxy processing.\n\nFor invisible cookie routing, direct public locale-prefixed URLs should canonicalize back to the clean path. next-intl's `never` mode handles this; do not expose the internal rewrite destination in links, metadata, or redirects.\n\n## 8. Propagate locale through commerce\n\nAudit definitions and real callers. Every localized Storefront API operation must accept the validated `Locale`, derive `country` and `language`, and use Shopify's `@inContext(country: $country, language: $language)`.\n\nThis includes:\n\n- products, collections, search, recommendations, and complementary products\n- navigation menus and any megamenu added by `enable-shopify-menus`\n- cart creation and cart reads that depend on buyer country\n- sitemap and markdown catalog\u002Fproduct output\n- agent tools and Storefront MCP calls\n\nCached functions must receive `locale` explicitly. Never read the locale cookie, `headers()`, or `cookies()` inside a `\"use cache\"` function. The locale argument naturally separates cache entries; do not add a parallel market cache key.\n\nKeep locale defaults only at compatibility boundaries where the base single-locale template needs them. Once a route has resolved locale, pass it explicitly rather than silently defaulting deeper in the stack.\n\n### Menus\n\nChange `getMenu({ handle })` to `getMenu({ handle, locale })`, add localized Storefront context to the validated query, and update every caller. Without this, navigation remains pinned to the default market.\n\n### Customer Account auth\n\nPass the active `Locale` into the Shopify\u002FHydrogen request context instead of using `defaultLocale`. Preserve locale across login, authorize, refresh, and logout return URLs. Validate any locale carried through OAuth state or URL params.\n\n### Chat and agent API\n\nThe chat route lives outside `[locale]`, and invisible URLs do not reveal locale in the referer. Send the current locale explicitly in the client request payload, validate it in `app\u002Fapi\u002Fchat\u002Froute.ts`, and put it in agent context. Do not infer it from URL segments or fall back unconditionally to `defaultLocale`.\n\nAgent tools, Storefront MCP calls, product context, cart creation, and navigation outputs must use that validated locale.\n\n### Markdown negotiation\n\nAfter the proxy rewrite, localized page routes have an internal `\u002F:locale\u002F...` path even in invisible mode. Update content-negotiation rewrites so the locale reaches unlocalized `app\u002Fmd\u002F...` handlers as a validated query\u002Fheader value. Preserve `?variant=` and search parameters.\n\n## 9. Switch locale and synchronize cart country\n\nSwitching language within the same country must not mutate buyer identity:\n\n- `fr-CA` to `en-CA`: set locale; no cart country update\n- `en-CA` to `en-US`: set locale and update buyer country to `US`\n\nKeep the mutation in a server action, validate both inputs, and rely on `updateCartBuyerIdentity` to invalidate cart cache:\n\n```ts\n\"use server\";\n\nimport { cookies } from \"next\u002Fheaders\";\n\nimport { getCountryCode, isEnabledLocale, LOCALE_COOKIE_NAME } from \"@\u002Flib\u002Fi18n\";\nimport { updateCartBuyerIdentity } from \"@\u002Flib\u002Fshopify\u002Foperations\u002Fcart\";\n\nexport async function switchLocaleAction(currentValue: string, nextValue: string) {\n  if (!isEnabledLocale(currentValue) || !isEnabledLocale(nextValue)) {\n    return { error: \"Unsupported locale\", success: false } as const;\n  }\n\n  if (getCountryCode(currentValue) !== getCountryCode(nextValue)) {\n    await updateCartBuyerIdentity(nextValue);\n  }\n\n  const cookieStore = await cookies();\n  cookieStore.set(LOCALE_COOKIE_NAME, nextValue, {\n    path: \"\u002F\",\n    sameSite: \"lax\",\n  });\n\n  return { success: true } as const;\n}\n```\n\nThe selector remains a leaf Client Component.\n\n- **Sub-path\u002Fper-domain:** call the action, then use next-intl's client router to replace the current pathname with `{ locale: nextLocale }`.\n- **Invisible cookie:** call the action, then call `router.refresh()`. The pathname must not change.\n\nDo not offer a separate currency selector unless the store has a Shopify-backed currency choice independent of country. Display currency from cart\u002Fproduct responses.\n\n## 10. Strategy-specific SEO and sitemap behavior\n\n### Locale sub-path or per-domain\n\nEach locale has a distinct indexable URL:\n\n- Canonical points to the current locale URL.\n- Emit `hreflang` alternates for enabled locale URLs plus `x-default`.\n- Emit one sitemap URL per locale with matching XHTML alternates.\n- Build URLs from the selected routing strategy; do not assume every strategy uses `\u002F${locale}`.\n\n### Invisible cookie\n\nAll variants share one public URL:\n\n- Canonical is the clean public path.\n- Do not emit fake locale-specific `hreflang` URLs.\n- Emit one sitemap URL per resource, not one per locale.\n- Keep `alternateLinks: false` in next-intl routing.\n- Treat localization as personalization. Shared links and crawlers without the user's cookie receive negotiated\u002Fdefault content.\n\nNever put internal `\u002F[locale]\u002F...` rewrite targets into metadata or sitemap XML.\n\n## 11. Verification\n\nRun focused checks from `apps\u002Ftemplate`:\n\n```bash\npnpm codegen\npnpm lint\npnpm build\n```\n\nThen run the app and verify the selected strategy.\n\n### All strategies\n\n- Every enabled regional locale produces the expected Shopify country\u002Flanguage context.\n- Product and cart currency codes come from Shopify responses.\n- Cache entries do not leak products, prices, menus, or cart state between locales.\n- `fr-CA` to `en-CA` does not update buyer country.\n- `en-CA` to `en-US` updates buyer country and invalidates cart cache.\n- Chat\u002Fagent operations receive the explicit validated locale.\n- Markdown responses use the same locale as HTML responses.\n- Variant and filter query parameters survive switching and rewrites.\n\n### Locale sub-path\n\n- Locale URLs serve directly with no `\u002Fmarket\u002Flocale` nesting.\n- Default-prefix behavior matches `always` or `as-needed`.\n- Canonical, hreflang, and sitemap URLs are locale-specific.\n\n### Invisible cookie\n\n```bash\ncurl -I http:\u002F\u002Flocalhost:3000\u002Fproducts\u002Fexample\ncurl -I --cookie \"NEXT_LOCALE=fr-CA\" http:\u002F\u002Flocalhost:3000\u002Fproducts\u002Fexample\n```\n\n- Both requests keep `\u002Fproducts\u002Fexample` as the public URL.\n- The cookie-selected response has `\u003Chtml lang=\"fr-CA\">` and Shopify country `CA` context.\n- Locale switching changes content\u002Fcart context without changing the address bar.\n- `\u002Ffr-CA\u002Fproducts\u002Fexample` does not remain a public canonical URL.\n- Metadata and sitemap contain only clean public paths and no locale alternates.\n\n### Per-domain\n\n- Each configured host resolves its allowed\u002Fdefault locales.\n- Cross-domain locale switching uses the correct host.\n- Canonical and hreflang URLs contain the production domains.\n",{"data":37,"body":39},{"name":4,"description":6,"argument-hint":38},"[sub-path|invisible-cookie|per-domain]",{"type":40,"children":41},"root",[42,50,89,94,142,155,162,167,236,241,254,260,265,331,336,387,392,404,425,430,436,448,811,832,1132,1152,1159,1187,1192,1198,1224,1229,1235,1256,1261,1560,1565,1571,1890,1921,1934,1940,2329,2334,2339,2492,2505,2517,2537,2542,2571,2583,2649,2676,2689,2695,2705,3037,3056,3062,3074,3462,3483,3495,3501,3534,3539,3573,3608,3613,3619,3639,3645,3664,3670,3696,3701,3707,3736,3742,3747,3787,3800,4494,4499,4537,4542,4548,4554,4559,4604,4609,4614,4657,4670,4676,4688,4734,4739,4745,4810,4815,4852,4857,4915,4973,4978,4996],{"type":43,"tag":44,"props":45,"children":46},"element","h1",{"id":4},[47],{"type":48,"value":49},"text","Enable Shopify Markets",{"type":43,"tag":51,"props":52,"children":53},"p",{},[54,56,63,65,71,73,79,81,87],{"type":48,"value":55},"Add multi-region commerce to the Vercel Shop template. A validated regional locale such as ",{"type":43,"tag":57,"props":58,"children":60},"code",{"className":59},[],[61],{"type":48,"value":62},"en-US",{"type":48,"value":64},", ",{"type":43,"tag":57,"props":66,"children":68},{"className":67},[],[69],{"type":48,"value":70},"en-CA",{"type":48,"value":72},", or ",{"type":43,"tag":57,"props":74,"children":76},{"className":75},[],[77],{"type":48,"value":78},"fr-CA",{"type":48,"value":80}," is the complete market context: its language scopes translated content and its region scopes Shopify's country context. Do not create a separate market key, market-to-locale map, currency map, or ",{"type":43,"tag":57,"props":82,"children":84},{"className":83},[],[85],{"type":48,"value":86},"\u002Fmarket\u002Flocale",{"type":48,"value":88}," route.",{"type":43,"tag":51,"props":90,"children":91},{},[92],{"type":48,"value":93},"Examples of valid public routing:",{"type":43,"tag":95,"props":96,"children":97},"ul",{},[98,110,123],{"type":43,"tag":99,"props":100,"children":101},"li",{},[102,104],{"type":48,"value":103},"Locale sub-path: ",{"type":43,"tag":57,"props":105,"children":107},{"className":106},[],[108],{"type":48,"value":109},"\u002Ffr-CA\u002Fproducts\u002Fshoe",{"type":43,"tag":99,"props":111,"children":112},{},[113,115,121],{"type":48,"value":114},"Invisible cookie routing: ",{"type":43,"tag":57,"props":116,"children":118},{"className":117},[],[119],{"type":48,"value":120},"\u002Fproducts\u002Fshoe",{"type":48,"value":122}," for every locale",{"type":43,"tag":99,"props":124,"children":125},{},[126,128,134,136],{"type":48,"value":127},"Per-domain: ",{"type":43,"tag":57,"props":129,"children":131},{"className":130},[],[132],{"type":48,"value":133},"example.ca\u002Ffr-CA\u002Fproducts\u002Fshoe",{"type":48,"value":135}," or a single locale on ",{"type":43,"tag":57,"props":137,"children":139},{"className":138},[],[140],{"type":48,"value":141},"example.fr\u002Fproducts\u002Fshoe",{"type":43,"tag":51,"props":143,"children":144},{},[145,147,153],{"type":48,"value":146},"Never generate redundant paths such as ",{"type":43,"tag":57,"props":148,"children":150},{"className":149},[],[151],{"type":48,"value":152},"\u002Fca\u002Ffr-CA\u002Fproducts\u002Fshoe",{"type":48,"value":154},".",{"type":43,"tag":156,"props":157,"children":159},"h2",{"id":158},"before-editing",[160],{"type":48,"value":161},"Before editing",{"type":43,"tag":51,"props":163,"children":164},{},[165],{"type":48,"value":166},"Read the current versions of:",{"type":43,"tag":95,"props":168,"children":169},{},[170,194,211,216,221,226,231],{"type":43,"tag":99,"props":171,"children":172},{},[173,179,180,186,188],{"type":43,"tag":57,"props":174,"children":176},{"className":175},[],[177],{"type":48,"value":178},"lib\u002Fi18n\u002Findex.ts",{"type":48,"value":64},{"type":43,"tag":57,"props":181,"children":183},{"className":182},[],[184],{"type":48,"value":185},"lib\u002Fi18n\u002Frequest.ts",{"type":48,"value":187},", and ",{"type":43,"tag":57,"props":189,"children":191},{"className":190},[],[192],{"type":48,"value":193},"lib\u002Fparams.ts",{"type":43,"tag":99,"props":195,"children":196},{},[197,203,205],{"type":43,"tag":57,"props":198,"children":200},{"className":199},[],[201],{"type":48,"value":202},"next.config.ts",{"type":48,"value":204}," and any existing ",{"type":43,"tag":57,"props":206,"children":208},{"className":207},[],[209],{"type":48,"value":210},"proxy.ts",{"type":43,"tag":99,"props":212,"children":213},{},[214],{"type":48,"value":215},"Every Storefront API operation and cache wrapper",{"type":43,"tag":99,"props":217,"children":218},{},[219],{"type":48,"value":220},"Cart creation, cart actions, and buyer identity updates",{"type":43,"tag":99,"props":222,"children":223},{},[224],{"type":48,"value":225},"Customer Account auth context",{"type":43,"tag":99,"props":227,"children":228},{},[229],{"type":48,"value":230},"Agent\u002Fchat request payload and tools",{"type":43,"tag":99,"props":232,"children":233},{},[234],{"type":48,"value":235},"SEO, robots, sitemap, and markdown content-negotiation routes",{"type":43,"tag":51,"props":237,"children":238},{},[239],{"type":48,"value":240},"The template uses Next.js 16 with Cache Components. Read the installed Next.js routing\u002Fproxy docs and the installed next-intl routing types before applying examples from the web.",{"type":43,"tag":51,"props":242,"children":243},{},[244,246,252],{"type":48,"value":245},"For any Shopify GraphQL edit, use Shopify AI Toolkit to confirm current API facts and validate the complete operation. Then follow ",{"type":43,"tag":57,"props":247,"children":249},{"className":248},[],[250],{"type":48,"value":251},"shopify-graphql-reference",{"type":48,"value":253}," for this template's placement, transforms, cache role, locale flow, and invalidation.",{"type":43,"tag":156,"props":255,"children":257},{"id":256},"_1-ask-for-routing-and-locales",[258],{"type":48,"value":259},"1. Ask for routing and locales",{"type":43,"tag":51,"props":261,"children":262},{},[263],{"type":48,"value":264},"If the user has not already decided, ask which strategy they want:",{"type":43,"tag":266,"props":267,"children":268},"ol",{},[269,295,321],{"type":43,"tag":99,"props":270,"children":271},{},[272,278,280,286,288,294],{"type":43,"tag":273,"props":274,"children":275},"strong",{},[276],{"type":48,"value":277},"Locale sub-path",{"type":48,"value":279}," — one regional locale segment, such as ",{"type":43,"tag":57,"props":281,"children":283},{"className":282},[],[284],{"type":48,"value":285},"\u002Fen-US\u002F...",{"type":48,"value":287}," and ",{"type":43,"tag":57,"props":289,"children":291},{"className":290},[],[292],{"type":48,"value":293},"\u002Ffr-CA\u002F...",{"type":48,"value":154},{"type":43,"tag":99,"props":296,"children":297},{},[298,303,305,311,313,319],{"type":43,"tag":273,"props":299,"children":300},{},[301],{"type":48,"value":302},"Invisible cookie",{"type":48,"value":304}," — all public paths stay clean; next-intl internally rewrites ",{"type":43,"tag":57,"props":306,"children":308},{"className":307},[],[309],{"type":48,"value":310},"\u002Fproducts\u002F...",{"type":48,"value":312}," to ",{"type":43,"tag":57,"props":314,"children":316},{"className":315},[],[317],{"type":48,"value":318},"\u002F[locale]\u002Fproducts\u002F...",{"type":48,"value":320}," using the locale cookie.",{"type":43,"tag":99,"props":322,"children":323},{},[324,329],{"type":43,"tag":273,"props":325,"children":326},{},[327],{"type":48,"value":328},"Per-domain",{"type":48,"value":330}," — domains select the available\u002Fdefault locale context; paths may be prefixed only when a domain supports multiple languages.",{"type":43,"tag":51,"props":332,"children":333},{},[334],{"type":48,"value":335},"For sub-path routing, ask whether the default locale should be:",{"type":43,"tag":95,"props":337,"children":338},{},[339,365],{"type":43,"tag":99,"props":340,"children":341},{},[342,348,350,355,357,363],{"type":43,"tag":57,"props":343,"children":345},{"className":344},[],[346],{"type":48,"value":347},"as-needed",{"type":48,"value":349},": ",{"type":43,"tag":57,"props":351,"children":353},{"className":352},[],[354],{"type":48,"value":310},{"type":48,"value":356}," for the default and ",{"type":43,"tag":57,"props":358,"children":360},{"className":359},[],[361],{"type":48,"value":362},"\u002Ffr-CA\u002Fproducts\u002F...",{"type":48,"value":364}," for others",{"type":43,"tag":99,"props":366,"children":367},{},[368,374,375,381,382],{"type":43,"tag":57,"props":369,"children":371},{"className":370},[],[372],{"type":48,"value":373},"always",{"type":48,"value":349},{"type":43,"tag":57,"props":376,"children":378},{"className":377},[],[379],{"type":48,"value":380},"\u002Fen-US\u002Fproducts\u002F...",{"type":48,"value":287},{"type":43,"tag":57,"props":383,"children":385},{"className":384},[],[386],{"type":48,"value":362},{"type":43,"tag":51,"props":388,"children":389},{},[390],{"type":48,"value":391},"Then ask for the default locale and all enabled locales. Require regional BCP 47 tags with both language and region. For example:",{"type":43,"tag":393,"props":394,"children":399},"pre",{"className":395,"code":397,"language":48,"meta":398},[396],"language-text","en-US, en-CA, fr-CA, de-DE\n","",[400],{"type":43,"tag":57,"props":401,"children":402},{"__ignoreMap":398},[403],{"type":48,"value":397},{"type":43,"tag":51,"props":405,"children":406},{},[407,409,415,417,423],{"type":48,"value":408},"Do not accept bare language tags such as ",{"type":43,"tag":57,"props":410,"children":412},{"className":411},[],[413],{"type":48,"value":414},"en",{"type":48,"value":416}," or ",{"type":43,"tag":57,"props":418,"children":420},{"className":419},[],[421],{"type":48,"value":422},"fr",{"type":48,"value":424}," for Markets mode. Do not ask for a separate market identifier or currency.",{"type":43,"tag":51,"props":426,"children":427},{},[428],{"type":48,"value":429},"Before choosing invisible cookie routing, state its SEO tradeoff: every locale shares one canonical URL, so search engines and shared links cannot target a specific cookie-selected version. Use locale sub-paths or per-domain URLs when each localized version must be independently indexed.",{"type":43,"tag":156,"props":431,"children":433},{"id":432},"_2-make-regional-locales-the-source-of-truth",[434],{"type":48,"value":435},"2. Make regional locales the source of truth",{"type":43,"tag":51,"props":437,"children":438},{},[439,441,446],{"type":48,"value":440},"Update ",{"type":43,"tag":57,"props":442,"children":444},{"className":443},[],[445],{"type":48,"value":178},{"type":48,"value":447}," so the locale list is the only market configuration:",{"type":43,"tag":393,"props":449,"children":453},{"className":450,"code":451,"language":452,"meta":398,"style":398},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export const locales = [\"en-US\", \"en-CA\", \"fr-CA\"] as const;\n\nexport type Locale = (typeof locales)[number];\n\nexport const defaultLocale: Locale = \"en-US\";\nexport const enabledLocales: readonly Locale[] = locales;\nexport const localeSwitchingEnabled = enabledLocales.length > 1;\nexport const LOCALE_COOKIE_NAME = \"NEXT_LOCALE\";\n","ts",[454],{"type":43,"tag":57,"props":455,"children":456},{"__ignoreMap":398},[457,559,569,622,630,676,724,773],{"type":43,"tag":458,"props":459,"children":462},"span",{"class":460,"line":461},"line",1,[463,469,475,481,487,492,497,502,506,511,516,520,524,528,532,536,540,545,550,554],{"type":43,"tag":458,"props":464,"children":466},{"style":465},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[467],{"type":48,"value":468},"export",{"type":43,"tag":458,"props":470,"children":472},{"style":471},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[473],{"type":48,"value":474}," const",{"type":43,"tag":458,"props":476,"children":478},{"style":477},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[479],{"type":48,"value":480}," locales ",{"type":43,"tag":458,"props":482,"children":484},{"style":483},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[485],{"type":48,"value":486},"=",{"type":43,"tag":458,"props":488,"children":489},{"style":477},[490],{"type":48,"value":491}," [",{"type":43,"tag":458,"props":493,"children":494},{"style":483},[495],{"type":48,"value":496},"\"",{"type":43,"tag":458,"props":498,"children":500},{"style":499},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[501],{"type":48,"value":62},{"type":43,"tag":458,"props":503,"children":504},{"style":483},[505],{"type":48,"value":496},{"type":43,"tag":458,"props":507,"children":508},{"style":483},[509],{"type":48,"value":510},",",{"type":43,"tag":458,"props":512,"children":513},{"style":483},[514],{"type":48,"value":515}," \"",{"type":43,"tag":458,"props":517,"children":518},{"style":499},[519],{"type":48,"value":70},{"type":43,"tag":458,"props":521,"children":522},{"style":483},[523],{"type":48,"value":496},{"type":43,"tag":458,"props":525,"children":526},{"style":483},[527],{"type":48,"value":510},{"type":43,"tag":458,"props":529,"children":530},{"style":483},[531],{"type":48,"value":515},{"type":43,"tag":458,"props":533,"children":534},{"style":499},[535],{"type":48,"value":78},{"type":43,"tag":458,"props":537,"children":538},{"style":483},[539],{"type":48,"value":496},{"type":43,"tag":458,"props":541,"children":542},{"style":477},[543],{"type":48,"value":544},"] ",{"type":43,"tag":458,"props":546,"children":547},{"style":465},[548],{"type":48,"value":549},"as",{"type":43,"tag":458,"props":551,"children":552},{"style":471},[553],{"type":48,"value":474},{"type":43,"tag":458,"props":555,"children":556},{"style":483},[557],{"type":48,"value":558},";\n",{"type":43,"tag":458,"props":560,"children":562},{"class":460,"line":561},2,[563],{"type":43,"tag":458,"props":564,"children":566},{"emptyLinePlaceholder":565},true,[567],{"type":48,"value":568},"\n",{"type":43,"tag":458,"props":570,"children":572},{"class":460,"line":571},3,[573,577,582,588,593,598,603,608,613,618],{"type":43,"tag":458,"props":574,"children":575},{"style":465},[576],{"type":48,"value":468},{"type":43,"tag":458,"props":578,"children":579},{"style":471},[580],{"type":48,"value":581}," type",{"type":43,"tag":458,"props":583,"children":585},{"style":584},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[586],{"type":48,"value":587}," Locale",{"type":43,"tag":458,"props":589,"children":590},{"style":483},[591],{"type":48,"value":592}," =",{"type":43,"tag":458,"props":594,"children":595},{"style":477},[596],{"type":48,"value":597}," (",{"type":43,"tag":458,"props":599,"children":600},{"style":483},[601],{"type":48,"value":602},"typeof",{"type":43,"tag":458,"props":604,"children":605},{"style":477},[606],{"type":48,"value":607}," locales)[",{"type":43,"tag":458,"props":609,"children":610},{"style":584},[611],{"type":48,"value":612},"number",{"type":43,"tag":458,"props":614,"children":615},{"style":477},[616],{"type":48,"value":617},"]",{"type":43,"tag":458,"props":619,"children":620},{"style":483},[621],{"type":48,"value":558},{"type":43,"tag":458,"props":623,"children":625},{"class":460,"line":624},4,[626],{"type":43,"tag":458,"props":627,"children":628},{"emptyLinePlaceholder":565},[629],{"type":48,"value":568},{"type":43,"tag":458,"props":631,"children":633},{"class":460,"line":632},5,[634,638,642,647,652,656,660,664,668,672],{"type":43,"tag":458,"props":635,"children":636},{"style":465},[637],{"type":48,"value":468},{"type":43,"tag":458,"props":639,"children":640},{"style":471},[641],{"type":48,"value":474},{"type":43,"tag":458,"props":643,"children":644},{"style":477},[645],{"type":48,"value":646}," defaultLocale",{"type":43,"tag":458,"props":648,"children":649},{"style":483},[650],{"type":48,"value":651},":",{"type":43,"tag":458,"props":653,"children":654},{"style":584},[655],{"type":48,"value":587},{"type":43,"tag":458,"props":657,"children":658},{"style":483},[659],{"type":48,"value":592},{"type":43,"tag":458,"props":661,"children":662},{"style":483},[663],{"type":48,"value":515},{"type":43,"tag":458,"props":665,"children":666},{"style":499},[667],{"type":48,"value":62},{"type":43,"tag":458,"props":669,"children":670},{"style":483},[671],{"type":48,"value":496},{"type":43,"tag":458,"props":673,"children":674},{"style":483},[675],{"type":48,"value":558},{"type":43,"tag":458,"props":677,"children":679},{"class":460,"line":678},6,[680,684,688,693,697,702,706,711,715,720],{"type":43,"tag":458,"props":681,"children":682},{"style":465},[683],{"type":48,"value":468},{"type":43,"tag":458,"props":685,"children":686},{"style":471},[687],{"type":48,"value":474},{"type":43,"tag":458,"props":689,"children":690},{"style":477},[691],{"type":48,"value":692}," enabledLocales",{"type":43,"tag":458,"props":694,"children":695},{"style":483},[696],{"type":48,"value":651},{"type":43,"tag":458,"props":698,"children":699},{"style":471},[700],{"type":48,"value":701}," readonly",{"type":43,"tag":458,"props":703,"children":704},{"style":584},[705],{"type":48,"value":587},{"type":43,"tag":458,"props":707,"children":708},{"style":477},[709],{"type":48,"value":710},"[] ",{"type":43,"tag":458,"props":712,"children":713},{"style":483},[714],{"type":48,"value":486},{"type":43,"tag":458,"props":716,"children":717},{"style":477},[718],{"type":48,"value":719}," locales",{"type":43,"tag":458,"props":721,"children":722},{"style":483},[723],{"type":48,"value":558},{"type":43,"tag":458,"props":725,"children":727},{"class":460,"line":726},7,[728,732,736,741,745,749,753,758,763,769],{"type":43,"tag":458,"props":729,"children":730},{"style":465},[731],{"type":48,"value":468},{"type":43,"tag":458,"props":733,"children":734},{"style":471},[735],{"type":48,"value":474},{"type":43,"tag":458,"props":737,"children":738},{"style":477},[739],{"type":48,"value":740}," localeSwitchingEnabled ",{"type":43,"tag":458,"props":742,"children":743},{"style":483},[744],{"type":48,"value":486},{"type":43,"tag":458,"props":746,"children":747},{"style":477},[748],{"type":48,"value":692},{"type":43,"tag":458,"props":750,"children":751},{"style":483},[752],{"type":48,"value":154},{"type":43,"tag":458,"props":754,"children":755},{"style":477},[756],{"type":48,"value":757},"length ",{"type":43,"tag":458,"props":759,"children":760},{"style":483},[761],{"type":48,"value":762},">",{"type":43,"tag":458,"props":764,"children":766},{"style":765},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[767],{"type":48,"value":768}," 1",{"type":43,"tag":458,"props":770,"children":771},{"style":483},[772],{"type":48,"value":558},{"type":43,"tag":458,"props":774,"children":776},{"class":460,"line":775},8,[777,781,785,790,794,798,803,807],{"type":43,"tag":458,"props":778,"children":779},{"style":465},[780],{"type":48,"value":468},{"type":43,"tag":458,"props":782,"children":783},{"style":471},[784],{"type":48,"value":474},{"type":43,"tag":458,"props":786,"children":787},{"style":477},[788],{"type":48,"value":789}," LOCALE_COOKIE_NAME ",{"type":43,"tag":458,"props":791,"children":792},{"style":483},[793],{"type":48,"value":486},{"type":43,"tag":458,"props":795,"children":796},{"style":483},[797],{"type":48,"value":515},{"type":43,"tag":458,"props":799,"children":800},{"style":499},[801],{"type":48,"value":802},"NEXT_LOCALE",{"type":43,"tag":458,"props":804,"children":805},{"style":483},[806],{"type":48,"value":496},{"type":43,"tag":458,"props":808,"children":809},{"style":483},[810],{"type":48,"value":558},{"type":43,"tag":51,"props":812,"children":813},{},[814,816,822,824,830],{"type":48,"value":815},"Keep boundary validation through ",{"type":43,"tag":57,"props":817,"children":819},{"className":818},[],[820],{"type":48,"value":821},"isEnabledLocale",{"type":48,"value":823}," \u002F ",{"type":43,"tag":57,"props":825,"children":827},{"className":826},[],[828],{"type":48,"value":829},"resolveLocale",{"type":48,"value":831},". Derive Shopify context directly from the validated locale:",{"type":43,"tag":393,"props":833,"children":835},{"className":450,"code":834,"language":452,"meta":398,"style":398},"export function getCountryCode(locale: Locale): string {\n  return new Intl.Locale(locale).region ?? new Intl.Locale(defaultLocale).region ?? \"US\";\n}\n\nexport function getLanguageCode(locale: Locale): string {\n  return new Intl.Locale(locale).language.toUpperCase();\n}\n",[836],{"type":43,"tag":57,"props":837,"children":838},{"__ignoreMap":398},[839,891,1004,1012,1019,1063,1125],{"type":43,"tag":458,"props":840,"children":841},{"class":460,"line":461},[842,846,851,857,862,868,872,876,881,886],{"type":43,"tag":458,"props":843,"children":844},{"style":465},[845],{"type":48,"value":468},{"type":43,"tag":458,"props":847,"children":848},{"style":471},[849],{"type":48,"value":850}," function",{"type":43,"tag":458,"props":852,"children":854},{"style":853},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[855],{"type":48,"value":856}," getCountryCode",{"type":43,"tag":458,"props":858,"children":859},{"style":483},[860],{"type":48,"value":861},"(",{"type":43,"tag":458,"props":863,"children":865},{"style":864},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[866],{"type":48,"value":867},"locale",{"type":43,"tag":458,"props":869,"children":870},{"style":483},[871],{"type":48,"value":651},{"type":43,"tag":458,"props":873,"children":874},{"style":584},[875],{"type":48,"value":587},{"type":43,"tag":458,"props":877,"children":878},{"style":483},[879],{"type":48,"value":880},"):",{"type":43,"tag":458,"props":882,"children":883},{"style":584},[884],{"type":48,"value":885}," string",{"type":43,"tag":458,"props":887,"children":888},{"style":483},[889],{"type":48,"value":890}," {\n",{"type":43,"tag":458,"props":892,"children":893},{"class":460,"line":561},[894,899,904,909,913,918,923,927,932,936,941,946,950,954,958,962,966,971,975,979,983,987,991,996,1000],{"type":43,"tag":458,"props":895,"children":896},{"style":465},[897],{"type":48,"value":898},"  return",{"type":43,"tag":458,"props":900,"children":901},{"style":483},[902],{"type":48,"value":903}," new",{"type":43,"tag":458,"props":905,"children":906},{"style":477},[907],{"type":48,"value":908}," Intl",{"type":43,"tag":458,"props":910,"children":911},{"style":483},[912],{"type":48,"value":154},{"type":43,"tag":458,"props":914,"children":915},{"style":853},[916],{"type":48,"value":917},"Locale",{"type":43,"tag":458,"props":919,"children":921},{"style":920},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[922],{"type":48,"value":861},{"type":43,"tag":458,"props":924,"children":925},{"style":477},[926],{"type":48,"value":867},{"type":43,"tag":458,"props":928,"children":929},{"style":920},[930],{"type":48,"value":931},")",{"type":43,"tag":458,"props":933,"children":934},{"style":483},[935],{"type":48,"value":154},{"type":43,"tag":458,"props":937,"children":938},{"style":477},[939],{"type":48,"value":940},"region",{"type":43,"tag":458,"props":942,"children":943},{"style":483},[944],{"type":48,"value":945}," ??",{"type":43,"tag":458,"props":947,"children":948},{"style":483},[949],{"type":48,"value":903},{"type":43,"tag":458,"props":951,"children":952},{"style":477},[953],{"type":48,"value":908},{"type":43,"tag":458,"props":955,"children":956},{"style":483},[957],{"type":48,"value":154},{"type":43,"tag":458,"props":959,"children":960},{"style":853},[961],{"type":48,"value":917},{"type":43,"tag":458,"props":963,"children":964},{"style":920},[965],{"type":48,"value":861},{"type":43,"tag":458,"props":967,"children":968},{"style":477},[969],{"type":48,"value":970},"defaultLocale",{"type":43,"tag":458,"props":972,"children":973},{"style":920},[974],{"type":48,"value":931},{"type":43,"tag":458,"props":976,"children":977},{"style":483},[978],{"type":48,"value":154},{"type":43,"tag":458,"props":980,"children":981},{"style":477},[982],{"type":48,"value":940},{"type":43,"tag":458,"props":984,"children":985},{"style":483},[986],{"type":48,"value":945},{"type":43,"tag":458,"props":988,"children":989},{"style":483},[990],{"type":48,"value":515},{"type":43,"tag":458,"props":992,"children":993},{"style":499},[994],{"type":48,"value":995},"US",{"type":43,"tag":458,"props":997,"children":998},{"style":483},[999],{"type":48,"value":496},{"type":43,"tag":458,"props":1001,"children":1002},{"style":483},[1003],{"type":48,"value":558},{"type":43,"tag":458,"props":1005,"children":1006},{"class":460,"line":571},[1007],{"type":43,"tag":458,"props":1008,"children":1009},{"style":483},[1010],{"type":48,"value":1011},"}\n",{"type":43,"tag":458,"props":1013,"children":1014},{"class":460,"line":624},[1015],{"type":43,"tag":458,"props":1016,"children":1017},{"emptyLinePlaceholder":565},[1018],{"type":48,"value":568},{"type":43,"tag":458,"props":1020,"children":1021},{"class":460,"line":632},[1022,1026,1030,1035,1039,1043,1047,1051,1055,1059],{"type":43,"tag":458,"props":1023,"children":1024},{"style":465},[1025],{"type":48,"value":468},{"type":43,"tag":458,"props":1027,"children":1028},{"style":471},[1029],{"type":48,"value":850},{"type":43,"tag":458,"props":1031,"children":1032},{"style":853},[1033],{"type":48,"value":1034}," getLanguageCode",{"type":43,"tag":458,"props":1036,"children":1037},{"style":483},[1038],{"type":48,"value":861},{"type":43,"tag":458,"props":1040,"children":1041},{"style":864},[1042],{"type":48,"value":867},{"type":43,"tag":458,"props":1044,"children":1045},{"style":483},[1046],{"type":48,"value":651},{"type":43,"tag":458,"props":1048,"children":1049},{"style":584},[1050],{"type":48,"value":587},{"type":43,"tag":458,"props":1052,"children":1053},{"style":483},[1054],{"type":48,"value":880},{"type":43,"tag":458,"props":1056,"children":1057},{"style":584},[1058],{"type":48,"value":885},{"type":43,"tag":458,"props":1060,"children":1061},{"style":483},[1062],{"type":48,"value":890},{"type":43,"tag":458,"props":1064,"children":1065},{"class":460,"line":678},[1066,1070,1074,1078,1082,1086,1090,1094,1098,1102,1107,1111,1116,1121],{"type":43,"tag":458,"props":1067,"children":1068},{"style":465},[1069],{"type":48,"value":898},{"type":43,"tag":458,"props":1071,"children":1072},{"style":483},[1073],{"type":48,"value":903},{"type":43,"tag":458,"props":1075,"children":1076},{"style":477},[1077],{"type":48,"value":908},{"type":43,"tag":458,"props":1079,"children":1080},{"style":483},[1081],{"type":48,"value":154},{"type":43,"tag":458,"props":1083,"children":1084},{"style":853},[1085],{"type":48,"value":917},{"type":43,"tag":458,"props":1087,"children":1088},{"style":920},[1089],{"type":48,"value":861},{"type":43,"tag":458,"props":1091,"children":1092},{"style":477},[1093],{"type":48,"value":867},{"type":43,"tag":458,"props":1095,"children":1096},{"style":920},[1097],{"type":48,"value":931},{"type":43,"tag":458,"props":1099,"children":1100},{"style":483},[1101],{"type":48,"value":154},{"type":43,"tag":458,"props":1103,"children":1104},{"style":477},[1105],{"type":48,"value":1106},"language",{"type":43,"tag":458,"props":1108,"children":1109},{"style":483},[1110],{"type":48,"value":154},{"type":43,"tag":458,"props":1112,"children":1113},{"style":853},[1114],{"type":48,"value":1115},"toUpperCase",{"type":43,"tag":458,"props":1117,"children":1118},{"style":920},[1119],{"type":48,"value":1120},"()",{"type":43,"tag":458,"props":1122,"children":1123},{"style":483},[1124],{"type":48,"value":558},{"type":43,"tag":458,"props":1126,"children":1127},{"class":460,"line":726},[1128],{"type":43,"tag":458,"props":1129,"children":1130},{"style":483},[1131],{"type":48,"value":1011},{"type":43,"tag":51,"props":1133,"children":1134},{},[1135,1137,1142,1144,1150],{"type":48,"value":1136},"Prefer ",{"type":43,"tag":57,"props":1138,"children":1140},{"className":1139},[],[1141],{"type":48,"value":917},{"type":48,"value":1143}," over ",{"type":43,"tag":57,"props":1145,"children":1147},{"className":1146},[],[1148],{"type":48,"value":1149},"string",{"type":48,"value":1151}," for internal locale parameters. Request bodies, cookies, headers, route params, and query params remain untrusted strings until validated.",{"type":43,"tag":1153,"props":1154,"children":1156},"h3",{"id":1155},"currency-rule",[1157],{"type":48,"value":1158},"Currency rule",{"type":43,"tag":51,"props":1160,"children":1161},{},[1162,1164,1170,1172,1178,1179,1185],{"type":48,"value":1163},"Currency always comes from Shopify's localized response (",{"type":43,"tag":57,"props":1165,"children":1167},{"className":1166},[],[1168],{"type":48,"value":1169},"MoneyV2.currencyCode",{"type":48,"value":1171},", cart cost, product prices, etc.). Never infer currency from locale and never add ",{"type":43,"tag":57,"props":1173,"children":1175},{"className":1174},[],[1176],{"type":48,"value":1177},"localeCurrency",{"type":48,"value":64},{"type":43,"tag":57,"props":1180,"children":1182},{"className":1181},[],[1183],{"type":48,"value":1184},"marketCurrency",{"type":48,"value":1186},", or a locale-to-currency lookup.",{"type":43,"tag":51,"props":1188,"children":1189},{},[1190],{"type":48,"value":1191},"When UI outside a price object needs a currency code, pass one from fetched Shopify data. If Shopify returns no product or cart from which to derive it, omit currency-specific UI rather than guessing.",{"type":43,"tag":156,"props":1193,"children":1195},{"id":1194},"_3-add-message-catalogs",[1196],{"type":48,"value":1197},"3. Add message catalogs",{"type":43,"tag":51,"props":1199,"children":1200},{},[1201,1203,1208,1209,1214,1216,1222],{"type":48,"value":1202},"Add a message loader and catalog for every enabled locale. Reuse a language catalog only intentionally; for example, ",{"type":43,"tag":57,"props":1204,"children":1206},{"className":1205},[],[1207],{"type":48,"value":62},{"type":48,"value":287},{"type":43,"tag":57,"props":1210,"children":1212},{"className":1211},[],[1213],{"type":48,"value":70},{"type":48,"value":1215}," may share ",{"type":43,"tag":57,"props":1217,"children":1219},{"className":1218},[],[1220],{"type":48,"value":1221},"en.json",{"type":48,"value":1223}," while Shopify still receives distinct country contexts.",{"type":43,"tag":51,"props":1225,"children":1226},{},[1227],{"type":48,"value":1228},"Validate every generated JSON file after writing it. Keep all locale catalogs structurally aligned.",{"type":43,"tag":156,"props":1230,"children":1232},{"id":1231},"_4-configure-routing",[1233],{"type":48,"value":1234},"4. Configure routing",{"type":43,"tag":51,"props":1236,"children":1237},{},[1238,1240,1246,1248,1254],{"type":48,"value":1239},"Create ",{"type":43,"tag":57,"props":1241,"children":1243},{"className":1242},[],[1244],{"type":48,"value":1245},"lib\u002Fi18n\u002Frouting.ts",{"type":48,"value":1247}," and use ",{"type":43,"tag":57,"props":1249,"children":1251},{"className":1250},[],[1252],{"type":48,"value":1253},"enabledLocales",{"type":48,"value":1255}," directly. There is no market mapping layer.",{"type":43,"tag":1153,"props":1257,"children":1259},{"id":1258},"locale-sub-path",[1260],{"type":48,"value":277},{"type":43,"tag":393,"props":1262,"children":1264},{"className":450,"code":1263,"language":452,"meta":398,"style":398},"import { defineRouting } from \"next-intl\u002Frouting\";\n\nimport { defaultLocale, enabledLocales, LOCALE_COOKIE_NAME } from \".\";\n\nexport const routing = defineRouting({\n  defaultLocale,\n  localeCookie: { name: LOCALE_COOKIE_NAME, sameSite: \"lax\" },\n  localePrefix: \"as-needed\", \u002F\u002F or \"always\"\n  locales: enabledLocales,\n});\n",[1265],{"type":43,"tag":57,"props":1266,"children":1267},{"__ignoreMap":398},[1268,1313,1320,1376,1383,1416,1429,1489,1523,1543],{"type":43,"tag":458,"props":1269,"children":1270},{"class":460,"line":461},[1271,1276,1281,1286,1291,1296,1300,1305,1309],{"type":43,"tag":458,"props":1272,"children":1273},{"style":465},[1274],{"type":48,"value":1275},"import",{"type":43,"tag":458,"props":1277,"children":1278},{"style":483},[1279],{"type":48,"value":1280}," {",{"type":43,"tag":458,"props":1282,"children":1283},{"style":477},[1284],{"type":48,"value":1285}," defineRouting",{"type":43,"tag":458,"props":1287,"children":1288},{"style":483},[1289],{"type":48,"value":1290}," }",{"type":43,"tag":458,"props":1292,"children":1293},{"style":465},[1294],{"type":48,"value":1295}," from",{"type":43,"tag":458,"props":1297,"children":1298},{"style":483},[1299],{"type":48,"value":515},{"type":43,"tag":458,"props":1301,"children":1302},{"style":499},[1303],{"type":48,"value":1304},"next-intl\u002Frouting",{"type":43,"tag":458,"props":1306,"children":1307},{"style":483},[1308],{"type":48,"value":496},{"type":43,"tag":458,"props":1310,"children":1311},{"style":483},[1312],{"type":48,"value":558},{"type":43,"tag":458,"props":1314,"children":1315},{"class":460,"line":561},[1316],{"type":43,"tag":458,"props":1317,"children":1318},{"emptyLinePlaceholder":565},[1319],{"type":48,"value":568},{"type":43,"tag":458,"props":1321,"children":1322},{"class":460,"line":571},[1323,1327,1331,1335,1339,1343,1347,1352,1356,1360,1364,1368,1372],{"type":43,"tag":458,"props":1324,"children":1325},{"style":465},[1326],{"type":48,"value":1275},{"type":43,"tag":458,"props":1328,"children":1329},{"style":483},[1330],{"type":48,"value":1280},{"type":43,"tag":458,"props":1332,"children":1333},{"style":477},[1334],{"type":48,"value":646},{"type":43,"tag":458,"props":1336,"children":1337},{"style":483},[1338],{"type":48,"value":510},{"type":43,"tag":458,"props":1340,"children":1341},{"style":477},[1342],{"type":48,"value":692},{"type":43,"tag":458,"props":1344,"children":1345},{"style":483},[1346],{"type":48,"value":510},{"type":43,"tag":458,"props":1348,"children":1349},{"style":477},[1350],{"type":48,"value":1351}," LOCALE_COOKIE_NAME",{"type":43,"tag":458,"props":1353,"children":1354},{"style":483},[1355],{"type":48,"value":1290},{"type":43,"tag":458,"props":1357,"children":1358},{"style":465},[1359],{"type":48,"value":1295},{"type":43,"tag":458,"props":1361,"children":1362},{"style":483},[1363],{"type":48,"value":515},{"type":43,"tag":458,"props":1365,"children":1366},{"style":499},[1367],{"type":48,"value":154},{"type":43,"tag":458,"props":1369,"children":1370},{"style":483},[1371],{"type":48,"value":496},{"type":43,"tag":458,"props":1373,"children":1374},{"style":483},[1375],{"type":48,"value":558},{"type":43,"tag":458,"props":1377,"children":1378},{"class":460,"line":624},[1379],{"type":43,"tag":458,"props":1380,"children":1381},{"emptyLinePlaceholder":565},[1382],{"type":48,"value":568},{"type":43,"tag":458,"props":1384,"children":1385},{"class":460,"line":632},[1386,1390,1394,1399,1403,1407,1411],{"type":43,"tag":458,"props":1387,"children":1388},{"style":465},[1389],{"type":48,"value":468},{"type":43,"tag":458,"props":1391,"children":1392},{"style":471},[1393],{"type":48,"value":474},{"type":43,"tag":458,"props":1395,"children":1396},{"style":477},[1397],{"type":48,"value":1398}," routing ",{"type":43,"tag":458,"props":1400,"children":1401},{"style":483},[1402],{"type":48,"value":486},{"type":43,"tag":458,"props":1404,"children":1405},{"style":853},[1406],{"type":48,"value":1285},{"type":43,"tag":458,"props":1408,"children":1409},{"style":477},[1410],{"type":48,"value":861},{"type":43,"tag":458,"props":1412,"children":1413},{"style":483},[1414],{"type":48,"value":1415},"{\n",{"type":43,"tag":458,"props":1417,"children":1418},{"class":460,"line":678},[1419,1424],{"type":43,"tag":458,"props":1420,"children":1421},{"style":477},[1422],{"type":48,"value":1423},"  defaultLocale",{"type":43,"tag":458,"props":1425,"children":1426},{"style":483},[1427],{"type":48,"value":1428},",\n",{"type":43,"tag":458,"props":1430,"children":1431},{"class":460,"line":726},[1432,1437,1441,1445,1450,1454,1458,1462,1467,1471,1475,1480,1484],{"type":43,"tag":458,"props":1433,"children":1434},{"style":920},[1435],{"type":48,"value":1436},"  localeCookie",{"type":43,"tag":458,"props":1438,"children":1439},{"style":483},[1440],{"type":48,"value":651},{"type":43,"tag":458,"props":1442,"children":1443},{"style":483},[1444],{"type":48,"value":1280},{"type":43,"tag":458,"props":1446,"children":1447},{"style":920},[1448],{"type":48,"value":1449}," name",{"type":43,"tag":458,"props":1451,"children":1452},{"style":483},[1453],{"type":48,"value":651},{"type":43,"tag":458,"props":1455,"children":1456},{"style":477},[1457],{"type":48,"value":1351},{"type":43,"tag":458,"props":1459,"children":1460},{"style":483},[1461],{"type":48,"value":510},{"type":43,"tag":458,"props":1463,"children":1464},{"style":920},[1465],{"type":48,"value":1466}," sameSite",{"type":43,"tag":458,"props":1468,"children":1469},{"style":483},[1470],{"type":48,"value":651},{"type":43,"tag":458,"props":1472,"children":1473},{"style":483},[1474],{"type":48,"value":515},{"type":43,"tag":458,"props":1476,"children":1477},{"style":499},[1478],{"type":48,"value":1479},"lax",{"type":43,"tag":458,"props":1481,"children":1482},{"style":483},[1483],{"type":48,"value":496},{"type":43,"tag":458,"props":1485,"children":1486},{"style":483},[1487],{"type":48,"value":1488}," },\n",{"type":43,"tag":458,"props":1490,"children":1491},{"class":460,"line":775},[1492,1497,1501,1505,1509,1513,1517],{"type":43,"tag":458,"props":1493,"children":1494},{"style":920},[1495],{"type":48,"value":1496},"  localePrefix",{"type":43,"tag":458,"props":1498,"children":1499},{"style":483},[1500],{"type":48,"value":651},{"type":43,"tag":458,"props":1502,"children":1503},{"style":483},[1504],{"type":48,"value":515},{"type":43,"tag":458,"props":1506,"children":1507},{"style":499},[1508],{"type":48,"value":347},{"type":43,"tag":458,"props":1510,"children":1511},{"style":483},[1512],{"type":48,"value":496},{"type":43,"tag":458,"props":1514,"children":1515},{"style":483},[1516],{"type":48,"value":510},{"type":43,"tag":458,"props":1518,"children":1520},{"style":1519},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1521],{"type":48,"value":1522}," \u002F\u002F or \"always\"\n",{"type":43,"tag":458,"props":1524,"children":1525},{"class":460,"line":29},[1526,1531,1535,1539],{"type":43,"tag":458,"props":1527,"children":1528},{"style":920},[1529],{"type":48,"value":1530},"  locales",{"type":43,"tag":458,"props":1532,"children":1533},{"style":483},[1534],{"type":48,"value":651},{"type":43,"tag":458,"props":1536,"children":1537},{"style":477},[1538],{"type":48,"value":692},{"type":43,"tag":458,"props":1540,"children":1541},{"style":483},[1542],{"type":48,"value":1428},{"type":43,"tag":458,"props":1544,"children":1546},{"class":460,"line":1545},10,[1547,1552,1556],{"type":43,"tag":458,"props":1548,"children":1549},{"style":483},[1550],{"type":48,"value":1551},"}",{"type":43,"tag":458,"props":1553,"children":1554},{"style":477},[1555],{"type":48,"value":931},{"type":43,"tag":458,"props":1557,"children":1558},{"style":483},[1559],{"type":48,"value":558},{"type":43,"tag":51,"props":1561,"children":1562},{},[1563],{"type":48,"value":1564},"Use full regional locale prefixes. One segment is enough.",{"type":43,"tag":1153,"props":1566,"children":1568},{"id":1567},"invisible-cookie-routing",[1569],{"type":48,"value":1570},"Invisible cookie routing",{"type":43,"tag":393,"props":1572,"children":1574},{"className":450,"code":1573,"language":452,"meta":398,"style":398},"import { defineRouting } from \"next-intl\u002Frouting\";\n\nimport { defaultLocale, enabledLocales, LOCALE_COOKIE_NAME } from \".\";\n\nexport const routing = defineRouting({\n  alternateLinks: false,\n  defaultLocale,\n  localeCookie: { name: LOCALE_COOKIE_NAME, sameSite: \"lax\" },\n  localeDetection: true,\n  localePrefix: \"never\",\n  locales: enabledLocales,\n});\n",[1575],{"type":43,"tag":57,"props":1576,"children":1577},{"__ignoreMap":398},[1578,1617,1624,1679,1686,1717,1739,1750,1805,1826,1854,1874],{"type":43,"tag":458,"props":1579,"children":1580},{"class":460,"line":461},[1581,1585,1589,1593,1597,1601,1605,1609,1613],{"type":43,"tag":458,"props":1582,"children":1583},{"style":465},[1584],{"type":48,"value":1275},{"type":43,"tag":458,"props":1586,"children":1587},{"style":483},[1588],{"type":48,"value":1280},{"type":43,"tag":458,"props":1590,"children":1591},{"style":477},[1592],{"type":48,"value":1285},{"type":43,"tag":458,"props":1594,"children":1595},{"style":483},[1596],{"type":48,"value":1290},{"type":43,"tag":458,"props":1598,"children":1599},{"style":465},[1600],{"type":48,"value":1295},{"type":43,"tag":458,"props":1602,"children":1603},{"style":483},[1604],{"type":48,"value":515},{"type":43,"tag":458,"props":1606,"children":1607},{"style":499},[1608],{"type":48,"value":1304},{"type":43,"tag":458,"props":1610,"children":1611},{"style":483},[1612],{"type":48,"value":496},{"type":43,"tag":458,"props":1614,"children":1615},{"style":483},[1616],{"type":48,"value":558},{"type":43,"tag":458,"props":1618,"children":1619},{"class":460,"line":561},[1620],{"type":43,"tag":458,"props":1621,"children":1622},{"emptyLinePlaceholder":565},[1623],{"type":48,"value":568},{"type":43,"tag":458,"props":1625,"children":1626},{"class":460,"line":571},[1627,1631,1635,1639,1643,1647,1651,1655,1659,1663,1667,1671,1675],{"type":43,"tag":458,"props":1628,"children":1629},{"style":465},[1630],{"type":48,"value":1275},{"type":43,"tag":458,"props":1632,"children":1633},{"style":483},[1634],{"type":48,"value":1280},{"type":43,"tag":458,"props":1636,"children":1637},{"style":477},[1638],{"type":48,"value":646},{"type":43,"tag":458,"props":1640,"children":1641},{"style":483},[1642],{"type":48,"value":510},{"type":43,"tag":458,"props":1644,"children":1645},{"style":477},[1646],{"type":48,"value":692},{"type":43,"tag":458,"props":1648,"children":1649},{"style":483},[1650],{"type":48,"value":510},{"type":43,"tag":458,"props":1652,"children":1653},{"style":477},[1654],{"type":48,"value":1351},{"type":43,"tag":458,"props":1656,"children":1657},{"style":483},[1658],{"type":48,"value":1290},{"type":43,"tag":458,"props":1660,"children":1661},{"style":465},[1662],{"type":48,"value":1295},{"type":43,"tag":458,"props":1664,"children":1665},{"style":483},[1666],{"type":48,"value":515},{"type":43,"tag":458,"props":1668,"children":1669},{"style":499},[1670],{"type":48,"value":154},{"type":43,"tag":458,"props":1672,"children":1673},{"style":483},[1674],{"type":48,"value":496},{"type":43,"tag":458,"props":1676,"children":1677},{"style":483},[1678],{"type":48,"value":558},{"type":43,"tag":458,"props":1680,"children":1681},{"class":460,"line":624},[1682],{"type":43,"tag":458,"props":1683,"children":1684},{"emptyLinePlaceholder":565},[1685],{"type":48,"value":568},{"type":43,"tag":458,"props":1687,"children":1688},{"class":460,"line":632},[1689,1693,1697,1701,1705,1709,1713],{"type":43,"tag":458,"props":1690,"children":1691},{"style":465},[1692],{"type":48,"value":468},{"type":43,"tag":458,"props":1694,"children":1695},{"style":471},[1696],{"type":48,"value":474},{"type":43,"tag":458,"props":1698,"children":1699},{"style":477},[1700],{"type":48,"value":1398},{"type":43,"tag":458,"props":1702,"children":1703},{"style":483},[1704],{"type":48,"value":486},{"type":43,"tag":458,"props":1706,"children":1707},{"style":853},[1708],{"type":48,"value":1285},{"type":43,"tag":458,"props":1710,"children":1711},{"style":477},[1712],{"type":48,"value":861},{"type":43,"tag":458,"props":1714,"children":1715},{"style":483},[1716],{"type":48,"value":1415},{"type":43,"tag":458,"props":1718,"children":1719},{"class":460,"line":678},[1720,1725,1729,1735],{"type":43,"tag":458,"props":1721,"children":1722},{"style":920},[1723],{"type":48,"value":1724},"  alternateLinks",{"type":43,"tag":458,"props":1726,"children":1727},{"style":483},[1728],{"type":48,"value":651},{"type":43,"tag":458,"props":1730,"children":1732},{"style":1731},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[1733],{"type":48,"value":1734}," false",{"type":43,"tag":458,"props":1736,"children":1737},{"style":483},[1738],{"type":48,"value":1428},{"type":43,"tag":458,"props":1740,"children":1741},{"class":460,"line":726},[1742,1746],{"type":43,"tag":458,"props":1743,"children":1744},{"style":477},[1745],{"type":48,"value":1423},{"type":43,"tag":458,"props":1747,"children":1748},{"style":483},[1749],{"type":48,"value":1428},{"type":43,"tag":458,"props":1751,"children":1752},{"class":460,"line":775},[1753,1757,1761,1765,1769,1773,1777,1781,1785,1789,1793,1797,1801],{"type":43,"tag":458,"props":1754,"children":1755},{"style":920},[1756],{"type":48,"value":1436},{"type":43,"tag":458,"props":1758,"children":1759},{"style":483},[1760],{"type":48,"value":651},{"type":43,"tag":458,"props":1762,"children":1763},{"style":483},[1764],{"type":48,"value":1280},{"type":43,"tag":458,"props":1766,"children":1767},{"style":920},[1768],{"type":48,"value":1449},{"type":43,"tag":458,"props":1770,"children":1771},{"style":483},[1772],{"type":48,"value":651},{"type":43,"tag":458,"props":1774,"children":1775},{"style":477},[1776],{"type":48,"value":1351},{"type":43,"tag":458,"props":1778,"children":1779},{"style":483},[1780],{"type":48,"value":510},{"type":43,"tag":458,"props":1782,"children":1783},{"style":920},[1784],{"type":48,"value":1466},{"type":43,"tag":458,"props":1786,"children":1787},{"style":483},[1788],{"type":48,"value":651},{"type":43,"tag":458,"props":1790,"children":1791},{"style":483},[1792],{"type":48,"value":515},{"type":43,"tag":458,"props":1794,"children":1795},{"style":499},[1796],{"type":48,"value":1479},{"type":43,"tag":458,"props":1798,"children":1799},{"style":483},[1800],{"type":48,"value":496},{"type":43,"tag":458,"props":1802,"children":1803},{"style":483},[1804],{"type":48,"value":1488},{"type":43,"tag":458,"props":1806,"children":1807},{"class":460,"line":29},[1808,1813,1817,1822],{"type":43,"tag":458,"props":1809,"children":1810},{"style":920},[1811],{"type":48,"value":1812},"  localeDetection",{"type":43,"tag":458,"props":1814,"children":1815},{"style":483},[1816],{"type":48,"value":651},{"type":43,"tag":458,"props":1818,"children":1819},{"style":1731},[1820],{"type":48,"value":1821}," true",{"type":43,"tag":458,"props":1823,"children":1824},{"style":483},[1825],{"type":48,"value":1428},{"type":43,"tag":458,"props":1827,"children":1828},{"class":460,"line":1545},[1829,1833,1837,1841,1846,1850],{"type":43,"tag":458,"props":1830,"children":1831},{"style":920},[1832],{"type":48,"value":1496},{"type":43,"tag":458,"props":1834,"children":1835},{"style":483},[1836],{"type":48,"value":651},{"type":43,"tag":458,"props":1838,"children":1839},{"style":483},[1840],{"type":48,"value":515},{"type":43,"tag":458,"props":1842,"children":1843},{"style":499},[1844],{"type":48,"value":1845},"never",{"type":43,"tag":458,"props":1847,"children":1848},{"style":483},[1849],{"type":48,"value":496},{"type":43,"tag":458,"props":1851,"children":1852},{"style":483},[1853],{"type":48,"value":1428},{"type":43,"tag":458,"props":1855,"children":1857},{"class":460,"line":1856},11,[1858,1862,1866,1870],{"type":43,"tag":458,"props":1859,"children":1860},{"style":920},[1861],{"type":48,"value":1530},{"type":43,"tag":458,"props":1863,"children":1864},{"style":483},[1865],{"type":48,"value":651},{"type":43,"tag":458,"props":1867,"children":1868},{"style":477},[1869],{"type":48,"value":692},{"type":43,"tag":458,"props":1871,"children":1872},{"style":483},[1873],{"type":48,"value":1428},{"type":43,"tag":458,"props":1875,"children":1877},{"class":460,"line":1876},12,[1878,1882,1886],{"type":43,"tag":458,"props":1879,"children":1880},{"style":483},[1881],{"type":48,"value":1551},{"type":43,"tag":458,"props":1883,"children":1884},{"style":477},[1885],{"type":48,"value":931},{"type":43,"tag":458,"props":1887,"children":1888},{"style":483},[1889],{"type":48,"value":558},{"type":43,"tag":51,"props":1891,"children":1892},{},[1893,1899,1901,1906,1908,1913,1915,1920],{"type":43,"tag":57,"props":1894,"children":1896},{"className":1895},[],[1897],{"type":48,"value":1898},"localePrefix: \"never\"",{"type":48,"value":1900}," keeps the locale segment internal. On a request for ",{"type":43,"tag":57,"props":1902,"children":1904},{"className":1903},[],[1905],{"type":48,"value":120},{"type":48,"value":1907},", next-intl resolves the cookie (or first-visit language preference\u002Fdefault), then rewrites internally to a route such as ",{"type":43,"tag":57,"props":1909,"children":1911},{"className":1910},[],[1912],{"type":48,"value":109},{"type":48,"value":1914},". The browser URL stays ",{"type":43,"tag":57,"props":1916,"children":1918},{"className":1917},[],[1919],{"type":48,"value":120},{"type":48,"value":154},{"type":43,"tag":51,"props":1922,"children":1923},{},[1924,1926,1932],{"type":48,"value":1925},"Do not implement a second custom market rewrite on top of this. The internal ",{"type":43,"tag":57,"props":1927,"children":1929},{"className":1928},[],[1930],{"type":48,"value":1931},"[locale]",{"type":48,"value":1933}," segment is an implementation detail, not a public URL.",{"type":43,"tag":1153,"props":1935,"children":1937},{"id":1936},"per-domain-routing",[1938],{"type":48,"value":1939},"Per-domain routing",{"type":43,"tag":393,"props":1941,"children":1943},{"className":450,"code":1942,"language":452,"meta":398,"style":398},"export const routing = defineRouting({\n  defaultLocale,\n  domains: [\n    { defaultLocale: \"en-US\", domain: \"example.com\", locales: [\"en-US\"] },\n    { defaultLocale: \"en-CA\", domain: \"example.ca\", locales: [\"en-CA\", \"fr-CA\"] },\n  ],\n  localeCookie: { name: LOCALE_COOKIE_NAME, sameSite: \"lax\" },\n  localePrefix: \"as-needed\",\n  locales: enabledLocales,\n});\n",[1944],{"type":43,"tag":57,"props":1945,"children":1946},{"__ignoreMap":398},[1947,1978,1989,2006,2097,2201,2213,2268,2295,2314],{"type":43,"tag":458,"props":1948,"children":1949},{"class":460,"line":461},[1950,1954,1958,1962,1966,1970,1974],{"type":43,"tag":458,"props":1951,"children":1952},{"style":465},[1953],{"type":48,"value":468},{"type":43,"tag":458,"props":1955,"children":1956},{"style":471},[1957],{"type":48,"value":474},{"type":43,"tag":458,"props":1959,"children":1960},{"style":477},[1961],{"type":48,"value":1398},{"type":43,"tag":458,"props":1963,"children":1964},{"style":483},[1965],{"type":48,"value":486},{"type":43,"tag":458,"props":1967,"children":1968},{"style":853},[1969],{"type":48,"value":1285},{"type":43,"tag":458,"props":1971,"children":1972},{"style":477},[1973],{"type":48,"value":861},{"type":43,"tag":458,"props":1975,"children":1976},{"style":483},[1977],{"type":48,"value":1415},{"type":43,"tag":458,"props":1979,"children":1980},{"class":460,"line":561},[1981,1985],{"type":43,"tag":458,"props":1982,"children":1983},{"style":477},[1984],{"type":48,"value":1423},{"type":43,"tag":458,"props":1986,"children":1987},{"style":483},[1988],{"type":48,"value":1428},{"type":43,"tag":458,"props":1990,"children":1991},{"class":460,"line":571},[1992,1997,2001],{"type":43,"tag":458,"props":1993,"children":1994},{"style":920},[1995],{"type":48,"value":1996},"  domains",{"type":43,"tag":458,"props":1998,"children":1999},{"style":483},[2000],{"type":48,"value":651},{"type":43,"tag":458,"props":2002,"children":2003},{"style":477},[2004],{"type":48,"value":2005}," [\n",{"type":43,"tag":458,"props":2007,"children":2008},{"class":460,"line":624},[2009,2014,2018,2022,2026,2030,2034,2038,2043,2047,2051,2056,2060,2064,2068,2072,2076,2080,2084,2088,2092],{"type":43,"tag":458,"props":2010,"children":2011},{"style":483},[2012],{"type":48,"value":2013},"    {",{"type":43,"tag":458,"props":2015,"children":2016},{"style":920},[2017],{"type":48,"value":646},{"type":43,"tag":458,"props":2019,"children":2020},{"style":483},[2021],{"type":48,"value":651},{"type":43,"tag":458,"props":2023,"children":2024},{"style":483},[2025],{"type":48,"value":515},{"type":43,"tag":458,"props":2027,"children":2028},{"style":499},[2029],{"type":48,"value":62},{"type":43,"tag":458,"props":2031,"children":2032},{"style":483},[2033],{"type":48,"value":496},{"type":43,"tag":458,"props":2035,"children":2036},{"style":483},[2037],{"type":48,"value":510},{"type":43,"tag":458,"props":2039,"children":2040},{"style":920},[2041],{"type":48,"value":2042}," domain",{"type":43,"tag":458,"props":2044,"children":2045},{"style":483},[2046],{"type":48,"value":651},{"type":43,"tag":458,"props":2048,"children":2049},{"style":483},[2050],{"type":48,"value":515},{"type":43,"tag":458,"props":2052,"children":2053},{"style":499},[2054],{"type":48,"value":2055},"example.com",{"type":43,"tag":458,"props":2057,"children":2058},{"style":483},[2059],{"type":48,"value":496},{"type":43,"tag":458,"props":2061,"children":2062},{"style":483},[2063],{"type":48,"value":510},{"type":43,"tag":458,"props":2065,"children":2066},{"style":920},[2067],{"type":48,"value":719},{"type":43,"tag":458,"props":2069,"children":2070},{"style":483},[2071],{"type":48,"value":651},{"type":43,"tag":458,"props":2073,"children":2074},{"style":477},[2075],{"type":48,"value":491},{"type":43,"tag":458,"props":2077,"children":2078},{"style":483},[2079],{"type":48,"value":496},{"type":43,"tag":458,"props":2081,"children":2082},{"style":499},[2083],{"type":48,"value":62},{"type":43,"tag":458,"props":2085,"children":2086},{"style":483},[2087],{"type":48,"value":496},{"type":43,"tag":458,"props":2089,"children":2090},{"style":477},[2091],{"type":48,"value":544},{"type":43,"tag":458,"props":2093,"children":2094},{"style":483},[2095],{"type":48,"value":2096},"},\n",{"type":43,"tag":458,"props":2098,"children":2099},{"class":460,"line":632},[2100,2104,2108,2112,2116,2120,2124,2128,2132,2136,2140,2145,2149,2153,2157,2161,2165,2169,2173,2177,2181,2185,2189,2193,2197],{"type":43,"tag":458,"props":2101,"children":2102},{"style":483},[2103],{"type":48,"value":2013},{"type":43,"tag":458,"props":2105,"children":2106},{"style":920},[2107],{"type":48,"value":646},{"type":43,"tag":458,"props":2109,"children":2110},{"style":483},[2111],{"type":48,"value":651},{"type":43,"tag":458,"props":2113,"children":2114},{"style":483},[2115],{"type":48,"value":515},{"type":43,"tag":458,"props":2117,"children":2118},{"style":499},[2119],{"type":48,"value":70},{"type":43,"tag":458,"props":2121,"children":2122},{"style":483},[2123],{"type":48,"value":496},{"type":43,"tag":458,"props":2125,"children":2126},{"style":483},[2127],{"type":48,"value":510},{"type":43,"tag":458,"props":2129,"children":2130},{"style":920},[2131],{"type":48,"value":2042},{"type":43,"tag":458,"props":2133,"children":2134},{"style":483},[2135],{"type":48,"value":651},{"type":43,"tag":458,"props":2137,"children":2138},{"style":483},[2139],{"type":48,"value":515},{"type":43,"tag":458,"props":2141,"children":2142},{"style":499},[2143],{"type":48,"value":2144},"example.ca",{"type":43,"tag":458,"props":2146,"children":2147},{"style":483},[2148],{"type":48,"value":496},{"type":43,"tag":458,"props":2150,"children":2151},{"style":483},[2152],{"type":48,"value":510},{"type":43,"tag":458,"props":2154,"children":2155},{"style":920},[2156],{"type":48,"value":719},{"type":43,"tag":458,"props":2158,"children":2159},{"style":483},[2160],{"type":48,"value":651},{"type":43,"tag":458,"props":2162,"children":2163},{"style":477},[2164],{"type":48,"value":491},{"type":43,"tag":458,"props":2166,"children":2167},{"style":483},[2168],{"type":48,"value":496},{"type":43,"tag":458,"props":2170,"children":2171},{"style":499},[2172],{"type":48,"value":70},{"type":43,"tag":458,"props":2174,"children":2175},{"style":483},[2176],{"type":48,"value":496},{"type":43,"tag":458,"props":2178,"children":2179},{"style":483},[2180],{"type":48,"value":510},{"type":43,"tag":458,"props":2182,"children":2183},{"style":483},[2184],{"type":48,"value":515},{"type":43,"tag":458,"props":2186,"children":2187},{"style":499},[2188],{"type":48,"value":78},{"type":43,"tag":458,"props":2190,"children":2191},{"style":483},[2192],{"type":48,"value":496},{"type":43,"tag":458,"props":2194,"children":2195},{"style":477},[2196],{"type":48,"value":544},{"type":43,"tag":458,"props":2198,"children":2199},{"style":483},[2200],{"type":48,"value":2096},{"type":43,"tag":458,"props":2202,"children":2203},{"class":460,"line":678},[2204,2209],{"type":43,"tag":458,"props":2205,"children":2206},{"style":477},[2207],{"type":48,"value":2208},"  ]",{"type":43,"tag":458,"props":2210,"children":2211},{"style":483},[2212],{"type":48,"value":1428},{"type":43,"tag":458,"props":2214,"children":2215},{"class":460,"line":726},[2216,2220,2224,2228,2232,2236,2240,2244,2248,2252,2256,2260,2264],{"type":43,"tag":458,"props":2217,"children":2218},{"style":920},[2219],{"type":48,"value":1436},{"type":43,"tag":458,"props":2221,"children":2222},{"style":483},[2223],{"type":48,"value":651},{"type":43,"tag":458,"props":2225,"children":2226},{"style":483},[2227],{"type":48,"value":1280},{"type":43,"tag":458,"props":2229,"children":2230},{"style":920},[2231],{"type":48,"value":1449},{"type":43,"tag":458,"props":2233,"children":2234},{"style":483},[2235],{"type":48,"value":651},{"type":43,"tag":458,"props":2237,"children":2238},{"style":477},[2239],{"type":48,"value":1351},{"type":43,"tag":458,"props":2241,"children":2242},{"style":483},[2243],{"type":48,"value":510},{"type":43,"tag":458,"props":2245,"children":2246},{"style":920},[2247],{"type":48,"value":1466},{"type":43,"tag":458,"props":2249,"children":2250},{"style":483},[2251],{"type":48,"value":651},{"type":43,"tag":458,"props":2253,"children":2254},{"style":483},[2255],{"type":48,"value":515},{"type":43,"tag":458,"props":2257,"children":2258},{"style":499},[2259],{"type":48,"value":1479},{"type":43,"tag":458,"props":2261,"children":2262},{"style":483},[2263],{"type":48,"value":496},{"type":43,"tag":458,"props":2265,"children":2266},{"style":483},[2267],{"type":48,"value":1488},{"type":43,"tag":458,"props":2269,"children":2270},{"class":460,"line":775},[2271,2275,2279,2283,2287,2291],{"type":43,"tag":458,"props":2272,"children":2273},{"style":920},[2274],{"type":48,"value":1496},{"type":43,"tag":458,"props":2276,"children":2277},{"style":483},[2278],{"type":48,"value":651},{"type":43,"tag":458,"props":2280,"children":2281},{"style":483},[2282],{"type":48,"value":515},{"type":43,"tag":458,"props":2284,"children":2285},{"style":499},[2286],{"type":48,"value":347},{"type":43,"tag":458,"props":2288,"children":2289},{"style":483},[2290],{"type":48,"value":496},{"type":43,"tag":458,"props":2292,"children":2293},{"style":483},[2294],{"type":48,"value":1428},{"type":43,"tag":458,"props":2296,"children":2297},{"class":460,"line":29},[2298,2302,2306,2310],{"type":43,"tag":458,"props":2299,"children":2300},{"style":920},[2301],{"type":48,"value":1530},{"type":43,"tag":458,"props":2303,"children":2304},{"style":483},[2305],{"type":48,"value":651},{"type":43,"tag":458,"props":2307,"children":2308},{"style":477},[2309],{"type":48,"value":692},{"type":43,"tag":458,"props":2311,"children":2312},{"style":483},[2313],{"type":48,"value":1428},{"type":43,"tag":458,"props":2315,"children":2316},{"class":460,"line":1545},[2317,2321,2325],{"type":43,"tag":458,"props":2318,"children":2319},{"style":483},[2320],{"type":48,"value":1551},{"type":43,"tag":458,"props":2322,"children":2323},{"style":477},[2324],{"type":48,"value":931},{"type":43,"tag":458,"props":2326,"children":2327},{"style":483},[2328],{"type":48,"value":558},{"type":43,"tag":51,"props":2330,"children":2331},{},[2332],{"type":48,"value":2333},"The domain configuration is routing configuration, not a separate commerce market model. Shopify country and language still derive from the resolved regional locale.",{"type":43,"tag":51,"props":2335,"children":2336},{},[2337],{"type":48,"value":2338},"Create client navigation exports only for components that explicitly switch locales:",{"type":43,"tag":393,"props":2340,"children":2342},{"className":450,"code":2341,"language":452,"meta":398,"style":398},"import { createNavigation } from \"next-intl\u002Fnavigation\";\n\nimport { routing } from \".\u002Frouting\";\n\nexport const { usePathname, useRouter } = createNavigation(routing);\n",[2343],{"type":43,"tag":57,"props":2344,"children":2345},{"__ignoreMap":398},[2346,2387,2394,2435,2442],{"type":43,"tag":458,"props":2347,"children":2348},{"class":460,"line":461},[2349,2353,2357,2362,2366,2370,2374,2379,2383],{"type":43,"tag":458,"props":2350,"children":2351},{"style":465},[2352],{"type":48,"value":1275},{"type":43,"tag":458,"props":2354,"children":2355},{"style":483},[2356],{"type":48,"value":1280},{"type":43,"tag":458,"props":2358,"children":2359},{"style":477},[2360],{"type":48,"value":2361}," createNavigation",{"type":43,"tag":458,"props":2363,"children":2364},{"style":483},[2365],{"type":48,"value":1290},{"type":43,"tag":458,"props":2367,"children":2368},{"style":465},[2369],{"type":48,"value":1295},{"type":43,"tag":458,"props":2371,"children":2372},{"style":483},[2373],{"type":48,"value":515},{"type":43,"tag":458,"props":2375,"children":2376},{"style":499},[2377],{"type":48,"value":2378},"next-intl\u002Fnavigation",{"type":43,"tag":458,"props":2380,"children":2381},{"style":483},[2382],{"type":48,"value":496},{"type":43,"tag":458,"props":2384,"children":2385},{"style":483},[2386],{"type":48,"value":558},{"type":43,"tag":458,"props":2388,"children":2389},{"class":460,"line":561},[2390],{"type":43,"tag":458,"props":2391,"children":2392},{"emptyLinePlaceholder":565},[2393],{"type":48,"value":568},{"type":43,"tag":458,"props":2395,"children":2396},{"class":460,"line":571},[2397,2401,2405,2410,2414,2418,2422,2427,2431],{"type":43,"tag":458,"props":2398,"children":2399},{"style":465},[2400],{"type":48,"value":1275},{"type":43,"tag":458,"props":2402,"children":2403},{"style":483},[2404],{"type":48,"value":1280},{"type":43,"tag":458,"props":2406,"children":2407},{"style":477},[2408],{"type":48,"value":2409}," routing",{"type":43,"tag":458,"props":2411,"children":2412},{"style":483},[2413],{"type":48,"value":1290},{"type":43,"tag":458,"props":2415,"children":2416},{"style":465},[2417],{"type":48,"value":1295},{"type":43,"tag":458,"props":2419,"children":2420},{"style":483},[2421],{"type":48,"value":515},{"type":43,"tag":458,"props":2423,"children":2424},{"style":499},[2425],{"type":48,"value":2426},".\u002Frouting",{"type":43,"tag":458,"props":2428,"children":2429},{"style":483},[2430],{"type":48,"value":496},{"type":43,"tag":458,"props":2432,"children":2433},{"style":483},[2434],{"type":48,"value":558},{"type":43,"tag":458,"props":2436,"children":2437},{"class":460,"line":624},[2438],{"type":43,"tag":458,"props":2439,"children":2440},{"emptyLinePlaceholder":565},[2441],{"type":48,"value":568},{"type":43,"tag":458,"props":2443,"children":2444},{"class":460,"line":632},[2445,2449,2453,2457,2462,2466,2471,2475,2479,2483,2488],{"type":43,"tag":458,"props":2446,"children":2447},{"style":465},[2448],{"type":48,"value":468},{"type":43,"tag":458,"props":2450,"children":2451},{"style":471},[2452],{"type":48,"value":474},{"type":43,"tag":458,"props":2454,"children":2455},{"style":483},[2456],{"type":48,"value":1280},{"type":43,"tag":458,"props":2458,"children":2459},{"style":477},[2460],{"type":48,"value":2461}," usePathname",{"type":43,"tag":458,"props":2463,"children":2464},{"style":483},[2465],{"type":48,"value":510},{"type":43,"tag":458,"props":2467,"children":2468},{"style":477},[2469],{"type":48,"value":2470}," useRouter ",{"type":43,"tag":458,"props":2472,"children":2473},{"style":483},[2474],{"type":48,"value":1551},{"type":43,"tag":458,"props":2476,"children":2477},{"style":483},[2478],{"type":48,"value":592},{"type":43,"tag":458,"props":2480,"children":2481},{"style":853},[2482],{"type":48,"value":2361},{"type":43,"tag":458,"props":2484,"children":2485},{"style":477},[2486],{"type":48,"value":2487},"(routing)",{"type":43,"tag":458,"props":2489,"children":2490},{"style":483},[2491],{"type":48,"value":558},{"type":43,"tag":51,"props":2493,"children":2494},{},[2495,2497,2503],{"type":48,"value":2496},"Do not replace every ",{"type":43,"tag":57,"props":2498,"children":2500},{"className":2499},[],[2501],{"type":48,"value":2502},"next\u002Flink",{"type":48,"value":2504}," import in the Server Component tree. Keep ordinary links request-independent under Cache Components.",{"type":43,"tag":156,"props":2506,"children":2508},{"id":2507},"_5-move-page-routes-under-applocale",[2509,2511],{"type":48,"value":2510},"5. Move page routes under ",{"type":43,"tag":57,"props":2512,"children":2514},{"className":2513},[],[2515],{"type":48,"value":2516},"app\u002F[locale]\u002F",{"type":43,"tag":51,"props":2518,"children":2519},{},[2520,2522,2527,2529,2535],{"type":48,"value":2521},"Move the root layout and all localized pages under ",{"type":43,"tag":57,"props":2523,"children":2525},{"className":2524},[],[2526],{"type":48,"value":2516},{"type":48,"value":2528},". The locale layout must be the root layout; do not leave ",{"type":43,"tag":57,"props":2530,"children":2532},{"className":2531},[],[2533],{"type":48,"value":2534},"app\u002Flayout.tsx",{"type":48,"value":2536}," above it.",{"type":43,"tag":51,"props":2538,"children":2539},{},[2540],{"type":48,"value":2541},"Move:",{"type":43,"tag":95,"props":2543,"children":2544},{},[2545,2560],{"type":43,"tag":99,"props":2546,"children":2547},{},[2548,2553,2554],{"type":43,"tag":57,"props":2549,"children":2551},{"className":2550},[],[2552],{"type":48,"value":2534},{"type":48,"value":312},{"type":43,"tag":57,"props":2555,"children":2557},{"className":2556},[],[2558],{"type":48,"value":2559},"app\u002F[locale]\u002Flayout.tsx",{"type":43,"tag":99,"props":2561,"children":2562},{},[2563,2565],{"type":48,"value":2564},"Page routes such as home, products, collections, search, cart, and account into ",{"type":43,"tag":57,"props":2566,"children":2568},{"className":2567},[],[2569],{"type":48,"value":2570},"app\u002F[locale]\u002F...",{"type":43,"tag":51,"props":2572,"children":2573},{},[2574,2576,2582],{"type":48,"value":2575},"Keep these unlocalized at ",{"type":43,"tag":57,"props":2577,"children":2579},{"className":2578},[],[2580],{"type":48,"value":2581},"app\u002F",{"type":48,"value":651},{"type":43,"tag":95,"props":2584,"children":2585},{},[2586,2595,2606,2615,2631],{"type":43,"tag":99,"props":2587,"children":2588},{},[2589],{"type":43,"tag":57,"props":2590,"children":2592},{"className":2591},[],[2593],{"type":48,"value":2594},"api\u002F",{"type":43,"tag":99,"props":2596,"children":2597},{},[2598,2600],{"type":48,"value":2599},"markdown route handlers under ",{"type":43,"tag":57,"props":2601,"children":2603},{"className":2602},[],[2604],{"type":48,"value":2605},"md\u002F",{"type":43,"tag":99,"props":2607,"children":2608},{},[2609],{"type":43,"tag":57,"props":2610,"children":2612},{"className":2611},[],[2613],{"type":48,"value":2614},"robots.ts",{"type":43,"tag":99,"props":2616,"children":2617},{},[2618,2624,2625],{"type":43,"tag":57,"props":2619,"children":2621},{"className":2620},[],[2622],{"type":48,"value":2623},"sitemap.xml\u002F",{"type":48,"value":287},{"type":43,"tag":57,"props":2626,"children":2628},{"className":2627},[],[2629],{"type":48,"value":2630},"sitemap\u002F",{"type":43,"tag":99,"props":2632,"children":2633},{},[2634,2640,2641,2647],{"type":43,"tag":57,"props":2635,"children":2637},{"className":2636},[],[2638],{"type":48,"value":2639},"globals.css",{"type":48,"value":64},{"type":43,"tag":57,"props":2642,"children":2644},{"className":2643},[],[2645],{"type":48,"value":2646},"global-error.tsx",{"type":48,"value":2648},", and static metadata files",{"type":43,"tag":51,"props":2650,"children":2651},{},[2652,2654,2659,2661,2666,2668,2674],{"type":48,"value":2653},"Update typed route generics to include ",{"type":43,"tag":57,"props":2655,"children":2657},{"className":2656},[],[2658],{"type":48,"value":1931},{"type":48,"value":2660},", fix the moved ",{"type":43,"tag":57,"props":2662,"children":2664},{"className":2663},[],[2665],{"type":48,"value":2639},{"type":48,"value":2667}," import, and add locale values to every ",{"type":43,"tag":57,"props":2669,"children":2671},{"className":2670},[],[2672],{"type":48,"value":2673},"instant.unstable_samples[].params",{"type":48,"value":2675}," object.",{"type":43,"tag":51,"props":2677,"children":2678},{},[2679,2681,2687],{"type":48,"value":2680},"Do not call ",{"type":43,"tag":57,"props":2682,"children":2684},{"className":2683},[],[2685],{"type":48,"value":2686},"setRequestLocale",{"type":48,"value":2688}," with Cache Components. Resolve locale through the root param so locale becomes an explicit route\u002Fcache input.",{"type":43,"tag":156,"props":2690,"children":2692},{"id":2691},"_6-resolve-locale-from-the-root-param",[2693],{"type":48,"value":2694},"6. Resolve locale from the root param",{"type":43,"tag":51,"props":2696,"children":2697},{},[2698,2699,2704],{"type":48,"value":440},{"type":43,"tag":57,"props":2700,"children":2702},{"className":2701},[],[2703],{"type":48,"value":193},{"type":48,"value":651},{"type":43,"tag":393,"props":2706,"children":2708},{"className":450,"code":2707,"language":452,"meta":398,"style":398},"import { notFound } from \"next\u002Fnavigation\";\nimport { locale as rootLocale } from \"next\u002Froot-params\";\n\nimport { isEnabledLocale, type Locale } from \".\u002Fi18n\";\n\nexport async function getLocale(): Promise\u003CLocale> {\n  const value = await rootLocale();\n  if (!value || !isEnabledLocale(value)) notFound();\n  return value;\n}\n",[2709],{"type":43,"tag":57,"props":2710,"children":2711},{"__ignoreMap":398},[2712,2753,2804,2811,2864,2871,2919,2953,3015,3030],{"type":43,"tag":458,"props":2713,"children":2714},{"class":460,"line":461},[2715,2719,2723,2728,2732,2736,2740,2745,2749],{"type":43,"tag":458,"props":2716,"children":2717},{"style":465},[2718],{"type":48,"value":1275},{"type":43,"tag":458,"props":2720,"children":2721},{"style":483},[2722],{"type":48,"value":1280},{"type":43,"tag":458,"props":2724,"children":2725},{"style":477},[2726],{"type":48,"value":2727}," notFound",{"type":43,"tag":458,"props":2729,"children":2730},{"style":483},[2731],{"type":48,"value":1290},{"type":43,"tag":458,"props":2733,"children":2734},{"style":465},[2735],{"type":48,"value":1295},{"type":43,"tag":458,"props":2737,"children":2738},{"style":483},[2739],{"type":48,"value":515},{"type":43,"tag":458,"props":2741,"children":2742},{"style":499},[2743],{"type":48,"value":2744},"next\u002Fnavigation",{"type":43,"tag":458,"props":2746,"children":2747},{"style":483},[2748],{"type":48,"value":496},{"type":43,"tag":458,"props":2750,"children":2751},{"style":483},[2752],{"type":48,"value":558},{"type":43,"tag":458,"props":2754,"children":2755},{"class":460,"line":561},[2756,2760,2764,2769,2774,2779,2783,2787,2791,2796,2800],{"type":43,"tag":458,"props":2757,"children":2758},{"style":465},[2759],{"type":48,"value":1275},{"type":43,"tag":458,"props":2761,"children":2762},{"style":483},[2763],{"type":48,"value":1280},{"type":43,"tag":458,"props":2765,"children":2766},{"style":477},[2767],{"type":48,"value":2768}," locale",{"type":43,"tag":458,"props":2770,"children":2771},{"style":465},[2772],{"type":48,"value":2773}," as",{"type":43,"tag":458,"props":2775,"children":2776},{"style":477},[2777],{"type":48,"value":2778}," rootLocale",{"type":43,"tag":458,"props":2780,"children":2781},{"style":483},[2782],{"type":48,"value":1290},{"type":43,"tag":458,"props":2784,"children":2785},{"style":465},[2786],{"type":48,"value":1295},{"type":43,"tag":458,"props":2788,"children":2789},{"style":483},[2790],{"type":48,"value":515},{"type":43,"tag":458,"props":2792,"children":2793},{"style":499},[2794],{"type":48,"value":2795},"next\u002Froot-params",{"type":43,"tag":458,"props":2797,"children":2798},{"style":483},[2799],{"type":48,"value":496},{"type":43,"tag":458,"props":2801,"children":2802},{"style":483},[2803],{"type":48,"value":558},{"type":43,"tag":458,"props":2805,"children":2806},{"class":460,"line":571},[2807],{"type":43,"tag":458,"props":2808,"children":2809},{"emptyLinePlaceholder":565},[2810],{"type":48,"value":568},{"type":43,"tag":458,"props":2812,"children":2813},{"class":460,"line":624},[2814,2818,2822,2827,2831,2835,2839,2843,2847,2851,2856,2860],{"type":43,"tag":458,"props":2815,"children":2816},{"style":465},[2817],{"type":48,"value":1275},{"type":43,"tag":458,"props":2819,"children":2820},{"style":483},[2821],{"type":48,"value":1280},{"type":43,"tag":458,"props":2823,"children":2824},{"style":477},[2825],{"type":48,"value":2826}," isEnabledLocale",{"type":43,"tag":458,"props":2828,"children":2829},{"style":483},[2830],{"type":48,"value":510},{"type":43,"tag":458,"props":2832,"children":2833},{"style":465},[2834],{"type":48,"value":581},{"type":43,"tag":458,"props":2836,"children":2837},{"style":477},[2838],{"type":48,"value":587},{"type":43,"tag":458,"props":2840,"children":2841},{"style":483},[2842],{"type":48,"value":1290},{"type":43,"tag":458,"props":2844,"children":2845},{"style":465},[2846],{"type":48,"value":1295},{"type":43,"tag":458,"props":2848,"children":2849},{"style":483},[2850],{"type":48,"value":515},{"type":43,"tag":458,"props":2852,"children":2853},{"style":499},[2854],{"type":48,"value":2855},".\u002Fi18n",{"type":43,"tag":458,"props":2857,"children":2858},{"style":483},[2859],{"type":48,"value":496},{"type":43,"tag":458,"props":2861,"children":2862},{"style":483},[2863],{"type":48,"value":558},{"type":43,"tag":458,"props":2865,"children":2866},{"class":460,"line":632},[2867],{"type":43,"tag":458,"props":2868,"children":2869},{"emptyLinePlaceholder":565},[2870],{"type":48,"value":568},{"type":43,"tag":458,"props":2872,"children":2873},{"class":460,"line":678},[2874,2878,2883,2887,2892,2897,2902,2907,2911,2915],{"type":43,"tag":458,"props":2875,"children":2876},{"style":465},[2877],{"type":48,"value":468},{"type":43,"tag":458,"props":2879,"children":2880},{"style":471},[2881],{"type":48,"value":2882}," async",{"type":43,"tag":458,"props":2884,"children":2885},{"style":471},[2886],{"type":48,"value":850},{"type":43,"tag":458,"props":2888,"children":2889},{"style":853},[2890],{"type":48,"value":2891}," getLocale",{"type":43,"tag":458,"props":2893,"children":2894},{"style":483},[2895],{"type":48,"value":2896},"():",{"type":43,"tag":458,"props":2898,"children":2899},{"style":584},[2900],{"type":48,"value":2901}," Promise",{"type":43,"tag":458,"props":2903,"children":2904},{"style":483},[2905],{"type":48,"value":2906},"\u003C",{"type":43,"tag":458,"props":2908,"children":2909},{"style":584},[2910],{"type":48,"value":917},{"type":43,"tag":458,"props":2912,"children":2913},{"style":483},[2914],{"type":48,"value":762},{"type":43,"tag":458,"props":2916,"children":2917},{"style":483},[2918],{"type":48,"value":890},{"type":43,"tag":458,"props":2920,"children":2921},{"class":460,"line":726},[2922,2927,2932,2936,2941,2945,2949],{"type":43,"tag":458,"props":2923,"children":2924},{"style":471},[2925],{"type":48,"value":2926},"  const",{"type":43,"tag":458,"props":2928,"children":2929},{"style":477},[2930],{"type":48,"value":2931}," value",{"type":43,"tag":458,"props":2933,"children":2934},{"style":483},[2935],{"type":48,"value":592},{"type":43,"tag":458,"props":2937,"children":2938},{"style":465},[2939],{"type":48,"value":2940}," await",{"type":43,"tag":458,"props":2942,"children":2943},{"style":853},[2944],{"type":48,"value":2778},{"type":43,"tag":458,"props":2946,"children":2947},{"style":920},[2948],{"type":48,"value":1120},{"type":43,"tag":458,"props":2950,"children":2951},{"style":483},[2952],{"type":48,"value":558},{"type":43,"tag":458,"props":2954,"children":2955},{"class":460,"line":775},[2956,2961,2965,2970,2975,2980,2985,2989,2993,2997,3002,3007,3011],{"type":43,"tag":458,"props":2957,"children":2958},{"style":465},[2959],{"type":48,"value":2960},"  if",{"type":43,"tag":458,"props":2962,"children":2963},{"style":920},[2964],{"type":48,"value":597},{"type":43,"tag":458,"props":2966,"children":2967},{"style":483},[2968],{"type":48,"value":2969},"!",{"type":43,"tag":458,"props":2971,"children":2972},{"style":477},[2973],{"type":48,"value":2974},"value",{"type":43,"tag":458,"props":2976,"children":2977},{"style":483},[2978],{"type":48,"value":2979}," ||",{"type":43,"tag":458,"props":2981,"children":2982},{"style":483},[2983],{"type":48,"value":2984}," !",{"type":43,"tag":458,"props":2986,"children":2987},{"style":853},[2988],{"type":48,"value":821},{"type":43,"tag":458,"props":2990,"children":2991},{"style":920},[2992],{"type":48,"value":861},{"type":43,"tag":458,"props":2994,"children":2995},{"style":477},[2996],{"type":48,"value":2974},{"type":43,"tag":458,"props":2998,"children":2999},{"style":920},[3000],{"type":48,"value":3001},")) ",{"type":43,"tag":458,"props":3003,"children":3004},{"style":853},[3005],{"type":48,"value":3006},"notFound",{"type":43,"tag":458,"props":3008,"children":3009},{"style":920},[3010],{"type":48,"value":1120},{"type":43,"tag":458,"props":3012,"children":3013},{"style":483},[3014],{"type":48,"value":558},{"type":43,"tag":458,"props":3016,"children":3017},{"class":460,"line":29},[3018,3022,3026],{"type":43,"tag":458,"props":3019,"children":3020},{"style":465},[3021],{"type":48,"value":898},{"type":43,"tag":458,"props":3023,"children":3024},{"style":477},[3025],{"type":48,"value":2931},{"type":43,"tag":458,"props":3027,"children":3028},{"style":483},[3029],{"type":48,"value":558},{"type":43,"tag":458,"props":3031,"children":3032},{"class":460,"line":1545},[3033],{"type":43,"tag":458,"props":3034,"children":3035},{"style":483},[3036],{"type":48,"value":1011},{"type":43,"tag":51,"props":3038,"children":3039},{},[3040,3041,3046,3048,3054],{"type":48,"value":440},{"type":43,"tag":57,"props":3042,"children":3044},{"className":3043},[],[3045],{"type":48,"value":185},{"type":48,"value":3047}," to call ",{"type":43,"tag":57,"props":3049,"children":3051},{"className":3050},[],[3052],{"type":48,"value":3053},"getLocale()",{"type":48,"value":3055}," and load the matching messages. Do not resolve locale by reading cookies or request headers from a cached component. The proxy owns request negotiation; React receives the validated internal route param.",{"type":43,"tag":156,"props":3057,"children":3059},{"id":3058},"_7-extend-the-proxy",[3060],{"type":48,"value":3061},"7. Extend the proxy",{"type":43,"tag":51,"props":3063,"children":3064},{},[3065,3067,3072],{"type":48,"value":3066},"Update the existing root ",{"type":43,"tag":57,"props":3068,"children":3070},{"className":3069},[],[3071],{"type":48,"value":210},{"type":48,"value":3073}," to run next-intl for matched requests:",{"type":43,"tag":393,"props":3075,"children":3077},{"className":450,"code":3076,"language":452,"meta":398,"style":398},"import createMiddleware from \"next-intl\u002Fmiddleware\";\nimport type { NextRequest, NextResponse } from \"next\u002Fserver\";\n\nimport { routing } from \"@\u002Flib\u002Fi18n\u002Frouting\";\n\nconst handleI18n = createMiddleware(routing);\n\nexport function proxy(request: NextRequest): NextResponse {\n  return handleI18n(request);\n}\n\nexport const config = {\n  matcher: [\n    \"\u002F((?!api|_next\u002Fstatic|_next\u002Fimage|_next\u002Fdata|_vercel|favicon.ico|robots.txt|sitemap.xml|.*\\\\..*).*)\",\n    \"\u002F.well-known\u002F:path*\",\n  ],\n};\n",[3078],{"type":43,"tag":57,"props":3079,"children":3080},{"__ignoreMap":398},[3081,3115,3169,3176,3216,3223,3253,3260,3305,3333,3340,3347,3371,3388,3420,3441,3453],{"type":43,"tag":458,"props":3082,"children":3083},{"class":460,"line":461},[3084,3088,3093,3098,3102,3107,3111],{"type":43,"tag":458,"props":3085,"children":3086},{"style":465},[3087],{"type":48,"value":1275},{"type":43,"tag":458,"props":3089,"children":3090},{"style":477},[3091],{"type":48,"value":3092}," createMiddleware ",{"type":43,"tag":458,"props":3094,"children":3095},{"style":465},[3096],{"type":48,"value":3097},"from",{"type":43,"tag":458,"props":3099,"children":3100},{"style":483},[3101],{"type":48,"value":515},{"type":43,"tag":458,"props":3103,"children":3104},{"style":499},[3105],{"type":48,"value":3106},"next-intl\u002Fmiddleware",{"type":43,"tag":458,"props":3108,"children":3109},{"style":483},[3110],{"type":48,"value":496},{"type":43,"tag":458,"props":3112,"children":3113},{"style":483},[3114],{"type":48,"value":558},{"type":43,"tag":458,"props":3116,"children":3117},{"class":460,"line":561},[3118,3122,3126,3130,3135,3139,3144,3148,3152,3156,3161,3165],{"type":43,"tag":458,"props":3119,"children":3120},{"style":465},[3121],{"type":48,"value":1275},{"type":43,"tag":458,"props":3123,"children":3124},{"style":465},[3125],{"type":48,"value":581},{"type":43,"tag":458,"props":3127,"children":3128},{"style":483},[3129],{"type":48,"value":1280},{"type":43,"tag":458,"props":3131,"children":3132},{"style":477},[3133],{"type":48,"value":3134}," NextRequest",{"type":43,"tag":458,"props":3136,"children":3137},{"style":483},[3138],{"type":48,"value":510},{"type":43,"tag":458,"props":3140,"children":3141},{"style":477},[3142],{"type":48,"value":3143}," NextResponse",{"type":43,"tag":458,"props":3145,"children":3146},{"style":483},[3147],{"type":48,"value":1290},{"type":43,"tag":458,"props":3149,"children":3150},{"style":465},[3151],{"type":48,"value":1295},{"type":43,"tag":458,"props":3153,"children":3154},{"style":483},[3155],{"type":48,"value":515},{"type":43,"tag":458,"props":3157,"children":3158},{"style":499},[3159],{"type":48,"value":3160},"next\u002Fserver",{"type":43,"tag":458,"props":3162,"children":3163},{"style":483},[3164],{"type":48,"value":496},{"type":43,"tag":458,"props":3166,"children":3167},{"style":483},[3168],{"type":48,"value":558},{"type":43,"tag":458,"props":3170,"children":3171},{"class":460,"line":571},[3172],{"type":43,"tag":458,"props":3173,"children":3174},{"emptyLinePlaceholder":565},[3175],{"type":48,"value":568},{"type":43,"tag":458,"props":3177,"children":3178},{"class":460,"line":624},[3179,3183,3187,3191,3195,3199,3203,3208,3212],{"type":43,"tag":458,"props":3180,"children":3181},{"style":465},[3182],{"type":48,"value":1275},{"type":43,"tag":458,"props":3184,"children":3185},{"style":483},[3186],{"type":48,"value":1280},{"type":43,"tag":458,"props":3188,"children":3189},{"style":477},[3190],{"type":48,"value":2409},{"type":43,"tag":458,"props":3192,"children":3193},{"style":483},[3194],{"type":48,"value":1290},{"type":43,"tag":458,"props":3196,"children":3197},{"style":465},[3198],{"type":48,"value":1295},{"type":43,"tag":458,"props":3200,"children":3201},{"style":483},[3202],{"type":48,"value":515},{"type":43,"tag":458,"props":3204,"children":3205},{"style":499},[3206],{"type":48,"value":3207},"@\u002Flib\u002Fi18n\u002Frouting",{"type":43,"tag":458,"props":3209,"children":3210},{"style":483},[3211],{"type":48,"value":496},{"type":43,"tag":458,"props":3213,"children":3214},{"style":483},[3215],{"type":48,"value":558},{"type":43,"tag":458,"props":3217,"children":3218},{"class":460,"line":632},[3219],{"type":43,"tag":458,"props":3220,"children":3221},{"emptyLinePlaceholder":565},[3222],{"type":48,"value":568},{"type":43,"tag":458,"props":3224,"children":3225},{"class":460,"line":678},[3226,3231,3236,3240,3245,3249],{"type":43,"tag":458,"props":3227,"children":3228},{"style":471},[3229],{"type":48,"value":3230},"const",{"type":43,"tag":458,"props":3232,"children":3233},{"style":477},[3234],{"type":48,"value":3235}," handleI18n ",{"type":43,"tag":458,"props":3237,"children":3238},{"style":483},[3239],{"type":48,"value":486},{"type":43,"tag":458,"props":3241,"children":3242},{"style":853},[3243],{"type":48,"value":3244}," createMiddleware",{"type":43,"tag":458,"props":3246,"children":3247},{"style":477},[3248],{"type":48,"value":2487},{"type":43,"tag":458,"props":3250,"children":3251},{"style":483},[3252],{"type":48,"value":558},{"type":43,"tag":458,"props":3254,"children":3255},{"class":460,"line":726},[3256],{"type":43,"tag":458,"props":3257,"children":3258},{"emptyLinePlaceholder":565},[3259],{"type":48,"value":568},{"type":43,"tag":458,"props":3261,"children":3262},{"class":460,"line":775},[3263,3267,3271,3276,3280,3285,3289,3293,3297,3301],{"type":43,"tag":458,"props":3264,"children":3265},{"style":465},[3266],{"type":48,"value":468},{"type":43,"tag":458,"props":3268,"children":3269},{"style":471},[3270],{"type":48,"value":850},{"type":43,"tag":458,"props":3272,"children":3273},{"style":853},[3274],{"type":48,"value":3275}," proxy",{"type":43,"tag":458,"props":3277,"children":3278},{"style":483},[3279],{"type":48,"value":861},{"type":43,"tag":458,"props":3281,"children":3282},{"style":864},[3283],{"type":48,"value":3284},"request",{"type":43,"tag":458,"props":3286,"children":3287},{"style":483},[3288],{"type":48,"value":651},{"type":43,"tag":458,"props":3290,"children":3291},{"style":584},[3292],{"type":48,"value":3134},{"type":43,"tag":458,"props":3294,"children":3295},{"style":483},[3296],{"type":48,"value":880},{"type":43,"tag":458,"props":3298,"children":3299},{"style":584},[3300],{"type":48,"value":3143},{"type":43,"tag":458,"props":3302,"children":3303},{"style":483},[3304],{"type":48,"value":890},{"type":43,"tag":458,"props":3306,"children":3307},{"class":460,"line":29},[3308,3312,3317,3321,3325,3329],{"type":43,"tag":458,"props":3309,"children":3310},{"style":465},[3311],{"type":48,"value":898},{"type":43,"tag":458,"props":3313,"children":3314},{"style":853},[3315],{"type":48,"value":3316}," handleI18n",{"type":43,"tag":458,"props":3318,"children":3319},{"style":920},[3320],{"type":48,"value":861},{"type":43,"tag":458,"props":3322,"children":3323},{"style":477},[3324],{"type":48,"value":3284},{"type":43,"tag":458,"props":3326,"children":3327},{"style":920},[3328],{"type":48,"value":931},{"type":43,"tag":458,"props":3330,"children":3331},{"style":483},[3332],{"type":48,"value":558},{"type":43,"tag":458,"props":3334,"children":3335},{"class":460,"line":1545},[3336],{"type":43,"tag":458,"props":3337,"children":3338},{"style":483},[3339],{"type":48,"value":1011},{"type":43,"tag":458,"props":3341,"children":3342},{"class":460,"line":1856},[3343],{"type":43,"tag":458,"props":3344,"children":3345},{"emptyLinePlaceholder":565},[3346],{"type":48,"value":568},{"type":43,"tag":458,"props":3348,"children":3349},{"class":460,"line":1876},[3350,3354,3358,3363,3367],{"type":43,"tag":458,"props":3351,"children":3352},{"style":465},[3353],{"type":48,"value":468},{"type":43,"tag":458,"props":3355,"children":3356},{"style":471},[3357],{"type":48,"value":474},{"type":43,"tag":458,"props":3359,"children":3360},{"style":477},[3361],{"type":48,"value":3362}," config ",{"type":43,"tag":458,"props":3364,"children":3365},{"style":483},[3366],{"type":48,"value":486},{"type":43,"tag":458,"props":3368,"children":3369},{"style":483},[3370],{"type":48,"value":890},{"type":43,"tag":458,"props":3372,"children":3374},{"class":460,"line":3373},13,[3375,3380,3384],{"type":43,"tag":458,"props":3376,"children":3377},{"style":920},[3378],{"type":48,"value":3379},"  matcher",{"type":43,"tag":458,"props":3381,"children":3382},{"style":483},[3383],{"type":48,"value":651},{"type":43,"tag":458,"props":3385,"children":3386},{"style":477},[3387],{"type":48,"value":2005},{"type":43,"tag":458,"props":3389,"children":3391},{"class":460,"line":3390},14,[3392,3397,3402,3407,3412,3416],{"type":43,"tag":458,"props":3393,"children":3394},{"style":483},[3395],{"type":48,"value":3396},"    \"",{"type":43,"tag":458,"props":3398,"children":3399},{"style":499},[3400],{"type":48,"value":3401},"\u002F((?!api|_next\u002Fstatic|_next\u002Fimage|_next\u002Fdata|_vercel|favicon.ico|robots.txt|sitemap.xml|.*",{"type":43,"tag":458,"props":3403,"children":3404},{"style":477},[3405],{"type":48,"value":3406},"\\\\",{"type":43,"tag":458,"props":3408,"children":3409},{"style":499},[3410],{"type":48,"value":3411},"..*).*)",{"type":43,"tag":458,"props":3413,"children":3414},{"style":483},[3415],{"type":48,"value":496},{"type":43,"tag":458,"props":3417,"children":3418},{"style":483},[3419],{"type":48,"value":1428},{"type":43,"tag":458,"props":3421,"children":3423},{"class":460,"line":3422},15,[3424,3428,3433,3437],{"type":43,"tag":458,"props":3425,"children":3426},{"style":483},[3427],{"type":48,"value":3396},{"type":43,"tag":458,"props":3429,"children":3430},{"style":499},[3431],{"type":48,"value":3432},"\u002F.well-known\u002F:path*",{"type":43,"tag":458,"props":3434,"children":3435},{"style":483},[3436],{"type":48,"value":496},{"type":43,"tag":458,"props":3438,"children":3439},{"style":483},[3440],{"type":48,"value":1428},{"type":43,"tag":458,"props":3442,"children":3444},{"class":460,"line":3443},16,[3445,3449],{"type":43,"tag":458,"props":3446,"children":3447},{"style":477},[3448],{"type":48,"value":2208},{"type":43,"tag":458,"props":3450,"children":3451},{"style":483},[3452],{"type":48,"value":1428},{"type":43,"tag":458,"props":3454,"children":3456},{"class":460,"line":3455},17,[3457],{"type":43,"tag":458,"props":3458,"children":3459},{"style":483},[3460],{"type":48,"value":3461},"};\n",{"type":43,"tag":51,"props":3463,"children":3464},{},[3465,3467,3473,3475,3481],{"type":48,"value":3466},"Preserve any other request handling already composed in ",{"type":43,"tag":57,"props":3468,"children":3470},{"className":3469},[],[3471],{"type":48,"value":3472},"proxy()",{"type":48,"value":3474}," and keep the template matcher unless the current checkout adds a route with different requirements. The matcher excludes framework internals and public files while keeping application routes and ",{"type":43,"tag":57,"props":3476,"children":3478},{"className":3477},[],[3479],{"type":48,"value":3480},"\u002F.well-known\u002F*",{"type":48,"value":3482}," in proxy processing.",{"type":43,"tag":51,"props":3484,"children":3485},{},[3486,3488,3493],{"type":48,"value":3487},"For invisible cookie routing, direct public locale-prefixed URLs should canonicalize back to the clean path. next-intl's ",{"type":43,"tag":57,"props":3489,"children":3491},{"className":3490},[],[3492],{"type":48,"value":1845},{"type":48,"value":3494}," mode handles this; do not expose the internal rewrite destination in links, metadata, or redirects.",{"type":43,"tag":156,"props":3496,"children":3498},{"id":3497},"_8-propagate-locale-through-commerce",[3499],{"type":48,"value":3500},"8. Propagate locale through commerce",{"type":43,"tag":51,"props":3502,"children":3503},{},[3504,3506,3511,3513,3519,3520,3525,3527,3533],{"type":48,"value":3505},"Audit definitions and real callers. Every localized Storefront API operation must accept the validated ",{"type":43,"tag":57,"props":3507,"children":3509},{"className":3508},[],[3510],{"type":48,"value":917},{"type":48,"value":3512},", derive ",{"type":43,"tag":57,"props":3514,"children":3516},{"className":3515},[],[3517],{"type":48,"value":3518},"country",{"type":48,"value":287},{"type":43,"tag":57,"props":3521,"children":3523},{"className":3522},[],[3524],{"type":48,"value":1106},{"type":48,"value":3526},", and use Shopify's ",{"type":43,"tag":57,"props":3528,"children":3530},{"className":3529},[],[3531],{"type":48,"value":3532},"@inContext(country: $country, language: $language)",{"type":48,"value":154},{"type":43,"tag":51,"props":3535,"children":3536},{},[3537],{"type":48,"value":3538},"This includes:",{"type":43,"tag":95,"props":3540,"children":3541},{},[3542,3547,3558,3563,3568],{"type":43,"tag":99,"props":3543,"children":3544},{},[3545],{"type":48,"value":3546},"products, collections, search, recommendations, and complementary products",{"type":43,"tag":99,"props":3548,"children":3549},{},[3550,3552],{"type":48,"value":3551},"navigation menus and any megamenu added by ",{"type":43,"tag":57,"props":3553,"children":3555},{"className":3554},[],[3556],{"type":48,"value":3557},"enable-shopify-menus",{"type":43,"tag":99,"props":3559,"children":3560},{},[3561],{"type":48,"value":3562},"cart creation and cart reads that depend on buyer country",{"type":43,"tag":99,"props":3564,"children":3565},{},[3566],{"type":48,"value":3567},"sitemap and markdown catalog\u002Fproduct output",{"type":43,"tag":99,"props":3569,"children":3570},{},[3571],{"type":48,"value":3572},"agent tools and Storefront MCP calls",{"type":43,"tag":51,"props":3574,"children":3575},{},[3576,3578,3583,3585,3591,3592,3598,3600,3606],{"type":48,"value":3577},"Cached functions must receive ",{"type":43,"tag":57,"props":3579,"children":3581},{"className":3580},[],[3582],{"type":48,"value":867},{"type":48,"value":3584}," explicitly. Never read the locale cookie, ",{"type":43,"tag":57,"props":3586,"children":3588},{"className":3587},[],[3589],{"type":48,"value":3590},"headers()",{"type":48,"value":72},{"type":43,"tag":57,"props":3593,"children":3595},{"className":3594},[],[3596],{"type":48,"value":3597},"cookies()",{"type":48,"value":3599}," inside a ",{"type":43,"tag":57,"props":3601,"children":3603},{"className":3602},[],[3604],{"type":48,"value":3605},"\"use cache\"",{"type":48,"value":3607}," function. The locale argument naturally separates cache entries; do not add a parallel market cache key.",{"type":43,"tag":51,"props":3609,"children":3610},{},[3611],{"type":48,"value":3612},"Keep locale defaults only at compatibility boundaries where the base single-locale template needs them. Once a route has resolved locale, pass it explicitly rather than silently defaulting deeper in the stack.",{"type":43,"tag":1153,"props":3614,"children":3616},{"id":3615},"menus",[3617],{"type":48,"value":3618},"Menus",{"type":43,"tag":51,"props":3620,"children":3621},{},[3622,3624,3630,3631,3637],{"type":48,"value":3623},"Change ",{"type":43,"tag":57,"props":3625,"children":3627},{"className":3626},[],[3628],{"type":48,"value":3629},"getMenu({ handle })",{"type":48,"value":312},{"type":43,"tag":57,"props":3632,"children":3634},{"className":3633},[],[3635],{"type":48,"value":3636},"getMenu({ handle, locale })",{"type":48,"value":3638},", add localized Storefront context to the validated query, and update every caller. Without this, navigation remains pinned to the default market.",{"type":43,"tag":1153,"props":3640,"children":3642},{"id":3641},"customer-account-auth",[3643],{"type":48,"value":3644},"Customer Account auth",{"type":43,"tag":51,"props":3646,"children":3647},{},[3648,3650,3655,3657,3662],{"type":48,"value":3649},"Pass the active ",{"type":43,"tag":57,"props":3651,"children":3653},{"className":3652},[],[3654],{"type":48,"value":917},{"type":48,"value":3656}," into the Shopify\u002FHydrogen request context instead of using ",{"type":43,"tag":57,"props":3658,"children":3660},{"className":3659},[],[3661],{"type":48,"value":970},{"type":48,"value":3663},". Preserve locale across login, authorize, refresh, and logout return URLs. Validate any locale carried through OAuth state or URL params.",{"type":43,"tag":1153,"props":3665,"children":3667},{"id":3666},"chat-and-agent-api",[3668],{"type":48,"value":3669},"Chat and agent API",{"type":43,"tag":51,"props":3671,"children":3672},{},[3673,3675,3680,3682,3688,3690,3695],{"type":48,"value":3674},"The chat route lives outside ",{"type":43,"tag":57,"props":3676,"children":3678},{"className":3677},[],[3679],{"type":48,"value":1931},{"type":48,"value":3681},", and invisible URLs do not reveal locale in the referer. Send the current locale explicitly in the client request payload, validate it in ",{"type":43,"tag":57,"props":3683,"children":3685},{"className":3684},[],[3686],{"type":48,"value":3687},"app\u002Fapi\u002Fchat\u002Froute.ts",{"type":48,"value":3689},", and put it in agent context. Do not infer it from URL segments or fall back unconditionally to ",{"type":43,"tag":57,"props":3691,"children":3693},{"className":3692},[],[3694],{"type":48,"value":970},{"type":48,"value":154},{"type":43,"tag":51,"props":3697,"children":3698},{},[3699],{"type":48,"value":3700},"Agent tools, Storefront MCP calls, product context, cart creation, and navigation outputs must use that validated locale.",{"type":43,"tag":1153,"props":3702,"children":3704},{"id":3703},"markdown-negotiation",[3705],{"type":48,"value":3706},"Markdown negotiation",{"type":43,"tag":51,"props":3708,"children":3709},{},[3710,3712,3718,3720,3726,3728,3734],{"type":48,"value":3711},"After the proxy rewrite, localized page routes have an internal ",{"type":43,"tag":57,"props":3713,"children":3715},{"className":3714},[],[3716],{"type":48,"value":3717},"\u002F:locale\u002F...",{"type":48,"value":3719}," path even in invisible mode. Update content-negotiation rewrites so the locale reaches unlocalized ",{"type":43,"tag":57,"props":3721,"children":3723},{"className":3722},[],[3724],{"type":48,"value":3725},"app\u002Fmd\u002F...",{"type":48,"value":3727}," handlers as a validated query\u002Fheader value. Preserve ",{"type":43,"tag":57,"props":3729,"children":3731},{"className":3730},[],[3732],{"type":48,"value":3733},"?variant=",{"type":48,"value":3735}," and search parameters.",{"type":43,"tag":156,"props":3737,"children":3739},{"id":3738},"_9-switch-locale-and-synchronize-cart-country",[3740],{"type":48,"value":3741},"9. Switch locale and synchronize cart country",{"type":43,"tag":51,"props":3743,"children":3744},{},[3745],{"type":48,"value":3746},"Switching language within the same country must not mutate buyer identity:",{"type":43,"tag":95,"props":3748,"children":3749},{},[3750,3766],{"type":43,"tag":99,"props":3751,"children":3752},{},[3753,3758,3759,3764],{"type":43,"tag":57,"props":3754,"children":3756},{"className":3755},[],[3757],{"type":48,"value":78},{"type":48,"value":312},{"type":43,"tag":57,"props":3760,"children":3762},{"className":3761},[],[3763],{"type":48,"value":70},{"type":48,"value":3765},": set locale; no cart country update",{"type":43,"tag":99,"props":3767,"children":3768},{},[3769,3774,3775,3780,3782],{"type":43,"tag":57,"props":3770,"children":3772},{"className":3771},[],[3773],{"type":48,"value":70},{"type":48,"value":312},{"type":43,"tag":57,"props":3776,"children":3778},{"className":3777},[],[3779],{"type":48,"value":62},{"type":48,"value":3781},": set locale and update buyer country to ",{"type":43,"tag":57,"props":3783,"children":3785},{"className":3784},[],[3786],{"type":48,"value":995},{"type":43,"tag":51,"props":3788,"children":3789},{},[3790,3792,3798],{"type":48,"value":3791},"Keep the mutation in a server action, validate both inputs, and rely on ",{"type":43,"tag":57,"props":3793,"children":3795},{"className":3794},[],[3796],{"type":48,"value":3797},"updateCartBuyerIdentity",{"type":48,"value":3799}," to invalidate cart cache:",{"type":43,"tag":393,"props":3801,"children":3803},{"className":450,"code":3802,"language":452,"meta":398,"style":398},"\"use server\";\n\nimport { cookies } from \"next\u002Fheaders\";\n\nimport { getCountryCode, isEnabledLocale, LOCALE_COOKIE_NAME } from \"@\u002Flib\u002Fi18n\";\nimport { updateCartBuyerIdentity } from \"@\u002Flib\u002Fshopify\u002Foperations\u002Fcart\";\n\nexport async function switchLocaleAction(currentValue: string, nextValue: string) {\n  if (!isEnabledLocale(currentValue) || !isEnabledLocale(nextValue)) {\n    return { error: \"Unsupported locale\", success: false } as const;\n  }\n\n  if (getCountryCode(currentValue) !== getCountryCode(nextValue)) {\n    await updateCartBuyerIdentity(nextValue);\n  }\n\n  const cookieStore = await cookies();\n  cookieStore.set(LOCALE_COOKIE_NAME, nextValue, {\n    path: \"\u002F\",\n    sameSite: \"lax\",\n  });\n\n  return { success: true } as const;\n}\n",[3804],{"type":43,"tag":57,"props":3805,"children":3806},{"__ignoreMap":398},[3807,3827,3834,3875,3882,3938,3979,3986,4048,4110,4177,4185,4192,4245,4273,4280,4287,4319,4362,4392,4421,4438,4446,4486],{"type":43,"tag":458,"props":3808,"children":3809},{"class":460,"line":461},[3810,3814,3819,3823],{"type":43,"tag":458,"props":3811,"children":3812},{"style":483},[3813],{"type":48,"value":496},{"type":43,"tag":458,"props":3815,"children":3816},{"style":499},[3817],{"type":48,"value":3818},"use server",{"type":43,"tag":458,"props":3820,"children":3821},{"style":483},[3822],{"type":48,"value":496},{"type":43,"tag":458,"props":3824,"children":3825},{"style":483},[3826],{"type":48,"value":558},{"type":43,"tag":458,"props":3828,"children":3829},{"class":460,"line":561},[3830],{"type":43,"tag":458,"props":3831,"children":3832},{"emptyLinePlaceholder":565},[3833],{"type":48,"value":568},{"type":43,"tag":458,"props":3835,"children":3836},{"class":460,"line":571},[3837,3841,3845,3850,3854,3858,3862,3867,3871],{"type":43,"tag":458,"props":3838,"children":3839},{"style":465},[3840],{"type":48,"value":1275},{"type":43,"tag":458,"props":3842,"children":3843},{"style":483},[3844],{"type":48,"value":1280},{"type":43,"tag":458,"props":3846,"children":3847},{"style":477},[3848],{"type":48,"value":3849}," cookies",{"type":43,"tag":458,"props":3851,"children":3852},{"style":483},[3853],{"type":48,"value":1290},{"type":43,"tag":458,"props":3855,"children":3856},{"style":465},[3857],{"type":48,"value":1295},{"type":43,"tag":458,"props":3859,"children":3860},{"style":483},[3861],{"type":48,"value":515},{"type":43,"tag":458,"props":3863,"children":3864},{"style":499},[3865],{"type":48,"value":3866},"next\u002Fheaders",{"type":43,"tag":458,"props":3868,"children":3869},{"style":483},[3870],{"type":48,"value":496},{"type":43,"tag":458,"props":3872,"children":3873},{"style":483},[3874],{"type":48,"value":558},{"type":43,"tag":458,"props":3876,"children":3877},{"class":460,"line":624},[3878],{"type":43,"tag":458,"props":3879,"children":3880},{"emptyLinePlaceholder":565},[3881],{"type":48,"value":568},{"type":43,"tag":458,"props":3883,"children":3884},{"class":460,"line":632},[3885,3889,3893,3897,3901,3905,3909,3913,3917,3921,3925,3930,3934],{"type":43,"tag":458,"props":3886,"children":3887},{"style":465},[3888],{"type":48,"value":1275},{"type":43,"tag":458,"props":3890,"children":3891},{"style":483},[3892],{"type":48,"value":1280},{"type":43,"tag":458,"props":3894,"children":3895},{"style":477},[3896],{"type":48,"value":856},{"type":43,"tag":458,"props":3898,"children":3899},{"style":483},[3900],{"type":48,"value":510},{"type":43,"tag":458,"props":3902,"children":3903},{"style":477},[3904],{"type":48,"value":2826},{"type":43,"tag":458,"props":3906,"children":3907},{"style":483},[3908],{"type":48,"value":510},{"type":43,"tag":458,"props":3910,"children":3911},{"style":477},[3912],{"type":48,"value":1351},{"type":43,"tag":458,"props":3914,"children":3915},{"style":483},[3916],{"type":48,"value":1290},{"type":43,"tag":458,"props":3918,"children":3919},{"style":465},[3920],{"type":48,"value":1295},{"type":43,"tag":458,"props":3922,"children":3923},{"style":483},[3924],{"type":48,"value":515},{"type":43,"tag":458,"props":3926,"children":3927},{"style":499},[3928],{"type":48,"value":3929},"@\u002Flib\u002Fi18n",{"type":43,"tag":458,"props":3931,"children":3932},{"style":483},[3933],{"type":48,"value":496},{"type":43,"tag":458,"props":3935,"children":3936},{"style":483},[3937],{"type":48,"value":558},{"type":43,"tag":458,"props":3939,"children":3940},{"class":460,"line":678},[3941,3945,3949,3954,3958,3962,3966,3971,3975],{"type":43,"tag":458,"props":3942,"children":3943},{"style":465},[3944],{"type":48,"value":1275},{"type":43,"tag":458,"props":3946,"children":3947},{"style":483},[3948],{"type":48,"value":1280},{"type":43,"tag":458,"props":3950,"children":3951},{"style":477},[3952],{"type":48,"value":3953}," updateCartBuyerIdentity",{"type":43,"tag":458,"props":3955,"children":3956},{"style":483},[3957],{"type":48,"value":1290},{"type":43,"tag":458,"props":3959,"children":3960},{"style":465},[3961],{"type":48,"value":1295},{"type":43,"tag":458,"props":3963,"children":3964},{"style":483},[3965],{"type":48,"value":515},{"type":43,"tag":458,"props":3967,"children":3968},{"style":499},[3969],{"type":48,"value":3970},"@\u002Flib\u002Fshopify\u002Foperations\u002Fcart",{"type":43,"tag":458,"props":3972,"children":3973},{"style":483},[3974],{"type":48,"value":496},{"type":43,"tag":458,"props":3976,"children":3977},{"style":483},[3978],{"type":48,"value":558},{"type":43,"tag":458,"props":3980,"children":3981},{"class":460,"line":726},[3982],{"type":43,"tag":458,"props":3983,"children":3984},{"emptyLinePlaceholder":565},[3985],{"type":48,"value":568},{"type":43,"tag":458,"props":3987,"children":3988},{"class":460,"line":775},[3989,3993,3997,4001,4006,4010,4015,4019,4023,4027,4032,4036,4040,4044],{"type":43,"tag":458,"props":3990,"children":3991},{"style":465},[3992],{"type":48,"value":468},{"type":43,"tag":458,"props":3994,"children":3995},{"style":471},[3996],{"type":48,"value":2882},{"type":43,"tag":458,"props":3998,"children":3999},{"style":471},[4000],{"type":48,"value":850},{"type":43,"tag":458,"props":4002,"children":4003},{"style":853},[4004],{"type":48,"value":4005}," switchLocaleAction",{"type":43,"tag":458,"props":4007,"children":4008},{"style":483},[4009],{"type":48,"value":861},{"type":43,"tag":458,"props":4011,"children":4012},{"style":864},[4013],{"type":48,"value":4014},"currentValue",{"type":43,"tag":458,"props":4016,"children":4017},{"style":483},[4018],{"type":48,"value":651},{"type":43,"tag":458,"props":4020,"children":4021},{"style":584},[4022],{"type":48,"value":885},{"type":43,"tag":458,"props":4024,"children":4025},{"style":483},[4026],{"type":48,"value":510},{"type":43,"tag":458,"props":4028,"children":4029},{"style":864},[4030],{"type":48,"value":4031}," nextValue",{"type":43,"tag":458,"props":4033,"children":4034},{"style":483},[4035],{"type":48,"value":651},{"type":43,"tag":458,"props":4037,"children":4038},{"style":584},[4039],{"type":48,"value":885},{"type":43,"tag":458,"props":4041,"children":4042},{"style":483},[4043],{"type":48,"value":931},{"type":43,"tag":458,"props":4045,"children":4046},{"style":483},[4047],{"type":48,"value":890},{"type":43,"tag":458,"props":4049,"children":4050},{"class":460,"line":29},[4051,4055,4059,4063,4067,4071,4075,4080,4085,4089,4093,4097,4102,4106],{"type":43,"tag":458,"props":4052,"children":4053},{"style":465},[4054],{"type":48,"value":2960},{"type":43,"tag":458,"props":4056,"children":4057},{"style":920},[4058],{"type":48,"value":597},{"type":43,"tag":458,"props":4060,"children":4061},{"style":483},[4062],{"type":48,"value":2969},{"type":43,"tag":458,"props":4064,"children":4065},{"style":853},[4066],{"type":48,"value":821},{"type":43,"tag":458,"props":4068,"children":4069},{"style":920},[4070],{"type":48,"value":861},{"type":43,"tag":458,"props":4072,"children":4073},{"style":477},[4074],{"type":48,"value":4014},{"type":43,"tag":458,"props":4076,"children":4077},{"style":920},[4078],{"type":48,"value":4079},") ",{"type":43,"tag":458,"props":4081,"children":4082},{"style":483},[4083],{"type":48,"value":4084},"||",{"type":43,"tag":458,"props":4086,"children":4087},{"style":483},[4088],{"type":48,"value":2984},{"type":43,"tag":458,"props":4090,"children":4091},{"style":853},[4092],{"type":48,"value":821},{"type":43,"tag":458,"props":4094,"children":4095},{"style":920},[4096],{"type":48,"value":861},{"type":43,"tag":458,"props":4098,"children":4099},{"style":477},[4100],{"type":48,"value":4101},"nextValue",{"type":43,"tag":458,"props":4103,"children":4104},{"style":920},[4105],{"type":48,"value":3001},{"type":43,"tag":458,"props":4107,"children":4108},{"style":483},[4109],{"type":48,"value":1415},{"type":43,"tag":458,"props":4111,"children":4112},{"class":460,"line":1545},[4113,4118,4122,4127,4131,4135,4140,4144,4148,4153,4157,4161,4165,4169,4173],{"type":43,"tag":458,"props":4114,"children":4115},{"style":465},[4116],{"type":48,"value":4117},"    return",{"type":43,"tag":458,"props":4119,"children":4120},{"style":483},[4121],{"type":48,"value":1280},{"type":43,"tag":458,"props":4123,"children":4124},{"style":920},[4125],{"type":48,"value":4126}," error",{"type":43,"tag":458,"props":4128,"children":4129},{"style":483},[4130],{"type":48,"value":651},{"type":43,"tag":458,"props":4132,"children":4133},{"style":483},[4134],{"type":48,"value":515},{"type":43,"tag":458,"props":4136,"children":4137},{"style":499},[4138],{"type":48,"value":4139},"Unsupported locale",{"type":43,"tag":458,"props":4141,"children":4142},{"style":483},[4143],{"type":48,"value":496},{"type":43,"tag":458,"props":4145,"children":4146},{"style":483},[4147],{"type":48,"value":510},{"type":43,"tag":458,"props":4149,"children":4150},{"style":920},[4151],{"type":48,"value":4152}," success",{"type":43,"tag":458,"props":4154,"children":4155},{"style":483},[4156],{"type":48,"value":651},{"type":43,"tag":458,"props":4158,"children":4159},{"style":1731},[4160],{"type":48,"value":1734},{"type":43,"tag":458,"props":4162,"children":4163},{"style":483},[4164],{"type":48,"value":1290},{"type":43,"tag":458,"props":4166,"children":4167},{"style":465},[4168],{"type":48,"value":2773},{"type":43,"tag":458,"props":4170,"children":4171},{"style":471},[4172],{"type":48,"value":474},{"type":43,"tag":458,"props":4174,"children":4175},{"style":483},[4176],{"type":48,"value":558},{"type":43,"tag":458,"props":4178,"children":4179},{"class":460,"line":1856},[4180],{"type":43,"tag":458,"props":4181,"children":4182},{"style":483},[4183],{"type":48,"value":4184},"  }\n",{"type":43,"tag":458,"props":4186,"children":4187},{"class":460,"line":1876},[4188],{"type":43,"tag":458,"props":4189,"children":4190},{"emptyLinePlaceholder":565},[4191],{"type":48,"value":568},{"type":43,"tag":458,"props":4193,"children":4194},{"class":460,"line":3373},[4195,4199,4203,4208,4212,4216,4220,4225,4229,4233,4237,4241],{"type":43,"tag":458,"props":4196,"children":4197},{"style":465},[4198],{"type":48,"value":2960},{"type":43,"tag":458,"props":4200,"children":4201},{"style":920},[4202],{"type":48,"value":597},{"type":43,"tag":458,"props":4204,"children":4205},{"style":853},[4206],{"type":48,"value":4207},"getCountryCode",{"type":43,"tag":458,"props":4209,"children":4210},{"style":920},[4211],{"type":48,"value":861},{"type":43,"tag":458,"props":4213,"children":4214},{"style":477},[4215],{"type":48,"value":4014},{"type":43,"tag":458,"props":4217,"children":4218},{"style":920},[4219],{"type":48,"value":4079},{"type":43,"tag":458,"props":4221,"children":4222},{"style":483},[4223],{"type":48,"value":4224},"!==",{"type":43,"tag":458,"props":4226,"children":4227},{"style":853},[4228],{"type":48,"value":856},{"type":43,"tag":458,"props":4230,"children":4231},{"style":920},[4232],{"type":48,"value":861},{"type":43,"tag":458,"props":4234,"children":4235},{"style":477},[4236],{"type":48,"value":4101},{"type":43,"tag":458,"props":4238,"children":4239},{"style":920},[4240],{"type":48,"value":3001},{"type":43,"tag":458,"props":4242,"children":4243},{"style":483},[4244],{"type":48,"value":1415},{"type":43,"tag":458,"props":4246,"children":4247},{"class":460,"line":3390},[4248,4253,4257,4261,4265,4269],{"type":43,"tag":458,"props":4249,"children":4250},{"style":465},[4251],{"type":48,"value":4252},"    await",{"type":43,"tag":458,"props":4254,"children":4255},{"style":853},[4256],{"type":48,"value":3953},{"type":43,"tag":458,"props":4258,"children":4259},{"style":920},[4260],{"type":48,"value":861},{"type":43,"tag":458,"props":4262,"children":4263},{"style":477},[4264],{"type":48,"value":4101},{"type":43,"tag":458,"props":4266,"children":4267},{"style":920},[4268],{"type":48,"value":931},{"type":43,"tag":458,"props":4270,"children":4271},{"style":483},[4272],{"type":48,"value":558},{"type":43,"tag":458,"props":4274,"children":4275},{"class":460,"line":3422},[4276],{"type":43,"tag":458,"props":4277,"children":4278},{"style":483},[4279],{"type":48,"value":4184},{"type":43,"tag":458,"props":4281,"children":4282},{"class":460,"line":3443},[4283],{"type":43,"tag":458,"props":4284,"children":4285},{"emptyLinePlaceholder":565},[4286],{"type":48,"value":568},{"type":43,"tag":458,"props":4288,"children":4289},{"class":460,"line":3455},[4290,4294,4299,4303,4307,4311,4315],{"type":43,"tag":458,"props":4291,"children":4292},{"style":471},[4293],{"type":48,"value":2926},{"type":43,"tag":458,"props":4295,"children":4296},{"style":477},[4297],{"type":48,"value":4298}," cookieStore",{"type":43,"tag":458,"props":4300,"children":4301},{"style":483},[4302],{"type":48,"value":592},{"type":43,"tag":458,"props":4304,"children":4305},{"style":465},[4306],{"type":48,"value":2940},{"type":43,"tag":458,"props":4308,"children":4309},{"style":853},[4310],{"type":48,"value":3849},{"type":43,"tag":458,"props":4312,"children":4313},{"style":920},[4314],{"type":48,"value":1120},{"type":43,"tag":458,"props":4316,"children":4317},{"style":483},[4318],{"type":48,"value":558},{"type":43,"tag":458,"props":4320,"children":4322},{"class":460,"line":4321},18,[4323,4328,4332,4337,4341,4346,4350,4354,4358],{"type":43,"tag":458,"props":4324,"children":4325},{"style":477},[4326],{"type":48,"value":4327},"  cookieStore",{"type":43,"tag":458,"props":4329,"children":4330},{"style":483},[4331],{"type":48,"value":154},{"type":43,"tag":458,"props":4333,"children":4334},{"style":853},[4335],{"type":48,"value":4336},"set",{"type":43,"tag":458,"props":4338,"children":4339},{"style":920},[4340],{"type":48,"value":861},{"type":43,"tag":458,"props":4342,"children":4343},{"style":477},[4344],{"type":48,"value":4345},"LOCALE_COOKIE_NAME",{"type":43,"tag":458,"props":4347,"children":4348},{"style":483},[4349],{"type":48,"value":510},{"type":43,"tag":458,"props":4351,"children":4352},{"style":477},[4353],{"type":48,"value":4031},{"type":43,"tag":458,"props":4355,"children":4356},{"style":483},[4357],{"type":48,"value":510},{"type":43,"tag":458,"props":4359,"children":4360},{"style":483},[4361],{"type":48,"value":890},{"type":43,"tag":458,"props":4363,"children":4365},{"class":460,"line":4364},19,[4366,4371,4375,4379,4384,4388],{"type":43,"tag":458,"props":4367,"children":4368},{"style":920},[4369],{"type":48,"value":4370},"    path",{"type":43,"tag":458,"props":4372,"children":4373},{"style":483},[4374],{"type":48,"value":651},{"type":43,"tag":458,"props":4376,"children":4377},{"style":483},[4378],{"type":48,"value":515},{"type":43,"tag":458,"props":4380,"children":4381},{"style":499},[4382],{"type":48,"value":4383},"\u002F",{"type":43,"tag":458,"props":4385,"children":4386},{"style":483},[4387],{"type":48,"value":496},{"type":43,"tag":458,"props":4389,"children":4390},{"style":483},[4391],{"type":48,"value":1428},{"type":43,"tag":458,"props":4393,"children":4395},{"class":460,"line":4394},20,[4396,4401,4405,4409,4413,4417],{"type":43,"tag":458,"props":4397,"children":4398},{"style":920},[4399],{"type":48,"value":4400},"    sameSite",{"type":43,"tag":458,"props":4402,"children":4403},{"style":483},[4404],{"type":48,"value":651},{"type":43,"tag":458,"props":4406,"children":4407},{"style":483},[4408],{"type":48,"value":515},{"type":43,"tag":458,"props":4410,"children":4411},{"style":499},[4412],{"type":48,"value":1479},{"type":43,"tag":458,"props":4414,"children":4415},{"style":483},[4416],{"type":48,"value":496},{"type":43,"tag":458,"props":4418,"children":4419},{"style":483},[4420],{"type":48,"value":1428},{"type":43,"tag":458,"props":4422,"children":4424},{"class":460,"line":4423},21,[4425,4430,4434],{"type":43,"tag":458,"props":4426,"children":4427},{"style":483},[4428],{"type":48,"value":4429},"  }",{"type":43,"tag":458,"props":4431,"children":4432},{"style":920},[4433],{"type":48,"value":931},{"type":43,"tag":458,"props":4435,"children":4436},{"style":483},[4437],{"type":48,"value":558},{"type":43,"tag":458,"props":4439,"children":4441},{"class":460,"line":4440},22,[4442],{"type":43,"tag":458,"props":4443,"children":4444},{"emptyLinePlaceholder":565},[4445],{"type":48,"value":568},{"type":43,"tag":458,"props":4447,"children":4449},{"class":460,"line":4448},23,[4450,4454,4458,4462,4466,4470,4474,4478,4482],{"type":43,"tag":458,"props":4451,"children":4452},{"style":465},[4453],{"type":48,"value":898},{"type":43,"tag":458,"props":4455,"children":4456},{"style":483},[4457],{"type":48,"value":1280},{"type":43,"tag":458,"props":4459,"children":4460},{"style":920},[4461],{"type":48,"value":4152},{"type":43,"tag":458,"props":4463,"children":4464},{"style":483},[4465],{"type":48,"value":651},{"type":43,"tag":458,"props":4467,"children":4468},{"style":1731},[4469],{"type":48,"value":1821},{"type":43,"tag":458,"props":4471,"children":4472},{"style":483},[4473],{"type":48,"value":1290},{"type":43,"tag":458,"props":4475,"children":4476},{"style":465},[4477],{"type":48,"value":2773},{"type":43,"tag":458,"props":4479,"children":4480},{"style":471},[4481],{"type":48,"value":474},{"type":43,"tag":458,"props":4483,"children":4484},{"style":483},[4485],{"type":48,"value":558},{"type":43,"tag":458,"props":4487,"children":4489},{"class":460,"line":4488},24,[4490],{"type":43,"tag":458,"props":4491,"children":4492},{"style":483},[4493],{"type":48,"value":1011},{"type":43,"tag":51,"props":4495,"children":4496},{},[4497],{"type":48,"value":4498},"The selector remains a leaf Client Component.",{"type":43,"tag":95,"props":4500,"children":4501},{},[4502,4519],{"type":43,"tag":99,"props":4503,"children":4504},{},[4505,4510,4512,4518],{"type":43,"tag":273,"props":4506,"children":4507},{},[4508],{"type":48,"value":4509},"Sub-path\u002Fper-domain:",{"type":48,"value":4511}," call the action, then use next-intl's client router to replace the current pathname with ",{"type":43,"tag":57,"props":4513,"children":4515},{"className":4514},[],[4516],{"type":48,"value":4517},"{ locale: nextLocale }",{"type":48,"value":154},{"type":43,"tag":99,"props":4520,"children":4521},{},[4522,4527,4529,4535],{"type":43,"tag":273,"props":4523,"children":4524},{},[4525],{"type":48,"value":4526},"Invisible cookie:",{"type":48,"value":4528}," call the action, then call ",{"type":43,"tag":57,"props":4530,"children":4532},{"className":4531},[],[4533],{"type":48,"value":4534},"router.refresh()",{"type":48,"value":4536},". The pathname must not change.",{"type":43,"tag":51,"props":4538,"children":4539},{},[4540],{"type":48,"value":4541},"Do not offer a separate currency selector unless the store has a Shopify-backed currency choice independent of country. Display currency from cart\u002Fproduct responses.",{"type":43,"tag":156,"props":4543,"children":4545},{"id":4544},"_10-strategy-specific-seo-and-sitemap-behavior",[4546],{"type":48,"value":4547},"10. Strategy-specific SEO and sitemap behavior",{"type":43,"tag":1153,"props":4549,"children":4551},{"id":4550},"locale-sub-path-or-per-domain",[4552],{"type":48,"value":4553},"Locale sub-path or per-domain",{"type":43,"tag":51,"props":4555,"children":4556},{},[4557],{"type":48,"value":4558},"Each locale has a distinct indexable URL:",{"type":43,"tag":95,"props":4560,"children":4561},{},[4562,4567,4587,4592],{"type":43,"tag":99,"props":4563,"children":4564},{},[4565],{"type":48,"value":4566},"Canonical points to the current locale URL.",{"type":43,"tag":99,"props":4568,"children":4569},{},[4570,4572,4578,4580,4586],{"type":48,"value":4571},"Emit ",{"type":43,"tag":57,"props":4573,"children":4575},{"className":4574},[],[4576],{"type":48,"value":4577},"hreflang",{"type":48,"value":4579}," alternates for enabled locale URLs plus ",{"type":43,"tag":57,"props":4581,"children":4583},{"className":4582},[],[4584],{"type":48,"value":4585},"x-default",{"type":48,"value":154},{"type":43,"tag":99,"props":4588,"children":4589},{},[4590],{"type":48,"value":4591},"Emit one sitemap URL per locale with matching XHTML alternates.",{"type":43,"tag":99,"props":4593,"children":4594},{},[4595,4597,4603],{"type":48,"value":4596},"Build URLs from the selected routing strategy; do not assume every strategy uses ",{"type":43,"tag":57,"props":4598,"children":4600},{"className":4599},[],[4601],{"type":48,"value":4602},"\u002F${locale}",{"type":48,"value":154},{"type":43,"tag":1153,"props":4605,"children":4607},{"id":4606},"invisible-cookie",[4608],{"type":48,"value":302},{"type":43,"tag":51,"props":4610,"children":4611},{},[4612],{"type":48,"value":4613},"All variants share one public URL:",{"type":43,"tag":95,"props":4615,"children":4616},{},[4617,4622,4634,4639,4652],{"type":43,"tag":99,"props":4618,"children":4619},{},[4620],{"type":48,"value":4621},"Canonical is the clean public path.",{"type":43,"tag":99,"props":4623,"children":4624},{},[4625,4627,4632],{"type":48,"value":4626},"Do not emit fake locale-specific ",{"type":43,"tag":57,"props":4628,"children":4630},{"className":4629},[],[4631],{"type":48,"value":4577},{"type":48,"value":4633}," URLs.",{"type":43,"tag":99,"props":4635,"children":4636},{},[4637],{"type":48,"value":4638},"Emit one sitemap URL per resource, not one per locale.",{"type":43,"tag":99,"props":4640,"children":4641},{},[4642,4644,4650],{"type":48,"value":4643},"Keep ",{"type":43,"tag":57,"props":4645,"children":4647},{"className":4646},[],[4648],{"type":48,"value":4649},"alternateLinks: false",{"type":48,"value":4651}," in next-intl routing.",{"type":43,"tag":99,"props":4653,"children":4654},{},[4655],{"type":48,"value":4656},"Treat localization as personalization. Shared links and crawlers without the user's cookie receive negotiated\u002Fdefault content.",{"type":43,"tag":51,"props":4658,"children":4659},{},[4660,4662,4668],{"type":48,"value":4661},"Never put internal ",{"type":43,"tag":57,"props":4663,"children":4665},{"className":4664},[],[4666],{"type":48,"value":4667},"\u002F[locale]\u002F...",{"type":48,"value":4669}," rewrite targets into metadata or sitemap XML.",{"type":43,"tag":156,"props":4671,"children":4673},{"id":4672},"_11-verification",[4674],{"type":48,"value":4675},"11. Verification",{"type":43,"tag":51,"props":4677,"children":4678},{},[4679,4681,4687],{"type":48,"value":4680},"Run focused checks from ",{"type":43,"tag":57,"props":4682,"children":4684},{"className":4683},[],[4685],{"type":48,"value":4686},"apps\u002Ftemplate",{"type":48,"value":651},{"type":43,"tag":393,"props":4689,"children":4693},{"className":4690,"code":4691,"language":4692,"meta":398,"style":398},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm codegen\npnpm lint\npnpm build\n","bash",[4694],{"type":43,"tag":57,"props":4695,"children":4696},{"__ignoreMap":398},[4697,4710,4722],{"type":43,"tag":458,"props":4698,"children":4699},{"class":460,"line":461},[4700,4705],{"type":43,"tag":458,"props":4701,"children":4702},{"style":584},[4703],{"type":48,"value":4704},"pnpm",{"type":43,"tag":458,"props":4706,"children":4707},{"style":499},[4708],{"type":48,"value":4709}," codegen\n",{"type":43,"tag":458,"props":4711,"children":4712},{"class":460,"line":561},[4713,4717],{"type":43,"tag":458,"props":4714,"children":4715},{"style":584},[4716],{"type":48,"value":4704},{"type":43,"tag":458,"props":4718,"children":4719},{"style":499},[4720],{"type":48,"value":4721}," lint\n",{"type":43,"tag":458,"props":4723,"children":4724},{"class":460,"line":571},[4725,4729],{"type":43,"tag":458,"props":4726,"children":4727},{"style":584},[4728],{"type":48,"value":4704},{"type":43,"tag":458,"props":4730,"children":4731},{"style":499},[4732],{"type":48,"value":4733}," build\n",{"type":43,"tag":51,"props":4735,"children":4736},{},[4737],{"type":48,"value":4738},"Then run the app and verify the selected strategy.",{"type":43,"tag":1153,"props":4740,"children":4742},{"id":4741},"all-strategies",[4743],{"type":48,"value":4744},"All strategies",{"type":43,"tag":95,"props":4746,"children":4747},{},[4748,4753,4758,4763,4779,4795,4800,4805],{"type":43,"tag":99,"props":4749,"children":4750},{},[4751],{"type":48,"value":4752},"Every enabled regional locale produces the expected Shopify country\u002Flanguage context.",{"type":43,"tag":99,"props":4754,"children":4755},{},[4756],{"type":48,"value":4757},"Product and cart currency codes come from Shopify responses.",{"type":43,"tag":99,"props":4759,"children":4760},{},[4761],{"type":48,"value":4762},"Cache entries do not leak products, prices, menus, or cart state between locales.",{"type":43,"tag":99,"props":4764,"children":4765},{},[4766,4771,4772,4777],{"type":43,"tag":57,"props":4767,"children":4769},{"className":4768},[],[4770],{"type":48,"value":78},{"type":48,"value":312},{"type":43,"tag":57,"props":4773,"children":4775},{"className":4774},[],[4776],{"type":48,"value":70},{"type":48,"value":4778}," does not update buyer country.",{"type":43,"tag":99,"props":4780,"children":4781},{},[4782,4787,4788,4793],{"type":43,"tag":57,"props":4783,"children":4785},{"className":4784},[],[4786],{"type":48,"value":70},{"type":48,"value":312},{"type":43,"tag":57,"props":4789,"children":4791},{"className":4790},[],[4792],{"type":48,"value":62},{"type":48,"value":4794}," updates buyer country and invalidates cart cache.",{"type":43,"tag":99,"props":4796,"children":4797},{},[4798],{"type":48,"value":4799},"Chat\u002Fagent operations receive the explicit validated locale.",{"type":43,"tag":99,"props":4801,"children":4802},{},[4803],{"type":48,"value":4804},"Markdown responses use the same locale as HTML responses.",{"type":43,"tag":99,"props":4806,"children":4807},{},[4808],{"type":48,"value":4809},"Variant and filter query parameters survive switching and rewrites.",{"type":43,"tag":1153,"props":4811,"children":4813},{"id":4812},"locale-sub-path-1",[4814],{"type":48,"value":277},{"type":43,"tag":95,"props":4816,"children":4817},{},[4818,4830,4847],{"type":43,"tag":99,"props":4819,"children":4820},{},[4821,4823,4828],{"type":48,"value":4822},"Locale URLs serve directly with no ",{"type":43,"tag":57,"props":4824,"children":4826},{"className":4825},[],[4827],{"type":48,"value":86},{"type":48,"value":4829}," nesting.",{"type":43,"tag":99,"props":4831,"children":4832},{},[4833,4835,4840,4841,4846],{"type":48,"value":4834},"Default-prefix behavior matches ",{"type":43,"tag":57,"props":4836,"children":4838},{"className":4837},[],[4839],{"type":48,"value":373},{"type":48,"value":416},{"type":43,"tag":57,"props":4842,"children":4844},{"className":4843},[],[4845],{"type":48,"value":347},{"type":48,"value":154},{"type":43,"tag":99,"props":4848,"children":4849},{},[4850],{"type":48,"value":4851},"Canonical, hreflang, and sitemap URLs are locale-specific.",{"type":43,"tag":1153,"props":4853,"children":4855},{"id":4854},"invisible-cookie-1",[4856],{"type":48,"value":302},{"type":43,"tag":393,"props":4858,"children":4860},{"className":4690,"code":4859,"language":4692,"meta":398,"style":398},"curl -I http:\u002F\u002Flocalhost:3000\u002Fproducts\u002Fexample\ncurl -I --cookie \"NEXT_LOCALE=fr-CA\" http:\u002F\u002Flocalhost:3000\u002Fproducts\u002Fexample\n",[4861],{"type":43,"tag":57,"props":4862,"children":4863},{"__ignoreMap":398},[4864,4882],{"type":43,"tag":458,"props":4865,"children":4866},{"class":460,"line":461},[4867,4872,4877],{"type":43,"tag":458,"props":4868,"children":4869},{"style":584},[4870],{"type":48,"value":4871},"curl",{"type":43,"tag":458,"props":4873,"children":4874},{"style":499},[4875],{"type":48,"value":4876}," -I",{"type":43,"tag":458,"props":4878,"children":4879},{"style":499},[4880],{"type":48,"value":4881}," http:\u002F\u002Flocalhost:3000\u002Fproducts\u002Fexample\n",{"type":43,"tag":458,"props":4883,"children":4884},{"class":460,"line":561},[4885,4889,4893,4898,4902,4907,4911],{"type":43,"tag":458,"props":4886,"children":4887},{"style":584},[4888],{"type":48,"value":4871},{"type":43,"tag":458,"props":4890,"children":4891},{"style":499},[4892],{"type":48,"value":4876},{"type":43,"tag":458,"props":4894,"children":4895},{"style":499},[4896],{"type":48,"value":4897}," --cookie",{"type":43,"tag":458,"props":4899,"children":4900},{"style":483},[4901],{"type":48,"value":515},{"type":43,"tag":458,"props":4903,"children":4904},{"style":499},[4905],{"type":48,"value":4906},"NEXT_LOCALE=fr-CA",{"type":43,"tag":458,"props":4908,"children":4909},{"style":483},[4910],{"type":48,"value":496},{"type":43,"tag":458,"props":4912,"children":4913},{"style":499},[4914],{"type":48,"value":4881},{"type":43,"tag":95,"props":4916,"children":4917},{},[4918,4931,4952,4957,4968],{"type":43,"tag":99,"props":4919,"children":4920},{},[4921,4923,4929],{"type":48,"value":4922},"Both requests keep ",{"type":43,"tag":57,"props":4924,"children":4926},{"className":4925},[],[4927],{"type":48,"value":4928},"\u002Fproducts\u002Fexample",{"type":48,"value":4930}," as the public URL.",{"type":43,"tag":99,"props":4932,"children":4933},{},[4934,4936,4942,4944,4950],{"type":48,"value":4935},"The cookie-selected response has ",{"type":43,"tag":57,"props":4937,"children":4939},{"className":4938},[],[4940],{"type":48,"value":4941},"\u003Chtml lang=\"fr-CA\">",{"type":48,"value":4943}," and Shopify country ",{"type":43,"tag":57,"props":4945,"children":4947},{"className":4946},[],[4948],{"type":48,"value":4949},"CA",{"type":48,"value":4951}," context.",{"type":43,"tag":99,"props":4953,"children":4954},{},[4955],{"type":48,"value":4956},"Locale switching changes content\u002Fcart context without changing the address bar.",{"type":43,"tag":99,"props":4958,"children":4959},{},[4960,4966],{"type":43,"tag":57,"props":4961,"children":4963},{"className":4962},[],[4964],{"type":48,"value":4965},"\u002Ffr-CA\u002Fproducts\u002Fexample",{"type":48,"value":4967}," does not remain a public canonical URL.",{"type":43,"tag":99,"props":4969,"children":4970},{},[4971],{"type":48,"value":4972},"Metadata and sitemap contain only clean public paths and no locale alternates.",{"type":43,"tag":1153,"props":4974,"children":4976},{"id":4975},"per-domain",[4977],{"type":48,"value":328},{"type":43,"tag":95,"props":4979,"children":4980},{},[4981,4986,4991],{"type":43,"tag":99,"props":4982,"children":4983},{},[4984],{"type":48,"value":4985},"Each configured host resolves its allowed\u002Fdefault locales.",{"type":43,"tag":99,"props":4987,"children":4988},{},[4989],{"type":48,"value":4990},"Cross-domain locale switching uses the correct host.",{"type":43,"tag":99,"props":4992,"children":4993},{},[4994],{"type":48,"value":4995},"Canonical and hreflang URLs contain the production domains.",{"type":43,"tag":4997,"props":4998,"children":4999},"style",{},[5000],{"type":48,"value":5001},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":5003,"total":775},[5004,5020,5038,5054,5062,5075,5088],{"slug":5005,"name":5005,"fn":5006,"description":5007,"org":5008,"tags":5009,"stars":25,"repoUrl":26,"updatedAt":5019},"build-shop","build and adapt Shopify storefronts","Build or adapt a Shopify storefront with Vercel Shop source-backed patterns. Use when creating, redesigning, refactoring, or reviewing storefront routes, commerce data, rendering, caching, streaming, navigation, cart, account, mutations, product cards, media, loading states, or when applying Vercel Shop outside the template.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5010,5013,5014,5017,5018],{"name":5011,"slug":5012,"type":13},"Caching","caching",{"name":18,"slug":19,"type":13},{"name":5015,"slug":5016,"type":13},"Frontend","frontend",{"name":23,"slug":24,"type":13},{"name":9,"slug":8,"type":13},"2026-07-01T08:07:40.865869",{"slug":5021,"name":5021,"fn":5022,"description":5023,"org":5024,"tags":5025,"stars":25,"repoUrl":26,"updatedAt":5037},"enable-analytics","enable analytics and performance monitoring","Add Vercel Analytics, Vercel Speed Insights, and Google Tag Manager to the storefront.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5026,5029,5030,5033,5036],{"name":5027,"slug":5028,"type":13},"Analytics","analytics",{"name":15,"slug":16,"type":13},{"name":5031,"slug":5032,"type":13},"Monitoring","monitoring",{"name":5034,"slug":5035,"type":13},"Performance","performance",{"name":9,"slug":8,"type":13},"2026-07-30T05:31:20.646283",{"slug":5039,"name":5039,"fn":5040,"description":5041,"org":5042,"tags":5043,"stars":25,"repoUrl":26,"updatedAt":5053},"enable-i18n","enable multi-language support with next-intl","Enable next-intl-based i18n in the shop template — locale-prefixed URLs, per-locale message catalogs, and a locale switcher. Use when the user wants \"locale URLs\", \"multi-language\", or \"i18n\" without Shopify Markets integration. For full Shopify Markets multi-region commerce (region-aware pricing, inventory, payments), use `enable-shopify-markets` instead — this skill is the routing\u002Fi18n layer only.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5044,5045,5046,5049,5050],{"name":5015,"slug":5016,"type":13},{"name":21,"slug":21,"type":13},{"name":5047,"slug":5048,"type":13},"Next.js","next-js",{"name":9,"slug":8,"type":13},{"name":5051,"slug":5052,"type":13},"Web Development","web-development","2026-07-30T05:31:22.633341",{"slug":4,"name":4,"fn":5,"description":6,"org":5055,"tags":5056,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5057,5058,5059,5060,5061],{"name":18,"slug":19,"type":13},{"name":21,"slug":21,"type":13},{"name":15,"slug":16,"type":13},{"name":23,"slug":24,"type":13},{"name":9,"slug":8,"type":13},{"slug":3557,"name":3557,"fn":5063,"description":5064,"org":5065,"tags":5066,"stars":25,"repoUrl":26,"updatedAt":5074},"implement Shopify-powered navigation menus","Replace the hardcoded nav and footer menus with Shopify-powered menus.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5067,5070,5071,5072,5073],{"name":5068,"slug":5069,"type":13},"Design","design",{"name":18,"slug":19,"type":13},{"name":5015,"slug":5016,"type":13},{"name":23,"slug":24,"type":13},{"name":9,"slug":8,"type":13},"2026-07-30T05:31:21.651736",{"slug":5076,"name":5076,"fn":5077,"description":5078,"org":5079,"tags":5080,"stars":25,"repoUrl":26,"updatedAt":5087},"init-vercel-shop","initialize Vercel Shop storefront projects","Initialize a new Vercel Shop storefront with the official create-vercel-shop CLI. Use when the user wants to create, scaffold, start, or initialize a Vercel Shop project from a coding agent.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5081,5084,5085,5086],{"name":5082,"slug":5083,"type":13},"CLI","cli",{"name":18,"slug":19,"type":13},{"name":9,"slug":8,"type":13},{"name":5051,"slug":5052,"type":13},"2026-06-20T07:52:13.955072",{"slug":251,"name":251,"fn":5089,"description":5090,"org":5091,"tags":5092,"stars":25,"repoUrl":26,"updatedAt":5102},"reference Shopify GraphQL patterns and fragments","Integrate Shopify-validated Storefront or Customer Account GraphQL into Vercel Shop. Use after Shopify AI Toolkit has supplied and validated an API operation, or when adapting existing GraphQL to the template's operation placement, fragments, domain transforms, locale flow, cache role, invalidation, and route architecture.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5093,5096,5097,5100,5101],{"name":5094,"slug":5095,"type":13},"Documentation","documentation",{"name":18,"slug":19,"type":13},{"name":5098,"slug":5099,"type":13},"GraphQL","graphql",{"name":23,"slug":24,"type":13},{"name":9,"slug":8,"type":13},"2026-04-19T04:56:32.035454",{"items":5104,"total":5271},[5105,5121,5133,5150,5161,5176,5192,5210,5222,5239,5251,5261],{"slug":5106,"name":5106,"fn":5107,"description":5108,"org":5109,"tags":5110,"stars":5118,"repoUrl":5119,"updatedAt":5120},"next-cache-components-adoption","enable and migrate to Next.js Cache Components","Turn on Cache Components in a Next.js app and resolve the blocking routes it surfaces. Use when the user wants to enable, adopt, or migrate to Cache Components, flip the `cacheComponents` flag, work through a flood of blocking-prerender \u002F instant validation errors, run the `cache-components-instant-false` codemod, or decide between opting routes out with `export const instant = false` and fixing them in place.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5111,5112,5113,5116,5117],{"name":5011,"slug":5012,"type":13},{"name":5015,"slug":5016,"type":13},{"name":5114,"slug":5115,"type":13},"Migration","migration",{"name":5047,"slug":5048,"type":13},{"name":9,"slug":8,"type":13},141208,"https:\u002F\u002Fgithub.com\u002Fvercel\u002Fnext.js","2026-07-24T05:38:30.118542",{"slug":5122,"name":5122,"fn":5123,"description":5124,"org":5125,"tags":5126,"stars":5118,"repoUrl":5119,"updatedAt":5132},"next-cache-components-optimizer","optimize Next.js cache components","Drive a Next.js route to instant navigation by setting up an agentic loop, under Cache Components \u002F PPR, on initial load (hard navigation) and client-side navigation (soft navigation). Encode the goal as a failing @next\u002Fplaywright instant() e2e and work it to green, one verified route at a time; the shipped test then guards against regression. Use when asked to make a route's navigation instant (its static shell commits immediately), fix a route whose static shell isn't prerendered\u002Fserved\u002Fprefetched, grow a route's static shell or fix its slow first paint, diagnose which Suspense boundary keeps a route out of its static shell, or write the instant() e2e guard for one. Requires Next.js 16.3+ with cacheComponents; directs an upgrade if older.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5127,5128,5129,5130,5131],{"name":5011,"slug":5012,"type":13},{"name":5015,"slug":5016,"type":13},{"name":5047,"slug":5048,"type":13},{"name":5034,"slug":5035,"type":13},{"name":9,"slug":8,"type":13},"2026-07-30T05:31:10.674078",{"slug":5134,"name":5134,"fn":5135,"description":5136,"org":5137,"tags":5138,"stars":5118,"repoUrl":5119,"updatedAt":5149},"next-dev-loop","verify Next.js runtime behavior","Verify Next.js runtime behavior after editing app code. Use this skill to confirm a change actually works in a running app — not just that it compiles or type-checks. Combines \u002F_next\u002Fmcp (Next.js's view) with agent-browser (the browser's view). Requires a running `next dev`.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5139,5142,5143,5146,5147,5148],{"name":5140,"slug":5141,"type":13},"Debugging","debugging",{"name":5015,"slug":5016,"type":13},{"name":5144,"slug":5145,"type":13},"Local Development","local-development",{"name":5047,"slug":5048,"type":13},{"name":9,"slug":8,"type":13},{"name":5051,"slug":5052,"type":13},"2026-05-22T06:45:28.627735",{"slug":5151,"name":5151,"fn":5152,"description":5153,"org":5154,"tags":5155,"stars":5118,"repoUrl":5119,"updatedAt":5160},"next-partial-prefetching-adoption","adopt Partial Prefetching in Next.js apps","Turn on Partial Prefetching in a Next.js app and work through the insights it surfaces. Use when the user wants to enable or adopt Partial Prefetching, flip the `partialPrefetching` flag, opt routes in with `export const prefetch = 'partial'`, audit `\u003CLink prefetch={true}>` calls, or resolve the link-prefetch-partial and instant-shell-url-data insights.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5156,5157,5158,5159],{"name":5015,"slug":5016,"type":13},{"name":5047,"slug":5048,"type":13},{"name":5034,"slug":5035,"type":13},{"name":9,"slug":8,"type":13},"2026-07-30T05:31:11.591864",{"slug":5162,"name":5162,"fn":5163,"description":5164,"org":5165,"tags":5166,"stars":5173,"repoUrl":5174,"updatedAt":5175},"turborepo","manage monorepos with Turborepo","Turborepo monorepo build system guidance. Triggers on: turbo.json, task pipelines,\ndependsOn, caching, remote cache, the \"turbo\" CLI, --filter, --affected, CI optimization, environment\nvariables, internal packages, monorepo structure\u002Fbest practices, and boundaries.\n\nUse when user: configures tasks\u002Fworkflows\u002Fpipelines, creates packages, sets up\nmonorepo, shares code between apps, runs changed\u002Faffected packages, debugs cache,\nor has apps\u002Fpackages directories.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5167,5170,5171],{"name":5168,"slug":5169,"type":13},"CI\u002FCD","ci-cd",{"name":5034,"slug":5035,"type":13},{"name":5172,"slug":5162,"type":13},"Turborepo",30809,"https:\u002F\u002Fgithub.com\u002Fvercel\u002Fturborepo","2026-07-30T05:32:14.920116",{"slug":5177,"name":5177,"fn":5178,"description":5179,"org":5180,"tags":5181,"stars":5189,"repoUrl":5190,"updatedAt":5191},"add-function-examples","add AI function examples for testing","Guide for adding new AI function examples, for testing specific features against the actual provider APIs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5182,5185,5188],{"name":5183,"slug":5184,"type":13},"AI SDK","ai-sdk",{"name":5186,"slug":5187,"type":13},"Testing","testing",{"name":9,"slug":8,"type":13},25670,"https:\u002F\u002Fgithub.com\u002Fvercel\u002Fai","2026-04-06T18:55:51.318866",{"slug":5193,"name":5193,"fn":5194,"description":5195,"org":5196,"tags":5197,"stars":5189,"repoUrl":5190,"updatedAt":5209},"add-harness-package","add AI SDK harness packages","Guide for adding new AI SDK harness packages. Use when creating a new @ai-sdk\u002Fharness-\u003Cname> package that adapts a coding-agent runtime to HarnessV1.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5198,5201,5202,5205,5208],{"name":5199,"slug":5200,"type":13},"Agents","agents",{"name":5183,"slug":5184,"type":13},{"name":5203,"slug":5204,"type":13},"Harness","harness",{"name":5206,"slug":5207,"type":13},"SDK","sdk",{"name":9,"slug":8,"type":13},"2026-06-18T08:29:19.858737",{"slug":5211,"name":5211,"fn":5212,"description":5213,"org":5214,"tags":5215,"stars":5189,"repoUrl":5190,"updatedAt":5221},"add-provider-package","add new provider packages to AI SDK","Guide for adding new AI provider packages to the AI SDK. Use when creating a new @ai-sdk\u002F\u003Cprovider> package to integrate an AI service into the SDK.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5216,5217,5220],{"name":5183,"slug":5184,"type":13},{"name":5218,"slug":5219,"type":13},"API Development","api-development",{"name":9,"slug":8,"type":13},"2026-04-06T18:55:47.45549",{"slug":5223,"name":5223,"fn":5224,"description":5225,"org":5226,"tags":5227,"stars":5189,"repoUrl":5190,"updatedAt":5238},"adr-skill","create and maintain architecture decision records","Create and maintain Architecture Decision Records (ADRs) optimized for agentic coding workflows. Use when you need to propose, write, update, accept\u002Freject, deprecate, or supersede an ADR; bootstrap an adr folder and index; consult existing ADRs before implementing changes; or enforce ADR conventions. This skill uses Socratic questioning to capture intent before drafting, and validates output against an agent-readiness checklist.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5228,5231,5234,5235],{"name":5229,"slug":5230,"type":13},"ADR","adr",{"name":5232,"slug":5233,"type":13},"Architecture","architecture",{"name":5094,"slug":5095,"type":13},{"name":5236,"slug":5237,"type":13},"Engineering","engineering","2026-04-06T18:55:50.043694",{"slug":5184,"name":5184,"fn":5240,"description":5241,"org":5242,"tags":5243,"stars":5189,"repoUrl":5190,"updatedAt":5250},"build AI features with Vercel AI SDK","Answer questions about the AI SDK and help build AI-powered features. Use when developers: (1) Ask about AI SDK functions like generateText, streamText, ToolLoopAgent, embed, or tools, (2) Want to build AI agents, chatbots, RAG systems, or text generation features, (3) Have questions about AI providers (OpenAI, Anthropic, Google, etc.), streaming, tool calling, structured output, or embeddings, (4) Use React hooks like useChat or useCompletion. Triggers on: \"AI SDK\", \"Vercel AI SDK\", \"generateText\", \"streamText\", \"add AI to my app\", \"build an agent\", \"tool calling\", \"structured output\", \"useChat\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5244,5245,5246,5249],{"name":5199,"slug":5200,"type":13},{"name":5183,"slug":5184,"type":13},{"name":5247,"slug":5248,"type":13},"LLM","llm",{"name":9,"slug":8,"type":13},"2026-04-06T18:55:48.739463",{"slug":5252,"name":5252,"fn":5253,"description":5254,"org":5255,"tags":5256,"stars":5189,"repoUrl":5190,"updatedAt":5260},"capture-api-response-test-fixture","capture API response test fixtures","Capture API response test fixture.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5257,5258,5259],{"name":5218,"slug":5219,"type":13},{"name":5186,"slug":5187,"type":13},{"name":9,"slug":8,"type":13},"2026-04-06T18:55:56.374433",{"slug":5262,"name":5262,"fn":5263,"description":5264,"org":5265,"tags":5266,"stars":5189,"repoUrl":5190,"updatedAt":5270},"develop-ai-functions-example","develop AI SDK function examples","Develop examples for AI SDK functions. Use when creating, running, or modifying examples under examples\u002Fai-functions\u002Fsrc to validate provider support, demonstrate features, or create test fixtures.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5267,5268,5269],{"name":5183,"slug":5184,"type":13},{"name":5186,"slug":5187,"type":13},{"name":9,"slug":8,"type":13},"2026-04-06T18:55:55.088956",68]