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

View File

@ -1,9 +1,9 @@
TestDownloadMaxSize: Maximale Dateigröße TestDownloadMaxSize: Maximale Dateigröße
TestDownloadMode: Modus TestDownloadMode: Modus
HeadingAdminCrontab: Crontab HeadingAdminCrontab !ident-ok: Crontab
AdminInstanceId: Instanz-Nummer:in AdminInstanceId: Instanz-Nummer
AdminCrontabNotGenerated: (Noch) keine Crontab generiert AdminCrontabNotGenerated: (Noch) keine Crontab generiert
CronMatchAsap: ASAP CronMatchAsap !ident-ok: ASAP
CronMatchNone: Nie CronMatchNone: Nie
ErrMsgCiphertext: Verschlüsselte Fehlermeldung ErrMsgCiphertext: Verschlüsselte Fehlermeldung
AmbiguousNameCandidatesRemoved n@Int: #{show n} #{pluralDE n "uneindeutiger Kandidat/uneindeutige Kandidatin" "uneindeutige Kandiat:innen"} entfernt 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 StudyDegreeChangeSuccess: Zuordnung Abschlüsse aktualisiert
StudyTermsShort: Studiengangkürzel StudyTermsShort: Studiengangkürzel
StudyTermsChangeSuccess: Zuordnung Studiengänge aktualisiert StudyTermsChangeSuccess: Zuordnung Studiengänge aktualisiert
StudyCandidateIncidence: Synchronisation StudyCandidateIncidence !ident-ok: Synchronisation
StudyTermIsNew: Neu StudyTermIsNew: Neu
AdminFeaturesHeading: Studiengänge AdminFeaturesHeading: Studiengänge
StudyTermsParentMissing: Elternteil wird benötigt 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 BearerTokenRouteMissing: Route wird benötigt
BearerTokenRestrictions: Routen-spezifische Einschränkungen BearerTokenRestrictions: Routen-spezifische Einschränkungen
BearerTokenRestrictRoutes: Token-Validität nach Routen einschränken BearerTokenRestrictRoutes: Token-Validität nach Routen einschränken
BearerTokenRestrictRoute: Route BearerTokenRestrictRoute !ident-ok: Route
BearerTokenRestrictValue: Einschränkung BearerTokenRestrictValue: Einschränkung
BearerTokenAdditionalAuth: Zusätzliche Authorisierung 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. 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 StudyFeatureInferenceNoNameConflicts: Keine Konflikte beobachtet
StudyFeatureInferenceNameConflictsHeading: Studiengangseinträge mit beobachteten Konflikten 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. 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 BearerTokenImpersonate: Auftreten als
BearerTokenImpersonateNone: Keine Änderung BearerTokenImpersonateNone: Keine Änderung
@ -85,7 +85,7 @@ BearerTokenImpersonateRandomNegative: Anzahl muss positiv sein
BearerTokenImpersonateRandomCount: Anzahl BearerTokenImpersonateRandomCount: Anzahl
BearerTokenImpersonateUnknownUser email@UserEmail: Ein Nutzer/Eine Nutzerin mit E-Mail #{email} ist dem System nicht bekannt BearerTokenImpersonateUnknownUser email@UserEmail: Ein Nutzer/Eine Nutzerin mit E-Mail #{email} ist dem System nicht bekannt
BearerTokenImpersonateRandomWeightActivity: Nach Aktivität gewichten BearerTokenImpersonateRandomWeightActivity: Nach Aktivität gewichten
BearerTokenArchiveName: tokens.zip BearerTokenArchiveName !ident-ok: tokens.zip
TestDownloadDirect: Direkte Generierung TestDownloadDirect: Direkte Generierung
TestDownloadInTransaction: Generierung während Datenbank-Transaktion TestDownloadInTransaction: Generierung während Datenbank-Transaktion

View File

@ -22,7 +22,7 @@ CourseApplication: Bewerbung
AllocationCoursePriority i@Natural: #{i}. Wahl AllocationCoursePriority i@Natural: #{i}. Wahl
AllocationCourseNoApplication: Keine Bewerbung AllocationCourseNoApplication: Keine Bewerbung
ApplicationPriority: Priorität ApplicationPriority: Priorität
ApplicationVeto: Veto ApplicationVeto !ident-ok: Veto
ApplicationVetoTip: Bewerber:in mit Veto werden garantiert nicht dem Kurs zugeteilt ApplicationVetoTip: Bewerber:in mit Veto werden garantiert nicht dem Kurs zugeteilt
ApplicationRatingPoints: Bewertung ApplicationRatingPoints: Bewertung
ApplicationRatingPointsTip: Bewerber:in mit 5.0 werden garantiert nicht dem Kurs zugeteilt 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 AllocationTotalCoursesTip: Sie werden im Laufe dieser Zentralanmeldung maximal so vielen Kursen zugeteilt, wie Sie hier angeben
AllocationRegistered: Teilnahme an der Zentralanmeldung erfolgreich registriert AllocationRegistered: Teilnahme an der Zentralanmeldung erfolgreich registriert
AllocationRegistrationEdited: Einstellungen zur Teilnahme an der Zentralanmeldung erfolgreich angepasst AllocationRegistrationEdited: Einstellungen zur Teilnahme an der Zentralanmeldung erfolgreich angepasst
AllocationTitle termText@Text ssh'@SchoolShorthand allocation@AllocationName: #{termText} - #{ssh'}: #{allocation} AllocationTitle termText@Text ssh'@SchoolShorthand allocation@AllocationName !ident-ok: #{termText} - #{ssh'}: #{allocation}
AllocationShortTitle termText@Text ssh'@SchoolShorthand ash@AllocationShorthand: #{termText} - #{ssh'} - #{ash} AllocationShortTitle termText@Text ssh'@SchoolShorthand ash@AllocationShorthand !ident-ok: #{termText} - #{ssh'} - #{ash}
AllocationNotificationNewCourse: Benachrichtigung bei neuen Kursen 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". 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 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 #templates allocation/show/course
AllocationNoApplication: Keine Bewerbung AllocationNoApplication: Keine Bewerbung
CourseAllocationCourseParticipants: Teilnehmer:innen CourseAllocationCourseParticipants: Teilnehmer:innen
CourseMembersCount n@Int: #{n} CourseMembersCount n@Int !ident-ok: #{n}
CourseMembersCountLimited n@Int max@Int: #{n}/#{max} CourseMembersCountLimited n@Int max@Int !ident-ok: #{n}/#{max}
#templates allocation/accept #templates allocation/accept
ComputedAllocation: Berechnete Vergabe ComputedAllocation: Berechnete Vergabe
@ -110,7 +110,7 @@ AllocationMatchedUsers: Neu zugeteilt
#templates allocation/show #templates allocation/show
AllocationSchool: Institut AllocationSchool: Institut
AllocationSemester: Semester AllocationSemester !ident-ok: Semester
AllocationDescription: Beschreibung AllocationDescription: Beschreibung
AllocationStaffDescription: Beschreibung für Dozierende AllocationStaffDescription: Beschreibung für Dozierende
AllocationStaffRegisterFrom: Eintragung der Kurse ab AllocationStaffRegisterFrom: Eintragung der Kurse ab
@ -145,12 +145,12 @@ AllocationCourseRestrictionDontRestrict: Nicht einschränken
AllocationCourseRestrictionSubstitutes: Kurse, die aktuell Nachrücker akzeptieren AllocationCourseRestrictionSubstitutes: Kurse, die aktuell Nachrücker akzeptieren
AllocationCourseRestrictionCustom: Benutzerdefiniert AllocationCourseRestrictionCustom: Benutzerdefiniert
AllocationName: Name AllocationName !ident-ok: Name
Allocation: Zentralanmeldung Allocation: Zentralanmeldung
AllocationActive: Aktiv AllocationActive: Aktiv
AllocationUsersApplied: Bewerbungen AllocationUsersApplied: Bewerbungen
AllocationUsersAssigned: Zuweisungen AllocationUsersAssigned: Zuweisungen
AllocationUsersVetoed: Vetos AllocationUsersVetoed !ident-ok: Vetos
AllocationUsersRequested: Angefragte Plätze AllocationUsersRequested: Angefragte Plätze
AllocationUsersPriority: Zentrale Dringlichkeit AllocationUsersPriority: Zentrale Dringlichkeit

