# Custom region/language

Batch allows you to set a custom region or a custom language that will override the value detected by the SDK. By default, Batch collects the language and the country of your users' devices.

Setting a custom region/language is useful if:

* You don't want to use the values detected by Batch.
* Your users can choose their own language or region for localization purposes.

![Custom locale](https://38998153-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCL8wF0y1T2vLnm3yR2MW%2Fuploads%2FZLTLLJJBqoHUYUPKvYy5%2Fandroid_locale_settings_screenshot.png?alt=media\&token=a56c91a5-9b6a-4b50-91d4-b46be99d0da6)

**Writing custom region/language**

{% tabs %}
{% tab title="Kotlin" %}

```kotlin
Batch.Profile.editor().apply {
   setLanguage("en") // Language must be 2 chars, lowercase, ISO 639 formatted
   setRegion("US") // Region must be 2 chars, uppercase, ISO 3166 formatted
   save()
}
```

{% endtab %}

{% tab title="Java" %}

```java
Batch.Profile.editor()
    .setLanguage("en") // Language must be 2 chars, lowercase, ISO 639 formatted
    .setRegion("US") // Region must be 2 chars, uppercase, ISO 3166 formatted
    .save();
}
```

{% endtab %}
{% endtabs %}

**Reading custom region/language**

Keep in mind that the data returned is only about your installation and not your Profile since it may be updated from another source.

{% tabs %}
{% tab title="Kotlin" %}

```kotlin
// This is how you retrieve your custom values. Values are nil by default.
val language: String? = Batch.User.getLanguage(context)
val region: String? = Batch.User.getRegion(context)
```

{% endtab %}

{% tab title="Java" %}

```java
// This is how you retrieve your custom values. Values are nil by default.
String language = Batch.User.getLanguage(context);
String region = Batch.User.getRegion(context);
```

{% endtab %}
{% endtabs %}
