Назначение настроек `регион` в ios для DateFormatters - PullRequest
0 голосов
/ 28 сентября 2018

Мне известно, что DateFormatter s использует язык и регион для создания необходимых строк / контента.И особенно при чтении документации кажется, что я правильно понял, как они должны работать.

Локали представляют варианты форматирования для конкретного пользователя, а не его предпочитаемый язык.Они часто одинаковы, но могут быть разными.Например, носитель английского языка, который живет в Германии, может выбрать английский в качестве языка и Германию в качестве региона.Текст отображается на английском языке, но даты, время и цифры соответствуют немецким правилам форматирования.День предшествует месяцу, а 24-часовые часы представляют время, как показано в таблице 4-1

Тогда почему, если я установил свой мобильный телефон с

  • Предпочтительные языки системы: [испанский, итальянский]

  • Регион: США

  • имое приложение поддерживает только немецкий

простой (псевдокод)

let df = DateFormatter()
df.string(from: date)` 

возвращает miércoles, 26. sept 2018? (испанский с форматированием немецкого региона)

Учитывая, что пакет (и, следовательно, все строки, возвращаемые из NSLocalizedString(..) и относительных ресурсов) правильно выбрали язык (de, немецкий), почему базовые объекты не используют один и тот же язык (а не регион), поддерживаемый и идентифицируемый комплектом, для получения необходимого результата, а вместо этого они привязываются к системным?

Существуют ли какие-то приложенияКонфигурация, которую я пропустил, или мне действительно нужно переопределить язык, локаль и регион для каждого Календаря, DateFormatter, NumberFormatter, ecc, которые мне нужно использовать?Особенно с учетом того, насколько неэффективны эти классы и их экземпляры.

1 Ответ

0 голосов
/ 28 сентября 2018

Я перечислил несколько вопросов в комментариях, и ответы могут изменить мое понимание вопроса, но если предположить, что вопрос заключается только в том, как сделать форматировщики форматирующими, используя немецкий язык, на котором говорят в Германии, то это просто установка языкового стандарта.

let locale = Locale(identifier: "de-DE")
let df = DateFormatter()
df.dateStyle = .full
df.locale = locale
df.string(from: Date())  // "Freitag, 28. September 2018"

Тот факт, что мой текущий Locale является en-US, не влияет на это.

Создание DateFormatter и назначение его Locale занимает больше времени, чем просто создание DateFormatter,Это дополнительная строка кода, но вы можете обернуть ее в расширение, если хотите (и более того, вы можете создавать общие неизменяемые экземпляры, если хотите избежать их повторного создания, но это верно, если вы задаете явный язык)или нет).

Весь смысл таких вещей, как dateStyle, заключается в том, что он адаптируется к конфигурации пользователя.Если вы не хотите адаптироваться к конфигурации пользователя, просто настройте форматеры так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...