Connect with us

Разработка

Удаленная локализация в приложениях Jetpack Compose

Используя утилиту RemoteString, мы можем эффективно обновлять и управлять строками, не прибегая к выпуску нового приложения.

Опубликовано

/

     
     

В мобильном приложении строки, видимые пользователю, можно разделить на два основных типа. К первому типу относятся динамические строки, получаемые из удаленного сервиса, которые могут быть обновлены или изменены. Например, названия товаров, цены и категории в приложении для электронной коммерции относятся к этой категории. Ко второму типу относятся статические строки, которые предопределены и остаются неизменными, например, заголовки или поля описания.

В приложениях Android эти статические строки обычно определяются в файле strings.xml и хранятся локально. При необходимости изменений они обновляются в коде и выпускаются в следующей версии приложения.

Можно сделать удаленное хранение строк, однако при этом возникают уникальные проблемы, такие как обеспечение эффективного обновления, поддержание согласованности данных и быстрое отображение обновленного текста для пользователей. В этой статье мы рассмотрим реальное решение по управлению удаленной локализацией в приложениях Jetpack Compose.

Зачем нужна удаленная локализация?

В большинстве приложений для управления текстовым содержимым обычно используются статические строки. Однако есть сценарии, в которых требования клиента или потребности проекта диктуют необходимость удаленного управления всеми строками.

При статическом подходе каждый раз, когда необходимо обновить строку, требуется новый релиз приложения. Для этого необходимо изменить код, подготовить новую версию и дождаться, пока обновления пройдут проверку и будут опубликованы в Play Store. Во многих случаях этот процесс может занимать много времени и быть нецелесообразным.

Удаленное управление строками позволяет вносить изменения мгновенно, без необходимости создания новой версии приложения. Это обеспечивает быстрое обновление, гибкость и беспрепятственное управление контентом в соответствии с меняющимися требованиями.

Реализация динамической системы управления строками

Для реализации удаленного управления строками в Android-приложении может быть очень эффективна утилита RemoteString. Ниже приведены основные шаги и функции, полученные из предоставленного кода.

1. Инициализация

RemoteString должен быть инициализирован классом R.string приложения. Это позволит классу сопоставить идентификаторы ресурсов (resId) с соответствующими ключами (resKey).

RemoteString.init(R.string::class.java)

2. Динамическое получение строк

С помощью функции getString можно динамически получать значения строк. Если удаленное значение существует, оно будет использовано; в противном случае будет возвращено значение по умолчанию из strings.xml.

val dynamicString = RemoteString.getString(context, R.string.welcome_message)

3. Обновление строк из удаленного источника

Метод update принимает на вход JSON-строку JSONObject и обновляет значения строк, хранящиеся в SharedPreferences. Это позволяет выполнять обновления без необходимости выпуска нового приложения.

val json = """{"welcome_message": "Welcome to our app!"}"""
RemoteSting.update(context, json)

4. Поддержка отката

Если удаленная строка недоступна, приложение изящно возвращается к значению по умолчанию, заданному в файле strings.xml.

5. Очистка данных

Утилита включает методы для очистки определенных или всех сохраненных значений, что обеспечивает гибкость в управлении ресурсами строк.

Полный код здесь:

Настройка интеграции удаленных строк в вашем приложении

Шаг 1: Инициализация RemoteString в классе приложения:

@HiltAndroidApp
class MainApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        RemoteString.init(RString::class.java)
    }
}

RemoteString.init(RString::class.java) инициализирует RemoteString и ссылается на файл strings.xml, используемый в проекте (здесь RString). Это необходимо для динамического управления ресурсами строк.

Шаг 2: Обновление локальных строк из удаленных данных

Чтобы продемонстрировать, как обновлять удаленные строки с помощью RemoteString, используются функции RemoteString.clearAll и RemoteString.update. Эти операции идеально подходят для получения входящих JSON-данных и локального обновления строк.

RemoteString.clearAll(context)
RemoteString.update(context, JSONObject(data))

Шаг 3: Создание файла common_string.xml (название опционально)

<resources>
    <!-- Example for a static button label -->
    <string name="btn_submit">Submit</string>

    <!-- Example for a dynamic welcome message -->
    <string name="welcome_message">Welcome, %1$s!</string>

    <!-- Example for an error message -->
    <string name="error_connection">Connection error. Please try again.</string>

    <!-- Example for a price label -->
    <string name="price_label">Price: %1$.2f USD</string>
</resources>

Эта настройка создает базовую инфраструктуру для управления динамическими строками и позволяет легко управлять как статическими, так и удаленно обновляемыми строками.

Можно использовать расширение контекста:

@Composable
fun getRemoteString(@StringRes resId: Int, args: ImmutableList<Any?>? = null): String {
    val context = LocalContext.current
    return args?.let { context.getRemoteString(resId, it) } ?: context.getRemoteString(resId)
}

Шаг 4: Использование RemoteString в Compose

@Composable
fun WelcomeScreen(context: Context, userName: String) {
    // Screen Layout
    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(16.dp),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        // Dynamic Welcome Message
        Text(
            text = getRemoteString(R.string.welcome_message, listOf(userName)),
            style = MaterialTheme.typography.h5,
            modifier = Modifier.padding(bottom = 16.dp)
        )

        // Submit Button
        Button(onClick = { /* Handle click */ }) {
            Text(text = getRemoteString(R.string.btn_submit)
        }
    }
}

Заключение

В этой статье мы рассмотрели, как управлять динамическими строками в Android с помощью Jetpack Compose и удаленных источников данных. Используя утилиту RemoteString, мы можем эффективно обновлять и управлять строками, не прибегая к выпуску нового приложения. Такой подход обеспечивает большую гибкость, особенно в сценариях, где требуется обновление строк в реальном времени, например, при A/B-тестировании или динамическом изменении контента. Сочетание статических ресурсов с удаленной конфигурацией позволяет обеспечить бесшовное и масштабируемое решение для интернационализации и локализации в современных Android-приложениях.

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: