diff --git a/.gitignore b/.gitignore index 0e2a4677f..0fb3c32c0 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,4 @@ src/Handler/Course.SnapCustom.hs .directory tags test.log +*.dump-splices diff --git a/messages/uniworx/de.msg b/messages/uniworx/de.msg index c0ee216ae..68814efbf 100644 --- a/messages/uniworx/de.msg +++ b/messages/uniworx/de.msg @@ -35,12 +35,12 @@ GenericIsNew: Neu GenericHasConflict: Konflikt GenericBack: Zurück -SummerTerm year@Integer: Sommersemester #{display year} -WinterTerm year@Integer: Wintersemester #{display year}/#{display $ succ year} -SummerTermShort year@Integer: SoSe #{display year} -WinterTermShort year@Integer: WiSe #{display year}/#{display $ mod (succ year) 100} +SummerTerm year@Integer: Sommersemester #{year} +WinterTerm year@Integer: Wintersemester #{year}/#{succ year} +SummerTermShort year@Integer: SoSe #{year} +WinterTermShort year@Integer: WiSe #{year}/#{mod (succ year) 100} PSLimitNonPositive: “pagesize” muss größer als null sein -Page num@Int64: #{display num} +Page num@Int64: #{num} TermsHeading: Semesterübersicht TermCurrent: Aktuelles Semester @@ -99,9 +99,9 @@ CourseEditHeading tid@TermId ssh@SchoolId csh@CourseShorthand: Kurs #{display ti CourseEditTitle: Kurs editieren/anlegen CourseMembers: Teilnehmer CourseMemberOf: Teilnehmer -CourseMembersCount n@Int: #{display n} -CourseMembersCountLimited n@Int max@Int: #{display n}/#{display max} -CourseMembersCountOf n@Int mbNum@IntMaybe: #{display n} Anmeldungen #{maybeDisplay " von " mbNum " möglichen"} +CourseMembersCount n@Int: #{n} +CourseMembersCountLimited n@Int max@Int: #{n}/#{max} +CourseMembersCountOf n@Int mbNum@IntMaybe: #{n} Anmeldungen #{maybeToMessage " von " mbNum " möglichen"} CourseName: Name CourseDescription: Beschreibung CourseDescriptionTip: Beliebiges HTML-Markup ist gestattet @@ -320,7 +320,7 @@ CorByProportionOnly proportion@Rational: #{display proportion} Anteile CorByProportionIncludingTutorial proportion@Rational: #{display proportion} Anteile - Tutorium CorByProportionExcludingTutorial proportion@Rational: #{display proportion} Anteile + Tutorium -RowCount count@Int64: #{display count} #{pluralDE count "passender Eintrag" "passende Einträge"} insgesamt +RowCount count@Int64: #{count} #{pluralDE count "passender Eintrag" "passende Einträge"} insgesamt DeleteRow: Entfernen ProportionNegative: Anteile dürfen nicht negativ sein CorrectorUpdated: Korrektor erfolgreich aktualisiert @@ -348,7 +348,7 @@ TokensResetSuccess: Authorisierungs-Tokens invalidiert HomeOpenCourses: Kurse mit offener Registrierung HomeUpcomingSheets: Anstehende Übungsblätter -NumCourses num@Int64: #{display num} Kurse +NumCourses num@Int64: #{num} Kurse CloseAlert: Schliessen Name: Name @@ -385,14 +385,14 @@ 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: #{display num} Abgaben waren bereits einem Korrektor zugeteilt und wurden nicht verändert: -SubmissionsAssignUnauthorized num@Int64: #{display num} Abgaben können momentan nicht einem Korrektor zugeteilt werden (z.B. weil die Abgabe noch offen ist): -UpdatedAssignedCorrectorSingle num@Int64: #{display num} Abgaben wurden dem neuen Korrektor zugeteilt. +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. NoCorrector: Kein Korrektor -RemovedCorrections num@Int64: Korrektur-Daten wurden von #{display num} Abgaben entfernt. -UpdatedAssignedCorrectorsAuto num@Int64: #{display num} Abgaben wurden unter den Korrektoren aufgeteilt. -CouldNotAssignCorrectorsAuto num@Int64: #{display num} Abgaben konnten nicht automatisch zugewiesen werden: -SelfCorrectors num@Int64: #{display num} Abgaben wurden Abgebenden als eigenem Korrektor zugeteilt! +RemovedCorrections num@Int64: Korrektur-Daten wurden von #{num} Abgaben entfernt. +UpdatedAssignedCorrectorsAuto num@Int64: #{num} Abgaben wurden unter den Korrektoren aufgeteilt. +CouldNotAssignCorrectorsAuto num@Int64: #{num} Abgaben konnten nicht automatisch zugewiesen werden: +SelfCorrectors num@Int64: #{num} Abgaben wurden Abgebenden als eigenem Korrektor zugeteilt! CorrectionSheets: Übersicht Korrekturen nach Blättern @@ -411,7 +411,7 @@ NrSubmissionsNotCorrected: Unkorrigiert CorrectionTime: Korrekturdauer (Min/Avg/Max) AssignSubmissionsRandomWarning: Die Zuteilungsvorschau kann von der tatsächlichen Zuteilung abweichen, wenn mehrere Blätter auf einmal zugeteilt werden, da beim Ausgleich der Kontigente nur bereits zugeteilte Abgaben berücksichtigt werden. Da es ein randomisierte Prozess ist, kann es auch bei einzelnen Blättern gerinfgügige Abweichungen geben. -CorrectionsUploaded num@Int64: #{display num} Korrekturen wurden gespeichert: +CorrectionsUploaded num@Int64: #{num} Korrekturen wurden gespeichert: NoCorrectionsUploaded: In der hochgeladenen Datei wurden keine Korrekturen gefunden. RatingBy: Korrigiert von @@ -614,10 +614,10 @@ MailSubmissionsUnassignedIntro n@Int courseName@Text termDesc@Text sheetName@She MailSubjectSheetSoonInactive csh@CourseShorthand sheetName@SheetName: #{sheetName} in #{csh} kann nur noch kurze Zeit abgegeben werden MailSheetSoonInactiveIntro courseName@Text termDesc@Text sheetName@SheetName: Abgabefirst für #{sheetName} im Kurs #{courseName} (#{termDesc}) endet in Kürze. MailSubjectSheetInactive csh@CourseShorthand sheetName@SheetName: Abgabezeitraum für #{sheetName} in #{csh} abgelaufen -MailSheetInactiveIntro courseName@Text termDesc@Text sheetName@SheetName n@Int num@Int64: Die Abgabefirst für #{sheetName} im Kurs #{courseName} (#{termDesc}) beendet. Es gab #{noneOneMoreDE n "Keine Abgaben" "Nur eine Abgabe von " (display n <> " Abgaben von ")}#{noneOneMoreDE num "" "einem Teilnehmer" (display num <> " Teilnehmern")}. +MailSheetInactiveIntro courseName@Text termDesc@Text sheetName@SheetName n@Int num@Int64: Die Abgabefirst für #{sheetName} im Kurs #{courseName} (#{termDesc}) beendet. Es gab #{noneOneMoreDE n "Keine Abgaben" "Nur eine Abgabe von " (toMessage n <> " Abgaben von ")}#{noneOneMoreDE num "" "einem Teilnehmer" (toMessage num <> " Teilnehmern")}. MailSubjectCorrectionsAssigned csh@CourseShorthand sheetName@SheetName: Ihnen wurden Korrekturen zu #{sheetName} in #{csh} zugeteilt -MailCorrectionsAssignedIntro courseName@Text termDesc@Text sheetName@SheetName n@Int: #{display n} #{pluralDE n "Abgabe wurde" "Abgaben wurden"} Ihnen zur Korrektur für #{sheetName} im Kurs #{courseName} (#{termDesc}) zugeteilt. +MailCorrectionsAssignedIntro courseName@Text termDesc@Text sheetName@SheetName n@Int: #{n} #{pluralDE n "Abgabe wurde" "Abgaben wurden"} Ihnen zur Korrektur für #{sheetName} im Kurs #{courseName} (#{termDesc}) zugeteilt. MailSubjectUserRightsUpdate name@Text: Berechtigungen für #{name} aktualisiert MailUserRightsIntro name@Text email@UserEmail: #{name} <#{email}> hat folgende Uni2work Berechtigungen: @@ -661,8 +661,8 @@ SheetTypeInfoNotGraded: Blätter ohne Wertung werden nirgends angerechnet, die B SheetTypeInfoBonus: Bonus Blätter zählen normal, erhöhen aber nicht die maximal erreichbare Punktzahl bzw. Anzahl zu bestehender Blätter. SheetGradingBonusIncluded: Erzielte Bonuspunkte wurden hier bereits zu den erreichten normalen Punkten hinzugezählt. SummaryTitle: Zusammenfassung über -SheetGradingSummaryTitle intgr@Integer: #{display intgr} #{pluralDE intgr "Blatt" "Blätter"} -SubmissionGradingSummaryTitle intgr@Integer: #{display intgr} #{pluralDE intgr "Abgabe" "Abgaben"} +SheetGradingSummaryTitle intgr@Integer: #{intgr} #{pluralDE intgr "Blatt" "Blätter"} +SubmissionGradingSummaryTitle intgr@Integer: #{intgr} #{pluralDE intgr "Abgabe" "Abgaben"} SheetTypeBonus': Bonus SheetTypeNormal': Normal diff --git a/src/Foundation.hs b/src/Foundation.hs index 15a35a2bb..2628d0268 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -218,6 +218,10 @@ maybeDisplay :: DisplayAble m => Text -> Maybe m -> Text -> Text maybeDisplay _ Nothing _ = mempty maybeDisplay before (Just x) after = before <> (display x) <> after +maybeToMessage :: ToMessage m => Text -> Maybe m -> Text -> Text +maybeToMessage _ Nothing _ = mempty +maybeToMessage before (Just x) after = before <> (toMessage x) <> after + -- Messages creates type UniWorXMessage and RenderMessage UniWorX instance mkMessage "UniWorX" "messages/uniworx" "de" mkMessageVariant "UniWorX" "Campus" "messages/campus" "de" @@ -248,6 +252,24 @@ instance RenderMessage UniWorX ShortTermIdentifier where instance RenderMessage UniWorX String where renderMessage f ls str = renderMessage f ls $ Text.pack str +-- TODO: raw number representation; instead, display e.g. 1000 as 1.000 or 1,000 or ... (language-dependent!) +instance RenderMessage UniWorX Int where + renderMessage f ls = renderMessage f ls . tshow +instance RenderMessage UniWorX Int64 where + renderMessage f ls = renderMessage f ls . tshow +instance RenderMessage UniWorX Integer where + renderMessage f ls = renderMessage f ls . tshow + +instance ToMessage Int where + toMessage = tshow +instance ToMessage Int64 where + toMessage = tshow +instance ToMessage Integer where + toMessage = tshow + +instance HasResolution a => RenderMessage UniWorX (Fixed a) where + renderMessage f ls = renderMessage f ls . showFixed True + instance RenderMessage UniWorX Load where renderMessage foundation ls = renderMessage foundation ls . \case (Load {byTutorial=Nothing , byProportion=p}) -> MsgCorByProportionOnly p diff --git a/src/Handler/Utils/Table/Cells.hs b/src/Handler/Utils/Table/Cells.hs index 6f400d0c7..43c2598f7 100644 --- a/src/Handler/Utils/Table/Cells.hs +++ b/src/Handler/Utils/Table/Cells.hs @@ -175,8 +175,8 @@ cellHasEMail = emailCell . view _userEmail maybeDateTimeCell :: IsDBTable m a => Maybe UTCTime -> DBCell m a maybeDateTimeCell = maybe mempty dateTimeCell -numCell :: (IsDBTable m a, Num b, DisplayAble b) => b -> DBCell m a -numCell = textCell . display +numCell :: (IsDBTable m a, Num b, ToMessage b) => b -> DBCell m a +numCell = textCell . toMessage int64Cell :: (IsDBTable m a) => Int64-> DBCell m a int64Cell = numCell diff --git a/src/Utils.hs b/src/Utils.hs index 344b8f510..2fb5f6340 100644 --- a/src/Utils.hs +++ b/src/Utils.hs @@ -248,10 +248,6 @@ class DisplayAble a where default display :: Show a => a -> Text display = pack . show -instance DisplayAble Int -instance DisplayAble Int64 -instance DisplayAble Integer - instance DisplayAble Rational where display r = showFFloat (Just 2) (rat2float r) "" & pack diff --git a/templates/course-user.hamlet b/templates/course-user.hamlet index dd0bac222..338bb52c2 100644 --- a/templates/course-user.hamlet +++ b/templates/course-user.hamlet @@ -38,7 +38,7 @@