chore: ensure translations are sensible

Also fix some translations
This commit is contained in:
Gregor Kleen 2021-05-19 13:12:59 +02:00
parent 2c2edca6fa
commit 79d4b72780
43 changed files with 254 additions and 184 deletions

View File

@ -19,14 +19,14 @@ ValueRequiredLabeledSimple fieldLabel@Text: #{fieldLabel} wird benötigt
ValueRequiredLabeledMultiWord fieldLabel@Text: „#{fieldLabel}“ wird benötigt
UnsupportedAuthPredicate authTagT@Text shownRoute@Text: „#{authTagT}“ wurde auf eine Route angewandt, die dies nicht unterstützt: „#{shownRoute}“
WorkflowScopeGlobal: Systemweit
WorkflowScopeTermSchool tid@TermId ssh@SchoolId: #{tid} #{ssh}
WorkflowScopeCourse tid@TermId ssh@SchoolId csh@CourseShorthand: #{tid} #{ssh} #{csh}
WorkflowScopeTermSchool tid@TermId ssh@SchoolId !ident-ok: #{tid} #{ssh}
WorkflowScopeCourse tid@TermId ssh@SchoolId csh@CourseShorthand !ident-ok: #{tid} #{ssh} #{csh}
SecretJSONFieldDecryptFailure: Konnte versteckte vertrauliche Daten nicht entschlüsseln
German: Deutsch
GermanGermany: Deutsch (Deutschland)
English: Englisch
EnglishEurope: Englisch (Europa)
ShortSexNotKnown: unb.
ShortSexMale: m
ShortSexMale !ident-ok: m
ShortSexFemale: w
ShortSexNotApplicable: k.A.

View File

@ -1,9 +1,9 @@
TestDownloadMaxSize: Maximale Dateigröße
TestDownloadMode: Modus
HeadingAdminCrontab: Crontab
AdminInstanceId: Instanz-Nummer:in
HeadingAdminCrontab !ident-ok: Crontab
AdminInstanceId: Instanz-Nummer
AdminCrontabNotGenerated: (Noch) keine Crontab generiert
CronMatchAsap: ASAP
CronMatchAsap !ident-ok: ASAP
CronMatchNone: Nie
ErrMsgCiphertext: Verschlüsselte Fehlermeldung
AmbiguousNameCandidatesRemoved n@Int: #{show n} #{pluralDE n "uneindeutiger Kandidat/uneindeutige Kandidatin" "uneindeutige Kandiat:innen"} entfernt
@ -22,7 +22,7 @@ NoParentCandidatesInferred: Keine neuen Unterstudiengänge inferiert
StudyDegreeChangeSuccess: Zuordnung Abschlüsse aktualisiert
StudyTermsShort: Studiengangkürzel
StudyTermsChangeSuccess: Zuordnung Studiengänge aktualisiert
StudyCandidateIncidence: Synchronisation
StudyCandidateIncidence !ident-ok: Synchronisation
StudyTermIsNew: Neu
AdminFeaturesHeading: Studiengänge
StudyTermsParentMissing: Elternteil wird benötigt
@ -52,7 +52,7 @@ BearerTokenRoutesTip: Wenn die Token-Validität nach Routen eingeschränkt und k
BearerTokenRouteMissing: Route wird benötigt
BearerTokenRestrictions: Routen-spezifische Einschränkungen
BearerTokenRestrictRoutes: Token-Validität nach Routen einschränken
BearerTokenRestrictRoute: Route
BearerTokenRestrictRoute !ident-ok: Route
BearerTokenRestrictValue: Einschränkung
BearerTokenAdditionalAuth: Zusätzliche Authorisierung
BearerTokenAdditionalAuthTip: Wird hier nichts angegeben, werden keine Einschränkungen daran gesetzt, wer das Token verwenden kann. Es reicht dann der Besitz.
@ -74,7 +74,7 @@ StudyFeatureParentInference: Unterstudiengang-Inferenz
StudyFeatureInferenceNoNameConflicts: Keine Konflikte beobachtet
StudyFeatureInferenceNameConflictsHeading: Studiengangseinträge mit beobachteten Konflikten
AdminHeading: Administration
AdminHeading !ident-ok: Administration
AdminPageEmpty: Diese Seite soll eine Übersichtsseite für Administrator:innen werden. Aktuell finden sich hier nur Links zu wichtigen Administrator-Funktionalitäten.
BearerTokenImpersonate: Auftreten als
BearerTokenImpersonateNone: Keine Änderung
@ -85,7 +85,7 @@ BearerTokenImpersonateRandomNegative: Anzahl muss positiv sein
BearerTokenImpersonateRandomCount: Anzahl
BearerTokenImpersonateUnknownUser email@UserEmail: Ein Nutzer/Eine Nutzerin mit E-Mail #{email} ist dem System nicht bekannt
BearerTokenImpersonateRandomWeightActivity: Nach Aktivität gewichten
BearerTokenArchiveName: tokens.zip
BearerTokenArchiveName !ident-ok: tokens.zip
TestDownloadDirect: Direkte Generierung
TestDownloadInTransaction: Generierung während Datenbank-Transaktion

View File

@ -22,7 +22,7 @@ CourseApplication: Bewerbung
AllocationCoursePriority i@Natural: #{i}. Wahl
AllocationCourseNoApplication: Keine Bewerbung
ApplicationPriority: Priorität
ApplicationVeto: Veto
ApplicationVeto !ident-ok: Veto
ApplicationVetoTip: Bewerber:in mit Veto werden garantiert nicht dem Kurs zugeteilt
ApplicationRatingPoints: Bewertung
ApplicationRatingPointsTip: Bewerber:in mit 5.0 werden garantiert nicht dem Kurs zugeteilt
@ -66,8 +66,8 @@ AllocationTotalCourses: Gewünschte Anzahl von Kursen
AllocationTotalCoursesTip: Sie werden im Laufe dieser Zentralanmeldung maximal so vielen Kursen zugeteilt, wie Sie hier angeben
AllocationRegistered: Teilnahme an der Zentralanmeldung erfolgreich registriert
AllocationRegistrationEdited: Einstellungen zur Teilnahme an der Zentralanmeldung erfolgreich angepasst
AllocationTitle termText@Text ssh'@SchoolShorthand allocation@AllocationName: #{termText} - #{ssh'}: #{allocation}
AllocationShortTitle termText@Text ssh'@SchoolShorthand ash@AllocationShorthand: #{termText} - #{ssh'} - #{ash}
AllocationTitle termText@Text ssh'@SchoolShorthand allocation@AllocationName !ident-ok: #{termText} - #{ssh'}: #{allocation}
AllocationShortTitle termText@Text ssh'@SchoolShorthand ash@AllocationShorthand !ident-ok: #{termText} - #{ssh'} - #{ash}
AllocationNotificationNewCourse: Benachrichtigung bei neuen Kursen
AllocationNotificationNewCourseTip: Wollen Sie per E-Mail benachrichtigt werden, wenn für diese Zentralanmeldung ein neuer Kurs eingetragen wird? Dies überschreibt die systemweite Einstellung in "Anpassen".
AllocationNotificationNewCourseSuccessForceOn: Sie werden benachrichtigt, wenn ein neuer Kurs eingetragen wird
@ -93,8 +93,8 @@ AllocationUsersTitle tid@TermId ssh@SchoolId ash@AllocationShorthand: #{tid}-#{s
#templates allocation/show/course
AllocationNoApplication: Keine Bewerbung
CourseAllocationCourseParticipants: Teilnehmer:innen
CourseMembersCount n@Int: #{n}
CourseMembersCountLimited n@Int max@Int: #{n}/#{max}
CourseMembersCount n@Int !ident-ok: #{n}
CourseMembersCountLimited n@Int max@Int !ident-ok: #{n}/#{max}
#templates allocation/accept
ComputedAllocation: Berechnete Vergabe
@ -110,7 +110,7 @@ AllocationMatchedUsers: Neu zugeteilt
#templates allocation/show
AllocationSchool: Institut
AllocationSemester: Semester
AllocationSemester !ident-ok: Semester
AllocationDescription: Beschreibung
AllocationStaffDescription: Beschreibung für Dozierende
AllocationStaffRegisterFrom: Eintragung der Kurse ab
@ -145,12 +145,12 @@ AllocationCourseRestrictionDontRestrict: Nicht einschränken
AllocationCourseRestrictionSubstitutes: Kurse, die aktuell Nachrücker akzeptieren
AllocationCourseRestrictionCustom: Benutzerdefiniert
AllocationName: Name
AllocationName !ident-ok: Name
Allocation: Zentralanmeldung
AllocationActive: Aktiv
AllocationUsersApplied: Bewerbungen
AllocationUsersAssigned: Zuweisungen
AllocationUsersVetoed: Vetos
AllocationUsersVetoed !ident-ok: Vetos
AllocationUsersRequested: Angefragte Plätze
AllocationUsersPriority: Zentrale Dringlichkeit

View File

@ -1,5 +1,5 @@
CourseApplicationTitle displayName@Text csh@CourseShorthand: Bewerbung für #{csh}: #{displayName}
CourseApplicationArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand appId@CryptoFileNameCourseApplication displayName@Text: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldCase (toPathPiece appId)}-#{foldCase displayName}
CourseApplicationArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand appId@CryptoFileNameCourseApplication displayName@Text !ident-ok: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldCase (toPathPiece appId)}-#{foldCase displayName}
CourseApplicationsAllocatedDirectory: zentral
CourseApplicationsNotAllocatedDirectory: direkt
CsvColumnApplicationsAllocation: Zentralanmeldung über die die Bewerbung eingegangen ist
@ -18,7 +18,7 @@ ApplicationUserColumns: Bewerbung
ApplicationRatingColumns: Bewertung
ApplicationGeneratedColumns: Stammdaten
ApplicationGeneratedColumnsTip: Stammdaten eines/einer Bewerbers/Bewerberin sind Daten, welche dem System zu diesem/dieser Benutzer/Benutzerin bekannt sind und welche der/die Benutzer/Benutzerin im Zuge der Bewerbung nicht beeinflussen kann.
CourseApplicationVeto: Veto
CourseApplicationVeto !ident-ok: Veto
CourseApplicationNoVeto: Kein Veto
CourseApplicationNoRatingPoints: Keine Bewertung
CourseApplicationNoRatingComment: Kein Kommentar

View File

