Я хочу настроить изменение языкового стандарта на основе настроек.
После того, как пользователь выбрал язык, вызывается AppCompatDelegate API, чтобы сообщить Android об изменении языка. Языковые настройки для каждого приложения
Но приложение перезапускается. Как избежать перезапуска приложения при смене локали?
В манифесте уже добавлена локаль для android:configChanges
Вот мой модуль:
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.LocaleListCompat
import android.os.Build
import com.facebook.react.bridge.*
class LocaleModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
override fun getName(): String {
return "LocaleModule"
}
@ReactMethod
fun setApplicationLocales(localesArray: ReadableArray, promise: Promise) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
try {
val locales = Array(localesArray.size()) { "" }
for (i in 0 until localesArray.size()) {
locales = localesArray.getString(i) ?: ""
}
val localeList = LocaleListCompat.forLanguageTags(locales.joinToString(","))
AppCompatDelegate.setApplicationLocales(localeList)
promise.resolve(null)
} catch (e: Exception) {
promise.reject("ERROR", e.message ?: "Unknown error")
}
} else {
promise.reject("UNSUPPORTED", "API level is below 33")
}
}
@ReactMethod
fun getApplicationLocales(promise: Promise) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
try {
val localeList = AppCompatDelegate.getApplicationLocales()
val localesArray = WritableNativeArray()
for (i in 0 until localeList.size()) {
localesArray.pushString(localeList?.toLanguageTag())
}
promise.resolve(localesArray)
} catch (e: Exception) {
promise.reject("ERROR", e.message ?: "Unknown error")
}
} else {
promise.reject("UNSUPPORTED", "API level is below 33")
}
}
}
Пакет:
import com.facebook.react.ReactPackage
import com.facebook.react.bridge.NativeModule
import com.facebook.react.uimanager.ViewManager
import com.facebook.react.bridge.ReactApplicationContext
class LocalePackage: ReactPackage {
override fun createViewManagers(reactContext: ReactApplicationContext): List {
return emptyList()
}
override fun createNativeModules(
reactContext: ReactApplicationContext
): List {
return listOf(LocaleModule(reactContext))
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... le-changes
RN Android перезапускает деятельность при изменении локали ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Laravel Blade: как получить доступ к переводам строк локали, отличной от текущей локали?
Anonymous » » в форуме Php - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему Android Play Store перезапускает мое приложение после обновления в приложении?
Anonymous » » в форуме Android - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-