0Pricing
Swift Academy · Урок

Форматирование с учётом локали

Форматируйте числа, даты и валюты с учётом локали.

«Форматирование с учётом локали» — бесплатный урок Swift Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Числа не универсальны

Число один миллион двести тысяч в US записывается как 1,200,000.50, в Германии — как 1.200.000,50, а в Индии — как 12,00,000.50. Если жёстко задать разделители или форматы, приложение будет неправильно работать для большей части мира. API Swift FormatStyle корректно обрабатывает это для каждой локали.

import Foundation
let value = 1_200_000.5
print(value.formatted()) // uses current locale

Точка входа formatted()

У большинства стандартных типов — чисел, дат, измерений и списков — есть метод formatted(). Без аргументов он использует разумные значения по умолчанию с учётом локали; передайте формат, чтобы настроить результат.

import Foundation
let n = 1234.567
print(n.formatted())                      // default
print(n.formatted(.number.precision(.fractionLength(2))))

Форматы чисел

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

import Foundation
let x = 1234.5
print(x.formatted(
    .number
    .grouping(.automatic)
    .precision(.fractionLength(0...2))))

Форматирование валюты

Для денежных значений .currency(code:) правильно размещает символ валюты, разделители разрядов и десятичные знаки в соответствии с локалью. Одна и та же сумма отображается как $1,200.00 или 1.200,00 €€ в зависимости от региона пользователя — никогда не создавайте строки валюты вручную.

import Foundation
let price = 1200.0
print(price.formatted(.currency(code: "USD")))
print(price.formatted(.currency(code: "EUR")))
print(price.formatted(.currency(code: "JPY")))

Форматирование процентов

.percent умножает значение на 100 и добавляет знак процента, принятый в локали, учитывая правила расстановки пробелов, которые требуются в некоторых языках.

import Foundation
let ratio = 0.875
print(ratio.formatted(.percent))
print(ratio.formatted(.percent.precision(.fractionLength(1))))

Переопределение локали

По умолчанию форматирование использует Locale.current. Чтобы принудительно выбрать определённую локаль — например, для проверки или отображения значения в фиксированном регионе — добавьте .locale(_:) к любому формату.

import Foundation
let value = 1234567.89
let german = Locale(identifier: "de_DE")
print(value.formatted(.number.locale(german)))
// 1.234.567,89

Форматирование дат

Для дат есть собственные форматы. .dateTime позволяет составить нужный набор полей (год, месяц, день, час), а система расположит их согласно локали: месяц-день-год в US и день-месяц-год в большей части Европы.

import Foundation
let now = Date()
print(now.formatted(
    .dateTime.year().month().day()))
print(now.formatted(date: .long, time: .shortened))

Относительные даты

RelativeDateTimeFormatter и формат .relative создают полностью переведённые фразы вроде «2 часа назад» или «через 3 дня». Это удобно для лент и временных меток.

import Foundation
let past = Date().addingTimeInterval(-3600)
let text = past.formatted(
    .relative(presentation: .named))
print(text) // e.g. "1 hour ago"

Измерения и единицы

Measurement форматирует физические величины и может преобразовывать единицы измерения. Локаль определяет, показывать ли километры или мили, а формат локализует само название единицы.

import Foundation
let distance = Measurement(value: 5, unit: UnitLength.kilometers)
print(distance.formatted())
print(distance.formatted(
    .measurement(width: .wide)))

Списки и имена

Даже объединение элементов учитывает особенности языка. .list(type:) создаёт строку «apples, oranges, and pears» на английском и использует правильный союз и разделители в других языках — не вставляйте запятые и слово «и» вручную.

import Foundation
let fruits = ["apples", "oranges", "pears"]
print(fruits.formatted(.list(type: .and)))
print(fruits.formatted(.list(type: .or)))

Обратный разбор

Форматы FormatStyles обратимы. Свойство parseStrategy формата (или инициализация значения из строки с помощью формата) преобразует локализованный текст обратно в число или дату, соблюдая те же правила локали.

import Foundation
let style = Decimal.FormatStyle.Currency(code: "USD")
let amount = try? Decimal("$1,234.50", format: style)
print(amount ?? 0)

Быстрая проверка

Вспомните, какой инструмент нужен для работы с денежными значениями.

Итоги

Вы научились форматировать значения с учётом локали с помощью FormatStyle:

  • formatted() выдаёт корректные для локали значения по умолчанию; передайте формат, чтобы настроить результат.
  • .number, .currency(code:), .percent, .dateTime, .relative, .measurement и .list покрывают большинство потребностей.
  • Добавляйте .locale(_:), чтобы переопределить регион; форматы также могут выполнять обратный разбор текста.
  • Никогда не создавайте вручную разделители, символы валюты или порядок компонентов даты.

Часто задаваемые вопросы

Урок «Форматирование с учётом локали» бесплатный?

Да — полный текст урока «Форматирование с учётом локали» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Форматирование с учётом локали»?

Форматируйте числа, даты и валюты с учётом локали. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Форматирование с учётом локали»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Каталоги строк и локализованные строки
  2. Множественное число и Stringsdict
  3. Форматирование с учётом локали
  4. Справа налево и направление компоновки
← Назад к Swift Academy