---
title: "Android SDKでローカライゼーションとロケールコードを使用する"
description: "アプリのローカライゼーションとロケールコードを管理して、グローバルなユーザーにリーチしましょう（Android）。"
---

## なぜこれが重要なのか \{#why-this-is-important\}

ロケールコードが関係するシナリオはいくつかあります。たとえば、アプリの現在のローカライゼーションに対応する正しいペイウォールを取得しようとする場合などです。

ロケールコードは複雑で、プラットフォームによって異なる場合があるため、Adapty ではサポートするすべてのプラットフォームに対して内部標準を採用しています。ただし、これらのコードが複雑であることから、サーバーに送信している内容と、その後の処理を正確に把握しておくことが非常に重要です。そうすることで、常に期待通りの結果を受け取れます。

## 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-br` の場合は `pt`）を取り出し、一致するローカライゼーションを検索します
4. それでも一致するものが見つからない場合、デフォルトの `en` ローカライゼーションを返します

これにより、`'pt_BR'` を送信した iOS デバイス、`pt-BR` を送信した Android デバイス、`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 のサーバーが受け取る内容を正確に予測することが難しいため、推奨していません。

それでもこの方法を使用する場合は、関連するすべてのユースケースに対応していることを確認してください。