# 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. Mit "+" und "-" lässt sich im Vektorraum rechnen: "König - Mann + Frau" sucht die Nachbarn der so bestimmten Position und die Kontexte, die sie vorhersagt.',
    not_in_vocabulary => 'Nicht im Vokabular und daher nicht berücksichtigt:',
    ca_single_word_only => 'Zählbasierte Kollokatoren gibt es nur für eine einzelne Wortform. Sie werden pro Knoten in der Kookkurrenzdatenbank nachgeschlagen und lassen sich nicht aus dem Suchvektor berechnen; die prädiktiven Kollokatoren links dagegen schon.',
    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. "+" and "-" do arithmetic in the vector space: "König - Mann + Frau" searches the neighbours of the position it computes, and the contexts that position predicts.',
    not_in_vocabulary => 'Not in the vocabulary and therefore left out:',
    ca_single_word_only => 'Count based collocators exist for a single word form only. They are looked up per node in the co-occurrence database and cannot be computed from the query vector; the predictive collocators on the left can.',
    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"

  }
};