@ -1,6 +1,6 @@
FilterCourse: Kurs
FilterCourseShort: Kürzel
FilterTerm: Semester
FilterTerm !ident-ok: Semester
FilterCourseSchoolShort: Institut
FilterRegistered: Angemeldet
FilterCourseSearch: Volltext-Suche
@ -16,7 +16,7 @@ CourseLecturerAlreadyAdded: Diese:r Nutzer:in ist bereits als Kursverwalter:in e
CourseLecturerType: Rolle
LecturerType: Rolle
CourseLecturerRightsIdentical: Alle Sorten von Kursverwalter:innen haben identische Rechte.
CourseAllocationOption term@Text name@Text: #{name} (#{term})
CourseAllocationOption term@Text name@Text !ident-ok: #{name} (#{term})
CourseAllocationParticipate: Teilnahme an Zentralanmeldung
CourseAllocationParticipateTip: Wird an einer Zentralanmeldung teilgenommen, kann es sein, dass Sie bestimmte Rechte, die Sie normalerweise bzgl. Ihres Kurses hätten, nicht ausüben können (z.B. Studierende direkt zum Kurs anmelden, Studierende abmelden, ...).
CourseNoAllocationsAvailable: Es sind aktuell keine Zentralanmeldungen verfügbar
@ -33,7 +33,7 @@ CourseSchoolMultipleTip: Es stehen für Sie mehrere Institute zur Auswahl. Stell
CourseName: Kurstitel
CourseShorthand: Kürzel
CourseShorthandUnique: Muss nur innerhalb Institut und Semester eindeutig sein. Wird verbatim in die Url der Kursseite übernommen.
CourseSemester: Semester
CourseSemester !ident-ok: Semester
CourseDescriptionPlaceholder: Bitte mindestens die Modulbeschreibung angeben
CourseHomepageExternal: Externe Homepage
CourseSemesterMultipleTip: Es stehen für Sie aktuell mehrere Semester zur Auswahl. Stellen Sie bitte sicher, dass Sie das für den Kurs korrekte Semester wählen.
@ -188,7 +188,7 @@ AssistantsFor: Assistent:innen
TutorsFor n@Int: #{pluralDE n "Tutor:in" "Tutor:innen"}
CorrectorsFor n@Int: #{pluralDE n "Korrektor:in" "Korrektor:innen"}
CourseParticipantsHeading: Kursteilnehmer:innen
CourseParticipantsCount n@Int: #{n}
CourseParticipantsCount n@Int !ident-ok: #{n}
CourseParticipantsCountOf n@Int m@Int: #{n} von #{m}
CourseVisibility: Sichtbarkeit
CourseInvisible: Dieser Kurs ist momentan nur für Dozierende, Assistent:innen, Tutor:innen, Korrektor:innen, angemeldete Teilnehmer:innen und Bewerber:innen sichtbar.
@ -202,7 +202,7 @@ CourseApplicationTemplateApplication: Bewerbungsvorlage(n)
CourseApplicationTemplateRegistration: Anmeldungsvorlage(n)
NotRegistered: Sie sind zu diesem Kurs nicht angemeldet.
CourseApplicationDeleteToEdit: Um Ihre Bewerbung zu editieren müssen Sie sie zunächst zurückziehen und sich erneut bewerben.
CourseMaterial: Material
CourseMaterial !ident-ok: Material
CourseMaterialNotFree: Das Kursmaterial ist nur für Mitglieder des Kurses einsehbar, also z.B. für Teilnehmer:innen, Tutor:innen, Korrektor:innen und Verwalter:innen.
CourseMaterialsFoundHere: Material zum Kurs finden Sie hier
CourseMaterialsNoneVisible: Aktuell gibt es zu diesem Kurs kein Material, oder nur Material auf das Sie keinen Zugriff haben (z.B. aufgrund von Fristen bzgl. der Sichtbarkeit).

View File

@ -5,7 +5,7 @@ CourseEventTime: Zeit
CourseEventRoom: Regulärer Raum
CourseEventRoomHidden: Raum nur für Teilnehmer:innen
CourseEventRoomHiddenTip: Soll der Raum nur angemeldeten Kursteilnehmer:innen angezeigt werden?
CourseEventRoomIsUnset: —
CourseEventRoomIsUnset !ident-ok: —
CourseEventRoomIsHidden: Raum wird nur Kurs-assoziierten Personen (Teilnehmer:innen, Tutor:innen, Korrektor:innen, etc.) angezeigt
CourseEventNote: Notiz
CourseEventActions: Aktionen

View File

@ -1,5 +1,5 @@
CourseNews: Aktuelles
CourseNewsArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand newsTitle@Text: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldCase newsTitle}
CourseNewsArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand newsTitle@Text !ident-ok: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldCase newsTitle}
CourseNewsFiles: Dateien
CourseNewsLastEdited time@Text: Zuletzt verändert: #{time}
CourseNewsActionEdit: Bearbeiten

View File

@ -12,8 +12,8 @@ ExamAutoOccurrenceMinimizeRooms: Verwendete Räume/Termine minimieren
ExamAutoOccurrenceMinimizeRoomsTip: Soll, für die Aufteilung, die Liste an Räumen/Terminen zunächst reduziert werden, sodass nur so wenige Räume verwendet werden, wie nötig (größte zuerst)?
ExamAutoOccurrenceOccurrencesChangedInFlight: Raumliste wurde verändert
ExamAutoOccurrenceParticipantsAssigned num@Int64: Verteilungstabelle erfolgreich gespeichert und #{num} #{pluralDE num "Teilnehmer:in" "Teilnehmer:innen"} zugewiesen
Proportion c@Text of'@Text prop@Rational: #{c}/#{of'} (#{rationalToFixed2 (100 * prop)}%)
ProportionNoRatio c@Text of'@Text: #{c}/#{of'}
Proportion c@Text of'@Text prop@Rational !ident-ok: #{c}/#{of'} (#{rationalToFixed2 (100 * prop)}%)
ProportionNoRatio c@Text of'@Text !ident-ok: #{c}/#{of'}
ExamCorrectHeading examname@Text: Prüfungsergebnisse für #{examname} eintragen
ExamCorrectErrorNeedleTooShort: Dieser Identifikator ist zu kurz.
ExamCorrectErrorMultipleMatchingParticipants: Dem Identifikator konnten mehrere Prüfungsteilnehmer:innen zugeordnet werden.
@ -119,7 +119,7 @@ ExamOccurrenceStartMustBeAfterExamStart eoName@ExamOccurrenceName: Beginn des Te
ExamOccurrenceEndMustBeBeforeExamEnd eoName@ExamOccurrenceName: Ende des Termins #{eoName} liegt nach dem Ende der Prüfung
ExamOccurrenceDuplicate eoRoom@Text eoRange@Text: Raum #{eoRoom}, Termin #{eoRange} kommt mehrfach mit der selben Beschreibung vor
ExamOccurrenceDuplicateName eoName@ExamOccurrenceName: Interne Terminbezeichnung #{eoName} kommt mehrfach vor
ExamOccurrenceRoomIsUnset: —
ExamOccurrenceRoomIsUnset !ident-ok: —
ExamOccurrenceRoomIsHidden: Raum wird nur Teilnehmer:innen angezeigt
ExamOccurrenceCannotBeDeletedDueToRegistrations eoName@ExamOccurrenceName: Termin #{eoName} kann nicht gelöscht werden, da noch Teilnehmer:innen diesem Termin zugewiesen sind. Über die Liste von Prüfungsteilnehmern können Sie zunächst die entsprechenden Terminzuweisungen entfernen.
ExamRegistrationMustFollowSchoolSeparationFromStart dayCount@Int: Nach Regeln des Instituts #{pluralDE dayCount "muss" "müssen"} zwischen "Anmeldung ab" und "Beginn" mindestens #{dayCount} #{pluralDE dayCount "Tag" "Tage"} liegen.
@ -183,8 +183,8 @@ ExamUsersResultSet count@Int64: Prüfungsergebnis für #{show count} #{pluralDE
ExamUsersHeading: Prüfungsteilnehmer:innen
ExamCorrectHeadDate: Zeit
ExamCorrectHeadParticipant: Teilnehmer:in
ExamCorrectHeadPart exampartnum@ExamPartNumber: #{exampartnum}
ExamCorrectHeadStatus: Status
ExamCorrectHeadPart exampartnum@ExamPartNumber !ident-ok: #{exampartnum}
ExamCorrectHeadStatus !ident-ok: Status
ExamCorrectUserCandidatesMore: und weitere
ExamCorrectExamResultDelete: Prüfungsergebnis löschen
ExamCorrectExamResultNone: Keine Änderung
@ -199,7 +199,7 @@ ExamCloseHeading: Prüfung abschließen
ExamAutoOccurrenceHeading: Automatische Raum-/Terminverteilung
#templates /exam-show
ExamShowOnline: Online/Offline
ExamShowOnline !ident-ok: Online/Offline
ExamShowSynchronicity: Synchron/Asynchron
ExamNever: Nie
ExamShowAids: Erlaubte Hilfsmittel
@ -211,7 +211,7 @@ ExamBonusRule: Prüfungsbonus aus Übungsbetrieb
ExamOccurrenceRule: Verfahren
ExamOccurrenceRuleParticipant: Termin- bzw. Raumzuteilungsverfahren
ExamRegisteredCount: Anmeldungen
ExamRegisteredCountOf num@Int64 count@Int64: #{num}/#{count}
ExamRegisteredCountOf num@Int64 count@Int64 !ident-ok: #{num}/#{count}
ExamOccurrences: Termine
GradingFrom: Ab
ExamNoShow: Nicht erschienen
@ -247,7 +247,7 @@ PointsMustBeMonotonic: Punktegrenzen müssen aufsteigend sein
ExamModeFormNone: Keine Angabe
ExamModeFormCustom: Benutzerdefiniert
ExamModeFormAids: Erlaubte Hilfsmittel
ExamModeFormOnline: Online/Offline
ExamModeFormOnline !ident-ok: Online/Offline
ExamModeFormSynchronicity: Synchron/Asynchron
ExamModeFormRequiredEquipment: Erforderliche Hilfsmittel
ExamModeFormRequiredEquipmentIdentificationTip: Es wird stets ein Hinweis angezeigt, dass Teilnehmer sich ausweisen können müssen.
@ -271,8 +271,8 @@ ExamRegistrationRegisteredWithoutField n@Int: #{n} #{pluralDE n "Teilnehmer:in w
ExamRegistrationParticipantsRegistered n@Int: #{n} #{pluralDE n "Teilnehmer:in wurde" "Teilnehmer:innen wurden"} zur Prüfung angemeldet
ExamOpenBook: Open Book
ExamClosedBook: Closed Book
ExamOnline: Online
ExamOffline: Offline
ExamOnline !ident-ok: Online
ExamOffline !ident-ok: Offline
ExamSynchronous: Synchron
ExamAsynchronous: Asynchron
ExamRequiredEquipmentNone: Nichts

