Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.localizationsettings

import android.app.LocaleManager
import android.content.Context
import android.content.SharedPreferences
import android.os.Build
import android.os.LocaleList
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.LocaleListCompat
import com.facebook.react.bridge.Promise
Expand Down Expand Up @@ -41,14 +43,14 @@ class LocalizationSettingsModule internal constructor(context: ReactApplicationC
private fun getCurrentLanguage(): String? {
// If API version is >= 33, then use per-app language settings
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
val currentLocaleName = if (!AppCompatDelegate.getApplicationLocales().isEmpty) {
// get per-app language
AppCompatDelegate.getApplicationLocales()[0]?.toLanguageTag()
// Use LocaleManager directly to read per-app language set in Android Settings
val localeManager = reactApplicationContext.getSystemService(LocaleManager::class.java)
val appLocales = localeManager?.applicationLocales
return if (appLocales != null && !appLocales.isEmpty) {
appLocales[0]?.toLanguageTag()
} else {
// Fallback to the default System Locale
Locale.getDefault().toLanguageTag()
}
return currentLocaleName
}
// if API is < 33, then use SharedPreferences with fallback to default System Locale
if (getPreferences().getString("languageFrom", null) == Locale.getDefault().language) {
Expand All @@ -68,8 +70,11 @@ class LocalizationSettingsModule internal constructor(context: ReactApplicationC
private fun setCurrentLanguage(language: String) {
// If API version is >= 33, then use per-app language settings
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
val localeList = LocaleListCompat.forLanguageTags(getLanguageTag(language))
AppCompatDelegate.setApplicationLocales(localeList)
// Use LocaleManager directly to ensure sync with Android Settings
val localeManager = reactApplicationContext.getSystemService(LocaleManager::class.java)
val languageTag = getLanguageTag(language)
val localeList = LocaleList.forLanguageTags(languageTag)
localeManager?.applicationLocales = localeList
} else {
// if API is < 33, then set SharedPreferences language
val editor = getEditor();
Expand Down