0

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

这是windows的截图供参考。 在此处输入图像描述 在此处输入图像描述

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

4

1 回答 1

0

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

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

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

于 2021-02-25T04:18:25.730 回答