View File

@ -43,7 +43,7 @@ ExamFinishedSince time@Text: Prüfungsergebnisse sichtbar seit #{time}
#templates exam-office/*
ExamUserSyncOfficeName: Name
ExamUserSyncOfficeName !ident-ok: Name
ExamUserSyncTime: Zeitpunkt
ExamUserSyncSchools: Institute
ExamUserSyncLastChange: Zuletzt geändert

View File

@ -14,7 +14,7 @@ ExternalExamCorrectErrorNoMatchingUsers: Dem Identifikator konnte kein Studieren
ExternalExamEdited coursen@CourseName examn@ExamName: Prüfung „#{examn}“ für Kurs „#{coursen}“ erfolgreich bearbeitet.
ExternalExamExists coursen@CourseName examn@ExamName: Prüfung „#{examn}“ für Kurs „#{coursen}“ existiert bereits.
ExternalExamEdit coursen@CourseName examn@ExamName: Bearbeiten: #{coursen}, #{examn}
ExternalExamSemester: Semester
ExternalExamSemester !ident-ok: Semester
ExternalExamSchool: Institut
ExternalExamCourseName: Veranstaltung
ExternalExamCourseNameTip: Muss nur innerhalb von Semester und Institut eindeutig sein.
@ -55,15 +55,15 @@ ExternalExamUserMarkSynchronisedCsvTip: Sollen beim CSV-Export automatisch alle
ExternalExamUserCsvName tid@TermId ssh@SchoolId coursen@CourseName examn@ExamName: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase coursen}-#{foldedCase examn}-teilnehmer
ExternalExamUserSynchronised: Synchronisiert
ExternalExamAction: Aktion
ExampleUser1FirstName: Max ZweiterName
ExampleUser1Surname: Mustermann
ExampleUser1DisplayName: Max Mustermann
ExampleUser2FirstName: Martha
ExampleUser2Surname: Musterstudent
ExampleUser2DisplayName: Musterstudent Martha
ExampleUser3FirstName: Maria
ExampleUser3Surname: Beispiel
ExampleUser3DisplayName: Beispiel
ExampleUser1FirstName !ident-ok: Max ZweiterName
ExampleUser1Surname !ident-ok: Mustermann
ExampleUser1DisplayName !ident-ok: Max Mustermann
ExampleUser2FirstName !ident-ok: Martha
ExampleUser2Surname !ident-ok: Musterstudent
ExampleUser2DisplayName !ident-ok: Musterstudent Martha
ExampleUser3FirstName !ident-ok: Maria
ExampleUser3Surname !ident-ok: Beispiel
ExampleUser3DisplayName !ident-ok: Beispiel
ExternalExamUserCsvSheetName tid@TermId ssh@SchoolId coursen@CourseName examn@ExamName: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase coursen}-#{foldedCase examn} Teilnehmer
ExternalExamUserMarkSynchronised: Prüfungsleistung als synchronisiert markieren

View File

@ -1,9 +1,9 @@
MaterialList: Material
MaterialName: Name
MaterialList !ident-ok: Material
MaterialName !ident-ok: Name
MaterialType: Art
MaterialTypePlaceholder: Folien, Code, Beispiel, ...
MaterialTypeSlides: Folien
MaterialTypeCode: Code
MaterialTypeCode !ident-ok: Code
MaterialTypeExample: Beispiel
MaterialDescription: Beschreibung
MaterialVisibleFrom: Sichtbar für Teilnehmer:innen ab
@ -11,8 +11,8 @@ MaterialVisibleFromTip: Ohne Datum nie sichtbar für Teilnehmer:innen; leer lass
MaterialVisibleFromEditWarning: Das Datum der Veröffentlichung liegt in der Vergangenheit und sollte nicht mehr verändert werden, da dies die Benutzer:innen verwirren könnte.
MaterialInvisible: Dieses Material ist für Teilnehmer:innen momentan unsichtbar!
MaterialFiles: Dateien
MaterialHeading materialName@MaterialName: #{materialName}
MaterialListHeading: Materialien
MaterialHeading materialName@MaterialName !ident-ok: #{materialName}
MaterialListHeading !ident-ok: Material
MaterialNewHeading: Neues Material veröffentlichen
MaterialNewTitle: Neues Material
MaterialEditHeading materialName@MaterialName: Material "#{materialName}" editieren
@ -23,8 +23,8 @@ MaterialDeleteCaption: Wollen Sie das unten aufgeführte Material wirklich lösc
MaterialDelHasFiles count@Int64: inklusive #{count} #{pluralDE count "Datei" "Dateien"}
MaterialIsVisible: Achtung, dieses Material wurde bereits veröffentlicht.
MaterialDeleted materialName@MaterialName: Material "#{materialName}" gelöscht
MaterialArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand materialName@MaterialName: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldedCase materialName}
MaterialVideo materialName@MaterialName: #{materialName} - Video
MaterialArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand materialName@MaterialName !ident-ok: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldedCase materialName}
MaterialVideo materialName@MaterialName !ident-ok: #{materialName} - Video
MaterialVideoUnsupported: Ihr Browser scheint keine eingebetten Videos zu unterstützen
MaterialVideoDownload: Herunterladen
MaterialFree: Kursmaterialien ohne Anmeldung zugänglich

View File

@ -1,7 +1,7 @@
ParticipantsList: Kursteilnehmerlisten
ParticipantsIntersect: Überschneidung von Kursteilnehmer:innen
ParticipantsCsvName tid@TermId ssh@SchoolId: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-kursteilnehmer:innen
ParticipantsIntersectCourseOption tid@TermId ssh@SchoolId coursen@CourseName: #{tid} - #{ssh} - #{coursen}
ParticipantsIntersectCourseOption tid@TermId ssh@SchoolId coursen@CourseName !ident-ok: #{tid} - #{ssh} - #{coursen}
ParticipantsIntersectCourses: Kurse
CourseParticipantsRegisteredWithoutField n@Int: #{n} #{pluralDE n "Teilnehmeri:in wurde ohne assoziiertes Studienfach" "Teilnehmer:innen wurden ohne assoziierte Studienfächer"} angemeldet, da #{pluralDE n "kein eindeutiges Hauptfach bestimmt werden konnte" "keine eindeutigen Hauptfächer bestimmt werden konnten"}
ParticipantsCsvSheetName tid@TermId ssh@SchoolId: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)} Kursteilnehmer:innen

View File

@ -7,8 +7,8 @@ SheetNoOldUnassigned: Alle Abgaben inaktiver Blätter sind bereits einem Korrekt
SheetDelHasSubmissions objs@Int: Inkl. #{objs} #{pluralDE objs "Abgabe" "Abgaben"}!
SheetDeleteQuestion: Wollen Sie das unten aufgeführte Übungsblatt und alle zugehörigen Abgaben wirklich löschen?
SheetDeleted: Übungsblatt gelöscht
SheetArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand shn@SheetName: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldedCase shn}
SheetTypeArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand shn@SheetName renderedSft@Text: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldedCase shn}-#{foldCase renderedSft}
SheetArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand shn@SheetName !ident-ok: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldedCase shn}
SheetTypeArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand shn@SheetName renderedSft@Text !ident-ok: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldedCase shn}-#{foldCase renderedSft}
SheetEditOk tid@TermId ssh@SchoolId csh@CourseShorthand sheetName@SheetName: Übungsblatt #{sheetName} wurde gespeichert in Kurs #{tid}-#{ssh}-#{csh}
SheetNameDup tid@TermId ssh@SchoolId csh@CourseShorthand sheetName@SheetName: Es gibt bereits ein Übungsblatt #{sheetName} in diesem Kurs #{tid}-#{ssh}-#{csh}
SheetVisibleFrom: Sichtbar für Teilnehmer:innen ab
@ -17,7 +17,7 @@ SheetActiveFrom: Aktiv ab/Beginn Abgabezeitraum
SheetActiveTo: Aktiv bis/Ende Abgabezeitraum
SheetSolutionFrom: Lösung ab
SheetSolutionFromTip: Ohne Datum nie für Teilnehmer:innen sichtbar, Korrektor:innen können diese Dateien immer herunterladen
SheetName: Name
SheetName !ident-ok: Name
SheetDescription: Hinweise für Teilnehmer:innen
SheetRequireExam: Anmeldung zu einer Prüfung voraussetzen?
SheetRequireExamTip: Wenn die Anmeldung zu einer Prüfung vorausgesetzt wird, können nur Kursteilnehmer:innen abgeben, die zum Zeitpunkt der Abgabe auch zur gewählten Prüfung angemeldet sind. Auch der Download von Übungsblatt-Dateien wird nur zur Prüfung angemeldeten Kursteilnehmer:innen erlaubt.
@ -142,7 +142,7 @@ PersonalisedSheetFilesDownloadSurnames: Mit Nachnamen
PersonalisedSheetFilesDownloadMatriculations: Mit Matrikelnummern
PersonalisedSheetFilesDownloadGroups: Mit festen Abgabegruppen
SheetCorrectorNormal: Normal
SheetCorrectorNormal !ident-ok: Normal
SheetCorrectorMissing: Abwesend
SheetCorrectorExcused: Entschuldigt
SheetGradingPoints maxPoints@Points: #{maxPoints} #{pluralDE maxPoints "Punkt" "Punkte"}

View File

