From 778b85653756f8d6386668fad10b28f50c9c5bf8 Mon Sep 17 00:00:00 2001
From: Chris Nowicki <102450568+chris-nowicki@users.noreply.github.com>
Date: Thu, 9 Oct 2025 17:02:59 -0400
Subject: [PATCH] =?UTF-8?q?Revert=20"DEVDOCS-6365=20-=20Add=20updates=20to?=
=?UTF-8?q?=20multi-language=20being=20turned=20on=20by=20defau=E2=80=A6"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This reverts commit 39fa8f104d8cad6099d867b3cb5bf2c7a972869e.
---
.../multi-language/overview.mdx | 9 +---
.../multi-language/setup.mdx | 49 +++++++++----------
docs/storefront/headless/index.mdx | 28 +++++------
3 files changed, 36 insertions(+), 50 deletions(-)
diff --git a/docs/storefront/catalyst/content-management/internationalization/multi-language/overview.mdx b/docs/storefront/catalyst/content-management/internationalization/multi-language/overview.mdx
index 696fff82b..816737b84 100644
--- a/docs/storefront/catalyst/content-management/internationalization/multi-language/overview.mdx
+++ b/docs/storefront/catalyst/content-management/internationalization/multi-language/overview.mdx
@@ -17,10 +17,6 @@ BigCommerce supports multiple locales for shoppers in different regions.
It's possible to modify product URLs in Catalyst so that each variant has a unique URL based on the selected options, essentially creating separate product pages for each variant. However, this isn't done automatically and requires custom code. You can link to a specific product variant using query parameters, which update dynamically as options are selected on the product detail page (PDP).
* Add translations for categories and locations to multiple locales added to Catalyst channel. Learn about how to use the [GraphQL Admin API](https://developer.bigcommerce.com/docs/store-operations/translations) to add translations to a single channel and locale.
-
- Managing locales (in Control Panel, CLI, or via the GraphQL Admin API) is available for Catalyst channels. As of `October 2025`, all Catalyst stores have the multi-language feature enabled by default. On stores where multi-language is disabled, locale mutations and Channel Manager locale controls aren't available.
-
-
## Default Catalyst features
### Manage language settings
@@ -37,8 +33,6 @@ Out of the box, the Catalyst storefront displays translated product data for the
The Catalyst storefront sends an `Accept-Language` HTTP request header to indicate the shopper’s preferred language or locale. This header allows the system to identify the appropriate translation to display. The translations for checkout are dynamically applied based on the locale specified in this header.
-Catalyst always respects the shopper's `Accept-Language` header and the storefront language selector; there is no Control Panel toggle for “use browser language” on Catalyst channels.
-
## Customization
Catalyst provides built-in features, but you can further customize its functionality to fit your needs.
@@ -51,7 +45,7 @@ You can manage language settings within a channel using the GraphQL Admin API or
* Setting a default language
* Activating or deactivating specific languages
-By default, a new Catalyst project starts with a single locale. Add and manage additional locales using the GraphQL Admin API or the CLI. For detailed instructions, refer to the [Locale Configuration Guide](https://developer.bigcommerce.com/docs/store-operations/settings/locales).
+By default, Catalyst does not include multilingual support when installing a storefront via the CLI. However, you can enable and manage locales using the GraphQL Admin API or the CLI. For detailed instructions, refer to the [Locale Configuration Guide](https://developer.bigcommerce.com/docs/store-operations/settings/locales).
### Configuring language settings using the CLI
@@ -97,3 +91,4 @@ By default, BigCommerce offers translations for the checkout page and emails in
## Resources
* [Locale Configuration](/docs/store-operations/settings/locales)
+
diff --git a/docs/storefront/catalyst/content-management/internationalization/multi-language/setup.mdx b/docs/storefront/catalyst/content-management/internationalization/multi-language/setup.mdx
index f0a88df0d..04114d5eb 100644
--- a/docs/storefront/catalyst/content-management/internationalization/multi-language/setup.mdx
+++ b/docs/storefront/catalyst/content-management/internationalization/multi-language/setup.mdx
@@ -12,12 +12,7 @@ Follow the [Getting Started with Catalyst](/docs/storefront/catalyst/getting-sta
## Adding a locale in Catalyst
-
- **Control Panel access:** The Localization tab in Channel Manager for adding/removing locales is available for Catalyst channels in **Settings** > **Localization** or via editing the channel in **Channel Manager**.
- **Default:** multi-language is enabled by default on all Catalyst stores.
-
-
-You can add additional languages to your storefront when you initially create your Catalyst storefront through the Control Panel. If you didn't do so, you have a couple of options.
+You can add additional languages to your storefront when you initially create your Catalyst storefront through the Control Panel. If you didn’t do so, you have a couple of options.
You can enable more locales for your storefront through the Control Panel:
@@ -39,17 +34,17 @@ Go ahead and start your development server. When you visit the running applicati
The selector lists all the enabled locales in your storefront. The storefront in this tutorial uses English as the default language and French (`fr`) as an additional language.
-You might have to restart your development server to see the new locale in your storefront selector.
+You might have to restart your development server to see the new locale in your storefront selector.
## Locale-specific URLs
-Now, try switching to your newly added locale, in my case `fr`, in the storefront selector. Notice the locale prefix, e.g. `fr`, has been applied to the pathname in the URL, `http://localhost:3000/fr`. This is because Catalyst uses [prefix-based routing](https://next-intl.dev/docs/routing/middleware#locale-detection) from the [`next-intl`](https://next-intl.dev/) library which means the locale prefix will be added to the pathname of each localized page.
+Now, try switching to your newly-added locale, in my case `FR`, in the storefront selector. Notice the locale prefix, e.g. `fr`, has been applied to the pathname in the URL, `http://localhost:3000/fr`. This is because Catalyst uses [prefix-based routing](https://next-intl.dev/docs/routing/middleware#locale-detection) from the [`next-intl`](https://next-intl.dev/) library which means the locale prefix will be added to the pathname of each localized page.
## Translating static strings
The Catalyst source code includes text elements that can be translated using predefined static strings. These static translations are housed in the `core/messages` folder in your Catalyst app. You can then access the static translations within your components using the `next-intl` library.
-Let’s explore more of how this works! Static string translations are already provided for the locales that Catalyst supports out of the box, like `fr`, so let’s start there.
+Let’s explore more of how this works! Static string translations are already provided for the locales that Catalyst supports out of the box, like `FR`, so let’s start there.
1. In the `core/messages` folder, open the pre-populated translation file for French, `fr.json`. You should see predefined translation keys — for example, those used in an empty cart message — along with their translations.
@@ -73,7 +68,7 @@ Let’s explore more of how this works! Static string translations are already p
// load all the translation strings from core/messages under the 'Cart' namespace.
const t = await getTranslations('Cart');
-
+
// pass translated strings into your components
const emptyState = (
<>
@@ -89,13 +84,13 @@ Let’s explore more of how this works! Static string translations are already p
}
```
-3. If you click on the cart, you should see a translated empty cart message if you switch your locale to `FR`.
+3. If you click on the cart, you should see a translated empty cart message if you switch your locale to `FR`.
-As you’ve noticed, after you enable a supported locale, the text for some components on your page will already be translated into this language. But if your locale is unsupported, you’ll need to [define your own static string translations](/docs/storefront/catalyst/content-management/internationalization/static-translations#translation-file) in this directory.
+As you’ve noticed, after you enable a supported locale, the text for some components on your page will already be translated into this language. But if your locale is unsupported, you’ll need to [define your own static string translations](/docs/storefront/catalyst/content-management/internationalization/static-translations#translation-file) in this directory.
-When you create more components, you’ll want to access the translations from your file. Learn more about [how to use the translations](/docs/storefront/catalyst/content-management/internationalization/static-translations#using-keys-in-react-components) inside your Client and Server Components.
+When you create more components, you’ll want to access the translations from your file. Learn more about [how to use the translations](/docs/storefront/catalyst/content-management/internationalization/static-translations#using-keys-in-react-components) inside your Client and Server Components.
## Translating dynamic data from BigCommerce
@@ -122,7 +117,7 @@ You can translate dynamic product data by sending GraphQL mutations with the [Gr
3. Download and import the [Postman collection for translations](https://storage.googleapis.com/bigcommerce-production-dev-center/template-files/catalyst/translations.postman_collection.json).
- The Postman collection includes requests for products, categories, and brands, but we’ll focus on the product ones for now.
+ The Postman collection includes requests for products, categories, and brands, but we’ll focus on the product ones for now.
4. Run the requests in the [Postman Collection Runner](https://learning.postman.com/docs/collections/running-collections/intro-to-collection-runs/). Select only the **Product Basic Information** mutation in the run sequence and upload the Product Translations file from Step 1.
@@ -132,13 +127,13 @@ Your products should now have French translations for their names and descriptio

-#### Textual search
+#### Textual search
-BigCommerce indexes the localized name, description, and search keywords for a product. This means you can match search queries to translated product content through these fields after you add translations. You’ve already translated the names and descriptions, so let’s move on to search keywords.
+BigCommerce indexes the localized name, description, and search keywords for a product. This means you can match search queries to translated product content through these fields after you add translations. You’ve already translated the names and descriptions, so let’s move on to search keywords.
-Search keywords are custom terms you can define so that a product is more visible in your storefront’s textual search. They aren’t visible on the storefront and don’t affect SEO, but help match more search queries to relevant products.
+Search keywords are custom terms you can define so that a product is more visible in your storefront’s textual search. They aren’t visible on the storefront and don’t affect SEO, but help match more search queries to relevant products.
-Your sample data doesn’t include predefined search keywords for your products. You can add them by sending a GraphQL mutation to [set the storefront details for a locale](https://developer.bigcommerce.com/docs/store-operations/catalog/msf-international-enhancements/product-attributes#set-storefront-details-for-a-locale).
+Your sample data doesn’t include predefined search keywords for your products. You can add them by sending a GraphQL mutation to [set the storefront details for a locale](https://developer.bigcommerce.com/docs/store-operations/catalog/msf-international-enhancements/product-attributes#set-storefront-details-for-a-locale).
Let’s try it out. In the same Postman Collection you imported earlier, open the [Postman Collection Runner](https://learning.postman.com/docs/collections/running-collections/intro-to-collection-runs/) again. This time, select the **Product Search Keywords** mutation in the run sequence. You can use the same [Product Translations file](https://storage.googleapis.com/bigcommerce-production-dev-center/template-files/catalyst/product-translations.json) you downloaded earlier since it also includes translations for search keywords.
@@ -164,7 +159,7 @@ Follow along to run sample translation data using Postman.
2. Open the same [Postman collection for translations](https://storage.googleapis.com/bigcommerce-production-dev-center/template-files/catalyst/translations.postman_collection.json) that you imported when you were translating product data. You can use the same sample Postman environment you imported earlier.
-3. Run the requests in the [Postman Collection Runner](https://learning.postman.com/docs/collections/running-collections/intro-to-collection-runs/). Select only the **Categories** mutation in the run sequence and upload the Categories Translations file from Step 1.
+3. Run the requests in the [Postman Collection Runner](https://learning.postman.com/docs/collections/running-collections/intro-to-collection-runs/). Select only the **Categories** mutation in the run sequence and upload the Categories Translations file from Step 1.
@@ -174,12 +169,12 @@ Once again, you should notice the category headings change in the header once yo
### Translating brands
-A brand is an attribute that groups your products by label and supports SEO. Brand data is fetched dynamically from BigCommerce, including its name, page title, meta keywords, meta description, and search keywords.
+A brand is an attribute that groups your products by label and supports SEO. Brand data is fetched dynamically from BigCommerce, including its name, page title, meta keywords, meta description, and search keywords.
Before translating brands, we’re going to first add a brand to a product, so that the brand is available on your storefront:
-1. Under the **Products** tab, click on **Products**.
+1. Under the **Products** tab, click on **Products**.
2. Click on the ellipses **(...)** next to the product you want to add a brand. Click **Edit**.
-3. In the **Basic Information** section, select the Rustic Roots brand in the dropdown. This brand came with the sample catalog data.
+3. In the **Basic Information** section, select the Rustic Roots brand in the dropdown. This brand came with the sample catalog data.
To add translations, you can send [GraphQL mutations](https://developer.bigcommerce.com/docs/store-operations/translations/brands) using the GraphQL Admin API. Follow along to run sample translation data using Postman.
@@ -200,9 +195,9 @@ When you visit the brand page at the path `/fr/rustic-roots`, you should see the
## Translating Makeswift content
-The Catalyst storefront you created with [One-Click Catalyst](/docs/storefront/catalyst/getting-started/workflows/one-click-catalyst) comes integrated with a Makeswift site. In the [Makeswift editor](https://docs.makeswift.com/product/builder-basics), you can add localized text for any component that you’re editing in Makeswift.
+The Catalyst storefront you created with [One-Click Catalyst](/docs/storefront/catalyst/getting-started/workflows/one-click-catalyst) comes integrated with a Makeswift site. In the [Makeswift editor](https://docs.makeswift.com/product/builder-basics), you can add localized text for any component that you’re editing in Makeswift.
-To try this out, make sure your development server is still running and visit the Makeswift editor by clicking the **Edit in Makeswift** button from your Control Panel. In the Makeswift editor, switch to your Development (Dev) Makeswift site.
+To try this out, make sure your development server is still running and visit the Makeswift editor by clicking the **Edit in Makeswift** button from your Control Panel. In the Makeswift editor, switch to your Development (Dev) Makeswift site.
To add a locale in Makeswift, open your site settings and go to the **Locales** tab. Then, click the **+ Add locale** button. In this case, we’ve added `fr`.
@@ -218,11 +213,11 @@ You should now be able to switch to the French locale in Makeswift.
With the French locale selected, you’ll notice a message that informs you that the localized page inherits from the default locale. To stop inheriting from the default and start customizing the content for the localized page, click the **Edit for this locale** button.
-Now you can now customize the content specifically for the French locale. Note that this does not affect the content in the base locale. In the canvas, click on the Slideshow component and change its text in the properties sidebar. You can also localize other properties like the slideshow image and its alt text.
+Now you can now customize the content specifically for the French locale. Note that this does not affect the content in the base locale. In the canvas, click on the Slideshow component and change its text in the properties sidebar. You can also localize other properties like the slideshow image and its alt text.
-For non-default locales, make sure you [toggle the page to be online](https://docs.makeswift.com/product/page/metadata#metadata) in the sidebar before publishing.
+For non-default locales, make sure you [toggle the page to be online](https://docs.makeswift.com/product/page/metadata#metadata) in the sidebar.
## Wrap up
@@ -231,4 +226,4 @@ Now, you should have a Catalyst app that fully supports multiple languages. Reme
* Static string translations in components
* Dynamic data from BigCommerce
-* Makeswift content
+* Makeswift content
\ No newline at end of file
diff --git a/docs/storefront/headless/index.mdx b/docs/storefront/headless/index.mdx
index 037095682..e3c42a7ed 100644
--- a/docs/storefront/headless/index.mdx
+++ b/docs/storefront/headless/index.mdx
@@ -1,6 +1,6 @@
---
title: Introduction to Headless Commerce
-keywords: headless, commerce, storefronts, backend, frontend, whitepaper, api, sdk,
+keywords: headless, commerce, storefronts, backend, frontend, whitepaper, api, sdk,
---
# Introduction to Headless Commerce
@@ -86,7 +86,7 @@ The following example uses the GraphQL Storefront API to complete a checkout and
# Correlation header matches next request
X-Correlation-Id: a7d28ca2-d4b2-4dc8-9f07-0706c431a372
```
-
+
```graphql {5} filename="Example mutation: Complete checkout" showLineNumbers copy
mutation completeCheckout($completeCheckoutInput: CompleteCheckoutInput!) {
checkout {
@@ -107,7 +107,7 @@ The following example uses the GraphQL Storefront API to complete a checkout and
```
-
+
```json {6-7} filename="Example mutation: Complete checkout" showLineNumbers copy
{
"data": {
@@ -148,10 +148,10 @@ The following example uses the GraphQL Storefront API to complete a checkout and
}
```
-
+
-
+
```json filename="Example response: Process payment" showLineNumbers copy
{
"data": {
@@ -173,7 +173,7 @@ BigCommerce has introduced a feature that leverages the [Customer Access Token](
After three attempts with invalid session-sync JWT tokens, the system will block the IP address for five minutes.
-The following examples demonstrate how to sync and validate session details for headless storefronts and hosted checkouts.
+The following examples demonstrate how to sync and validate session details for headless storefronts and hosted checkouts.
@@ -187,7 +187,7 @@ The following examples demonstrate how to sync and validate session details for
mutation GenerateSessionSyncJwt ($redirectTo: String!,$cartId: String,$visitorId: String,$ipAddress: IpAddress){
generateSessionSyncJwt(redirectTo:$redirectTo,cartId: $cartId, visitorId: $visitorId, ipAddress: $ipAddress){
- result {
+ result {
token
url
}
@@ -196,7 +196,7 @@ mutation GenerateSessionSyncJwt ($redirectTo: String!,$cartId: String,$visitorId
```
-
+
```json # Low-level session sync JWT generation
# Returns JUST a JWT, *not* a URL
# Can "sync" any arbitrary combination of parameters
@@ -216,7 +216,7 @@ mutation GenerateSessionSyncJwt {
-```json #
+```json #
mutation ValidateJwt{
validateSessionSyncJwt(jwt: "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJCQyIsImlhdCI6MTczMDQwMTc3MiwiZWF0IjoxNzMwNDAxODAyLCJqdGkiOiI2NTI5NDAyMi02MDA4LTRmY2YtOTUxOC03MWE5NjA0MjEyMjgiLCJvcGVyYXRpb24iOiJzZXNzaW9uX3N5bmMiLCJzaWQiOjczMzE5Nywic2Vzc2lvbl9wYXlsb2FkIjp7ImNhcnRfaWQiOm51bGwsImN1c3RvbWVyX2lkIjpudWxsLCJ2aXNpdG9yX2lkIjoiYWJjMTIzIn0sInJlcXVlc3RfaXAiOm51bGwsInJlZGlyZWN0X3RvIjoiaHR0cHM6Ly9iaWdjb21tZXJjZS5zdXBwb3J0L2ZvbyJ9.TAueByfTCdpw3UwwuKElUoeEjYcqCT13H3pt7UzIh6t6682_w4aaz1akS-FOyyOstOUYcjyUPLN5qi04eXXKKA"){
content{
@@ -224,14 +224,14 @@ mutation ValidateJwt{
visitorId
}
cart{
- entityId
+ entityId
}
customer {
firstName
}
customerAccessToken{
expiresAt
- value
+ value
}
redirectTo
}
@@ -241,16 +241,12 @@ mutation ValidateJwt{
-### Persisting analytics session IDs
+### Persisting analytics session IDs
The GraphQL API supports including a visitor ID when creating a session sync JWT using the `generateSessionSyncJwt` mutation, enhancing tracking consistency across different contexts. The visitor ID acts as a unique identifier that links a user's activity across multiple storefronts, ensuring that analytics session IDs remain persistent as users move across various parts of the storefront (e.g., Catalyst to Stencil) and other digital touchpoints.
Including a visitor ID in session sync requests helps maintain a cohesive session structure, providing more accurate insights into customer behavior. This is especially valuable for businesses leveraging analytics tools to track user interactions across headless storefronts, native checkouts, and other platforms.
-## Multi-Language support
-
-After **October 2025**, new headless stores will have access to Multi-language features similar to [Catalyst storefronts](/docs/storefront/catalyst/content-management/internationalization/multi-language/overview).
-
## Next step
- [Learn how to create a channel and a channel site](/docs/storefront/headless/channels)