---
description: Capacitor plugin to manage the app's language override independently of the device language on Android and iOS.
title: Capacitor App Language Plugin for Android & iOS - Capawesome
image: https://capawesome.io/docs/assets/images/social/sdks/capacitor/app-language.png
---

<!doctype html> 

[Skip to content ](#capacitor-app-language-plugin) 

[🔐 Introducing the **Capacitor Vault** plugin — store secrets behind biometrics or a device passcode. ](/blog/announcing-the-capacitor-vault-plugin/) 

* [ SDKs ](/docs/sdks/)
* [ iOS ](#ios)
* [ Configuration ](#configuration)
* [ Usage ](#usage)
* [ API ](#api)
* [ Platform Behavior ](#platform-behavior)
* [ Changelog ](#changelog)
* [ License ](#license)
* [ App Review ](/docs/sdks/capacitor/app-review/)
* [ App Shortcuts ](/docs/sdks/capacitor/app-shortcuts/)
* [ App Tracking Transparency ](/docs/sdks/capacitor/app-tracking-transparency/)
* [ App Update ](/docs/sdks/capacitor/app-update/)
* [ Apple Sign-In ](/docs/sdks/capacitor/apple-sign-in/)
* [ Asset Manager ](/docs/sdks/capacitor/asset-manager/)
* [ Audio Player ](/docs/sdks/capacitor/audio-player/)
* [ Audio Recorder ](/docs/sdks/capacitor/audio-recorder/)
* [ Audio Session ](/docs/sdks/capacitor/audio-session/)
* [ Background Task ](/docs/sdks/capacitor/background-task/)
* [ Badge ](/docs/sdks/capacitor/badge/)
* [ Barometer ](/docs/sdks/capacitor/barometer/)
* [ Battery ](/docs/sdks/capacitor/battery/)
* [ Biometrics ](/docs/sdks/capacitor/biometrics/)
* [ Bluetooth Low Energy ](/docs/sdks/capacitor/bluetooth-low-energy/)
* [ Cloudinary ](/docs/sdks/capacitor/cloudinary/)
* [ Compass ](/docs/sdks/capacitor/compass/)
* [ Contacts ](/docs/sdks/capacitor/contacts/)
* [ Datetime Picker ](/docs/sdks/capacitor/datetime-picker/)
* [ Facebook Sign-In ](/docs/sdks/capacitor/facebook-sign-in/)
* [ File Compressor ](/docs/sdks/capacitor/file-compressor/)
* [ File Opener ](/docs/sdks/capacitor/file-opener/)
* [ File Picker ](/docs/sdks/capacitor/file-picker/)
* [ Firebase ](/docs/sdks/capacitor/firebase/)
* [ Formbricks ](/docs/sdks/capacitor/formbricks/)
* [ Geocoder ](/docs/sdks/capacitor/geocoder/)
* [ Google Sign-In ](/docs/sdks/capacitor/google-sign-in/)
* [ Grafana Faro ](/docs/sdks/capacitor/grafana-faro/)
* [ Gyroscope ](/docs/sdks/capacitor/gyroscope/)
* [ In-App Browser ](/docs/sdks/capacitor/in-app-browser/)
* [ Install Referrer ](/docs/sdks/capacitor/install-referrer/)
* [ Keep Awake ](/docs/sdks/capacitor/keep-awake/)
* [ libSQL ](/docs/sdks/capacitor/libsql/)
* [ Live Update ](/docs/sdks/capacitor/live-update/)
* [ Localization ](/docs/sdks/capacitor/localization/)
* [ Mail Composer ](/docs/sdks/capacitor/mail-composer/)
* [ Managed Configurations ](/docs/sdks/capacitor/managed-configurations/)
* [ Maps Launcher ](/docs/sdks/capacitor/maps-launcher/)
* [ Media Session ](/docs/sdks/capacitor/media-session/)
* [ ML Kit ](/docs/sdks/capacitor/mlkit/)
* [ Navigation Bar ](/docs/sdks/capacitor/navigation-bar/)
* [ NFC ](/docs/sdks/capacitor/nfc/)
* [ Node.js ](/docs/sdks/capacitor/nodejs/)
* [ OAuth ](/docs/sdks/capacitor/oauth/)
* [ Passkeys ](/docs/sdks/capacitor/passkeys/)
* [ Password Autofill ](/docs/sdks/capacitor/password-autofill/)
* [ Pedometer ](/docs/sdks/capacitor/pedometer/)
* [ Photo Editor ](/docs/sdks/capacitor/photo-editor/)
* [ PixLive ](/docs/sdks/capacitor/pixlive/)
* [ PostHog ](/docs/sdks/capacitor/posthog/)
* [ Printer ](/docs/sdks/capacitor/printer/)
* [ Privacy Screen ](/docs/sdks/capacitor/privacy-screen/)
* [ Purchases ](/docs/sdks/capacitor/purchases/)
* [ RealtimeKit ](/docs/sdks/capacitor/realtimekit/)
* [ Root Detection ](/docs/sdks/capacitor/root-detection/)
* [ Screen Brightness ](/docs/sdks/capacitor/screen-brightness/)
* [ Screen Orientation ](/docs/sdks/capacitor/screen-orientation/)
* [ Screenshot ](/docs/sdks/capacitor/screenshot/)
* [ Secure Preferences ](/docs/sdks/capacitor/secure-preferences/)
* [ Shake ](/docs/sdks/capacitor/shake/)
* [ Silent Mode ](/docs/sdks/capacitor/silent-mode/)
* [ SIM ](/docs/sdks/capacitor/sim/)
* [ SMS Composer ](/docs/sdks/capacitor/sms-composer/)
* [ Speech Recognition ](/docs/sdks/capacitor/speech-recognition/)
* [ Speech Synthesis ](/docs/sdks/capacitor/speech-synthesis/)
* [ Share Target ](/docs/sdks/capacitor/share-target/)
* [ Square Mobile Payments ](/docs/sdks/capacitor/square-mobile-payments/)
* [ SQLite ](/docs/sdks/capacitor/sqlite/)
* [ Superwall ](/docs/sdks/capacitor/superwall/)
* [ Thermal State ](/docs/sdks/capacitor/thermal-state/)
* [ Torch ](/docs/sdks/capacitor/torch/)
* [ Vault ](/docs/sdks/capacitor/vault/)
* [ Volume ](/docs/sdks/capacitor/volume/)
* [ Wallet ](/docs/sdks/capacitor/wallet/)
* [ Wifi ](/docs/sdks/capacitor/wifi/)
* [ Zip ](/docs/sdks/capacitor/zip/)
* [ Cordova ](/docs/sdks/cordova/)
* [ Cloud ](/docs/cloud/)
* [ Integrations ](/docs/cloud/live-updates/integrations/)
* Concepts
* Reference
* [ Troubleshooting ](/docs/cloud/live-updates/troubleshooting/)
* [ FAQ ](/docs/cloud/live-updates/faq/)
* [ Native Builds ](/docs/cloud/native-builds/)
* [ Set Up Environments ](/docs/cloud/native-builds/environments/)
* [ Overwrite Native Configurations ](/docs/cloud/native-builds/native-configurations/)
* [ Auto-Increment Build Numbers ](/docs/cloud/native-builds/auto-incrementing-build-numbers/)
* [ Configure the Web Build Script ](/docs/cloud/native-builds/web-build-script/)
* [ Build from a Monorepo ](/docs/cloud/native-builds/monorepo/)
* [ Use pnpm, Yarn, or bun ](/docs/cloud/native-builds/package-managers/)
* [ Install Private npm Packages ](/docs/cloud/native-builds/npm-private-registry/)
* [ Override the Java Version ](/docs/cloud/native-builds/override-java-version/)
* [ Custom iOS Provisioning Profiles ](/docs/cloud/native-builds/custom-ios-provisioning-profiles/)
* [ Build without Git ](/docs/cloud/native-builds/build-without-git/)
* [ Access Git Behind a Firewall ](/docs/cloud/native-builds/firewall-access/)
* [ Integrations ](/docs/cloud/native-builds/integrations/)
* Reference
* [ Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [ FAQ ](/docs/cloud/native-builds/faq/)
* [ App Store Publishing ](/docs/cloud/app-store-publishing/)
* [ Submit a Build ](/docs/cloud/app-store-publishing/submit-a-build/)
* [ Submit Automatically After a Build ](/docs/cloud/app-store-publishing/submit-automatically/)
* [ Troubleshooting ](/docs/cloud/app-store-publishing/troubleshooting/)
* [ FAQ ](/docs/cloud/app-store-publishing/faq/)
* [ Automations ](/docs/cloud/automations/)
* [ Reference ](/docs/cloud/automations/reference/)
* [ Troubleshooting ](/docs/cloud/automations/troubleshooting/)
* [ FAQ ](/docs/cloud/automations/faq/)
* [ Assist ](/docs/cloud/assist/)
* [ CLI ](/docs/cloud/cli/)
* APIs and SDKs
* [ Webhooks ](/docs/cloud/webhooks/)
* [ Integrations ](/docs/cloud/integrations/)
* Account
* [ Organization ](/docs/cloud/organizations/)
* [ Two-Factor Enforcement ](/docs/cloud/organizations/two-factor-authentication/)
* [ Audit Logs ](/docs/cloud/organizations/audit-logs/)
* [ Billing ](/docs/cloud/organizations/billing/)
* [ License Keys ](/docs/cloud/license-keys/)
* [ AI ](/docs/ai/)
* [ Insiders ](/docs/insiders/)
* [ Billing & Plans ](/docs/insiders/billing-and-plans/)
* [ FAQ ](/docs/insiders/faq/)
* [ License ](https://capawesome.io/legal/eula/)
* [ Support ](/docs/support/)
* [ Contributing ](/docs/contributing/)
* Contributing code
* [ Code of Conduct ](/docs/contributing/code-of-conduct/)
* [ Questions ](https://docs.github.com/en/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion#creating-a-discussion)
* [ Blog ](/blog/)
* Categories

* [ iOS ](#ios)
* [ Configuration ](#configuration)
* [ Usage ](#usage)
* [ API ](#api)
* [ Platform Behavior ](#platform-behavior)
* [ Changelog ](#changelog)
* [ License ](#license)

# Capacitor App Language Plugin[¶](#capacitor-app-language-plugin "Permanent link")

Capacitor plugin to manage the app's own language override, independent of the device language.

[ ![Deliver Live Updates to your Capacitor app with Capawesome Cloud](../../../assets/external/cloud.capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.69628c3f.png) ](https://cloud.capawesome.io/) 

## Features[¶](#features "Permanent link")

* 🌐 **Language override**: Set the app's language independently of the device language (Android).
* 🔎 **Read language**: Read the app's current language override.
* ♻️ **Reset**: Clear the override so the app follows the device language again (Android).
* ⚙️ **Settings**: Deep-link to the app's system settings page where the user can change the app language.
* 📦 **CocoaPods & SPM**: Supports CocoaPods and Swift Package Manager for iOS.
* 🔁 **Up-to-date**: Always supports the latest Capacitor version.
* 🤝 **Compatibility**: Works alongside the [Localization](https://capawesome.io/docs/sdks/capacitor/localization/) plugin, which reads the user's localization preferences.

Missing a feature? Just [open an issue](https://github.com/capawesome-team/capacitor-plugins/issues) and we'll take a look!

## Newsletter[¶](#newsletter "Permanent link")

Stay up to date with the latest news and updates about the Capawesome, Capacitor, and Ionic ecosystem by subscribing to our [Capawesome Newsletter](https://cloud.capawesome.io/newsletter/).

## Compatibility[¶](#compatibility "Permanent link")

| Plugin Version | Capacitor Version | Status         |
| -------------- | ----------------- | -------------- |
| 0.x.x          | \>=8.x.x          | Active support |

## Installation[¶](#installation "Permanent link")

You can use our **AI-Assisted Setup** to install the plugin. Add the [Capawesome Skills](https://github.com/capawesome-team/skills) to your AI tool using the following command:

`[](#%5F%5Fcodelineno-0-1)npx skills add capawesome-team/skills --skill capacitor-plugins
`

Then use the following prompt:

`` [](#%5F%5Fcodelineno-1-1) Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-app-language` plugin in my project.
 ``

If you prefer **Manual Setup**, install the plugin by running the following commands and follow the platform-specific instructions below:

`[](#%5F%5Fcodelineno-2-1)npm install @capawesome/capacitor-app-language
[](#%5F%5Fcodelineno-2-2)npx cap sync
`

This plugin only affects **natively rendered** strings (e.g. permission dialogs, notifications, or plugin-presented sheets). The language of your web UI should be handled by your app's i18n library.

### Android[¶](#android "Permanent link")

#### Variables[¶](#variables "Permanent link")

This plugin will use the following project variables (defined in your app's `variables.gradle` file):

* `$androidxAppCompatVersion` version of `androidx.appcompat:appcompat` (default: `1.7.1`)

#### Locale Configuration[¶](#locale-configuration "Permanent link")

To integrate the app language into the system settings (Android 13+), declare the supported locales in a `res/xml/locales_config.xml` file and reference it from the `<application>` tag in your `AndroidManifest.xml`:

`[](#%5F%5Fcodelineno-3-1)<!-- res/xml/locales_config.xml -->
[](#%5F%5Fcodelineno-3-2)<?xml version="1.0" encoding="utf-8"?>
[](#%5F%5Fcodelineno-3-3)<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
[](#%5F%5Fcodelineno-3-4)    <locale android:name="en" />
[](#%5F%5Fcodelineno-3-5)    <locale android:name="de" />
[](#%5F%5Fcodelineno-3-6)</locale-config>
`

`[](#%5F%5Fcodelineno-4-1)<application
[](#%5F%5Fcodelineno-4-2)    ...
[](#%5F%5Fcodelineno-4-3)    android:localeConfig="@xml/locales_config">
`

To persist the selected language across app restarts on Android 12 and below, add the following `<service>` inside the `<application>` tag of your `AndroidManifest.xml`:

`[](#%5F%5Fcodelineno-5-1)<service
[](#%5F%5Fcodelineno-5-2)    android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
[](#%5F%5Fcodelineno-5-3)    android:enabled="false"
[](#%5F%5Fcodelineno-5-4)    android:exported="false">
[](#%5F%5Fcodelineno-5-5)    <meta-data
[](#%5F%5Fcodelineno-5-6)        android:name="autoStoreLocales"
[](#%5F%5Fcodelineno-5-7)        android:value="true" />
[](#%5F%5Fcodelineno-5-8)</service>
`

> \[!NOTE\] Setting the language recreates the current activity, which reloads the web view.

### iOS[¶](#ios "Permanent link")

On iOS, the app language can only be changed by the **user** in the system settings. The `setLanguage(...)` and `resetLanguage(...)` methods are therefore not available. Use `openSettings(...)` to deep-link the user to the app's settings page.

The per-app language row is only shown in the system settings if the app bundle provides **more than one** localization. Declare the supported localizations in the `Info.plist` file of your app:

`[](#%5F%5Fcodelineno-6-1)<key>CFBundleLocalizations</key>
[](#%5F%5Fcodelineno-6-2)<array>
[](#%5F%5Fcodelineno-6-3)    <string>en</string>
[](#%5F%5Fcodelineno-6-4)    <string>de</string>
[](#%5F%5Fcodelineno-6-5)</array>
`

## Configuration[¶](#configuration "Permanent link")

No configuration required for this plugin.

## Usage[¶](#usage "Permanent link")

`[](#%5F%5Fcodelineno-7-1)import { AppLanguage } from '@capawesome/capacitor-app-language';
[](#%5F%5Fcodelineno-7-2)
[](#%5F%5Fcodelineno-7-3)const getLanguage = async () => {
[](#%5F%5Fcodelineno-7-4)  const { languageTag } = await AppLanguage.getLanguage();
[](#%5F%5Fcodelineno-7-5)  return languageTag;
[](#%5F%5Fcodelineno-7-6)};
[](#%5F%5Fcodelineno-7-7)
[](#%5F%5Fcodelineno-7-8)const setLanguage = async () => {
[](#%5F%5Fcodelineno-7-9)  await AppLanguage.setLanguage({ languageTag: 'de-DE' });
[](#%5F%5Fcodelineno-7-10)};
[](#%5F%5Fcodelineno-7-11)
[](#%5F%5Fcodelineno-7-12)const resetLanguage = async () => {
[](#%5F%5Fcodelineno-7-13)  await AppLanguage.resetLanguage();
[](#%5F%5Fcodelineno-7-14)};
[](#%5F%5Fcodelineno-7-15)
[](#%5F%5Fcodelineno-7-16)const openSettings = async () => {
[](#%5F%5Fcodelineno-7-17)  await AppLanguage.openSettings();
[](#%5F%5Fcodelineno-7-18)};
`

## API[¶](#api "Permanent link")

* [getLanguage()](#getlanguage)
* [openSettings()](#opensettings)
* [resetLanguage()](#resetlanguage)
* [setLanguage(...)](#setlanguage)
* [Interfaces](#interfaces)

### getLanguage()[¶](#getlanguage "Permanent link")

`[](#%5F%5Fcodelineno-8-1)getLanguage() => Promise<GetLanguageResult>
`

Get the app's current language override.

The language override is independent of the device language and only affects natively rendered strings (e.g. permission dialogs).

**Returns:** `Promise<[GetLanguageResult](#getlanguageresult)>`

**Since:** 0.1.0

---

### openSettings()[¶](#opensettings "Permanent link")

`[](#%5F%5Fcodelineno-9-1)openSettings() => Promise<void>
`

Open the app's settings page in the system settings.

On iOS, this is where the user can change the app's language (the language row is only shown if the app bundle provides more than one localization).

**Since:** 0.1.0

---

### resetLanguage()[¶](#resetlanguage "Permanent link")

`[](#%5F%5Fcodelineno-10-1)resetLanguage() => Promise<void>
`

Reset the app's language override so the app follows the device language again.

Resetting the language recreates the current activity, which reloads the web view.

Only available on Android.

**Since:** 0.1.0

---

### setLanguage(...)[¶](#setlanguage "Permanent link")

`[](#%5F%5Fcodelineno-11-1)setLanguage(options: SetLanguageOptions) => Promise<void>
`

Set the app's language override.

Setting the language recreates the current activity, which reloads the web view.

On iOS, the language can only be changed by the user in the system settings (see the `openSettings(...)` method).

Only available on Android.

| Param       | Type                                      |
| ----------- | ----------------------------------------- |
| **options** | [SetLanguageOptions](#setlanguageoptions) |

**Since:** 0.1.0

---

### Interfaces[¶](#interfaces "Permanent link")

#### GetLanguageResult[¶](#getlanguageresult "Permanent link")

| Prop            | Type           | Description                                                                                                                         | Since |
| --------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **languageTag** | string \| null | The BCP 47 language tag of the app's language override. Returns null if no override is set and the app follows the device language. | 0.1.0 |

#### SetLanguageOptions[¶](#setlanguageoptions "Permanent link")

| Prop            | Type   | Description                                                    | Since |
| --------------- | ------ | -------------------------------------------------------------- | ----- |
| **languageTag** | string | The BCP 47 language tag to set as the app's language override. | 0.1.0 |

## Platform Behavior[¶](#platform-behavior "Permanent link")

Setting the app language programmatically is only supported on Android. On iOS, the language can only be changed by the user in the system settings.

| Method           | Android | iOS             | Web             |
| ---------------- | ------- | --------------- | --------------- |
| getLanguage()    | ✅       | ✅               | ❌ Unimplemented |
| setLanguage(...) | ✅       | ❌ Unimplemented | ❌ Unimplemented |
| resetLanguage()  | ✅       | ❌ Unimplemented | ❌ Unimplemented |
| openSettings()   | ✅       | ✅               | ❌ Unimplemented |

## Changelog[¶](#changelog "Permanent link")

See [CHANGELOG.md](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/app-language/CHANGELOG.md).

## License[¶](#license "Permanent link")

See [LICENSE](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/app-language/LICENSE).

July 7, 2026 

Back to top

```json
{"@context": "https://schema.org", "@graph": [{"@type": "TechArticle", "@id": "https://capawesome.io/docs/sdks/capacitor/app-language/#article", "headline": "Capacitor App Language Plugin for Android & iOS", "name": "Capacitor App Language Plugin for Android & iOS", "description": "Capacitor plugin to manage the app's language override independently of the device language on Android and iOS.", "inLanguage": "en", "url": "https://capawesome.io/docs/sdks/capacitor/app-language/", "mainEntityOfPage": "https://capawesome.io/docs/sdks/capacitor/app-language/", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "about": {"@id": "https://capawesome.io/docs/sdks/capacitor/app-language/#software"}}, {"@type": "SoftwareSourceCode", "@id": "https://capawesome.io/docs/sdks/capacitor/app-language/#software", "name": "Capacitor App Language Plugin for Android & iOS", "description": "Capacitor plugin to manage the app's language override independently of the device language on Android and iOS.", "url": "https://capawesome.io/docs/sdks/capacitor/app-language/", "programmingLanguage": "TypeScript", "runtimePlatform": "Capacitor", "codeRepository": "https://github.com/capawesome-team", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}}]}
```