@ -24,7 +24,7 @@ SubmissionCorrectionHead tid@TermId ssh@SchoolId csh@CourseShorthand sheetNa
CorrectionPseudonyms: Abgaben-Pseudonyme
CorrectionPseudonymsTip: Eine Abgabe pro Zeile, bei Gruppenabgaben mehrere Pseudonyme (komma-separiert) innerhalb einer Zeile. Kleine Schreibfehler werden u.U. automatisch korrigiert.
PseudonymSheet: Übungsblatt
CorrectionPseudonymSheet termDesc@Text csh@CourseShorthand shn@SheetName: #{termDesc} » #{csh} » #{shn}
CorrectionPseudonymSheet termDesc@Text csh@CourseShorthand shn@SheetName !ident-ok: #{termDesc} » #{csh} » #{shn}
SubmissionPseudonyms: Pseudonyme
UnknownPseudonym pseudonym@Text: Unbekanntes Pseudonym "#{pseudonym}"
SheetGroupTooLarge sheetGroupDesc@Text: Abgabegruppe zu groß: #{sheetGroupDesc}
@ -34,7 +34,7 @@ SheetNoGroupSubmission sheetGroupDesc@Text: Gruppenabgabe ist für dieses Blatt
SheetDuplicatePseudonym: Folgende Pseudonyme kamen mehrfach vor; alle Vorkommen außer dem Ersten wurden ignoriert:
SheetCreateExisting: Folgende Pseudonyme haben bereits abgegeben:
SubmissionCorrCreate: Abgaben registrieren
SubmissionTypeArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand shn@SheetName subId@CryptoFileNameSubmission renderedSfType@Text: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldedCase shn}-#{foldCase (toPathPiece subId)}-#{foldCase renderedSfType}
SubmissionTypeArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand shn@SheetName subId@CryptoFileNameSubmission renderedSfType@Text !ident-ok: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldedCase shn}-#{foldCase (toPathPiece subId)}-#{foldCase renderedSfType}
NoOpenSubmissions: Keine unkorrigierten Abgaben vorhanden
ColumnRatingPoints: Punktzahl
RatingComment: Kommentar
@ -98,7 +98,7 @@ SubmissionSheetMarking: Hinweise für Korrektor:innen
SubmissionGradingSummaryTitle intgr@Integer: #{intgr} #{pluralDE intgr "Abgabe" "Abgaben"}
SubmissionNoUploadExpected: Es ist keine Abgabe von Dateien vorgesehen.
SubmissionFilesCorrected: Abgegebene & Korrigierte Dateien
SubmissionOriginal: Original
SubmissionOriginal !ident-ok: Original
EditedBy name@Text time@Text: #{time} durch #{name}
SubmissionReplace: Abgabe ersetzen
@ -135,10 +135,10 @@ SubmissionDeleteCosubmittorsWarning n@Int: Bei #{pluralDE n "der oben aufgeführ
GenericShort: Kürzel
GenericBack: Zurück
GenericChange: Änderung
GenericNumChange: +/-
GenericMin: Min
GenericAvg: Avg
GenericMax: Max
GenericNumChange !ident-ok: +/-
GenericMin !ident-ok: Min
GenericAvg !ident-ok: Avg
GenericMax !ident-ok: Max
GenericAll: Insgesamt
SubmissionFilesUnchanged: Abgabedateien beibehalten
SubmissionFilesUnchangedTip: Sollen die bestehenden Abgabedateien beim Ersetzen der Abgabe unverändert übernommen werden?

View File

@ -10,7 +10,7 @@ HelpSubject: Betreff
HelpRequest: Supportanfrage/Verbesserungsvorschlag
HelpSent: Ihre Supportanfrage wurde weitergeleitet.
AdditionalFaqs: Weitere häufig gestellte Fragen
HelpName: Name
HelpName !ident-ok: Name
HelpTitle : Hilfe
HelpSendLastError: Letzte Fehlermeldung anhängen
HelpError: Letzte Fehlermeldung

View File

@ -2,7 +2,7 @@ MailTestSubject: Uni2work Test-E-Mail
MailTestContent: Dies ist eine Test-E-Mail versandt von Uni2work. Von Ihrer Seite ist keine Handlung notwendig.
MailTestDateTime: Test der Datumsformattierung:
MailSubjectSupport: Supportanfrage
MailSubjectSupportCustom customSubject@Text: [Support] #{customSubject}
MailSubjectSupportCustom customSubject@Text !ident-ok: [Support] #{customSubject}
MailSubjectPasswordReset: Uni2work-Passwort ändern bzw. setzen
CommUndisclosedRecipients: Verborgene Empfänger:innen
CommAllRecipients: alle-empfaenger

View File

@ -1,4 +1,4 @@
TitleMetrics: Metriken
MetricNoSamples: Keine Messwerte
MetricName: Name
MetricName !ident-ok: Name
MetricValue: Wert

View File

@ -1,13 +1,16 @@
ChangelogItemFeature: Feature
ChangelogItemBugfix: Bugfix
SexNotKnown: Unknown
SexMale: Male
SexFemale: Female
SexNotApplicable: Not applicable
NoSubmissions: No submission
CorrectorSubmissions: External submission via pseudonym
UserSubmissions: Direct submission in Uni2work
SystemExamOffice: Exam office
SystemFaculty: Faculty member
SystemStudent: Student
BothSubmissions: Submission either directly in Uni2work or externally via pseudonym
ChangelogItemFeature !ident-ok: Feature
ChangelogItemBugfix !ident-ok: Bugfix
SexNotKnown: Unbekannt
SexMale: Männlich
SexFemale: Weiblich
SexNotApplicable: Keine Angabe
NoSubmissions: Keine Abgabe
CorrectorSubmissions: Abgabe extern mit Pseudonym
UserSubmissions: Direkte Abgabe in Uni2work
BothSubmissions: Abgabe direkt in Uni2work oder extern mit Pseudonym
SystemExamOffice: Prüfungsverwaltung
SystemFaculty: Fakultätsmitglied
SystemStudent: Student:in

View File

@ -1,13 +1,16 @@
ChangelogItemFeature: Feature
ChangelogItemBugfix: Bugfix
SexNotKnown: Unknown
SexMale: Male
SexFemale: Female
SexNotApplicable: Not applicable
NoSubmissions: No submission
CorrectorSubmissions: External submission via pseudonym
UserSubmissions: Direct submission in Uni2work
BothSubmissions: Submission either directly in Uni2work or externally via pseudonym
SystemExamOffice: Exam office
SystemFaculty: Faculty member
SystemStudent: Student
BothSubmissions: Submission either directly in Uni2work or externally via pseudonym

View File

@ -4,7 +4,7 @@ NewsUpcomingSheets: Anstehende Übungsblätter
NewsUpcomingExams: Bevorstehende Prüfungen
NewsHideHiddenSystemMessages: Versteckte Nachrichten nicht mehr anzeigen
NewsShowHiddenSystemMessages: Versteckte Nachrichten anzeigen
NewsExamOccurrenceRoomIsUnset: —
NewsExamOccurrenceRoomIsUnset !ident-ok: —
NewsExamOccurrenceRoomIsHidden: Raum wird nur Teilnehmer:innen angezeigt
NewsExamRegistered: Zur Prüfung angemeldet
NewsExamNotRegistered: Nicht zur Prüfung angemeldet

View File

@ -1,6 +1,6 @@
HeadingSchoolList: Institute
SchoolShort: Kürzel
SchoolName: Name
SchoolName !ident-ok: Name
SchoolLdapOrganisations: Assoziierte LDAP-Fragmente
SchoolLdapOrganisationsTip: Beim Login via LDAP werden dem Nutzer/der Nutzerin alle Institute zugeordnet deren assoziierte LDAP-Fragmente im Eintrag des Nutzer/der Nutzerin gefunden werden
SchoolLdapOrganisationMissing: LDAP-Fragment wird benötigt
@ -21,4 +21,4 @@ SchoolLecturer: Dozent:in
SchoolEvaluation: Kursumfragenverwaltung
SchoolExamOffice: Prüfungsverwaltung
SchoolAllocation: Zentralanmeldungs-Administration
SchoolAdmin: Admin
SchoolAdmin !ident-ok: Admin

View File

@ -14,7 +14,7 @@ SchoolExamDiscouragedModes: Exam designs to warn against
ExamCloseMode: Exam closure
SchoolUpdated ssh: Successfully edited #{ssh}
SchoolTitle ssh: Department „#{ssh}“
TitleSchoolNew: Neues Institut anlegen
TitleSchoolNew: Create new department
SchoolCreated ssh: Successfully created #{ssh}
SchoolExists ssh: A department named „#{ssh}“ already exists
SchoolAdmin: Admin

View File

