diff --git a/docs/store-operations/translations/index.mdx b/docs/store-operations/translations/index.mdx index e71378314..60bc59bff 100644 --- a/docs/store-operations/translations/index.mdx +++ b/docs/store-operations/translations/index.mdx @@ -16,6 +16,8 @@ The API currently supports translations for the following resource types, and mo * Brands * [Product Filters](/docs/store-operations/translations/filters) * [Locations](/docs/store-operations/translations/locations) +* [Order Statuses](/docs/store-operations/translations/order-statuses) +* [Promotions](/docs/store-operations/translations/promotions) Refer to the [Error Handling](/docs/store-operations/translations/errors) guide for understanding and handling errors while managing translations. @@ -74,4 +76,6 @@ For more information on OAuth Scopes, see our [Guide to API Accounts](/docs/star - [Product Listing Page Translations](/docs/store-operations/translations/listings) - [Product Filter Translations](/docs/store-operations/translations/filters) - [Inventory Locations Translations](/docs/store-operations/translations/locations) +- [Order Status Translations](/docs/store-operations/translations/order-statuses) +- [Promotions Translations](/docs/store-operations/translations/promotions) - [Error Handling Reference](/docs/store-operations/translations/errors) diff --git a/docs/store-operations/translations/order-statuses.mdx b/docs/store-operations/translations/order-statuses.mdx new file mode 100644 index 000000000..9c823f171 --- /dev/null +++ b/docs/store-operations/translations/order-statuses.mdx @@ -0,0 +1,337 @@ +# Translations for Order Statuses (Beta) + + + The Translations Admin GraphQL API is currently available on Catalyst + storefronts only. + + +The following entities are translatable for order statuses: + +- Label as `label` + + + Order status IDs are predefined and static (0–14). Merchants can only change the status name. See the [Order Status REST API](https://developer.bigcommerce.com/docs/rest-management/orders/order-status#get-all-order-statuses) for the full list of statuses and their IDs. + + +## Resource fields + +| Entity Type | `resourceType` | `resourceId` Format | +| --------------- | ----------------- | ---------------------------------- | +| Order Status | `ORDER_STATUSES` | `bc/store/orderStatus/{status_id}` | + +## Examples + +Below are examples of GraphQL queries and mutations for retrieving and managing translation settings for order statuses. + +### Query a List of Translations + +This query returns up to 50 order status translations for the specified resource type, channel, and locale. + +The request below uses several variables for reusability. Replace `{{channel_id}}` and `{{locale_code}}` with the appropriate values for your use case. + + + + +```graphql filename="Example query: Query a list of translations" showLineNumbers copy +GRAPHQL https://api.bigcommerce.com/stores/{{store_hash}}/graphql +X-Auth-Token: {{token}} + +query { + store { + translations( + filters: { + resourceType: ORDER_STATUSES + channelId: "bc/store/channel/{{channel_id}}" + localeId: "bc/store/locale/{{locale_code}}" + } + first: 50 + ) { + edges { + node { + resourceId + fields { + fieldName + original + translation + } + } + cursor + } + pageInfo { + hasNextPage + hasPreviousPage + startCursor + endCursor + } + } + } +} +``` + + + + +```json filename="Example query: Query a list of translations" showLineNumbers copy +{ + "data": { + "store": { + "translations": { + "edges": [ + { + "node": { + "resourceId": "bc/store/orderStatus/0", + "fields": [ + { + "fieldName": "label", + "original": "Incomplete", + "translation": "Incomplete (FR)" + } + ] + }, + "cursor": "eyJpZCI6MH0" + }, + { + "node": { + "resourceId": "bc/store/orderStatus/1", + "fields": [ + { + "fieldName": "label", + "original": "Pending", + "translation": "Pending (FR)" + } + ] + }, + "cursor": "eyJpZCI6MX0" + } + ], + "pageInfo": { + "hasNextPage": false, + "hasPreviousPage": false, + "startCursor": "eyJpZCI6MH0", + "endCursor": "eyJpZCI6MX0" + } + } + } + } +} +``` + + + + +### Query a Translation by Resource ID + +This query returns translation(s) by resourceId. + +The request below uses several variables for reusability. Replace `{{resourceId}}`, `{{channel_id}}`, and `{{locale_code}}` with appropriate values for your use case. Make sure `resourceId` follows the format from the [Resource fields](#resource-fields) table. + + + + +```graphql filename="Example query: Query a translation by id" showLineNumbers copy +GRAPHQL https://api.bigcommerce.com/stores/{{store_hash}}/graphql +X-Auth-Token: {{token}} + +query { + store { + translations( + filters: { + resourceType: ORDER_STATUSES + channelId: "bc/store/channel/{{channel_id}}" + localeId: "bc/store/locale/{{locale_code}}" + resourceIds: ["{{resourceId}}"] + } + ) { + edges { + node { + resourceId + fields { + fieldName + original + translation + } + } + cursor + } + } + } +} +``` + + + + +```json filename="Example query: Query a translation by id" showLineNumbers copy +{ + "data": { + "store": { + "translations": { + "edges": [ + { + "node": { + "resourceId": "bc/store/orderStatus/1", + "fields": [ + { + "fieldName": "label", + "original": "Pending", + "translation": "Pending (FR)" + } + ] + }, + "cursor": "eyJpZCI6MX0" + } + ] + } + } + } +} +``` + + + + +### Update a Translation + +This mutation updates translated values for order statuses for a specific channel and locale. + + + + +```graphql filename="Example mutation: Update a translation" showLineNumbers copy +GRAPHQL https://api.bigcommerce.com/stores/{{store_hash}}/graphql +X-Auth-Token: {{token}} + +mutation { + translation { + updateTranslations( + input: { + resourceType: ORDER_STATUSES, + channelId: "bc/store/channel/{{channel_id}}", + localeId: "bc/store/locale/{{locale_code}}", + entities: [ + { + resourceId: "bc/store/orderStatus/0", + fields: [ + { fieldName: "label", value: "Incomplete (FR)" } + ] + }, + { + resourceId: "bc/store/orderStatus/1", + fields: [ + { fieldName: "label", value: "Pending (FR)" } + ] + } + ] + } + ) { + __typename + errors { + __typename + ... on ValidationError { + message + } + ... on EntityNotFoundError { + id + message + } + ... on InvalidTranslationEntityFieldsError { + id + message + fields + } + } + } + } +} +``` + + + + +```json filename="Example mutation: Update a translation" showLineNumbers copy +{ + "data": { + "translation": { + "updateTranslations": { + "__typename": "UpdateTranslationsResult", + "errors": [] + } + } + } +} +``` + + + + +### Delete a Translation + +The following mutation removes translated values for specified order status fields, reverting them to the original values for a specific channel and locale. + + + + +```graphql filename="Example mutation: Delete a translation" showLineNumbers copy +GRAPHQL https://api.bigcommerce.com/stores/{{store_hash}}/graphql +X-Auth-Token: {{token}} + +mutation { + translation { + deleteTranslations( + input: { + resourceType: ORDER_STATUSES, + channelId: "bc/store/channel/{{channel_id}}", + localeId: "bc/store/locale/{{locale_code}}", + resources: [ + { + resourceId: "bc/store/orderStatus/0", + fields: ["label"] + }, + { + resourceId: "bc/store/orderStatus/1", + fields: ["label"] + } + ] + } + ) { + __typename + errors { + __typename + ... on ValidationError { + message + } + ... on EntityNotFoundError { + id + message + } + ... on InvalidTranslationEntityFieldsError { + id + message + fields + } + } + } + } +} +``` + + + + +```json filename="Example mutation: Delete a translation" showLineNumbers copy +{ + "data": { + "translation": { + "deleteTranslations": { + "__typename": "DeleteTranslationsResult", + "errors": [] + } + } + } +} +``` + + + + + diff --git a/docs/store-operations/translations/promotions.mdx b/docs/store-operations/translations/promotions.mdx new file mode 100644 index 000000000..ad68f16bc --- /dev/null +++ b/docs/store-operations/translations/promotions.mdx @@ -0,0 +1,359 @@ +# Translations for Promotions (Beta) + + + The Translations Admin GraphQL API is currently available on Catalyst + storefronts only. + + +The following fields are translatable for promotions (all fields are required in responses; values may be null if no translation exists): + +- Banners availability as `banners_availability` +- Banners upsell as `banners_upsell` +- Banners eligibility as `banners_eligibility` +- Banners congratulations as `banners_congratulations` + + + Only the fields above are supported for promotion translations. Requests with other field names will return an error. + + +## Resource fields + +| Entity Type | `resourceType` | `resourceId` Format | +| ----------- | ---------------- | --------------------------------- | +| Promotion | `PROMOTIONS` | `bc/store/promotion/{promotion_id}` | + +## Examples + +Below are examples of GraphQL queries and mutations for retrieving and managing translation settings for promotions. + +### Query a List of Translations + +This query returns up to 50 promotion translations for the specified resource type, channel, and locale. + +The request below uses several variables for reusability. Replace `{{channel_id}}` and `{{locale_code}}` with the appropriate values for your use case. + + + + +```graphql filename="Example query: Query a list of translations" showLineNumbers copy +GRAPHQL https://api.bigcommerce.com/stores/{{store_hash}}/graphql +X-Auth-Token: {{token}} + +query { + store { + translations( + filters: { + resourceType: PROMOTIONS + channelId: "bc/store/channel/{{channel_id}}" + localeId: "bc/store/locale/{{locale_code}}" + } + first: 50 + ) { + edges { + node { + resourceId + fields { + fieldName + original + translation + } + } + cursor + } + pageInfo { + hasNextPage + hasPreviousPage + startCursor + endCursor + } + } + } +} +``` + + + + +```json filename="Example query: Query a list of translations" showLineNumbers copy +{ + "data": { + "store": { + "translations": { + "edges": [ + { + "node": { + "resourceId": "bc/store/promotion/101", + "fields": [ + { "fieldName": "banners_availability", "original": "Available banner", "translation": "Bannière disponible" }, + { "fieldName": "banners_upsell", "original": "Upsell banner", "translation": "Bannière de montée en gamme" }, + { "fieldName": "banners_eligibility", "original": "Eligibility banner", "translation": "Bannière d'éligibilité" }, + { "fieldName": "banners_congratulations", "original": "Congrats banner", "translation": "Bannière de félicitations" } + ] + }, + "cursor": "eyJpZCI6MTAxfQ" + }, + { + "node": { + "resourceId": "bc/store/promotion/102", + "fields": [ + { "fieldName": "banners_availability", "original": "Available banner", "translation": null }, + { "fieldName": "banners_upsell", "original": "Upsell banner", "translation": null }, + { "fieldName": "banners_eligibility", "original": "Eligibility banner", "translation": null }, + { "fieldName": "banners_congratulations", "original": "Congrats banner", "translation": null } + ] + }, + "cursor": "eyJpZCI6MTAyfQ" + } + ], + "pageInfo": { + "hasNextPage": false, + "hasPreviousPage": false, + "startCursor": "eyJpZCI6MTAxfQ", + "endCursor": "eyJpZCI6MTAyfQ" + } + } + } + } +} +``` + + + + +### Query a Translation by Resource ID + +This query returns translation(s) by resourceId. + + +When querying a translation by `resourceId`, you must provide the full `resourceId` in the format `bc/store/promotion/{promotion_id}`. + + +The request below uses several variables for reusability. Replace `{{resourceId}}`, `{{channel_id}}`, and `{{locale_code}}` with appropriate values for your use case. Make sure `resourceId` follows the format from the [Resource fields](#resource-fields) table. + + + + +```graphql filename="Example query: Query a translation by id" showLineNumbers copy +GRAPHQL https://api.bigcommerce.com/stores/{{store_hash}}/graphql +X-Auth-Token: {{token}} + +query { + store { + translations( + filters: { + resourceType: PROMOTIONS + channelId: "bc/store/channel/{{channel_id}}" + localeId: "bc/store/locale/{{locale_code}}" + resourceIds: ["{{resourceId}}"] + } + ) { + edges { + node { + resourceId + fields { + fieldName + original + translation + } + } + cursor + } + } + } +} +``` + + + + +```json filename="Example query: Query a translation by id" showLineNumbers copy +{ + "data": { + "store": { + "translations": { + "edges": [ + { + "node": { + "resourceId": "bc/store/promotion/101", + "fields": [ + { "fieldName": "banners_availability", "original": "Available banner", "translation": "Bannière disponible" }, + { "fieldName": "banners_upsell", "original": "Upsell banner", "translation": "Bannière de montée en gamme" }, + { "fieldName": "banners_eligibility", "original": "Eligibility banner", "translation": "Bannière d'éligibilité" }, + { "fieldName": "banners_congratulations", "original": "Congrats banner", "translation": "Bannière de félicitations" } + ] + }, + "cursor": "eyJpZCI6MTAxfQ" + } + ] + } + } + } +} +``` + + + + +### Update a Translation + +This mutation updates translated values for promotions for a specific channel and locale. + + + + +```graphql filename="Example mutation: Update a translation" showLineNumbers copy +GRAPHQL https://api.bigcommerce.com/stores/{{store_hash}}/graphql +X-Auth-Token: {{token}} + +mutation { + translation { + updateTranslations( + input: { + resourceType: PROMOTIONS, + channelId: "bc/store/channel/{{channel_id}}", + localeId: "bc/store/locale/{{locale_code}}", + entities: [ + { + resourceId: "bc/store/promotion/101", + fields: [ + { fieldName: "banners_availability", value: "Bannière disponible" }, + { fieldName: "banners_upsell", value: "Bannière de montée en gamme" }, + { fieldName: "banners_eligibility", value: "Bannière d'éligibilité" }, + { fieldName: "banners_congratulations", value: "Bannière de félicitations" } + ] + }, + { + resourceId: "bc/store/promotion/102", + fields: [ + { fieldName: "banners_availability", value: "Bannière disponible" }, + { fieldName: "banners_upsell", value: "Bannière de montée en gamme" }, + { fieldName: "banners_eligibility", value: "Bannière d'éligibilité" }, + { fieldName: "banners_congratulations", value: "Bannière de félicitations" } + ] + } + ] + } + ) { + __typename + errors { + __typename + ... on ValidationError { + message + } + ... on EntityNotFoundError { + id + message + } + ... on InvalidTranslationEntityFieldsError { + id + message + fields + } + } + } + } +} +``` + + + + +```json filename="Example mutation: Update a translation" showLineNumbers copy +{ + "data": { + "translation": { + "updateTranslations": { + "__typename": "UpdateTranslationsResult", + "errors": [] + } + } + } +} +``` + + + + + +The mutation example above shows a successful response. If invalid fields or resource IDs are provided, the API will return error responses. See the [Error Handling Reference](/docs/store-operations/translations/errors) for more details on error responses. + + +### Delete a Translation + +The following mutation removes translated values for specified promotion fields, reverting them to the original values for a specific channel and locale. + + + + +```graphql filename="Example mutation: Delete a translation" showLineNumbers copy +GRAPHQL https://api.bigcommerce.com/stores/{{store_hash}}/graphql +X-Auth-Token: {{token}} + +mutation { + translation { + deleteTranslations( + input: { + resourceType: PROMOTIONS, + channelId: "bc/store/channel/{{channel_id}}", + localeId: "bc/store/locale/{{locale_code}}", + resources: [ + { + resourceId: "bc/store/promotion/101", + fields: [ + "banners_availability", + "banners_upsell", + "banners_eligibility", + "banners_congratulations" + ] + }, + { + resourceId: "bc/store/promotion/102", + fields: [ + "banners_availability", + "banners_upsell" + ] + } + ] + } + ) { + __typename + errors { + __typename + ... on ValidationError { + message + } + ... on EntityNotFoundError { + id + message + } + ... on InvalidTranslationEntityFieldsError { + id + message + fields + } + } + } + } +} +``` + + + + +```json filename="Example mutation: Delete a translation" showLineNumbers copy +{ + "data": { + "translation": { + "deleteTranslations": { + "__typename": "DeleteTranslationsResult", + "errors": [] + } + } + } +} +``` + + + + +