【问题标题】:Flutter i18n: How do I override device locale's regional formatting with app's user preferred regional formatting?Flutter i18n:如何使用应用程序的用户首选区域格式覆盖设备区域设置的区域格式?
【发布时间】:2021-05-24 14:04:08
【问题描述】:

我已经阅读了flutter i18n docs。我想实现 Windows 或 Mac 的功能 - 我们可以选择一个区域,比如印度,并设置区域设置,如周初等。用户也可以通过将一周的开始时间设置为其他日期来覆盖印度区域设置。不确定如何使用 flutter intl 解决这个问题,因为文档只提到将整个语言环境作为一个单元进行更改。

这里是windows的截图供参考。

我知道 MaterialApp 有一个语言环境属性。它只接受预定义的语言环境 id,如 en、fr、fr_CA 等。当我想要在 fr_CA 中使用特定的日期格式而不是“fr_CA”语言环境定义的默认日期时该怎么办?即使在应用范围或系统范围的区域设置更改后,也可以设置这些用户首选格式。

【问题讨论】:

    标签: flutter flutter-intl


    【解决方案1】:

    我认为 GlobalMaterialLocalizations 可以根据用户的喜好进行扩展和修改。不想走那条路,因为这似乎有点矫枉过正。相反,我们可以简单地存储用户偏好并在默认语言环境中使用它们。例如,要使用用户喜欢的数字格式,

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

    请参阅 dart 的 intl 了解数字格式模式。我们将使用 BLoC 来存储 deviceLocale 或用户首选语言环境,并在更改时将其设置在 MaterialApp 的语言环境属性中。这是我使用 flutter_bloc 库制作的一个工作示例 - github link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      • 2019-02-26
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多