Flutter i18n: Как мне переопределить региональное форматирование локали устройства на предпочтительное для пользователя региональное форматирование приложения?

Я прочитал docs по flutter i18n . Я хотел бы добиться того, что делает Windows или Mac - мы можем выбрать регион, например, Индию, и установить региональные настройки, такие как начало недели и т. Д. Пользователь может изменить региональные настройки Индии, установив начало недели на другой день. Не уверен, как это сделать с помощью flutter intl, поскольку в документации говорится только об изменении всего языкового стандарта как единицы.

Вот скриншоты Windows для справки.

Я знаю, что у MaterialApp есть атрибут locale. Он принимает только предопределенный идентификатор локали, например en, fr, fr_CA и т. Д. Что мне делать, если мне нужно конкретное форматирование даты в fr_CA, вместо стандартного, определенного локалью 'fr_CA'? И устанавливайте эти предпочтительные для пользователя форматы даже после изменения локали в масштабе приложения или всей системы.

1 ответ

Решение

Я думаю, что GlobalMaterialLocalizations можно расширить и изменить в соответствии с предпочтениями пользователя. Не хотел идти по этому пути, потому что это казалось излишним. Вместо этого мы можем просто сохранить пользовательские настройки и использовать их, если они есть, вместо локали по умолчанию. Например, чтобы использовать форматирование чисел, предпочитаемое пользователем,

      if (userPreferencesAreSet) {
  formattedNumber = NumberFormat(userPreferredPattern).format(1234567.89);
} else {
  formattedNumber = NumberFormat.decimalPattern().format(1234567.89);
}

Обратитесь к dart's intl для шаблонов форматирования чисел. Мы бы использовали BLoC для хранения deviceLocale или предпочтительной локали пользователя и установили бы его в атрибуте locale MaterialApp при изменении. Вот рабочий пример, который я сделал с библиотекой flutter_bloc - ссылка на github

Другие вопросы по тегам