我开始在我的dart项目中使用intl包。 在开始使用这个包之后我使用这个代码:
DateTime now = new DateTime.now();
var formatter = new DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
String nowFormatted = formatter.format(now);
它运作正常。 在我使用intl后,我在日志中获取此消息:
Uncaught LocaleDataException: Locale data has not been initialized, call initializeDateFormatting(<locale>).
我无法理解为什么我应该在此代码段中传递区域设置
答案 0 :(得分:5)
答案 1 :(得分:4)
我已经用这种方式解决了这个问题:
DateTime now = new DateTime.now();
var formatter = new DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", 'en');
String nowFormatted = formatter.format(now);
但我已经将这个用于配置itnl支持的dart文件:
library translation_helper;
import 'dart:async';
import 'package:intl/date_symbol_data_local.dart';
import '../../resources/messages_all.dart';
void setupLanguage(){
//var germanDatesFuture = initializeDateFormatting('de_DE', null);
var enDatesFuture = initializeDateFormatting('en', null);
var germanMessagesFuture = initializeMessages('de');
var englishMessagesFuture = initializeMessages('en');
var italianMessagesFuture = initializeMessages('it');
var polishMessagesFuture = initializeMessages('pl');
Future
.wait([
enDatesFuture,
germanMessagesFuture,
englishMessagesFuture,
italianMessagesFuture,
polishMessagesFuture
]);
}
在我失踪之前:
var enDatesFuture = initializeDateFormatting('en', null);
有关我使用的更多信息:
答案 2 :(得分:4)
无需直接从您的代码中调用 initializeDateFormatting 。只需调用应用程序本地化委托的 load 方法即可。
因此,您可以这样指定委托人:
final localizationsDelegates = <LocalizationsDelegate>[
AppLocalizationsDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
CupertinoLocalizationsDelegate()
];
...
MaterialApp(
localizationsDelegates: localizationsDelegates,
)
并预加载系统的语言环境:
import 'dart:ui' as ui;
...
for (final delegate in localizationsDelegates) {
await delegate.load(ui.Locale(ui.window.locale.languageCode));
}
答案 3 :(得分:3)
对于当前的Intl
版本,我遇到了同样的问题,因此我已经解决了
这些进口:
import 'package:intl/intl.dart';
import 'package:intl/date_symbol_data_local.dart';
和代码:
initializeDateFormatting();
DateTime now = DateTime.now();
var dateString = DateFormat('dd-MM-yyyy').format(now);
final String configFileName = 'lastConfig.$dateString.json';
答案 4 :(得分:3)
在main中使用这个函数
initializeDateFormatting();
并像这样导入
import 'package:intl/date_symbol_data_local.dart';
答案 5 :(得分:1)
验证您的进口商品:
import 'package:intl/date_symbol_data_local.dart';
import 'package:intl/intl.dart';
根据您的语言设置initializeDateFormatting,例如:
initializeDateFormatting('pt_BR', null);
答案 6 :(得分:1)
在您的pubspec.yaml中,添加以下依赖包:intl:
在最高的StatefulWidget(在dart文件中)中,添加以下导入:
import 'package:intl/intl.dart';
import 'package:intl/date_symbol_data_local.dart';
@override
void initState() {
super.initState();
initializeDateFormatting(); //very important
}
DateTime now = new DateTime.now();
var formatter = new DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
String nowFormatted = formatter.format(now);
答案 7 :(得分:0)
我遇到了同样的错误。但是,仅当在应用内的区域设置(“ en”和“ si”)之间切换时。没有其他解决方案对我有用。因此,我只是想出了这个最愚蠢的解决方案,它确实有效。只是在catch块内调用initializeDateFormatting()
时将日期格式包装在try-catch块中
String date(DateTime date, String _languageCode) {
try {
var formatter = new DateFormat.yMMMMd(_languageCode);
return formatter.format(date);
} catch(e) {
initializeDateFormatting();
var formatter = new DateFormat.yMMMMd(_languageCode);
return formatter.format(date);
}
}
答案 8 :(得分:0)
我的问题是,即使我不是特别使用“ en_US”语言环境,我也会遇到错误。但是我通过以下方法解决了这个问题:
initializeDateFormatting('en', null);
initializeDateFormatting('en_US,', null);
答案 9 :(得分:0)
根据系统区域设置初始化日期格式。
import 'package:intl/intl_standalone.dart'; // For standlone app
import 'package:intl/intl_browser.dart'; // For standlone app
import 'package:intl/date_symbol_data_local.dart';
...
await initializeDateFormatting(await findSystemLocale(), null);