Localization
The API for localizing your extension.
Anchor to standardapiStandardApi
The base API object provided to this and other customer-account extension targets.
- Anchor to i18ni18ni18nI18nI18nrequiredrequired
Utilities for translating content and formatting values according to the current
localizationof the user.- Anchor to localizationlocalizationlocalizationLocalizationLocalizationrequiredrequired
Details about the language of the buyer.
I18n
- formatCurrency
Returns a localized currency value. This function behaves like the standard `Intl.NumberFormat()` with a style of `currency` applied. It uses the buyer's locale by default.
(number: number | bigint, options?: { inExtensionLocale?: boolean; } & NumberFormatOptions) => string - formatDate
Returns a localized date value. This function behaves like the standard `Intl.DateTimeFormatOptions()` and uses the buyer's locale by default. Formatting options can be passed in as options.
(date: Date, options?: { inExtensionLocale?: boolean; } & DateTimeFormatOptions) => string - formatNumber
Returns a localized number. This function behaves like the standard `Intl.NumberFormat()` with a style of `decimal` applied. It uses the buyer's locale by default.
(number: number | bigint, options?: { inExtensionLocale?: boolean; } & NumberFormatOptions) => string - translate
Returns translated content in the buyer's locale, as supported by the extension. - `options.count` is a special numeric value used in pluralization. - The other option keys and values are treated as replacements for interpolation. - If the replacements are all primitives, then `translate()` returns a single string. - If replacements contain UI components, then `translate()` returns an array of elements.
I18nTranslate
I18nTranslate
This defines the i18n.translate() signature.
Localization
- extensionLanguage
This is the buyer's language, as supported by the extension. If the buyer's actual language is not supported by the extension, this is the fallback locale used for translations. For example, if the buyer's language is 'fr-CA' but your extension only supports translations for 'fr', then the `isoCode` for this language is 'fr'. If your extension does not provide french translations at all, this value is the default locale for your extension (that is, the one matching your .default.json file).
StatefulRemoteSubscribable<Language> - language
The language the buyer sees in the customer account hub.
StatefulRemoteSubscribable<Language>
Language
- isoCode
The BCP-47 language tag. It may contain a dash followed by an ISO 3166-1 alpha-2 region code.
string
Anchor to useLanguageuse Language()
Returns the buyer's language, as supported by the extension. If the buyer's actual language is not supported by the extension, it will return the fallback locale used for translations.
- isoCodeisoCodestringstring
The BCP-47 language tag. It may contain a dash followed by an ISO 3166-1 alpha-2 region code.
Language
Language
- isoCode
The BCP-47 language tag. It may contain a dash followed by an ISO 3166-1 alpha-2 region code.
string
Anchor to useExtensionLanguageuse Extension Language()
Returns the language the buyer sees in the customer account hub.
- isoCodeisoCodestringstring
The BCP-47 language tag. It may contain a dash followed by an ISO 3166-1 alpha-2 region code.
Language
Language
- isoCode
The BCP-47 language tag. It may contain a dash followed by an ISO 3166-1 alpha-2 region code.
string
Anchor to useI18nuse I18n()
Returns utilities for translating content and formatting values according to the current localization of the user.
Anchor to useI18n-returnsReturns
- formatCurrencyformatCurrency(number: number | bigint, options?: { inExtensionLocale?: boolean; } & NumberFormatOptions) => string(number: number | bigint, options?: { inExtensionLocale?: boolean; } & NumberFormatOptions) => string
Returns a localized currency value.
This function behaves like the standard
with a style ofcurrencyapplied. It uses the buyer's locale by default.- formatDateformatDate(date: Date, options?: { inExtensionLocale?: boolean; } & DateTimeFormatOptions) => string(date: Date, options?: { inExtensionLocale?: boolean; } & DateTimeFormatOptions) => string
Returns a localized date value.
This function behaves like the standard
and uses the buyer's locale by default. Formatting options can be passed in as options.- formatNumberformatNumber(number: number | bigint, options?: { inExtensionLocale?: boolean; } & NumberFormatOptions) => string(number: number | bigint, options?: { inExtensionLocale?: boolean; } & NumberFormatOptions) => string
Returns a localized number.
This function behaves like the standard
with a style ofdecimalapplied. It uses the buyer's locale by default.- translatetranslateI18nTranslateI18nTranslate
Returns translated content in the buyer's locale, as supported by the extension.
options.countis a special numeric value used in pluralization.- The other option keys and values are treated as replacements for interpolation.
- If the replacements are all primitives, then
translate()returns a single string. - If replacements contain UI components, then
translate()returns an array of elements.
I18n
I18n
- formatCurrency
Returns a localized currency value. This function behaves like the standard `Intl.NumberFormat()` with a style of `currency` applied. It uses the buyer's locale by default.
(number: number | bigint, options?: { inExtensionLocale?: boolean; } & NumberFormatOptions) => string - formatDate
Returns a localized date value. This function behaves like the standard `Intl.DateTimeFormatOptions()` and uses the buyer's locale by default. Formatting options can be passed in as options.
(date: Date, options?: { inExtensionLocale?: boolean; } & DateTimeFormatOptions) => string - formatNumber
Returns a localized number. This function behaves like the standard `Intl.NumberFormat()` with a style of `decimal` applied. It uses the buyer's locale by default.
(number: number | bigint, options?: { inExtensionLocale?: boolean; } & NumberFormatOptions) => string - translate
Returns translated content in the buyer's locale, as supported by the extension. - `options.count` is a special numeric value used in pluralization. - The other option keys and values are treated as replacements for interpolation. - If the replacements are all primitives, then `translate()` returns a single string. - If replacements contain UI components, then `translate()` returns an array of elements.
I18nTranslate
I18nTranslate
This defines the i18n.translate() signature.
Anchor to useTranslateuse Translate()
Returns the interface used to translate strings.
I18nTranslate
This defines the i18n.translate() signature.
I18nTranslate
This defines the i18n.translate() signature.
Examples
Translating strings
React
/* See the locales/en.default.json tab for the translation keys and values for this example */ import { reactExtension, Text, useTranslate, } from '@shopify/ui-extensions-react/customer-account'; export default reactExtension( 'customer-account.order-status.block.render', () => <Extension />, ); function Extension() { const translate = useTranslate(); return ( <Text>{translate('welcomeMessage')}</Text> ); }JavaScript
/* See the locales/en.default.json tab for the translation keys and values for this example */ import {extension} from '@shopify/ui-extensions/customer-account'; export default extension( 'customer-account.order-status.block.render', (root, {i18n}) => { const welcomeMsg = i18n.translate( 'welcomeMessage', ); root.appendChild(root.createText(welcomeMsg)); }, );locales/en.default.json
{ "welcomeMessage": "Welcome to our store!" }Translating strings with pluralization
Description
You can use the count option to get a pluralized string based on the current locale.
React
/* See the locales/en.default.json tab for the translation keys and values for this example */ import { reactExtension, Banner, useApi, useTranslate, } from '@shopify/ui-extensions-react/customer-account'; export default reactExtension( 'customer-account.order-status.block.render', () => <Extension />, ); function Extension() { const {i18n} = useApi(); const translate = useTranslate(); const points = 10000; const formattedPoints = i18n.formatNumber(points); // Translate the loyalty points message, using pluralization to differentiate messages const loyaltyPointsMsg = translate( 'loyaltyPoints', { count: points, formattedPoints, }, ); return <Banner title={loyaltyPointsMsg} />; }JavaScript
/* See the locales/en.default.json tab for the translation keys and values for this example */ import { extension, Banner, } from '@shopify/ui-extensions/customer-account'; export default extension( 'customer-account.order-status.block.render', (root, {i18n}) => { const points = 10000; const formattedPoints = i18n.formatNumber(points); // Translate the loyalty points message, using pluralization to differentiate messages const loyaltyPointsMsg = i18n.translate( 'loyaltyPoints', { count: points, formattedPoints, }, ); const app = root.createComponent(Banner, { title: loyaltyPointsMsg, }); root.appendChild(app); }, );locales/en.default.json
{ "loyaltyPoints": { "one": "You have {{formattedPoints}} loyalty point", "other": "You have {{formattedPoints}} loyalty points" } }