Flutter: использование Intl.message без аргументов и параметров имени - PullRequest
0 голосов
/ 27 апреля 2019

Когда я запускаю 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

Документ для пакета интернационализации говорит The 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 подразумевают под параметрами?

1 Ответ

1 голос
/ 30 апреля 2019

Переместите его из конструктора в отдельную функцию. Вы можете вызвать функцию из конструктора, но это должно быть только одно сообщение в функции.

Причина заключается в поддержке сообщений с параметрами. Перевод генерируется, по крайней мере концептуально, как отдельная функция. Итак, у нас есть

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)

Так что в функции может быть только одно сообщение, потому что мы собираемся заменить эту функцию чем-то другим. И это не может быть конструктор, потому что мы не можем просто делегировать это.

...