View File

@ -1,5 +1,5 @@
CourseApplicationTitle displayName@Text csh@CourseShorthand: Bewerbung für #{csh}: #{displayName} 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 CourseApplicationsAllocatedDirectory: zentral
CourseApplicationsNotAllocatedDirectory: direkt CourseApplicationsNotAllocatedDirectory: direkt
CsvColumnApplicationsAllocation: Zentralanmeldung über die die Bewerbung eingegangen ist CsvColumnApplicationsAllocation: Zentralanmeldung über die die Bewerbung eingegangen ist
@ -18,7 +18,7 @@ ApplicationUserColumns: Bewerbung
ApplicationRatingColumns: Bewertung ApplicationRatingColumns: Bewertung
ApplicationGeneratedColumns: Stammdaten 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. 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 CourseApplicationNoVeto: Kein Veto
CourseApplicationNoRatingPoints: Keine Bewertung CourseApplicationNoRatingPoints: Keine Bewertung
CourseApplicationNoRatingComment: Kein Kommentar CourseApplicationNoRatingComment: Kein Kommentar

View File

@ -1,6 +1,6 @@
FilterCourse: Kurs FilterCourse: Kurs
FilterCourseShort: Kürzel FilterCourseShort: Kürzel
FilterTerm: Semester FilterTerm !ident-ok: Semester
FilterCourseSchoolShort: Institut FilterCourseSchoolShort: Institut
FilterRegistered: Angemeldet FilterRegistered: Angemeldet
FilterCourseSearch: Volltext-Suche FilterCourseSearch: Volltext-Suche
@ -16,7 +16,7 @@ CourseLecturerAlreadyAdded: Diese:r Nutzer:in ist bereits als Kursverwalter:in e
CourseLecturerType: Rolle CourseLecturerType: Rolle
LecturerType: Rolle LecturerType: Rolle
CourseLecturerRightsIdentical: Alle Sorten von Kursverwalter:innen haben identische Rechte. 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 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, ...). 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 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 CourseName: Kurstitel
CourseShorthand: Kürzel CourseShorthand: Kürzel
CourseShorthandUnique: Muss nur innerhalb Institut und Semester eindeutig sein. Wird verbatim in die Url der Kursseite übernommen. 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 CourseDescriptionPlaceholder: Bitte mindestens die Modulbeschreibung angeben
CourseHomepageExternal: Externe Homepage 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. 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"} TutorsFor n@Int: #{pluralDE n "Tutor:in" "Tutor:innen"}
CorrectorsFor n@Int: #{pluralDE n "Korrektor:in" "Korrektor:innen"} CorrectorsFor n@Int: #{pluralDE n "Korrektor:in" "Korrektor:innen"}
CourseParticipantsHeading: Kursteilnehmer:innen CourseParticipantsHeading: Kursteilnehmer:innen
CourseParticipantsCount n@Int: #{n} CourseParticipantsCount n@Int !ident-ok: #{n}
CourseParticipantsCountOf n@Int m@Int: #{n} von #{m} CourseParticipantsCountOf n@Int m@Int: #{n} von #{m}
CourseVisibility: Sichtbarkeit CourseVisibility: Sichtbarkeit
CourseInvisible: Dieser Kurs ist momentan nur für Dozierende, Assistent:innen, Tutor:innen, Korrektor:innen, angemeldete Teilnehmer:innen und Bewerber:innen sichtbar. 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) CourseApplicationTemplateRegistration: Anmeldungsvorlage(n)
NotRegistered: Sie sind zu diesem Kurs nicht angemeldet. 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. 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. 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 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). 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 CourseEventRoom: Regulärer Raum
CourseEventRoomHidden: Raum nur für Teilnehmer:innen CourseEventRoomHidden: Raum nur für Teilnehmer:innen
CourseEventRoomHiddenTip: Soll der Raum nur angemeldeten Kursteilnehmer:innen angezeigt werden? 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 CourseEventRoomIsHidden: Raum wird nur Kurs-assoziierten Personen (Teilnehmer:innen, Tutor:innen, Korrektor:innen, etc.) angezeigt
CourseEventNote: Notiz CourseEventNote: Notiz
CourseEventActions: Aktionen CourseEventActions: Aktionen

View File

