diff --git a/packages/pwa-kit-create-app/CHANGELOG.md b/packages/pwa-kit-create-app/CHANGELOG.md index ae13f61fd3..bbe648eba0 100644 --- a/packages/pwa-kit-create-app/CHANGELOG.md +++ b/packages/pwa-kit-create-app/CHANGELOG.md @@ -1,6 +1,6 @@ ## v1.4.0-dev (Jan 06, 2022) - Generate `test-project` with the correct Einstein's site id [#285](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/285) - +- Generator creates a project configured to use a single-locale [#325](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/325) ## v1.3.0 (Jan 06, 2022) ## v1.1.0 (Sep 27, 2021) diff --git a/packages/pwa-kit-create-app/assets/pwa/l10n.config.js b/packages/pwa-kit-create-app/assets/pwa/l10n.config.js new file mode 100644 index 0000000000..807c8c2e0a --- /dev/null +++ b/packages/pwa-kit-create-app/assets/pwa/l10n.config.js @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2021, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: BSD-3-Clause + * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause + */ + +const pkgLocalizationConfig = { + l10n: { + supportedCurrencies: ['USD'], + defaultCurrency: 'USD', + supportedLocales: [ + { + id: 'en-US', + preferredCurrency: 'USD' + } + ], + defaultLocale: 'en-US' + } +} + +module.exports = { + pkgLocalizationConfig +} diff --git a/packages/pwa-kit-create-app/assets/pwa/pwa-kit.config.json b/packages/pwa-kit-create-app/assets/pwa/pwa-kit.config.json new file mode 100644 index 0000000000..877ec7eaf5 --- /dev/null +++ b/packages/pwa-kit-create-app/assets/pwa/pwa-kit.config.json @@ -0,0 +1,5 @@ +{ + "url": { + "locale": "none" + } +} diff --git a/packages/pwa-kit-create-app/scripts/create-mobify-app.js b/packages/pwa-kit-create-app/scripts/create-mobify-app.js index 2e4760b6c3..24bdd8ab24 100755 --- a/packages/pwa-kit-create-app/scripts/create-mobify-app.js +++ b/packages/pwa-kit-create-app/scripts/create-mobify-app.js @@ -117,9 +117,11 @@ const runGenerator = (answers, {outputDir}) => { extractTemplate('pwa', outputDir) + const {pkgLocalizationConfig} = require(`../assets/pwa/l10n.config`) const pkgJsonPath = p.resolve(outputDir, 'package.json') const pkgJSON = readJson(pkgJsonPath) - const finalPkgData = merge(pkgJSON, answers['scaffold-pwa']) + const pkgDataWithAnswers = merge(pkgJSON, answers['scaffold-pwa']) + const finalPkgData = merge(pkgDataWithAnswers, pkgLocalizationConfig) npmInstallables.forEach((pkgName) => { const keys = ['dependencies', 'devDependencies'] @@ -150,6 +152,20 @@ const runGenerator = (answers, {outputDir}) => { ] }) + const PWAKitConfigJsonTemplatePath = p.resolve( + p.join( + process.cwd(), + 'packages', + 'pwa-kit-create-app', + 'assets', + 'pwa', + 'pwa-kit.config.json' + ) + ) + const PWAKitConfigJsonTemplate = readJson(PWAKitConfigJsonTemplatePath) + const PWAKitConfigJsonPath = p.resolve(outputDir, 'pwa-kit.config.json') + writeJson(PWAKitConfigJsonPath, PWAKitConfigJsonTemplate) + const APIConfigTemplate = require(`../assets/pwa/api.config`).template const commerceApi = { proxyPath: answers['scaffold-pwa'].mobify.ssrParameters.proxyConfigs[0].path, @@ -299,7 +315,7 @@ const testProjectAnswers = () => { projectId: 'scaffold-pwa', instanceUrl: 'https://zzrf-001.sandbox.us01.dx.commercecloud.salesforce.com', clientId: 'c9c45bfd-0ed3-4aa2-9971-40f88962b836', - siteId: 'RefArchGlobal', + siteId: 'RefArch', organizationId: 'f_ecom_zzrf_001', shortCode: 'kv7kzm78', einsteinId: '1ea06c6e-c936-4324-bcf0-fada93f83bb1', diff --git a/packages/pwa/app/components/drawer-menu/index.test.js b/packages/pwa/app/components/drawer-menu/index.test.js index e5a5d42d96..881355d255 100644 --- a/packages/pwa/app/components/drawer-menu/index.test.js +++ b/packages/pwa/app/components/drawer-menu/index.test.js @@ -38,12 +38,10 @@ test('Renders DrawerMenu with root', () => { const drawer = document.querySelector('.chakra-portal') const accordion = document.querySelector('.chakra-accordion') - const localeSelector = document.querySelector('.sf-locale-selector') const socialIcons = document.querySelector('.sf-social-icons') expect(drawer).toBeInTheDocument() expect(accordion).toBeInTheDocument() - expect(localeSelector).toBeInTheDocument() expect(socialIcons).toBeInTheDocument() }) diff --git a/packages/pwa/app/components/header/index.test.js b/packages/pwa/app/components/header/index.test.js index fa092f01a5..6a29f49633 100644 --- a/packages/pwa/app/components/header/index.test.js +++ b/packages/pwa/app/components/header/index.test.js @@ -9,7 +9,7 @@ import PropTypes from 'prop-types' import {fireEvent, screen, waitFor} from '@testing-library/react' import Header from './index' -import {renderWithProviders} from '../../utils/test-utils' +import {renderWithProviders, getPathname} from '../../utils/test-utils' import useCustomer from '../../commerce-api/hooks/useCustomer' import {setupServer} from 'msw/node' import {rest} from 'msw' @@ -47,11 +47,11 @@ const MockedComponent = ({history}) => { const onAccountClick = () => { // Link to account page for registered customer, open auth modal otherwise if (customer.isRegistered) { - history.push('/en-GB/account') + history.push(getPathname('/account')) } } const onWishlistClick = () => { - history.push('/en-GB/account/wishlist') + history.push(getPathname('/account/wishlist')) } return ( @@ -112,7 +112,7 @@ beforeEach(() => { // Since we're testing some navigation logic, we are using a simple Router // around our component. We need to initialize the default route/path here. - window.history.pushState({}, 'Account', '/en-GB/account') + window.history.pushState({}, 'Account', getPathname('/account')) }) afterEach(() => { localStorage.clear() @@ -232,12 +232,12 @@ test('route to account page when an authenticated users click on account icon', const accountIcon = document.querySelector('svg[aria-label="My account"]') fireEvent.click(accountIcon) await waitFor(() => { - expect(history.push).toHaveBeenCalledWith('/en-GB/account') + expect(history.push).toHaveBeenCalledWith(getPathname('/account')) }) fireEvent.keyDown(accountIcon, {key: 'Enter', code: 'Enter'}) await waitFor(() => { - expect(history.push).toHaveBeenCalledWith('/en-GB/account') + expect(history.push).toHaveBeenCalledWith(getPathname('/account')) }) }) @@ -283,7 +283,7 @@ test('route to wishlist page when an authenticated users click on wishlist icon' const wishlistIcon = document.querySelector('button[aria-label="Wishlist"]') fireEvent.click(wishlistIcon) await waitFor(() => { - expect(history.push).toHaveBeenCalledWith('/en-GB/account/wishlist') + expect(history.push).toHaveBeenCalledWith(getPathname('/account/wishlist')) }) }) diff --git a/packages/pwa/app/components/image-gallery/index.test.js b/packages/pwa/app/components/image-gallery/index.test.js index 1e129bb134..6f4aeb40dd 100644 --- a/packages/pwa/app/components/image-gallery/index.test.js +++ b/packages/pwa/app/components/image-gallery/index.test.js @@ -11,7 +11,7 @@ import {screen, fireEvent, waitFor} from '@testing-library/react' import ImageGallery from './index' import {Skeleton as ImageGallerySkeleton} from './index' import {createMemoryHistory} from 'history' -import {renderWithProviders} from '../../utils/test-utils' +import {renderWithProviders, getPathname} from '../../utils/test-utils' const MockComponent = ({imageGroups = [], selectedVariationAttributes = {}}) => { return !imageGroups.length ? ( @@ -30,7 +30,7 @@ MockComponent.propTypes = { describe('Image Gallery Component', () => { test('renders component with all images', () => { const history = createMemoryHistory() - history.push('/en-GB/image-gallery') + history.push(getPathname('/image-gallery')) renderWithProviders() expect(screen.getAllByAltText(/Ruffle Front V-Neck Cardigan/).length).toEqual(3) @@ -43,7 +43,7 @@ describe('Image Gallery Component', () => { test('can select thumbnail image with enter keyboard', async () => { const history = createMemoryHistory() - history.push('/en-GB/image-gallery') + history.push(getPathname('/image-gallery')) renderWithProviders( diff --git a/packages/pwa/app/components/link/index.test.js b/packages/pwa/app/components/link/index.test.js index d6f04fb673..c8b845a0af 100644 --- a/packages/pwa/app/components/link/index.test.js +++ b/packages/pwa/app/components/link/index.test.js @@ -5,8 +5,9 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ import React from 'react' -import {renderWithProviders} from '../../utils/test-utils' +import {renderWithProviders, getPathname} from '../../utils/test-utils' import Link from './index' +import {DEFAULT_LOCALE} from '../../constants' import {getUrlConfig} from '../../utils/utils' jest.mock('../../utils/utils', () => { @@ -21,7 +22,7 @@ test('renders a link with locale prepended', () => { locale: 'path' })) const {getByText} = renderWithProviders(My Page) - expect(getByText(/My Page/i)).toHaveAttribute('href', '/en-GB/mypage') + expect(getByText(/My Page/i)).toHaveAttribute('href', getPathname('/mypage')) }) test('renders a link with locale as query param', () => { @@ -29,7 +30,7 @@ test('renders a link with locale as query param', () => { locale: 'query_param' })) const {getByText} = renderWithProviders(My Page) - expect(getByText(/My Page/i)).toHaveAttribute('href', '/mypage?locale=en-GB') + expect(getByText(/My Page/i)).toHaveAttribute('href', `/mypage?locale=${DEFAULT_LOCALE}`) }) test('accepts `to` prop as well', () => { @@ -37,7 +38,7 @@ test('accepts `to` prop as well', () => { locale: 'path' })) const {getByText} = renderWithProviders(My Page) - expect(getByText(/My Page/i)).toHaveAttribute('href', '/en-GB/mypage') + expect(getByText(/My Page/i)).toHaveAttribute('href', getPathname('/mypage')) }) test('does not modify root url', () => { diff --git a/packages/pwa/app/components/search/index.test.js b/packages/pwa/app/components/search/index.test.js index 63a93cf131..b5df435cc7 100644 --- a/packages/pwa/app/components/search/index.test.js +++ b/packages/pwa/app/components/search/index.test.js @@ -5,7 +5,7 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ import React from 'react' -import {renderWithProviders} from '../../utils/test-utils' +import {renderWithProviders, getPathname} from '../../utils/test-utils' import user from '@testing-library/user-event' import {screen, waitFor} from '@testing-library/react' import SearchInput from './index' @@ -56,7 +56,7 @@ test('changes url when enter is pressed', async () => { renderWithProviders() const searchInput = document.querySelector('input[type="search"]') await user.type(searchInput, 'Dresses{enter}') - await waitFor(() => expect(window.location.pathname).toEqual('/en-GB/search')) + await waitFor(() => expect(window.location.pathname).toEqual(getPathname('/search'))) await waitFor(() => expect(window.location.search).toEqual('?q=Dresses')) }) diff --git a/packages/pwa/app/hooks/use-auth-modal.test.js b/packages/pwa/app/hooks/use-auth-modal.test.js index b8e80cb36b..b2c117b1df 100644 --- a/packages/pwa/app/hooks/use-auth-modal.test.js +++ b/packages/pwa/app/hooks/use-auth-modal.test.js @@ -7,7 +7,7 @@ import React from 'react' import {screen, within, waitFor} from '@testing-library/react' import user from '@testing-library/user-event' -import {renderWithProviders} from '../utils/test-utils' +import {renderWithProviders, getPathname} from '../utils/test-utils' import {AuthModal, useAuthModal} from './use-auth-modal' import {BrowserRouter as Router, Route} from 'react-router-dom' import Account from '../pages/account' @@ -125,7 +125,7 @@ const MockedComponent = () => { - + @@ -245,6 +245,5 @@ test('Allows customer to create an account', async () => { user.click(withinForm.getByText(/create account/i)) // wait for redirecting to account page - expect(await screen.findByText(/customer@test.com/i, {}, {timeout: 30000})).toBeInTheDocument() - expect(await screen.queryAllByText(/Log out/i, {}, {timeout: 30000}).length).toEqual(2) + expect(await screen.findByText(/welcome tester/i, {}, {timeout: 30000})).toBeInTheDocument() }) diff --git a/packages/pwa/app/pages/account/index.test.js b/packages/pwa/app/pages/account/index.test.js index cda60fa3d0..64f7398505 100644 --- a/packages/pwa/app/pages/account/index.test.js +++ b/packages/pwa/app/pages/account/index.test.js @@ -10,7 +10,7 @@ import {screen, waitFor, within} from '@testing-library/react' import user from '@testing-library/user-event' import {rest} from 'msw' import {setupServer} from 'msw/node' -import {renderWithProviders} from '../../utils/test-utils' +import {renderWithProviders, getPathname} from '../../utils/test-utils' import { mockedGuestCustomer, mockedRegisteredCustomer, @@ -20,7 +20,6 @@ import { } from '../../commerce-api/mock-data' import useCustomer from '../../commerce-api/hooks/useCustomer' import Account from './index' -import {getUrlConfig} from '../../utils/utils' jest.mock('../../commerce-api/utils', () => { const originalModule = jest.requireActual('../../commerce-api/utils') @@ -30,14 +29,6 @@ jest.mock('../../commerce-api/utils', () => { } }) -jest.mock('../../utils/utils', () => { - const original = jest.requireActual('../../utils/utils') - return { - ...original, - getUrlConfig: jest.fn() - } -}) - const MockedComponent = () => { const customer = useCustomer() @@ -49,7 +40,7 @@ const MockedComponent = () => { return ( - } /> + } /> ) } @@ -98,13 +89,10 @@ const server = setupServer( beforeEach(() => { jest.resetModules() server.listen({onUnhandledRequest: 'error'}) - getUrlConfig.mockImplementation(() => ({ - locale: 'path' - })) // Since we're testing some navigation logic, we are using a simple Router // around our component. We need to initialize the default route/path here. - window.history.pushState({}, 'Account', '/en-GB/account') + window.history.pushState({}, 'Account', getPathname('/account')) }) afterEach(() => { localStorage.clear() @@ -119,7 +107,7 @@ test('Redirects to login page if the customer is not logged in', async () => { }) ) renderWithProviders() - await waitFor(() => expect(window.location.pathname).toEqual('/en-GB/login')) + await waitFor(() => expect(window.location.pathname).toEqual(getPathname('/login'))) }) test('Provides navigation for subpages', async () => { @@ -128,11 +116,11 @@ test('Provides navigation for subpages', async () => { const nav = within(screen.getByTestId('account-detail-nav')) user.click(nav.getByText('Addresses')) - await waitFor(() => expect(window.location.pathname).toEqual('/en-GB/account/addresses')) + await waitFor(() => expect(window.location.pathname).toEqual(getPathname('/account/addresses'))) user.click(nav.getByText('Order History')) - await waitFor(() => expect(window.location.pathname).toEqual('/en-GB/account/orders')) + await waitFor(() => expect(window.location.pathname).toEqual(getPathname('/account/orders'))) user.click(nav.getByText('Payment Methods')) - await waitFor(() => expect(window.location.pathname).toEqual('/en-GB/account/payments')) + await waitFor(() => expect(window.location.pathname).toEqual(getPathname('/account/payments'))) }) test('Renders account detail page by default for logged-in customer', async () => { @@ -149,7 +137,7 @@ test('Allows customer to sign out', async () => { expect(await screen.findByTestId('account-detail-page')).toBeInTheDocument() user.click(screen.getAllByText(/Log Out/)[0]) await waitFor(() => { - expect(window.location.pathname).toEqual('/en-GB/login') + expect(window.location.pathname).toEqual(getPathname('/login')) }) }) diff --git a/packages/pwa/app/pages/account/orders.test.js b/packages/pwa/app/pages/account/orders.test.js index 66c3bced55..c753df9579 100644 --- a/packages/pwa/app/pages/account/orders.test.js +++ b/packages/pwa/app/pages/account/orders.test.js @@ -10,7 +10,7 @@ import {screen} from '@testing-library/react' import user from '@testing-library/user-event' import {rest} from 'msw' import {setupServer} from 'msw/node' -import {renderWithProviders} from '../../utils/test-utils' +import {renderWithProviders, getPathname} from '../../utils/test-utils' import { mockedRegisteredCustomer, mockOrderHistory, @@ -18,15 +18,6 @@ import { } from '../../commerce-api/mock-data' import useCustomer from '../../commerce-api/hooks/useCustomer' import Orders from './orders' -import {getUrlConfig} from '../../utils/utils' - -jest.mock('../../utils/utils', () => { - const original = jest.requireActual('../../utils/utils') - return { - ...original, - getUrlConfig: jest.fn() - } -}) jest.mock('../../commerce-api/utils', () => { const originalModule = jest.requireActual('../../commerce-api/utils') @@ -51,7 +42,7 @@ const MockedComponent = () => { return ( - + @@ -105,12 +96,10 @@ const server = setupServer( // Set up and clean up beforeEach(() => { jest.resetModules() - getUrlConfig.mockImplementation(() => ({ - locale: 'path' - })) + server.listen({onUnhandledRequest: 'error'}) - window.history.pushState({}, 'Account', '/en-GB/account/orders') + window.history.pushState({}, 'Account', getPathname('/account/orders')) }) afterEach(() => { localStorage.clear() diff --git a/packages/pwa/app/pages/checkout/index.test.js b/packages/pwa/app/pages/checkout/index.test.js index 5ba8f09d03..aaae2e4b5e 100644 --- a/packages/pwa/app/pages/checkout/index.test.js +++ b/packages/pwa/app/pages/checkout/index.test.js @@ -11,7 +11,7 @@ import {screen, waitFor, waitForElementToBeRemoved, within} from '@testing-libra import user from '@testing-library/user-event' import {rest} from 'msw' import {setupServer} from 'msw/node' -import {renderWithProviders} from '../../utils/test-utils' +import {renderWithProviders, getPathname} from '../../utils/test-utils' import useShopper from '../../commerce-api/hooks/useShopper' import { ocapiBasketWithItem, @@ -24,7 +24,6 @@ import { mockedCustomerProductLists, productsResponse } from '../../commerce-api/mock-data' -import {getUrlConfig} from '../../utils/utils' jest.setTimeout(60000) @@ -48,14 +47,6 @@ jest.mock('../../commerce-api/utils', () => { } }) -jest.mock('../../utils/utils', () => { - const original = jest.requireActual('../../utils/utils') - return { - ...original, - getUrlConfig: jest.fn() - } -}) - jest.mock('../../commerce-api/pkce', () => { return { createCodeVerifier: jest.fn().mockReturnValue('codeverifier'), @@ -72,10 +63,10 @@ const WrappedCheckout = () => { useShopper() return ( - + - +
success
@@ -169,9 +160,6 @@ const server = setupServer( // Set up and clean up beforeAll(() => { - getUrlConfig.mockImplementation(() => ({ - locale: 'path' - })) jest.resetModules() server.listen({onUnhandledRequest: 'error'}) }) @@ -284,7 +272,7 @@ test('Can proceed through checkout steps as guest', async () => { ) // Set the initial browser router path and render our component tree. - window.history.pushState({}, 'Checkout', '/en-GB/checkout') + window.history.pushState({}, 'Checkout', getPathname('/checkout')) renderWithProviders() // Wait for checkout to load and display first step @@ -515,7 +503,7 @@ test('Can proceed through checkout as registered customer', async () => { ) // Set the initial browser router path and render our component tree. - window.history.pushState({}, 'Checkout', '/en-GB/checkout') + window.history.pushState({}, 'Checkout', getPathname('/checkout')) renderWithProviders() // Switch to login @@ -598,7 +586,7 @@ test('Can proceed through checkout as registered customer', async () => { user.click(placeOrderBtn) await waitFor(() => { - expect(window.location.pathname).toEqual('/en-GB/checkout/confirmation') + expect(window.location.pathname).toEqual(getPathname('/checkout/confirmation')) }) }) @@ -672,7 +660,7 @@ test('Can edit address during checkout as a registered customer', async () => { ) // Set the initial browser router path and render our component tree. - window.history.pushState({}, 'Checkout', '/en-GB/checkout') + window.history.pushState({}, 'Checkout', getPathname('/checkout')) renderWithProviders() // Switch to login @@ -799,7 +787,7 @@ test('Can add address during checkout as a registered customer', async () => { ) // Set the initial browser router path and render our component tree. - window.history.pushState({}, 'Checkout', '/en-GB/checkout') + window.history.pushState({}, 'Checkout', getPathname('/checkout')) renderWithProviders() // Switch to login diff --git a/packages/pwa/app/pages/login/index.test.js b/packages/pwa/app/pages/login/index.test.js index a146400a9a..3aeb5e8995 100644 --- a/packages/pwa/app/pages/login/index.test.js +++ b/packages/pwa/app/pages/login/index.test.js @@ -9,13 +9,12 @@ import {screen} from '@testing-library/react' import user from '@testing-library/user-event' import {rest} from 'msw' import {setupServer} from 'msw/node' -import {renderWithProviders} from '../../utils/test-utils' +import {renderWithProviders, getPathname} from '../../utils/test-utils' import Login from '.' import {BrowserRouter as Router, Route} from 'react-router-dom' import Account from '../account' import Registration from '../registration' import ResetPassword from '../reset-password' -import {getUrlConfig} from '../../utils/utils' jest.setTimeout(60000) @@ -29,14 +28,6 @@ const mockRegisteredCustomer = { login: 'darek@test.com' } -jest.mock('../../utils/utils', () => { - const original = jest.requireActual('../../utils/utils') - return { - ...original, - getUrlConfig: jest.fn() - } -}) - jest.mock('commerce-sdk-isomorphic', () => { const sdk = jest.requireActual('commerce-sdk-isomorphic') return { @@ -102,13 +93,13 @@ const MockedComponent = () => { return ( - + - + - + @@ -119,9 +110,6 @@ const server = setupServer() // Set up and clean up beforeEach(() => { - getUrlConfig.mockImplementation(() => ({ - locale: 'path' - })) jest.resetModules() server.listen({ onUnhandledRequest: 'error' diff --git a/packages/pwa/app/pages/registration/index.test.jsx b/packages/pwa/app/pages/registration/index.test.jsx index affd9aba81..c6f80c94c0 100644 --- a/packages/pwa/app/pages/registration/index.test.jsx +++ b/packages/pwa/app/pages/registration/index.test.jsx @@ -7,10 +7,9 @@ import React from 'react' import {screen, within, waitFor} from '@testing-library/react' import user from '@testing-library/user-event' -import {renderWithProviders} from '../../utils/test-utils' +import {renderWithProviders, getPathname} from '../../utils/test-utils' import Registration from '.' import {BrowserRouter as Router, Route} from 'react-router-dom' -import {getUrlConfig} from '../../utils/utils' import Account from '../account' jest.setTimeout(60000) @@ -40,14 +39,6 @@ jest.mock('../../commerce-api/auth', () => { }) }) -jest.mock('../../utils/utils', () => { - const original = jest.requireActual('../../utils/utils') - return { - ...original, - getUrlConfig: jest.fn() - } -}) - jest.mock('commerce-sdk-isomorphic', () => { const sdk = jest.requireActual('commerce-sdk-isomorphic') return { @@ -131,7 +122,7 @@ const MockedComponent = () => { return ( - + @@ -141,9 +132,6 @@ const MockedComponent = () => { // Set up and clean up // Set up and clean up beforeEach(() => { - getUrlConfig.mockImplementation(() => ({ - locale: 'path' - })) jest.useFakeTimers() }) afterEach(() => { diff --git a/packages/pwa/app/pages/reset-password/index.test.jsx b/packages/pwa/app/pages/reset-password/index.test.jsx index 77eb66ea82..c6081c3c25 100644 --- a/packages/pwa/app/pages/reset-password/index.test.jsx +++ b/packages/pwa/app/pages/reset-password/index.test.jsx @@ -9,9 +9,8 @@ import {screen, waitFor, within} from '@testing-library/react' import user from '@testing-library/user-event' import {rest} from 'msw' import {setupServer} from 'msw/node' -import {renderWithProviders} from '../../utils/test-utils' +import {getPathname, renderWithProviders} from '../../utils/test-utils' import ResetPassword from '.' -import {getUrlConfig} from '../../utils/utils' jest.setTimeout(60000) @@ -24,13 +23,6 @@ const mockRegisteredCustomer = { lastName: 'Testing', login: 'darek@test.com' } -jest.mock('../../utils/utils', () => { - const original = jest.requireActual('../../utils/utils') - return { - ...original, - getUrlConfig: jest.fn() - } -}) jest.mock('commerce-sdk-isomorphic', () => { const sdk = jest.requireActual('commerce-sdk-isomorphic') @@ -105,9 +97,6 @@ const server = setupServer( // Set up and clean up beforeEach(() => { - getUrlConfig.mockImplementation(() => ({ - locale: 'path' - })) jest.resetModules() server.listen({ onUnhandledRequest: 'error' @@ -128,7 +117,7 @@ test('Allows customer to go to sign in page', async () => { user.click(screen.getByText('Sign in')) await waitFor(() => { - expect(window.location.pathname).toEqual('/en-GB/login') + expect(window.location.pathname).toEqual(getPathname('/login')) }) }) @@ -161,7 +150,7 @@ test('Allows customer to generate password token', async () => { user.click(screen.getByText('Back to Sign In')) await waitFor(() => { - expect(window.location.pathname).toEqual('/en-GB/login') + expect(window.location.pathname).toEqual(getPathname('/login')) }) }) diff --git a/packages/pwa/app/translations/compiled/en-US.json b/packages/pwa/app/translations/compiled/en-US.json new file mode 100644 index 0000000000..c1c3e89a43 --- /dev/null +++ b/packages/pwa/app/translations/compiled/en-US.json @@ -0,0 +1,3318 @@ +{ + "account.accordion.button.my_account": [ + { + "type": 0, + "value": "My Account" + } + ], + "account.heading.my_account": [ + { + "type": 0, + "value": "My Account" + } + ], + "account.logout_button.button.log_out": [ + { + "type": 0, + "value": "Log Out" + } + ], + "account_addresses.badge.default": [ + { + "type": 0, + "value": "Default" + } + ], + "account_addresses.button.add_address": [ + { + "type": 0, + "value": "Add Address" + } + ], + "account_addresses.info.address_updated": [ + { + "type": 0, + "value": "Address updated" + } + ], + "account_addresses.info.new_address_saved": [ + { + "type": 0, + "value": "New address saved" + } + ], + "account_addresses.page_action_placeholder.button.add_address": [ + { + "type": 0, + "value": "Add Address" + } + ], + "account_addresses.page_action_placeholder.heading.no_saved_addresses": [ + { + "type": 0, + "value": "No Saved Addresses" + } + ], + "account_addresses.page_action_placeholder.message.add_new_address": [ + { + "type": 0, + "value": "Add a new address method for faster checkout." + } + ], + "account_addresses.title.addresses": [ + { + "type": 0, + "value": "Addresses" + } + ], + "account_detail.title.account_details": [ + { + "type": 0, + "value": "Account Details" + } + ], + "account_order_detail.heading.billing_address": [ + { + "type": 0, + "value": "Billing Address" + } + ], + "account_order_detail.heading.num_of_items": [ + { + "type": 1, + "value": "count" + }, + { + "type": 0, + "value": " items" + } + ], + "account_order_detail.heading.payment_method": [ + { + "type": 0, + "value": "Payment Method" + } + ], + "account_order_detail.heading.shipping_address": [ + { + "type": 0, + "value": "Shipping Address" + } + ], + "account_order_detail.heading.shipping_method": [ + { + "type": 0, + "value": "Shipping Method" + } + ], + "account_order_detail.label.order_number": [ + { + "type": 0, + "value": "Order Number: " + }, + { + "type": 1, + "value": "orderNumber" + } + ], + "account_order_detail.label.ordered_date": [ + { + "type": 0, + "value": "Ordered: " + }, + { + "type": 1, + "value": "date" + } + ], + "account_order_detail.label.pending_tracking_number": [ + { + "type": 0, + "value": "Pending" + } + ], + "account_order_detail.label.tracking_number": [ + { + "type": 0, + "value": "Tracking Number" + } + ], + "account_order_detail.link.back_to_history": [ + { + "type": 0, + "value": "Back to Order History" + } + ], + "account_order_detail.title.order_details": [ + { + "type": 0, + "value": "Order Details" + } + ], + "account_order_history.button.continue_shopping": [ + { + "type": 0, + "value": "Continue Shopping" + } + ], + "account_order_history.description.once_you_place_order": [ + { + "type": 0, + "value": "Once you place an order the details will show up here." + } + ], + "account_order_history.heading.no_order_yet": [ + { + "type": 0, + "value": "You haven't placed an order yet." + } + ], + "account_order_history.label.num_of_items": [ + { + "type": 1, + "value": "count" + }, + { + "type": 0, + "value": " items" + } + ], + "account_order_history.label.order_number": [ + { + "type": 0, + "value": "Order Number: " + }, + { + "type": 1, + "value": "orderNumber" + } + ], + "account_order_history.label.ordered_date": [ + { + "type": 0, + "value": "Ordered: " + }, + { + "type": 1, + "value": "date" + } + ], + "account_order_history.label.shipped_to": [ + { + "type": 0, + "value": "Shipped to: " + }, + { + "type": 1, + "value": "name" + } + ], + "account_order_history.link.view_details": [ + { + "type": 0, + "value": "View details" + } + ], + "account_order_history.title.order_history": [ + { + "type": 0, + "value": "Order History" + } + ], + "account_payment_methods.button.add_method": [ + { + "type": 0, + "value": "Add Payment Method" + } + ], + "account_payment_methods.description.add_method_for_faster_checkout": [ + { + "type": 0, + "value": "Add a new payment method for faster checkout." + } + ], + "account_payment_methods.heading.no_saved_methods": [ + { + "type": 0, + "value": "No Saved Payment Methods" + } + ], + "account_payment_methods.info.new_method_saved": [ + { + "type": 0, + "value": "New Payment Method Saved" + } + ], + "account_payment_methods.title.payment_methods": [ + { + "type": 0, + "value": "Payment Methods" + } + ], + "account_wishlist.button.continue_shopping": [ + { + "type": 0, + "value": "Continue Shopping" + } + ], + "account_wishlist.description.continue_shopping": [ + { + "type": 0, + "value": "Continue shopping and add items to your wishlist." + } + ], + "account_wishlist.heading.no_wishlist": [ + { + "type": 0, + "value": "No Wishlist Items" + } + ], + "account_wishlist.title.wishlist": [ + { + "type": 0, + "value": "Wishlist" + } + ], + "action_card.action.edit": [ + { + "type": 0, + "value": "Edit" + } + ], + "action_card.action.remove": [ + { + "type": 0, + "value": "Remove" + } + ], + "add_to_cart_modal.info.added_to_cart": [ + { + "type": 1, + "value": "quantity" + }, + { + "type": 0, + "value": " " + }, + { + "offset": 0, + "options": { + "one": { + "value": [ + { + "type": 0, + "value": "item" + } + ] + }, + "other": { + "value": [ + { + "type": 0, + "value": "items" + } + ] + } + }, + "pluralType": "cardinal", + "type": 6, + "value": "quantity" + }, + { + "type": 0, + "value": " added to cart" + } + ], + "add_to_cart_modal.label.cart_subtotal": [ + { + "type": 0, + "value": "Cart Subtotal (" + }, + { + "type": 1, + "value": "itemAccumulatedCount" + }, + { + "type": 0, + "value": " item)" + } + ], + "add_to_cart_modal.label.quantity": [ + { + "type": 0, + "value": "Qty" + } + ], + "add_to_cart_modal.link.checkout": [ + { + "type": 0, + "value": "Proceed to Checkout" + } + ], + "add_to_cart_modal.link.view_cart": [ + { + "type": 0, + "value": "View Cart" + } + ], + "add_to_cart_modal.recommended_products.title.might_also_like": [ + { + "type": 0, + "value": "You Might Also Like" + } + ], + "auth_modal.description.now_signed_in": [ + { + "type": 0, + "value": "You're now signed in." + } + ], + "auth_modal.error.incorrect_email_or_password": [ + { + "type": 0, + "value": "Something's not right with your email or password. Try again." + } + ], + "auth_modal.info.welcome_user": [ + { + "type": 0, + "value": "Welcome " + }, + { + "type": 1, + "value": "name" + }, + { + "type": 0, + "value": "," + } + ], + "auth_modal.password_reset_success.button.back_to_sign_in": [ + { + "type": 0, + "value": "Back to Sign In" + } + ], + "auth_modal.password_reset_success.info.will_email_shortly": [ + { + "type": 0, + "value": "You will receive an email at " + }, + { + "children": [ + { + "type": 1, + "value": "email" + } + ], + "type": 8, + "value": "b" + }, + { + "type": 0, + "value": " with a link to reset your password shortly." + } + ], + "auth_modal.password_reset_success.title.password_reset": [ + { + "type": 0, + "value": "Password Reset" + } + ], + "card_payment_form.heading.new_payment_method": [ + { + "type": 0, + "value": "Add New Payment Method" + } + ], + "cart.info.added_to_wishlist": [ + { + "type": 1, + "value": "quantity" + }, + { + "type": 0, + "value": " " + }, + { + "offset": 0, + "options": { + "one": { + "value": [ + { + "type": 0, + "value": "item" + } + ] + }, + "other": { + "value": [ + { + "type": 0, + "value": "items" + } + ] + } + }, + "pluralType": "cardinal", + "type": 6, + "value": "quantity" + }, + { + "type": 0, + "value": " added to wishlist" + } + ], + "cart.info.removed_from_cart": [ + { + "type": 0, + "value": "Item removed from cart" + } + ], + "cart.recommended_products.title.may_also_like": [ + { + "type": 0, + "value": "You May Also Like" + } + ], + "cart.recommended_products.title.recently_viewed": [ + { + "type": 0, + "value": "Recently Viewed" + } + ], + "cart_cta.link.checkout": [ + { + "type": 0, + "value": "Proceed to Checkout" + } + ], + "cart_secondary_button_group.action.added_to_wishlist": [ + { + "type": 0, + "value": "Add to Wishlist" + } + ], + "cart_secondary_button_group.action.edit": [ + { + "type": 0, + "value": "Edit" + } + ], + "cart_secondary_button_group.action.remove": [ + { + "type": 0, + "value": "Remove" + } + ], + "cart_secondary_button_group.label.this_is_gift": [ + { + "type": 0, + "value": "This is a gift." + } + ], + "cart_secondary_button_group.link_learn_more": [ + { + "type": 0, + "value": "Learn More" + } + ], + "cart_skeleton.heading.order_summary": [ + { + "type": 0, + "value": "Order Summary" + } + ], + "cart_skeleton.title.cart": [ + { + "type": 0, + "value": "Cart" + } + ], + "cart_title.title.cart_num_of_items": [ + { + "type": 0, + "value": "Cart (" + }, + { + "offset": 0, + "options": { + "=0": { + "value": [ + { + "type": 0, + "value": "0 items" + } + ] + }, + "one": { + "value": [ + { + "type": 7 + }, + { + "type": 0, + "value": " item" + } + ] + }, + "other": { + "value": [ + { + "type": 7 + }, + { + "type": 0, + "value": " items" + } + ] + } + }, + "pluralType": "cardinal", + "type": 6, + "value": "itemCount" + }, + { + "type": 0, + "value": ")" + } + ], + "cc_radio_group.action.remove": [ + { + "type": 0, + "value": "Remove" + } + ], + "cc_radio_group.button.add_new_card": [ + { + "type": 0, + "value": "Add New Card" + } + ], + "checkout.button.place_order": [ + { + "type": 0, + "value": "Place Order" + } + ], + "checkout_confirmation.button.create_account": [ + { + "type": 0, + "value": "Create Account" + } + ], + "checkout_confirmation.heading.billing_address": [ + { + "type": 0, + "value": "Billing Address" + } + ], + "checkout_confirmation.heading.create_account": [ + { + "type": 0, + "value": "Create an account for faster checkout" + } + ], + "checkout_confirmation.heading.credit_card": [ + { + "type": 0, + "value": "Credit Card" + } + ], + "checkout_confirmation.heading.delivery_details": [ + { + "type": 0, + "value": "Delivery Details" + } + ], + "checkout_confirmation.heading.order_summary": [ + { + "type": 0, + "value": "Order Summary" + } + ], + "checkout_confirmation.heading.payment_details": [ + { + "type": 0, + "value": "Payment Details" + } + ], + "checkout_confirmation.heading.shipping_address": [ + { + "type": 0, + "value": "Shipping Address" + } + ], + "checkout_confirmation.heading.shipping_method": [ + { + "type": 0, + "value": "Shipping Method" + } + ], + "checkout_confirmation.heading.thank_you_for_order": [ + { + "type": 0, + "value": "Thank you for your order!" + } + ], + "checkout_confirmation.label.free": [ + { + "type": 0, + "value": "Free" + } + ], + "checkout_confirmation.label.order_number": [ + { + "type": 0, + "value": "Order Number" + } + ], + "checkout_confirmation.label.order_total": [ + { + "type": 0, + "value": "Order Total" + } + ], + "checkout_confirmation.label.promo_applied": [ + { + "type": 0, + "value": "Promotion applied" + } + ], + "checkout_confirmation.label.shipping": [ + { + "type": 0, + "value": "Shipping" + } + ], + "checkout_confirmation.label.subtotal": [ + { + "type": 0, + "value": "Subtotal" + } + ], + "checkout_confirmation.label.tax": [ + { + "type": 0, + "value": "Tax" + } + ], + "checkout_confirmation.link.continue_shopping": [ + { + "type": 0, + "value": "Continue Shopping" + } + ], + "checkout_confirmation.link.login": [ + { + "type": 0, + "value": "Log in here" + } + ], + "checkout_confirmation.message.already_has_account": [ + { + "type": 0, + "value": "This email already has an account." + } + ], + "checkout_confirmation.message.num_of_items_in_order": [ + { + "offset": 0, + "options": { + "=0": { + "value": [ + { + "type": 0, + "value": "0 items" + } + ] + }, + "one": { + "value": [ + { + "type": 7 + }, + { + "type": 0, + "value": " item" + } + ] + }, + "other": { + "value": [ + { + "type": 7 + }, + { + "type": 0, + "value": " items" + } + ] + } + }, + "pluralType": "cardinal", + "type": 6, + "value": "itemCount" + } + ], + "checkout_confirmation.message.will_email_shortly": [ + { + "type": 0, + "value": "We will send an email to " + }, + { + "children": [ + { + "type": 1, + "value": "email" + } + ], + "type": 8, + "value": "b" + }, + { + "type": 0, + "value": " with your confirmation number and receipt shortly." + } + ], + "checkout_footer.link.privacy_policy": [ + { + "type": 0, + "value": "Privacy Policy" + } + ], + "checkout_footer.link.returns_exchanges": [ + { + "type": 0, + "value": "Returns & Exchanges" + } + ], + "checkout_footer.link.shipping": [ + { + "type": 0, + "value": "Shipping" + } + ], + "checkout_footer.link.site_map": [ + { + "type": 0, + "value": "Site Map" + } + ], + "checkout_footer.link.terms_conditions": [ + { + "type": 0, + "value": "Terms & Conditions" + } + ], + "checkout_footer.message.copyright": [ + { + "type": 0, + "value": "2021 Salesforce or its affiliates. All rights reserved. This is a demo store only. Orders made WILL NOT be processed." + } + ], + "checkout_header.link.cart": [ + { + "type": 0, + "value": "Back to cart" + } + ], + "checkout_payment.action.remove": [ + { + "type": 0, + "value": "Remove" + } + ], + "checkout_payment.button.review_order": [ + { + "type": 0, + "value": "Review Order" + } + ], + "checkout_payment.heading.billing_address": [ + { + "type": 0, + "value": "Billing Address" + } + ], + "checkout_payment.heading.credit_card": [ + { + "type": 0, + "value": "Credit Card" + } + ], + "checkout_payment.label.same_as_shipping": [ + { + "type": 0, + "value": "Same as shipping address" + } + ], + "checkout_payment.title.payment": [ + { + "type": 0, + "value": "Payment" + } + ], + "confirmation_modal.default.action.no": [ + { + "type": 0, + "value": "No" + } + ], + "confirmation_modal.default.action.yes": [ + { + "type": 0, + "value": "Yes" + } + ], + "confirmation_modal.default.message.you_want_to_continue": [ + { + "type": 0, + "value": "Are you sure you want to continue?" + } + ], + "confirmation_modal.default.title.confirm_action": [ + { + "type": 0, + "value": "Confirm Action" + } + ], + "confirmation_modal.remove_cart_item.action.no": [ + { + "type": 0, + "value": "No, keep item" + } + ], + "confirmation_modal.remove_cart_item.action.yes": [ + { + "type": 0, + "value": "Yes, remove item" + } + ], + "confirmation_modal.remove_cart_item.message.sure_to_remove": [ + { + "type": 0, + "value": "Are you sure you want to remove this item from your cart?" + } + ], + "confirmation_modal.remove_cart_item.title.confirm_remove": [ + { + "type": 0, + "value": "Confirm Remove Item" + } + ], + "confirmation_modal.remove_wishlist_item.action.no": [ + { + "type": 0, + "value": "No, keep item" + } + ], + "confirmation_modal.remove_wishlist_item.action.yes": [ + { + "type": 0, + "value": "Yes, remove item" + } + ], + "confirmation_modal.remove_wishlist_item.message.sure_to_remove": [ + { + "type": 0, + "value": "Are you sure you want to remove this item from your wishlist?" + } + ], + "confirmation_modal.remove_wishlist_item.title.confirm_remove": [ + { + "type": 0, + "value": "Confirm Remove Item" + } + ], + "contact_info.action.sign_out": [ + { + "type": 0, + "value": "Sign Out" + } + ], + "contact_info.button.already_have_account": [ + { + "type": 0, + "value": "Already have an account? Log in" + } + ], + "contact_info.button.checkout_as_guest": [ + { + "type": 0, + "value": "Checkout as Guest" + } + ], + "contact_info.button.login": [ + { + "type": 0, + "value": "Log In" + } + ], + "contact_info.error.incorrect_username_or_password": [ + { + "type": 0, + "value": "Incorrect username or password, please try again." + } + ], + "contact_info.link.forgot_password": [ + { + "type": 0, + "value": "Forgot password?" + } + ], + "contact_info.title.contact_info": [ + { + "type": 0, + "value": "Contact Info" + } + ], + "credit_card_fields.tool_tip.security_code": [ + { + "type": 0, + "value": "This " + }, + { + "type": 1, + "value": "length" + }, + { + "type": 0, + "value": "-digit code can be found on the " + }, + { + "type": 1, + "value": "side" + }, + { + "type": 0, + "value": " of your card." + } + ], + "drawer_menu.button.account_details": [ + { + "type": 0, + "value": "Account Details" + } + ], + "drawer_menu.button.addresses": [ + { + "type": 0, + "value": "Addresses" + } + ], + "drawer_menu.button.log_out": [ + { + "type": 0, + "value": "Log Out" + } + ], + "drawer_menu.button.my_account": [ + { + "type": 0, + "value": "My Account" + } + ], + "drawer_menu.button.order_history": [ + { + "type": 0, + "value": "Order History" + } + ], + "drawer_menu.button.payment_methods": [ + { + "type": 0, + "value": "Payment Methods" + } + ], + "drawer_menu.link.about_us": [ + { + "type": 0, + "value": "About Us" + } + ], + "drawer_menu.link.customer_support": [ + { + "type": 0, + "value": "Customer Support" + } + ], + "drawer_menu.link.customer_support.contact_us": [ + { + "type": 0, + "value": "Contact Us" + } + ], + "drawer_menu.link.customer_support.shipping_and_returns": [ + { + "type": 0, + "value": "Shipping & Returns" + } + ], + "drawer_menu.link.our_company": [ + { + "type": 0, + "value": "Our Company" + } + ], + "drawer_menu.link.privacy_and_security": [ + { + "type": 0, + "value": "Privacy & Security" + } + ], + "drawer_menu.link.privacy_policy": [ + { + "type": 0, + "value": "Privacy Policy" + } + ], + "drawer_menu.link.shop_all": [ + { + "type": 0, + "value": "Shop All" + } + ], + "drawer_menu.link.sign_in": [ + { + "type": 0, + "value": "Sign In" + } + ], + "drawer_menu.link.site_map": [ + { + "type": 0, + "value": "Site Map" + } + ], + "drawer_menu.link.store_locator": [ + { + "type": 0, + "value": "Store Locator" + } + ], + "drawer_menu.link.terms_and_conditions": [ + { + "type": 0, + "value": "Terms & Conditions" + } + ], + "empty_cart.description.empty_cart": [ + { + "type": 0, + "value": "Your cart is empty." + } + ], + "empty_cart.link.continue_shopping": [ + { + "type": 0, + "value": "Continue Shopping" + } + ], + "empty_cart.link.sign_in": [ + { + "type": 0, + "value": "Sign In" + } + ], + "empty_cart.message.continue_shopping": [ + { + "type": 0, + "value": "Continue shopping to add items to your cart." + } + ], + "empty_cart.message.sign_in_or_continue_shopping": [ + { + "type": 0, + "value": "Sign in to retrieve your saved items or continue shopping." + } + ], + "empty_search_results.info.cant_find_anything_for_category": [ + { + "type": 0, + "value": "We couldn’t find anything for " + }, + { + "type": 1, + "value": "category" + }, + { + "type": 0, + "value": ". Try searching for a product or " + }, + { + "type": 1, + "value": "link" + }, + { + "type": 0, + "value": "." + } + ], + "empty_search_results.info.cant_find_anything_for_query": [ + { + "type": 0, + "value": "We couldn’t find anything for \"" + }, + { + "type": 1, + "value": "searchQuery" + }, + { + "type": 0, + "value": "\"." + } + ], + "empty_search_results.info.double_check_spelling": [ + { + "type": 0, + "value": "Double-check your spelling and try again or " + }, + { + "type": 1, + "value": "link" + }, + { + "type": 0, + "value": "." + } + ], + "empty_search_results.link.contact_us": [ + { + "type": 0, + "value": "Contact Us" + } + ], + "empty_search_results.recommended_products.title.most_viewed": [ + { + "type": 0, + "value": "Most Viewed" + } + ], + "empty_search_results.recommended_products.title.top_sellers": [ + { + "type": 0, + "value": "Top Sellers" + } + ], + "footer.column.account": [ + { + "type": 0, + "value": "Account" + } + ], + "footer.column.customer_support": [ + { + "type": 0, + "value": "Customer Support" + } + ], + "footer.column.our_company": [ + { + "type": 0, + "value": "Our Company" + } + ], + "footer.link.about_us": [ + { + "type": 0, + "value": "About Us" + } + ], + "footer.link.contact_us": [ + { + "type": 0, + "value": "Contact Us" + } + ], + "footer.link.order_status": [ + { + "type": 0, + "value": "Order Status" + } + ], + "footer.link.privacy_policy": [ + { + "type": 0, + "value": "Privacy Policy" + } + ], + "footer.link.shipping": [ + { + "type": 0, + "value": "Shipping" + } + ], + "footer.link.signin_create_account": [ + { + "type": 0, + "value": "Sign in or create account" + } + ], + "footer.link.site_map": [ + { + "type": 0, + "value": "Site Map" + } + ], + "footer.link.store_locator": [ + { + "type": 0, + "value": "Store Locator" + } + ], + "footer.link.terms_conditions": [ + { + "type": 0, + "value": "Terms & Conditions" + } + ], + "footer.message.copyright": [ + { + "type": 0, + "value": "2021 Salesforce or its affiliates. All rights reserved. This is a demo store only. Orders made WILL NOT be processed." + } + ], + "footer.subscribe.button.sign_up": [ + { + "type": 0, + "value": "Sign Up" + } + ], + "footer.subscribe.description.sign_up": [ + { + "type": 0, + "value": "Sign up to stay in the loop about the hottest deals" + } + ], + "footer.subscribe.heading.first_to_know": [ + { + "type": 0, + "value": "Be the first to know" + } + ], + "form_action_buttons.button.cancel": [ + { + "type": 0, + "value": "Cancel" + } + ], + "form_action_buttons.button.save": [ + { + "type": 0, + "value": "Save" + } + ], + "global.account.link.account_details": [ + { + "type": 0, + "value": "Account Details" + } + ], + "global.account.link.addresses": [ + { + "type": 0, + "value": "Addresses" + } + ], + "global.account.link.order_history": [ + { + "type": 0, + "value": "Order History" + } + ], + "global.account.link.payment_methods": [ + { + "type": 0, + "value": "Payment Methods" + } + ], + "global.account.link.wishlist": [ + { + "type": 0, + "value": "Wishlist" + } + ], + "global.error.something_went_wrong": [ + { + "type": 0, + "value": "Something went wrong. Try again!" + } + ], + "header.button.assistive_msg.logo": [ + { + "type": 0, + "value": "Logo" + } + ], + "header.button.assistive_msg.menu": [ + { + "type": 0, + "value": "Menu" + } + ], + "header.button.assistive_msg.my_account": [ + { + "type": 0, + "value": "My account" + } + ], + "header.button.assistive_msg.my_cart": [ + { + "type": 0, + "value": "My cart" + } + ], + "header.button.assistive_msg.wishlist": [ + { + "type": 0, + "value": "Wishlist" + } + ], + "header.field.placeholder.search_for_products": [ + { + "type": 0, + "value": "Search for products..." + } + ], + "header.popover.action.log_out": [ + { + "type": 0, + "value": "Log out" + } + ], + "header.popover.title.my_account": [ + { + "type": 0, + "value": "My Account" + } + ], + "home.description.contact_our_staff": [ + { + "type": 0, + "value": "Contact our support staff." + } + ], + "home.description.features": [ + { + "type": 0, + "value": "Out-of-the-box features so that you focus only on adding enhancements." + } + ], + "home.description.get_you_to_the_right_place": [ + { + "type": 0, + "value": "They will get you to the right place." + } + ], + "home.description.shop_products": [ + { + "type": 0, + "value": "This section contains content from the catalog. " + }, + { + "type": 1, + "value": "docLink" + }, + { + "type": 0, + "value": " on how to replace it." + } + ], + "home.features.description.cart_checkout": [ + { + "type": 0, + "value": "Ecommerce best practice for a shopper's cart and checkout experience." + } + ], + "home.features.description.components": [ + { + "type": 0, + "value": "Built using Chakra UI, a simple, modular and accessible React component library." + } + ], + "home.features.description.einstein_recommendations": [ + { + "type": 0, + "value": "Deliver the next best product or offer to every shopper through product recommendations." + } + ], + "home.features.description.my_account": [ + { + "type": 0, + "value": "Shoppers can manage account information such as their profile, addresses, payments and orders." + } + ], + "home.features.description.shopper_login": [ + { + "type": 0, + "value": "Enable shoppers to easily log in with a more personalized shopping experience." + } + ], + "home.features.description.wishlist": [ + { + "type": 0, + "value": "Registered shoppers can add product items to their wishlist from purchasing later." + } + ], + "home.features.heading.cart_checkout": [ + { + "type": 0, + "value": "Cart & Checkout" + } + ], + "home.features.heading.components": [ + { + "type": 0, + "value": "Components & Design Kit" + } + ], + "home.features.heading.einstein_recommendations": [ + { + "type": 0, + "value": "Einstein Recommendations" + } + ], + "home.features.heading.my_account": [ + { + "type": 0, + "value": "My Account" + } + ], + "home.features.heading.shopper_login": [ + { + "type": 0, + "value": "Shopper Login and API Access Service" + } + ], + "home.features.heading.wishlist": [ + { + "type": 0, + "value": "Wishlist" + } + ], + "home.heading.features": [ + { + "type": 0, + "value": "Features" + } + ], + "home.heading.here_to_help": [ + { + "type": 0, + "value": "We're here to help" + } + ], + "home.heading.shop_products": [ + { + "type": 0, + "value": "Shop Products" + } + ], + "home.hero_features.link.design_kit": [ + { + "type": 0, + "value": "Create with the Figma PWA Design Kit" + } + ], + "home.hero_features.link.on_github": [ + { + "type": 0, + "value": "Download on Github" + } + ], + "home.hero_features.link.on_managed_runtime": [ + { + "type": 0, + "value": "Deploy on Managed Runtime" + } + ], + "home.link.contact_us": [ + { + "type": 0, + "value": "Contact Us" + } + ], + "home.link.get_started": [ + { + "type": 0, + "value": "Get started" + } + ], + "home.link.read_docs": [ + { + "type": 0, + "value": "Read docs" + } + ], + "home.title.react_starter_store": [ + { + "type": 0, + "value": "The React PWA Starter Store for Retail" + } + ], + "item_attributes.label.promotions": [ + { + "type": 0, + "value": "Promotions" + } + ], + "item_attributes.label.quantity": [ + { + "type": 0, + "value": "Quantity: " + }, + { + "type": 1, + "value": "quantity" + } + ], + "item_image.label.sale": [ + { + "type": 0, + "value": "Sale" + } + ], + "lCPCxk": [ + { + "type": 0, + "value": "Please select all your options above" + } + ], + "locale_text.message.ar-SA": [ + { + "type": 0, + "value": "Arabic (Saudi Arabia)" + } + ], + "locale_text.message.bn-BD": [ + { + "type": 0, + "value": "Bangla (Bangladesh)" + } + ], + "locale_text.message.bn-IN": [ + { + "type": 0, + "value": "Bangla (India)" + } + ], + "locale_text.message.cs-CZ": [ + { + "type": 0, + "value": "Czech (Czech Republic)" + } + ], + "locale_text.message.da-DK": [ + { + "type": 0, + "value": "Danish (Denmark)" + } + ], + "locale_text.message.de-AT": [ + { + "type": 0, + "value": "German (Austria)" + } + ], + "locale_text.message.de-CH": [ + { + "type": 0, + "value": "German (Switzerland)" + } + ], + "locale_text.message.de-DE": [ + { + "type": 0, + "value": "German (Germany)" + } + ], + "locale_text.message.el-GR": [ + { + "type": 0, + "value": "Greek (Greece)" + } + ], + "locale_text.message.en-AU": [ + { + "type": 0, + "value": "English (Australia)" + } + ], + "locale_text.message.en-CA": [ + { + "type": 0, + "value": "English (Canada)" + } + ], + "locale_text.message.en-GB": [ + { + "type": 0, + "value": "English (United Kingdom)" + } + ], + "locale_text.message.en-IE": [ + { + "type": 0, + "value": "English (Ireland)" + } + ], + "locale_text.message.en-IN": [ + { + "type": 0, + "value": "English (India)" + } + ], + "locale_text.message.en-NZ": [ + { + "type": 0, + "value": "English (New Zealand)" + } + ], + "locale_text.message.en-US": [ + { + "type": 0, + "value": "English (United States)" + } + ], + "locale_text.message.en-ZA": [ + { + "type": 0, + "value": "English (South Africa)" + } + ], + "locale_text.message.es-AR": [ + { + "type": 0, + "value": "Spanish (Argentina)" + } + ], + "locale_text.message.es-CL": [ + { + "type": 0, + "value": "Spanish (Chile)" + } + ], + "locale_text.message.es-CO": [ + { + "type": 0, + "value": "Spanish (Columbia)" + } + ], + "locale_text.message.es-ES": [ + { + "type": 0, + "value": "Spanish (Spain)" + } + ], + "locale_text.message.es-MX": [ + { + "type": 0, + "value": "Spanish (Mexico)" + } + ], + "locale_text.message.es-US": [ + { + "type": 0, + "value": "Spanish (United States)" + } + ], + "locale_text.message.fi-FI": [ + { + "type": 0, + "value": "Finnish (Finland)" + } + ], + "locale_text.message.fr-BE": [ + { + "type": 0, + "value": "French (Belgium)" + } + ], + "locale_text.message.fr-CA": [ + { + "type": 0, + "value": "French (Canada)" + } + ], + "locale_text.message.fr-CH": [ + { + "type": 0, + "value": "French (Switzerland)" + } + ], + "locale_text.message.fr-FR": [ + { + "type": 0, + "value": "French (France)" + } + ], + "locale_text.message.he-IL": [ + { + "type": 0, + "value": "Hebrew (Israel)" + } + ], + "locale_text.message.hi-IN": [ + { + "type": 0, + "value": "Hindi (India)" + } + ], + "locale_text.message.hu-HU": [ + { + "type": 0, + "value": "Hungarian (Hungary)" + } + ], + "locale_text.message.id-ID": [ + { + "type": 0, + "value": "Indonesian (Indonesia)" + } + ], + "locale_text.message.it-CH": [ + { + "type": 0, + "value": "Italian (Switzerland)" + } + ], + "locale_text.message.it-IT": [ + { + "type": 0, + "value": "Italian (Italy)" + } + ], + "locale_text.message.ja-JP": [ + { + "type": 0, + "value": "Japanese (Japan)" + } + ], + "locale_text.message.ko-KR": [ + { + "type": 0, + "value": "Korean (Republic of Korea)" + } + ], + "locale_text.message.nl-BE": [ + { + "type": 0, + "value": "Dutch (Belgium)" + } + ], + "locale_text.message.nl-NL": [ + { + "type": 0, + "value": "Dutch (The Netherlands)" + } + ], + "locale_text.message.no-NO": [ + { + "type": 0, + "value": "Norwegian (Norway)" + } + ], + "locale_text.message.pl-PL": [ + { + "type": 0, + "value": "Polish (Poland)" + } + ], + "locale_text.message.pt-BR": [ + { + "type": 0, + "value": "Portuguese (Brazil)" + } + ], + "locale_text.message.pt-PT": [ + { + "type": 0, + "value": "Portuguese (Portugal)" + } + ], + "locale_text.message.ro-RO": [ + { + "type": 0, + "value": "Romanian (Romania)" + } + ], + "locale_text.message.ru-RU": [ + { + "type": 0, + "value": "Russian (Russian Federation)" + } + ], + "locale_text.message.sk-SK": [ + { + "type": 0, + "value": "Slovak (Slovakia)" + } + ], + "locale_text.message.sv-SE": [ + { + "type": 0, + "value": "Swedish (Sweden)" + } + ], + "locale_text.message.ta-IN": [ + { + "type": 0, + "value": "Tamil (India)" + } + ], + "locale_text.message.ta-LK": [ + { + "type": 0, + "value": "Tamil (Sri Lanka)" + } + ], + "locale_text.message.th-TH": [ + { + "type": 0, + "value": "Thai (Thailand)" + } + ], + "locale_text.message.tr-TR": [ + { + "type": 0, + "value": "Turkish (Turkey)" + } + ], + "locale_text.message.zh-CN": [ + { + "type": 0, + "value": "Chinese (China)" + } + ], + "locale_text.message.zh-HK": [ + { + "type": 0, + "value": "Chinese (Hong Kong)" + } + ], + "locale_text.message.zh-TW": [ + { + "type": 0, + "value": "Chinese (Taiwan)" + } + ], + "login_form.action.create_account": [ + { + "type": 0, + "value": "Create account" + } + ], + "login_form.button.sign_in": [ + { + "type": 0, + "value": "Sign In" + } + ], + "login_form.link.forgot_password": [ + { + "type": 0, + "value": "Forgot password?" + } + ], + "login_form.message.dont_have_account": [ + { + "type": 0, + "value": "Don't have an account?" + } + ], + "login_form.message.welcome_back": [ + { + "type": 0, + "value": "Welcome Back" + } + ], + "login_page.error.incorrect_username_or_password": [ + { + "type": 0, + "value": "Incorrect username or password, please try again." + } + ], + "offline_banner.description.browsing_offline_mode": [ + { + "type": 0, + "value": "You're currently browsing in offline mode" + } + ], + "order_summary.action.remove_promo": [ + { + "type": 0, + "value": "Remove" + } + ], + "order_summary.cart_items.action.num_of_items_in_cart": [ + { + "offset": 0, + "options": { + "=0": { + "value": [ + { + "type": 0, + "value": "0 items" + } + ] + }, + "one": { + "value": [ + { + "type": 7 + }, + { + "type": 0, + "value": " item" + } + ] + }, + "other": { + "value": [ + { + "type": 7 + }, + { + "type": 0, + "value": " items" + } + ] + } + }, + "pluralType": "cardinal", + "type": 6, + "value": "itemCount" + }, + { + "type": 0, + "value": " in cart" + } + ], + "order_summary.cart_items.link.edit_cart": [ + { + "type": 0, + "value": "Edit cart" + } + ], + "order_summary.heading.order_summary": [ + { + "type": 0, + "value": "Order Summary" + } + ], + "order_summary.label.estimated_total": [ + { + "type": 0, + "value": "Estimated Total" + } + ], + "order_summary.label.free": [ + { + "type": 0, + "value": "Free" + } + ], + "order_summary.label.order_total": [ + { + "type": 0, + "value": "Order Total" + } + ], + "order_summary.label.promo_applied": [ + { + "type": 0, + "value": "Promotion applied" + } + ], + "order_summary.label.promotions_applied": [ + { + "type": 0, + "value": "Promotions applied" + } + ], + "order_summary.label.shipping": [ + { + "type": 0, + "value": "Shipping" + } + ], + "order_summary.label.subtotal": [ + { + "type": 0, + "value": "Subtotal" + } + ], + "order_summary.label.tax": [ + { + "type": 0, + "value": "Tax" + } + ], + "page_not_found.action.go_back": [ + { + "type": 0, + "value": "Back to previous page" + } + ], + "page_not_found.link.homepage": [ + { + "type": 0, + "value": "Go to home page" + } + ], + "page_not_found.message.suggestion_to_try": [ + { + "type": 0, + "value": "Please try retyping the address, going back to the previous page, or going to the home page." + } + ], + "page_not_found.title.page_cant_be_found": [ + { + "type": 0, + "value": "The page you're looking for can't be found." + } + ], + "pagination.field.num_of_pages": [ + { + "type": 0, + "value": "of " + }, + { + "type": 1, + "value": "numOfPages" + } + ], + "pagination.link.next": [ + { + "type": 0, + "value": "Next" + } + ], + "pagination.link.prev": [ + { + "type": 0, + "value": "Prev" + } + ], + "password_card.info.password_updated": [ + { + "type": 0, + "value": "Password updated" + } + ], + "password_card.label.password": [ + { + "type": 0, + "value": "Password" + } + ], + "password_card.title.password": [ + { + "type": 0, + "value": "Password" + } + ], + "password_requirements.error.eight_letter_minimum": [ + { + "type": 0, + "value": "8 characters minimum" + } + ], + "password_requirements.error.one_lowercase_letter": [ + { + "type": 0, + "value": "1 lowercase letter" + } + ], + "password_requirements.error.one_number": [ + { + "type": 0, + "value": "1 number" + } + ], + "password_requirements.error.one_special_character": [ + { + "type": 0, + "value": "1 special character (example: , S ! % #)" + } + ], + "password_requirements.error.one_uppercase_letter": [ + { + "type": 0, + "value": "1 uppercase letter" + } + ], + "payment_selection.button.save_and_continue": [ + { + "type": 0, + "value": "Save & Continue" + } + ], + "payment_selection.heading.add_new_card": [ + { + "type": 0, + "value": "Add New Card" + } + ], + "payment_selection.heading.credit_card": [ + { + "type": 0, + "value": "Credit Card" + } + ], + "payment_selection.message.select_payment_method": [ + { + "type": 0, + "value": "Please select a payment method." + } + ], + "payment_selection.tooltip.secure_payment": [ + { + "type": 0, + "value": "This is a secure SSL encrypted payment." + } + ], + "price_per_item.label.each": [ + { + "type": 0, + "value": "ea" + } + ], + "product_detail.accordion.button.product_detail": [ + { + "type": 0, + "value": "Product Detail" + } + ], + "product_detail.accordion.button.questions": [ + { + "type": 0, + "value": "Questions" + } + ], + "product_detail.accordion.button.reviews": [ + { + "type": 0, + "value": "Reviews" + } + ], + "product_detail.accordion.button.size_fit": [ + { + "type": 0, + "value": "Size & Fit" + } + ], + "product_detail.accordion.message.coming_soon": [ + { + "type": 0, + "value": "Coming Soon" + } + ], + "product_detail.info.added_to_wishlist": [ + { + "type": 1, + "value": "quantity" + }, + { + "type": 0, + "value": " " + }, + { + "offset": 0, + "options": { + "one": { + "value": [ + { + "type": 0, + "value": "item" + } + ] + }, + "other": { + "value": [ + { + "type": 0, + "value": "items" + } + ] + } + }, + "pluralType": "cardinal", + "type": 6, + "value": "quantity" + }, + { + "type": 0, + "value": " added to wishlist" + } + ], + "product_detail.recommended_products.title.complete_set": [ + { + "type": 0, + "value": "Complete the Set" + } + ], + "product_detail.recommended_products.title.might_also_like": [ + { + "type": 0, + "value": "You might also like" + } + ], + "product_detail.recommended_products.title.recently_viewed": [ + { + "type": 0, + "value": "Recently Viewed" + } + ], + "product_item.label.quantity": [ + { + "type": 0, + "value": "Quantity:" + } + ], + "product_list.button.filter": [ + { + "type": 0, + "value": "Filter" + } + ], + "product_list.button.sort_by": [ + { + "type": 0, + "value": "Sort By: " + }, + { + "type": 1, + "value": "sortOption" + } + ], + "product_list.drawer.title.sort_by": [ + { + "type": 0, + "value": "Sort By" + } + ], + "product_list.info.added_to_wishlist": [ + { + "type": 1, + "value": "quantity" + }, + { + "type": 0, + "value": " " + }, + { + "offset": 0, + "options": { + "one": { + "value": [ + { + "type": 0, + "value": "item" + } + ] + }, + "other": { + "value": [ + { + "type": 0, + "value": "items" + } + ] + } + }, + "pluralType": "cardinal", + "type": 6, + "value": "quantity" + }, + { + "type": 0, + "value": " added to wishlist" + } + ], + "product_list.info.removed_from_wishlist": [ + { + "type": 0, + "value": "Item removed from wishlist" + } + ], + "product_list.modal.button.clear_filters": [ + { + "type": 0, + "value": "Clear Filters" + } + ], + "product_list.modal.button.view_items": [ + { + "type": 0, + "value": "View " + }, + { + "type": 1, + "value": "prroductCount" + }, + { + "type": 0, + "value": " items" + } + ], + "product_list.modal.title.filter": [ + { + "type": 0, + "value": "Filter" + } + ], + "product_list.select.sort_by": [ + { + "type": 0, + "value": "Sort By: " + }, + { + "type": 1, + "value": "sortOption" + } + ], + "product_tile.assistive_msg.wishlist": [ + { + "type": 0, + "value": "Wishlist" + } + ], + "product_view.button.add_to_cart": [ + { + "type": 0, + "value": "Add to Cart" + } + ], + "product_view.button.add_to_wishlist": [ + { + "type": 0, + "value": "Add to Wishlist" + } + ], + "product_view.button.update": [ + { + "type": 0, + "value": "Update" + } + ], + "product_view.label.quantity": [ + { + "type": 0, + "value": "Quantity" + } + ], + "product_view.link.full_details": [ + { + "type": 0, + "value": "See full details" + } + ], + "profile_card.info.profile_updated": [ + { + "type": 0, + "value": "Profile updated" + } + ], + "profile_card.label.email": [ + { + "type": 0, + "value": "Email" + } + ], + "profile_card.label.full_name": [ + { + "type": 0, + "value": "Full Name" + } + ], + "profile_card.label.phone": [ + { + "type": 0, + "value": "Phone Number" + } + ], + "profile_card.message.not_provided": [ + { + "type": 0, + "value": "Not provided" + } + ], + "profile_card.title.my_profile": [ + { + "type": 0, + "value": "My Profile" + } + ], + "promo_code_fields.button.apply": [ + { + "type": 0, + "value": "Apply" + } + ], + "promo_popover.heading.promo_applied": [ + { + "type": 0, + "value": "Promotions Applied" + } + ], + "promocode.accordion.button.have_promocode": [ + { + "type": 0, + "value": "Do you have a promo code?" + } + ], + "recent_searches.action.clear_searches": [ + { + "type": 0, + "value": "Clear recent searches" + } + ], + "recent_searches.heading.recent_searches": [ + { + "type": 0, + "value": "Recent Searches" + } + ], + "recommended_products.info.added_to_wishlist": [ + { + "type": 1, + "value": "quantity" + }, + { + "type": 0, + "value": " " + }, + { + "offset": 0, + "options": { + "one": { + "value": [ + { + "type": 0, + "value": "item" + } + ] + }, + "other": { + "value": [ + { + "type": 0, + "value": "items" + } + ] + } + }, + "pluralType": "cardinal", + "type": 6, + "value": "quantity" + }, + { + "type": 0, + "value": " added to wishlist" + } + ], + "recommended_products.info.removed_from_wishlist": [ + { + "type": 0, + "value": "Item removed from wishlist" + } + ], + "register_form.action.sign_in": [ + { + "type": 0, + "value": "Sign in" + } + ], + "register_form.button.create_account": [ + { + "type": 0, + "value": "Create Account" + } + ], + "register_form.heading.lets_get_started": [ + { + "type": 0, + "value": "Let's get started!" + } + ], + "register_form.message.agree_to_policy_terms": [ + { + "type": 0, + "value": "By creating an account, you agree to Salesforce " + }, + { + "children": [ + { + "type": 0, + "value": "Privacy Policy" + } + ], + "type": 8, + "value": "policy" + }, + { + "type": 0, + "value": " and " + }, + { + "children": [ + { + "type": 0, + "value": "Terms & Conditions" + } + ], + "type": 8, + "value": "terms" + } + ], + "register_form.message.already_have_account": [ + { + "type": 0, + "value": "Already have an account?" + } + ], + "register_form.message.create_an_account": [ + { + "type": 0, + "value": "Create an account and get first access to the very best products, inspiration and community." + } + ], + "reset_password.button.back_to_sign_in": [ + { + "type": 0, + "value": "Back to Sign In" + } + ], + "reset_password.info.receive_email_shortly": [ + { + "type": 0, + "value": "You will receive an email at " + }, + { + "children": [ + { + "type": 1, + "value": "email" + } + ], + "type": 8, + "value": "b" + }, + { + "type": 0, + "value": " with a link to reset your password shortly." + } + ], + "reset_password.title.password_reset": [ + { + "type": 0, + "value": "Password Reset" + } + ], + "reset_password_form.action.sign_in": [ + { + "type": 0, + "value": "Sign in" + } + ], + "reset_password_form.button.reset_password": [ + { + "type": 0, + "value": "Reset Password" + } + ], + "reset_password_form.message.enter_your_email": [ + { + "type": 0, + "value": "Enter your email to receive instructions on how to reset your password" + } + ], + "reset_password_form.message.return_to_sign_in": [ + { + "type": 0, + "value": "Or return to" + } + ], + "reset_password_form.title.reset_password": [ + { + "type": 0, + "value": "Reset Password" + } + ], + "search.action.cancel": [ + { + "type": 0, + "value": "Cancel" + } + ], + "selected_refinements.action.clear_all": [ + { + "type": 0, + "value": "Clear All" + } + ], + "shipping_address.button.continue_to_shipping": [ + { + "type": 0, + "value": "Continue to Shipping Method" + } + ], + "shipping_address.title.shipping_address": [ + { + "type": 0, + "value": "Shipping Address" + } + ], + "shipping_address_edit_form.button.save_and_continue": [ + { + "type": 0, + "value": "Save & Continue to Shipping Method" + } + ], + "shipping_address_form.heading.edit_address": [ + { + "type": 0, + "value": "Edit Address" + } + ], + "shipping_address_form.heading.new_address": [ + { + "type": 0, + "value": "Add New Address" + } + ], + "shipping_address_selection.button.add_address": [ + { + "type": 0, + "value": "Add New Address" + } + ], + "shipping_address_selection.button.submit": [ + { + "type": 0, + "value": "Submit" + } + ], + "shipping_address_selection.title.add_address": [ + { + "type": 0, + "value": "Add New Address" + } + ], + "shipping_address_selection.title.edit_shipping": [ + { + "type": 0, + "value": "Edit Shipping Address" + } + ], + "shipping_options.action.send_as_a_gift": [ + { + "type": 0, + "value": "Do you want to send this as a gift?" + } + ], + "shipping_options.button.continue_to_payment": [ + { + "type": 0, + "value": "Continue to Payment" + } + ], + "shipping_options.title.shipping_gift_options": [ + { + "type": 0, + "value": "Shipping & Gift Options" + } + ], + "signout_confirmation_dialog.button.cancel": [ + { + "type": 0, + "value": "Cancel" + } + ], + "signout_confirmation_dialog.button.sign_out": [ + { + "type": 0, + "value": "Sign Out" + } + ], + "signout_confirmation_dialog.heading.sign_out": [ + { + "type": 0, + "value": "Sign Out" + } + ], + "signout_confirmation_dialog.message.sure_to_sign_out": [ + { + "type": 0, + "value": "Are you sure you want to sign out? You will need to sign back in to proceed with your current order." + } + ], + "toggle_card.action.edit": [ + { + "type": 0, + "value": "Edit" + } + ], + "update_password_fields.button.forgot_password": [ + { + "type": 0, + "value": "Forgot Password?" + } + ], + "use_address_fields.error.please_enter_first_name": [ + { + "type": 0, + "value": "Please enter your first name." + } + ], + "use_address_fields.error.please_enter_last_name": [ + { + "type": 0, + "value": "Please enter your last name." + } + ], + "use_address_fields.error.please_enter_phone_number": [ + { + "type": 0, + "value": "Please enter your phone number." + } + ], + "use_address_fields.error.please_enter_your_postal_or_zip": [ + { + "type": 0, + "value": "Please enter your " + }, + { + "type": 1, + "value": "postalOrZip" + }, + { + "type": 0, + "value": "." + } + ], + "use_address_fields.error.please_select_your_address": [ + { + "type": 0, + "value": "Please enter your address." + } + ], + "use_address_fields.error.please_select_your_city": [ + { + "type": 0, + "value": "Please enter your city." + } + ], + "use_address_fields.error.please_select_your_country": [ + { + "type": 0, + "value": "Please select your country." + } + ], + "use_address_fields.error.please_select_your_state_or_province": [ + { + "type": 0, + "value": "Please select your " + }, + { + "type": 1, + "value": "stateOrProvince" + }, + { + "type": 0, + "value": "." + } + ], + "use_address_fields.error.required": [ + { + "type": 0, + "value": "Required" + } + ], + "use_address_fields.error.state_code_invalid": [ + { + "type": 0, + "value": "Please enter 2-letter state/province." + } + ], + "use_address_fields.label.address": [ + { + "type": 0, + "value": "Address" + } + ], + "use_address_fields.label.city": [ + { + "type": 0, + "value": "City" + } + ], + "use_address_fields.label.country": [ + { + "type": 0, + "value": "Country" + } + ], + "use_address_fields.label.first_name": [ + { + "type": 0, + "value": "First Name" + } + ], + "use_address_fields.label.last_name": [ + { + "type": 0, + "value": "Last Name" + } + ], + "use_address_fields.label.phone": [ + { + "type": 0, + "value": "Phone" + } + ], + "use_address_fields.label.postal_code": [ + { + "type": 0, + "value": "Postal Code" + } + ], + "use_address_fields.label.preferred": [ + { + "type": 0, + "value": "Set as default" + } + ], + "use_address_fields.label.province": [ + { + "type": 0, + "value": "Province" + } + ], + "use_address_fields.label.state": [ + { + "type": 0, + "value": "State" + } + ], + "use_address_fields.label.zipCode": [ + { + "type": 0, + "value": "Zip Code" + } + ], + "use_credit_card_fields.error.required": [ + { + "type": 0, + "value": "Required" + } + ], + "use_credit_card_fields.error.required_card_number": [ + { + "type": 0, + "value": "Please enter your card number." + } + ], + "use_credit_card_fields.error.required_expiry": [ + { + "type": 0, + "value": "Please enter your expiration date." + } + ], + "use_credit_card_fields.error.required_name": [ + { + "type": 0, + "value": "Please enter your name as shown on your card." + } + ], + "use_credit_card_fields.error.required_security_code": [ + { + "type": 0, + "value": "Please enter your security code." + } + ], + "use_credit_card_fields.error.valid_card_number": [ + { + "type": 0, + "value": "Please enter a valid card number." + } + ], + "use_credit_card_fields.error.valid_date": [ + { + "type": 0, + "value": "Please enter a valid date." + } + ], + "use_credit_card_fields.error.valid_name": [ + { + "type": 0, + "value": "Please enter a valid name." + } + ], + "use_credit_card_fields.error.valid_security_code": [ + { + "type": 0, + "value": "Please enter a valid security code." + } + ], + "use_credit_card_fields.label.card_number": [ + { + "type": 0, + "value": "Card Number" + } + ], + "use_credit_card_fields.label.card_type": [ + { + "type": 0, + "value": "Card Type" + } + ], + "use_credit_card_fields.label.expiry": [ + { + "type": 0, + "value": "Expiration Date" + } + ], + "use_credit_card_fields.label.name": [ + { + "type": 0, + "value": "Name on Card" + } + ], + "use_credit_card_fields.label.security_code": [ + { + "type": 0, + "value": "Security Code" + } + ], + "use_login_fields.error.required_email": [ + { + "type": 0, + "value": "Please enter your email address." + } + ], + "use_login_fields.error.required_password": [ + { + "type": 0, + "value": "Please enter your password." + } + ], + "use_login_fields.label.email": [ + { + "type": 0, + "value": "Email" + } + ], + "use_login_fields.label.password": [ + { + "type": 0, + "value": "Password" + } + ], + "use_product.message.inventory_remaining": [ + { + "type": 0, + "value": "Only " + }, + { + "type": 1, + "value": "stockLevel" + }, + { + "type": 0, + "value": " left!" + } + ], + "use_product.message.out_of_stock": [ + { + "type": 0, + "value": "Out of stock" + } + ], + "use_profile_fields.error.required_email": [ + { + "type": 0, + "value": "Please enter a valid email address." + } + ], + "use_profile_fields.error.required_first_name": [ + { + "type": 0, + "value": "Please enter your first name." + } + ], + "use_profile_fields.error.required_last_name": [ + { + "type": 0, + "value": "Please enter your last name." + } + ], + "use_profile_fields.error.required_phone": [ + { + "type": 0, + "value": "Please enter your phone number." + } + ], + "use_profile_fields.label.email": [ + { + "type": 0, + "value": "Email" + } + ], + "use_profile_fields.label.first_name": [ + { + "type": 0, + "value": "First Name" + } + ], + "use_profile_fields.label.last_name": [ + { + "type": 0, + "value": "Last Name" + } + ], + "use_profile_fields.label.phone": [ + { + "type": 0, + "value": "Phone Number" + } + ], + "use_promo_code_fields.error.required_promo_code": [ + { + "type": 0, + "value": "Please provide a valid promo code." + } + ], + "use_promo_code_fields.label.promo_code": [ + { + "type": 0, + "value": "Promo Code" + } + ], + "use_promocode.error.check_the_code": [ + { + "type": 0, + "value": "Check the code and try again, it may already be applied or the promo has expired." + } + ], + "use_promocode.info.promo_applied": [ + { + "type": 0, + "value": "Promotion applied" + } + ], + "use_promocode.info.promo_removed": [ + { + "type": 0, + "value": "Promotion removed" + } + ], + "use_registration_fields.error.contain_number": [ + { + "type": 0, + "value": "Password must contain at least one number." + } + ], + "use_registration_fields.error.lowercase_letter": [ + { + "type": 0, + "value": "Password must contain at least one lowercase letter." + } + ], + "use_registration_fields.error.minimum_characters": [ + { + "type": 0, + "value": "Password must contain at least 8 characters." + } + ], + "use_registration_fields.error.required_email": [ + { + "type": 0, + "value": "Please enter a valid email address." + } + ], + "use_registration_fields.error.required_first_name": [ + { + "type": 0, + "value": "Please enter your first name." + } + ], + "use_registration_fields.error.required_last_name": [ + { + "type": 0, + "value": "Please enter your last name." + } + ], + "use_registration_fields.error.required_password": [ + { + "type": 0, + "value": "Please create a password." + } + ], + "use_registration_fields.error.special_character": [ + { + "type": 0, + "value": "Password must contain at least one special character." + } + ], + "use_registration_fields.error.uppercase_letter": [ + { + "type": 0, + "value": "Password must contain at least one uppercase letter." + } + ], + "use_registration_fields.label.email": [ + { + "type": 0, + "value": "Email" + } + ], + "use_registration_fields.label.first_name": [ + { + "type": 0, + "value": "First Name" + } + ], + "use_registration_fields.label.last_name": [ + { + "type": 0, + "value": "Last Name" + } + ], + "use_registration_fields.label.password": [ + { + "type": 0, + "value": "Password" + } + ], + "use_registration_fields.label.sign_up_to_emails": [ + { + "type": 0, + "value": "Sign me up for Salesforce emails (you can unsubscribe at any time)" + } + ], + "use_reset_password_fields.error.required_email": [ + { + "type": 0, + "value": "Please enter a valid email address." + } + ], + "use_reset_password_fields.label.email": [ + { + "type": 0, + "value": "Email" + } + ], + "use_update_password_fields.error.contain_number": [ + { + "type": 0, + "value": "Password must contain at least one number." + } + ], + "use_update_password_fields.error.lowercase_letter": [ + { + "type": 0, + "value": "Password must contain at least one lowercase letter." + } + ], + "use_update_password_fields.error.minimum_characters": [ + { + "type": 0, + "value": "Password must contain at least 8 characters." + } + ], + "use_update_password_fields.error.required_new_password": [ + { + "type": 0, + "value": "Please provide a new password." + } + ], + "use_update_password_fields.error.required_password": [ + { + "type": 0, + "value": "Please enter your password." + } + ], + "use_update_password_fields.error.special_character": [ + { + "type": 0, + "value": "Password must contain at least one special character." + } + ], + "use_update_password_fields.error.uppercase_letter": [ + { + "type": 0, + "value": "Password must contain at least one uppercase letter." + } + ], + "use_update_password_fields.label.current_password": [ + { + "type": 0, + "value": "Current Password" + } + ], + "use_update_password_fields.label.new_password": [ + { + "type": 0, + "value": "New Password" + } + ], + "wishlist_primary_action.info.added_to_cart": [ + { + "type": 1, + "value": "quantity" + }, + { + "type": 0, + "value": " " + }, + { + "offset": 0, + "options": { + "one": { + "value": [ + { + "type": 0, + "value": "item" + } + ] + }, + "other": { + "value": [ + { + "type": 0, + "value": "items" + } + ] + } + }, + "pluralType": "cardinal", + "type": 6, + "value": "quantity" + }, + { + "type": 0, + "value": " added to cart" + } + ], + "wishlist_secondary_button_group.action.remove": [ + { + "type": 0, + "value": "Remove" + } + ], + "wishlist_secondary_button_group.info.item_removed": [ + { + "type": 0, + "value": "Item removed from wishlist" + } + ], + "with_registration.info.please_sign_in": [ + { + "type": 0, + "value": "Please sign in to continue!" + } + ] +} \ No newline at end of file diff --git a/packages/pwa/app/translations/en-US.json b/packages/pwa/app/translations/en-US.json new file mode 100644 index 0000000000..f8968950d3 --- /dev/null +++ b/packages/pwa/app/translations/en-US.json @@ -0,0 +1,1413 @@ +{ + "account.accordion.button.my_account": { + "defaultMessage": "My Account" + }, + "account.heading.my_account": { + "defaultMessage": "My Account" + }, + "account.logout_button.button.log_out": { + "defaultMessage": "Log Out" + }, + "account_addresses.badge.default": { + "defaultMessage": "Default" + }, + "account_addresses.button.add_address": { + "defaultMessage": "Add Address" + }, + "account_addresses.info.address_updated": { + "defaultMessage": "Address updated" + }, + "account_addresses.info.new_address_saved": { + "defaultMessage": "New address saved" + }, + "account_addresses.page_action_placeholder.button.add_address": { + "defaultMessage": "Add Address" + }, + "account_addresses.page_action_placeholder.heading.no_saved_addresses": { + "defaultMessage": "No Saved Addresses" + }, + "account_addresses.page_action_placeholder.message.add_new_address": { + "defaultMessage": "Add a new address method for faster checkout." + }, + "account_addresses.title.addresses": { + "defaultMessage": "Addresses" + }, + "account_detail.title.account_details": { + "defaultMessage": "Account Details" + }, + "account_order_detail.heading.billing_address": { + "defaultMessage": "Billing Address" + }, + "account_order_detail.heading.num_of_items": { + "defaultMessage": "{count} items" + }, + "account_order_detail.heading.payment_method": { + "defaultMessage": "Payment Method" + }, + "account_order_detail.heading.shipping_address": { + "defaultMessage": "Shipping Address" + }, + "account_order_detail.heading.shipping_method": { + "defaultMessage": "Shipping Method" + }, + "account_order_detail.label.order_number": { + "defaultMessage": "Order Number: {orderNumber}" + }, + "account_order_detail.label.ordered_date": { + "defaultMessage": "Ordered: {date}" + }, + "account_order_detail.label.pending_tracking_number": { + "defaultMessage": "Pending" + }, + "account_order_detail.label.tracking_number": { + "defaultMessage": "Tracking Number" + }, + "account_order_detail.link.back_to_history": { + "defaultMessage": "Back to Order History" + }, + "account_order_detail.title.order_details": { + "defaultMessage": "Order Details" + }, + "account_order_history.button.continue_shopping": { + "defaultMessage": "Continue Shopping" + }, + "account_order_history.description.once_you_place_order": { + "defaultMessage": "Once you place an order the details will show up here." + }, + "account_order_history.heading.no_order_yet": { + "defaultMessage": "You haven't placed an order yet." + }, + "account_order_history.label.num_of_items": { + "defaultMessage": "{count} items", + "description": "Number of items in order" + }, + "account_order_history.label.order_number": { + "defaultMessage": "Order Number: {orderNumber}" + }, + "account_order_history.label.ordered_date": { + "defaultMessage": "Ordered: {date}" + }, + "account_order_history.label.shipped_to": { + "defaultMessage": "Shipped to: {name}" + }, + "account_order_history.link.view_details": { + "defaultMessage": "View details" + }, + "account_order_history.title.order_history": { + "defaultMessage": "Order History" + }, + "account_payment_methods.button.add_method": { + "defaultMessage": "Add Payment Method" + }, + "account_payment_methods.description.add_method_for_faster_checkout": { + "defaultMessage": "Add a new payment method for faster checkout." + }, + "account_payment_methods.heading.no_saved_methods": { + "defaultMessage": "No Saved Payment Methods" + }, + "account_payment_methods.info.new_method_saved": { + "defaultMessage": "New Payment Method Saved" + }, + "account_payment_methods.title.payment_methods": { + "defaultMessage": "Payment Methods" + }, + "account_wishlist.button.continue_shopping": { + "defaultMessage": "Continue Shopping" + }, + "account_wishlist.description.continue_shopping": { + "defaultMessage": "Continue shopping and add items to your wishlist." + }, + "account_wishlist.heading.no_wishlist": { + "defaultMessage": "No Wishlist Items" + }, + "account_wishlist.title.wishlist": { + "defaultMessage": "Wishlist" + }, + "action_card.action.edit": { + "defaultMessage": "Edit" + }, + "action_card.action.remove": { + "defaultMessage": "Remove" + }, + "add_to_cart_modal.info.added_to_cart": { + "defaultMessage": "{quantity} {quantity, plural, one {item} other {items}} added to cart" + }, + "add_to_cart_modal.label.cart_subtotal": { + "defaultMessage": "Cart Subtotal ({itemAccumulatedCount} item)" + }, + "add_to_cart_modal.label.quantity": { + "defaultMessage": "Qty" + }, + "add_to_cart_modal.link.checkout": { + "defaultMessage": "Proceed to Checkout" + }, + "add_to_cart_modal.link.view_cart": { + "defaultMessage": "View Cart" + }, + "add_to_cart_modal.recommended_products.title.might_also_like": { + "defaultMessage": "You Might Also Like" + }, + "auth_modal.description.now_signed_in": { + "defaultMessage": "You're now signed in." + }, + "auth_modal.error.incorrect_email_or_password": { + "defaultMessage": "Something's not right with your email or password. Try again." + }, + "auth_modal.info.welcome_user": { + "defaultMessage": "Welcome {name}," + }, + "auth_modal.password_reset_success.button.back_to_sign_in": { + "defaultMessage": "Back to Sign In" + }, + "auth_modal.password_reset_success.info.will_email_shortly": { + "defaultMessage": "You will receive an email at {email} with a link to reset your password shortly." + }, + "auth_modal.password_reset_success.title.password_reset": { + "defaultMessage": "Password Reset" + }, + "card_payment_form.heading.new_payment_method": { + "defaultMessage": "Add New Payment Method" + }, + "cart.info.added_to_wishlist": { + "defaultMessage": "{quantity} {quantity, plural, one {item} other {items}} added to wishlist" + }, + "cart.info.removed_from_cart": { + "defaultMessage": "Item removed from cart" + }, + "cart.recommended_products.title.may_also_like": { + "defaultMessage": "You May Also Like" + }, + "cart.recommended_products.title.recently_viewed": { + "defaultMessage": "Recently Viewed" + }, + "cart_cta.link.checkout": { + "defaultMessage": "Proceed to Checkout" + }, + "cart_secondary_button_group.action.added_to_wishlist": { + "defaultMessage": "Add to Wishlist" + }, + "cart_secondary_button_group.action.edit": { + "defaultMessage": "Edit" + }, + "cart_secondary_button_group.action.remove": { + "defaultMessage": "Remove" + }, + "cart_secondary_button_group.label.this_is_gift": { + "defaultMessage": "This is a gift." + }, + "cart_secondary_button_group.link_learn_more": { + "defaultMessage": "Learn More" + }, + "cart_skeleton.heading.order_summary": { + "defaultMessage": "Order Summary" + }, + "cart_skeleton.title.cart": { + "defaultMessage": "Cart" + }, + "cart_title.title.cart_num_of_items": { + "defaultMessage": "Cart ({itemCount, plural, =0 {0 items} one {# item} other {# items}})" + }, + "cc_radio_group.action.remove": { + "defaultMessage": "Remove" + }, + "cc_radio_group.button.add_new_card": { + "defaultMessage": "Add New Card" + }, + "checkout.button.place_order": { + "defaultMessage": "Place Order" + }, + "checkout_confirmation.button.create_account": { + "defaultMessage": "Create Account" + }, + "checkout_confirmation.heading.billing_address": { + "defaultMessage": "Billing Address" + }, + "checkout_confirmation.heading.create_account": { + "defaultMessage": "Create an account for faster checkout" + }, + "checkout_confirmation.heading.credit_card": { + "defaultMessage": "Credit Card" + }, + "checkout_confirmation.heading.delivery_details": { + "defaultMessage": "Delivery Details" + }, + "checkout_confirmation.heading.order_summary": { + "defaultMessage": "Order Summary" + }, + "checkout_confirmation.heading.payment_details": { + "defaultMessage": "Payment Details" + }, + "checkout_confirmation.heading.shipping_address": { + "defaultMessage": "Shipping Address" + }, + "checkout_confirmation.heading.shipping_method": { + "defaultMessage": "Shipping Method" + }, + "checkout_confirmation.heading.thank_you_for_order": { + "defaultMessage": "Thank you for your order!" + }, + "checkout_confirmation.label.free": { + "defaultMessage": "Free" + }, + "checkout_confirmation.label.order_number": { + "defaultMessage": "Order Number" + }, + "checkout_confirmation.label.order_total": { + "defaultMessage": "Order Total" + }, + "checkout_confirmation.label.promo_applied": { + "defaultMessage": "Promotion applied" + }, + "checkout_confirmation.label.shipping": { + "defaultMessage": "Shipping" + }, + "checkout_confirmation.label.subtotal": { + "defaultMessage": "Subtotal" + }, + "checkout_confirmation.label.tax": { + "defaultMessage": "Tax" + }, + "checkout_confirmation.link.continue_shopping": { + "defaultMessage": "Continue Shopping" + }, + "checkout_confirmation.link.login": { + "defaultMessage": "Log in here" + }, + "checkout_confirmation.message.already_has_account": { + "defaultMessage": "This email already has an account." + }, + "checkout_confirmation.message.num_of_items_in_order": { + "defaultMessage": "{itemCount, plural, =0 {0 items} one {# item} other {# items}}", + "description": "# item(s) in order" + }, + "checkout_confirmation.message.will_email_shortly": { + "defaultMessage": "We will send an email to {email} with your confirmation number and receipt shortly." + }, + "checkout_footer.link.privacy_policy": { + "defaultMessage": "Privacy Policy" + }, + "checkout_footer.link.returns_exchanges": { + "defaultMessage": "Returns & Exchanges" + }, + "checkout_footer.link.shipping": { + "defaultMessage": "Shipping" + }, + "checkout_footer.link.site_map": { + "defaultMessage": "Site Map" + }, + "checkout_footer.link.terms_conditions": { + "defaultMessage": "Terms & Conditions" + }, + "checkout_footer.message.copyright": { + "defaultMessage": "2021 Salesforce or its affiliates. All rights reserved. This is a demo store only. Orders made WILL NOT be processed." + }, + "checkout_header.link.cart": { + "defaultMessage": "Back to cart" + }, + "checkout_payment.action.remove": { + "defaultMessage": "Remove" + }, + "checkout_payment.button.review_order": { + "defaultMessage": "Review Order" + }, + "checkout_payment.heading.billing_address": { + "defaultMessage": "Billing Address" + }, + "checkout_payment.heading.credit_card": { + "defaultMessage": "Credit Card" + }, + "checkout_payment.label.same_as_shipping": { + "defaultMessage": "Same as shipping address" + }, + "checkout_payment.title.payment": { + "defaultMessage": "Payment" + }, + "confirmation_modal.default.action.no": { + "defaultMessage": "No" + }, + "confirmation_modal.default.action.yes": { + "defaultMessage": "Yes" + }, + "confirmation_modal.default.message.you_want_to_continue": { + "defaultMessage": "Are you sure you want to continue?" + }, + "confirmation_modal.default.title.confirm_action": { + "defaultMessage": "Confirm Action" + }, + "confirmation_modal.remove_cart_item.action.no": { + "defaultMessage": "No, keep item" + }, + "confirmation_modal.remove_cart_item.action.yes": { + "defaultMessage": "Yes, remove item" + }, + "confirmation_modal.remove_cart_item.message.sure_to_remove": { + "defaultMessage": "Are you sure you want to remove this item from your cart?" + }, + "confirmation_modal.remove_cart_item.title.confirm_remove": { + "defaultMessage": "Confirm Remove Item" + }, + "confirmation_modal.remove_wishlist_item.action.no": { + "defaultMessage": "No, keep item" + }, + "confirmation_modal.remove_wishlist_item.action.yes": { + "defaultMessage": "Yes, remove item" + }, + "confirmation_modal.remove_wishlist_item.message.sure_to_remove": { + "defaultMessage": "Are you sure you want to remove this item from your wishlist?" + }, + "confirmation_modal.remove_wishlist_item.title.confirm_remove": { + "defaultMessage": "Confirm Remove Item" + }, + "contact_info.action.sign_out": { + "defaultMessage": "Sign Out" + }, + "contact_info.button.already_have_account": { + "defaultMessage": "Already have an account? Log in" + }, + "contact_info.button.checkout_as_guest": { + "defaultMessage": "Checkout as Guest" + }, + "contact_info.button.login": { + "defaultMessage": "Log In" + }, + "contact_info.error.incorrect_username_or_password": { + "defaultMessage": "Incorrect username or password, please try again." + }, + "contact_info.link.forgot_password": { + "defaultMessage": "Forgot password?" + }, + "contact_info.title.contact_info": { + "defaultMessage": "Contact Info" + }, + "credit_card_fields.tool_tip.security_code": { + "defaultMessage": "This {length}-digit code can be found on the {side} of your card.", + "description": "Credit card security code help text" + }, + "drawer_menu.button.account_details": { + "defaultMessage": "Account Details" + }, + "drawer_menu.button.addresses": { + "defaultMessage": "Addresses" + }, + "drawer_menu.button.log_out": { + "defaultMessage": "Log Out" + }, + "drawer_menu.button.my_account": { + "defaultMessage": "My Account" + }, + "drawer_menu.button.order_history": { + "defaultMessage": "Order History" + }, + "drawer_menu.button.payment_methods": { + "defaultMessage": "Payment Methods" + }, + "drawer_menu.link.about_us": { + "defaultMessage": "About Us" + }, + "drawer_menu.link.customer_support": { + "defaultMessage": "Customer Support" + }, + "drawer_menu.link.customer_support.contact_us": { + "defaultMessage": "Contact Us" + }, + "drawer_menu.link.customer_support.shipping_and_returns": { + "defaultMessage": "Shipping & Returns" + }, + "drawer_menu.link.our_company": { + "defaultMessage": "Our Company" + }, + "drawer_menu.link.privacy_and_security": { + "defaultMessage": "Privacy & Security" + }, + "drawer_menu.link.privacy_policy": { + "defaultMessage": "Privacy Policy" + }, + "drawer_menu.link.shop_all": { + "defaultMessage": "Shop All" + }, + "drawer_menu.link.sign_in": { + "defaultMessage": "Sign In" + }, + "drawer_menu.link.site_map": { + "defaultMessage": "Site Map" + }, + "drawer_menu.link.store_locator": { + "defaultMessage": "Store Locator" + }, + "drawer_menu.link.terms_and_conditions": { + "defaultMessage": "Terms & Conditions" + }, + "empty_cart.description.empty_cart": { + "defaultMessage": "Your cart is empty." + }, + "empty_cart.link.continue_shopping": { + "defaultMessage": "Continue Shopping" + }, + "empty_cart.link.sign_in": { + "defaultMessage": "Sign In" + }, + "empty_cart.message.continue_shopping": { + "defaultMessage": "Continue shopping to add items to your cart." + }, + "empty_cart.message.sign_in_or_continue_shopping": { + "defaultMessage": "Sign in to retrieve your saved items or continue shopping." + }, + "empty_search_results.info.cant_find_anything_for_category": { + "defaultMessage": "We couldn’t find anything for {category}. Try searching for a product or {link}." + }, + "empty_search_results.info.cant_find_anything_for_query": { + "defaultMessage": "We couldn’t find anything for \"{searchQuery}\"." + }, + "empty_search_results.info.double_check_spelling": { + "defaultMessage": "Double-check your spelling and try again or {link}." + }, + "empty_search_results.link.contact_us": { + "defaultMessage": "Contact Us" + }, + "empty_search_results.recommended_products.title.most_viewed": { + "defaultMessage": "Most Viewed" + }, + "empty_search_results.recommended_products.title.top_sellers": { + "defaultMessage": "Top Sellers" + }, + "footer.column.account": { + "defaultMessage": "Account" + }, + "footer.column.customer_support": { + "defaultMessage": "Customer Support" + }, + "footer.column.our_company": { + "defaultMessage": "Our Company" + }, + "footer.link.about_us": { + "defaultMessage": "About Us" + }, + "footer.link.contact_us": { + "defaultMessage": "Contact Us" + }, + "footer.link.order_status": { + "defaultMessage": "Order Status" + }, + "footer.link.privacy_policy": { + "defaultMessage": "Privacy Policy" + }, + "footer.link.shipping": { + "defaultMessage": "Shipping" + }, + "footer.link.signin_create_account": { + "defaultMessage": "Sign in or create account" + }, + "footer.link.site_map": { + "defaultMessage": "Site Map" + }, + "footer.link.store_locator": { + "defaultMessage": "Store Locator" + }, + "footer.link.terms_conditions": { + "defaultMessage": "Terms & Conditions" + }, + "footer.message.copyright": { + "defaultMessage": "2021 Salesforce or its affiliates. All rights reserved. This is a demo store only. Orders made WILL NOT be processed." + }, + "footer.subscribe.button.sign_up": { + "defaultMessage": "Sign Up" + }, + "footer.subscribe.description.sign_up": { + "defaultMessage": "Sign up to stay in the loop about the hottest deals" + }, + "footer.subscribe.heading.first_to_know": { + "defaultMessage": "Be the first to know" + }, + "form_action_buttons.button.cancel": { + "defaultMessage": "Cancel" + }, + "form_action_buttons.button.save": { + "defaultMessage": "Save" + }, + "global.account.link.account_details": { + "defaultMessage": "Account Details" + }, + "global.account.link.addresses": { + "defaultMessage": "Addresses" + }, + "global.account.link.order_history": { + "defaultMessage": "Order History" + }, + "global.account.link.payment_methods": { + "defaultMessage": "Payment Methods" + }, + "global.account.link.wishlist": { + "defaultMessage": "Wishlist" + }, + "global.error.something_went_wrong": { + "defaultMessage": "Something went wrong. Try again!" + }, + "header.button.assistive_msg.logo": { + "defaultMessage": "Logo" + }, + "header.button.assistive_msg.menu": { + "defaultMessage": "Menu" + }, + "header.button.assistive_msg.my_account": { + "defaultMessage": "My account" + }, + "header.button.assistive_msg.my_cart": { + "defaultMessage": "My cart" + }, + "header.button.assistive_msg.wishlist": { + "defaultMessage": "Wishlist" + }, + "header.field.placeholder.search_for_products": { + "defaultMessage": "Search for products..." + }, + "header.popover.action.log_out": { + "defaultMessage": "Log out" + }, + "header.popover.title.my_account": { + "defaultMessage": "My Account" + }, + "home.description.contact_our_staff": { + "defaultMessage": "Contact our support staff." + }, + "home.description.features": { + "defaultMessage": "Out-of-the-box features so that you focus only on adding enhancements." + }, + "home.description.get_you_to_the_right_place": { + "defaultMessage": "They will get you to the right place." + }, + "home.description.shop_products": { + "defaultMessage": "This section contains content from the catalog. {docLink} on how to replace it.", + "description": "{docLink} is a html button that links the user to https://sfdc.co/business-manager-manage-catalogs" + }, + "home.features.description.cart_checkout": { + "defaultMessage": "Ecommerce best practice for a shopper's cart and checkout experience." + }, + "home.features.description.components": { + "defaultMessage": "Built using Chakra UI, a simple, modular and accessible React component library." + }, + "home.features.description.einstein_recommendations": { + "defaultMessage": "Deliver the next best product or offer to every shopper through product recommendations." + }, + "home.features.description.my_account": { + "defaultMessage": "Shoppers can manage account information such as their profile, addresses, payments and orders." + }, + "home.features.description.shopper_login": { + "defaultMessage": "Enable shoppers to easily log in with a more personalized shopping experience." + }, + "home.features.description.wishlist": { + "defaultMessage": "Registered shoppers can add product items to their wishlist from purchasing later." + }, + "home.features.heading.cart_checkout": { + "defaultMessage": "Cart & Checkout" + }, + "home.features.heading.components": { + "defaultMessage": "Components & Design Kit" + }, + "home.features.heading.einstein_recommendations": { + "defaultMessage": "Einstein Recommendations" + }, + "home.features.heading.my_account": { + "defaultMessage": "My Account" + }, + "home.features.heading.shopper_login": { + "defaultMessage": "Shopper Login and API Access Service" + }, + "home.features.heading.wishlist": { + "defaultMessage": "Wishlist" + }, + "home.heading.features": { + "defaultMessage": "Features" + }, + "home.heading.here_to_help": { + "defaultMessage": "We're here to help" + }, + "home.heading.shop_products": { + "defaultMessage": "Shop Products" + }, + "home.hero_features.link.design_kit": { + "defaultMessage": "Create with the Figma PWA Design Kit" + }, + "home.hero_features.link.on_github": { + "defaultMessage": "Download on Github" + }, + "home.hero_features.link.on_managed_runtime": { + "defaultMessage": "Deploy on Managed Runtime" + }, + "home.link.contact_us": { + "defaultMessage": "Contact Us" + }, + "home.link.get_started": { + "defaultMessage": "Get started" + }, + "home.link.read_docs": { + "defaultMessage": "Read docs" + }, + "home.title.react_starter_store": { + "defaultMessage": "The React PWA Starter Store for Retail" + }, + "item_attributes.label.promotions": { + "defaultMessage": "Promotions" + }, + "item_attributes.label.quantity": { + "defaultMessage": "Quantity: {quantity}" + }, + "item_image.label.sale": { + "defaultMessage": "Sale", + "description": "A sale badge placed on top of a product image" + }, + "lCPCxk": { + "defaultMessage": "Please select all your options above" + }, + "locale_text.message.ar-SA": { + "defaultMessage": "Arabic (Saudi Arabia)" + }, + "locale_text.message.bn-BD": { + "defaultMessage": "Bangla (Bangladesh)" + }, + "locale_text.message.bn-IN": { + "defaultMessage": "Bangla (India)" + }, + "locale_text.message.cs-CZ": { + "defaultMessage": "Czech (Czech Republic)" + }, + "locale_text.message.da-DK": { + "defaultMessage": "Danish (Denmark)" + }, + "locale_text.message.de-AT": { + "defaultMessage": "German (Austria)" + }, + "locale_text.message.de-CH": { + "defaultMessage": "German (Switzerland)" + }, + "locale_text.message.de-DE": { + "defaultMessage": "German (Germany)" + }, + "locale_text.message.el-GR": { + "defaultMessage": "Greek (Greece)" + }, + "locale_text.message.en-AU": { + "defaultMessage": "English (Australia)" + }, + "locale_text.message.en-CA": { + "defaultMessage": "English (Canada)" + }, + "locale_text.message.en-GB": { + "defaultMessage": "English (United Kingdom)" + }, + "locale_text.message.en-IE": { + "defaultMessage": "English (Ireland)" + }, + "locale_text.message.en-IN": { + "defaultMessage": "English (India)" + }, + "locale_text.message.en-NZ": { + "defaultMessage": "English (New Zealand)" + }, + "locale_text.message.en-US": { + "defaultMessage": "English (United States)" + }, + "locale_text.message.en-ZA": { + "defaultMessage": "English (South Africa)" + }, + "locale_text.message.es-AR": { + "defaultMessage": "Spanish (Argentina)" + }, + "locale_text.message.es-CL": { + "defaultMessage": "Spanish (Chile)" + }, + "locale_text.message.es-CO": { + "defaultMessage": "Spanish (Columbia)" + }, + "locale_text.message.es-ES": { + "defaultMessage": "Spanish (Spain)" + }, + "locale_text.message.es-MX": { + "defaultMessage": "Spanish (Mexico)" + }, + "locale_text.message.es-US": { + "defaultMessage": "Spanish (United States)" + }, + "locale_text.message.fi-FI": { + "defaultMessage": "Finnish (Finland)" + }, + "locale_text.message.fr-BE": { + "defaultMessage": "French (Belgium)" + }, + "locale_text.message.fr-CA": { + "defaultMessage": "French (Canada)" + }, + "locale_text.message.fr-CH": { + "defaultMessage": "French (Switzerland)" + }, + "locale_text.message.fr-FR": { + "defaultMessage": "French (France)" + }, + "locale_text.message.he-IL": { + "defaultMessage": "Hebrew (Israel)" + }, + "locale_text.message.hi-IN": { + "defaultMessage": "Hindi (India)" + }, + "locale_text.message.hu-HU": { + "defaultMessage": "Hungarian (Hungary)" + }, + "locale_text.message.id-ID": { + "defaultMessage": "Indonesian (Indonesia)" + }, + "locale_text.message.it-CH": { + "defaultMessage": "Italian (Switzerland)" + }, + "locale_text.message.it-IT": { + "defaultMessage": "Italian (Italy)" + }, + "locale_text.message.ja-JP": { + "defaultMessage": "Japanese (Japan)" + }, + "locale_text.message.ko-KR": { + "defaultMessage": "Korean (Republic of Korea)" + }, + "locale_text.message.nl-BE": { + "defaultMessage": "Dutch (Belgium)" + }, + "locale_text.message.nl-NL": { + "defaultMessage": "Dutch (The Netherlands)" + }, + "locale_text.message.no-NO": { + "defaultMessage": "Norwegian (Norway)" + }, + "locale_text.message.pl-PL": { + "defaultMessage": "Polish (Poland)" + }, + "locale_text.message.pt-BR": { + "defaultMessage": "Portuguese (Brazil)" + }, + "locale_text.message.pt-PT": { + "defaultMessage": "Portuguese (Portugal)" + }, + "locale_text.message.ro-RO": { + "defaultMessage": "Romanian (Romania)" + }, + "locale_text.message.ru-RU": { + "defaultMessage": "Russian (Russian Federation)" + }, + "locale_text.message.sk-SK": { + "defaultMessage": "Slovak (Slovakia)" + }, + "locale_text.message.sv-SE": { + "defaultMessage": "Swedish (Sweden)" + }, + "locale_text.message.ta-IN": { + "defaultMessage": "Tamil (India)" + }, + "locale_text.message.ta-LK": { + "defaultMessage": "Tamil (Sri Lanka)" + }, + "locale_text.message.th-TH": { + "defaultMessage": "Thai (Thailand)" + }, + "locale_text.message.tr-TR": { + "defaultMessage": "Turkish (Turkey)" + }, + "locale_text.message.zh-CN": { + "defaultMessage": "Chinese (China)" + }, + "locale_text.message.zh-HK": { + "defaultMessage": "Chinese (Hong Kong)" + }, + "locale_text.message.zh-TW": { + "defaultMessage": "Chinese (Taiwan)" + }, + "login_form.action.create_account": { + "defaultMessage": "Create account" + }, + "login_form.button.sign_in": { + "defaultMessage": "Sign In" + }, + "login_form.link.forgot_password": { + "defaultMessage": "Forgot password?" + }, + "login_form.message.dont_have_account": { + "defaultMessage": "Don't have an account?" + }, + "login_form.message.welcome_back": { + "defaultMessage": "Welcome Back" + }, + "login_page.error.incorrect_username_or_password": { + "defaultMessage": "Incorrect username or password, please try again." + }, + "offline_banner.description.browsing_offline_mode": { + "defaultMessage": "You're currently browsing in offline mode" + }, + "order_summary.action.remove_promo": { + "defaultMessage": "Remove" + }, + "order_summary.cart_items.action.num_of_items_in_cart": { + "defaultMessage": "{itemCount, plural, =0 {0 items} one {# item} other {# items}} in cart", + "description": "clicking it would expand/show the items in cart" + }, + "order_summary.cart_items.link.edit_cart": { + "defaultMessage": "Edit cart" + }, + "order_summary.heading.order_summary": { + "defaultMessage": "Order Summary" + }, + "order_summary.label.estimated_total": { + "defaultMessage": "Estimated Total" + }, + "order_summary.label.free": { + "defaultMessage": "Free" + }, + "order_summary.label.order_total": { + "defaultMessage": "Order Total" + }, + "order_summary.label.promo_applied": { + "defaultMessage": "Promotion applied" + }, + "order_summary.label.promotions_applied": { + "defaultMessage": "Promotions applied" + }, + "order_summary.label.shipping": { + "defaultMessage": "Shipping" + }, + "order_summary.label.subtotal": { + "defaultMessage": "Subtotal" + }, + "order_summary.label.tax": { + "defaultMessage": "Tax" + }, + "page_not_found.action.go_back": { + "defaultMessage": "Back to previous page" + }, + "page_not_found.link.homepage": { + "defaultMessage": "Go to home page" + }, + "page_not_found.message.suggestion_to_try": { + "defaultMessage": "Please try retyping the address, going back to the previous page, or going to the home page." + }, + "page_not_found.title.page_cant_be_found": { + "defaultMessage": "The page you're looking for can't be found." + }, + "pagination.field.num_of_pages": { + "defaultMessage": "of {numOfPages}" + }, + "pagination.link.next": { + "defaultMessage": "Next" + }, + "pagination.link.prev": { + "defaultMessage": "Prev" + }, + "password_card.info.password_updated": { + "defaultMessage": "Password updated" + }, + "password_card.label.password": { + "defaultMessage": "Password" + }, + "password_card.title.password": { + "defaultMessage": "Password" + }, + "password_requirements.error.eight_letter_minimum": { + "defaultMessage": "8 characters minimum", + "description": "Password requirement" + }, + "password_requirements.error.one_lowercase_letter": { + "defaultMessage": "1 lowercase letter", + "description": "Password requirement" + }, + "password_requirements.error.one_number": { + "defaultMessage": "1 number", + "description": "Password requirement" + }, + "password_requirements.error.one_special_character": { + "defaultMessage": "1 special character (example: , S ! % #)", + "description": "Password requirement" + }, + "password_requirements.error.one_uppercase_letter": { + "defaultMessage": "1 uppercase letter", + "description": "Password requirement" + }, + "payment_selection.button.save_and_continue": { + "defaultMessage": "Save & Continue" + }, + "payment_selection.heading.add_new_card": { + "defaultMessage": "Add New Card" + }, + "payment_selection.heading.credit_card": { + "defaultMessage": "Credit Card" + }, + "payment_selection.message.select_payment_method": { + "defaultMessage": "Please select a payment method." + }, + "payment_selection.tooltip.secure_payment": { + "defaultMessage": "This is a secure SSL encrypted payment." + }, + "price_per_item.label.each": { + "defaultMessage": "ea", + "description": "Abbreviated 'each', follows price per item, like $10/ea" + }, + "product_detail.accordion.button.product_detail": { + "defaultMessage": "Product Detail" + }, + "product_detail.accordion.button.questions": { + "defaultMessage": "Questions" + }, + "product_detail.accordion.button.reviews": { + "defaultMessage": "Reviews" + }, + "product_detail.accordion.button.size_fit": { + "defaultMessage": "Size & Fit" + }, + "product_detail.accordion.message.coming_soon": { + "defaultMessage": "Coming Soon" + }, + "product_detail.info.added_to_wishlist": { + "defaultMessage": "{quantity} {quantity, plural, one {item} other {items}} added to wishlist" + }, + "product_detail.recommended_products.title.complete_set": { + "defaultMessage": "Complete the Set" + }, + "product_detail.recommended_products.title.might_also_like": { + "defaultMessage": "You might also like" + }, + "product_detail.recommended_products.title.recently_viewed": { + "defaultMessage": "Recently Viewed" + }, + "product_item.label.quantity": { + "defaultMessage": "Quantity:" + }, + "product_list.button.filter": { + "defaultMessage": "Filter" + }, + "product_list.button.sort_by": { + "defaultMessage": "Sort By: {sortOption}" + }, + "product_list.drawer.title.sort_by": { + "defaultMessage": "Sort By" + }, + "product_list.info.added_to_wishlist": { + "defaultMessage": "{quantity} {quantity, plural, one {item} other {items}} added to wishlist" + }, + "product_list.info.removed_from_wishlist": { + "defaultMessage": "Item removed from wishlist" + }, + "product_list.modal.button.clear_filters": { + "defaultMessage": "Clear Filters" + }, + "product_list.modal.button.view_items": { + "defaultMessage": "View {prroductCount} items" + }, + "product_list.modal.title.filter": { + "defaultMessage": "Filter" + }, + "product_list.select.sort_by": { + "defaultMessage": "Sort By: {sortOption}" + }, + "product_tile.assistive_msg.wishlist": { + "defaultMessage": "Wishlist" + }, + "product_view.button.add_to_cart": { + "defaultMessage": "Add to Cart" + }, + "product_view.button.add_to_wishlist": { + "defaultMessage": "Add to Wishlist" + }, + "product_view.button.update": { + "defaultMessage": "Update" + }, + "product_view.label.quantity": { + "defaultMessage": "Quantity" + }, + "product_view.link.full_details": { + "defaultMessage": "See full details" + }, + "profile_card.info.profile_updated": { + "defaultMessage": "Profile updated" + }, + "profile_card.label.email": { + "defaultMessage": "Email" + }, + "profile_card.label.full_name": { + "defaultMessage": "Full Name" + }, + "profile_card.label.phone": { + "defaultMessage": "Phone Number" + }, + "profile_card.message.not_provided": { + "defaultMessage": "Not provided" + }, + "profile_card.title.my_profile": { + "defaultMessage": "My Profile" + }, + "promo_code_fields.button.apply": { + "defaultMessage": "Apply" + }, + "promo_popover.heading.promo_applied": { + "defaultMessage": "Promotions Applied" + }, + "promocode.accordion.button.have_promocode": { + "defaultMessage": "Do you have a promo code?" + }, + "recent_searches.action.clear_searches": { + "defaultMessage": "Clear recent searches" + }, + "recent_searches.heading.recent_searches": { + "defaultMessage": "Recent Searches" + }, + "recommended_products.info.added_to_wishlist": { + "defaultMessage": "{quantity} {quantity, plural, one {item} other {items}} added to wishlist" + }, + "recommended_products.info.removed_from_wishlist": { + "defaultMessage": "Item removed from wishlist" + }, + "register_form.action.sign_in": { + "defaultMessage": "Sign in" + }, + "register_form.button.create_account": { + "defaultMessage": "Create Account" + }, + "register_form.heading.lets_get_started": { + "defaultMessage": "Let's get started!" + }, + "register_form.message.agree_to_policy_terms": { + "defaultMessage": "By creating an account, you agree to Salesforce Privacy Policy and Terms & Conditions" + }, + "register_form.message.already_have_account": { + "defaultMessage": "Already have an account?" + }, + "register_form.message.create_an_account": { + "defaultMessage": "Create an account and get first access to the very best products, inspiration and community." + }, + "reset_password.button.back_to_sign_in": { + "defaultMessage": "Back to Sign In" + }, + "reset_password.info.receive_email_shortly": { + "defaultMessage": "You will receive an email at {email} with a link to reset your password shortly." + }, + "reset_password.title.password_reset": { + "defaultMessage": "Password Reset" + }, + "reset_password_form.action.sign_in": { + "defaultMessage": "Sign in" + }, + "reset_password_form.button.reset_password": { + "defaultMessage": "Reset Password" + }, + "reset_password_form.message.enter_your_email": { + "defaultMessage": "Enter your email to receive instructions on how to reset your password" + }, + "reset_password_form.message.return_to_sign_in": { + "defaultMessage": "Or return to", + "description": "Precedes link to return to sign in" + }, + "reset_password_form.title.reset_password": { + "defaultMessage": "Reset Password" + }, + "search.action.cancel": { + "defaultMessage": "Cancel" + }, + "selected_refinements.action.clear_all": { + "defaultMessage": "Clear All" + }, + "shipping_address.button.continue_to_shipping": { + "defaultMessage": "Continue to Shipping Method" + }, + "shipping_address.title.shipping_address": { + "defaultMessage": "Shipping Address" + }, + "shipping_address_edit_form.button.save_and_continue": { + "defaultMessage": "Save & Continue to Shipping Method" + }, + "shipping_address_form.heading.edit_address": { + "defaultMessage": "Edit Address" + }, + "shipping_address_form.heading.new_address": { + "defaultMessage": "Add New Address" + }, + "shipping_address_selection.button.add_address": { + "defaultMessage": "Add New Address" + }, + "shipping_address_selection.button.submit": { + "defaultMessage": "Submit" + }, + "shipping_address_selection.title.add_address": { + "defaultMessage": "Add New Address" + }, + "shipping_address_selection.title.edit_shipping": { + "defaultMessage": "Edit Shipping Address" + }, + "shipping_options.action.send_as_a_gift": { + "defaultMessage": "Do you want to send this as a gift?" + }, + "shipping_options.button.continue_to_payment": { + "defaultMessage": "Continue to Payment" + }, + "shipping_options.title.shipping_gift_options": { + "defaultMessage": "Shipping & Gift Options" + }, + "signout_confirmation_dialog.button.cancel": { + "defaultMessage": "Cancel" + }, + "signout_confirmation_dialog.button.sign_out": { + "defaultMessage": "Sign Out" + }, + "signout_confirmation_dialog.heading.sign_out": { + "defaultMessage": "Sign Out" + }, + "signout_confirmation_dialog.message.sure_to_sign_out": { + "defaultMessage": "Are you sure you want to sign out? You will need to sign back in to proceed with your current order." + }, + "toggle_card.action.edit": { + "defaultMessage": "Edit" + }, + "update_password_fields.button.forgot_password": { + "defaultMessage": "Forgot Password?" + }, + "use_address_fields.error.please_enter_first_name": { + "defaultMessage": "Please enter your first name." + }, + "use_address_fields.error.please_enter_last_name": { + "defaultMessage": "Please enter your last name." + }, + "use_address_fields.error.please_enter_phone_number": { + "defaultMessage": "Please enter your phone number." + }, + "use_address_fields.error.please_enter_your_postal_or_zip": { + "defaultMessage": "Please enter your {postalOrZip}." + }, + "use_address_fields.error.please_select_your_address": { + "defaultMessage": "Please enter your address." + }, + "use_address_fields.error.please_select_your_city": { + "defaultMessage": "Please enter your city." + }, + "use_address_fields.error.please_select_your_country": { + "defaultMessage": "Please select your country." + }, + "use_address_fields.error.please_select_your_state_or_province": { + "defaultMessage": "Please select your {stateOrProvince}." + }, + "use_address_fields.error.required": { + "defaultMessage": "Required" + }, + "use_address_fields.error.state_code_invalid": { + "defaultMessage": "Please enter 2-letter state/province." + }, + "use_address_fields.label.address": { + "defaultMessage": "Address" + }, + "use_address_fields.label.city": { + "defaultMessage": "City" + }, + "use_address_fields.label.country": { + "defaultMessage": "Country" + }, + "use_address_fields.label.first_name": { + "defaultMessage": "First Name" + }, + "use_address_fields.label.last_name": { + "defaultMessage": "Last Name" + }, + "use_address_fields.label.phone": { + "defaultMessage": "Phone" + }, + "use_address_fields.label.postal_code": { + "defaultMessage": "Postal Code" + }, + "use_address_fields.label.preferred": { + "defaultMessage": "Set as default" + }, + "use_address_fields.label.province": { + "defaultMessage": "Province" + }, + "use_address_fields.label.state": { + "defaultMessage": "State" + }, + "use_address_fields.label.zipCode": { + "defaultMessage": "Zip Code" + }, + "use_credit_card_fields.error.required": { + "defaultMessage": "Required" + }, + "use_credit_card_fields.error.required_card_number": { + "defaultMessage": "Please enter your card number." + }, + "use_credit_card_fields.error.required_expiry": { + "defaultMessage": "Please enter your expiration date." + }, + "use_credit_card_fields.error.required_name": { + "defaultMessage": "Please enter your name as shown on your card." + }, + "use_credit_card_fields.error.required_security_code": { + "defaultMessage": "Please enter your security code." + }, + "use_credit_card_fields.error.valid_card_number": { + "defaultMessage": "Please enter a valid card number." + }, + "use_credit_card_fields.error.valid_date": { + "defaultMessage": "Please enter a valid date." + }, + "use_credit_card_fields.error.valid_name": { + "defaultMessage": "Please enter a valid name." + }, + "use_credit_card_fields.error.valid_security_code": { + "defaultMessage": "Please enter a valid security code." + }, + "use_credit_card_fields.label.card_number": { + "defaultMessage": "Card Number" + }, + "use_credit_card_fields.label.card_type": { + "defaultMessage": "Card Type" + }, + "use_credit_card_fields.label.expiry": { + "defaultMessage": "Expiration Date" + }, + "use_credit_card_fields.label.name": { + "defaultMessage": "Name on Card" + }, + "use_credit_card_fields.label.security_code": { + "defaultMessage": "Security Code" + }, + "use_login_fields.error.required_email": { + "defaultMessage": "Please enter your email address." + }, + "use_login_fields.error.required_password": { + "defaultMessage": "Please enter your password." + }, + "use_login_fields.label.email": { + "defaultMessage": "Email" + }, + "use_login_fields.label.password": { + "defaultMessage": "Password" + }, + "use_product.message.inventory_remaining": { + "defaultMessage": "Only {stockLevel} left!" + }, + "use_product.message.out_of_stock": { + "defaultMessage": "Out of stock" + }, + "use_profile_fields.error.required_email": { + "defaultMessage": "Please enter a valid email address." + }, + "use_profile_fields.error.required_first_name": { + "defaultMessage": "Please enter your first name." + }, + "use_profile_fields.error.required_last_name": { + "defaultMessage": "Please enter your last name." + }, + "use_profile_fields.error.required_phone": { + "defaultMessage": "Please enter your phone number." + }, + "use_profile_fields.label.email": { + "defaultMessage": "Email" + }, + "use_profile_fields.label.first_name": { + "defaultMessage": "First Name" + }, + "use_profile_fields.label.last_name": { + "defaultMessage": "Last Name" + }, + "use_profile_fields.label.phone": { + "defaultMessage": "Phone Number" + }, + "use_promo_code_fields.error.required_promo_code": { + "defaultMessage": "Please provide a valid promo code." + }, + "use_promo_code_fields.label.promo_code": { + "defaultMessage": "Promo Code" + }, + "use_promocode.error.check_the_code": { + "defaultMessage": "Check the code and try again, it may already be applied or the promo has expired." + }, + "use_promocode.info.promo_applied": { + "defaultMessage": "Promotion applied" + }, + "use_promocode.info.promo_removed": { + "defaultMessage": "Promotion removed" + }, + "use_registration_fields.error.contain_number": { + "defaultMessage": "Password must contain at least one number." + }, + "use_registration_fields.error.lowercase_letter": { + "defaultMessage": "Password must contain at least one lowercase letter." + }, + "use_registration_fields.error.minimum_characters": { + "defaultMessage": "Password must contain at least 8 characters." + }, + "use_registration_fields.error.required_email": { + "defaultMessage": "Please enter a valid email address." + }, + "use_registration_fields.error.required_first_name": { + "defaultMessage": "Please enter your first name." + }, + "use_registration_fields.error.required_last_name": { + "defaultMessage": "Please enter your last name." + }, + "use_registration_fields.error.required_password": { + "defaultMessage": "Please create a password." + }, + "use_registration_fields.error.special_character": { + "defaultMessage": "Password must contain at least one special character." + }, + "use_registration_fields.error.uppercase_letter": { + "defaultMessage": "Password must contain at least one uppercase letter." + }, + "use_registration_fields.label.email": { + "defaultMessage": "Email" + }, + "use_registration_fields.label.first_name": { + "defaultMessage": "First Name" + }, + "use_registration_fields.label.last_name": { + "defaultMessage": "Last Name" + }, + "use_registration_fields.label.password": { + "defaultMessage": "Password" + }, + "use_registration_fields.label.sign_up_to_emails": { + "defaultMessage": "Sign me up for Salesforce emails (you can unsubscribe at any time)" + }, + "use_reset_password_fields.error.required_email": { + "defaultMessage": "Please enter a valid email address." + }, + "use_reset_password_fields.label.email": { + "defaultMessage": "Email" + }, + "use_update_password_fields.error.contain_number": { + "defaultMessage": "Password must contain at least one number." + }, + "use_update_password_fields.error.lowercase_letter": { + "defaultMessage": "Password must contain at least one lowercase letter." + }, + "use_update_password_fields.error.minimum_characters": { + "defaultMessage": "Password must contain at least 8 characters." + }, + "use_update_password_fields.error.required_new_password": { + "defaultMessage": "Please provide a new password." + }, + "use_update_password_fields.error.required_password": { + "defaultMessage": "Please enter your password." + }, + "use_update_password_fields.error.special_character": { + "defaultMessage": "Password must contain at least one special character." + }, + "use_update_password_fields.error.uppercase_letter": { + "defaultMessage": "Password must contain at least one uppercase letter." + }, + "use_update_password_fields.label.current_password": { + "defaultMessage": "Current Password" + }, + "use_update_password_fields.label.new_password": { + "defaultMessage": "New Password" + }, + "wishlist_primary_action.info.added_to_cart": { + "defaultMessage": "{quantity} {quantity, plural, one {item} other {items}} added to cart" + }, + "wishlist_secondary_button_group.action.remove": { + "defaultMessage": "Remove" + }, + "wishlist_secondary_button_group.info.item_removed": { + "defaultMessage": "Item removed from wishlist" + }, + "with_registration.info.please_sign_in": { + "defaultMessage": "Please sign in to continue!" + } +} diff --git a/packages/pwa/app/utils/locale.test.js b/packages/pwa/app/utils/locale.test.js index e431f5e676..addd13fb42 100644 --- a/packages/pwa/app/utils/locale.test.js +++ b/packages/pwa/app/utils/locale.test.js @@ -19,15 +19,18 @@ const supportedLocales = getSupportedLocalesIds() const nonSupportedLocale = 'nl-NL' // Make sure this supported locale is not the default locale. // Otherwise, our code would fall back to default and incorrectly pass the tests -const supportedLocale = supportedLocales[1] +const supportedLocale = supportedLocales.length > 1 ? supportedLocales[1] : supportedLocales[0] const testId1 = 'footer.link.privacy_policy' -const testId2 = 'homepage.message.welcome' +const testId2 = + supportedLocales.length > 1 ? 'homepage.message.welcome' : 'account.heading.my_account' test('our assumptions before further testing', () => { expect(supportedLocales.includes(nonSupportedLocale)).toBe(false) - expect(DEFAULT_LOCALE).toBe('en-GB') - expect(supportedLocale).not.toBe(DEFAULT_LOCALE) + if (supportedLocales.length > 1) { + expect(DEFAULT_LOCALE).toBe('en-GB') + expect(supportedLocale).not.toBe(DEFAULT_LOCALE) + } }) describe('whichLocaleToLoad', () => { @@ -55,7 +58,9 @@ describe('loadLocaleData', () => { expect(messages[testId1][0].value).toMatch(/^\[!! Ṕŕíííṿâćććẏ ṔṔṔŏĺíííćẏ !!]$/) }) test('handling a not-found translation file', async () => { - expect(supportedLocale).not.toBe(DEFAULT_LOCALE) + if (supportedLocales.length > 1) { + expect(supportedLocale).not.toBe(DEFAULT_LOCALE) + } jest.mock(`../translations/compiled/${supportedLocale}.json`, () => { throw new Error() @@ -94,8 +99,9 @@ describe('getLocaleConfig', () => { }) test('with getUserPreferredLocales parameter', async () => { const locale = supportedLocale - expect(locale).not.toBe(DEFAULT_LOCALE) - + if (supportedLocales.length > 1) { + expect(locale).not.toBe(DEFAULT_LOCALE) + } const config = await getLocaleConfig({ getUserPreferredLocales: () => [locale] }) diff --git a/packages/pwa/app/utils/test-utils.js b/packages/pwa/app/utils/test-utils.js index a1029dc3a5..d21c3c457d 100644 --- a/packages/pwa/app/utils/test-utils.js +++ b/packages/pwa/app/utils/test-utils.js @@ -21,11 +21,12 @@ import { import {AddToCartModalContext} from '../hooks/use-add-to-cart-modal' import {commerceAPIConfig, einsteinAPIConfig} from '../api.config' import {IntlProvider} from 'react-intl' -import {DEFAULT_LOCALE, DEFAULT_CURRENCY} from '../constants' +import {DEFAULT_LOCALE, DEFAULT_CURRENCY, urlPartPositions} from '../constants' import {mockCategories as initialMockCategories} from '../commerce-api/mock-data' // Contexts import {CategoriesProvider, CurrencyProvider} from '../contexts' +import {getUrlConfig} from './utils' export const renderWithReactIntl = (node, locale = DEFAULT_LOCALE) => { return render( @@ -146,3 +147,16 @@ export const renderWithProviders = (children, options) => wrapper: () => {children}, ...options }) + +/** + * This is used to obtain the URL pathname that would include + * or not include the locale shortcode in the URL according to + * the locale type configuration set in the pwa-kit.config.json + * file. + * @param path The pathname that we want to use + * @returns {`${string|string}${string}`} URL pathname for the given path + */ +export const getPathname = (path) => { + const {locale: localeType} = getUrlConfig() + return `${localeType === urlPartPositions.PATH ? `/${DEFAULT_LOCALE}` : ''}${path}` +}