# Dictionary template generated Wed, 04 Dec 2019 13:37:00 GMT
# Based on Mojolicious::Plugin::Number::Commify
my $THOUSAND_SEP_RE = qr/(
  ^[-+]?           # beginning of number.
  \d+?             # first digits before first comma
  (?=              # followed by, (but not included in the match) :
    (?>(?:\d{3})+) # some positive multiple of three digits.
    (?!\d)         # an *exact* multiple, not x * 3 + 1 or whatever.
  )|               # or:
  \G\d{3}          # after the last group, get three digits
  (?=\d)           # but they have to have more digits after them.
)/x;

{
   _ => sub { $_->locale },
  de => {
    numf => sub {
      shift;
      my %val = @_;
      my $num = $val{number} or return 0;
      $num =~ s/$THOUSAND_SEP_RE/$1\./g;
      return $num;
    },
    Cancel => 'Abbrechen',
    Apply => 'Anwenden',
    Options => 'Optionen',
    SEARCH => 'SUCHE',
    words_to_be_searched => 'Zu suchende Wortform(en)',
    search_description => 'Wenn sie mehrere Wortformen kontrastieren wollen, trennen Sie diese mit Leerzeichen, um um den Mittelpunkt der Alternativen herum nach ähnlichen Wörtern zu suchen und mit "|", um die Nachbarn zu allen angegebenen Wortformen zur erhalten.',
    paradigmatic_tsne => 'Paradigmatisch (t-SNE)',
    paradigmatic_som => 'Paradigmatisch (SOM)',
    syntagmatic =>  'Syntagmatisch',
    collocate_w2v => "Kollokat (W2V)",
    collocate_ca => "Kollokat (KA)",
    af_window => "AF-Fenster",
    info => <<INFOENDD,
    <p>
    DeReKoVecs ist das neue gläserne Labor der des Programmbereichs Korpuslinguistik am IDS zur Untersuchung von Maßen und Visualisierungen, die der Erforschung paradigmatischer und syntagmatischer Beziehungen dienen.
    </p>

INFOENDD
    about => "Über DeReKoVecs",
    training_parameters => "Training-Parameter",
    references => "Literatur",
    abouttext => "de/about",
    footer => "de/footer",
    notfounddialog => "#not-found-dialog_de"
  },
  -en => {
    numf => sub {
      shift;
      my %val = @_;
      my $num = $val{number} or return 0;
      $num =~ s/$THOUSAND_SEP_RE/$1\,/g;
      return $num;
    },
    Cancel => 'Cancel',
    Apply => 'Apply',
    Options => 'Options',
    SEARCH => 'SEARCH',
    words_to_be_searched => 'Word(s) to be searched',
    search_description => 'When looking for multiple words use spaces as separators to search around the average vector and | as separator to get the neighbours for each word.',
    paradigmatic_tsne => 'Paradigmatic (t-SNE)',
    paradigmatic_som => 'Paradigmatic (SOM)',
    syntagmatic =>  'Syntagmatic',
    collocate_w2v => "Collocate (W2V)",
    collocate_ca => "Collocate (CA)",
    af_window => "AF window",
    info => <<INFOEND,
    <p>
    DeReKoVecs is the new open lab of the IDS Corpus Linguistics Group for investigating measures and visualizations that serve to explore paradigmatic and syntagmatic relations.
    </p>
INFOEND
    about => "About DeReKoVecs",
    training_parameters => "Training Parameters",
    references => "Literature",
    abouttext => "en/about",
    footer => "en/footer",
    notfounddialog => "#not-found-dialog_en"

  }
};