@ -1,5 +1,5 @@
CourseNews: Aktuelles 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 CourseNewsFiles: Dateien
CourseNewsLastEdited time@Text: Zuletzt verändert: #{time} CourseNewsLastEdited time@Text: Zuletzt verändert: #{time}
CourseNewsActionEdit: Bearbeiten 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)? 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 ExamAutoOccurrenceOccurrencesChangedInFlight: Raumliste wurde verändert
ExamAutoOccurrenceParticipantsAssigned num@Int64: Verteilungstabelle erfolgreich gespeichert und #{num} #{pluralDE num "Teilnehmer:in" "Teilnehmer:innen"} zugewiesen 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)}%) Proportion c@Text of'@Text prop@Rational !ident-ok: #{c}/#{of'} (#{rationalToFixed2 (100 * prop)}%)
ProportionNoRatio c@Text of'@Text: #{c}/#{of'} ProportionNoRatio c@Text of'@Text !ident-ok: #{c}/#{of'}
ExamCorrectHeading examname@Text: Prüfungsergebnisse für #{examname} eintragen ExamCorrectHeading examname@Text: Prüfungsergebnisse für #{examname} eintragen
ExamCorrectErrorNeedleTooShort: Dieser Identifikator ist zu kurz. ExamCorrectErrorNeedleTooShort: Dieser Identifikator ist zu kurz.
ExamCorrectErrorMultipleMatchingParticipants: Dem Identifikator konnten mehrere Prüfungsteilnehmer:innen zugeordnet werden. 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 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 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 ExamOccurrenceDuplicateName eoName@ExamOccurrenceName: Interne Terminbezeichnung #{eoName} kommt mehrfach vor
ExamOccurrenceRoomIsUnset: — ExamOccurrenceRoomIsUnset !ident-ok: —
ExamOccurrenceRoomIsHidden: Raum wird nur Teilnehmer:innen angezeigt 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. 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. 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 ExamUsersHeading: Prüfungsteilnehmer:innen
ExamCorrectHeadDate: Zeit ExamCorrectHeadDate: Zeit
ExamCorrectHeadParticipant: Teilnehmer:in ExamCorrectHeadParticipant: Teilnehmer:in
ExamCorrectHeadPart exampartnum@ExamPartNumber: #{exampartnum} ExamCorrectHeadPart exampartnum@ExamPartNumber !ident-ok: #{exampartnum}
ExamCorrectHeadStatus: Status ExamCorrectHeadStatus !ident-ok: Status
ExamCorrectUserCandidatesMore: und weitere ExamCorrectUserCandidatesMore: und weitere
ExamCorrectExamResultDelete: Prüfungsergebnis löschen ExamCorrectExamResultDelete: Prüfungsergebnis löschen
ExamCorrectExamResultNone: Keine Änderung ExamCorrectExamResultNone: Keine Änderung
@ -199,7 +199,7 @@ ExamCloseHeading: Prüfung abschließen
ExamAutoOccurrenceHeading: Automatische Raum-/Terminverteilung ExamAutoOccurrenceHeading: Automatische Raum-/Terminverteilung
#templates /exam-show #templates /exam-show
ExamShowOnline: Online/Offline ExamShowOnline !ident-ok: Online/Offline
ExamShowSynchronicity: Synchron/Asynchron ExamShowSynchronicity: Synchron/Asynchron
ExamNever: Nie ExamNever: Nie
ExamShowAids: Erlaubte Hilfsmittel ExamShowAids: Erlaubte Hilfsmittel
@ -211,7 +211,7 @@ ExamBonusRule: Prüfungsbonus aus Übungsbetrieb
ExamOccurrenceRule: Verfahren ExamOccurrenceRule: Verfahren
ExamOccurrenceRuleParticipant: Termin- bzw. Raumzuteilungsverfahren ExamOccurrenceRuleParticipant: Termin- bzw. Raumzuteilungsverfahren
ExamRegisteredCount: Anmeldungen ExamRegisteredCount: Anmeldungen
ExamRegisteredCountOf num@Int64 count@Int64: #{num}/#{count} ExamRegisteredCountOf num@Int64 count@Int64 !ident-ok: #{num}/#{count}
ExamOccurrences: Termine ExamOccurrences: Termine
GradingFrom: Ab GradingFrom: Ab
ExamNoShow: Nicht erschienen ExamNoShow: Nicht erschienen
@ -247,7 +247,7 @@ PointsMustBeMonotonic: Punktegrenzen müssen aufsteigend sein
ExamModeFormNone: Keine Angabe ExamModeFormNone: Keine Angabe
ExamModeFormCustom: Benutzerdefiniert ExamModeFormCustom: Benutzerdefiniert
ExamModeFormAids: Erlaubte Hilfsmittel ExamModeFormAids: Erlaubte Hilfsmittel
ExamModeFormOnline: Online/Offline ExamModeFormOnline !ident-ok: Online/Offline
ExamModeFormSynchronicity: Synchron/Asynchron ExamModeFormSynchronicity: Synchron/Asynchron
ExamModeFormRequiredEquipment: Erforderliche Hilfsmittel ExamModeFormRequiredEquipment: Erforderliche Hilfsmittel
ExamModeFormRequiredEquipmentIdentificationTip: Es wird stets ein Hinweis angezeigt, dass Teilnehmer sich ausweisen können müssen. 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 ExamRegistrationParticipantsRegistered n@Int: #{n} #{pluralDE n "Teilnehmer:in wurde" "Teilnehmer:innen wurden"} zur Prüfung angemeldet
ExamOpenBook: Open Book ExamOpenBook: Open Book
ExamClosedBook: Closed Book ExamClosedBook: Closed Book
ExamOnline: Online ExamOnline !ident-ok: Online
ExamOffline: Offline ExamOffline !ident-ok: Offline
ExamSynchronous: Synchron ExamSynchronous: Synchron
ExamAsynchronous: Asynchron ExamAsynchronous: Asynchron
ExamRequiredEquipmentNone: Nichts ExamRequiredEquipmentNone: Nichts

View File

@ -43,7 +43,7 @@ ExamFinishedSince time@Text: Prüfungsergebnisse sichtbar seit #{time}
#templates exam-office/* #templates exam-office/*
ExamUserSyncOfficeName: Name ExamUserSyncOfficeName !ident-ok: Name
ExamUserSyncTime: Zeitpunkt ExamUserSyncTime: Zeitpunkt
ExamUserSyncSchools: Institute ExamUserSyncSchools: Institute
ExamUserSyncLastChange: Zuletzt geändert 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. 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. ExternalExamExists coursen@CourseName examn@ExamName: Prüfung „#{examn}“ für Kurs „#{coursen}“ existiert bereits.
ExternalExamEdit coursen@CourseName examn@ExamName: Bearbeiten: #{coursen}, #{examn} ExternalExamEdit coursen@CourseName examn@ExamName: Bearbeiten: #{coursen}, #{examn}
ExternalExamSemester: Semester ExternalExamSemester !ident-ok: Semester
ExternalExamSchool: Institut ExternalExamSchool: Institut
ExternalExamCourseName: Veranstaltung ExternalExamCourseName: Veranstaltung
ExternalExamCourseNameTip: Muss nur innerhalb von Semester und Institut eindeutig sein. 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 ExternalExamUserCsvName tid@TermId ssh@SchoolId coursen@CourseName examn@ExamName: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase coursen}-#{foldedCase examn}-teilnehmer
ExternalExamUserSynchronised: Synchronisiert ExternalExamUserSynchronised: Synchronisiert
ExternalExamAction: Aktion ExternalExamAction: Aktion
ExampleUser1FirstName: Max ZweiterName ExampleUser1FirstName !ident-ok: Max ZweiterName
ExampleUser1Surname: Mustermann ExampleUser1Surname !ident-ok: Mustermann
ExampleUser1DisplayName: Max Mustermann ExampleUser1DisplayName !ident-ok: Max Mustermann
ExampleUser2FirstName: Martha ExampleUser2FirstName !ident-ok: Martha
ExampleUser2Surname: Musterstudent ExampleUser2Surname !ident-ok: Musterstudent
ExampleUser2DisplayName: Musterstudent Martha ExampleUser2DisplayName !ident-ok: Musterstudent Martha
ExampleUser3FirstName: Maria ExampleUser3FirstName !ident-ok: Maria
ExampleUser3Surname: Beispiel ExampleUser3Surname !ident-ok: Beispiel
ExampleUser3DisplayName: 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 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 ExternalExamUserMarkSynchronised: Prüfungsleistung als synchronisiert markieren

