# 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;
    },
    about => 'Über KorAP',
    login => 'Anmelden',
    logout => 'Abmelden',
    register => 'Registrieren',
    pwdforgotten => 'Password vergessen?',
    # TODO: use document.write() refering to vc.getName()!
    searchjob => '»<%== $q %>« <% if (param("collection")) { %>im definierten Korpus <% } %>mit <%== loc("QL_" . $ql, "unbekannter Anfragesprache") %>',
    searchtitle => 'KorAP: Finde <%== loc("searchjob") %>',
    searchplaceholder => 'Finde ...',
    go => 'Los!',
    news => 'Neuigkeiten & Ankündigungen',
    in => 'in',
    by => 'von',
    pwd => 'Passwort',
    email => 'Email',
    username => 'Benutzername',
    upload => 'Hochladen',
    userormail => 'Benutzername oder Email',
    with => 'mit',
    glimpse => {
      desc => 'Zeige nur die ersten Treffer in beliebiger Reihenfolge'
    },
    activateJS => 'Für den vollen Funktionsumfang aktivieren Sie bitte JavaScript!',
    faq => 'FAQ',
    tutorial => 'Hilfe und Dokumentation',
    notAvailInCorpus => 'Im vorliegenden Korpus nicht verfügbar',
    pubOn => 'veröffentlicht am',
    matchCount => 'Treffer',
    noMatches => 'Es wurden keine Treffer für <%== loc("searchjob") %> gefunden.',
    notFound => '404 - Seite nicht gefunden',
    notIssued => 'Die Aktion konnte nicht durchgeführt werden.',
    backendNotAvailable => 'Das Backend ist nicht verfügbar unter <code><%= app->korap->api =></code>!',
    jsFile => 'kalamar-<%= $Kalamar::VERSION %>-de.js',
    underConstruction => 'In Vorbereitung!',
    korap => {
      -short => 'KorAP',
      desc => 'KorAP - Korpusanalyseplattform der nächsten Generation',
      overview => 'KorAP - Übersicht',
      keywords => 'KorAP, DeReKo, Korpussuche, IDS Mannheim, Leibniz-Institut für Deutsche Sprache',
    },
    privacy => 'Datenschutz',
    imprint => 'Impressum',
    settings => 'Einstellungen',
    Template => {
      intro => 'de/intro',
      doc => {
        ql => {
          'poliqarp-plus' => 'de/doc/ql/poliqarp-plus',
          'cosmas-2' => 'de/doc/ql/cosmas-2'
        },
        api => {
          'koralquery' => 'de/doc/api/koralquery'
        },
        data => {
          'annotation' => 'de/doc/data/annotation'
        },
        development => {
          'kalamar' => 'de/doc/development/kalamar',
          'karang' => 'de/doc/development/karang',
          'koral' => 'de/doc/development/koral',
          'krill' => 'de/doc/development/krill',
          'kustvakt' => 'de/doc/development/kustvakt'
        }
      }
    },
    Nav => {
      'ql' => 'Anfragesprachen',
      '#queryterms' => 'Suchbegriffe',
      '#logical-operators' => 'Logische Operatoren',
      '#distance-operators' =>  'Abstandsoperatoren',
      '#annotation-operators' =>  'Annotationsoperatoren',
      '#combination-operators'=>  'Kombinationsoperatoren',
      '#area-operators' =>  'Textbereich-Operatoren',
      '#segments' => 'Einfache Segmente',
      '#complex' => 'Komplexe Segmente',
      '#spans' => 'Span-Segmente',
      '#paradigmatic-operators' => 'Paradigmatische Operatoren',
      '#syntagmatic-operators' => 'Syntagmatische Operatoren',
      '#class-operators' => 'Klassen-Operatoren',
      'regexp' => 'Reguläre Ausdrücke',
      'data' => 'Korpusdaten',
      'corpus' => 'Korpora',
      'annotation' => 'Annotationen',
      '#default-foundries' => 'Standard Foundries',
      'development' => 'Entwicklung',
      'faq' => 'FAQ'
    },
    QL => {
      cqp => 'CQP (neu)'
    }
  },
  -en => {
    jsFile => 'kalamar-<%= $Kalamar::VERSION %>-en.js',
    numf => sub {
      shift;
      my %val = @_;
      my $num = $val{number} or return 0;
      $num =~ s/$THOUSAND_SEP_RE/$1\,/g;
      return $num;
    },
    about => 'About KorAP',
    login => 'Login',
    logout => 'Logout',
    register => 'Register',
    pwdforgotten => 'Password forgotten?',
    go => 'Go!',
    news => 'News & Announcements',
    # TODO: use document.write() refering to vc.getName()!
    searchjob => '»<%== $q %>« <% if (param("collection")) { %>in the defined corpus <% } %>with <%== loc("QL_". $ql, "unknown query language") %>',
    searchtitle => 'KorAP: Find <%== loc("searchjob") %>',
    searchplaceholder => 'Find ...',
    in => 'in',
    by => 'by',
    pwd => 'Password',
    email => 'Email',
    username => 'Username',
    upload => 'Upload',
    userormail => 'Username or Email',
    with => 'with',
    notAvailInCorpus => 'Not available in the current corpus',
    pubOn => 'published on',
    matchCount => '<%= quant($found, "match", "matches") %>',
    noMatches => 'There were no matches found for <%== loc("searchjob") %>.',
    notFound => '404 - Page not found',
    notIssued => 'Unable to perform the action.',
    backendNotAvailable => 'The backend is not available at <code><%= app->korap->api %></code>!',
    glimpse => {
      -short => 'Glimpse',
      desc => 'Just show the first matches in arbitrary order'
    },
    activateJS => 'To make use of all features, please activate JavaScript!',
    faq => 'FAQ',
    underConstruction => 'Under Construction!',
    tutorial => 'Help and Documentation',
    korap => {
      -short => 'KorAP',
      desc => 'KorAP - Corpus Analysis Platform',
      overview => 'KorAP - Overview',
      region => 'DE-BW',
      placename => 'Mannheim',
      keywords => 'KorAP, DeReKo, Corpus Query Platform, IDS Mannheim, Leibniz Institute for the German Language'
    },
    QL => {
      poliqarp => 'Poliqarp',
      cosmas2 => 'Cosmas II',
      annis => 'Annis QL',
      cqp => 'CQP (new)',
      cql => 'CQL v1.2',
      fcsql => 'FCSQL'
    },
    privacy => 'Privacy',
    imprint => 'Imprint',
    settings => 'Settings',
    Template => {
      intro => 'intro',
      doc => {
        ql => {
          'poliqarp-plus' => 'doc/ql/poliqarp-plus',
          'cosmas-2' => 'doc/ql/cosmas-2'
        },
        api => {
          'koralquery' => 'doc/api/koralquery'
        },
        data => {
          'annotation' => 'doc/data/annotation'
        },
        development => {
          'kalamar' => 'doc/development/kalamar',
          'karang' => 'doc/development/karang',
          'koral' => 'doc/development/koral',
          'krill' => 'doc/development/krill',
          'kustvakt' => 'doc/development/kustvakt'
        }
      }
    },
    Nav => {
      'ql' => 'Query Languages',
      '#queryterms' => 'Query Terms',
      '#logical-operators' => 'Logical Operators',
      '#distance-operators' =>  'Distance Operators',
      '#annotation-operators' =>  'Annotation Operators',
      '#combination-operators'=>  'Combination Operators',
      '#area-operators' =>  'Area Operators',
      '#segments' => 'Simple Segments',
      '#complex' => 'Complex Segments',
      '#spans' => 'Span Segments',
      '#paradigmatic-operators' => 'Paradigmatic Operators',
      '#syntagmatic-operators' => 'Syntagmatic Operators',
      '#class-operators' => 'Class Operators',
      'regexp' => 'Regular Expressions',
      'data' => 'Corpus Data',
      'corpus' => 'Corpora',
      'annotation' => 'Annotations',
      '#default-foundries' => 'Default Foundries',
      'development' => 'Development',
      'faq' => 'FAQ'
    }
  },
  Piwik => {
    en => {
      'HowToOptOut' => 'How to opt-out from Piwik/Matomo tracking?'
    },
    de => {
      'HowToOptOut' => 'Wie kann ich die Weitergabe meiner Daten per Matomo/Piwik unterbinden?'
    }
  }
};
