Flutter:使用没有 args 和 name 参数的 Intl.message

Flutter: Using Intl.message without args and name parameters

当我 运行 flutter pub pub run intl_translation:extract_to_arb --output-dir=lib/l10n lib/localizations.dart 时,生成器会跳过所有 Intl.message 仅包含字符串的文件,打印:

Skipping invalid Intl.message invocation
    <Intl.message("MESSAGE")>
    reason: The 'args' argument for Intl.message must be specified for messages with parameters. Consider using rewrite_intl_messages.dart
    from lib/main.dart    line: 125, column: 9

doc for the internationalization packageThe name and args parameters must match the name (or ClassName_methodName) and arguments list of the function respectively. For messages without parameters, both of these can be omitted. 但在我看来,在这种情况下,我的消息没有参数!

我是不是误解了 Dart 开发人员所说的参数的意思?

将它从构造函数中移出到一个单独的函数中。您可以从构造函数中调用该函数,但它必须是函数中单独的一条消息。

原因是为了支持带参数的消息。至少在概念上,翻译是作为一个单独的函数生成的。所以我们有

foo(String name) => Intl.message('Hello $name', name: 'foo', args: [name]);

在延迟库中 fr_FR 某处

foo(String name) => 'Bonjour $name'

Intl.message 的实现在概念上是

currentLanguage.lookup('foo').call(args)

所以函数中只能有一条消息,因为我们要用其他函数替换该函数。它不能是构造函数,因为我们不能只委托给它。