View File

@ -1,9 +1,9 @@
MaterialList: Material MaterialList !ident-ok: Material
MaterialName: Name MaterialName !ident-ok: Name
MaterialType: Art MaterialType: Art
MaterialTypePlaceholder: Folien, Code, Beispiel, ... MaterialTypePlaceholder: Folien, Code, Beispiel, ...
MaterialTypeSlides: Folien MaterialTypeSlides: Folien
MaterialTypeCode: Code MaterialTypeCode !ident-ok: Code
MaterialTypeExample: Beispiel MaterialTypeExample: Beispiel
MaterialDescription: Beschreibung MaterialDescription: Beschreibung
MaterialVisibleFrom: Sichtbar für Teilnehmer:innen ab 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. 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! MaterialInvisible: Dieses Material ist für Teilnehmer:innen momentan unsichtbar!
MaterialFiles: Dateien MaterialFiles: Dateien
MaterialHeading materialName@MaterialName: #{materialName} MaterialHeading materialName@MaterialName !ident-ok: #{materialName}
MaterialListHeading: Materialien MaterialListHeading !ident-ok: Material
MaterialNewHeading: Neues Material veröffentlichen MaterialNewHeading: Neues Material veröffentlichen
MaterialNewTitle: Neues Material MaterialNewTitle: Neues Material
MaterialEditHeading materialName@MaterialName: Material "#{materialName}" editieren 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"} MaterialDelHasFiles count@Int64: inklusive #{count} #{pluralDE count "Datei" "Dateien"}
MaterialIsVisible: Achtung, dieses Material wurde bereits veröffentlicht. MaterialIsVisible: Achtung, dieses Material wurde bereits veröffentlicht.
MaterialDeleted materialName@MaterialName: Material "#{materialName}" gelöscht 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} 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: #{materialName} - Video MaterialVideo materialName@MaterialName !ident-ok: #{materialName} - Video
MaterialVideoUnsupported: Ihr Browser scheint keine eingebetten Videos zu unterstützen MaterialVideoUnsupported: Ihr Browser scheint keine eingebetten Videos zu unterstützen
MaterialVideoDownload: Herunterladen MaterialVideoDownload: Herunterladen
MaterialFree: Kursmaterialien ohne Anmeldung zugänglich MaterialFree: Kursmaterialien ohne Anmeldung zugänglich

View File

@ -1,7 +1,7 @@
ParticipantsList: Kursteilnehmerlisten ParticipantsList: Kursteilnehmerlisten
ParticipantsIntersect: Überschneidung von Kursteilnehmer:innen ParticipantsIntersect: Überschneidung von Kursteilnehmer:innen
ParticipantsCsvName tid@TermId ssh@SchoolId: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-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 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"} 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 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"}! 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? SheetDeleteQuestion: Wollen Sie das unten aufgeführte Übungsblatt und alle zugehörigen Abgaben wirklich löschen?
SheetDeleted: Übungsblatt gelöscht SheetDeleted: Übungsblatt gelöscht
SheetArchiveName tid@TermId ssh@SchoolId csh@CourseShorthand shn@SheetName: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldedCase shn} 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: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldedCase shn}-#{foldCase renderedSft} 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} 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} 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 SheetVisibleFrom: Sichtbar für Teilnehmer:innen ab
@ -17,7 +17,7 @@ SheetActiveFrom: Aktiv ab/Beginn Abgabezeitraum
SheetActiveTo: Aktiv bis/Ende Abgabezeitraum SheetActiveTo: Aktiv bis/Ende Abgabezeitraum
SheetSolutionFrom: Lösung ab SheetSolutionFrom: Lösung ab
SheetSolutionFromTip: Ohne Datum nie für Teilnehmer:innen sichtbar, Korrektor:innen können diese Dateien immer herunterladen 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 SheetDescription: Hinweise für Teilnehmer:innen
SheetRequireExam: Anmeldung zu einer Prüfung voraussetzen? 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. 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 PersonalisedSheetFilesDownloadMatriculations: Mit Matrikelnummern
PersonalisedSheetFilesDownloadGroups: Mit festen Abgabegruppen PersonalisedSheetFilesDownloadGroups: Mit festen Abgabegruppen
SheetCorrectorNormal: Normal SheetCorrectorNormal !ident-ok: Normal
SheetCorrectorMissing: Abwesend SheetCorrectorMissing: Abwesend
SheetCorrectorExcused: Entschuldigt SheetCorrectorExcused: Entschuldigt
SheetGradingPoints maxPoints@Points: #{maxPoints} #{pluralDE maxPoints "Punkt" "Punkte"} 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 CorrectionPseudonyms: Abgaben-Pseudonyme
CorrectionPseudonymsTip: Eine Abgabe pro Zeile, bei Gruppenabgaben mehrere Pseudonyme (komma-separiert) innerhalb einer Zeile. Kleine Schreibfehler werden u.U. automatisch korrigiert. CorrectionPseudonymsTip: Eine Abgabe pro Zeile, bei Gruppenabgaben mehrere Pseudonyme (komma-separiert) innerhalb einer Zeile. Kleine Schreibfehler werden u.U. automatisch korrigiert.
PseudonymSheet: Übungsblatt 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 SubmissionPseudonyms: Pseudonyme
UnknownPseudonym pseudonym@Text: Unbekanntes Pseudonym "#{pseudonym}" UnknownPseudonym pseudonym@Text: Unbekanntes Pseudonym "#{pseudonym}"
SheetGroupTooLarge sheetGroupDesc@Text: Abgabegruppe zu groß: #{sheetGroupDesc} 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: SheetDuplicatePseudonym: Folgende Pseudonyme kamen mehrfach vor; alle Vorkommen außer dem Ersten wurden ignoriert:
SheetCreateExisting: Folgende Pseudonyme haben bereits abgegeben: SheetCreateExisting: Folgende Pseudonyme haben bereits abgegeben:
SubmissionCorrCreate: Abgaben registrieren 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 NoOpenSubmissions: Keine unkorrigierten Abgaben vorhanden
ColumnRatingPoints: Punktzahl ColumnRatingPoints: Punktzahl
RatingComment: Kommentar RatingComment: Kommentar
@ -98,7 +98,7 @@ SubmissionSheetMarking: Hinweise für Korrektor:innen
SubmissionGradingSummaryTitle intgr@Integer: #{intgr} #{pluralDE intgr "Abgabe" "Abgaben"} SubmissionGradingSummaryTitle intgr@Integer: #{intgr} #{pluralDE intgr "Abgabe" "Abgaben"}
SubmissionNoUploadExpected: Es ist keine Abgabe von Dateien vorgesehen. SubmissionNoUploadExpected: Es ist keine Abgabe von Dateien vorgesehen.
SubmissionFilesCorrected: Abgegebene & Korrigierte Dateien SubmissionFilesCorrected: Abgegebene & Korrigierte Dateien
SubmissionOriginal: Original SubmissionOriginal !ident-ok: Original
EditedBy name@Text time@Text: #{time} durch #{name} EditedBy name@Text time@Text: #{time} durch #{name}
SubmissionReplace: Abgabe ersetzen SubmissionReplace: Abgabe ersetzen
@ -135,10 +135,10 @@ SubmissionDeleteCosubmittorsWarning n@Int: Bei #{pluralDE n "der oben aufgeführ
GenericShort: Kürzel GenericShort: Kürzel
GenericBack: Zurück GenericBack: Zurück
GenericChange: Änderung GenericChange: Änderung
GenericNumChange: +/- GenericNumChange !ident-ok: +/-
GenericMin: Min GenericMin !ident-ok: Min
GenericAvg: Avg GenericAvg !ident-ok: Avg
GenericMax: Max GenericMax !ident-ok: Max
GenericAll: Insgesamt GenericAll: Insgesamt
SubmissionFilesUnchanged: Abgabedateien beibehalten SubmissionFilesUnchanged: Abgabedateien beibehalten
SubmissionFilesUnchangedTip: Sollen die bestehenden Abgabedateien beim Ersetzen der Abgabe unverändert übernommen werden? SubmissionFilesUnchangedTip: Sollen die bestehenden Abgabedateien beim Ersetzen der Abgabe unverändert übernommen werden?

