# 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%2F3UcNQrwKoaTqZ7nS8qhm%2Fios_locale_settings_screenshot.png?alt=media\&token=1795c4ed-4385-4ab1-99b7-313d0847b2a3)

**Writing custom region/language**

Here is how to set a custom region/language:

```dart
BatchProfile.instance.newEditor()
  .setLanguage("en") // Language must be 2 chars, lowercase, ISO 639 formatted
  .setRegion("US") // Region must be 2 chars, uppercase, ISO 3166 formatted
  .save();
```

To unset the custom language/region, use `null`.

**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.

```dart
    // Result might be 'null' if Batch isn't started or if no override has been set
    var region = await BatchUser.instance.language ?? 'none';
    var region = await BatchUser.instance.region ?? 'none';
```