@ -8,12 +8,12 @@ CsvPresetExcel: Excel-Kompatibel
CsvCustom: Benutzerdefiniert
CsvDelimiter: Trennzeichen
CsvUseCrLf: Zeilenumbrüche
CsvQuoting: Quoting
CsvQuoting !ident-ok: Quoting
CsvQuotingTip: Wann sollen Anführungszeichen (") um Felder platziert werden, um Interpretation von im Feld enthaltenen Zeichen als Trennzeichen zu verhindern?
CsvEncoding: Encoding
CsvEncoding !ident-ok: Encoding
CsvEncodingTip: CSV-Dateien können in einer anderen Zeichenkodierung als dem vom System standardmäßig verwendeten UTF-8 exportiert werden. Beachten Sie dass es bei nicht-UTF-8 Zeichenkodierungen wmgl. zu Darstellungsproblemen mit Sonderzeichen kommt.
CsvUTF8: UTF-8 (Unicode)
CsvCP1252: Windows CP-1252 ("ANSI")
CsvUTF8 !ident-ok: UTF-8 (Unicode)
CsvCP1252 !ident-ok: Windows CP-1252 ("ANSI")
CsvDelimiterNull: Null-Byte
CsvDelimiterTab: Tabulator
CsvDelimiterComma: Komma
@ -22,8 +22,8 @@ CsvDelimiterSemicolon: Strichpunkt
CsvDelimiterBar: Senkrechter Strich
CsvDelimiterSpace: Leerzeichen
CsvDelimiterUnitSep: Teilgruppentrennzeichen
CsvCrLf: DOS (CRLF)
CsvLf: Unix (LF)
CsvCrLf !ident-ok: DOS (CRLF)
CsvLf !ident-ok: Unix (LF)
CsvQuoteNone: Nie
CsvQuoteMinimal: Nur wenn nötig
CsvQuoteAll: Immer
@ -32,4 +32,4 @@ CsvChangeOptionsLabel: Export-Optionen
CsvPresetXlsx: .xlsx Dateien (ECMA-376; Excel ≥2010)
CsvFormatField: Dateiformat
CsvFormatCsv: .csv (Comma-Separated Values)
CsvFormatXlsx: .xlsx (Office Open XML)
CsvFormatXlsx !ident-ok: .xlsx (Office Open XML)

View File

@ -109,7 +109,7 @@ SubmissionGroupName: Group name
TitleChangeUserDisplayEmail: Set display email
LanguageChanged: Language changed successfully
AllocNotifyNewCourseDefault: Systemweite Einstellung
AllocNotifyNewCourseForceOff: Nein
AllocNotifyNewCourseForceOn: Ja
AllocNotifyNewCourseDefault: System-wide setting
AllocNotifyNewCourseForceOff: No
AllocNotifyNewCourseForceOn: Yes
Settings: Settings

View File

@ -1,6 +1,6 @@
Ident: Identifikation
AuthModeSet: Authentifizierung
NameSet: Name
NameSet !ident-ok: Name
UserCreated: Account erstellt
LastLogin: Letzter Login

View File

@ -12,7 +12,7 @@ SystemMessageAuthenticatedOnly: Nur angemeldet
SystemMessageSeverity: Schwere
SystemMessagePriority: Priorität
SystemMessagePriorityNegative: Priorität darf nicht negativ sein
SystemMessageId: Id
SystemMessageId !ident-ok: Id
SystemMessageSummaryContent: Zusammenfassung / Inhalt
SystemMessageSummary: Zusammenfassung
SystemMessageContent: Inhalt

View File

@ -11,7 +11,7 @@ LectureStart: Beginn Vorlesungen
TermEdited tid@TermId: Semester #{tid} erfolgreich editiert.
TermNewTitle: Semester editieren/anlegen.
InvalidInput: Eingaben bitte korrigieren.
Term: Semester
Term !ident-ok: Semester
TermPlaceholder: W/S + vierstellige Jahreszahl
TermStartDay: Erster Tag
TermStartDayTooltip: Üblicherweise immer 1. April oder 1. Oktober

View File

@ -18,7 +18,7 @@ LdapSyncedBefore: Letzte LDAP-Synchronisation vor
UserSystemFunctions: Systemweite Rollen
UserSystemFunctionsSaved: Systemweite Rollen gespeichert
UserSystemFunctionsNotChanged: Es wurden keine systemweiten Rollen angepasst
AuthPWHash pwHash@Text: Uni2work
AuthPWHash pwHash@Text !ident-ok: Uni2work
AuthPWHashAlreadyConfigured: Nutzer:in meldet sich bereits per Uni2work-Kennung an
AuthPWHashConfigured: Nutzer:in meldet sich nun per Uni2work-Kennung an
UsersCourseSchool: Institut
@ -32,7 +32,7 @@ AuthLDAPLookupFailed: Nutzer:in konnte aufgrund eines LDAP-Fehlers nicht nachges
AuthLDAPInvalidLookup: Bestehender Nutzer/Bestehende Nutzerin konnte nicht eindeutig einem LDAP-Eintrag zugeordnet werden
AuthLDAPAlreadyConfigured: Nutzer:in meldet sich bereits per Campus-Kennung in Uni2work an
AuthLDAPConfigured: Nutzer:in meldet sich nun per Campus-Kennung in Uni2work an
AuthLDAP: Campus
AuthLDAP !ident-ok: LMU-Account
PasswordResetQueued: Link zum Passwort-Zurücksetzen versandt
UserAssimilateUser: Benutzer:in
AssimilateUserNotFound: E-Mail Adresse konnte keinem Benutzer/keiner Benutzerin zugeordnet werden
@ -76,4 +76,4 @@ AllUsersLdapSync: Alle LDAP-Synchronisieren
UserHijack: Sitzung übernehmen
AuthKindLDAP: Campus-Kennung
AuthKindPWHash: Uni2work-Kennung
Name: Name
Name !ident-ok: Name

View File

@ -32,7 +32,7 @@ AuthLDAPLookupFailed: User could not be looked up due to a LDAP error
AuthLDAPInvalidLookup: Existing user could not be uniquely matched with a LDAP entry
AuthLDAPAlreadyConfigured: User already logs in using their campus account
AuthLDAPConfigured: User now logs in using their campus account
AuthLDAP: Campus
AuthLDAP: LMU-Account
PasswordResetQueued: Sent link to reset password
UserAssimilateUser: User
AssimilateUserNotFound: Email could not be resolved to an user

View File

@ -4,7 +4,7 @@ WorkflowScopeKindSchool: Pro Institut
WorkflowScopeKindTermSchool: Pro Institut & Semester
WorkflowScopeKindCourse: Pro Veranstaltung
WorkflowDefinitionScope: Bereich
WorkflowDefinitionName: Name
WorkflowDefinitionName !ident-ok: Name
WorkflowDefinitionDescriptions: Beschreibung
WorkflowDefinitionDescriptionsLanguageExists: Eine Beschreibung in dieser Sprache existiert bereits
WorkflowDefinitionGraph: Spezifikation
@ -26,7 +26,7 @@ WorkflowDefinitionWarningLinterIssues: Es sind folgende Linter issues aufgetrete
WorkflowDefinitionListTitle: Workflow-Definitionen
WorkflowDefinitionInstanceCount: Instanzen
WorkflowDefinitionWorkflowCount: Workflows
WorkflowDefinitionWorkflowCount !ident-ok: Workflows
WorkflowDefinitionConcreteInstanceCount num@Int64: #{num} Instanzen
WorkflowDefinitionConcreteWorkflowCount num@Int64: #{num} Workflows
WorkflowDefinitionDeleteQuestion: Wollen Sie die unten aufgeführte Workflow-Definition wirklich löschen?
@ -35,7 +35,7 @@ WorkflowDefinitionInstantiateTitle: Workflow-Definition instanziieren
WorkflowDefinitionInstantiated: Instanz angelegt
WorkflowScope: Bereich
WorkflowInstanceName: Name
WorkflowInstanceName !ident-ok: Name
WorkflowInstanceCategory: Kategorie
WorkflowInstanceCollision: Es existiert bereits eine Workflow-Instanz mit diesem Namen und Bereich
WorkflowInstanceListTitle: Workflow-Instanzen
@ -44,7 +44,7 @@ WorkflowInstanceDescriptions: Instanz-Beschreibung
WorkflowInstanceDescriptionsLanguageExists: Eine Instanz-Beschreibung in dieser Sprache existiert bereits
WorkflowInstanceCreated: Instanz angelegt
WorkflowInstanceDescriptionTitle: Instanz-Titel
WorkflowInstanceWorkflowCount: Workflows
WorkflowInstanceWorkflowCount !ident-ok: Workflows
WorkflowInstanceInitiateSuccess: Workflow erfolgreich initiiert
@ -58,8 +58,8 @@ GlobalWorkflowInstancesTitle: Workflows (Systemweit)
GlobalWorkflowInstanceInitiateHeading workflowInstanceTitle@Text: Worklow initiieren: #{workflowInstanceTitle}
GlobalWorkflowInstanceInitiateTitle: Worklow initiieren
SchoolWorkflowInstancesHeading ssh@SchoolId: Workflows (#{ssh})
SchoolWorkflowInstancesTitle ssh@SchoolId: Workflows (#{ssh})
SchoolWorkflowInstancesHeading ssh@SchoolId !ident-ok: Workflows (#{ssh})
SchoolWorkflowInstancesTitle ssh@SchoolId !ident-ok: Workflows (#{ssh})
SchoolWorkflowInstanceInitiateHeading ssh@SchoolId workflowInstanceTitle@Text: Worklow initiieren: #{ssh}, #{workflowInstanceTitle}
SchoolWorkflowInstanceInitiateTitle ssh@SchoolId: Worklow initiieren: #{ssh}
@ -89,7 +89,7 @@ WorkflowWorkflowWorkflowHistoryActionLabel: Aktion
WorkflowWorkflowWorkflowHistoryFromLabel: Vorheriger Zustand
WorkflowWorkflowWorkflowHistoryToLabel: Neuer Zustand
WorkflowWorkflowWorkflowHistoryPayloadLabel: Datensatz-Änderungen
WorkflowWorkflowFilesArchiveName wwCID@CryptoFileNameWorkflowWorkflow wpl@WorkflowPayloadLabel stCID@CryptoUUIDWorkflowStateIndex: #{foldCase (toPathPiece wwCID)}-#{foldCase (toPathPiece stCID)}-#{foldCase (foldMap unidecode (toPathPiece wpl))}.zip
WorkflowWorkflowFilesArchiveName wwCID@CryptoFileNameWorkflowWorkflow wpl@WorkflowPayloadLabel stCID@CryptoUUIDWorkflowStateIndex !ident-ok: #{foldCase (toPathPiece wwCID)}-#{foldCase (toPathPiece stCID)}-#{foldCase (foldMap unidecode (toPathPiece wpl))}.zip
WorkflowWorkflowWorkflowStateHeading: Zustand/Daten
WorkflowWorkflowWorkflowPayloadHeading: Aktueller Datensatz
WorkflowWorkflowWorkflowStateStateLabel: Aktueller Zustand
@ -102,14 +102,14 @@ WorkflowPayloadBoolTrue: Ja
WorkflowPayloadBoolFalse: Nein
WorkflowPayloadUserGone: Gelöschte:r Benutzer:in
TopWorkflowInstancesHeading: Workflows
TopWorkflowInstancesTitle: Workflows
TopWorkflowInstancesHeading !ident-ok: Workflows
TopWorkflowInstancesTitle !ident-ok: Workflows
GlobalWorkflowWorkflowWorkflowHeading workflowWorkflowId@CryptoFileNameWorkflowWorkflow: Workflow #{toPathPiece workflowWorkflowId}
GlobalWorkflowWorkflowWorkflowTitle workflowWorkflowId@CryptoFileNameWorkflowWorkflow: Workflow #{toPathPiece workflowWorkflowId}
GlobalWorkflowWorkflowWorkflowHeading workflowWorkflowId@CryptoFileNameWorkflowWorkflow !ident-ok: Workflow #{toPathPiece workflowWorkflowId}
GlobalWorkflowWorkflowWorkflowTitle workflowWorkflowId@CryptoFileNameWorkflowWorkflow !ident-ok: Workflow #{toPathPiece workflowWorkflowId}
SchoolWorkflowWorkflowWorkflowHeading ssh@SchoolId workflowWorkflowId@CryptoFileNameWorkflowWorkflow: Workflow #{ssh}, #{toPathPiece workflowWorkflowId}
SchoolWorkflowWorkflowWorkflowTitle ssh@SchoolId workflowWorkflowId@CryptoFileNameWorkflowWorkflow: Workflow #{ssh}, #{toPathPiece workflowWorkflowId}
SchoolWorkflowWorkflowWorkflowHeading ssh@SchoolId workflowWorkflowId@CryptoFileNameWorkflowWorkflow !ident-ok: Workflow #{ssh}, #{toPathPiece workflowWorkflowId}
SchoolWorkflowWorkflowWorkflowTitle ssh@SchoolId workflowWorkflowId@CryptoFileNameWorkflowWorkflow !ident-ok: Workflow #{ssh}, #{toPathPiece workflowWorkflowId}
WorkflowWorkflowListScopeTitle rScope@Text: Laufende Workflows - #{rScope}
WorkflowWorkflowListScopeHeading rScope@Text: Laufende Workflows (#{rScope})
@ -132,7 +132,7 @@ WorkflowWorkflowListIsFinal: Abgeschlossen?
WorkflowGraphFormUploadIsDirectory: Upload ist Verzeichnis
WorkflowGraphFormInvalidNumberOfFiles: Es muss genau eine Datei hochgeladen werden
WorkflowCourseOption tid@TermId ssh@SchoolId coursen@CourseName: #{tid} - #{ssh} - #{coursen}
WorkflowCourseOption tid@TermId ssh@SchoolId coursen@CourseName !ident-ok: #{tid} - #{ssh} - #{coursen}
YAMLFieldDecodeFailure yamlFailure@String: Konnte YAML nicht parsen: #{yamlFailure}
WGFTextInput: Textfeld

View File

@ -1,8 +1,8 @@
#messages or constructors that are used all over the code
Logo: Uni2work
Logo !ident-ok: Uni2work
EmailInvitationWarning: Diese Adresse konnte keinem Uni2work-Benutzer/keiner Uni2work-Benutzerin zugeordnet werden. Es wird eine Einladung per E-Mail versandt.
BoolIrrelevant: —
BoolIrrelevant !ident-ok: —
FieldPrimary: Hauptfach
FieldSecondary: Nebenfach
MultiEmailFieldTip: Es sind mehrere, Komma-separierte, E-Mail-Adressen möglich

View File

@ -1 +1 @@
PrintDebugForStupid name@Text: Debug message "#{name}"
PrintDebugForStupid name@Text !ident-ok: Debug message "#{name}"

View File

@ -44,8 +44,8 @@ BtnAcceptApplications: Bewerbungen akzeptieren
BtnAcceptApplicationsTip: Mit dem untigen Knopf können Sie den Kurs (höchstens bis zur angegeben Maximalkapazität, falls eingestellt) mit Bewerbern auffüllen. Die Bewertungen der Bewerbungen werden dabei berücksichtigt (Unbewertet wird behandelt wie eine Note zwischen 2.3 und 2.7). Bewerber mit Veto oder 5.0 werden nicht angemeldet.
BtnExamAutoOccurrenceCalculate: Verteilungstabelle berechnen
BtnExamAutoOccurrenceAccept: Verteilung akzeptieren
BtnExamAutoOccurrenceNudgeUp: +
BtnExamAutoOccurrenceNudgeDown: -
BtnExamAutoOccurrenceNudgeUp !ident-ok: +
BtnExamAutoOccurrenceNudgeDown !ident-ok: -
BtnSetDisplayEmail: E-Mail-Adresse setzen
BtnAuthLDAP: Auf Campus-Kennung umstellen
BtnAuthPWHash: Auf Uni2work-Kennung umstellen

View File

@ -1,2 +1,2 @@
MassInputAddDimension: +
MassInputDeleteCell: -
MassInputAddDimension !ident-ok: +
MassInputDeleteCell !ident-ok: -

View File

@ -5,7 +5,7 @@ BreadcrumbCryptoIDDispatch: CryptoID-Weiterleitung
BreadcrumbCourseAppsFiles: Bewerbungsdateien
BreadcrumbCourseNotes: Kursnotizen
BreadcrumbHiWis: Korrektor:innen
BreadcrumbMaterial: Material
BreadcrumbMaterial !ident-ok: Material
BreadcrumbSheet: Übungsblatt
BreadcrumbTutorial: Tutorium
BreadcrumbExam: Prüfung
@ -16,7 +16,7 @@ BreadcrumbCourseFavourite: Favorisieren
BreadcrumbCourse: Kurs
BreadcrumbAllocationRegister: Teilnahme registrieren
BreadcrumbAllocation: Zentralanmeldung
BreadcrumbTerm: Semester
BreadcrumbTerm !ident-ok: Semester
BreadcrumbSchool: Institut
BreadcrumbUser: Benutzer:in
BreadcrumbStatic: Statische Resource
@ -37,10 +37,10 @@ BreadcrumbAllocationInfo: Ablauf einer Zentralanmeldung
BreadcrumbCourseParticipantInvitation: Einladung als Kursteilnehmer:in
BreadcrumbMaterialArchive: Archiv
BreadcrumbMaterialFile: Datei
BreadcrumbMaterialVideo: Video
BreadcrumbMaterialVideo !ident-ok: Video
BreadcrumbSheetArchive: Dateien
BreadcrumbSheetIsCorrector: Korrektor:in-Überprüfung
BreadcrumbSheetPseudonym: Pseudonym
BreadcrumbSheetPseudonym !ident-ok: Pseudonym
BreadcrumbSheetCorrectorInvite: Einladung als Korrektor:in
BreadcrumbSheetFile: Datei
BreadcrumbTutorialRegister: Anmelden
@ -54,7 +54,7 @@ BreadcrumbCourseNewsFile: Datei
BreadcrumbExternalExam: Externe Prüfung
BreadcrumbExternalExamList: Externe Prüfungen
BreadcrumbExternalExamNew: Neue externe Prüfung
BreadcrumbExternalExamShow coursen@CourseName examn@ExamName: #{coursen}, #{examn}
BreadcrumbExternalExamShow coursen@CourseName examn@ExamName !ident-ok: #{coursen}, #{examn}
BreadcrumbExternalExamEdit: Editieren
BreadcrumbExternalExamUsers: Teilnehmer:in
BreadcrumbExternalExamGrades: Prüfungsleistungen
@ -70,13 +70,13 @@ BreadcrumbAllocationCompute: Platzvergabe berechnen
BreadcrumbAllocationAccept: Platzvergabe akzeptieren
BreadcrumbAllocationAddUser: Bewerber:in hinzufügen
BreadcrumbMessageHide: Verstecken
BreadcrumbFaq: FAQ
BreadcrumbFaq !ident-ok: FAQ
BreadcrumbSheetPersonalisedFiles: Personalisierte Dateien herunterladen
BreadcrumbCourseSheetPersonalisedFiles: Vorlage für personalisierte Übungsblatt-Dateien herunterladen
BreadcrumbAdminCrontab: Crontab
BreadcrumbAdminCrontab !ident-ok: Crontab
BreadcrumbAdminWorkflowDefinitionList: Workflow-Definitionen
BreadcrumbAdminWorkflowDefinitionNew: Neue Workflow-Definition
BreadcrumbAdminWorkflowDefinitionEdit renderedWorkflowScope'@Text wfdn@WorkflowDefinitionName: #{wfdn} (#{renderedWorkflowScope'})
BreadcrumbAdminWorkflowDefinitionEdit renderedWorkflowScope'@Text wfdn@WorkflowDefinitionName !ident-ok: #{wfdn} (#{renderedWorkflowScope'})
BreadcrumbAdminWorkflowDefinitionDelete: Löschen
BreadcrumbAdminWorkflowDefinitionInstantiate: Instanziieren
BreadcrumbAdminWorkflowInstanceList: Workflow-Instanzen
@ -84,26 +84,25 @@ BreadcrumbAdminWorkflowInstanceNew: Neue Workflow-Instanz
BreadcrumbAdminWorkflowInstanceEdit: Instanz bearbeiten
BreadcrumbAdminWorkflowWorkflowList: Initiierte Workflows
BreadcrumbAdminWorkflowWorkflowNew: Workflow initiieren
BreadcrumbWorkflowInstanceEdit win@WorkflowInstanceName: #{win}
BreadcrumbWorkflowInstanceEdit win@WorkflowInstanceName !ident-ok: #{win}
BreadcrumbWorkflowInstanceDelete: Löschen
BreadcrumbWorkflowInstanceWorkflowList: Laufende Workflows
BreadcrumbWorkflowInstanceInitiate: Workflow starten
BreadcrumbWorkflowInstanceList: Workflows
BreadcrumbWorkflowInstanceList !ident-ok: Workflows
BreadcrumbWorkflowInstanceNew: Neuer Workflow
BreadcrumbWorkflowWorkflowList: Laufende Workflows
BreadcrumbWorkflowWorkflow workflow@CryptoFileNameWorkflowWorkflow: #{toPathPiece workflow}
BreadcrumbWorkflowWorkflow workflow@CryptoFileNameWorkflowWorkflow !ident-ok: #{toPathPiece workflow}
BreadcrumbWorkflowWorkflowFiles: Dateien
BreadcrumbWorkflowWorkflowEdit: Editieren
BreadcrumbWorkflowWorkflowDelete: Löschen
BreadcrumbGlobalWorkflowInstanceList: Systemweite Workflows
BreadcrumbTopWorkflowInstanceList: Workflows
BreadcrumbTopWorkflowInstanceList !ident-ok: Workflows
BreadcrumbTopWorkflowWorkflowList: Laufende Workflows
BreadcrumbError: Fehler
BreadcrumbMenu: Login
BreadcrumbUserAdd: Benutzer:in anlegen
BreadcrumbUserNotifications: Benachrichtigungs-Einstellungen
BreadcrumbUserPassword: Passwort
BreadcrumbAdminHeading: Administration
BreadcrumbAdminHeading !ident-ok: Administration
BreadcrumbAdminFeaturesHeading: Studiengänge
BreadcrumbAdminTest: Admin-Demo
BreadcrumbAdminErrMsg: Fehlermeldung entschlüsseln
@ -167,7 +166,7 @@ BreadcrumbSubmissionOwn: Abgabe
BreadcrumbCorrection: Korrektur
BreadcrumbSubmissionDelete: Abgabe löschen
BreadcrumbCorrectorAssignTitle: Korrektor:in zuweisen
BreadcrumbMaterialList: Material
BreadcrumbMaterialList !ident-ok: Material
BreadcrumbMaterialNew: Neues Material veröffentlichen
BreadcrumbMaterialEdit: Material bearbeiten
BreadcrumbMaterialDelete: Material löschen
@ -178,5 +177,5 @@ BreadcrumbCorrectionsCreate: Abgaben registrieren
BreadcrumbCorrectionsGrade: Korrekturen eintragen
BreadcrumbMessageList: Systemnachrichten
BreadcrumbGlossary: Begriffsverzeichnis
BreadcrumbLogin: Login
BreadcrumbLogin !ident-ok: Login
BreadcrumbNews: Aktuell

View File

@ -99,7 +99,6 @@ BreadcrumbGlobalWorkflowInstanceList: System-wide workflows
BreadcrumbTopWorkflowInstanceList: Workflows
BreadcrumbTopWorkflowWorkflowList: Running workflows
BreadcrumbError: Error
BreadcrumbMenu: Login
BreadcrumbUserAdd: Add user
BreadcrumbUserNotifications: Notification settings
BreadcrumbUserPassword: Password
@ -161,7 +160,7 @@ BreadcrumbSheetDelete: Delete exercise sheet
BreadcrumbSubmissions: Submissions
BreadcrumbSubmissionNew: Create submission
BreadcrumbSubmissionOwn: Submission
BreadcrumbCorrection: Korrektur
BreadcrumbCorrection: Correction
BreadcrumbSubmissionDelete: Delete submission
BreadcrumbCorrectorAssignTitle: Assign corrector
BreadcrumbMaterialList: Material

View File

@ -1,4 +1,4 @@
MenuAdminHeading: Administration
MenuAdminHeading !ident-ok: Administration
MenuAdminFeaturesHeading: Studiengänge
MenuInfoLecturerTitle: Hinweise für Veranstalter:innen
MenuInfoLecturerCourses: Veranstaltungen
@ -22,8 +22,8 @@ MenuInstance: Instanz-Identifikation
MenuHealth: Instanz-Zustand
MenuHelp: Hilfe
MenuProfile: Anpassen
MenuLogin: Login
MenuLogout: Logout
MenuLogin !ident-ok: Login
MenuLogout !ident-ok: Logout
MenuAllocationList: Zentralanmeldungen
MenuCourseList: Kurse
MenuCourseMembers: Kursteilnehmer:innen
@ -51,7 +51,7 @@ MenuCorrections: Korrekturen
MenuCorrectionsOwn: Meine Korrekturen
MenuSubmissions: Abgaben
MenuSheetList: Übungsblätter
MenuMaterialList: Material
MenuMaterialList !ident-ok: Material
MenuMaterialNew: Neues Material veröffentlichen
MenuMaterialEdit: Material bearbeiten
MenuMaterialDelete: Material löschen
@ -107,11 +107,11 @@ MenuAllocationPriorities: Zentrale Dringlichkeiten
MenuAllocationCompute: Platzvergabe berechnen
MenuAllocationAddUser: Bewerber:in hinzufügen
MenuFaq: FAQ
MenuFaq !ident-ok: FAQ
MenuSheetPersonalisedFiles: Personalisierte Dateien herunterladen
MenuCourseSheetPersonalisedFiles: Vorlage für personalisierte Übungsblatt-Dateien herunterladen
MenuAdminCrontab: Crontab
MenuAdminWorkflowDefinitionList: Workflows
MenuAdminCrontab !ident-ok: Crontab
MenuAdminWorkflowDefinitionList !ident-ok: Workflows
MenuAdminWorkflowDefinitionNew: Neue Workflow-Definition
MenuAdminWorkflowDefinitionDelete: Löschen
MenuAdminWorkflowInstanceList: Workflow-Instanzen
@ -125,9 +125,9 @@ MenuWorkflowWorkflowList: Laufende Workflows
MenuWorkflowWorkflowEdit: Editieren
MenuWorkflowWorkflowDelete: Löschen
MenuGlobalWorkflowInstanceList: Systemweite Workflows
MenuTopWorkflowInstanceList: Workflows
MenuTopWorkflowInstanceList !ident-ok: Workflows
MenuTopWorkflowWorkflowList: Laufende Workflows
MenuTopWorkflowWorkflowListHeader: Workflows
MenuTopWorkflowWorkflowListHeader !ident-ok: Workflows
MenuGlossary: Begriffsverzeichnis
MenuVersion: Versionsgeschichte
MenuCourseNewsNew: Neue Kursnachricht

View File

@ -46,7 +46,7 @@ MenuTermCreate: Create new semester
MenuCourseNew: Create new course
MenuTermEdit: Edit semester
MenuTermCurrent: Current semester
MenuCorrection: Korrektur
MenuCorrection: Correction
MenuCorrections: Corrections
MenuCorrectionsOwn: My corrections
MenuSubmissions: Submissions

View File

@ -31,7 +31,7 @@ SubmissionsCourse tid@TermId ssh@SchoolId csh@CourseShorthand: Alle Abgaben Kurs
SubmissionsSheet sheetName@SheetName: Abgaben für #{sheetName}
SheetList tid@TermId ssh@SchoolId csh@CourseShorthand: #{tid}-#{ssh}-#{csh} Übersicht Übungsblätter
SheetNewHeading tid@TermId ssh@SchoolId csh@CourseShorthand: #{tid}-#{ssh}-#{csh} Neues Übungsblatt anlegen
SheetTitle tid@TermId ssh@SchoolId csh@CourseShorthand sheetName@SheetName: #{tid}-#{ssh}-#{csh} #{sheetName}
SheetTitle tid@TermId ssh@SchoolId csh@CourseShorthand sheetName@SheetName !ident-ok: #{tid}-#{ssh}-#{csh} #{sheetName}
SheetTitleNew tid@TermId ssh@SchoolId csh@CourseShorthand : #{tid}-#{ssh}-#{csh}: Neues Übungsblatt
SheetEditHead tid@TermId ssh@SchoolId csh@CourseShorthand sheetName@SheetName: #{tid}-#{ssh}-#{csh} #{sheetName} editieren
SheetDelHead tid@TermId ssh@SchoolId csh@CourseShorthand sheetName@SheetName: #{sheetName} wirklich aus Kurs #{tid}-#{ssh}-#{csh} herauslöschen? Alle assoziierten Abgaben und Korrekturen gehen ebenfalls verloren!

View File

@ -1,14 +1,14 @@
ExamOccurrenceStart: Prüfungsbeginn
#general table-discriptions
TableEmail: Email
TableEmail: E-Mail
TableStudyTerm: Studiengang
TableStudyFeatureAge: Fachsemester
TableStudyFeatureDegree: Abschluss
TableStudyFeatureType:
TableStudyFeatureType !empty-ok:
TableStudyFeatureValid: Aktiv
TableStudyFeatureUpdate: Abgeglichen
TableHeadingFilter: Filter
TableTerm: Semester
TableHeadingFilter !ident-ok: Filter
TableTerm !ident-ok: Semester
TableCourseSchool: Institut
TableSubmissionGroup: Feste Abgabegruppe
TableNoSubmissionGroup: Keine feste Abgabegruppe
@ -18,7 +18,7 @@ TableSchool: Institut
TableCourse: Kurs
TableCourseMembers: Teilnehmer:innen
TableExamOccurrence: Termin/Raum
TableExamName: Name
TableExamName !ident-ok: Name
TableExamTime: Termin
TableExamRegistration: Prüfungsanmeldung
TableExamResult: Prüfungsergebnis
@ -44,7 +44,7 @@ TableTutorialName: Bezeichnung
TableTutorialType: Art
TableTutorialRoom: Regulärer Raum
TableTutorialRoomHidden: Raum nur für Teilnehmer
TableTutorialRoomIsUnset: —
TableTutorialRoomIsUnset !ident-ok: —
TableTutorialRoomIsHidden: Raum wird nur Teilnehmern angezeigt
TableTutorialTime: Zeit
TableTutorialDeregisterUntil: Abmeldungen bis
@ -53,12 +53,12 @@ TableNoFilter: Keine Einschränkung
TableUserMatriculation: Matrikelnummer
TableColumnStudyFeatures: Studiendaten
TableSchoolShort: Kürzel
TableSchoolName: Name
TableSchoolName !ident-ok: Name
TableExamRegisterFrom: Anmeldung ab
TableExamRegisterTo: Anmeldung bis
TableAction: Aktion
SelectColumn: Auswahl
CsvExport: CSV-Export
TableProportion c@Text of'@Text prop@Rational: #{c}/#{of'} (#{rationalToFixed2 (100 * prop)}%)
TableProportionNoRatio c@Text of'@Text: #{c}/#{of'}
TableProportion c@Text of'@Text prop@Rational !ident-ok: #{c}/#{of'} (#{rationalToFixed2 (100 * prop)}%)
TableProportionNoRatio c@Text of'@Text !ident-ok: #{c}/#{of'}
TableExamFinished: Ergebnisse sichtbar ab

