Я хочу настроить изменение языкового стандарта на основе настроек.
После того, как пользователь выбрал язык, вызывается 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
Форум для тех, кто программирует под Android
-
Anonymous
1728062919
Anonymous
Я хочу настроить изменение языкового стандарта на основе настроек.
После того, как пользователь выбрал язык, вызывается 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[i] = 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[i]?.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))
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79055301/rn-android-restarts-activity-when-locale-changes[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия