/**
 * DO NOT EDIT. This is code generated via pkg/intl/generate_localized.dart
 * This is a library that provides messages for a fr locale. All the
 * messages from the main program should be duplicated here with the same
 * function name.
 */

library messages_fr;
import 'package:intl/intl.dart';
import 'package:intl/message_lookup_by_library.dart';

final messages = new MessageLookup();

class MessageLookup extends MessageLookupByLibrary {

  get localeName => 'fr';
  static alwaysTranslated() => "Cette chaîne est toujours traduit";

  static escapable() => "Escapes: \n\r\f\b\t\v.";

  static leadingQuotes() => "\"Soi-disant\"";

  static message1() => "Il s\'agit d\'un message";

  static message2(x) => "Un autre message avec un seul paramètre $x";

  static message3(a, b, c) => "Caractères qui doivent être échapper, par exemple barres \\ dollars \${ (les accolades sont ok), et xml/html réservés <& et des citations \" avec quelques paramètres ainsi $a, $b, et $c";

  static method() => "Cela vient d\'une méthode";

  static multiLine() => "Cette message prend plusiers lignes.";

  static nestedMessage(names, number, combinedGender, place) => "${Intl.gender(combinedGender, female: '${Intl.plural(number, one: '$names était allée à la $place', other: '$names étaient allées à la $place')}', other: '${Intl.plural(number, zero: 'Personne n\'avait allé à la $place', one: '${names} était allé à la $place', other: '${names} étaient allés à la $place')}')}";

  static nestedOuter(number, gen) => "${Intl.plural(number, other: '${Intl.gender(gen, male: '$number homme', other: '$number autre')}')}";

  static nestedSelect(currency, amount) => "${Intl.select(currency, {'CDN': '${Intl.plural(amount, one: '$amount dollar Canadien', other: '$amount dollars Canadiens')}', 'other': 'Nimporte quoi', })}";

  static nonLambda() => "Cette méthode n\'est pas un lambda";

  static notAlwaysTranslated() => "Ce manque certaines traductions";

  static originalNotInBMP() => "Anciens caractères grecs jeux du pendu: 𐅆𐅇.";

  static outerGender(g) => "${Intl.gender(g, female: 'femme', male: 'homme', other: 'autre')}";

  static outerPlural(n) => "${Intl.plural(n, zero: 'rien', one: 'un', other: 'quelques-uns')}";

  static outerSelect(currency, amount) => "${Intl.select(currency, {'CDN': '$amount dollars Canadiens', 'other': '$amount certaine devise ou autre.', })}";

  static plurals(num) => "${Intl.plural(num, zero: 'Est-ce que nulle est pluriel?', one: 'C\'est singulier', other: 'C\'est pluriel ($num).')}";

  static staticMessage() => "Cela vient d\'une méthode statique";

  static trickyInterpolation(s) => "L\'interpolation est délicate quand elle se termine une phrase comme ${s}.";

  static types(a, b, c) => "$a, $b, $c";

  static whereTheyWentMessage(name, gender, place) => "${Intl.gender(gender, female: '${name} est allée à sa ${place}', male: '${name} est allé à sa ${place}', other: '${name} est allé à sa ${place}')}";


  final messages = const {
    "alwaysTranslated" : alwaysTranslated,
    "escapable" : escapable,
    "leadingQuotes" : leadingQuotes,
    "message1" : message1,
    "message2" : message2,
    "message3" : message3,
    "method" : method,
    "multiLine" : multiLine,
    "nestedMessage" : nestedMessage,
    "nestedOuter" : nestedOuter,
    "nestedSelect" : nestedSelect,
    "nonLambda" : nonLambda,
    "notAlwaysTranslated" : notAlwaysTranslated,
    "originalNotInBMP" : originalNotInBMP,
    "outerGender" : outerGender,
    "outerPlural" : outerPlural,
    "outerSelect" : outerSelect,
    "plurals" : plurals,
    "staticMessage" : staticMessage,
    "trickyInterpolation" : trickyInterpolation,
    "types" : types,
    "whereTheyWentMessage" : whereTheyWentMessage
  };
}