View File

@ -30,4 +30,4 @@ TableCourseDescription: Beschreibung
RowCount count@Int64: #{count} #{pluralDE count "passender Eintrag" "passende Einträge"} insgesamt
JSONFieldDecodeFailure aesonFailure@String: Konnte JSON nicht parsen: #{aesonFailure}
DBTIRowsMissing n@Int: #{pluralDE n "Eine Zeile ist" "Einige Zeilen sind"} aus der Datenbank verschwunden, seit das Formular für Sie generiert wurde
Page num@Int64: #{num}
Page num@Int64 !ident-ok: #{num}

View File

@ -6,7 +6,7 @@ RGCourseCorrectors: Korrektor:innen
RGCourseTutors: Tutor:innen
RGCourseUnacceptedApplicants: Nicht akzeptierte Bewerber:innen
RecipientToggleAll: Alle/Keine
CommCourseTestSubject customSubject@Text: [TEST] #{customSubject}
CommCourseTestSubject customSubject@Text !ident-ok: [TEST] #{customSubject}
UtilCommCourseSubject: Kursmitteilung
CommRecipients: Empfänger:innen
CommRecipientsTip: Sie selbst erhalten immer eine Kopie der Nachricht
@ -73,14 +73,14 @@ UtilExamResultGrade: Note
UtilExamResultPass: Bestanden/Nicht Bestanden
UtilExamResultNoShow: Nicht erschienen
UtilExamResultVoided: Entwertet
CourseOption tid@TermId ssh@SchoolId csh@CourseShorthand coursen@CourseName: #{tid} - #{ssh} - #{csh}: #{coursen}
RoomReferenceNone: —
RoomReferenceSimple: Text
CourseOption tid@TermId ssh@SchoolId csh@CourseShorthand coursen@CourseName !ident-ok: #{tid} - #{ssh} - #{csh}: #{coursen}
RoomReferenceNone !ident-ok: —
RoomReferenceSimple !ident-ok: Text
RoomReferenceLink: Link & Anweisungen
RoomReferenceSimpleText: Raum
RoomReferenceSimpleTextPlaceholder: Raum
RoomReferenceLinkLink: Link
RoomReferenceLinkLinkPlaceholder: URL
RoomReferenceLinkLink !ident-ok: Link
RoomReferenceLinkLinkPlaceholder !ident-ok: URL
RoomReferenceLinkInstructions: Anweisungen
RoomReferenceLinkInstructionsPlaceholder: Anweisungen
@ -92,8 +92,8 @@ InvitationCollision: Einladung konnte nicht angenommen werden da ein derartiger
InvitationDeclined: Einladung wurde abgelehnt
#sheetType.hs
SheetTypeBonus': Bonus
SheetTypeNormal': Normal
SheetTypeBonus' !ident-ok: Bonus
SheetTypeNormal' !ident-ok: Normal
SheetTypeInformational': Ohne Anrechung
SheetTypeNotGraded: Keine Korrektur
SheetGradingBonusIncluded: Erzielte Bonuspunkte wurden hier bereits zu den erreichten normalen Punkten hinzugezählt.
@ -124,19 +124,19 @@ CorrectionInvisibleRatingNotDone: Die Bewertung ist nicht als „Abgeschlossen
CorrectionInvisibleWarning: Die Bewertung dieser Abgabe ist aktuell für mindestens eine an der Abgabe beteiligte Person nicht sichtbar!
CorrectionInvisibleReasons: Mögliche Gründe hierfür:
Plugin: Plugin
Plugin !ident-ok: Plugin
PreviouslyUploadedInfo: Bereits hochgeladene Dateien
PreviouslyUploadedDeletionInfo: Nur ausgewählte und unten hinzugefügte Dateien werden erneut hochgeladen
AddMoreFiles: Weitere Dateien hinzufügen:
MessageError: Fehler
MessageWarning: Warnung
MessageInfo: Information
MessageInfo !ident-ok: Information
MessageSuccess: Erfolg
ShortFieldPrimary: HF
ShortFieldSecondary: NF
SheetGradingPassPoints': Bestehen nach Punkten
SheetGradingPassBinary': Bestanden/Nicht bestanden
SheetGradingPassAlways': Automatisch bestanden, sobald korrigiert
SheetTypeNormal: Normal
SheetTypeBonus: Bonus
SheetTypeNormal !ident-ok: Normal
SheetTypeBonus !ident-ok: Bonus

