Управление региональными форматами
Текстовые поля и связанные с ними компоненты, например средства выбора даты и времени, автоматически применяют шаблоны форматирования для соответствующей локали. К ним относятся форматы чисел, дат, времени и валют. Шаблоны определяются локалью системы или пользовательской локалью, заданной в приложении, что обеспечивает единообразное отображение данных на разных платформах.
Шаблоны форматирования для локалей
Форматирование в Compose Multiplatform учитывает особенности локалей конкретных платформ для следующих значений:
Разделители в числах. Разряды тысяч могут разделяться запятой или точкой:
1,234.56вen-USи1.234,56вde-DE.Форматы даты и времени. Дата 1 декабря выглядит как
12/1/20вen-US, а вfr-CAта же дата выглядит как2020-12-01.Символы валют и их расположение. Символ местной валюты может располагаться до или после цифр:
$5,001вen-USи5.001,00 €вfr-FR.
Эти региональные форматы работают из коробки как с системными локалями, так и с переопределениями локали, заданными в приложении.
В настоящее время форматирование реализовано с помощью библиотеки kotlinx-datetime на iOS и API JDK на Android и настольных платформах. Вот пример управления локализованными значениями даты и валюты в исходном наборе iOS:
import androidx.compose.foundation.layout.Column
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import kotlinx.datetime.Clock
import kotlinx.datetime.TimeZone
import kotlinx.datetime.todayIn
import platform.Foundation.NSNumber
import platform.Foundation.NSNumberFormatter
import platform.Foundation.NSNumberFormatterCurrencyStyle
import platform.Foundation.NSLocale
import platform.Foundation.currentLocale
@Composable
fun RegionalFormatExample() {
val currentLocale = NSLocale.current
val languageCode = currentLocale.languageCode
val countryCode = currentLocale.countryCode
// Sample value to format as currency
val amount = 1234.56
// Uses NSNumberFormatter for currency formatting on iOS
val currencyFormatter = NSNumberFormatter().apply {
numberStyle = NSNumberFormatterCurrencyStyle
locale = currentLocale
}
val formattedCurrency = currencyFormatter.stringFromNumber(NSNumber(amount))
// Gets current date using `kotlinx-datetime`
val today = Clock.System.todayIn(TimeZone.currentSystemDefault())
val formattedDate = today.toString()
Column {
Text("Current language: $languageCode")
Text("Current country: $countryCode")
Text("Amount: $amount")
Text("Formatted currency: $formattedCurrency")
Text("Today's date: $formattedDate")
}
}
Обеспечение единообразного форматирования
Хотя общего API для унифицированного кроссплатформенного решения нет, поведение форматирования в большинстве случаев остается единообразным. Чтобы убедиться в корректности форматирования для всех поддерживаемых регионов:
Проверьте крайние случаи, например большие числа, отрицательные значения и нули.
Проверьте форматирование для всех поддерживаемых локалей на всех целевых платформах.
Что дальше
Узнайте, как управлять окружением ресурсов приложения, например темой и языком внутри приложения.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/compose-regional-format.html