View File

@ -10,7 +10,7 @@ HelpSubject: Betreff
HelpRequest: Supportanfrage/Verbesserungsvorschlag HelpRequest: Supportanfrage/Verbesserungsvorschlag
HelpSent: Ihre Supportanfrage wurde weitergeleitet. HelpSent: Ihre Supportanfrage wurde weitergeleitet.
AdditionalFaqs: Weitere häufig gestellte Fragen AdditionalFaqs: Weitere häufig gestellte Fragen
HelpName: Name HelpName !ident-ok: Name
HelpTitle : Hilfe HelpTitle : Hilfe
HelpSendLastError: Letzte Fehlermeldung anhängen HelpSendLastError: Letzte Fehlermeldung anhängen
HelpError: Letzte Fehlermeldung 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. MailTestContent: Dies ist eine Test-E-Mail versandt von Uni2work. Von Ihrer Seite ist keine Handlung notwendig.
MailTestDateTime: Test der Datumsformattierung: MailTestDateTime: Test der Datumsformattierung:
MailSubjectSupport: Supportanfrage MailSubjectSupport: Supportanfrage
MailSubjectSupportCustom customSubject@Text: [Support] #{customSubject} MailSubjectSupportCustom customSubject@Text !ident-ok: [Support] #{customSubject}
MailSubjectPasswordReset: Uni2work-Passwort ändern bzw. setzen MailSubjectPasswordReset: Uni2work-Passwort ändern bzw. setzen
CommUndisclosedRecipients: Verborgene Empfänger:innen CommUndisclosedRecipients: Verborgene Empfänger:innen
CommAllRecipients: alle-empfaenger CommAllRecipients: alle-empfaenger

View File

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

View File

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

View File

@ -1,13 +1,16 @@
ChangelogItemFeature: Feature ChangelogItemFeature: Feature
ChangelogItemBugfix: Bugfix ChangelogItemBugfix: Bugfix
SexNotKnown: Unknown SexNotKnown: Unknown
SexMale: Male SexMale: Male
SexFemale: Female SexFemale: Female
SexNotApplicable: Not applicable SexNotApplicable: Not applicable
NoSubmissions: No submission NoSubmissions: No submission
CorrectorSubmissions: External submission via pseudonym CorrectorSubmissions: External submission via pseudonym
UserSubmissions: Direct submission in Uni2work UserSubmissions: Direct submission in Uni2work
BothSubmissions: Submission either directly in Uni2work or externally via pseudonym
SystemExamOffice: Exam office SystemExamOffice: Exam office
SystemFaculty: Faculty member SystemFaculty: Faculty member
SystemStudent: Student 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 NewsUpcomingExams: Bevorstehende Prüfungen
NewsHideHiddenSystemMessages: Versteckte Nachrichten nicht mehr anzeigen NewsHideHiddenSystemMessages: Versteckte Nachrichten nicht mehr anzeigen
NewsShowHiddenSystemMessages: Versteckte Nachrichten anzeigen NewsShowHiddenSystemMessages: Versteckte Nachrichten anzeigen
NewsExamOccurrenceRoomIsUnset: — NewsExamOccurrenceRoomIsUnset !ident-ok: —
NewsExamOccurrenceRoomIsHidden: Raum wird nur Teilnehmer:innen angezeigt NewsExamOccurrenceRoomIsHidden: Raum wird nur Teilnehmer:innen angezeigt
NewsExamRegistered: Zur Prüfung angemeldet NewsExamRegistered: Zur Prüfung angemeldet
NewsExamNotRegistered: Nicht zur Prüfung angemeldet NewsExamNotRegistered: Nicht zur Prüfung angemeldet

View File

@ -1,6 +1,6 @@
HeadingSchoolList: Institute HeadingSchoolList: Institute
SchoolShort: Kürzel SchoolShort: Kürzel
SchoolName: Name SchoolName !ident-ok: Name
SchoolLdapOrganisations: Assoziierte LDAP-Fragmente 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 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 SchoolLdapOrganisationMissing: LDAP-Fragment wird benötigt
@ -21,4 +21,4 @@ SchoolLecturer: Dozent:in
SchoolEvaluation: Kursumfragenverwaltung SchoolEvaluation: Kursumfragenverwaltung
SchoolExamOffice: Prüfungsverwaltung SchoolExamOffice: Prüfungsverwaltung
SchoolAllocation: Zentralanmeldungs-Administration SchoolAllocation: Zentralanmeldungs-Administration
SchoolAdmin: Admin SchoolAdmin !ident-ok: Admin

View File

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

View File

