t method

String t(
  1. String key, {
  2. String? keyPlural,
  3. List<Object>? pArgs,
  4. Map<String, Object>? nArgs,
  5. String? domain,
  6. String msgctxt = '',
})

Implementation

String t(
  String key, {
  String? keyPlural,
  List<Object>? pArgs,
  Map<String, Object>? nArgs,
  String? domain,
  String msgctxt = '',
}) {
  assert(
    pArgs == null || nArgs == null,
    'You can only use one of pArgs (position arguments) or nArgs (named arguments)',
  );
  late String message;

  if (keyPlural != null) {
    // final num? count = nArgs != null ? nArgs.values.firstWhereOrNull((e) => e is num) : pArgs?[0];
    final num? count = nArgs?.values.whereType<num?>().firstOrNull ?? pArgs?.whereType<num?>().firstOrNull;

    if (count == null) {
      throw ArgumentError(
        'You must provide a count argument as a number. Either as a named argument or as a positional argument',
      );
    }

    message = _gt.ngettext(
      key,
      keyPlural,
      count.toInt(),
      domain: domain,
      msgctxt: msgctxt,
    );
  } else {
    message = _gt.gettext(
      key,
      domain: domain,
      msgctxt: msgctxt,
    );
  }

  if (nArgs != null) {
    for (final entry in nArgs.entries) {
      message = message.replaceAll('{${entry.key}}', entry.value.toString());
    }
  } else if (pArgs != null) {
    for (var i = 0; i < pArgs.length; i++) {
      message = message.replaceAll('{$i}', pArgs[i].toString());
    }
  }

  return message;
}