Flutter i18n:如何使用应用的用户首选区域格式覆盖设备区域设置的区域格式?
Flutter i18n: How do I override device locale's regional formatting with app's user preferred regional formatting?
我已经通读了flutter i18n docs。我想实现 Windows 或 Mac 所做的 - 我们可以 select 一个区域,比如印度,并设置区域设置,例如一周的开始等。用户也可以通过将一周的开始时间设置为其他日期来覆盖印度区域设置。不确定如何使用 flutter intl 来解决这个问题,因为文档只谈到将整个语言环境作为一个单元进行更改。
这里有windows的截图供参考。
我知道 MaterialApp 有一个区域设置属性。它只接受预定义的语言环境 ID,如 en、fr、fr_CA 等。当我想要 fr_CA 中的特定日期格式而不是 'fr_CA' 定义的默认格式时,我该怎么办语言环境?即使在应用程序范围或系统范围的区域设置发生更改后,也要设置这些用户首选格式。
我认为可以根据用户的喜好扩展和修改 GlobalMaterialLocalizations。不想走那条路,因为它看起来有点矫枉过正。相反,我们可以简单地存储用户偏好并在默认区域设置中使用它们。例如,要使用用户首选的数字格式,
if (userPreferencesAreSet) {
formattedNumber = NumberFormat(userPreferredPattern).format(1234567.89);
} else {
formattedNumber = NumberFormat.decimalPattern().format(1234567.89);
}
参考 dart 的 intl for number formatting patterns. We would use a BLoC to store the deviceLocale or user preferred locale and set it in the MaterialApp's locale attribute on change. Here's a working example I made with flutter_bloc library - github link
我已经通读了flutter i18n docs。我想实现 Windows 或 Mac 所做的 - 我们可以 select 一个区域,比如印度,并设置区域设置,例如一周的开始等。用户也可以通过将一周的开始时间设置为其他日期来覆盖印度区域设置。不确定如何使用 flutter intl 来解决这个问题,因为文档只谈到将整个语言环境作为一个单元进行更改。
这里有windows的截图供参考。
我知道 MaterialApp 有一个区域设置属性。它只接受预定义的语言环境 ID,如 en、fr、fr_CA 等。当我想要 fr_CA 中的特定日期格式而不是 'fr_CA' 定义的默认格式时,我该怎么办语言环境?即使在应用程序范围或系统范围的区域设置发生更改后,也要设置这些用户首选格式。
我认为可以根据用户的喜好扩展和修改 GlobalMaterialLocalizations。不想走那条路,因为它看起来有点矫枉过正。相反,我们可以简单地存储用户偏好并在默认区域设置中使用它们。例如,要使用用户首选的数字格式,
if (userPreferencesAreSet) {
formattedNumber = NumberFormat(userPreferredPattern).format(1234567.89);
} else {
formattedNumber = NumberFormat.decimalPattern().format(1234567.89);
}
参考 dart 的 intl for number formatting patterns. We would use a BLoC to store the deviceLocale or user preferred locale and set it in the MaterialApp's locale attribute on change. Here's a working example I made with flutter_bloc library - github link