@ -8,12 +8,12 @@ CsvPresetExcel: Excel-Kompatibel
CsvCustom: Benutzerdefiniert CsvCustom: Benutzerdefiniert
CsvDelimiter: Trennzeichen CsvDelimiter: Trennzeichen
CsvUseCrLf: Zeilenumbrüche 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? 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. 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) CsvUTF8 !ident-ok: UTF-8 (Unicode)
CsvCP1252: Windows CP-1252 ("ANSI") CsvCP1252 !ident-ok: Windows CP-1252 ("ANSI")
CsvDelimiterNull: Null-Byte CsvDelimiterNull: Null-Byte
CsvDelimiterTab: Tabulator CsvDelimiterTab: Tabulator
CsvDelimiterComma: Komma CsvDelimiterComma: Komma
@ -22,8 +22,8 @@ CsvDelimiterSemicolon: Strichpunkt
CsvDelimiterBar: Senkrechter Strich CsvDelimiterBar: Senkrechter Strich
CsvDelimiterSpace: Leerzeichen CsvDelimiterSpace: Leerzeichen
CsvDelimiterUnitSep: Teilgruppentrennzeichen CsvDelimiterUnitSep: Teilgruppentrennzeichen
CsvCrLf: DOS (CRLF) CsvCrLf !ident-ok: DOS (CRLF)
CsvLf: Unix (LF) CsvLf !ident-ok: Unix (LF)
CsvQuoteNone: Nie CsvQuoteNone: Nie
CsvQuoteMinimal: Nur wenn nötig CsvQuoteMinimal: Nur wenn nötig
CsvQuoteAll: Immer CsvQuoteAll: Immer
@ -32,4 +32,4 @@ CsvChangeOptionsLabel: Export-Optionen
CsvPresetXlsx: .xlsx Dateien (ECMA-376; Excel ≥2010) CsvPresetXlsx: .xlsx Dateien (ECMA-376; Excel ≥2010)
CsvFormatField: Dateiformat CsvFormatField: Dateiformat
CsvFormatCsv: .csv (Comma-Separated Values) 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 TitleChangeUserDisplayEmail: Set display email
LanguageChanged: Language changed successfully LanguageChanged: Language changed successfully
AllocNotifyNewCourseDefault: Systemweite Einstellung AllocNotifyNewCourseDefault: System-wide setting
AllocNotifyNewCourseForceOff: Nein AllocNotifyNewCourseForceOff: No
AllocNotifyNewCourseForceOn: Ja AllocNotifyNewCourseForceOn: Yes
Settings: Settings Settings: Settings

View File

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

View File

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

View File

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

View File

@ -18,7 +18,7 @@ LdapSyncedBefore: Letzte LDAP-Synchronisation vor
UserSystemFunctions: Systemweite Rollen UserSystemFunctions: Systemweite Rollen
UserSystemFunctionsSaved: Systemweite Rollen gespeichert UserSystemFunctionsSaved: Systemweite Rollen gespeichert
UserSystemFunctionsNotChanged: Es wurden keine systemweiten Rollen angepasst 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 AuthPWHashAlreadyConfigured: Nutzer:in meldet sich bereits per Uni2work-Kennung an
AuthPWHashConfigured: Nutzer:in meldet sich nun per Uni2work-Kennung an AuthPWHashConfigured: Nutzer:in meldet sich nun per Uni2work-Kennung an
UsersCourseSchool: Institut 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 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 AuthLDAPAlreadyConfigured: Nutzer:in meldet sich bereits per Campus-Kennung in Uni2work an
AuthLDAPConfigured: Nutzer:in meldet sich nun 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 PasswordResetQueued: Link zum Passwort-Zurücksetzen versandt
UserAssimilateUser: Benutzer:in UserAssimilateUser: Benutzer:in
AssimilateUserNotFound: E-Mail Adresse konnte keinem Benutzer/keiner Benutzerin zugeordnet werden AssimilateUserNotFound: E-Mail Adresse konnte keinem Benutzer/keiner Benutzerin zugeordnet werden
@ -76,4 +76,4 @@ AllUsersLdapSync: Alle LDAP-Synchronisieren
UserHijack: Sitzung übernehmen UserHijack: Sitzung übernehmen
AuthKindLDAP: Campus-Kennung AuthKindLDAP: Campus-Kennung
AuthKindPWHash: Uni2work-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 AuthLDAPInvalidLookup: Existing user could not be uniquely matched with a LDAP entry
AuthLDAPAlreadyConfigured: User already logs in using their campus account AuthLDAPAlreadyConfigured: User already logs in using their campus account
AuthLDAPConfigured: User now 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 PasswordResetQueued: Sent link to reset password
UserAssimilateUser: User UserAssimilateUser: User
AssimilateUserNotFound: Email could not be resolved to an user AssimilateUserNotFound: Email could not be resolved to an user

View File

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

View File

@ -1,8 +1,8 @@
#messages or constructors that are used all over the code #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. 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 FieldPrimary: Hauptfach
FieldSecondary: Nebenfach FieldSecondary: Nebenfach
MultiEmailFieldTip: Es sind mehrere, Komma-separierte, E-Mail-Adressen möglich 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. 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 BtnExamAutoOccurrenceCalculate: Verteilungstabelle berechnen
BtnExamAutoOccurrenceAccept: Verteilung akzeptieren BtnExamAutoOccurrenceAccept: Verteilung akzeptieren
BtnExamAutoOccurrenceNudgeUp: + BtnExamAutoOccurrenceNudgeUp !ident-ok: +
BtnExamAutoOccurrenceNudgeDown: - BtnExamAutoOccurrenceNudgeDown !ident-ok: -
BtnSetDisplayEmail: E-Mail-Adresse setzen BtnSetDisplayEmail: E-Mail-Adresse setzen
BtnAuthLDAP: Auf Campus-Kennung umstellen BtnAuthLDAP: Auf Campus-Kennung umstellen
BtnAuthPWHash: Auf Uni2work-Kennung umstellen BtnAuthPWHash: Auf Uni2work-Kennung umstellen

View File

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

View File

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

View File

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

View File

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

View File

