And*_*zza 7 internationalization intl dart
我开始在我的dart项目中使用intl包。开始使用此软件包后,我将使用以下代码:
DateTime now = new DateTime.now();
var formatter = new DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
String nowFormatted = formatter.format(now);
Run Code Online (Sandbox Code Playgroud)
并且它可以正常工作。使用intl后,我会在日志中获得以下消息:
Uncaught LocaleDataException: Locale data has not been initialized, call initializeDateFormatting(<locale>).
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我应该在此代码段中传递语言环境
小智 14
在 main 中使用这个函数
initializeDateFormatting();
Run Code Online (Sandbox Code Playgroud)
并像这样导入
import 'package:intl/date_symbol_data_local.dart';
rub*_*low 10
验证您的导入:
import 'package:intl/date_symbol_data_local.dart';
import 'package:intl/intl.dart';
Run Code Online (Sandbox Code Playgroud)
根据您的语言设置initializeDateFormatting,例如:
initializeDateFormatting('pt_BR', null);
Run Code Online (Sandbox Code Playgroud)
我对当前Intl版本有同样的问题,所以我解决了
这些进口:
import 'package:intl/intl.dart';
import 'package:intl/date_symbol_data_local.dart';
Run Code Online (Sandbox Code Playgroud)
和代码:
initializeDateFormatting();
DateTime now = DateTime.now();
var dateString = DateFormat('dd-MM-yyyy').format(now);
final String configFileName = 'lastConfig.$dateString.json';
Run Code Online (Sandbox Code Playgroud)
小智 7
在您的 pubspec.yaml 中,添加此依赖包:intl:
在最高的 StatefulWidget(在 dart 文件中)中,添加以下导入:
import 'package:intl/intl.dart';
import 'package:intl/date_symbol_data_local.dart';
Run Code Online (Sandbox Code Playgroud)
@override
void initState() {
super.initState();
initializeDateFormatting(); //very important
}
Run Code Online (Sandbox Code Playgroud)
DateTime now = new DateTime.now();
var formatter = new DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
String nowFormatted = formatter.format(now);
Run Code Online (Sandbox Code Playgroud)
我已经以这种方式解决了这种使用:
DateTime now = new DateTime.now();
var formatter = new DateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", 'en');
String nowFormatted = formatter.format(now);
Run Code Online (Sandbox Code Playgroud)
但是我可以将其设置为用于配置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
]);
}
Run Code Online (Sandbox Code Playgroud)
在我失踪之前:
var enDatesFuture = initializeDateFormatting('en', null);
Run Code Online (Sandbox Code Playgroud)
有关更多信息,我使用:
小智 5
我的问题是,即使我没有特别使用“en_US”区域设置,我也会收到错误。但我通过以下方式解决了它:
initializeDateFormatting('en', null);
initializeDateFormatting('en_US,', null);
Run Code Online (Sandbox Code Playgroud)
无需直接从您的代码中调用initializeDateFormatting。只需调用应用程序本地化委托的load方法。
因此,您可以像这样指定委托:
final localizationsDelegates = <LocalizationsDelegate>[
AppLocalizationsDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
CupertinoLocalizationsDelegate()
];
...
MaterialApp(
localizationsDelegates: localizationsDelegates,
)
Run Code Online (Sandbox Code Playgroud)
并使用系统的语言环境预加载它们:
import 'dart:ui' as ui;
...
for (final delegate in localizationsDelegates) {
await delegate.load(ui.Locale(ui.window.locale.languageCode));
}
Run Code Online (Sandbox Code Playgroud)
小智 5
在你的类中MaterialApp添加此代码
import 'package:intl/date_symbol_data_local.dart';
@override
void initState() {
// TODO: implement initState
super.initState();`enter code here`
initializeDateFormatting();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3344 次 |
| 最近记录: |