[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of carousel/react/Carousel.tsx from the carousel VTEX app.

[Assistant]
Here's the implementation:

```tsx
import classnames from 'classnames'
import React, { useState } from 'react'
import { Dots, Slide, Slider, SliderContainer } from 'vtex.slider'
import { Container } from 'vtex.store-components'
import { IconCaret } from 'vtex.store-icons'
import { useCssHandles } from 'vtex.css-handles'

import Banner, { Props as BannerProps } from './Banner'
import styles from './styles.css'

const GLOBAL_PAGES = global.__RUNTIME__ && [
  'Internal URL',
  ...Object.keys(global.__RUNTIME__.pages),
]

interface Props {
  /** Should change images automatically */
  autoplay?: boolean
  /** How long it should wait to change the banner in secs */
  autoplaySpeed: number | string | null
  /** Banners that will be displayed by the Carousel */
  banners: BannerProps[]
  /** Max height size of the banners */
  height?: number
  /** Set visibility of arrows */
  showArrows?: boolean
  /** Set visibility of dots */
  showDots?: boolean
}

interface ArrowProps {
  orientation: string
  onClick: (event: React.MouseEvent<HTMLElement>) => void
}

interface ArrowContainerProps {
  children: React.ReactNode
}

const PER_PAGE = 1
const CSS_HANDLES = [
  'arrow',
  'arrowLeft',
  'arrowRight',
  'arrowsContainerWrapper',
  'sliderRoot',
  'sliderFrame',
  'slide',
  'activeDot',
  'notActiveDot',
  'containerDots',
] as const

const Carousel = (props: Props) => {
  const {
    height = 420,
    autoplay = true,
    showDots = true,
    showArrows = true,
    autoplaySpeed = 5,
    banners: bannersProp,
  } = props
  const [currentSlide, setCurrentSlide] = useState(0)
  const handles = useCssHandles(CSS_HANDLES)

  if (!bannersProp?.length) {
    return null
  }

  const ArrowRender = ({ orientation, onClick }: ArrowProps) => {
    const containerClasses = classnames(handles.arrow, 'pointer z-1 flex', {
      [handles.arrowLeft]: orientation === 'left',
      [handles.arrowRight]: orientation === 'right',
    })
    return (
      // eslint-disable-next-line jsx-a11y/click-events-have-key-events
      <div
        className={containerClasses}
        onClick={onClick}
        role="button"
        tabIndex={0}
      >
        <IconCaret orientation={orientation} thin size={20} />
      </div>
    )
  }

  const ArrowContainerRender = ({ children }: ArrowContainerProps) => {
    const wrapperClasses = classnames(
      handles.arrowsContainerWrapper,
      'w-100 h-100 absolute left-0 top-0 flex justify-center'
    )
    const containerClasses = classnames(
      styles.arrowsContainer,
      'w-100 h-100 mw9 flex-ns justify-between items-center dn-s'
    )

    return (
      <div className={wrapperClasses}>
        <Container className={containerClasses}>{children}</Container>
      </div>
    )
  }

  const banners: BannerProps[] = bannersProp.filter(
    banner => banner && (banner.mobileImage || banner.image)
  )

  const handleNextSlide = () => {
    const nextSlide =
      ((currentSlide + 1 - PER_PAGE) % banners.length) + PER_PAGE
    setCurrentSlide(nextSlide)
  }

  const autoplayInterval = autoplaySpeed
    ? typeof autoplaySpeed === 'string'
      ? parseFloat(autoplaySpeed)
      : autoplaySpeed
    : 0

  return (
    <SliderContainer
      autoplay={autoplay && autoplayInterval > 0}
      autoplayInterval={autoplayInterval * 1000}
      pauseOnHover
      onNextSlide={handleNextSlide}
      className={styles.container}
    >
      <Slider
        loop
        classes={{
          root: handles.sliderRoot,
          sliderFrame: handles.sliderFrame,
        }}
        perPage={PER_PAGE}
        arrowRender={showArrows && ArrowRender}
        currentSlide={currentSlide}
        onChangeSlide={setCurrentSlide}
        arrowsContainerComponent={showArrows && ArrowContainerRender}
        duration={500}
      >
        {banners.map((banner, i) => (
          <Slide
            className={handles.slide}
            key={i}
            style={{ maxHeight: height }}
            sliderTransitionDuration={500}
          >
            <Banner height={height} {...banner} />
          </Slide>
        ))}
      </Slider>
      {showDots && (
        <Dots
          loop
          perPage={PER_PAGE}
          currentSlide={currentSlide}
          totalSlides={banners.length}
          onChangeSlide={setCurrentSlide}
          classes={{
            activeDot: classnames(handles.activeDot, 'bg-emphasis'),
            dot: classnames(styles.dot, 'mh2 mv0 pointer br-100'),
            notActiveDot: classnames(handles.notActiveDot, 'bg-muted-3'),
            root: classnames(handles.containerDots, 'bottom-0 pb4'),
          }}
        />
      )}
    </SliderContainer>
  )
}

Carousel.getSchema = () => {
  const internalRouteSchema = {
    customInternalURL: {
      description:
        'admin/editor.carousel.bannerLink.custominternalurl.description',
      isLayout: false,
      title: 'admin/editor.carousel.bannerLink.custominternalurl.title',
      type: 'string',
    },
    page: {
      enum: GLOBAL_PAGES,
      isLayout: false,
      title: 'admin/editor.carousel.bannerLink.page.title',
      type: 'string',
    },
    params: {
      description: 'admin/editor.carousel.bannerLink.params.description',
      isLayout: false,
      title: 'admin/editor.carousel.bannerLink.params.title',
      type: 'string',
    },
  }

  const externalRouteSchema = {
    url: {
      isLayout: false,
      title: 'admin/editor.carousel.bannerLink.url.title',
      type: 'string',
    },
  }

  return {
    description: 'admin/editor.carousel.description',
    dependencies: {
      autoplay: {
        oneOf: [
          {
            properties: {
              autoplay: {
                enum: [true],
              },
              autoplaySpeed: {
                enum: ['2', '3', '4', '5', '6', '7', '8'],
                isLayout: false,
                title: 'admin/editor.carousel.autoplaySpeed.title',
                type: 'string',
              },
            },
          },
        ],
      },
    },
    properties: {
      banners: {
        items: {
          properties: {
            image: {
              default: '',
              title: 'admin/editor.carousel.banner.image.title',
              type: 'string',
              widget: {
                'ui:widget': 'image-uploader',
              },
            },
            mobileImage: {
              default: '',
              title: 'admin/editor.carousel.banner.mobileImage.title',
              type: 'string',
              widget: {
                'ui:widget': 'image-uploader',
              },
            },
            tabletImage: {
              default: '',
              title: 'admin/editor.carousel.banner.tabletImage.title',
              type: 'string',
              widget: {
                'ui:widget': 'image-uploader',
              },
            },
            description: {
              default: '',
              title: 'admin/editor.carousel.banner.description.title',
              type: 'string',
            },
            externalRoute: {
              default: false,
              isLayout: false,
              title: 'admin/editor.carousel.banner.externalRoute.title',
              type: 'boolean',
            },
          },
          dependencies: {
            externalRoute: {
              oneOf: [
                {
                  properties: {
                    externalRoute: {
                      enum: [false],
                    },
                    ...internalRouteSchema,
                  },
                },
                {
                  properties: {
                    externalRoute: {
                      enum: [true],
                    },
                    ...externalRouteSchema,
                  },
                },
              ],
            },
          },
          title: 'admin/editor.carousel.banner.title',
          type: 'object',
        },
        minItems: 1,
        title: 'admin/editor.carousel.banners.title',
        type: 'array',
      },
      height: {
        default: 420,
        enum: [420, 440],
        isLayout: true,
        title: 'admin/editor.carousel.height.title',
        type: 'number',
      },
      showArrows: {
        default: true,
        isLayout: true,
        title: 'admin/editor.carousel.showArrows.title',
        type: 'boolean',
      },
      showDots: {
        default: true,
        isLayout: true,
        title: 'admin/editor.carousel.showDots.title',
        type: 'boolean',
      },
      autoplay: {
        default: true,
        isLayout: false,
        title: 'admin/editor.carousel.autoplay.title',
        type: 'boolean',
      },
    },
    title: 'admin/editor.carousel.title',
    type: 'object',
  }
}

export default Carousel

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of carousel/store/interfaces.json from the carousel VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "carousel": {
    "component": "Carousel"
  }
}
```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of carousel/react/typings/vtex.css-handles.d.ts from the carousel VTEX app.

[Assistant]
Here's the implementation:

```typescript
declare module 'vtex.css-handles' {
  export const useCssHandles: any
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of carousel/react/typings/vtex.store-components.d.ts from the carousel VTEX app.

[Assistant]
Here's the implementation:

```typescript
declare module 'vtex.store-components' {
  export const Container
  export const Slider
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of carousel/react/typings/vtex.render-runtime.d.ts from the carousel VTEX app.

[Assistant]
Here's the implementation:

```typescript
/* Typings for `render-runtime` */
declare module 'vtex.render-runtime' {
  import { Component, ReactElement } from 'react'

  export interface NavigationOptions {
    page: string
    params?: any
  }

  export interface RuntimeProps {
    navigate: (options: NavigationOptions) => void
    hints: {
      mobile: boolean
      desktop: boolean
    }
  }

  export interface RenderContextProps {
    runtime: RuntimeProps
  }

  export interface LinkProps {
    onClick?: (event: any) => void
    params?: object | null
    page?: string
    className?: string
    to?: string
  }

  export const ExtensionPoint: ReactElement
  export const Helmet: ReactElement
  export const Link: React.FunctionComponent<LinkProps>
  export const NoSSR: ReactElement
  export const RenderContextConsumer: ReactElement
  export const canUseDOM: boolean
  export const useRuntime: () => RuntimeProps
  export const withRuntimeContext: <TOriginalProps extends {}>(
    Component: ComponentType<TOriginalProps & RenderContextProps>
  ) => ComponentType<TOriginalProps>

  export const withSession: <TOriginalProps extends {}>(
    Component: ComponentType<TOriginalProps & RenderContextProps>
  ) => ComponentType<TOriginalProps>

  export const buildCacheLocator = (
    app: string,
    type: string,
    cacheId: string
  ) => string

  interface RenderComponent<P = {}, S = {}> extends Component<P, S> {
    getCustomMessages?: (locale: string) => any
    schema: ComponentSchema
    getSchema?: (a: any, b: ?any) => ComponentSchema
    uiSchema: UISchema
  }

  export interface ComponentsRegistry {
    [component: string]: RenderComponent<any, any>
  }

  export interface Window extends Window {
    __RENDER_7_COMPONENTS__: ComponentsRegistry
  }

  let global: Window
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of carousel/react/typings/vtex.store-icons.d.ts from the carousel VTEX app.

[Assistant]
Here's the implementation:

```typescript
declare module 'vtex.store-icons' {
  export const IconCaret: ReactElement
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of carousel/react/typings/styles.d.ts from the carousel VTEX app.

[Assistant]
Here's the implementation:

```typescript
declare module '*.css' {
  const css: any
  export default css
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of carousel/react/typings/vtex.slider.d.ts from the carousel VTEX app.

[Assistant]
Here's the implementation:

```typescript
declare module 'vtex.slider' {
  export const Slider: ReactElement
  export const Slide: ReactElement
  export const SliderContainer: ReactElement
  export const Dots: ReactElement
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of carousel/react/__tests__/Carousel.test.jsx from the carousel VTEX app.

[Assistant]
Here's the implementation:

```jsx
/* eslint-env jest */
import React from 'react'
import { range, map, forEach, pluck } from 'ramda'
import { render } from '@vtex/test-tools/react'

import Carousel from '../Carousel'

describe('Carousel component', () => {
  const renderComponent = customProps => {
    const props = {
      height: 440,
      mobileHeight: 339,
      showArrows: true,
      showDots: true,
      autoplay: true,
      autoplaySpeed: 4,
      numberOfBanners: 3,
      banners: [
        {
          image:
            'https://raw.githubusercontent.com/vtex-apps/carousel/master/images/banners-01.png',
          externalRoute: true,
          description: 'banner1',
          url: 'banner1-url',
        },
        {
          image:
            'https://raw.githubusercontent.com/vtex-apps/carousel/master/images/banners-02.png',
          externalRoute: true,
          description: 'banner2',
          url: 'banner2-url',
        },
        {
          image:
            'https://raw.githubusercontent.com/vtex-apps/carousel/master/images/banners-03.png',
          externalRoute: true,
          description: 'banner3',
          url: 'banner3-url',
        },
      ],
      ...customProps,
    }

    return render(<Carousel {...props} />)
  }

  it('should be rendered', () => {
    const { asFragment } = renderComponent()
    expect(asFragment()).toBeDefined()
  })

  it('should match snapshot', () => {
    const { asFragment } = renderComponent()
    expect(asFragment()).toMatchSnapshot()
  })

  it('should render items', () => {
    const banner = id => ({
      image: `image${id}`,
      externalRoute: true,
      description: `description${id}`,
      url: `url${id}`,
    })
    const banners = map(banner, range(0, 10))

    const { container, getByAltText } = renderComponent({
      numberOfBanners: banners.length,
      banners,
    })

    const itensContainer = container.querySelectorAll('.slider-container-mock')
    expect(itensContainer).toHaveLength(1)

    const items = container.querySelectorAll('.slide-mock')
    expect(items).toHaveLength(banners.length)

    // The URLs rendered should be the ones in the banners
    const urls = [...container.querySelectorAll('a')].map(a =>
      a.getAttribute('href')
    )
    expect(urls).toEqual(pluck('url', banners))

    // The Images URLs rendered should be the ones in the banners
    const images = [...container.querySelectorAll('img')].map(img =>
      img.getAttribute('src')
    )
    expect(images).toEqual(pluck('image', banners))

    // The alts rendered should be the ones in the banners
    const descriptions = pluck('description', banners)
    forEach(description => {
      getByAltText(description)
    }, descriptions)
  })
})

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/it-IT.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "Prezzo pagato in un'unica soluzione: {spotPriceValue}",
  "store/spot-price-savings.default": "Risparmio per il pagamento in un'unica soluzione: {spotPriceSavingsValue}",
  "store/savings.default": "Risparmia {savingsValue}",
  "store/installments.default": "Fino a {installmentsNumber}x {installmentValue}{hasInterest, select, true {, {interestRate} di interessi} false { interest-free}}",
  "store/list-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "Venduto da: {sellerName}",
  "admin/list-price.description": "Valori disponibili per l'interpolazione: '{listPriceValue}, {listPriceWithTax}, {taxPercentage}'",
  "admin/list-price.title": "Prezzo di listino",
  "admin/seller-name.title": "Nome venditore",
  "admin/seller-name.description": "Valori disponibili per l'interpolazione: '{sellerName}'",
  "admin/selling-price.description": "Valori disponibili per l'interpolazione: '{sellingPriceValue}, {sellingPriceWithTax}, {taxPercentage}, {hasListPrice}'",
  "admin/selling-price.title": "Prezzo di vendita",
  "admin/spot-price.description": "Valori disponibili per l'interpolazione: '{spotPrice}'",
  "admin/spot-price.title": "Prezzo pagato in un'unica soluzione",
  "admin/spot-price-savings.description": "Valori disponibili per l'interpolazione: '{previousPriceValue}, {newSpotPriceValue}, {spotPriceSavingsValue}, {spotPriceSavingsWithTax}, {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "Risparmio per il pagamento in un'unica soluzione",
  "admin/savings.description": "Valori disponibili per l'interpolazione: '{newPriceValue}, {previousPriceValue}, {savingsValue}, {savingsPercentage}, {savingsWithTax}'",
  "admin/savings.title": "Risparmio",
  "admin/installments.description": "Valori disponibili per l'interpolazione: '{installmentsNumber}, {installmentValue}, {installmentsTotalValue}, {interestRate}, {hasInterest}, {paymentSystemName}'",
  "admin/installments.title": "Rate",
  "admin/installments-list-item.title": "Rate",
  "admin/list-price-range.title": "Variazione del prezzo di listino",
  "admin/list-price-range-message.description": "Messaggio da mostrare quando c'è una differenza di prezzo tra gli SKU.\nValori disponibili per l'interpolazione: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "Prezzo di listino (Variazione)",
  "admin/list-price-range-no-range-message.description": "Messaggio da mostrare quando non c'è una differenza di prezzo tra gli SKU.\nValori disponibili per l'interpolazione: '{listPriceValue}, {listPriceWithTax}'",
  "admin/list-price-range-no-range-message.title": "Prezzo di listino (Nessuna variazione)",
  "admin/selling-price-range.title": "Variazione del prezzo di vendita",
  "admin/selling-price-range-message.description": "Messaggio da mostrare quando c'è una differenza di prezzo tra gli SKU.\nValori disponibili per l'interpolazione: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "Prezzo di vendita (Variazione)",
  "admin/selling-price-range-no-range-message.description": "Messaggio da mostrare quando non c'è una differenza di prezzo tra gli SKU.\nValori disponibili per l'interpolazione: '{sellingPriceValue}, {sellingPriceWithTax}'",
  "admin/selling-price-range-no-range-message.title": "Prezzo di vendita (Nessuna variazione)"
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/th-TH.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "ราคาจ่ายเต็ม: {spotPriceValue}",
  "store/spot-price-savings.default": "บันทึกโดยการจ่ายเต็ม: {spotPriceSavingsValue}",
  "store/savings.default": "ประหยัด {savingsValue}",
  "store/installments.default": "นานสูงสุด {installmentsNumber}x {installmentValue}{hasInterest, select, true {, {interestRate} ของดอกเบี้ย} false { interest-free}}",
  "store/list-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "ขายโดย: {sellerName}",
  "admin/list-price.description": "ค่าที่มีสำหรับการประมาณค่าในช่วง: '{listPriceValue}, {listPriceWithTax}, {taxPercentage}'",
  "admin/list-price.title": "ราคาตามบัญชีราคา",
  "admin/seller-name.title": "ชื่อผู้ขาย",
  "admin/seller-name.description": "ค่าที่มีสำหรับการประมาณค่าในช่วง: '{sellerName}'",
  "admin/selling-price.description": "ค่าที่มีสำหรับการประมาณค่าในช่วง: '{sellingPriceValue}, {sellingPriceWithTax}, {taxPercentage}, {hasListPrice}, {hasMeasurementUnit}, {measurementUnit}, {hasUnitMultiplier}, {unitMultiplier}'",
  "admin/selling-price.title": "ราคาขาย",
  "admin/spot-price.description": "ค่าที่มีสำหรับการประมาณค่าในช่วง: '{spotPrice}'",
  "admin/spot-price.title": "ราคาจ่ายเต็ม",
  "admin/spot-price-savings.description": "ค่าที่มีสำหรับการประมาณค่าในช่วง: '{previousPriceValue}, {newSpotPriceValue}, {spotPriceSavingsValue}, {spotPriceSavingsWithTax}, {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "บันทึกโดยการจ่ายเต็ม",
  "admin/savings.description": "ค่าที่มีสำหรับการประมาณค่าในช่วง: '{newPriceValue}, {previousPriceValue}, {savingsValue}, {savingsPercentage}, {savingsWithTax}'",
  "admin/savings.title": "ประหยัดเงิน",
  "admin/installments.description": "ค่าที่มีสำหรับการประมาณค่าในช่วง: '{installmentsNumber}, {installmentValue}, {installmentsTotalValue}, {interestRate}, {hasInterest}, {paymentSystemName}'",
  "admin/installments.title": "การผ่อนชำระ",
  "admin/installments-list-item.title": "การผ่อนชำระ",
  "admin/list-price-range.title": "ช่วงราคาตามบัญชีราคา",
  "admin/list-price-range-message.description": "ข้อความจะแสดงเมื่อมีความแตกต่างในราคาาะหว่าง SKU ต่าง ๆ\nค่าที่มีสำหรับการประมาณค่าในช่วง: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "ราคาตามบัญชีราคา (ช่วงราคา)",
  "admin/list-price-range-no-range-message.description": "ข้อความจะแสดงเมื่อไม่มีความแตกต่างในราคาาะหว่าง SKU ต่าง ๆ\nค่าที่มีสำหรับการประมาณค่าในช่วง: '{listPriceValue}, {listPriceWithTax}'",
  "admin/list-price-range-no-range-message.title": "ราคาตามบัญชีราคา (ไม่มีช่วงราคา)",
  "admin/selling-price-range.title": "ช่วงราคาราคาขาย",
  "admin/selling-price-range-message.description": "ข้อความจะแสดงเมื่อมีความแตกต่างในราคาาะหว่าง SKU ต่าง ๆ\nค่าที่มีสำหรับการประมาณค่าในช่วง: ''{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "ราคาขาย (ช่วงราคา)",
  "admin/selling-price-range-no-range-message.description": "ข้อความจะแสดงเมื่อไม่มีความแตกต่างในราคาาะหว่าง SKU ต่าง ๆ\nค่าที่มีสำหรับการประมาณค่าในช่วง: '{sellingPriceValue}, {sellingPriceWithTax}'",
  "admin/selling-price-range-no-range-message.title": "ราคาขาย (ไม่มีช่วงราคา)"
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/ko-KR.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "전액 결제: {spotPriceValue}",
  "store/spot-price-savings.default": "전액 결제하여 절약됨: {spotPriceSavingsValue}",
  "store/savings.default": "{savingsValue} 저장",
  "store/installments.default": "Up to {installmentsNumber}x {installmentValue}{hasInterest, select, true {, {interestRate} of interest} false { interest-free}}",
  "store/list-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "판매자: {sellerName}",
  "admin/list-price.description": "보간에 사용할 수 있는 값: '{listPriceValue}, {listPriceWithTax}, {taxPercentage}'",
  "admin/list-price.title": "정가",
  "admin/seller-name.title": "판매자 이름",
  "admin/seller-name.description": "보간에 사용할 수 있는 값: '{sellerName}'",
  "admin/selling-price.description": "보간에 사용할 수 있는 값: '{sellingPriceValue}, {sellingPriceWithTax}, {taxPercentage}, {hasListPrice}'",
  "admin/selling-price.title": "판매가",
  "admin/spot-price.description": "보간에 사용할 수 있는 값: '{spotPrice}'",
  "admin/spot-price.title": "전액 결제 가격",
  "admin/spot-price-savings.description": "보간에 사용할 수 있는 값: '{previousPriceValue}, {newSpotPriceValue}, {spotPriceSavingsValue}, {spotPriceSavingsWithTax}, {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "전액 결제 시 절약되는 비용",
  "admin/savings.description": "보간에 사용할 수 있는 값: '{newPriceValue}, {previousPriceValue}, {savingsValue}, {savingsPercentage}, {savingsWithTax}'",
  "admin/savings.title": "절감액",
  "admin/installments.description": "보간에 사용할 수 있는 값: '{installmentsNumber}, {installmentValue}, {installmentsTotalValue}, {interestRate}, {hasInterest}, {paymentSystemName}'",
  "admin/installments.title": "할부",
  "admin/installments-list-item.title": "할부",
  "admin/list-price-range.title": "정가 범위",
  "admin/list-price-range-message.description": "SKU 간 가격 차이가 있을 때 표시할 메시지입니다. 보간에 사용할 수 있는 값: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "정가(범위)",
  "admin/list-price-range-no-range-message.description": "SKU 간 가격 차이가 없을 때 표시할 메시지입니다. 보간에 사용할 수 있는 값: '{listPriceValue}, {listPriceWithTax}",
  "admin/list-price-range-no-range-message.title": "정가(범위 없음)",
  "admin/selling-price-range.title": "판매가 범위",
  "admin/selling-price-range-message.description": "SKU 간 가격 차이가 있을 때 표시할 메시지입니다. 보간에 사용할 수 있는 값: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "판매 가격(범위)",
  "admin/selling-price-range-no-range-message.description": "SKU 간 가격 차이가 없을 때 표시할 메시지입니다. 보간에 사용할 수 있는 값: '{sellingPriceValue}, {sellingPriceWithTax}",
  "admin/selling-price-range-no-range-message.title": "판매 가격(범위 없음)"
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/nn-NO.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "Fullt betalt pris: {spotPriceValue}",
  "store/spot-price-savings.default": "Spart ved å betale hele beløpet: {spotPriceSavingsValue}",
  "store/savings.default": "Spar {savingsValue}",
  "store/installments.default": "Opptil {installmentsNumber}x {installmentValue}{hasInterest, select, true {{interestRate} av rente} false { interest-free}}",
  "store/list-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "Solgt av: {sellerName}",
  "admin/list-price.description": "Verdier tilgjengelig for tillegg: '{listPriceValue}, {listPriceWithTax}, {taxPercentage}'",
  "admin/list-price.title": "Listepris",
  "admin/seller-name.title": "Selgers navn",
  "admin/seller-name.description": "Verdier tilgjengelig for tillegg: '{sellerName}'",
  "admin/selling-price.description": "Verdier tilgjengelig for tillegg: '{sellingPriceValue}, {sellingPriceWithTax}, {taxPercentage}, {hasListPrice}, {hasMeasurementUnit}, {measurementUnit}, {hasUnitMultiplier}, {unitMultiplier}'",
  "admin/selling-price.title": "Salgspris",
  "admin/spot-price.description": "Verdier tilgjengelig for tillegg: '{spotPrice}'",
  "admin/spot-price.title": "Fullt betalt pris",
  "admin/spot-price-savings.description": "Verdier tilgjengelig for tillegg: '{previousPriceValue}, {newSpotPriceValue}, {spotPriceSavingsValue}, {spotPriceSavingsWithTax}, {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "Spart ved å betale hele beløpet",
  "admin/savings.description": "Verdier tilgjengelig for tillegg: '{newPriceValue}, {previousPriceValue}, {savingsValue}, {savingsPercentage}, {savingsWithTax}'",
  "admin/savings.title": "Rabatt",
  "admin/installments.description": "Verdier tilgjengelig for tillegg: '{installmentsNumber}, {installmentValue}, {installmentsTotalValue}, {interestRate}, {hasInterest}, {paymentSystemName}'",
  "admin/installments.title": "Avdrag",
  "admin/installments-list-item.title": "Avdrag",
  "admin/list-price-range.title": "Listprisområde",
  "admin/list-price-range-message.description": "Melding som vises når det er en prisforskjell mellom SKU-ene.\nVerdier tilgjengelige for tillegg: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "Listepris (område)",
  "admin/list-price-range-no-range-message.description": "Melding som vises når det er en prisforskjell mellom SKU-ene.\nVerdier tilgjengelige for tillegg: '{listPriceValue}, {listPriceWithTax}'",
  "admin/list-price-range-no-range-message.title": "Listepris (ikke noe område)",
  "admin/selling-price-range.title": "Salgsprisområde",
  "admin/selling-price-range-message.description": "Melding som vises når det er en prisforskjell mellom SKU-ene.\nVerdier tilgjengelige for tillegg: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "Salgspris (område)",
  "admin/selling-price-range-no-range-message.description": "Melding som vises når det er en prisforskjell mellom SKU-ene.\nVerdier tilgjengelige for tillegg: '{sellingPriceValue}, {sellingPriceWithTax}'",
  "admin/selling-price-range-no-range-message.title": "Salgspris (ikke noe område)"
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/ja-JP.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "一括払いの価格：{spotPriceValue}",
  "store/spot-price-savings.default": "一括払いによる割引：{spotPriceSavingsValue}",
  "store/savings.default": "保存 {savingsValue}",
  "store/installments.default": "最大 {installmentsNumber}x {installmentValue}{ hasInterest, select,  true {, {interestRate} の利息} false {利息なし}}",
  "store/list-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "販売者: {sellerName}",
  "admin/list-price.description": "補間に利用できる値: '{listPriceValue}, {listPriceWithTax}, {taxPercentage}'",
  "admin/list-price.title": "希望小売価格",
  "admin/seller-name.title": "販売者名",
  "admin/seller-name.description": "補間に利用できる値: '{sellerName}'",
  "admin/selling-price.description": "補間に利用できる値: '{sellingPriceValue}, {sellingPriceWithTax}, {taxPercentage}, {hasListPrice}'",
  "admin/selling-price.title": "販売価格",
  "admin/spot-price.description": "補間に利用できる値: '{spotPrice}'",
  "admin/spot-price.title": "一括払いの価格",
  "admin/spot-price-savings.description": "補間に利用できる値: '{previousPriceValue}, {newSpotPriceValue}, {spotPriceSavingsValue}, {spotPriceSavingsWithTax}, {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "一括払いによる割引",
  "admin/savings.description": "補間に利用できる値: '{newPriceValue}, {previousPriceValue}, {savingsValue}, {savingsPercentage}, {savingsWithTax}'",
  "admin/savings.title": "保存",
  "admin/installments.description": "補間に利用できる値: '{installmentsNumber}, {installmentValue}, {installmentsTotalValue}, {interestRate}, {hasInterest}, {paymentSystemName}'",
  "admin/installments.title": "分割払い",
  "admin/installments-list-item.title": "分割払い",
  "admin/list-price-range.title": "希望小売価格の範囲",
  "admin/list-price-range-message.description": "SKU の間の価格に相違がある時に表示されるメッセージです。\n補間に利用できる値: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "希望小売価格 (範囲)",
  "admin/list-price-range-no-range-message.description": "SKU の間の価格に相違がない時に表示されるメッセージです。\n補間に利用できる値: '{listPriceValue}, {listPriceWithTax}'",
  "admin/list-price-range-no-range-message.title": "希望小売価格 (範囲なし)",
  "admin/selling-price-range.title": "販売価格の範囲",
  "admin/selling-price-range-message.description": "SKU の間の価格に相違がある時に表示されるメッセージです。\n補間に利用できる値: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "販売価格 (範囲)",
  "admin/selling-price-range-no-range-message.description": "SKU の間の価格に相違がない時に表示されるメッセージです。\n補間に利用できる値: '{sellingPriceValue}, {sellingPriceWithTax}'",
  "admin/selling-price-range-no-range-message.title": "販売価格 (範囲なし)"
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/bg-BG.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "Цена при плащане в пълен размер: {spotPriceValue}",
  "store/spot-price-savings.default": "Спестено чрез плащане в пълен размер: {spotPriceSavingsValue}",
  "store/savings.default": "Спестете {savingsValue}",
  "store/installments.default": "До {installmentsNumber}x {installmentValue}{hasInterest, select, true {, {interestRate} лихва} false { без лихва}}",
  "store/list-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "Продадено от: {sellerName}",
  "admin/list-price.description": "Стойности, налични за интерполиране: '{listPriceValue}, {listPriceWithTax}, {taxPercentage}'",
  "admin/list-price.title": "Цена в инвентара",
  "admin/seller-name.title": "Име на продавача",
  "admin/seller-name.description": "Стойности, налични за интерполиране: '{sellerName}'",
  "admin/selling-price.description": "Стойности, налични за интерполиране: '{sellingPriceValue}, {sellingPriceWithTax}, {taxPercentage}, {hasListPrice}, {hasMeasurementUnit}, {measurementUnit}, {hasUnitMultiplier}, {unitMultiplier}'",
  "admin/selling-price.title": "Продажна цена",
  "admin/spot-price.description": "Стойности, налични за интерполиране: '{spotPrice}'",
  "admin/spot-price.title": "Цена при плащане в пълен размер",
  "admin/spot-price-savings.description": "Стойности, налични за интерполиране: '{previousPriceValue}, {newSpotPriceValue}, {spotPriceSavingsValue}, {spotPriceSavingsWithTax}, {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "Спестено чрез плащане в пълен размер",
  "admin/savings.description": "Стойности, налични за интерполиране: '{newPriceValue}, {previousPriceValue}, {savingsValue}, {savingsPercentage}, {savingsWithTax}'",
  "admin/savings.title": "Спестявания",
  "admin/installments.description": "Стойности, налични за интерполиране: '{installmentsNumber}, {installmentValue}, {installmentsTotalValue}, {interestRate}, {hasInterest}, {paymentSystemName}'",
  "admin/installments.title": "Вноски",
  "admin/installments-list-item.title": "Вноски",
  "admin/list-price-range.title": "Диапазон на цените в каталога",
  "admin/list-price-range-message.description": "Съобщение, което да се показва, когато има разлика в цените между различните ИЕ. Стойности, налични за интерполиране: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "Цени в каталога (диапазон)",
  "admin/list-price-range-no-range-message.description": "Съобщение, което да се показва, когато няма разлика в цените между различните ИЕ. Стойности, налични за интерполиране: '{listPriceValue}, {listPriceWithTax}'",
  "admin/list-price-range-no-range-message.title": "Цени в каталога (без диапазон)",
  "admin/selling-price-range.title": "Диапазон на продажна цена",
  "admin/selling-price-range-message.description": "Съобщение, което да се показва, когато има разлика в цените между различните ИЕ. Стойности, налични за интерполиране: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "Продажна цена (диапазон)",
  "admin/selling-price-range-no-range-message.description": "Съобщение, което да се показва, когато няма разлика в цените между различните ИЕ. Стойности, налични за интерполиране: '{sellingPriceValue}, {sellingPriceWithTax}'",
  "admin/selling-price-range-no-range-message.title": "Продажна цена (без диапазон)"
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/id-ID.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "Harga bayar penuh: {spotPriceValue}",
  "store/spot-price-savings.default": "Hemat dengan membayar penuh: {spotPriceSavingsValue}",
  "store/savings.default": "Hemat {savingsValue}",
  "store/installments.default": "Hingga {installmentsNumber}x {installmentValue}{hasInterest, select, true {, {interestRate} bunga} false {tanpa bunga}}",
  "store/list-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "Dijual oleh: {sellerName}",
  "admin/list-price.description": "Nilai tersedia untuk interpolasi: '{listPriceValue}, {listPriceWithTax}, {taxPercentage}'",
  "admin/list-price.title": "Harga Eceran",
  "admin/seller-name.title": "Nama Penjual",
  "admin/seller-name.description": "Nilai tersedia untuk interpolasi: '{sellerName}'",
  "admin/selling-price.description": "Nilai tersedia untuk interpolasi: '{sellingPriceValue}, {sellingPriceWithTax}, {taxPercentage}, {hasListPrice}, {hasMeasurementUnit}, {measurementUnit}, {hasUnitMultiplier}, {unitMultiplier}'",
  "admin/selling-price.title": "Harga Jual",
  "admin/spot-price.description": "Nilai tersedia untuk interpolasi: '{spotPrice}'",
  "admin/spot-price.title": "Harga Bayar Penuh",
  "admin/spot-price-savings.description": "Nilai tersedia untuk interpolasi: '{previousPriceValue}, {newSpotPriceValue}, {spotPriceSavingsValue}, {spotPriceSavingsWithTax}, {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "Hemat dengan Membayar Penuh",
  "admin/savings.description": "Nilai tersedia untuk interpolasi: '{newPriceValue}, {previousPriceValue}, {savingsValue}, {savingsPercentage}, {savingsWithTax}'",
  "admin/savings.title": "Penghematan",
  "admin/installments.description": "Nilai tersedia untuk interpolasi: '{installmentsNumber}, {installmentValue}, {installmentsTotalValue}, {interestRate}, {hasInterest}, {paymentSystemName}'",
  "admin/installments.title": "Cicilan",
  "admin/installments-list-item.title": "Cicilan",
  "admin/list-price-range.title": "Rentang Harga Eceran",
  "admin/list-price-range-message.description": "Pesan akan ditampilkan saat ada perbedaan harga antara SKU.\nNilai tersedia untuk interpolasi: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "Harga Eceran (Rentang)",
  "admin/list-price-range-no-range-message.description": "Pesan akan ditampilkan saat tidak ada perbedaan harga antara SKU.\nNilai tersedia untuk interpolasi: '{listPriceValue}, {listPriceWithTax}'",
  "admin/list-price-range-no-range-message.title": "Harga Eceran (Tanpa Rentang)",
  "admin/selling-price-range.title": "Rentang Harga Jual",
  "admin/selling-price-range-message.description": "Pesan akan ditampilkan saat ada perbedaan harga antara SKU.\nNilai tersedia untuk interpolasi: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "Harga Jual (Rentang)",
  "admin/selling-price-range-no-range-message.description": "Pesan akan ditampilkan saat tidak ada perbedaan harga antara SKU.\nNilai tersedia untuk interpolasi: '{sellingPriceValue}, {sellingPriceWithTax}'",
  "admin/selling-price-range-no-range-message.title": "Harga Eceran (Tanpa Rentang)"
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/pt.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "Preço à vista: {spotPriceValue}",
  "store/spot-price-savings.default": "Economia de preço à vista: {spotPriceSavingsValue}",
  "store/savings.default": "Economize {savingsValue}",
  "store/installments.default": "Em até {installmentsNumber}x {installmentValue}{hasInterest, select, true {, {interestRate} de juros} false { sem juros}}",
  "store/list-price-range-message.default": "{minPriceValue}–{maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue}–{maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "Vendido por: {sellerName}",
  "admin/list-price.description": "Valores disponíveis para interpolação: '{listPriceValue}, {listPriceWithTax}, {taxPercentage}'",
  "admin/list-price.title": "Preço de lista",
  "admin/seller-name.title": "Nome do seller",
  "admin/seller-name.description": "Valores disponíveis para interpolação: '{sellerName}'",
  "admin/selling-price.description": "Valores disponíveis para interpolação: '{sellingPriceValue}, {sellingPriceWithTax}, {taxPercentage}, {hasListPrice}, {hasMeasurementUnit}, {measurementUnit}, {hasUnitMultiplier}, {unitMultiplier}'",
  "admin/selling-price.title": "Preço de venda",
  "admin/spot-price.description": "Valores disponíveis para interpolação: '{spotPrice}'",
  "admin/spot-price.title": "Preço à vista",
  "admin/spot-price-savings.description": "Valores disponíveis para interpolação: '{previousPriceValue}, {newSpotPriceValue}, {spotPriceSavingsValue}, {spotPriceSavingsWithTax}, {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "Economia de preço à vista",
  "admin/savings.description": "Valores disponíveis para interpolação: '{newPriceValue}, {previousPriceValue}, {savingsValue}, {savingsPercentage}, {savingsWithTax}'",
  "admin/savings.title": "Economia",
  "admin/installments.description": "Valores disponíveis para interpolação: '{installmentsNumber}, {installmentValue}, {installmentsTotalValue}, {interestRate}, {hasInterest}, {paymentSystemName}'",
  "admin/installments.title": "Parcelamento",
  "admin/installments-list-item.title": "Parcelamento",
  "admin/list-price-range.title": "Faixa de preço de lista",
  "admin/list-price-range-message.description": "Mensagem a ser mostrada quando houver diferença de preço entre SKUs.\nValores disponíveis para interpolação: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "Preço de lista (faixa)",
  "admin/list-price-range-no-range-message.description": "Mensagem a ser mostrada quando não houver diferença de preço entre SKUs.\nValores disponíveis para interpolação: '{listPriceValue}, {listPriceWithTax}'",
  "admin/list-price-range-no-range-message.title": "Preço de lista (sem faixa)",
  "admin/selling-price-range.title": "Faixa de preço de venda",
  "admin/selling-price-range-message.description": "Mensagem a ser mostrada quando houver diferença de preço entre SKUs.\nValores disponíveis para interpolação: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "Preço de venda (faixa)",
  "admin/selling-price-range-no-range-message.description": "Mensagem a ser mostrada quando não houver diferença de preço entre SKUs.\nValores disponíveis para interpolação: '{sellingPriceValue}, {sellingPriceWithTax}'",
  "admin/selling-price-range-no-range-message.title": "Preço de venda (sem faixa)",
  "store/product-price.price-savings.aria-label": "Preço de {previousPriceValue} por {newPriceValue}"
}
```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/ar-SA.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "السعر المدفوع بالكامل: {spotPriceValue}",
  "store/spot-price-savings.default": "تم التوفير عن طريق الدفع بالكامل: {spotPriceSavingsValue}",
  "store/savings.default": "حفظ {savingsValue}",
  "store/installments.default": "لغاية {installmentsNumber}x {installmentValue}{hasInterest, select, true {, {interestRate} من الفوائد} false { interest-free}}",
  "store/list-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "تم بيعها بواسطة: {sellerName}",
  "admin/list-price.description": "القيم المتاحة للاستيفاء: '{listPriceValue}، {listPriceWithTax}، {taxPercentage}'",
  "admin/list-price.title": "قائمة الأسعار",
  "admin/seller-name.title": "اسم البائع",
  "admin/seller-name.description": "القيم المتاحة للاستقطاب: '{sellerName}'",
  "admin/selling-price.description": "القيم المتاحة للاستكشاف: '{sellingPriceValue}، {sellingPriceWithTax}، {taxPercentage}، {hasListPrice}، {hasMeasurementUnit}، {measurementUnit}، {hasUnitMultiplier}، {unitMultiplier}'",
  "admin/selling-price.title": "سعر البيع",
  "admin/spot-price.description": "القيم المتاحة للاستقطاب: '{spotPrice}'",
  "admin/spot-price.title": "السعر المدفوع بالكامل",
  "admin/spot-price-savings.description": "القيم المتاحة للاستيفاء: '{previousPriceValue}، {newSpotPriceValue}، {spotPriceSavingsValue}، {spotPriceSavingsWithTax}، {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "تم التوفير عن طريق الدفع بالكامل",
  "admin/savings.description": "القيم المتاحة للاستيفاء: '{newPriceValue}، {previousPriceValue}، {savingsValue}، {savingsPercentage}، {savingsWithTax}'",
  "admin/savings.title": "المدخرات",
  "admin/installments.description": "القيم المتاحة للاستيفاء: '{installmentsNumber}، {installmentValue}، {installmentsTotalValue}، {interestRate}، {hasInterest}، {paymentSystemName}'",
  "admin/installments.title": "الدفعات",
  "admin/installments-list-item.title": "الدفعات",
  "admin/list-price-range.title": "قائمة نطاق السعر",
  "admin/list-price-range-message.description": "رسالة تظهر عندما يكون هناك فرق في السعر بين SKU.\nالقيم المتاحة للاستكشاف: '{minPriceValue}، {maxPriceValue}، {minPriceWithTax}، {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "نطاق الأسعار (الصنف)",
  "admin/list-price-range-no-range-message.description": "رسالة تظهر عندما لا يكون هناك فرق في السعر بين SKU.\nالقيم المتاحة للاستكشاف: '{listPriceValue}، {listPriceWithTax}'",
  "admin/list-price-range-no-range-message.title": "نطاق الأسعار (دون صنف)",
  "admin/selling-price-range.title": "نطاق سعر البيع",
  "admin/selling-price-range-message.description": "رسالة تظهر عندما يكون هناك فرق في السعر بين SKU.\nالقيم المتاحة للاستكشاف: '{minPriceValue}، {maxPriceValue}، {minPriceWithTax}، {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "سعر البيع (النطاق)",
  "admin/selling-price-range-no-range-message.description": "رسالة تظهر عندما لا يكون هناك فرق في السعر بين SKU.\nالقيم المتاحة للاستكشاف: '{sellingPriceValue}، {sellingPriceWithTax}'",
  "admin/selling-price-range-no-range-message.title": "سعر البيع (بدون نطاق)"
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/en.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "Paid-in-full price: {spotPriceValue}",
  "store/spot-price-savings.default": "Saved by paying in full: {spotPriceSavingsValue}",
  "store/savings.default": "Save {savingsValue}",
  "store/installments.default": "Up to {installmentsNumber}x {installmentValue}{hasInterest, select, true {, {interestRate} interest} false { interest-free}}",
  "store/list-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "Sold by: {sellerName}",
  "admin/list-price.description": "Values available for interpolation: '{listPriceValue}, {listPriceWithTax}, {taxPercentage}'",
  "admin/list-price.title": "List Price",
  "admin/seller-name.title": "Seller Name",
  "admin/seller-name.description": "Values available for interpolation: '{sellerName}'",
  "admin/selling-price.description": "Values available for interpolation: '{sellingPriceValue}, {sellingPriceWithTax}, {taxPercentage}, {hasListPrice}, {hasMeasurementUnit}, {measurementUnit}, {hasUnitMultiplier}, {unitMultiplier}'",
  "admin/selling-price.title": "Selling Price",
  "admin/spot-price.description": "Values available for interpolation: '{spotPrice}'",
  "admin/spot-price.title": "Paid-in-full Price",
  "admin/spot-price-savings.description": "Values available for interpolation: '{previousPriceValue}, {newSpotPriceValue}, {spotPriceSavingsValue}, {spotPriceSavingsWithTax}, {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "Saved by Paying in Full",
  "admin/savings.description": "Values available for interpolation: '{newPriceValue}, {previousPriceValue}, {savingsValue}, {savingsPercentage}, {savingsWithTax}'",
  "admin/savings.title": "Savings",
  "admin/installments.description": "Values available for interpolation: '{installmentsNumber}, {installmentValue}, {installmentsTotalValue}, {interestRate}, {hasInterest}, {paymentSystemName}'",
  "admin/installments.title": "Installments",
  "admin/installments-list-item.title": "Installments",
  "admin/list-price-range.title": "List Price Range",
  "admin/list-price-range-message.description": "Message shown when there is a price difference between SKUs.\nValues available for interpolation: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "List Price (Range)",
  "admin/list-price-range-no-range-message.description": "Message shown when there isn't a price difference between SKUs.\nValues available for interpolation: '{listPriceValue}, {listPriceWithTax}'",
  "admin/list-price-range-no-range-message.title": "List Price (No Range)",
  "admin/selling-price-range.title": "Selling Price Range",
  "admin/selling-price-range-message.description": "Message shown when there is a price difference between SKUs.\nValues available for interpolation: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "Selling Price (Range)",
  "admin/selling-price-range-no-range-message.description": "Message shown when there isn't a price difference between SKUs.\nValues available for interpolation: '{sellingPriceValue}, {sellingPriceWithTax}'",
  "admin/selling-price-range-no-range-message.title": "Selling Price (No Range)",
  "store/product-price.price-savings.aria-label": "Price changed from {previousPriceValue} to {newPriceValue}"
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/no-NO.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "Fullt betalt pris: {spotPriceValue}",
  "store/spot-price-savings.default": "Spart ved å betale hele beløpet: {spotPriceSavingsValue}",
  "store/savings.default": "Spar {savingsValue}",
  "store/installments.default": "Opptil {installmentsNumber}x {installmentValue}{hasInterest, select, true {{interestRate} av rente} false { interest-free}}",
  "store/list-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "Solgt av: {sellerName}",
  "admin/list-price.description": "Verdier tilgjengelig for tillegg: '{listPriceValue}, {listPriceWithTax}, {taxPercentage}'",
  "admin/list-price.title": "Listepris",
  "admin/seller-name.title": "Selgers navn",
  "admin/seller-name.description": "Verdier tilgjengelig for tillegg: '{sellerName}'",
  "admin/selling-price.description": "Verdier tilgjengelig for tillegg: '{sellingPriceValue}, {sellingPriceWithTax}, {taxPercentage}, {hasListPrice}, {hasMeasurementUnit}, {measurementUnit}, {hasUnitMultiplier}, {unitMultiplier}'",
  "admin/selling-price.title": "Salgspris",
  "admin/spot-price.description": "Verdier tilgjengelig for tillegg: '{spotPrice}'",
  "admin/spot-price.title": "Fullt betalt pris",
  "admin/spot-price-savings.description": "Verdier tilgjengelig for tillegg: '{previousPriceValue}, {newSpotPriceValue}, {spotPriceSavingsValue}, {spotPriceSavingsWithTax}, {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "Spart ved å betale hele beløpet",
  "admin/savings.description": "Verdier tilgjengelig for tillegg: '{newPriceValue}, {previousPriceValue}, {savingsValue}, {savingsPercentage}, {savingsWithTax}'",
  "admin/savings.title": "Rabatt",
  "admin/installments.description": "Verdier tilgjengelig for tillegg: '{installmentsNumber}, {installmentValue}, {installmentsTotalValue}, {interestRate}, {hasInterest}, {paymentSystemName}'",
  "admin/installments.title": "Avdrag",
  "admin/installments-list-item.title": "Avdrag",
  "admin/list-price-range.title": "Listprisområde",
  "admin/list-price-range-message.description": "Melding som vises når det er en prisforskjell mellom SKU-ene.\nVerdier tilgjengelige for tillegg: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "Listepris (område)",
  "admin/list-price-range-no-range-message.description": "Melding som vises når det er en prisforskjell mellom SKU-ene.\nVerdier tilgjengelige for tillegg: '{listPriceValue}, {listPriceWithTax}'",
  "admin/list-price-range-no-range-message.title": "Listepris (ikke noe område)",
  "admin/selling-price-range.title": "Salgsprisområde",
  "admin/selling-price-range-message.description": "Melding som vises når det er en prisforskjell mellom SKU-ene.\nVerdier tilgjengelige for tillegg: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "Salgspris (område)",
  "admin/selling-price-range-no-range-message.description": "Melding som vises når det er en prisforskjell mellom SKU-ene.\nVerdier tilgjengelige for tillegg: '{sellingPriceValue}, {sellingPriceWithTax}'",
  "admin/selling-price-range-no-range-message.title": "Salgspris (ikke noe område)"
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/ro-RO.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "Prețul plătit integral: {spotPriceValue}",
  "store/spot-price-savings.default": "Economisit prin plata integrală: {spotPriceSavingsValue}",
  "store/savings.default": "Economisește {savingsValue}",
  "store/installments.default": "Până la {installmentsNumber}x {installmentValue}{hasInterest, select, true {, {interestRate} of interest} false { interest-free}}",
  "store/list-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "Vândut de: {sellerName}",
  "admin/list-price.description": "Valori disponibile pentru interpolare: '{listPriceValue}, {listPriceWithTax}, {taxPercentage}'",
  "admin/list-price.title": "Preț de listă",
  "admin/seller-name.title": "Denumire vânzător",
  "admin/seller-name.description": "Valori disponibile pentru interpolare: '{sellerName}'",
  "admin/selling-price.description": "Valori disponibile pentru interpolare: '{sellingPriceValue}, {sellingPriceWithTax}, {taxPercentage}, {hasListPrice}'",
  "admin/selling-price.title": "Preț de vânzare",
  "admin/spot-price.description": "Valori disponibile pentru interpolare: '{spotPrice}'",
  "admin/spot-price.title": "Preț plătit integral",
  "admin/spot-price-savings.description": "Valori disponibile pentru interpolare: '{previousPriceValue}, {newSpotPriceValue}, {spotPriceSavingsValue}, {spotPriceSavingsWithTax}, {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "Economisit prin plata integrală",
  "admin/savings.description": "Valori disponibile pentru interpolare: '{newPriceValue}, {previousPriceValue}, {savingsValue}, {savingsPercentage}, {savingsWithTax}'",
  "admin/savings.title": "Economii",
  "admin/installments.description": "Valori disponibile pentru interpolare: '{installmentsNumber}, {installmentValue}, {installmentsTotalValue}, {interestRate}, {hasInterest}, {paymentSystemName}'",
  "admin/installments.title": "Rate",
  "admin/installments-list-item.title": "Rate",
  "admin/list-price-range.title": "Intervalul prețului de listă",
  "admin/list-price-range-message.description": "Mesaj de afișat atunci când există o diferență de preț între SKU-uri. \nValori disponibile pentru interpolare: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "Preț de listă (Interval)",
  "admin/list-price-range-no-range-message.description": "Mesaj de afișat atunci când nu există o diferență de preț între SKU-uri. \nValori disponibile pentru interpolare: '{listPriceValue}, {listPriceWithTax}'",
  "admin/list-price-range-no-range-message.title": "Preț de listă (Fără interval)",
  "admin/selling-price-range.title": "Interval preț de vânzare",
  "admin/selling-price-range-message.description": "Mesaj de afișat atunci când există o diferență de preț între SKU-uri. \nValori disponibile pentru interpolare: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "Preț de vânzare (Interval)",
  "admin/selling-price-range-no-range-message.description": "Mesaj de afișat atunci când nu există o diferență de preț între SKU-uri. \nValori disponibile pentru interpolare: '{sellingPriceValue}, {sellingPriceWithTax}'",
  "admin/selling-price-range-no-range-message.title": "Preț de vânzare (Fără interval)"
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/de-DE.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "Preis bei Einmalzahlung: {spotPriceValue}",
  "store/spot-price-savings.default": "Ersparnis bei Einmalzahlung: {spotPriceSavingsValue}",
  "store/savings.default": "Spare {savingsValue}",
  "store/installments.default": "Bis zu {installmentsNumber}x {installmentValue}{hasInterest, select, true {, {interestRate} Zinsen} false { zinsfrei}}",
  "store/list-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "Verkauft von: {sellerName}",
  "admin/list-price.description": "Verfügbare Werte für Interpolation: '{listPriceValue}, {listPriceWithTax}, {taxPercentage}'",
  "admin/list-price.title": "Listenpreis",
  "admin/seller-name.title": "Verkäufer",
  "admin/seller-name.description": "Verfügbare Werte für Interpolation: '{sellerName}'",
  "admin/selling-price.description": "Verfügbare Werte für Interpolation: '{sellingPriceValue}, {sellingPriceWithTax}, {taxPercentage}, {hasListPrice}, {hasMeasurementUnit}, {measurementUnit}, {hasUnitMultiplier}, {unitMultiplier}'",
  "admin/selling-price.title": "Verkaufspreis",
  "admin/spot-price.description": "Verfügbare Werte für Interpolation: '{spotPrice}'",
  "admin/spot-price.title": "Preis bei Einmalzahlung",
  "admin/spot-price-savings.description": "Verfügbare Werte für Interpolation: '{previousPriceValue}, {newSpotPriceValue}, {spotPriceSavingsValue}, {spotPriceSavingsWithTax}, {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "Ersparnis bei Einmalzahlung",
  "admin/savings.description": "Verfügbare Werte für Interpolation: '{newPriceValue}, {previousPriceValue}, {savingsValue}, {savingsPercentage}, {savingsWithTax}'",
  "admin/savings.title": "Ersparnis",
  "admin/installments.description": "Verfügbare Werte für Interpolation: '{installmentsNumber}, {installmentValue}, {installmentsTotalValue}, {interestRate}, {hasInterest}, {paymentSystemName}'",
  "admin/installments.title": "Ratenzahlung",
  "admin/installments-list-item.title": "Ratenzahlung",
  "admin/list-price-range.title": "Listenpreis (Bereich)",
  "admin/list-price-range-message.description": "Nachricht, die angezeigt wird, wenn es eine Preisdifferenz zwischen den SKUs gibt.\nVerfügbare Werte für Interpolation: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "Listenpreis (Spektrum)",
  "admin/list-price-range-no-range-message.description": "Nachricht, die angezeigt wird, wenn es keinen Preisunterschied zwischen den SKUs gibt.\nWerte für Interpolation: '{listPriceValue}, {listPriceWithTax}'",
  "admin/list-price-range-no-range-message.title": "Listenpreis (ohne Bereich)",
  "admin/selling-price-range.title": "Verkaufspreis (Bereich)",
  "admin/selling-price-range-message.description": "Nachricht, die angezeigt wird, wenn es eine Preisdifferenz zwischen den SKUs gibt.\nVerfügbare Werte für Interpolation: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "Verkaufspreis (Spektrum)",
  "admin/selling-price-range-no-range-message.description": "Nachricht, die angezeigt wird, wenn es keinen Preisunterschied zwischen den SKUs gibt.\nWerte für Interpolation: '{sellingPriceValue}, {sellingPriceWithTax}'",
  "admin/selling-price-range-no-range-message.title": "Verkaufspreis (ohne Bereich)"
}
```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/fr-FR.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "Prix payé en intégralité : {spotPriceValue}",
  "store/spot-price-savings.default": "Économies réalisées grâce au paiement intégral : {spotPriceSavingsValue}",
  "store/savings.default": "Sauvegarder {savingsValue}",
  "store/installments.default": "Jusqu’à {installmentsNumber}x {installmentValue}{hasInterest, select, true {, {interestRate} of interest} false { interest-free}}\"",
  "store/list-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "Vendu par : {sellerName}",
  "admin/list-price.description": "Valeurs disponibles pour l’interpolation : '{listPriceValue}, {listPriceWithTax}, {taxPercentage}'",
  "admin/list-price.title": "Liste de prix",
  "admin/seller-name.title": "Nom du vendeur",
  "admin/seller-name.description": "Valeurs disponibles pour l'interpolation : '{sellerName}'",
  "admin/selling-price.description": "Valeurs disponibles pour l’interpolation : '{sellingPriceValue}, {sellingPriceWithTax}, {taxPercentage}, {hasListPrice}'",
  "admin/selling-price.title": "Prix de vente",
  "admin/spot-price.description": "Valeurs disponibles pour l'interpolation : '{spotPrice}'",
  "admin/spot-price.title": "Prix payé en intégralité",
  "admin/spot-price-savings.description": "Valeurs disponibles pour l'interpolation : '{previousPriceValue}, {newSpotPriceValue}, {spotPriceSavingsValue}, {spotPriceSavingsWithTax}, {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "Économies réalisées grâce au paiement intégral",
  "admin/savings.description": "Valeurs disponibles pour l’interpolation : '{newPriceValue}, {previousPriceValue}, {savingsValue}, {savingsPercentage}, {savingsWithTax}'",
  "admin/savings.title": "Économies",
  "admin/installments.description": "Valeurs disponibles pour l’interpolation : '{installmentsNumber}, {installmentValue}, {installmentsTotalValue}, {interestRate}, {hasInterest}, {paymentSystemName}'",
  "admin/installments.title": "Versements",
  "admin/installments-list-item.title": "Versements",
  "admin/list-price-range.title": "Lister la gamme de prix",
  "admin/list-price-range-message.description": "Message à afficher lorsqu’il y a une différence de prix entre les SKU.\nValeurs disponibles pour l’interpolation : '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "Liste de prix (Gamme)",
  "admin/list-price-range-no-range-message.description": "Message à afficher lorsqu’il n’y a pas de différence de prix entre les SKU.\nValeurs disponibles pour l’interpolation : \"{listPriceValue}, {listPriceWithTax}\"",
  "admin/list-price-range-no-range-message.title": "Lister de prix (Pas de gamme)",
  "admin/selling-price-range.title": "Gamme de prix de vente",
  "admin/selling-price-range-message.description": "Message à afficher lorsqu’il y a une différence de prix entre les SKU.\nValeurs disponibles pour l’interpolation : '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "Prix de vente (Gamme)",
  "admin/selling-price-range-no-range-message.description": "Message à afficher lorsqu’il n’y a pas de différence de prix entre les SKU.\nValeurs disponibles pour l’interpolation : '{sellingPriceValue}, {sellingPriceWithTax}'",
  "admin/selling-price-range-no-range-message.title": "Prix de vente (Pas de gamme)"
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/nl-NL.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "Volledige prijs betaald: {spotPriceValue}",
  "store/spot-price-savings.default": "Bespaard door volledig te betalen: {spotPriceSavingsValue}",
  "store/savings.default": "Bewaar {savingsValue}",
  "store/installments.default": "Tot {installmentsNumber}x {installmentValue}{hasInterest, select, true {, {interestRate} of interest} false { interest-free}}",
  "store/list-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "Verkocht door: {sellerName}",
  "admin/list-price.description": "Waarden beschikbaar voor interpolatie: '{listPriceValue}, {listPriceWithTax}, {taxPercentage}'",
  "admin/list-price.title": "Lijstprijs",
  "admin/seller-name.title": "Naam van verkoper",
  "admin/seller-name.description": "Waarden beschikbaar voor interpolatie: '{sellerName}'",
  "admin/selling-price.description": "Waarden beschikbaar voor interpolatie: '{sellingPriceValue}, {sellingPriceWithTax}, {taxPercentage}, {hasListPrice}'",
  "admin/selling-price.title": "Verkoopprijs",
  "admin/spot-price.description": "Waarden beschikbaar voor interpolatie: '{spotPrice}'",
  "admin/spot-price.title": "Betaald-in-volledige prijs",
  "admin/spot-price-savings.description": "Waarden beschikbaar voor interpolatie: '{previousPriceValue}, {newSpotPriceValue}, {spotPriceSavingsValue}, {spotPriceSavingsWithTax}, {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "Bespaard door volledig te betalen",
  "admin/savings.description": "Waarden beschikbaar voor interpolatie: '{newPriceValue}, {previousPriceValue}, {savingsValue}, {savingsPercentage}, {savingsWithTax}'",
  "admin/savings.title": "Besparingen",
  "admin/installments.description": "Waarden beschikbaar voor interpolatie: '{installmentsNumber}, {installmentValue}, {installmentsTotalValue}, {interestRate}, {hasInterest}, {paymentSystemName}'",
  "admin/installments.title": "Termijnen",
  "admin/installments-list-item.title": "Termijnen",
  "admin/list-price-range.title": "Bereik prijslijst",
  "admin/list-price-range-message.description": "Bericht dat moet worden getoond wanneer er een prijsverschil is tussen de SKU's.\nWaarden beschikbaar voor interpolatie: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "Lijstprijs (bereik)",
  "admin/list-price-range-no-range-message.description": "Bericht die moet worden getoond wanneer er geen prijsverschil is tussen de SKU's.\nWaarden beschikbaar voor interpolatie: '{listPriceValue}, {listPriceWithTax}'",
  "admin/list-price-range-no-range-message.title": "Lijstprijs (geen bereik)",
  "admin/selling-price-range.title": "Bereik verkoopprijs",
  "admin/selling-price-range-message.description": "Bericht dat moet worden weergegeven als er een prijsverschil is tussen de SKU's.\nWaarden die beschikbaar zijn voor interpolatie: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "Verkoopprijs (bereik)",
  "admin/selling-price-range-no-range-message.description": "Bericht dat wordt getoond wanneer er geen prijsverschil is tussen de SKU's.\nWaarden beschikbaar voor interpolatie: '{sellingPriceValue}, {sellingPriceWithTax}'",
  "admin/selling-price-range-no-range-message.title": "Verkoopprijs (geen bereik)"
}

```


[System] You are an expert VTEX IO developer. You specialize in building VTEX Store Framework apps, React components, GraphQL APIs, and Node.js services for e-commerce platforms.

[User] Show me the implementation of product-price/messages/es.json from the product-price VTEX app.

[Assistant]
Here's the implementation:

```json
{
  "store/list-price.default": "{listPriceValue}",
  "store/selling-price.default": "{sellingPriceValue}",
  "store/spot-price.default": "Precio al contado: {spotPriceValue}",
  "store/spot-price-savings.default": "Ahorros por pago al contado: {spotPriceSavingsValue}",
  "store/savings.default": "Ahorra {savingsValue}",
  "store/installments.default": "Hasta {installmentsNumber}x {installmentValue}{hasInterest, select, true {, {interestRate} de interés} false { sin interés}}",
  "store/list-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/list-price-range-no-range-message.default": "{listPriceValue}",
  "store/selling-price-range-message.default": "{minPriceValue} - {maxPriceValue}",
  "store/selling-price-range-no-range-message.default": "{sellingPriceValue}",
  "store/seller-name.default": "Vendido por: {sellerName}",
  "admin/list-price.description": "Valores disponibles para interpolación: '{listPriceValue}, {listPriceWithTax}, {taxPercentage}'",
  "admin/list-price.title": "Precio de lista",
  "admin/seller-name.title": "Nombre del seller",
  "admin/seller-name.description": "Valores disponibles para interpolación: '{sellerName}'",
  "admin/selling-price.description": "Valores disponibles para interpolación: '{sellingPriceValue}, {sellingPriceWithTax}, {taxPercentage}, {hasListPrice}, {hasMeasurementUnit}, {measurementUnit}, {hasUnitMultiplier}, {unitMultiplier}'",
  "admin/selling-price.title": "Precio de venta",
  "admin/spot-price.description": "Valores disponibles para interpolación: '{spotPrice}'",
  "admin/spot-price.title": "Precio al contado",
  "admin/spot-price-savings.description": "Valores disponibles para interpolación: '{previousPriceValue}, {newSpotPriceValue}, {spotPriceSavingsValue}, {spotPriceSavingsWithTax}, {spotPriceSavingsPercentage}'",
  "admin/spot-price-savings.title": "Ahorro por pago al contado",
  "admin/savings.description": "Valores disponibles para interpolación: '{newPriceValue}, {previousPriceValue}, {savingsValue}, {savingsPercentage}, {savingsWithTax}'",
  "admin/savings.title": "Ahorros",
  "admin/installments.description": "Valores disponibles para interpolación: '{installmentsNumber}, {installmentValue}, {installmentsTotalValue}, {interestRate}, {hasInterest}, {paymentSystemName}'",
  "admin/installments.title": "Cuotas",
  "admin/installments-list-item.title": "Cuotas",
  "admin/list-price-range.title": "Rango del precio de lista",
  "admin/list-price-range-message.description": "Mensaje que se mostrará cuando haya una diferencia de precio entre los SKU.\nValores disponibles para interpolación: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/list-price-range-message.title": "Precio de lista (rango)",
  "admin/list-price-range-no-range-message.description": "Mensaje que se mostrará cuando no haya una diferencia de precio entre los SKU. Valores disponibles para interpolación: '{listPriceValue}, {listPriceWithTax}'",
  "admin/list-price-range-no-range-message.title": "Precio de lista (sin rango)",
  "admin/selling-price-range.title": "Rango de precio de venta",
  "admin/selling-price-range-message.description": "Mensaje que se mostrará cuando haya una diferencia de precio entre los SKU.\nValores disponibles para interpolación: '{minPriceValue}, {maxPriceValue}, {minPriceWithTax}, {maxPriceWithTax}'",
  "admin/selling-price-range-message.title": "Precio de venta (rango)",
  "admin/selling-price-range-no-range-message.description": "Mensaje que se mostrará cuando no haya una diferencia de precio entre los SKU.\nValores disponibles para interpolación: '{sellingPriceValue}, {sellingPriceWithTax}'",
  "admin/selling-price-range-no-range-message.title": "Precio de venta (rango)",
  "store/product-price.price-savings.aria-label": "Precio de {previousPriceValue} por {newPriceValue}"
}
```