---
title: "Localization: Change languages in Android PDF viewer | Nutrient"
canonical_url: "https://www.nutrient.io/guides/android/features/localization/"
md_url: "https://www.nutrient.io/guides/android/features/localization.md"
last_updated: "2026-05-30T02:20:01.177Z"
description: "Localization: Change languages in Android PDF viewer | guide for Nutrient Android SDK with detailed instructions and code examples."
---

# Localization: Change languages in our Android PDF viewer

Nutrient Android SDK comes with many built-in languages:

- Arabic (ar)

- Chinese Simplified / Chinese Traditional (zh-Hans/zh-Hant)

- Croatian (hr)

- Czech (cs)

- Danish (da)

- Dutch (nl)

- English (en)

- English United Kingdom (en-GB)

- Finnish (fi)

- French (fr)

- French Canada (fr-CA)

- German (de)

- Greek (el)

- Hebrew (he)

- Indonesian (id)

- Italian (it)

- Japanese (ja)

- Korean (ko)

- Malay (ms)

- Norwegian Bokmål (nb-NO)

- Polish (pl)

- Portuguese Brazil / Portugal (pt-BR/pt-PT)

- Russian (ru)

- Slovak (sk)

- Slovenian (sl)

- Spanish (es)

- Swedish (sv)

- Thai (th)

- Turkish (tr)

- Ukrainian (uk)

- Welsh (cy)

## Adding Additional Localization to Nutrient

You can add additional translations by putting them into the `res/strings-XX` directory of your app. Android will automatically merge all string resources at build time. You can also override Nutrient strings of existing languages by putting them into the respective string folders.

To see a list of all available Nutrient string resources, take a look at the extracted library AAR file in your project's build folder at `app/build/intermediates/incremental/mergeDebugResources/merged.dir/values`.

## Forcing a specific language

Nutrient uses [localized string resources](http://developer.android.com/guide/topics/resources/localization.html#resource-switching) so that Android can automatically select the correct [`Locale`](http://developer.android.com/reference/java/util/Locale.html) based on the device’s system language and region. To force an app-wide locale different from the system’s locale, your application needs to modify Android’s resource [`Configuration`](http://developer.android.com/reference/android/content/res/Configuration.html) using a custom [`Application`](http://developer.android.com/reference/android/app/Application.html) class:

### MYAPPLICATION.KT

```kt

/**
 * Custom application using a fixed `{@link Locale}`.
 */
class MyApplication : Application() {

    /**
     * This example uses a hardcoded, fixed locale. Your app could also implement
     * a language switcher instead.
     */
    val USED_APP_LOCALE = Locale.GERMAN

    override fun onCreate() {
        super.onCreate()

        // Set the locale initially when the app is launched.
        setAppLocale(USED_APP_LOCALE)
    }

    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)

        // Reapply the locale every time the app’s configuration changes
        // (e.g. due to the user changing the device’s locale).
        setAppLocale(USED_APP_LOCALE)
    }

    /**
     * Sets the app-wide `{@link Locale}`.
     */
    private fun setAppLocale(locale: Locale) {
        val configuration = Configuration()

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            configuration.setLocale(locale)
        } else {
            configuration.locale = locale
        }

        // This will not replace the app configuration, but will merely
        // merge the chosen locale into the existing configuration.
        resources.updateConfiguration(configuration, null)
    }
}

```

### MYAPPLICATION.JAVA

```java

/**
 * Custom application using a fixed `{@link Locale}`.
 */
public class MyApplication extends Application {

    /**
     * This example uses a hardcoded, fixed locale. Your app could also implement
     * a language switcher instead.
     */
    private static final Locale USED_APP_LOCALE = Locale.GERMAN;

    @Override public void onCreate() {
        super.onCreate();

        // Set the locale initially when the app is launched.
        setAppLocale(USED_APP_LOCALE);
    }

    @Override public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        // Reapply the locale every time the app’s configuration changes
        // (e.g. due to the user changing the device’s locale).
        setAppLocale(USED_APP_LOCALE);
    }

    /**
     * Sets the app-wide `{@link Locale}`.
     */
    private void setAppLocale(Locale locale) {
        final Configuration configuration = new Configuration();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            configuration.setLocale(locale);
        } else {
            configuration.locale = locale;
        }

        // This will not replace the app configuration, but will merely
        // merge the chosen locale into the existing configuration.
        getResources().updateConfiguration(configuration, null);
    }
}

```

To tell Android it should use your custom `MyApplication` class, you need to define it within your app’s `AndroidManifest.xml`:

```xml

<?xml version="1.0" encoding="utf-8"?>
<manifest
    package="com.pspdfkit.examples.locale"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <application android:name=".MyApplication">...

    </application>

</manifest>

```
---

## Related pages

- [Customizing the form editing toolbar on Android](/guides/android/customizing-the-interface/using-form-ui-within-fragment.md)
- [Customizing PDF viewer styling on Android](/guides/android/customizing-the-interface/appearance-styling.md)
- [Customizing our PDF viewer on Android](/guides/android/user-interface.md)
- [Customizing the note editor on Android](/guides/android/customizing-the-interface/customizing-the-note-editor.md)
- [Customize toolbar menus on Android](/guides/android/customizing-the-interface/customizing-menus.md)
- [Hide or customize scrollbars in our Android viewer](/guides/android/customizing-the-interface/scrollbars.md)
- [Overlay views on Android](/guides/android/features/overlay-views.md)
- [Separate the document info view in our Android viewer](/guides/android/user-interface/separate-document-info.md)
- [Customizing dialog modals on Android](/guides/android/customizing-the-interface/modal-dialogs-styling.md)
- [Customizing the electronic signature UI on Android](/guides/android/customizing-the-interface/configuring-the-signaturepickerfragment.md)
- [Show or hide the UI in our Android viewer](/guides/android/customizing-the-interface/user-interface-visibility.md)
- [Customizing the thumbnail file viewer on Android](/guides/android/customizing-the-interface/customizing-the-thumbnail-bar.md)

