Она пригодится, если захотите локализовать данные в правильном формате в зависимости от выбранного языка. Например, сумму 3 000,00 ₽, дату 24 апр. 2022 г. или процент 54 %.
Чтобы получить идентификатор локали, вызовите Locale.current.identifier. Вернётся значение языкприложения_ЯЗЫКРЕГИОНА, например, en_US. Полный список таких идентификаторов найдёте по ссылке
Дата
Получаем текущую дату:
let currentDate = Date()
Создаём и настраиваем объект DateFormatter:
let dateFormatter = DateFormatter()
// Задаём стиль, например <mark>.medium</mark>
dateFormatter.dateStyle = DateFormatter.Style.medium
dateFormatter.timeStyle = DateFormatter.Style.medium
// Указываем локаль
dateFormatter.locale = Locale.current
Выводим локализованную дату:
print(dateFormatter.string(from: currentDate))
В консоли будет 24 апр. 2022 г., 02:05:34.
Так же можно создать свой формат даты, вместо стиля:
dateFormatter.setLocalizedDateFormatFromTemplate("MMddyyyy") // Так же доступны часы <mark>HH</mark> и минуты <mark>mm</mark>
В консоли будет 24/04/2022.
Время
Продолжительность
Создаем объект DateComponentsFormatter:
let dateComponentsFormatter = DateComponentsFormatter()
Выбираем стиль и единицы времени для отображения:
dateComponentsFormatter.unitsStyle = .abbreviated // Стиль
dateComponentsFormatter.allowedUnits = [.month, .day, .hour, .minute] // Единицы, при выводе используются нужные. Можно убрать лишние
Доступны разные стили:
- .abbreviated - 2 ч 32 мин
- .full - 2 часа 32 минуты
- .spellOut - два часа тридцать две минуты
- .positional - 2:32 (надо убрать лишние allowedUnits)
- .short - сокращение (для некоторых языков)
- .brief - короче, чем short
Получаем интервал, который будем локализовать:
let interval = Date.current.timeIntervalSince(Date.current.addingTimeInterval(-9132))
let formattedInterval = dateComponentsFormatter.string(from: interval)
Выводим результат:
print(formattedInterval)
Получаем 2 ч 32 мин в консоли.
Отсчет
Создаем объект RelativeDateTimeFormatter:
let relativeDateTimeFormatter = RelativeDateTimeFormatter()
Выбираем стиль:
relativeDateTimeFormatter.unitsStyle = .full
Доступны разные стили:
- .full - полное отображение «2 месяца назад»
- .short - сокращение «2 мес. назад»
- .abbreviated - аббревиатура «-2 м»
- .spellOut - разговорное «два месяца назад»
let start = Date.current.addingTimeInterval(-15) // время, от которого считаем сколько прошло
let finish = Date() // время, к которому считаем сколько прошло
let interval = relativeDateTimeFormatter.localizedString(for: start, relativeTo: finish)
Выводим результат:
print(interval)
Получаем 15 секунд назад в консоли. Если поменяем start на Date.current.addingTimeInterval(15) (будущее время), получим через 15 секунд в консоли.
Валюта
Создадим объект NumberFormatter:
let currencyFormatter = NumberFormatter()
currencyFormatter.numberStyle = .currency
Укажем локаль:
currencyFormatter.locale = Locale.current
Получим локализованное значение для 3000:
print(currencyFormatter.string(from: 3000)!)
В консоли будет 3 000,00 ₽.
Дробное число
Создаём и настраиваем объект NumberFormatter:
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
// Указываем локаль
numberFormatter.locale = Locale.current
Выводим локализованное число:
print(numberFormatter.string(from: 123456))
Получаем 123,456 в консоли.
Процент
Создаем число, из которого хотим сделать процент:
let number = 54
// Получаем число с процентом, используя форматтер:
let percent = number.formatted(.percent)
Выводим процент:
print(percent)
Получаем 54 % в консоли.
Расстояние
Создаем объект Measurement:
let measurement = Measurement(
value: 43.23, // Расстояние
unit: UnitLength.kilometers // Единица измерения
)
```
В <mark>UnitLength</mark> доступно 22 единицы измерения.
Создаем объект <mark>MeasurementFormatter</mark>:
```swift
let measurementFormatter = MeasurementFormatter()
// Выбираем стиль, доступы полный <mark>.long</mark> и сокращенные <mark>.short</mark>, <mark>.medium</mark>
measurementFormatter.unitStyle = .long
Выводим расстояние:
print(measurementFormatter.string(from: measurement))
Получаем 43,23 километра в консоли.
Размер
Создаем объект LengthFormatter
let lengthFormatter = LengthFormatter()
// Выбираем стиль, доступы полный <mark>.long</mark> и сокращенные <mark>.short</mark>, <mark>.medium</mark>
lengthFormatter.unitStyle = .long
Получаем значение:
let value = lengthFormatter.string(fromValue: 14.5, unit: .millimeter)
Доступны разные unit:
- millimeter - милиметр
- centimeter - сантиметр
- meter - метр
- kilometer - километр
- inch - дюйм
- foot - фут
- yard - ярд
- mile - миля
Выводим размер:
print(value)
Получаем 14,5 миллиметра в консоли.
Энергия
Создаем объект EnergyFormatter:
let energyFormatter = EnergyFormatter()
// Выбираем стиль, доступы полный <mark>.long</mark> и сокращенные <mark>.short</mark>, <mark>.medium</mark>
energyFormatter.unitStyle = .long
Получаем значение:
let value = energyFormatter.string(fromValue: 69.5, unit: .calorie)
Доступны разные unit:
- .calorie - калории
- .joule - джоули
- .kilocalorie - килокалории
- .kilojoule - килоджоули
Выводим значение:
print(value)
Получаем 69,5 калории в консоли.
Вес
Создаем объект MassFormatter
let massFormatter = MassFormatter()
// Выбираем стиль, доступы полный <mark>.long</mark> и сокращенные <mark>.short</mark>, <mark>.medium</mark>
massFormatter.unitStyle = .long
Получаем значение:
let value = massFormatter.string(fromValue: 75.2, unit: .kilogram)
Доступны разные unit:
- .kilogram - килограмм
- .gram - грамм
- .pound - фунт
- .ounce - унция
- .stone - стоун
Выводим вес:
print(value)
Получаем 75,2 килограмма в консоли.
Объем файла
Создаем проперти с объемом файла в байтах:
let number = 54347323
// Получаем локализованный объем файла, используя форматтер:
let byteCount = number.formatted(.byteCount(style: .file))
Выводим объем:
print(byteCount)
Получаем 54.3 МБ в консоли.
Список
Создаём массив, из которого будем делать список:
let list = ["Swift", "Java", "Python"]
Создаём и настраиваем объект ListFormatter:
let listFormatter = ListFormatter()
// Указываем локаль
listFormatter.locale = Locale.current
Выводим локализованный список:
print(listFormatter.string(from: list))
Получаем Swift, Java и Python в консоли. Работает с любым количеством элементов.
Имена
Создаём и настраиваем объект класса PersonNameComponents:
var nameComponents = PersonNameComponents()
nameComponents.familyName = "Петров"
nameComponents.givenName = "Александр"
nameComponents.nameSuffix = "Младший"
nameComponents.nickname = "Саня"
Доступны разные компоненты, например:
- namePrefix - часть имени, до основного
- givenName - основное имя
- nameSuffix - часть имени, после основного
- middleName - второе имя
- familyName - фамилия
- nickname - псевдоним
Создаём объект класса PersonNameComponentsFormatter, с помощью которого будем форматировать имя:
let nameFormatter = PersonNameComponentsFormatter()
Задаем стиль, доступны:
- .default и .medium - имя, фамилия
- .short - псевдоним
- .abbreviated - инициалы имени, фамилии
- .long - все компоненты, кроме псевдонима
Выводим результат:
formatter.style = .default // совпадает с <mark>.medium</mark> или отсутствием стиля
print(nameFormatter.string(from: nameComponents))
// В консоли <mark>Александр Петров</mark>
formatter.style = .short
print(nameFormatter.string(from: nameComponents))
// В консоли <mark>Саня</mark>
formatter.style = .abbreviated
print(nameFormatter.string(from: nameComponents))
// В консоли <mark>АП</mark>
formatter.style = .long
print(nameFormatter.string(from: nameComponents))
// В консоли <mark>Александр Младший Петров</mark>