@ -46,7 +46,7 @@ MenuTermCreate: Create new semester
MenuCourseNew: Create new course MenuCourseNew: Create new course
MenuTermEdit: Edit semester MenuTermEdit: Edit semester
MenuTermCurrent: Current semester MenuTermCurrent: Current semester
MenuCorrection: Korrektur MenuCorrection: Correction
MenuCorrections: Corrections MenuCorrections: Corrections
MenuCorrectionsOwn: My corrections MenuCorrectionsOwn: My corrections
MenuSubmissions: Submissions 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} SubmissionsSheet sheetName@SheetName: Abgaben für #{sheetName}
SheetList tid@TermId ssh@SchoolId csh@CourseShorthand: #{tid}-#{ssh}-#{csh} Übersicht Übungsblätter 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 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 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 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! 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 ExamOccurrenceStart: Prüfungsbeginn
#general table-discriptions #general table-discriptions
TableEmail: Email TableEmail: E-Mail
TableStudyTerm: Studiengang TableStudyTerm: Studiengang
TableStudyFeatureAge: Fachsemester TableStudyFeatureAge: Fachsemester
TableStudyFeatureDegree: Abschluss TableStudyFeatureDegree: Abschluss
TableStudyFeatureType: TableStudyFeatureType !empty-ok:
TableStudyFeatureValid: Aktiv TableStudyFeatureValid: Aktiv
TableStudyFeatureUpdate: Abgeglichen TableStudyFeatureUpdate: Abgeglichen
TableHeadingFilter: Filter TableHeadingFilter !ident-ok: Filter
TableTerm: Semester TableTerm !ident-ok: Semester
TableCourseSchool: Institut TableCourseSchool: Institut
TableSubmissionGroup: Feste Abgabegruppe TableSubmissionGroup: Feste Abgabegruppe
TableNoSubmissionGroup: Keine feste Abgabegruppe TableNoSubmissionGroup: Keine feste Abgabegruppe
@ -18,7 +18,7 @@ TableSchool: Institut
TableCourse: Kurs TableCourse: Kurs
TableCourseMembers: Teilnehmer:innen TableCourseMembers: Teilnehmer:innen
TableExamOccurrence: Termin/Raum TableExamOccurrence: Termin/Raum
TableExamName: Name TableExamName !ident-ok: Name
TableExamTime: Termin TableExamTime: Termin
TableExamRegistration: Prüfungsanmeldung TableExamRegistration: Prüfungsanmeldung
TableExamResult: Prüfungsergebnis TableExamResult: Prüfungsergebnis
@ -44,7 +44,7 @@ TableTutorialName: Bezeichnung
TableTutorialType: Art TableTutorialType: Art
TableTutorialRoom: Regulärer Raum TableTutorialRoom: Regulärer Raum
TableTutorialRoomHidden: Raum nur für Teilnehmer TableTutorialRoomHidden: Raum nur für Teilnehmer
TableTutorialRoomIsUnset: — TableTutorialRoomIsUnset !ident-ok: —
TableTutorialRoomIsHidden: Raum wird nur Teilnehmern angezeigt TableTutorialRoomIsHidden: Raum wird nur Teilnehmern angezeigt
TableTutorialTime: Zeit TableTutorialTime: Zeit
TableTutorialDeregisterUntil: Abmeldungen bis TableTutorialDeregisterUntil: Abmeldungen bis
@ -53,12 +53,12 @@ TableNoFilter: Keine Einschränkung
TableUserMatriculation: Matrikelnummer TableUserMatriculation: Matrikelnummer
TableColumnStudyFeatures: Studiendaten TableColumnStudyFeatures: Studiendaten
TableSchoolShort: Kürzel TableSchoolShort: Kürzel
TableSchoolName: Name TableSchoolName !ident-ok: Name
TableExamRegisterFrom: Anmeldung ab TableExamRegisterFrom: Anmeldung ab
TableExamRegisterTo: Anmeldung bis TableExamRegisterTo: Anmeldung bis
TableAction: Aktion TableAction: Aktion
SelectColumn: Auswahl SelectColumn: Auswahl
CsvExport: CSV-Export CsvExport: CSV-Export
TableProportion c@Text of'@Text prop@Rational: #{c}/#{of'} (#{rationalToFixed2 (100 * prop)}%) TableProportion c@Text of'@Text prop@Rational !ident-ok: #{c}/#{of'} (#{rationalToFixed2 (100 * prop)}%)
TableProportionNoRatio c@Text of'@Text: #{c}/#{of'} TableProportionNoRatio c@Text of'@Text !ident-ok: #{c}/#{of'}
TableExamFinished: Ergebnisse sichtbar ab TableExamFinished: Ergebnisse sichtbar ab

View File