View File

@ -18,6 +18,7 @@ import qualified Data.Foldable as F
import qualified Data.HashMap.Strict as HashMap
import qualified Data.HashSet as HashSet
import qualified Data.Map.Strict as Map
import qualified Data.Set as Set
import qualified Text.Parsec as P
import qualified Text.Parsec.Text.Lazy as P
@ -28,6 +29,8 @@ import qualified Data.List.NonEmpty as NonEmpty
import qualified Data.Text as Text
import qualified Data.Char as Char
import Utils.TH.AlphaConversion (alphaConvE)
@ -46,6 +49,7 @@ instance Semigroup (f (MsgDef f g)) => Semigroup (MsgFile f g) where
data MsgDef f g = MsgDef
{ msgDefVars :: InsOrdHashMap String (f (g TH.Type))
, msgDefContent :: [MsgDefContent]
, msgDefAnnotations :: Set MsgDefAnnotation
} deriving (Generic, Typeable)
deriving stock instance Eq (f (g TH.Type)) => Eq (MsgDef f g)
@ -55,6 +59,23 @@ data MsgDefContent = MsgDefContentLiteral String
| MsgDefContentSplice Bool {- Recurse? -} TH.Exp
deriving (Eq, Ord, Show, Generic, Typeable)
data MsgDefAnnotation = MsgDefIdenticalOk
| MsgDefEmptyOk
deriving (Eq, Ord, Read, Show, Generic, Typeable)
makePrisms ''MsgDefContent
makePrisms ''MsgDefAnnotation
makeLenses_ ''MsgDef
_msgDefAnnotation :: MsgDefAnnotation -> Lens' (MsgDef f g) Bool
_msgDefAnnotation ann = _msgDefAnnotations . at ann . _Maybe
_msgDefIdenticalOk :: Lens' (MsgDef f g) Bool
_msgDefIdenticalOk = _msgDefAnnotation MsgDefIdenticalOk
_msgDefEmptyOk :: Lens' (MsgDef f g) Bool
_msgDefEmptyOk = _msgDefAnnotation MsgDefEmptyOk
disambiguateMsgFile :: MsgFile NonEmpty Maybe -> Either (InsOrdHashSet String, InsOrdHashMap String (InsOrdHashSet String)) (MsgFile Identity Maybe)
disambiguateMsgFile MsgFile{..}
@ -105,8 +126,8 @@ unionsInsOrdHashMap :: (Foldable f, Eq k, Hashable k)
-> InsOrdHashMap k (NonEmpty v)
unionsInsOrdHashMap = F.foldl' (InsOrdHashMap.unionWith (<>)) InsOrdHashMap.empty
insOrdHashMapKeysSet :: InsOrdHashMap k v -> HashSet k
insOrdHashMapKeysSet = HashMap.keysSet . InsOrdHashMap.toHashMap
insOrdHashMapKeysSet :: (Eq k, Hashable k) => InsOrdHashMap k v -> InsOrdHashSet k
insOrdHashMapKeysSet = InsOrdHashSet.fromList . map (view _1) . InsOrdHashMap.toList
mkMessage :: TH.Name -- ^ Foundation type
@ -168,10 +189,48 @@ mkMessageCommon genType prefix master datName folder defLang = do
Just x -> return x
let allDefns = insOrdHashMapKeysSet $ msgFileContent defMsgFile
extraDefns = flip HashMap.mapMaybe disambiguated $ \MsgFile{..} -> assertM' (not . HashSet.null) $ insOrdHashMapKeysSet msgFileContent `HashSet.difference` allDefns
extraDefnsErrs = flip map (HashMap.toList extraDefns) $ \(lang, extra) -> "Language " <> unpack lang <> ":\n" <> indent 1 (intercalate ", " $ HashSet.toList extra)
extraDefns = flip HashMap.mapMaybe disambiguated $ \MsgFile{..} -> assertM' (not . InsOrdHashSet.null) $ insOrdHashMapKeysSet msgFileContent `InsOrdHashSet.difference` allDefns
extraDefnsErrs = flip map (HashMap.toList extraDefns) $ \(lang, extra) -> "Language " <> unpack lang <> ":\n" <> indent 1 (intercalate ", " $ InsOrdHashSet.toList extra)
unless (null extraDefns) . fail $ "Extraneous message definitions:\n" <> indent 2 (unlines extraDefnsErrs)
let identical = filter isNonOkIdentical $ InsOrdHashSet.toList allDefns
where
isNonOkIdentical :: String -> Bool
isNonOkIdentical defnName = not identicalOk && superSingular defns && allEqual defns
where defns :: [[MsgDefContent]]
defns = mapMaybe (fmap (msgDefContent . runIdentity) . InsOrdHashMap.lookup defnName . msgFileContent) $ HashMap.elems disambiguated
superSingular :: forall a. [a] -> Bool
superSingular = \case
_ : _ : _ -> True
_other -> False
allEqual :: [[MsgDefContent]] -> Bool
allEqual [] = True
allEqual (x:xs) = all (roughEq x) xs
roughEq :: [MsgDefContent] -> [MsgDefContent] -> Bool
roughEq xs ys = not (null xs && null ys) && xs == ys
-- roughEq xs ys = fromMaybe False $ do
-- let xs' = mapMaybe (^? _MsgDefContentLiteral) xs
-- ys' = mapMaybe (^? _MsgDefContentLiteral) ys
-- guard . not $ null xs' && null ys'
-- return $ xs' == ys'
identicalOk = any (maybe False (view _msgDefIdenticalOk . runIdentity) . InsOrdHashMap.lookup defnName . msgFileContent) $ HashMap.elems disambiguated
unless (null identical) . TH.reportWarning . indent' 2 $ "Message definitions identical for all languages:\n" <> indent 1 (intercalate ", " identical)
let empties = InsOrdHashMap.fromList . mapMaybe (\defn -> fmap (defn, ) . assertM' (not . HashSet.null) $ nonOkEmpties defn) $ InsOrdHashSet.toList allDefns
where
nonOkEmpties :: String -> HashSet Lang
nonOkEmpties defnName | emptyOk = HashSet.empty
| otherwise = HashMap.keysSet $ HashMap.filter (maybe False (isEmpty . msgDefContent . runIdentity) . InsOrdHashMap.lookup defnName . msgFileContent) disambiguated
where isEmpty :: [MsgDefContent] -> Bool
isEmpty = (&&) <$> all (is _MsgDefContentLiteral) <*> allOf (folded . _MsgDefContentLiteral . folded) Char.isSpace
emptyOk = any (maybe False (view _msgDefEmptyOk . runIdentity) . InsOrdHashMap.lookup defnName . msgFileContent) $ HashMap.elems disambiguated
unless (InsOrdHashMap.null empties) . TH.reportWarning . indent' 2 $ "Message definitions empty for any language:\n" <> indent 1 (unlines . map (\(defn, langs) -> defn <> " (" <> intercalate ", " (map unpack $ HashSet.toList langs) <> ")") $ InsOrdHashMap.toList empties)
let defnName defn = TH.mkName $ prefix <> defn
execWriterT @_ @[TH.Dec] $ do
@ -189,10 +248,11 @@ mkMessageCommon genType prefix master datName folder defLang = do
tellMPoint $ TH.dataD (TH.cxt []) datName [] Nothing datCons []
renderLangs <- iforM disambiguated $ \lang MsgFile{..} -> do
let missing = allDefns `HashSet.difference` insOrdHashMapKeysSet msgFileContent
complete = HashSet.null missing
let missing = allDefns `InsOrdHashSet.difference` insOrdHashMapKeysSet msgFileContent
complete = InsOrdHashSet.null missing
unless complete $
lift . TH.reportWarning $ "Language " <> unpack lang <> " is not complete, missing:\n" <> indent 2 (unlines $ HashSet.toList missing)
lift . TH.reportWarning $ "Language " <> unpack lang <> " is not complete, missing:\n" <> indent 2 (unlines $ InsOrdHashSet.toList missing)
funName <- lift $ newUniqueName "renderLang"
tellMPoint $ TH.sigD funName [t| $(TH.conT master) -> [Lang] -> $(TH.conT datName) -> $(bool [t|Maybe Text|] [t|Text|] complete) |]
masterN <- lift $ TH.newName "_master"
@ -262,12 +322,18 @@ pMsgLine = flip P.label ".msg line" $ do
P.skipMany1 P.space
accumInsOrdHashMap <$> P.sepEndBy pMsgDefVar (P.many1 P.space)
spaces
let pAnnotations = Set.fromList <$> P.sepBy1 (P.char '!' *> pMsgDefAnnotation) spaces
msgDefAnnotations <- P.option Set.empty pAnnotations
void $ P.char ':'
spaces
msgDefContent <- P.manyTill pMsgDefContent . P.lookAhead . P.try $ void P.endOfLine <|> P.eof
return . InsOrdHashMap.singleton constrBase $ (NonEmpty.:| []) MsgDef{..}
]
pMsgDefAnnotation :: P.Parser MsgDefAnnotation
pMsgDefAnnotation = (MsgDefIdenticalOk <$ P.string "ident-ok")
<|> (MsgDefEmptyOk <$ P.string "empty-ok")
pMsgDefVar :: P.Parser (String, Maybe TH.Type)
pMsgDefVar = do
varBase <- (:) <$> P.lower <*> P.many (P.upper <|> P.lower <|> P.digit <|> P.char '\'')