diff --git a/messages/uniworx/de-de-formal.msg b/messages/uniworx/de-de-formal.msg index fb3841abe..0ce2fca11 100644 --- a/messages/uniworx/de-de-formal.msg +++ b/messages/uniworx/de-de-formal.msg @@ -144,8 +144,8 @@ CourseRegisterToTip: Darf auch unbegrenzt offen bleiben CourseDeregisterUntilTip: Abmeldung ist ab "Anmeldungen von" bis zu diesem Zeitpunkt erlaubt. Die Abmeldung darf auch unbegrenzt erlaubt bleiben. CourseFilterSearch: Volltext-Suche CourseFilterRegistered: Registriert -CourseFilterNone: Egal -BoolIrrelevant: Egal +CourseFilterNone: — +BoolIrrelevant: — CourseDeleteQuestion: Wollen Sie den unten aufgeführten Kurs wirklich löschen? CourseDeleted: Kurs gelöscht CourseUserTutorials: Angemeldete Tutorien @@ -483,7 +483,7 @@ HomeOpenAllocations: Offene Zentralanmeldungen HomeUpcomingSheets: Anstehende Übungsblätter HomeUpcomingExams: Bevorstehende Prüfungen -NumCourses num@Int64: #{num} Kurse +NumCourses num@Int64: #{num} #{pluralDE num "Kurs" "Kurse"} CloseAlert: Schliessen Name: Name @@ -524,15 +524,15 @@ NatField name@Text: #{name} muss eine natürliche Zahl sein! JSONFieldDecodeFailure aesonFailure@String: Konnte JSON nicht parsen: #{aesonFailure} SecretJSONFieldDecryptFailure: Konnte versteckte vertrauliche Daten nicht entschlüsseln -SubmissionsAlreadyAssigned num@Int64: #{num} Abgaben waren bereits einem Korrektor zugeteilt und wurden nicht verändert: -SubmissionsAssignUnauthorized num@Int64: #{num} Abgaben können momentan nicht einem Korrektor zugeteilt werden (z.B. weil die Abgabe noch offen ist): -UpdatedAssignedCorrectorSingle num@Int64: #{num} Abgaben wurden dem neuen Korrektor zugeteilt. +SubmissionsAlreadyAssigned num@Int64: #{num} #{pluralDE num "Abgabe" "Abgaben"} waren bereits einem Korrektor zugeteilt und wurden nicht verändert: +SubmissionsAssignUnauthorized num@Int64: #{num} #{pluralDE num "Abgabe" "Abgaben"} können momentan nicht einem Korrektor zugeteilt werden (z.B. weil die Abgabe noch offen ist): +UpdatedAssignedCorrectorSingle num@Int64: #{num} #{pluralDE num "Abgabe" "Abgaben"} wurden dem neuen Korrektor zugeteilt. NoCorrector: Kein Korrektor -RemovedCorrections num@Int64: Korrektur-Daten wurden von #{num} Abgaben entfernt. -UpdatedAssignedCorrectorsAuto num@Int64: #{num} Abgaben wurden unter den Korrektoren aufgeteilt. +RemovedCorrections num@Int64: Korrektur-Daten wurden von #{num} #{pluralDE num "Abgabe" "Abgaben"} entfernt. +UpdatedAssignedCorrectorsAuto num@Int64: #{num} #{pluralDE num "Abgabe" "Abgaben"} wurden unter den Korrektoren aufgeteilt. UpdatedSheetCorrectorsAutoAssigned n@Int: #{n} #{pluralDE n "Abgabe wurde einem Korrektor" "Abgaben wurden Korrektoren"} zugteilt. UpdatedSheetCorrectorsAutoFailed n@Int: #{n} #{pluralDE n "Abgabe konnte" "Abgaben konnten"} nicht automatisch zugewiesen werden. -CouldNotAssignCorrectorsAuto num@Int64: #{num} Abgaben konnten nicht automatisch zugewiesen werden: +CouldNotAssignCorrectorsAuto num@Int64: #{num} #{pluralDE num "Abgabe konnte" "Abgaben konnten"} nicht automatisch zugewiesen werden: SelfCorrectors num@Int64: #{num} Abgaben wurden Abgebenden als eigenem Korrektor zugeteilt! SubmissionOriginal: Original @@ -609,7 +609,7 @@ RatingNotUnicode uexc@UnicodeException: Bewertungsdatei nicht in UTF-8 kodiert: RatingMissingSeparator: Präambel der Bewertungsdatei konnte nicht identifziert werden RatingMultiple: Bewertungen enthält mehrere Punktzahlen für die gleiche Abgabe RatingInvalid parseErr@Text: Bewertungspunktzahl konnte nicht als Zahl verstanden werden: #{parseErr} -RatingFileIsDirectory: Unerwarteter Fehler: Datei ist unerlaubterweise ein Verzeichnis +RatingFileIsDirectory: Bewertungsdatei ist unerlaubterweise ein Verzeichnis RatingNegative: Bewertungspunkte dürfen nicht negativ sein RatingExceedsMax: Bewertung übersteigt die erlaubte Maximalpunktzahl RatingNotExpected: Keine Bewertungen erlaubt @@ -621,9 +621,9 @@ SubmissionSinkExceptionDuplicateFileTitle file@FilePath: Dateiname #{show file} SubmissionSinkExceptionDuplicateRating: Mehr als eine Bewertung gefunden. SubmissionSinkExceptionRatingWithoutUpdate: Bewertung gefunden, es ist hier aber keine Bewertung der Abgabe möglich. SubmissionSinkExceptionForeignRating smid@CryptoFileNameSubmission: Fremde Bewertung für Abgabe #{toPathPiece smid} enthalten. Bewertungen müssen sich immer auf die gleiche Abgabe beziehen! -SubmissionSinkExceptionInvalidFileTitleExtension file@FilePath: Dateiname #{show file} hat keine der für dieses Übungsblatt zulässigen Dateiendungen. +SubmissionSinkExceptionInvalidFileTitleExtension file@FilePath: Dateiname „#{show file}“ hat keine der für dieses Übungsblatt zulässigen Dateiendungen. -MultiSinkException name@Text error@Text: In Abgabe #{name} ist ein Fehler aufgetreten: #{error} +MultiSinkException name@Text error@Text: In Abgabe „#{name}“ ist ein Fehler aufgetreten: #{error} NoTableContent: Kein Tabelleninhalt NoUpcomingSheetDeadlines: Keine anstehenden Übungsblätter @@ -633,7 +633,7 @@ AdminHeading: Administration AdminUserHeading: Benutzeradministration AdminUserRightsHeading: Benutzerrechte AdminUserAuthHeading: Benutzer-Authentifizierung -AdminUserHeadingFor: Benuterprofil für +AdminUserHeadingFor: Benutzerprofil für AdminFor: Administrator LecturerFor: Dozent LecturersFor: Dozenten @@ -641,7 +641,6 @@ AssistantFor: Assistent AssistantsFor: Assistenten TutorsFor n@Int: #{pluralDE n "Tutor" "Tutoren"} CorrectorsFor n@Int: #{pluralDE n "Korrektor" "Korrektoren"} -ForSchools n@Int: für #{pluralDE n "Institut" "Institute"} UserListTitle: Komprehensive Benutzerliste AccessRightsSaved: Berechtigungen erfolgreich verändert AccessRightsNotChanged: Berechtigungen wurden nicht verändert @@ -653,7 +652,7 @@ DateTimeFormat: Datums- und Uhrzeitformat DateFormat: Datumsformat TimeFormat: Uhrzeitformat DownloadFiles: Dateien automatisch herunterladen -DownloadFilesTip: Wenn gesetzt werden Dateien von Abgaben und Übungsblättern automatisch als Download behandelt, ansonsten ist das Verhalten browserabhängig (es können z.B. PDFs im Browser geöffnet werden). +DownloadFilesTip: Wenn gesetzt werden Dateien automatisch als Download behandelt, ansonsten ist das Verhalten browserabhängig (es können z.B. PDFs im Browser geöffnet werden). WarningDays: Fristen-Vorschau WarningDaysTip: Wie viele Tage im Voraus sollen Fristen von Klausuren etc. auf Ihrer Startseite angezeigt werden? NotificationSettings: Erwünschte Benachrichtigungen @@ -731,8 +730,8 @@ UploadSpecificFileRequired: Zur Abgabe erforderlich NoSubmissions: Keine Abgabe CorrectorSubmissions: Abgabe extern mit Pseudonym -UserSubmissions: Direkte Abgabe -BothSubmissions: Abgabe direkt & extern mit Pseudonym +UserSubmissions: Direkte Abgabe in Uni2work +BothSubmissions: Abgabe direkt in Uni2work & extern mit Pseudonym SheetCorrectorSubmissionsTip: Abgabe erfolgt über ein Uni2work-externes Verfahren (zumeist in Papierform durch Einwurf) unter Angabe eines persönlichen Pseudonyms. Korrektoren können mithilfe des Pseudonyms später Korrekturergebnisse in Uni2work eintragen, damit Sie sie einsehen können. @@ -744,7 +743,7 @@ SubmissionUpdated: Abgabe erfolgreich ersetzt AdminFeaturesHeading: Studiengänge StudyTerms: Studiengänge StudyTerm: Studiengang -NoStudyTermsKnown: Nicht eingeschrieben +NoStudyTermsKnown: Keine Studiengänge bekannt StudyFeatureInference: Studiengangschlüssel-Inferenz StudyFeatureInferenceNoConflicts: Keine Konflikte beobachtet StudyFeatureInferenceConflictsHeading: Studiengangseinträge mit beobachteten Konflikten @@ -765,9 +764,9 @@ DegreeShort: Abschlusskürzel StudyTermsKey: Studiengangschlüssel StudyTermsName: Studiengang StudyTermsShort: Studiengangkürzel -StudyTermsChangeSuccess: Zuordnung Abschlüsse aktualisiert -StudyDegreeChangeSuccess: Zuordnung Studiengänge aktualisiert -StudyCandidateIncidence: Anmeldevorgang +StudyTermsChangeSuccess: Zuordnung Studiengänge aktualisiert +StudyDegreeChangeSuccess: Zuordnung Abschlüsse aktualisiert +StudyCandidateIncidence: Synchronisation AmbiguousCandidatesRemoved n@Int: #{show n} #{pluralDE n "uneindeutiger Kandidat" "uneindeutige Kandiaten"} entfernt RedundantCandidatesRemoved n@Int: #{show n} bereits #{pluralDE n "bekannter Kandidat" "bekannte Kandiaten"} entfernt CandidatesInferred n@Int: #{show n} neue #{pluralDE n "Studiengangszuordnung" "Studiengangszuordnungen"} inferiert @@ -786,8 +785,8 @@ MailTestDateTime: Test der Datumsformattierung: German: Deutsch GermanGermany: Deutsch (Deutschland) -English: English -EnglishEurope: English (Europe) +English: Englisch +EnglishEurope: Englisch (Europa) MailSubjectSubmissionRated csh@CourseShorthand: Ihre #{csh}-Abgabe wurde korrigiert MailSubmissionRatedIntro courseName@Text termDesc@Text: Ihre Abgabe im Kurs #{courseName} (#{termDesc}) wurde korrigiert. diff --git a/messages/uniworx/en-eu.msg b/messages/uniworx/en-eu.msg index 31d865d0f..84f27f32a 100644 --- a/messages/uniworx/en-eu.msg +++ b/messages/uniworx/en-eu.msg @@ -30,17 +30,17 @@ BtnSubmissionsAssign: Assign submissions automatically Aborted: Aborted Remarks: Remarks -Registered: Registered -RegisteredSince: Registered since +Registered: Enrolled +RegisteredSince: Enrolled since NotRegistered: Note enrolled for this course -Registration: Registration -RegisterFrom: Registration starts -RegisterTo: Registration ends +Registration: Enrolment +RegisterFrom: Enrolment starts +RegisterTo: Enrolment ends DeRegUntil: Deregistration until RegisterRetry: You haven't been enrolled. Press "Enrol for course" to enrol -CourseRegistrationInterval: Registration -CourseDirectRegistrationInterval: Direct registration +CourseRegistrationInterval: Enrolment +CourseDirectRegistrationInterval: Direct enrolment CourseDeregisterUntil time: Deregistration only until #{time} GenericKey: Key @@ -84,7 +84,7 @@ TermLectureEndTooltip: Summer semesters are usually 14 weeks; winter semesters 1 TermActive: Active -SchoolListHeading: Schools +SchoolListHeading: Department SchoolHeading school: #{school} LectureStart: Lectures start @@ -96,8 +96,8 @@ CourseCapacityTip: Maximum permissable number of enrolments for this course; lea CourseNoCapacity: Course has reached maximum capacity TutorialNoCapacity: Tutorial has reached maximum capacity CourseNotEmpty: There are currently no participants enrolled for this course. -CourseRegistration: Registration -CourseRegisterOpen: Registration is open +CourseRegistration: Enrolment +CourseRegisterOpen: Enrolment is allowed CourseRegisterOk: Successfully enrolled for course CourseDeregisterOk: Successfully left course CourseApplyOk: Successfully applied for course @@ -144,29 +144,29 @@ CourseRegisterToTip: May be left empty to allow enrolment indefinitely CourseDeregisterUntilTip: Participants may deregister from immediately after registration starts up to this time. May be left empty to allow deregistration indefinitely. CourseFilterSearch: Text search CourseFilterRegistered: Registered -CourseFilterNone: Irrelevant -BoolIrrelevant: Irrelevant +CourseFilterNone: — +BoolIrrelevant: — CourseDeleteQuestion: Are you sure you want to delete the below-mentioned course? CourseDeleted: Course deleted CourseUserTutorials: Registered tutorials CourseUserNote: Note CourseUserNoteTooltip: Only visible to administrators of this course -CourseUserNoteSaved: Note changes saved -CourseUserNoteDeleted: User note deleted +CourseUserNoteSaved: Successfully saved note changes +CourseUserNoteDeleted: Successfully deleted user note deleted CourseUserDeregister: Deregister from course -CourseUsersDeregistered count@Int64: #{show count} users deregistered from course +CourseUsersDeregistered count@Int64: Successfully deregistered #{show count} users from course CourseUserRegisterTutorial: Register for a tutorial -CourseUsersTutorialRegistered count@Int64: #{show count} users registered for tutorial +CourseUsersTutorialRegistered count@Int64: Successfully registered #{show count} users for tutorial CourseUserSendMail: Send mail TutorialUserDeregister: Deregister from tutorial TutorialUserSendMail: Send mail -TutorialUsersDeregistered count@Int64: #{show count} participants deregistered from tutorial +TutorialUsersDeregistered count@Int64: Successfully deregistered #{show count} participants from tutorial CourseAllocationParticipate: Participate in central allocation CourseAllocationParticipateTip: If a course participates in a central allocation, you might lose some permissions that you would normally have (e.g. registering students for the course directly, deregistering students, ...) CourseAllocation: Central allocation CourseAllocationOption term@Text name@Text: #{name} (#{term}) CourseAllocationMinCapacity: Minimum number of participants -CourseAllocationMinCapacityTip: If there were fewer students being assigned to this course than this number, then these students would instead be assigned to other courses +CourseAllocationMinCapacityTip: If fewer students than this number were to be assigned to this course, then these students would instead be assigned to other courses CourseAllocationMinCapacityMustBeNonNegative: Minimum number of participants must not be negative CourseApplicationInstructions: Instructions for application CourseApplicationInstructionsTip: Will be shown to students if they decide to apply for this course @@ -176,7 +176,7 @@ CourseApplicationsText: Text application CourseApplicationsTextTip: Should students submit a plaintext application (in addition to submitted files if applicable)? CourseApplicationRatingsVisible: Feedback to applications CourseApplicationRatingsVisibleTip: Should students be allowed to view rating and commentaries on their application after the rating period? -CourseApplicationRequired: Application procedure +CourseApplicationRequired: Applications required CourseApplicationRequiredTip: Should registrations for this course be provisional at first (without capacity constraint), until they are approved by a course administrator? CourseApplicationInstructionsApplication: Instructions for application CourseApplicationInstructionsRegistration: Instructions for registration @@ -204,10 +204,10 @@ CourseRegistrationFollowInstructions: Please follow the instructions for registr CourseApplicationFile: Application CourseApplicationFiles: Application file(s) -CourseApplicationArchive: Zip archive for application files +CourseApplicationArchive: Zip archive of application files CourseRegistrationFile: Registration file CourseRegistrationFiles: Registration file(s) -CourseRegistrationArchive: Zip archive for registration files +CourseRegistrationArchive: Zip archive of registration files CourseApplicationNoFiles: No file(s) CourseApplicationFilesNeedReupload: Application files need to be reuploaded every time the application is changed CourseRegistrationFilesNeedReupload: Registration files need to be reuploaded every time the registration is changed @@ -224,7 +224,7 @@ CourseApplicationsAllocatedDirectory: central CourseApplicationsNotAllocatedDirectory: direct CourseNoAllocationsAvailable: There are no ongoing central allocations -AllocationStaffRegisterToExpired: You cannot change properties concerning the central allocation after the course registration period. Your changes have been discarded. +AllocationStaffRegisterToExpired: You cannot change course properties concerning the central allocation after the course registration period. Your changes may have been discarded. CourseFormSectionRegistration: Registration CourseFormSectionAdministration: Administration @@ -266,7 +266,7 @@ SheetDelOk tid ssh csh sheetName: #{tid}-#{ssh}-#{csh}: #{sheetName} has be SheetDelHasSubmissions objs: Incl. #{objs} #{pluralEN objs "submission" "submissions"} SheetDeleteQuestion: Do you really want to delete the below-mentioned exercise sheet and all associated submissions? -SheetDeleted: Deleted exercise sheet +SheetDeleted: Successfully deleted exercise sheet SheetUploadMode: Submission of files SheetSubmissionMode: Submission mode @@ -290,7 +290,520 @@ SheetActiveFrom: Submission period start SheetActiveTo: Submission period end SheetHintFromTip: Always invisible for participants if left empty; correctors can always download hints SheetSolutionFromTip: Always invisible for participants if left empty; correctors can always download solutions -SheetMarkingTip: +SheetMarkingTip: Instructions for correction, visible only to correctors +SheetPseudonym: Personal pseudonym +SheetGeneratePseudonym: Generate + +SheetFormType: Valuation & submission +SheetFormTimes: Times +SheetFormFiles: Files + +SheetErrVisibility: "Submission period start" must be after "Visible from" +SheetErrDeadlineEarly: "Submission period end" must be after "Submission period start" +SheetErrHintEarly: "Hint from" must be after "Submission period start" +SheetErrSolutionEarly: "Solution from" must be after "Submission period end" +SheetNoCurrent: There is no currently active exercise sheet +SheetNoOldUnassigned: All submissions for inactive sheets are already assigned to correctors. +SheetsUnassignable name: Submission for #{name} may not currently be assigned to correctors. + +Deadline: Deadline +Done: Submitted + +Submission: Submission-number +SubmissionsCourse tid ssh csh: All submissions for Course #{tid}-#{ssh}-#{csh} +SubmissionsSheet sheetName: Submissions for #{sheetName} +SubmissionWrongSheet: Submission does not belong to the given sheet. +SubmissionAlreadyExists: You already have a submission for this sheet. +SubmissionEditHead tid ssh csh sheetName: #{tid}-#{ssh}-#{csh} #{sheetName}: Edit/Create submission +CorrectionHead tid ssh csh sheetName cid: #{tid}-#{ssh}-#{csh} #{sheetName}: Marking +SubmissionMembers: Submittors +SubmissionMember: Submittor +SubmissionArchive: Zip-archive of submission files +SubmissionFile: Submission file +SubmissionFiles: Submitted files +SubmissionAlreadyExistsFor email: #{email} already has a submission for this sheet. +SubmissionUsersEmpty: Submissions may not be created without submittors. +SubmissionUserAlreadyAdded: This user is already configured as a submittor +NoOpenSubmissions: No open submissions exist + +SubmissionsDeleteQuestion n: Do you really want to delete the #{pluralEN n "submission" "submissions"} mentioned below? +SubmissionsDeleted n: #{pluralEN n "Submission" "Submissions"} deleted + +SubmissionGroupName: Group name + +CorrectionsTitle: Assigned corrections +CourseCorrectionsTitle: Corrections for this course +CorrectorsHead sheetName: Correctors for #{sheetName} +CorrectorAssignTitle: Assign corrector + +MaterialName: Name +MaterialType: Type +MaterialTypePlaceholder: Slides, Code, Example, ... +MaterialTypeSlides: Slides +MaterialTypeCode: Code +MaterialTypeExample: Example +MaterialDescription: Description +MaterialVisibleFrom: Visible to participants from +MaterialVisibleFromTip: Never visible to participants if left empty; leaving the date empty is only sensible for unfinished course material or when course material should be provided only to sheet correctors +MaterialVisibleFromEditWarning: This course material has already been published and should not be edited. Doing so might confuse the participants. +MaterialInvisible: This course material is currently invisible to participants! +MaterialFiles: Files +MaterialHeading materialName: Course material “#{materialName}” +MaterialListHeading: Course materials +MaterialNewHeading: Publish new course material +MaterialNewTitle: New course material +MaterialEditHeading materialName: Edit course material “#{materialName}” +MaterialEditTitle materialName: Edit course material “#{materialName}” +MaterialSaveOk tid ssh csh materialName: Successfully saved “#{materialName}” for course #{tid}-#{ssh}-#{csh} +MaterialNameDup tid ssh csh materialName: Course material with the name “#{materialName}” already exists for course #{tid}-#{ssh}-#{csh} +MaterialDeleteCaption: Do you really want to delete the course material mentioned below? +MaterialDelHasFiles count: including #{count} #{pluralEN count "file" "files"} +MaterialIsVisible: Caution, this course material has already been published. +MaterialDeleted materialName: Successfully deleted course material “#{materialName}” +MaterialArchiveName tid ssh csh materialName: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldedCase materialName} + +Unauthorized: You do not have explicit authorisation. +UnauthorizedAnd l r: (#{l} AND #{r}) +UnauthorizedOr l r: (#{l} OR #{r}) +UnauthorizedNot r: (NOT #{r}) +UnauthorizedNoToken: No authorisation-token was provided with your request. +UnauthorizedTokenExpired: Your authorisation-token is expired. +UnauthorizedTokenNotStarted: Your authorisation-token is not yet valid. +UnauthorizedTokenInvalid: Your authorisation-taken could not be processed. +UnauthorizedTokenInvalidAuthority: Your authorisation-token is based in an user's rights who does not exist anymore. +UnauthorizedToken404: Authorisation-tokens cannot be processed on error pages. +UnauthorizedSiteAdmin: You are no system-wide administrator. +UnauthorizedSchoolAdmin: You are no administrator for this department. +UnauthorizedAdminEscalation: You aren't an administrator for all departments for which this user is an administrator. +UnauthorizedExamOffice: You are not part of an exam office. +UnauthorizedExamExamOffice: You are not part of the appropriate exam office for any of the participants of this exam. +UnauthorizedSchoolLecturer: You are no lecturer for this department. +UnauthorizedLecturer: You are no administrator for this course. +UnauthorizedAllocationLecturer: You are no administrator for any of the courses of this central allocation. +UnauthorizedCorrector: You are no sheet corrector for this course. +UnauthorizedSheetCorrector: You are no corrector for this sheet. +UnauthorizedCorrectorAny: You are no corrector for any course. +UnauthorizedRegistered: You are no participant in this course. +UnauthorizedAllocationRegistered: You are no participant in this central allocation. +UnauthorizedExamResult: You have no results in this exam. +UnauthorizedParticipant: The specified user is no participant of this course. +UnauthorizedParticipantSelf: You are no participant of this course. +UnauthorizedApplicant: The specified user is no applicant for this course. +UnauthorizedApplicantSelf: You are no applicant for this course. +UnauthorizedCourseTime: This course does not currently allow enrollment. +UnauthorizedAllocationRegisterTime: This central allocation does not currently allow applications. +UnauthorizedSheetTime: This sheet is not currently available. +UnauthorizedApplicationTime: This allocation is not currently available. +UnauthorizedMaterialTime: This course material is not currently available. +UnauthorizedTutorialTime: This tutorial does not currently allow registration. +UnauthorizedCourseNewsTime: This news item is not currently available. +UnauthorizedExamTime: This exam is not currently available. +UnauthorizedSubmissionOwner: You are no submittor for this submission. +UnauthorizedSubmissionRated: This submission is not yet marked. +UnauthorizedSubmissionCorrector: You are no corrector for this submission. +OnlyUploadOneFile: Please only upload one file +DeprecatedRoute: This view is deprecated and will be removed. +UnfreeMaterials: Course material are not publicly accessable. +MaterialFree: Course material is publicly available. +UnauthorizedWrite: You do not have the write permission necessary to perform this action +UnauthorizedSystemMessageTime: This system-message is not currently available. +UnauthorizedSystemMessageAuth: This system-message is only available to logged in users. +UnsupportedAuthPredicate authTagT shownRoute: “#{authTagT}” was applied to a route which does not support it: “#{shownRoute}” +UnauthorizedDisabledTag authTag: Auth predicate “#{toPathPiece authTag}” is disabled for your session +UnknownAuthPredicate tag: Auth predicate “#{tag}” is unknown +UnauthorizedRedirect: The requested view does not exist or you haven't the required permissions to access it. +UnauthorizedSelf: You are not the specified user. +UnauthorizedTutorialTutor: You are no tutor for this tutorial. +UnauthorizedTutorialTutorControl: Tutors may not edit this tutorial. +UnauthorizedCourseTutor: You are no tutor for this course. +UnauthorizedTutor: You are no tutor. +UnauthorizedTutorialRegisterGroup: You are already registered for a tutorial with the same registration group. +UnauthorizedLDAP: Specified user does not log in with their campus account. +UnauthorizedPWHash: Specified user does not log in with an Uni2work-account. + +UnauthorizedPasswordResetToken: This authorisation-token may no longer be used to change passwords + +UnauthorizedAllocatedCourseRegister: Direct enrollment to this course is currently not allowed due to participation in a central allocation +UnauthorizedAllocatedCourseDeregister: Deregistration from this course is currently not allowed due to participation in a central allocation +UnauthorizedAllocatedCourseDelete: Courses that participate in a central allocation may not be deleted + +EMail: Email +EMailUnknown email: Email #{email} does not belong to any known user. +NotAParticipant email tid csh: #{email} is not a participant of #{tid}-#{csh}. +TooManyParticipants: You have specified more than the allowed number of submittors. + +AddCorrector: Additional corrector +CorrectorExists: User already is a corrector +SheetCorrectorsTitle tid ssh csh sheetName: Correctors for #{tid}-#{ssh}-#{csh} #{sheetName} +CountTutProp: Tutorials count against proportion +CountTutPropTip: If submissions are assigned by tutorial, do those assignments count with regard to the set proportion? +AutoAssignCorrs: Automatically assign corrections after expiration of the submission period +Corrector: Corrector +Correctors: Correctors +CorState: State +CorByTut: Assign by tutorial +CorProportion: Proportion +CorDeficitProportion: Deficit (proportion) +CorByProportionOnly proportion: #{rationalToFixed3 proportion} parts +CorByProportionIncludingTutorial proportion: #{rationalToFixed3 proportion} parts - tutorials +CorByProportionExcludingTutorial proportion: #{rationalToFixed3 proportion} parts + tutorials + +RowCount count: #{count} matching #{pluralEN count "entry" "entries"} +DeleteRow: Delete +ProportionNegative: Proportions may not be negative +CorrectorUpdated: Successfully updated corrector +CorrectorsUpdated: Successfully updated correctors +CorrectorsPlaceholder: Correctors... +CorrectorsDefaulted: List of correctors was automatically generated based on those of preceding sheets for this course. No data has been saved, yet. + +Users: Users +HomeHeading: Current events +LoginHeading: Authentication +LoginTitle: Authentication +ProfileHeading: Settings +ProfileFor: Settings for +ProfileDataHeading: Personal information +InfoHeading: Information +VersionHeading: Version history +ImpressumHeading: Imprint +DataProtHeading: Data protection +SystemMessageHeading: Uni2work system message +SystemMessageListHeading: Uni2work system message +NotificationSettingsHeading displayName: Notification settings for #{displayName} +TokensLastReset: Tokens last reset +TokensResetSuccess: Successfully invalidated all authorisation tokens + +HomeOpenAllocations: Active central allocations +HomeUpcomingSheets: Upcoming exercise sheets +HomeUpcomingExams: Upcoming exams + +NumCourses num: #{num} #{pluralEN num "course" "courses"} +CloseAlert: Close + +Name: Name +MatrikelNr: Matriculation +LdapSynced: LDAP-synchronised +LdapSyncedBefore: Last LDAP-synchronisation before +NoMatrikelKnown: No matriculation +Theme: Theme +Favourites: Number of saved favourites +FavouritesTip: Only relevant for automatically generated favourites (“visited recently”) +FavouriteSemesters: Maximum number of semesters in favourites bar +Plugin: Plugin +Ident: Identification +LastLogin: Last login +Settings: Settings +SettingsUpdate: Successfully updated settings +NotificationSettingsUpdate: Successfully updated notification settings +Never: Never + +PreviouslyUploadedInfo: Files already uploaded: +PreviouslyUploadedDeletionInfo: (Files not checked will be deleted) +MultiFileUploadInfo: (Choose multiple files using Shift or Ctrl) +AddMoreFiles: Additional files: + +NrColumn: # +SelectColumn: Selection +DBTablePagesize: Entries per page +DBTablePagesizeAll: All + +CorrDownload: Download +CorrUploadField: Corrections +CorrUpload: Upload corrections +CorrSetCorrector: Assign corrector +CorrSetCorrectorTooltip: Submissions already assigned to a corrector must first be assigned to “” before they can be assigned again. +CorrAutoSetCorrector: Distribute corrections +CorrDelete: Delete submissions +NatField name: #{name} must be a natural number! +JSONFieldDecodeFailure aesonFailure: Could not parse JSON: #{aesonFailure} +SecretJSONFieldDecryptFailure: Could not decrypt hidden data + +SubmissionsAlreadyAssigned num: #{num} #{pluralEN num "correction" "corrections"} were already assigned to a corrector and were left unchanged: +SubmissionsAssignUnauthorized num: #{num} #{pluralEN num "correction" "corrections"} cannot currently be assigned to correctors (e.g. because changes to submissions are still allowed) +UpdatedAssignedCorrectorSingle num: Successfully assigned #{num} #{pluralEN num "correction" "corrections"} to the corrector. +NoCorrector: No corrector +RemovedCorrections num: Successfully deleted #{num} #{pluralEN num "correction" "corrections"} +UpdatedAssignedCorrectorsAuto num: Successfully distributed #{num} #{pluralEN num "correction" "corrections"} among correctors. +UpdatedSheetCorrectorsAutoAssigned n: Successfully distributed #{n} #{pluralEN n "correction" "corrections"} among correctors. +UpdatedSheetCorrectorsAutoFailed n: #{n} #{pluralEN n "correction" "corrections"} could not be distributed. +CouldNotAssignCorrectorsAuto num: #{num} #{pluralEN num "correction" "corrections"} could not be distributed: +SelfCorrectors num: #{num} #{pluralEN num "correction was" "corrections were"} assigned to correctors that are also submittors for their correction! + +SubmissionOriginal: Original +SubmissionCorrected: Marked +SubmissionArchiveName: submissions +SubmissionTypeArchiveName tid ssh csh shn subId renderedSfType: #{foldCase (termToText (unTermKey tid))}-#{foldedCase (unSchoolKey ssh)}-#{foldedCase csh}-#{foldedCase shn}-#{foldCase (toPathPiece subId)}-#{foldCase renderedSfType} + +CorrectionSheets: Corrections by sheet +CorrectionCorrectors: Corrections by corrector +AssignSubmissionExceptionNoCorrectors: No correctors configured +AssignSubmissionExceptionNoCorrectorsByProportion: No correctors have any non-zero proportion +AssignSubmissionExceptionSubmissionsNotFound n: #{n} #{pluralEN n "submission" "submissions"} could not be identified +NrSubmittorsTotal: Submittors +NrSubmissionsTotal: Submissions +NrSubmissionsTotalShort: Subm +NrSubmissionsUnassigned: No corrector +NoCorrectorAssigned: No corrector +NrCorrectors: Correctors +NrSubmissionsNewlyAssigned: Newly assigned +NrSubmissionsNotAssigned: Not assigned +NrSubmissionsNotCorrected: Not corrected +NrSubmissionsNotCorrectedShort: N.corr. +CorrectionTime: Correction time +AssignSubmissionsRandomWarning: The assignment preview might be different from the actual assignment if multiple sheets are being distributed. This is due to the fact that only assigned submissions are considered when handling corrector-deficits. Due to this being a randomised process small differences are also possible for a single sheet. + +CorrectionsUploaded num: Successfully saved #{num} #{pluralEN num "correction" "corrections"}: +NoCorrectionsUploaded: No corrections could be found within the uploaded file. + +RatingBy: Marked by +HasCorrector: Corrector assigned +AssignedTime: Assigned +AchievedBonusPoints: Bonus points achieved +AchievedNormalPoints: Points achieved +AchievedPoints: Points achieved +AchievedPassPoints: Points achieved to pass +AchievedPasses: Passed sheets +AchievedOf achieved possible: #{achieved} of #{possible} +PassAchievedOf points passingPoints maxPoints: #{points} of #{maxPoints} (pass at #{passingPoints}) +PassedResult: Result +Passed: Passed +NotPassed: Failed +RatingTime: Marked +RatingComment: Comment +SubmissionUsers: Submittors +Rating: Marking +RatingPoints: Points +RatingDone: Rating visible +RatingPercent: Achieved +RatingFiles: Marked files +PointsNotPositive: Points may not be negative +PointsTooHigh maxPoints: Points may not be more than #{maxPoints} +PointsTooLow minPoints: Points may not be less than #{minPoints} +RatingPointsDone: Correction counts as marked iff “Points” is set +ColumnRatingPoints: Points +Pseudonyms: Pseudonyms + +Files: Files +FileTitle: Filename +FileModified: Last changed +VisibleFrom: Published +AccessibleSince: Accessible since + +Corrected: Marked +CorrectionAchievedPoints: Achieved points +CorrectionAchievedPass: Passed +FileCorrected: Marked (files) +FileCorrectedDeleted: Marked (deleted) +RatingUpdated: Successfully updated correction +RatingDeleted: Successfully reset correction +RatingFilesUpdated: Corrected files successfully overwritten + +RatingNotUnicode uexc: Marking file is not UTF-8 encoded: #{tshow uexc} +RatingMissingSeparator: Preamble of the marking file could not be identified +RatingMultiple: Correction contains multiple markings +RatingInvalid parseErr: Marking points could not be parsed as a number: #{parseErr} +RatingFileIsDirectory: Marking file must not be a directory +RatingNegative: Marking points may not be negative +RatingExceedsMax: Marking points exceed maximum +RatingNotExpected: No marking points expected for this sheet +RatingBinaryExpected: Marking must be 0 (=failed) or 1(=passed) +RatingPointsRequired: Marking points required for this sheet +RatingFile: Marking file + +SubmissionSinkExceptionDuplicateFileTitle file: File #{show file} occurs multiple files within zip-archive. +SubmissionSinkExceptionDuplicateRating: Found more than one marking file +SubmissionSinkExceptionRatingWithoutUpdate: Marking file found without permission +SubmissionSinkExceptionForeignRating smid: Foreign marking file for submission #{toPathPiece smid} found. +SubmissionSinkExceptionInvalidFileTitleExtension file: Filename “#{show file}” does not have any of the file extensions allowed for this sheet. + +MultiSinkException name error: An error occurred in submission “#{name}”: #{error} + +NoTableContent: No entries +NoUpcomingSheetDeadlines: No upcoming sheets +NoUpcomingExams difftime: No exams for your courses occurr or allow registration in the next #{difftime} + +AdminHeading: Administration +AdminUserHeading: User administration +AdminUserRightsHeading: User permissions +AdminUserAuthHeading: User authentication +AdminUserHeadingFor: Profile of +AdminFor: Administrator +LecturerFor: Lecturer +LecturersFor: Lecturers +AssistantFor: Assistant +AssistantsFor: Assistants +TutorsFor n: #{pluralEN n "Tutor" "Tutors"} +CorrectorsFor n: #{pluralEN n "Corrector" "Correctors"} +UserListTitle: Comprehensive list of users +AccessRightsSaved: Successfully updated permissions +AccessRightsNotChanged: Permissions left unchanged + +LecturersForN n: #{pluralEN n "Lecturer" "Lecturers"} + +Date: Date +DateTimeFormat: Date and time format +DateFormat: Date format +TimeFormat: Time format +DownloadFiles: Automatically download files +DownloadFilesTip: When set, files are automatically treated as downloads. Otherwise behaviour is browser dependent (PDFs might, for example, be opened within the browser) +WarningDays: Deadline-preview +WarningDaysTip: How many days ahead should deadlines regarding exams etc. be displayed on the homepage? +NotificationSettings: Desired notifications +UserSchools: Relevant departments +UserSchoolsTip: You will only receive department-wide notifications for the selected departments. +FormNotifications: Notifications +FormBehaviour: Behaviour +FormCosmetics: Interface +FormPersonalAppearance: Public data +FormFieldRequiredTip: Marked fields need to be filled + +ActiveAuthTags: Active authorisation predicates + +InvalidDateTimeFormat: Invalid date and time format. YYYY-MM-DDTHH:MM[:SS] expected +AmbiguousUTCTime: The given timestamp cannot be converted to UTC unambiguously +IllDefinedUTCTime: The given timestamp cannot be converted to UTC + +LastEdits: Latest edits +EditedBy name time: #{time} by #{name} +LastEdit: Latest edit +LastEditByUser: Your last edit +NoEditByUser: Not edited by you + +SubmissionFilesIgnored n: Ignored #{n} #{pluralEN n "file" "files"} +SubmissionDoesNotExist smid: There is no submission “#{toPathPiece smid}”. + +LDAPLoginTitle: Campus login +PWHashLoginTitle: Uni2work login +PWHashLoginNote: Use this form if you have received special credentials from the Uni2work-team. Most users need to use campus login! +DummyLoginTitle: Development login +LoginNecessary: Please log in first! + +InternalLdapError: Internal error during campus login + +CampusUserInvalidEmail: Could not determine email address during campus login +CampusUserInvalidDisplayName: Could not determine display name during campus login +CampusUserInvalidGivenName: Could not determine given name during campus login +CampusUserInvalidSurname: Could not determine surname during campus login +CampusUserInvalidTitle: Could not determine title during campus login +CampusUserInvalidMatriculation: Could not determine matriculation during campus login +CampusUserInvalidFeaturesOfStudy parseErr: Could not determine features of study during campus login +CampusUserInvalidAssociatedSchools parseErr: Could not determine associated departments during campus login +CampusUserInvalidSex: Could not determine gender during campus login + +CorrectorNormal: Normal +CorrectorMissing: Missing +CorrectorExcused: Excused +CorrectorStateTip: Missing correctors are assigned additional corrections during later sheets. Excused correctors are not assigned any additional deficit. + +DayIsAHoliday tid name date: “#{name}” (#{date}) is a legal holiday +DayIsOutOfLecture tid name date: “#{name}” (#{date}) is not within lecture period of #{tid} +DayIsOutOfTerm tid name date: “#{name}” (#{date}) is not within #{tid} + +UploadModeNone: No Upload +UploadModeAny: Upload arbitrary files +UploadModeSpecific: Upload pre-defined files + +UploadModeUnpackZips: Upload multiple files +UploadModeUnpackZipsTip: If upload of multiple files is permitted, supported archive formats are also accepted. Archives are automatically unpacked during upload. + +AutoUnzip: Automatically unpack ZIPs +AutoUnzipInfo: Automatically unpacks ZIP-files (*.zip) and adds their content to the root directory. + +UploadModeExtensionRestriction: Allowed file extensions +UploadModeExtensionRestrictionTip: Comma-separated. If no file extensions are specified, uploads are not restricted. +UploadModeExtensionRestrictionEmpty: List of permitted file extensions may not be emptyy + +UploadSpecificFiles: Pre-defined files +NoUploadSpecificFilesConfigured: If pre-defined files are selected, at least one file needs to be configured. +UploadSpecificFilesDuplicateNames: Names of pre-defined files must be unique +UploadSpecificFilesDuplicateLabels: Labels of pre-defined files must be unique +UploadSpecificFileLabel: Label +UploadSpecificFileName: Filename +UploadSpecificFileRequired: Required for submission + +NoSubmissions: No submission +CorrectorSubmissions: External submission via pseudonym +UserSubmissions: Direct submission in Uni2work +BothSubmissions: Submission either directly in Uni2work or externally via pseudonym + +SheetCorrectorSubmissionsTip: Submissions are expected to be handed in through some Uni2work-external procedure (usually on paper) marked with your personal pseudonym. Correctors can, using the pseudonym, register the marking in Uni2work for you to review. + +SubmissionNoUploadExpected: No upload of files expected. +SubmissionReplace: Replace submission +SubmissionCreated: Successfully created submission +SubmissionUpdated: Successfully replaced submission + +AdminFeaturesHeading: Features of study +StudyTerms: Fields of study +StudyTerm: Field of study +NoStudyTermsKnown: No known features of study +StudyFeatureInference: Infer field of study mapping +StudyFeatureInferenceNoConflicts: No observed conflicts +StudyFeatureInferenceConflictsHeading: Fields of study with observed conflicts +StudyFeatureAge: Semester +StudyFeatureDegree: Degree +FieldPrimary: Major +FieldSecondary: Minor +ShortFieldPrimary: Mj +ShortFieldSecondary: Mn +NoStudyField: No field of study +StudyFeatureType: +StudyFeatureValid: Valid +StudyFeatureUpdate: Updated + +DegreeKey: Degree key +DegreeName: Degree +DegreeShort: Degree shorthand +StudyTermsKey: Field key +StudyTermsName: Field of study +StudyTermsShort: Field shorthand +StudyTermsChangeSuccess: Successfully updated fields of study +StudyDegreeChangeSuccess: Successfully updated degrees +StudyCandidateIncidence: Synchronisation +AmbiguousCandidatesRemoved n: Successfully removed #{n} ambiguous #{pluralEN n "candidate" "candidates"} +RedundantCandidatesRemoved n: Successfully removed #{n} rendundant #{pluralEN n "candidate" "candidates"} +CandidatesInferred n: Successfully inferred #{n} field #{pluralEN n "mapping" "mappings"} +NoCandidatesInferred: No new mappings inferred +AllIncidencesDeleted: Successfully deleted all observations +StudyTermIsNew: New +StudyFeatureConflict: Observed conflicts in field mapping + +MailTestFormEmail: Email address +MailTestFormLanguages: Language settings + +MailTestSubject: Uni2work test email +MailTestContent: This is a test email sent by Uni2work. No action on your part is required. +MailTestDateTime: Test of datetime formatting: + +German: German +GermanGermany: German (Germany) +English: English +EnglishEurope: English (Europe) + +MailSubjectSubmissionRated csh: Your #{csh}-submission was marked +MailSubmissionRatedIntro courseName termDesc: Your submission for #{courseName} (#{termDesc}) was marked. + +MailSubjectSheetActive csh sheetName: #{sheetName} in #{csh} was released +MailSheetActiveIntro courseName termDesc sheetName: You may now download #{sheetName} for #{courseName} (#{termDesc}). + +MailSubjectCourseRegistered csh: You were enrolled for #{csh} +MailSubjectCourseRegisteredOther displayName csh: #{displayName} was enrolled for #{csh} +MailSubjectCourseRegisteredIntro courseName termDesc: You were enrolled for the course “#{courseName}” (#{termDesc}) +MailSubjectCourseRegisteredIntroOther displayName courseName termDesc: #{displayName} was enrolled for the course “#{courseName}” (#{termDesc}). + +MailSubjectExamResult csh examn: Results for #{examn} in #{csh} are now available +MailExamResultIntro courseName termDesc examn: You may now view your result for #{examn} of the course #{courseName} (#{termDesc}). + +MailSubjectExamOfficeExamResults csh examn: Results for #{examn} of #{courseName} are now available +MailExamOfficeExamResultsIntro courseName termDesc examn: A course administrator has made the results for #{examn} of the course #{courseName} (#{termDesc}) available. + +MailSubjectExamOfficeExamResultsChanged csh examn: Results for #{examn} of #{csh} were changed +MailExamOfficeExamResultsChangedIntro courseName termDesc examn: A course administrator has changed exam results for #{examn} of the course #{courseName} (#{termDesc}). + +MailSubjectExamRegistrationActive csh examn: Registration is now allowed for #{examn} of #{csh} +MailExamRegistrationActiveIntro courseName termDesc examn: You may now register for #{examn} of the course #{courseName} (#{termDesc}). + +MailSubjectExamRegistrationSoonInactive csh examn: Registration for #{examn} of #{csh} ends shortly MenuLanguage: Language diff --git a/src/Foundation.hs b/src/Foundation.hs index ffe945263..b509bcd30 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -243,6 +243,15 @@ noneMoreDE num noneText someText | num == 0 = noneText | otherwise = someText +pluralEN :: (Eq a, Num a) + => a -- ^ Count + -> Text -- ^ Singular + -> Text -- ^ Plural + -> Text +pluralEN num singularForm pluralForm + | num == 1 = singularForm + | otherwise = pluralForm + -- Convenience Type for Messages, since Yesod messages cannot deal with compound type identifiers type IntMaybe = Maybe Int type TextList = [Text] diff --git a/src/Model/Migration.hs b/src/Model/Migration.hs index b22bae8fd..f75aa2ef5 100644 --- a/src/Model/Migration.hs +++ b/src/Model/Migration.hs @@ -581,7 +581,7 @@ customMigrations = Map.fromListWith (>>) , whenM (tableExists "user") $ [executeQQ| ALTER TABLE "user" ADD COLUMN "languages" jsonb; - UPDATE TABLE "user" SET "languages" = "mail_languages" where "mail_languages" <> '[]'; + UPDATE "user" SET "languages" = "mail_languages" where "mail_languages" <> '[]'; ALTER TABLE "user" DROP COLUMN "mail_languages"; |] )