---
title: "Использование локализаций и кодов локали в Android SDK"
description: "Управление локализациями и кодами локали для охвата глобальной аудитории (Android)."
---

## Почему это важно \{#why-this-is-important\}

Коды локали используются в нескольких сценариях — например, когда нужно получить правильный пейвол для текущей локализации приложения.

Поскольку коды локали устроены непросто и могут различаться в зависимости от платформы, мы используем внутренний стандарт для всех поддерживаемых платформ. Тем не менее именно из-за этой сложности важно понимать, что именно вы отправляете на наш сервер и что происходит дальше — чтобы всегда получать ожидаемый результат.

## Стандарт кодов локали в Adapty \{#locale-code-standard-at-adapty\}

Для кодов локали Adapty использует слегка модифицированный стандарт [BCP 47](https://en.wikipedia.org/wiki/IETF_language_tag): каждый код состоит из подтегов в нижнем регистре, разделённых дефисами. Примеры: `en` (английский), `pt-br` (португальский (Бразилия)), `zh` (упрощённый китайский), `zh-hant` (традиционный китайский).

## Сопоставление кодов локали \{#locale-code-matching\}

Когда Adapty получает запрос от клиентского SDK с кодом локали и начинает искать соответствующую локализацию пейвола, происходит следующее:

1. Входящая строка локали приводится к нижнему регистру, а все символы подчёркивания (`_`) заменяются дефисами (`-`)
2. Затем выполняется поиск локализации с полностью совпадающим кодом локали
3. Если совпадений не найдено, берётся подстрока до первого дефиса (`pt` для `pt-br`) и выполняется поиск по ней
4. Если совпадений снова не найдено, возвращается локализация по умолчанию — `en`

Таким образом устройство iOS, отправившее `'pt_BR'`, устройство Android, отправившее `pt-BR`, и другое устройство, отправившее `pt-br`, получат одинаковый результат.

## Рекомендуемый способ реализации локализаций \{#implementing-localizations-recommended-way\}

Если вас интересуют локализации, скорее всего, вы уже работаете с файлами локализованных строк в своём проекте. В таком случае мы рекомендуем добавить в каждый из этих файлов пару ключ-значение с нужным кодом локали Adapty для соответствующей локализации, а затем извлекать значение по этому ключу при вызове нашего SDK:

```kotlin showLineNumbers
// 1. Modify your strings.xml files

/*
strings.xml - Spanish
*/
<string name="adapty_paywalls_locale">es</string>

/*
strings.xml - Portuguese (Brazil)
*/
<string name="adapty_paywalls_locale">pt-br</string>

// 2. Extract and use the locale code

val localeCode = context.getString(R.string.adapty_paywalls_locale)
// pass locale code to AdaptyUI.getViewConfiguration or Adapty.getPaywall method
```

Это позволяет полностью контролировать, какая локализация будет загружена для каждого пользователя вашего приложения.

## Альтернативный способ реализации локализаций \{#implementing-localizations-the-other-way\}

Похожего (но не идентичного) результата можно добиться без явного определения кодов локали для каждой локализации. Для этого можно извлечь код локали из других объектов, предоставляемых платформой:

```kotlin showLineNumbers
val locale = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
    context.resources.configuration.locales[0]
else
    context.resources.configuration.locale

val localeCode = locale.toLanguageTag()
// pass locale code to AdaptyUI.getViewConfiguration or Adapty.getPaywall method
```

Обратите внимание: этот подход мы не рекомендуем, поскольку сложно предсказать, что именно получит сервер Adapty.

Если вы всё же решите использовать этот подход — убедитесь, что учли все актуальные сценарии использования.