#ios #swift #localization
Вопрос:
Я пытаюсь представить темп бега в своем приложении — скажем, 5 минут/км.
Для голоса за кадром я бы хотел, чтобы это было прочитано как пять минут на километр.
Я знаю, что могу пройти километры вот так:
let measurementFormatter = MeasurementFormatter()
measurementFormatter.unitStyle = .long
measurementFormatter.string(from: UnitLength.kilometers)
но можно ли было бы получить форму единственного числа (и воспользоваться преимуществами уже локализованных единиц)?
Комментарии:
1. вы хотите TextToSpeech ??
2. вы имеете в виду 12 км/ч
3. @Sumit_VE Я хочу использовать этот текст для a11y и озвучки!
4. @LeoDabus обратите внимание, что это время/расстояние («темп»), а не расстояние/время («скорость»), но на самом деле это не имеет значения для того, о чем я спрашиваю.
5. Это имеет значение, так как я думаю, что есть встроенная скорость, которая даст вам «километры в час». Но я не думаю, что существует встроенное пространство единиц измерения, которое вы использовали бы для бега, например «минуты на километр».
Ответ №1:
Похоже, что единственным естественным способом сделать это было бы создать явное измерение и вручную удалить единственную единицу измерения («1»):
let measurementFormatter = MeasurementFormatter()
measurementFormatter.unitStyle = .long
measurementFormatter.unitOptions = .providedUnit
let length: Measurement<UnitLength> = .init(value: 1, unit: .kilometers)
let str = measurementFormatter.string(from: length)
.replacingOccurrences(of: "1", with: "")
.replacingOccurrences(of: " ", with: " ")
.trimmingCharacters(in: .whitespaces)
Я не специалист по языкам, но я ожидаю, что это будет работать с большинством (если не со всеми) языками.
Комментарии:
1. Я думал о чем — то подобном-но я действительно хотел избежать этого
.filter
(или подобного). Спасибо за ваш ответ, хотя, скорее всего, я приму его, если больше ничего не всплывет!2. @phi Согласился, что это не идеальное решение, однако вы можете создать свой собственный «тонкий» слой кэширования для строк такого рода, и вам нужно будет вычислить его только один раз.
Ответ №2:
Редактировать
Похоже, что можно создать пользовательский формат измерения, который выводится в минутах/км или минутах/миле. Смотрите учебник по адресу https://www.raywenderlich.com/553-how-to-make-an-app-like-runkeeper-part-1 для примера, как это сделать.
Комментарии:
1. Спасибо за ваш ответ! Я пытаюсь получить существительное в единственном числе «километр» (а не «километры»).
2. Так оно и есть. И вы используете UnitSpeed?