日期 通过本地化进行格式本地化代表?



我在实现 DateFormat 的国际化时遇到问题。

我使用以下代码来格式化日期:

var time = DateTime.fromMillisecondsSinceEpoch(item['time'] * 1000);
${DateFormat('EEEE, MMMM d').format(time)}

返回Friday, February 6

将我的设备更改为另一种语言,继续返回Friday, February 6

应用程序中其他字符串(手动翻译的字符串(的国际化正在按预期工作。

下面是初始化localizationsDelegates的代码。

void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
MyApp();
@override
MyAppStateful createState() => MyAppStateful();
}
class MyAppStateful extends State<MyApp> {
MyAppStateful();
@override
Widget build(BuildContext context) {
return new MaterialApp(
localizationsDelegates: [
// ... app-specific localization delegate[s] here
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
AppLocalizations.delegate,
],
supportedLocales: supportedLocales,
localeResolutionCallback: (locale, supportedLocales) {
for (var i in supportedLocales) {
if (i.languageCode == locale.languageCode) {
return i;
}
}
return supportedLocales.first;
},
home: isX ? Y() : Z(),
);
}
}

我的问题是双重的:

1( 如何获得当前日期的翻译日期格式?

2( 是否可以本地化日期格式格式?而不是强迫它:DateFormat('EEEE, MMMM d').format(time)}让它灵活地适应区域设置?
例如:在美国是Weekday, Month Day,但在法国是Weekday Day Month

实际上,我不知道第二折,但对于第一折,你可以像这样使用 smth:

var time = DateTime.fromMillisecondsSinceEpoch(item['time'] * 1000);
${DateFormat('EEEE, MMMM d', Localizations.localeOf(context).toString()).format(time)}

解决点 #2 的关键是使用 DateFormat 的集成模式:

DateFormat.yMMMMd(Localizations.localeOf(context).toString()).format(time)将正确的格式 wrt 返回到用户的区域设置。

只需在每次区域设置更改时侦听的方法中添加此行

Intl.defaultLocale = languageCode;

从包装:https://pub.dev/packages/intl

最新更新