> Documentation index: [Saleor](/llms.txt) · [This section](/api-usage/llms.txt)
> Source: https://docs.saleor.io/api-usage/i18n

# Internationalization

<a id="overview"></a>

## Overview

Localizing a storefront consists of multiple steps:

-   Translating the **storefront** application.
-   Translating the **products catalog** and other data returned by the API.
-   Localizing display formats of **prices**, **dates**, and other data in the storefront.
-   Localizing **address** input.
-   Localizing **payment** and **shipping** methods.

<a id="translating-the-storefront-application"></a>

## Translating the storefront application

For web applications, you can manage the frontend part using libraries like [Format.JS](https://formatjs.io). The resulting catalog files can be edited manually or using an external service like [Transifex](https://www.transifex.com).

<a id="translating-the-product-catalog"></a>

## Translating the product catalog

For translating database data, Saleor delivers specialized translation objects that can you can modify in the dashboard or using the API.

-   [`ProductTranslation`](/api-reference/products/objects/product-translation.md)
-   [`CollectionTranslation`](/api-reference/products/objects/collection-translation.md)
-   [`CategoryTranslation`](/api-reference/products/objects/category-translation.md)
-   [`AttributeTranslation`](/api-reference/attributes/objects/attribute-translation.md)
-   [`AttributeValueTranslation`](/api-reference/attributes/objects/attribute-value-translation.md)
-   [`ProductVariantTranslation`](/api-reference/products/objects/product-variant-translation.md)
-   [`PageTranslation`](/api-reference/pages/objects/page-translation.md)
-   [`ShippingMethodTranslation`](/api-reference/shipping/objects/shipping-method-translation.md)
-   [`SaleTranslation`](/api-reference/discounts/objects/sale-translation.md)
-   [`VoucherTranslation`](/api-reference/discounts/objects/voucher-translation.md)
-   [`MenuItemTranslation`](/api-reference/menu/objects/menu-item-translation.md)

<a id="fetching-translated-data"></a>

### Fetching translated data

Here's an example fetching the Polish translation of an existing category. A `translation` field in the [`Category`](/api-reference/products/objects/category.md) model takes a `languageCode` argument with one of the values defined by [`LanguageCodeEnum`](/api-reference/miscellaneous/enums/language-code-enum.md):

```graphql
query {
  category(id: "Q2F0ZWdvcnk6OQ==") {
    name
    seoDescription
    translation(languageCode: PL) {
      name
      seoDescription
    }
  }
}
```

Response:

```json
{
  "data": {
    "category": {
      "name": "Shoes",
      "seoDescription": "They go on your feet.",
      "translation": {
        "name": "Buty",
        "seoDescription": null
      }
    }
  }
}
```

Fields that were not translated will return `null`, and it's up to you to implement the correct fallback mechanism.

<a id="localizing-prices-and-dates"></a>

## Localizing prices and dates

Prices and dates can be localized using [`Intl.NumberFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat) and [date-fns](https://date-fns.org).

<a id="localizing-address-input"></a>

## Localizing address input

Saleor provides an [`AddressInput`](/api-reference/miscellaneous/inputs/address-input.md) type that you can use to collect address data from the user. It offers fields to store the country, city, postal code, and street address. Which fields to show and how to label them can be determined by querying the address validation API.

For more details, see documentation on [address validation](/developer/address.md).

<a id="localizing-payment-and-shipping"></a>

## Localizing payment and shipping

Payment and shipping methods are configured per channel, and you can use channels to model different combinations of payment and shipping.

See the sections above for information on how to translate shipping method names.

Most payment service providers support localization and will provide names and methods suitable for the user's locale. For example, Stripe automatically handles [payment method availability based on the user's country](https://stripe.com/docs/connect/payment-method-available-countries).
