Основание - Что такое collatorIdentifier для Locale? - PullRequest
0 голосов
/ 10 января 2020

Цель достижения

В таблице есть столбец Дата. Дата должна иметь формат, основанный на локали пользователя. Пример:

  • 24/01/2020 или 24/01/20 (я не против) для французских пользователей
  • 01/24/20 для пользователей в США

Примечание: приложение (в настоящее время) только на английском языке sh.

У меня есть объект Date, который я хотел бы отобразить пользователю в нужном формате. Для этого, я полагаю, мне нужно использовать DateFormatter, который имеет параметр locale. Но я сталкиваюсь с проблемой последнего.

Проблема

На игровой площадке Xcode, на Ма c на французском языке (Regio = BE) (но Xcode в Engli sh), следующий код возвращает странные вещи.

Locale.current.regionCode // returns "BE"
Locale.current.languageCode // returns "en"
Locale.preferredLanguages[0] // returns "en"
Locale.current.identifier // returns "en_BE"
Locale.current.collatorIdentifier // returns "fr-BE"
Locale.current.collationIdentifier // returns nil

Примечание: французский является одним из языков в Бельгии.

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

1 Ответ

1 голос
/ 10 января 2020

Во-первых, к вашей проблеме: локаль сложна в Xcode, особенно в игровых площадках. Если ваша игровая площадка нацелена на iOS, то она основана на локали симулятора. Если он нацелен на macOS, я нахожу это немного странным, потому что Xcode переопределяет вещи. Обратите внимание, что для изменения локали обычно требуется перезагрузка, чтобы полностью вступить в силу (симулятор или Ma c), но я все еще нахожу, что игровые площадки ненадежны, потому что Xcode не локализован должным образом (или я предполагаю, что локализован вообще .... ) Если вы еще не перезагрузились, могут возникнуть несоответствия. Если вы играете на игровой площадке, все ставки отключены, даже если вы перезагрузитесь. Я рекомендую создавать инструменты командной строки Ma c. Они гораздо надежнее.

Если вы собираетесь использовать игровые площадки, работайте с указанным c языковым стандартом, который вы инициализируете, а не current.

На вопрос, что это Это означает, что буквы обычно считаются «отсортированными». Это отличается между языками, между культурами, которые разделяют язык, и даже между использованиями в одной культуре. Несколько примеров из ICU (их гораздо больше):

  • Буквы AZ могут быть отсортированы в другом порядке, чем в Engli sh. Например, на литовском языке «y» сортируется между «i» и «k».

  • Комбинации букв могут рассматриваться как одна буква. Например, в традиционном испанском sh "ch" рассматривается как одна буква и сортируется между "c" и "d".

  • Буквы с ударением можно рассматривать как второстепенные варианты безударного письма. Например, «é» можно рассматривать как эквивалент «e».

  • Буквы с ударением можно рассматривать как отдельные буквы. Например, «Å» в датском языке sh рассматривается как отдельная буква, которая сортируется сразу после буквы «Z».

  • Буквы без акцента, которые считаются различными на одном языке, могут быть нечеткими в еще один. Например, буквы «v» и «w» - это две разные буквы в соответствии с Engli sh. Однако «v» и «w» традиционно считаются вариантами одной и той же буквы в Swedi sh.

. collatorIdentifier - это полный идентификатор, а collationIdentifier является спецификацией использования c шт.

let l = Locale(identifier: "de@collation=phonebook")
l.collatorIdentifier  // "de@collation=phonebook"
l.collationIdentifier // "phonebook"
...