@ -30,4 +30,4 @@ TableCourseDescription: Beschreibung
RowCount count@Int64: #{count} #{pluralDE count "passender Eintrag" "passende Einträge"} insgesamt RowCount count@Int64: #{count} #{pluralDE count "passender Eintrag" "passende Einträge"} insgesamt
JSONFieldDecodeFailure aesonFailure@String: Konnte JSON nicht parsen: #{aesonFailure} 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 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 RGCourseTutors: Tutor:innen
RGCourseUnacceptedApplicants: Nicht akzeptierte Bewerber:innen RGCourseUnacceptedApplicants: Nicht akzeptierte Bewerber:innen
RecipientToggleAll: Alle/Keine RecipientToggleAll: Alle/Keine
CommCourseTestSubject customSubject@Text: [TEST] #{customSubject} CommCourseTestSubject customSubject@Text !ident-ok: [TEST] #{customSubject}
UtilCommCourseSubject: Kursmitteilung UtilCommCourseSubject: Kursmitteilung
CommRecipients: Empfänger:innen CommRecipients: Empfänger:innen
CommRecipientsTip: Sie selbst erhalten immer eine Kopie der Nachricht CommRecipientsTip: Sie selbst erhalten immer eine Kopie der Nachricht
@ -73,14 +73,14 @@ UtilExamResultGrade: Note
UtilExamResultPass: Bestanden/Nicht Bestanden UtilExamResultPass: Bestanden/Nicht Bestanden
UtilExamResultNoShow: Nicht erschienen UtilExamResultNoShow: Nicht erschienen
UtilExamResultVoided: Entwertet UtilExamResultVoided: Entwertet
CourseOption tid@TermId ssh@SchoolId csh@CourseShorthand coursen@CourseName: #{tid} - #{ssh} - #{csh}: #{coursen} CourseOption tid@TermId ssh@SchoolId csh@CourseShorthand coursen@CourseName !ident-ok: #{tid} - #{ssh} - #{csh}: #{coursen}
RoomReferenceNone: — RoomReferenceNone !ident-ok: —
RoomReferenceSimple: Text RoomReferenceSimple !ident-ok: Text
RoomReferenceLink: Link & Anweisungen RoomReferenceLink: Link & Anweisungen
RoomReferenceSimpleText: Raum RoomReferenceSimpleText: Raum
RoomReferenceSimpleTextPlaceholder: Raum RoomReferenceSimpleTextPlaceholder: Raum
RoomReferenceLinkLink: Link RoomReferenceLinkLink !ident-ok: Link
RoomReferenceLinkLinkPlaceholder: URL RoomReferenceLinkLinkPlaceholder !ident-ok: URL
RoomReferenceLinkInstructions: Anweisungen RoomReferenceLinkInstructions: Anweisungen
RoomReferenceLinkInstructionsPlaceholder: Anweisungen RoomReferenceLinkInstructionsPlaceholder: Anweisungen
@ -92,8 +92,8 @@ InvitationCollision: Einladung konnte nicht angenommen werden da ein derartiger
InvitationDeclined: Einladung wurde abgelehnt InvitationDeclined: Einladung wurde abgelehnt
#sheetType.hs #sheetType.hs
SheetTypeBonus': Bonus SheetTypeBonus' !ident-ok: Bonus
SheetTypeNormal': Normal SheetTypeNormal' !ident-ok: Normal
SheetTypeInformational': Ohne Anrechung SheetTypeInformational': Ohne Anrechung
SheetTypeNotGraded: Keine Korrektur SheetTypeNotGraded: Keine Korrektur
SheetGradingBonusIncluded: Erzielte Bonuspunkte wurden hier bereits zu den erreichten normalen Punkten hinzugezählt. 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! 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: CorrectionInvisibleReasons: Mögliche Gründe hierfür:
Plugin: Plugin Plugin !ident-ok: Plugin
PreviouslyUploadedInfo: Bereits hochgeladene Dateien PreviouslyUploadedInfo: Bereits hochgeladene Dateien
PreviouslyUploadedDeletionInfo: Nur ausgewählte und unten hinzugefügte Dateien werden erneut hochgeladen PreviouslyUploadedDeletionInfo: Nur ausgewählte und unten hinzugefügte Dateien werden erneut hochgeladen
AddMoreFiles: Weitere Dateien hinzufügen: AddMoreFiles: Weitere Dateien hinzufügen:
MessageError: Fehler MessageError: Fehler
MessageWarning: Warnung MessageWarning: Warnung
MessageInfo: Information MessageInfo !ident-ok: Information
MessageSuccess: Erfolg MessageSuccess: Erfolg
ShortFieldPrimary: HF ShortFieldPrimary: HF
ShortFieldSecondary: NF ShortFieldSecondary: NF
SheetGradingPassPoints': Bestehen nach Punkten SheetGradingPassPoints': Bestehen nach Punkten
SheetGradingPassBinary': Bestanden/Nicht bestanden SheetGradingPassBinary': Bestanden/Nicht bestanden
SheetGradingPassAlways': Automatisch bestanden, sobald korrigiert SheetGradingPassAlways': Automatisch bestanden, sobald korrigiert
SheetTypeNormal: Normal SheetTypeNormal !ident-ok: Normal
SheetTypeBonus: Bonus 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.HashMap.Strict as HashMap
import qualified Data.HashSet as HashSet import qualified Data.HashSet as HashSet
import qualified Data.Map.Strict as Map import qualified Data.Map.Strict as Map
import qualified Data.Set as Set
import qualified Text.Parsec as P import qualified Text.Parsec as P
import qualified Text.Parsec.Text.Lazy 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.Text as Text
import qualified Data.Char as Char
import Utils.TH.AlphaConversion (alphaConvE) 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 data MsgDef f g = MsgDef
{ msgDefVars :: InsOrdHashMap String (f (g TH.Type)) { msgDefVars :: InsOrdHashMap String (f (g TH.Type))
, msgDefContent :: [MsgDefContent] , msgDefContent :: [MsgDefContent]
, msgDefAnnotations :: Set MsgDefAnnotation
} deriving (Generic, Typeable) } deriving (Generic, Typeable)
deriving stock instance Eq (f (g TH.Type)) => Eq (MsgDef f g) 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 | MsgDefContentSplice Bool {- Recurse? -} TH.Exp
deriving (Eq, Ord, Show, Generic, Typeable) 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 NonEmpty Maybe -> Either (InsOrdHashSet String, InsOrdHashMap String (InsOrdHashSet String)) (MsgFile Identity Maybe)
disambiguateMsgFile MsgFile{..} disambiguateMsgFile MsgFile{..}
@ -105,8 +126,8 @@ unionsInsOrdHashMap :: (Foldable f, Eq k, Hashable k)
-> InsOrdHashMap k (NonEmpty v) -> InsOrdHashMap k (NonEmpty v)
unionsInsOrdHashMap = F.foldl' (InsOrdHashMap.unionWith (<>)) InsOrdHashMap.empty unionsInsOrdHashMap = F.foldl' (InsOrdHashMap.unionWith (<>)) InsOrdHashMap.empty
insOrdHashMapKeysSet :: InsOrdHashMap k v -> HashSet k insOrdHashMapKeysSet :: (Eq k, Hashable k) => InsOrdHashMap k v -> InsOrdHashSet k
insOrdHashMapKeysSet = HashMap.keysSet . InsOrdHashMap.toHashMap insOrdHashMapKeysSet = InsOrdHashSet.fromList . map (view _1) . InsOrdHashMap.toList
mkMessage :: TH.Name -- ^ Foundation type mkMessage :: TH.Name -- ^ Foundation type
@ -168,10 +189,48 @@ mkMessageCommon genType prefix master datName folder defLang = do
Just x -> return x Just x -> return x
let allDefns = insOrdHashMapKeysSet $ msgFileContent defMsgFile let allDefns = insOrdHashMapKeysSet $ msgFileContent defMsgFile
extraDefns = flip HashMap.mapMaybe disambiguated $ \MsgFile{..} -> assertM' (not . HashSet.null) $ insOrdHashMapKeysSet msgFileContent `HashSet.difference` allDefns 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 ", " $ HashSet.toList extra) 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) 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 let defnName defn = TH.mkName $ prefix <> defn
execWriterT @_ @[TH.Dec] $ do execWriterT @_ @[TH.Dec] $ do
@ -189,10 +248,11 @@ mkMessageCommon genType prefix master datName folder defLang = do
tellMPoint $ TH.dataD (TH.cxt []) datName [] Nothing datCons [] tellMPoint $ TH.dataD (TH.cxt []) datName [] Nothing datCons []
renderLangs <- iforM disambiguated $ \lang MsgFile{..} -> do renderLangs <- iforM disambiguated $ \lang MsgFile{..} -> do
let missing = allDefns `HashSet.difference` insOrdHashMapKeysSet msgFileContent let missing = allDefns `InsOrdHashSet.difference` insOrdHashMapKeysSet msgFileContent
complete = HashSet.null missing complete = InsOrdHashSet.null missing
unless complete $ 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" funName <- lift $ newUniqueName "renderLang"
tellMPoint $ TH.sigD funName [t| $(TH.conT master) -> [Lang] -> $(TH.conT datName) -> $(bool [t|Maybe Text|] [t|Text|] complete) |] tellMPoint $ TH.sigD funName [t| $(TH.conT master) -> [Lang] -> $(TH.conT datName) -> $(bool [t|Maybe Text|] [t|Text|] complete) |]
masterN <- lift $ TH.newName "_master" masterN <- lift $ TH.newName "_master"
@ -262,12 +322,18 @@ pMsgLine = flip P.label ".msg line" $ do
P.skipMany1 P.space P.skipMany1 P.space
accumInsOrdHashMap <$> P.sepEndBy pMsgDefVar (P.many1 P.space) accumInsOrdHashMap <$> P.sepEndBy pMsgDefVar (P.many1 P.space)
spaces spaces
let pAnnotations = Set.fromList <$> P.sepBy1 (P.char '!' *> pMsgDefAnnotation) spaces
msgDefAnnotations <- P.option Set.empty pAnnotations
void $ P.char ':' void $ P.char ':'
spaces spaces
msgDefContent <- P.manyTill pMsgDefContent . P.lookAhead . P.try $ void P.endOfLine <|> P.eof msgDefContent <- P.manyTill pMsgDefContent . P.lookAhead . P.try $ void P.endOfLine <|> P.eof
return . InsOrdHashMap.singleton constrBase $ (NonEmpty.:| []) MsgDef{..} 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 :: P.Parser (String, Maybe TH.Type)
pMsgDefVar = do pMsgDefVar = do
varBase <- (:) <$> P.lower <*> P.many (P.upper <|> P.lower <|> P.digit <|> P.char '\'') varBase <- (:) <$> P.lower <*> P.many (P.upper <|> P.lower <|> P.digit <|> P.char '\'')