Spec-Zone.ru › Kotlin 2

Управление региональными форматами

Текстовые поля и связанные с ними компоненты, например средства выбора даты и времени, автоматически применяют шаблоны форматирования для соответствующей локали. К ним относятся форматы чисел, дат, времени и валют. Шаблоны определяются локалью системы или пользовательской локалью, заданной в приложении, что обеспечивает единообразное отображение данных на разных платформах.

Шаблоны форматирования для локалей

Форматирование в 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 для унифицированного кроссплатформенного решения нет, поведение форматирования в большинстве случаев остается единообразным. Чтобы убедиться в корректности форматирования для всех поддерживаемых регионов:

  • Проверьте крайние случаи, например большие числа, отрицательные значения и нули.

  • Проверьте форматирование для всех поддерживаемых локалей на всех целевых платформах.

Что дальше

Узнайте, как управлять окружением ресурсов приложения, например темой и языком внутри приложения.

28 мая 2025
Локализация строкРабота с языками с письмом справа налево

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API