{"_id":"@capawesome/capacitor-app-language","_rev":"4-c3e3a11124d53638cf9633d5e4541d41","name":"@capawesome/capacitor-app-language","dist-tags":{"latest":"0.1.2"},"versions":{"0.0.1":{"name":"@capawesome/capacitor-app-language","version":"0.0.1","keywords":["capacitor","plugin","native"],"author":{"name":"Robin Genz","email":"mail@robingenz.dev"},"license":"MIT","_id":"@capawesome/capacitor-app-language@0.0.1","maintainers":[{"name":"robingenz","email":"mail@robingenz.dev"}],"homepage":"https://capawesome.io/docs/plugins/app-language/","bugs":{"url":"https://github.com/capawesome-team/capacitor-plugins/issues"},"dist":{"shasum":"e1709acfe155edc6ef1793de49d8fe79692f44da","tarball":"https://registry.npmjs.org/@capawesome/capacitor-app-language/-/capacitor-app-language-0.0.1.tgz","fileCount":37,"integrity":"sha512-U7Q4l2iBvZAQSBDi9pMZwrNr5vSD4pJqAkyGsZgNXNgFGck/e8CkhUzKOXK8KmponDaYUuaC11V6/5TweFa/EQ==","signatures":[{"sig":"MEUCIHWpYTGcA7EgW+d7wRwV6lX/yBKKNEDhJDMj1YEHOnP0AiEAozEj8rR6yTRLDs/vpPgFpEAkCT7fEgDZrtG5U0YlIfs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47296},"main":"dist/plugin.cjs.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","funding":[{"url":"https://github.com/sponsors/capawesome-team/","type":"github"},{"url":"https://opencollective.com/capawesome","type":"opencollective"}],"gitHead":"8dd31ce5d3f16f94fb71d033f47512e99908f4e4","scripts":{"fmt":"npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format","lint":"npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint","build":"npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api AppLanguagePlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint . --ext ts","verify":"npm run verify:ios && npm run verify:android && npm run verify:web","prettier":"prettier \"**/*.{css,html,ts,js,java}\"","swiftlint":"node-swiftlint","verify:ios":"cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin -destination generic/platform=iOS && cd ..","verify:web":"npm run build","prepublishOnly":"npm run build","verify:android":"cd android && ./gradlew clean build test && cd ..","ios:pod:install":"cd ios && pod install --repo-update && cd ..","ios:spm:install":"cd ios && swift package resolve && cd .."},"_npmUser":{"name":"robingenz","email":"mail@robingenz.dev"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"repository":{"url":"git+https://github.com/capawesome-team/capacitor-plugins.git","type":"git"},"_npmVersion":"11.13.0","description":"Capacitor plugin to manage the app's language override.","directories":{},"_nodeVersion":"24.16.0","eslintConfig":{"extends":"@ionic/eslint-config/recommended"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"8.57.0","rimraf":"6.1.2","rollup":"4.53.3","swiftlint":"2.0.0","typescript":"5.9.3","@capacitor/cli":"8.0.0","@capacitor/ios":"8.0.0","@capacitor/core":"8.0.0","@capacitor/docgen":"0.3.1","@capacitor/android":"8.0.0","@ionic/eslint-config":"0.4.0","prettier-plugin-java":"2.6.7"},"peerDependencies":{"@capacitor/core":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-app-language_0.0.1_1783405219352_0.49603277493185516","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@capawesome/capacitor-app-language","version":"0.1.0","keywords":["capacitor","plugin","native","capacitor-plugin","app language","language override","per-app language","locale","i18n","localization","change app language"],"author":{"name":"Robin Genz","email":"mail@robingenz.dev"},"license":"MIT","_id":"@capawesome/capacitor-app-language@0.1.0","maintainers":[{"name":"robingenz","email":"mail@robingenz.dev"}],"homepage":"https://capawesome.io/docs/sdks/capacitor/app-language/","bugs":{"url":"https://github.com/capawesome-team/capacitor-plugins/issues"},"dist":{"shasum":"b1a44195683c5d15b40c6d3b394cb607992ce1ec","tarball":"https://registry.npmjs.org/@capawesome/capacitor-app-language/-/capacitor-app-language-0.1.0.tgz","fileCount":37,"integrity":"sha512-jEWuEHoS5xHo7BsLtLqbaakQ/sxOwFZ9TmgOgrdP021NYs3KdA4WlprAX2p1yK3HoxOKXiKSP/H2HH2uE5FMTA==","signatures":[{"sig":"MEQCIGXMG4WC7bC2e03j9vZyqeg7if/+gZ2jOc5b0IosYBGQAiAKBuuoWCjGucYobcHvJe5E8a/2QkJsYvfY4zaiX0MOag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capawesome%2fcapacitor-app-language@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":51699},"main":"dist/plugin.cjs.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","funding":[{"url":"https://github.com/sponsors/capawesome-team/","type":"github"},{"url":"https://opencollective.com/capawesome","type":"opencollective"}],"gitHead":"1ce17b1fd14c43b2f1d5d3c2da82221e1d1dca37","scripts":{"fmt":"npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format","lint":"npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint","build":"npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api AppLanguagePlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint . --ext ts","verify":"npm run verify:ios && npm run verify:android && npm run verify:web","prettier":"prettier \"**/*.{css,html,ts,js,java}\"","swiftlint":"node-swiftlint","verify:ios":"cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin -destination generic/platform=iOS && cd ..","verify:web":"npm run build","prepublishOnly":"npm run build","verify:android":"cd android && ./gradlew clean build test && cd ..","ios:pod:install":"cd ios && pod install --repo-update && cd ..","ios:spm:install":"cd ios && swift package resolve && cd .."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:63738f30-fa40-4b7e-a362-ab0b637f10e1"}},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"repository":{"url":"git+https://github.com/capawesome-team/capacitor-plugins.git","type":"git"},"_npmVersion":"11.16.0","description":"Capacitor plugin to manage the app's language override on Android and iOS.","directories":{},"_nodeVersion":"24.18.0","eslintConfig":{"extends":"@ionic/eslint-config/recommended"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"8.57.0","rimraf":"6.1.2","rollup":"4.53.3","swiftlint":"2.0.0","typescript":"5.9.3","@capacitor/cli":"8.0.0","@capacitor/ios":"8.0.0","@capacitor/core":"8.0.0","@capacitor/docgen":"0.3.1","@capacitor/android":"8.0.0","@ionic/eslint-config":"0.4.0","prettier-plugin-java":"2.6.7"},"peerDependencies":{"@capacitor/core":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-app-language_0.1.0_1784015488677_0.010972741041836764","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@capawesome/capacitor-app-language","version":"0.1.1","keywords":["capacitor","plugin","native","capacitor-plugin","app language","language override","per-app language","locale","i18n","localization","change app language"],"author":{"name":"Robin Genz","email":"mail@robingenz.dev"},"license":"MIT","_id":"@capawesome/capacitor-app-language@0.1.1","maintainers":[{"name":"robingenz","email":"mail@robingenz.dev"}],"homepage":"https://capawesome.io/docs/sdks/capacitor/app-language/","bugs":{"url":"https://github.com/capawesome-team/capacitor-plugins/issues"},"dist":{"shasum":"3d981c30c7e053cadc61bf1ee1d90ac6418cbd0c","tarball":"https://registry.npmjs.org/@capawesome/capacitor-app-language/-/capacitor-app-language-0.1.1.tgz","fileCount":37,"integrity":"sha512-ZPCfg6iLD7QZv72TkW4Jc5ctpNc2DnR2FbK5dBhUyTGeqJobi4c8hrWyvdobxc5PuNLH2Gkz5xrzVarDulVwNQ==","signatures":[{"sig":"MEYCIQD86uQJ0e9tj3YG1GP5f01rhpcXw3lIcLqTP7J7aJlrTgIhAJf9A1JvzJCmHbvhDXsWCqyPMsojnb+qzSFCxzwKLALV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capawesome%2fcapacitor-app-language@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":51708},"main":"dist/plugin.cjs.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","module":"dist/esm/index.js","funding":[{"url":"https://github.com/sponsors/capawesome-team/","type":"github"},{"url":"https://opencollective.com/capawesome","type":"opencollective"}],"gitHead":"3e61f4b412f9f3f512c21169bb135bbb23a67e6d","scripts":{"fmt":"npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format","lint":"npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint","build":"npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","docgen":"docgen --api AppLanguagePlugin --output-readme README.md --output-json dist/docs.json","eslint":"eslint . --ext ts","verify":"npm run verify:ios && npm run verify:android && npm run verify:web","prettier":"prettier \"**/*.{css,html,ts,js,java}\"","swiftlint":"node-swiftlint","verify:ios":"cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin -destination generic/platform=iOS && cd ..","verify:web":"npm run build","prepublishOnly":"npm run build","verify:android":"cd android && ./gradlew clean build test && cd ..","ios:pod:install":"cd ios && pod install --repo-update && cd ..","ios:spm:install":"cd ios && swift package resolve && cd .."},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:63738f30-fa40-4b7e-a362-ab0b637f10e1"}},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"repository":{"url":"git+https://github.com/capawesome-team/capacitor-plugins.git","type":"git"},"_npmVersion":"11.16.0","description":"Capacitor plugin to manage the app's language override on Android and iOS.","directories":{},"_nodeVersion":"24.18.0","eslintConfig":{"extends":"@ionic/eslint-config/recommended"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"8.57.0","rimraf":"6.1.2","rollup":"4.53.3","swiftlint":"2.0.0","typescript":"5.9.3","@capacitor/cli":"8.0.0","@capacitor/ios":"8.0.0","@capacitor/core":"8.0.0","@capacitor/docgen":"0.3.1","@capacitor/android":"8.0.0","@ionic/eslint-config":"0.4.0","prettier-plugin-java":"2.6.7"},"peerDependencies":{"@capacitor/core":">=8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-app-language_0.1.1_1784102940619_0.6972260866590407","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@capawesome/capacitor-app-language","version":"0.1.2","description":"Capacitor plugin to manage the app's language override on Android and iOS.","main":"dist/plugin.cjs.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","unpkg":"dist/plugin.js","author":{"name":"Robin Genz","email":"mail@robingenz.dev"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/capawesome-team/capacitor-plugins.git"},"bugs":{"url":"https://github.com/capawesome-team/capacitor-plugins/issues"},"funding":[{"type":"github","url":"https://github.com/sponsors/capawesome-team/"},{"type":"opencollective","url":"https://opencollective.com/capawesome"}],"homepage":"https://capawesome.io/docs/sdks/capacitor/app-language/","keywords":["capacitor","plugin","native","capacitor-plugin","app language","language override","per-app language","locale","i18n","localization","change app language"],"scripts":{"verify":"npm run verify:ios && npm run verify:android && npm run verify:web","verify:ios":"cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin -destination generic/platform=iOS && cd ..","verify:android":"cd android && ./gradlew clean build test && cd ..","verify:web":"npm run build","lint":"npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint","fmt":"npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format","eslint":"eslint . --ext ts","prettier":"prettier \"**/*.{css,html,ts,js,java}\"","swiftlint":"node-swiftlint","docgen":"docgen --api AppLanguagePlugin --output-readme README.md --output-json dist/docs.json","build":"npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs","clean":"rimraf ./dist","watch":"tsc --watch","ios:pod:install":"cd ios && pod install --repo-update && cd ..","ios:spm:install":"cd ios && swift package resolve && cd ..","prepublishOnly":"npm run build"},"devDependencies":{"@capacitor/android":"8.0.0","@capacitor/cli":"8.4.2","@capacitor/core":"8.0.0","@capacitor/docgen":"0.3.1","@capacitor/ios":"8.0.0","@ionic/eslint-config":"0.4.0","eslint":"8.57.0","prettier-plugin-java":"2.9.7","rimraf":"6.1.2","rollup":"4.62.3","swiftlint":"2.0.0","typescript":"5.9.3"},"peerDependencies":{"@capacitor/core":">=8.0.0"},"eslintConfig":{"extends":"@ionic/eslint-config/recommended"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"publishConfig":{"access":"public"},"gitHead":"7c1937ed10b7de86ca2c1cdc3539a2735fd69a00","_id":"@capawesome/capacitor-app-language@0.1.2","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-SfOfqNbALQQ/rIib2AMVPslAiMaCo88Hs4PPAcChRdoc3Uz6vsiRcq6hyINR0NwMksXI53Xaxsv+BMz/muvIcA==","shasum":"7695ee928cb20d7963ffe90e680dc3085162948a","tarball":"https://registry.npmjs.org/@capawesome/capacitor-app-language/-/capacitor-app-language-0.1.2.tgz","fileCount":37,"unpackedSize":51556,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@capawesome%2fcapacitor-app-language@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC/w69k8k4qzkcCs1HyJoNgN/s+qxtih7+DJHmKe9xojwIgRk87gm+NwXeL1SZQRocEDRZmsySuQp6iSiGuyBRMn6w="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:63738f30-fa40-4b7e-a362-ab0b637f10e1"}},"directories":{},"maintainers":[{"name":"robingenz","email":"mail@robingenz.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/capacitor-app-language_0.1.2_1788337292484_0.6028589999410021"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-07T06:20:19.134Z","modified":"2026-09-02T08:21:33.053Z","0.0.1":"2026-07-07T06:20:19.538Z","0.1.0":"2026-07-14T07:51:28.816Z","0.1.1":"2026-07-15T08:09:00.818Z","0.1.2":"2026-09-02T08:21:32.631Z"},"bugs":{"url":"https://github.com/capawesome-team/capacitor-plugins/issues"},"author":{"name":"Robin Genz","email":"mail@robingenz.dev"},"license":"MIT","homepage":"https://capawesome.io/docs/sdks/capacitor/app-language/","keywords":["capacitor","plugin","native","capacitor-plugin","app language","language override","per-app language","locale","i18n","localization","change app language"],"repository":{"type":"git","url":"git+https://github.com/capawesome-team/capacitor-plugins.git"},"description":"Capacitor plugin to manage the app's language override on Android and iOS.","maintainers":[{"name":"robingenz","email":"mail@robingenz.dev"}],"readme":"# Capacitor App Language Plugin\n\nCapacitor plugin to manage the app's own language override, independent of the device language.\n\n<div class=\"capawesome-z29o10a\">\n  <a href=\"https://cloud.capawesome.io/\" target=\"_blank\">\n    <img alt=\"Deliver Live Updates to your Capacitor app with Capawesome Cloud\" src=\"https://cloud.capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.png?t=1\" />\n  </a>\n</div>\n\n## Features\n\n- 🌐 **Language override**: Set the app's language independently of the device language (Android).\n- 🔎 **Read language**: Read the app's current language override.\n- ♻️ **Reset**: Clear the override so the app follows the device language again (Android).\n- ⚙️ **Settings**: Deep-link to the app's system settings page where the user can change the app language.\n- 🤝 **Compatibility**: Works alongside the [Localization](https://capawesome.io/docs/sdks/capacitor/localization/) plugin, which reads the user's localization preferences.\n- 📦 **CocoaPods & SPM**: Supports CocoaPods and Swift Package Manager for iOS.\n- 🔁 **Up-to-date**: Always supports the latest Capacitor version.\n\nMissing a feature? Just [open an issue](https://github.com/capawesome-team/capacitor-plugins/issues) and we'll take a look!\n\n## Use Cases\n\nThe App Language plugin is typically used whenever an app offers its own language selection, for example:\n\n- **In-app language switcher**: Let users pick the app language from a settings screen instead of changing the device language (Android).\n- **Consistent native dialogs**: Make sure natively rendered strings like permission dialogs and notifications match the language of your web UI.\n- **Settings deep link**: Guide iOS users to the app's system settings page, where they can change the app language.\n- **System default option**: Offer a \"system default\" entry that clears the override so the app follows the device language again (Android).\n\n## Compatibility\n\n| Plugin Version | Capacitor Version | Status         |\n| -------------- | ----------------- | -------------- |\n| 0.x.x          | >=8.x.x           | Active support |\n\n## Installation\n\nYou can use our **AI-Assisted Setup** to install the plugin.\nAdd the [Capawesome Skills](https://github.com/capawesome-team/skills) to your AI tool using the following command:\n\n```bash\nnpx skills add capawesome-team/skills --skill capacitor-plugins\n```\n\nThen use the following prompt:\n\n```\n Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-app-language` plugin in my project.\n```\n\nIf you prefer **Manual Setup**, install the plugin by running the following commands and follow the platform-specific instructions below:\n\n```bash\nnpm install @capawesome/capacitor-app-language\nnpx cap sync\n```\n\nThis 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.\n\n### Android\n\n#### Variables\n\nThis plugin will use the following project variables (defined in your app's `variables.gradle` file):\n\n- `$androidxAppCompatVersion` version of `androidx.appcompat:appcompat` (default: `1.7.1`)\n\n#### Locale Configuration\n\nTo 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`:\n\n```xml\n<!-- res/xml/locales_config.xml -->\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<locale-config xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <locale android:name=\"en\" />\n    <locale android:name=\"de\" />\n</locale-config>\n```\n\n```xml\n<application\n    ...\n    android:localeConfig=\"@xml/locales_config\">\n```\n\nTo persist the selected language across app restarts on Android 12 and below, add the following `<service>` inside the `<application>` tag of your `AndroidManifest.xml`:\n\n```xml\n<service\n    android:name=\"androidx.appcompat.app.AppLocalesMetadataHolderService\"\n    android:enabled=\"false\"\n    android:exported=\"false\">\n    <meta-data\n        android:name=\"autoStoreLocales\"\n        android:value=\"true\" />\n</service>\n```\n\n> [!NOTE]\n> Setting the language recreates the current activity, which reloads the web view.\n\n### iOS\n\nOn 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.\n\nThe 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:\n\n```xml\n<key>CFBundleLocalizations</key>\n<array>\n    <string>en</string>\n    <string>de</string>\n</array>\n```\n\n## Configuration\n\nNo configuration required for this plugin.\n\n## Usage\n\nThe following examples show how to get, set, and reset the app language override and open the app's settings page.\n\n### Get the current language override\n\nRead the BCP 47 language tag of the app's current language override. Returns `null` if no override is set and the app follows the device language:\n\n```typescript\nimport { AppLanguage } from '@capawesome/capacitor-app-language';\n\nconst getLanguage = async () => {\n  const { languageTag } = await AppLanguage.getLanguage();\n  return languageTag;\n};\n```\n\n### Set the app language\n\nSet the app's language override, independent of the device language. Note that this recreates the current activity, which reloads the web view. Only available on Android:\n\n```typescript\nimport { AppLanguage } from '@capawesome/capacitor-app-language';\n\nconst setLanguage = async () => {\n  await AppLanguage.setLanguage({ languageTag: 'de-DE' });\n};\n```\n\n### Reset the language override\n\nClear the override so the app follows the device language again. Only available on Android:\n\n```typescript\nimport { AppLanguage } from '@capawesome/capacitor-app-language';\n\nconst resetLanguage = async () => {\n  await AppLanguage.resetLanguage();\n};\n```\n\n### Open the app's settings page\n\nDeep-link the user to the app's page in the system settings. On iOS, this is where the user can change the app language:\n\n```typescript\nimport { AppLanguage } from '@capawesome/capacitor-app-language';\n\nconst openSettings = async () => {\n  await AppLanguage.openSettings();\n};\n```\n\n## API\n\n<docgen-index>\n\n* [`getLanguage()`](#getlanguage)\n* [`openSettings()`](#opensettings)\n* [`resetLanguage()`](#resetlanguage)\n* [`setLanguage(...)`](#setlanguage)\n* [Interfaces](#interfaces)\n\n</docgen-index>\n\n<docgen-api>\n<!--Update the source file JSDoc comments and rerun docgen to update the docs below-->\n\n### getLanguage()\n\n```typescript\ngetLanguage() => Promise<GetLanguageResult>\n```\n\nGet the app's current language override.\n\nThe language override is independent of the device language and only\naffects natively rendered strings (e.g. permission dialogs).\n\n**Returns:** <code>Promise&lt;<a href=\"#getlanguageresult\">GetLanguageResult</a>&gt;</code>\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### openSettings()\n\n```typescript\nopenSettings() => Promise<void>\n```\n\nOpen the app's settings page in the system settings.\n\nOn iOS, this is where the user can change the app's language (the language\nrow is only shown if the app bundle provides more than one localization).\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### resetLanguage()\n\n```typescript\nresetLanguage() => Promise<void>\n```\n\nReset the app's language override so the app follows the device language\nagain.\n\nResetting the language recreates the current activity, which reloads the\nweb view.\n\nOnly available on Android.\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### setLanguage(...)\n\n```typescript\nsetLanguage(options: SetLanguageOptions) => Promise<void>\n```\n\nSet the app's language override.\n\nSetting the language recreates the current activity, which reloads the\nweb view.\n\nOn iOS, the language can only be changed by the user in the system\nsettings (see the `openSettings(...)` method).\n\nOnly available on Android.\n\n| Param         | Type                                                              |\n| ------------- | ----------------------------------------------------------------- |\n| **`options`** | <code><a href=\"#setlanguageoptions\">SetLanguageOptions</a></code> |\n\n**Since:** 0.1.0\n\n--------------------\n\n\n### Interfaces\n\n\n#### GetLanguageResult\n\n| Prop              | Type                        | Description                                                                                                                           | Since |\n| ----------------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ----- |\n| **`languageTag`** | <code>string \\| null</code> | 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 |\n\n\n#### SetLanguageOptions\n\n| Prop              | Type                | Description                                                    | Since |\n| ----------------- | ------------------- | -------------------------------------------------------------- | ----- |\n| **`languageTag`** | <code>string</code> | The BCP 47 language tag to set as the app's language override. | 0.1.0 |\n\n</docgen-api>\n\n## Platform Behavior\n\nSetting the app language programmatically is only supported on Android. On iOS, the language can only be changed by the user in the system settings.\n\n| Method             | Android | iOS              | Web              |\n| ------------------ | ------- | ---------------- | ---------------- |\n| `getLanguage()`    | ✅      | ✅               | ❌ Unimplemented |\n| `setLanguage(...)` | ✅      | ❌ Unimplemented | ❌ Unimplemented |\n| `resetLanguage()`  | ✅      | ❌ Unimplemented | ❌ Unimplemented |\n| `openSettings()`   | ✅      | ✅               | ❌ Unimplemented |\n\n## FAQ\n\n### Why can't I set the app language programmatically on iOS?\n\nOn iOS, the app language can only be changed by the user in the system settings, so the `setLanguage(...)` and `resetLanguage(...)` methods are not available there. Use `openSettings()` to deep-link the user to the app's settings page, where the language can be changed.\n\n### Does this plugin translate my web UI?\n\nNo. The language override only affects natively rendered strings, such as permission dialogs, notifications, or plugin-presented sheets. The language of your web UI should be handled by your app's i18n library.\n\n### Why is the language row not shown in the iOS system settings?\n\nThe per-app language row only appears if the app bundle provides more than one localization. Declare the supported localizations under the `CFBundleLocalizations` key in your app's `Info.plist`, as described in the [Installation](#installation) section.\n\n### Why does my app reload after calling `setLanguage`?\n\nSetting or resetting the language recreates the current activity on Android, which reloads the web view. This is expected behavior and cannot be avoided.\n\n### How does the selected language persist across app restarts on Android?\n\nOn Android 13 and above, the override is integrated with the system settings via a `locales_config.xml` file. On Android 12 and below, you need to add the `AppLocalesMetadataHolderService` service to your `AndroidManifest.xml` to persist the selected language, as described in the [Installation](#installation) section.\n\n### How is this plugin different from the Localization plugin?\n\nThe [Localization](https://capawesome.io/docs/sdks/capacitor/localization/) plugin reads the user's localization preferences, such as preferred locales, time zone, and regional formatting settings. The App Language plugin manages the app's own language override, independent of the device language. The two plugins work well together.\n\n### Can I use this plugin with Ionic, React, Vue or Angular?\n\nYes, the plugin is framework-agnostic. It works in any Capacitor app regardless of the web framework, including Ionic with Angular, React, or Vue, as well as plain JavaScript projects.\n\n## Related Plugins\n\n- [Localization](https://capawesome.io/docs/sdks/capacitor/localization/): Read the user's localization preferences, such as preferred locales, time zone, and regional formatting settings.\n- [Settings Launcher](https://capawesome.io/docs/sdks/capacitor/settings-launcher/): Open native settings screens.\n\n## Newsletter\n\nStay 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/).\n\n## Changelog\n\nSee [CHANGELOG.md](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/app-language/CHANGELOG.md).\n\n## License\n\nSee [LICENSE](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/app-language/LICENSE).\n","readmeFilename":"README.md"}