|  | # 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; | 
|  | }, | 
|  | numo => sub { | 
|  | shift; | 
|  | my %val = @_; | 
|  | my $day = $val{day} or return ''; | 
|  | return $day . '.'; | 
|  | }, | 
|  | 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 => '<%= loc("en_korap_label") %>: Finde <%== loc("searchjob") %>', | 
|  | searchplaceholder => 'Finde ...', | 
|  | go => 'Los!', | 
|  | news => 'Neuigkeiten', | 
|  | in => 'in', | 
|  | by => 'von', | 
|  | page => { | 
|  | -sg => 'S.', | 
|  | pl => 'S.' | 
|  | }, | 
|  | 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', | 
|  | tour => 'Tour', | 
|  | notAvailInCorpus => 'Im vorliegenden Korpus nicht verfügbar', | 
|  | pubOn => 'veröffentlicht am', | 
|  | matchCount => 'Treffer', | 
|  | noMatches => 'Es wurden keine Treffer für <%== loc("searchjob") %> gefunden.', | 
|  | moreMatches => { | 
|  | -short => 'mehr als', | 
|  | long => 'Dieser Wert gibt die Mindestanzahl an Treffern wieder. Die tatsächliche Trefferanzahl kann aufgrund von Sucheinschränkungen nicht angezeigt werden.', | 
|  | }, | 
|  | 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 => '<%= loc "en_korap_label" %> - Korpusanalyseplattform der nächsten Generation', | 
|  | overview => '<%= loc "en_korap_label" %> - Übersicht', | 
|  | keywords => 'KorAP, DeReKo, Korpussuche, IDS Mannheim, Leibniz-Institut für Deutsche Sprache', | 
|  | }, | 
|  | privacy => 'Datenschutz', | 
|  | imprint => 'Impressum', | 
|  | settings => 'Einstellungen', | 
|  | 'oclock' => 'Uhr', | 
|  | maintenanceWork => { | 
|  | time => 'Wartungsfenster', | 
|  | desc => 'Aufgrund von Wartungsarbeiten wird es zu Unterbrechungen des Dienstes kommen.', | 
|  | }, | 
|  | Template => { | 
|  | intro => 'de/intro', | 
|  | doc => { | 
|  | ql => { | 
|  | '.' => 'de/doc/ql', | 
|  | 'poliqarp-plus' => 'de/doc/ql/poliqarp-plus', | 
|  | 'cosmas-2' => 'de/doc/ql/cosmas-2', | 
|  | 'regexp' => 'de/doc/ql/regexp', | 
|  | 'fcsql' => 'de/doc/ql/fcsql', | 
|  | 'cql' => 'de/doc/ql/cql', | 
|  | 'annis' => 'de/doc/ql/annis' | 
|  | }, | 
|  | 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; | 
|  | }, | 
|  | numo => sub { | 
|  | shift; | 
|  | my %val = @_; | 
|  | my $day = $val{day} or return ''; | 
|  | if ($day > 3) { | 
|  | return $day . 'th'; | 
|  | } elsif ($day == 3) { | 
|  | return '3rd'; | 
|  | } elsif ($day == 2) { | 
|  | return '2nd'; | 
|  | }; | 
|  | return '1st'; | 
|  | }, | 
|  | about => 'About KorAP', | 
|  | login => 'Login', | 
|  | logout => 'Logout', | 
|  | register => 'Register', | 
|  | pwdforgotten => 'Password forgotten?', | 
|  | go => 'Go!', | 
|  | news => 'News', | 
|  | # 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 => '<%= loc("korap_label") %>: Find <%== loc("searchjob") %>', | 
|  | searchplaceholder => 'Find ...', | 
|  | in => 'in', | 
|  | by => 'by', | 
|  | page => { | 
|  | -sg => 'p.', | 
|  | pl  => 'pp.', | 
|  | }, | 
|  | 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") %>.', | 
|  | moreMatches => { | 
|  | -short => 'more than', | 
|  | long => 'This value represents the minimum number of matches in the database. The exact number cannot be displayed due to search restrictions.', | 
|  | }, | 
|  |  | 
|  | 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', | 
|  | 'oclock' => 'o\'clock', | 
|  | underConstruction => 'Under Construction!', | 
|  | tutorial => 'Help', | 
|  | tour => 'Tour', | 
|  | korap => { | 
|  | -short => 'KorAP', | 
|  | label => '<%= loc "korap_short" %><% if (loc("title_addon")) { %>-<%= loc("title_addon") %><% } %>', | 
|  | desc => '<%= loc "korap_label" %> - Corpus Analysis Platform', | 
|  | overview => '<%= loc "korap_label" %> - 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', | 
|  | maintenanceWork => { | 
|  | time => 'Maintenance', | 
|  | desc => 'Due to maintenance work the service will be interrupted.', | 
|  | }, | 
|  | Template => { | 
|  | intro => 'intro', | 
|  | doc => { | 
|  | ql => { | 
|  | '.' => 'doc/ql', | 
|  | 'poliqarp-plus' => 'doc/ql/poliqarp-plus', | 
|  | 'cosmas-2' => 'doc/ql/cosmas-2', | 
|  | 'regexp' => 'doc/ql/regexp', | 
|  | 'fcsql' => 'doc/ql/fcsql', | 
|  | 'cql' => 'doc/ql/cql', | 
|  | 'annis' => 'doc/ql/annis' | 
|  | }, | 
|  | 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?' | 
|  | } | 
|  | } | 
|  | }; |