[Bug] Importmeldingen en notitiedia's zijn Nederlands, ongeacht de ingestelde taal #806
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#806
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Bij de bewaker-toets op #772 (presentatie-import) kwamen twee lokalisatiegaten boven die de vertaalpoort niet ziet. Ze zijn verwant maar niet hetzelfde, en het tweede is het vervelendst.
1. Foutmeldingen bereiken het scherm onvertaald
De servicelaag draagt Nederlandse literals die via een variabele bij de gebruiker komen — en daardoor blijft
check-hardcoded-textgroen, want die poort ziet alleen literals op een widget-plek.lib/services/import/presentation_import_service.dart(formaat niet ondersteund, bestand te groot)lib/services/import/importers/{pptx,odp,keynote}/*_importer.dart(kon niet lezen)lib/services/import/pipeline/format_detector.dart(geen geldig zip-archief, beschadigd, te klein)Route:
result.failure?.message→showErrorSnackBarinpresentation_import_action.dart, enprogress.messageinpresentation_import_queue_dialog.dart. DeFormatException-teksten uitarchive_utils.dartzijn zelfs Engels en komen viaerror: '$e'in de wachtrijdialoog terecht.Gevolg: een Franse gebruiker kiest een beschadigd bestand en leest
presentatie.pptx: dit bestand is geen herkende presentatie (pptx/odp/key).Richting: de servicelaag heeft geen
BuildContext, dus vertalen hoort aan de UI-kant. GeefImportFailureeen reden-code (enum) naast de technische tekst, en laat de UI die doorl10n.dhalen. De vrije tekst blijft bruikbaar voor het log.2. Notitiedia's bakken Nederlands ín het document van de gebruiker
Ernstiger, want dit is blijvend:
unconverted_tracker.dartendeck_builder.dartschrijven "# Niet overgenomen van slide 7", "niet overgenomen (OciDeck heeft geen audio-slides)" en "Geredde tekst" rechtstreeks als inhoud het.mdin. Het commentaar erkent het al ("The wording is Dutch for now").Een Griekse gebruiker houdt permanent Nederlandse alinea's in zijn eigen bestand, en die reizen mee naar elk ander Marp-gereedschap. In een product met 32 talen is dat geen detail.
Richting: geef
DeckBuildereen vertaalnaad (String Function(String), standaard identiteit) die de UI vult metl10n.d. Dan wordt de notitietekst op importmoment in de taal van de gebruiker gezet en zó opgeslagen — wat klopt, want het is inhoud en geen interface. Vergt wel dat die zinnen (met hun interpolaties) door de 31-talen-keten gaan.Waarom niet meteen in #772
Beide zijn echte fouten, maar het zijn eigen ontwerpkeuzes (reden-codes, een vertaalnaad in de bouwer) plus een flinke vertaalronde. Ze meenemen zou #772 verder oprekken terwijl de import zelf af en getoetst is. De bewaker vroeg om een vastgelegd besluit in plaats van stilzwijgen — dit issue ís dat besluit.
Herkomst: bewaker-toets op #772, punten 5 en 6.
Opgepakt. Tak:
fix/import-lokalisatie-806. #812 is net gemerged, dusdeck_builder.darten de import-service zijn vrij.Beide punten, en punt 2 eerst: dat schrijft blijvend Nederlands in het bestand van de gebruiker, en dat is de enige schade hier die niet met een herstart weggaat.
Reikwijdte zoals jij hem schetste:
ImportFailurekrijgt een reden-code naast de technische tekst (die blijft, voor het log), de UI vertaalt de code;DeckBuilderenunconverted_tracker.dartkrijgen een vertaalnaad die de UI metl10n.dvult, zodat de notitietekst op importmoment in de taal van de gebruiker wordt opgeslagen. Plus de vertaalronde over 31 talen.Gemerged in
2f5e5aa6(PR #826), op main geverifieerd. Beide punten die je schetste zitten erin, plus een poort die het afdwingt.Punt 1 — foutmeldingen.
ImportFailuredraagt nu een reden-code (ImportFailureReason) naast de technische tekst, precies zoals je voorstelde. De UI vertaalt viaimportFailureText, langs dezelfde weg als de WebDAV-/S3-/git-meldingen. De ruwe message blijft voor het log en komt nooit meer op het scherm.FormatExceptionuitarchive_utilsbereikt de gebruiker niet langer rauw — de service zet er een reden-code op.Punt 2 — notitiedia's. Dit was het ergste, en het is opgelost zoals je aangaf:
DeckBuilderenUnconvertedTrackerkrijgen een vertaalnaad die de UI metl10n.dvult. De notitie wordt op importmoment in de taal van de gebruiker gezet en zó opgeslagen — inhoud, geen interface. Een Griekse gebruiker houdt nu Griekse notities in zijn eigen.md.Twee dingen die je richting nog scherper maakten:
ClassifiedSlide.issueswas eenList<String>met een' — '-splitsing die de lokalisatie in de weg zat; nuList<ConversionIssue>, net alsSourceDeck.issuesal was.salvagedBits.join(' + ')— een samengestelde string is per taal onvindbaar. Nu drie vaste sleutels.De vertaalronde die je voorzag: 78 bronstrings × 31 talen = 2387 vertalingen. Een nieuwe poort (
test/import_note_l10n_test.dart) haalt élke notitie- en vaste voortgangstekst via de AST uit de servicelaag en eist alle 31 — zo ontsnapt ook een toekomstige string niet meer.Wat er (bewust) buiten viel, met reden: de per-dia voortgangsregel "Slide 3/10". Vluchtig, vrijwel geheel numeriek, en lokaliseren vraagt een aparte voortgangsnaad. Vastgelegd in
docs/KNOWN_LIMITATIONS.md. En de vertaalkwaliteit voor Klingon en Latijn is eerlijk gemeld als de zwakste; de grote talen zijn solide.Poort:
make checkgroen in een verse worktree, ook na rebase op #821 — 6.585 tests, dekking 86,5%.