From 6981c064863ea8112fd55b1428e689150973638a Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Fri, 4 Sep 2026 09:41:39 +0200 Subject: [PATCH 1/2] fix(l10n): give the Dutch-keyed catalogue entries an English value MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit l10n/en.json mapped 23 Dutch keys to themselves, so an English UI rendered Dutch: `Commissie` and `Bezwaar` as column headers, `Kaartlaag` and `Subsidie` as page titles, `Bevoegdheidstype` and `Doormandaat` as form labels. The fix is the one this catalogue already uses 166 times, from `Acties` to `Annuleren`: keep the Dutch key, give it an English VALUE in en.json and leave the Dutch value in nl.json. Renaming the key instead would have orphaned every other locale's translation of it, and 216 of these keys are translated elsewhere. Nothing is orphaned here. en_US.json carries the same values, since a key absent from that overlay falls back to the key text. Three of the four entries this pass started from are already dead. `Steller`, `Wacht op` and `Dagen in stap` were columns on the Voorstellen page that af1ff19a deleted, and `Steller` survives only as a seed-data role name that src/menu-layout.json deliberately keeps in Dutch. Only `Commissie` was live. `{from} — (no end)` was worse than untranslated. check-l10n.js does not decode \uXXXX, so it wrote the literal backslash-u text into the catalogue while t() looks up a real dash at runtime. The key was never requested and all 35 translations of it were dead on arrival, with the escape text baked into each one. The source now uses a literal en-dash for the date range, the key is migrated across all 38 catalogues and every translation is carried over and repaired, and unescape() decodes \uXXXX so this cannot recur. Two used manifest strings, `Queue` and its empty text, had no en.json entry at all, so test:l10n was already red on development. `All types` is a folderSidebar allLabel that CnFolderSidebar renders raw, never through t(), so its nl.json entry was removed rather than given a source key. The guard is tests/l10n/language-neutral-keys.json plus a new hard failure in check-l10n.js. If en.json and nl.json hold the same value for a USED key, the English catalogue offers a reader nothing the Dutch one does not: either the word is the same in both languages, and the 40 that are now say so explicitly, or the key is Dutch. Proven red against the pre-fix catalogue, where it names 18 of the 23. The other five are Dutch keys whose Dutch translation differs only by hyphenation, which no value comparison can see. The file's docblock claimed this check existed since nl-locale-coverage-gap-and-dutch-keys; it never did, and that is how 23 keys shipped. --- l10n/be.js | 2 +- l10n/be.json | 2 +- l10n/bg.js | 2 +- l10n/bg.json | 2 +- l10n/bs.js | 2 +- l10n/bs.json | 2 +- l10n/ca.js | 2 +- l10n/ca.json | 2 +- l10n/cs.js | 2 +- l10n/cs.json | 2 +- l10n/da.js | 2 +- l10n/da.json | 2 +- l10n/de.js | 2 +- l10n/de.json | 2 +- l10n/el.js | 2 +- l10n/el.json | 2 +- l10n/en.js | 52 +++++++++--------- l10n/en.json | 52 +++++++++--------- l10n/en_US.js | 28 ++++++++-- l10n/en_US.json | 28 ++++++++-- l10n/es.js | 2 +- l10n/es.json | 2 +- l10n/et.js | 2 +- l10n/et.json | 2 +- l10n/fi.js | 2 +- l10n/fi.json | 2 +- l10n/fr.js | 2 +- l10n/fr.json | 2 +- l10n/ga.js | 2 +- l10n/ga.json | 2 +- l10n/hr.js | 2 +- l10n/hr.json | 2 +- l10n/hu.js | 2 +- l10n/hu.json | 2 +- l10n/is.js | 2 +- l10n/is.json | 2 +- l10n/it.js | 2 +- l10n/it.json | 2 +- l10n/lb.js | 2 +- l10n/lb.json | 2 +- l10n/lt.js | 2 +- l10n/lt.json | 2 +- l10n/lv.js | 2 +- l10n/lv.json | 2 +- l10n/mk.js | 2 +- l10n/mk.json | 2 +- l10n/mt.js | 2 +- l10n/mt.json | 2 +- l10n/nb.js | 2 +- l10n/nb.json | 2 +- l10n/nl.js | 3 +- l10n/nl.json | 3 +- l10n/pl.js | 2 +- l10n/pl.json | 2 +- l10n/pt.js | 2 +- l10n/pt.json | 2 +- l10n/rm.js | 2 +- l10n/rm.json | 2 +- l10n/ro.js | 2 +- l10n/ro.json | 2 +- l10n/ru.js | 2 +- l10n/ru.json | 2 +- l10n/sk.js | 2 +- l10n/sk.json | 2 +- l10n/sl.js | 2 +- l10n/sl.json | 2 +- l10n/sq.js | 2 +- l10n/sq.json | 2 +- l10n/sr.js | 2 +- l10n/sr.json | 2 +- l10n/sv.js | 2 +- l10n/sv.json | 2 +- l10n/tr.js | 2 +- l10n/tr.json | 2 +- l10n/uk.js | 2 +- l10n/uk.json | 2 +- src/views/settings/CaseTypeList.vue | 4 +- tests/l10n/check-l10n.js | 78 ++++++++++++++++++++++++--- tests/l10n/language-neutral-keys.json | 54 +++++++++++++++++++ 79 files changed, 304 insertions(+), 138 deletions(-) create mode 100644 tests/l10n/language-neutral-keys.json diff --git a/l10n/be.js b/l10n/be.js index 790a424d9..a10c37ee1 100644 --- a/l10n/be.js +++ b/l10n/be.js @@ -1967,7 +1967,7 @@ OC.L10N.register( "{days} days remaining": "засталося {days} дзён", "{field} is required": "{field} абавязкова", "{filled} of {total} properties filled": "{filled} з {total} уласцівасцей запоўнена", - "{from} \\u2014 (no end)": "{from} \\u2014 (без канца)", + "{from} – (no end)": "{from} – (без канца)", "{hours} hours ago": "{hours} гадзін таму", "{min} min ago": "{min} хв таму", "{n} conflicts": "{n} канфліктаў", diff --git a/l10n/be.json b/l10n/be.json index 007a46d0e..67448a892 100644 --- a/l10n/be.json +++ b/l10n/be.json @@ -1966,7 +1966,7 @@ "{days} days remaining": "засталося {days} дзён", "{field} is required": "{field} абавязкова", "{filled} of {total} properties filled": "{filled} з {total} уласцівасцей запоўнена", - "{from} \\u2014 (no end)": "{from} \\u2014 (без канца)", + "{from} – (no end)": "{from} – (без канца)", "{hours} hours ago": "{hours} гадзін таму", "{min} min ago": "{min} хв таму", "{n} conflicts": "{n} канфліктаў", diff --git a/l10n/bg.js b/l10n/bg.js index 06108d20d..2fa21f47e 100644 --- a/l10n/bg.js +++ b/l10n/bg.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} дни просрочие", "{days} days remaining": "остават {days} дни", "{field} is required": "{field} е задължително", - "{from} \\u2014 (no end)": "{from} \\u2014 (без край)", + "{from} – (no end)": "{from} – (без край)", "{hours} hours ago": "преди {hours} часа", "{min} min ago": "преди {min} мин", "{n} days": "{n} дни", diff --git a/l10n/bg.json b/l10n/bg.json index bf6e7429a..365304289 100644 --- a/l10n/bg.json +++ b/l10n/bg.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} дни просрочие", "{days} days remaining": "остават {days} дни", "{field} is required": "{field} е задължително", - "{from} \\u2014 (no end)": "{from} \\u2014 (без край)", + "{from} – (no end)": "{from} – (без край)", "{hours} hours ago": "преди {hours} часа", "{min} min ago": "преди {min} мин", "{n} days": "{n} дни", diff --git a/l10n/bs.js b/l10n/bs.js index dba2d0eb4..52fe7e986 100644 --- a/l10n/bs.js +++ b/l10n/bs.js @@ -1936,7 +1936,7 @@ OC.L10N.register( "{days} days remaining": "{days} dana preostalo", "{field} is required": "{field} je obavezno", "{filled} of {total} properties filled": "{filled} od {total} svojstava popunjeno", - "{from} \\u2014 (no end)": "{from} \\u2014 (bez kraja)", + "{from} – (no end)": "{from} – (bez kraja)", "{hours} hours ago": "prije {hours} sati", "{min} min ago": "prije {min} min", "{n} conflicts": "{n} konflikata", diff --git a/l10n/bs.json b/l10n/bs.json index d54cead94..f4b9c5c7b 100644 --- a/l10n/bs.json +++ b/l10n/bs.json @@ -1935,7 +1935,7 @@ "{days} days remaining": "{days} dana preostalo", "{field} is required": "{field} je obavezno", "{filled} of {total} properties filled": "{filled} od {total} svojstava popunjeno", - "{from} \\u2014 (no end)": "{from} \\u2014 (bez kraja)", + "{from} – (no end)": "{from} – (bez kraja)", "{hours} hours ago": "prije {hours} sati", "{min} min ago": "prije {min} min", "{n} conflicts": "{n} konflikata", diff --git a/l10n/ca.js b/l10n/ca.js index 23bd8205d..258ea4bd9 100644 --- a/l10n/ca.js +++ b/l10n/ca.js @@ -1967,7 +1967,7 @@ OC.L10N.register( "{days} days remaining": "{days} dies restants", "{field} is required": "{field} és obligatori", "{filled} of {total} properties filled": "{filled} de {total} propietats emplenades", - "{from} \\u2014 (no end)": "{from} \\u2014 (sense fi)", + "{from} – (no end)": "{from} – (sense fi)", "{hours} hours ago": "fa {hours} hores", "{min} min ago": "fa {min} min", "{n} conflicts": "{n} conflictes", diff --git a/l10n/ca.json b/l10n/ca.json index aec733924..6144f711c 100644 --- a/l10n/ca.json +++ b/l10n/ca.json @@ -1966,7 +1966,7 @@ "{days} days remaining": "{days} dies restants", "{field} is required": "{field} és obligatori", "{filled} of {total} properties filled": "{filled} de {total} propietats emplenades", - "{from} \\u2014 (no end)": "{from} \\u2014 (sense fi)", + "{from} – (no end)": "{from} – (sense fi)", "{hours} hours ago": "fa {hours} hores", "{min} min ago": "fa {min} min", "{n} conflicts": "{n} conflictes", diff --git a/l10n/cs.js b/l10n/cs.js index 889a930f0..1c4808d65 100644 --- a/l10n/cs.js +++ b/l10n/cs.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} dní po termínu", "{days} days remaining": "zbývá {days} dní", "{field} is required": "{field} je povinné", - "{from} \\u2014 (no end)": "{from} \\u2014 (bez konce)", + "{from} – (no end)": "{from} – (bez konce)", "{hours} hours ago": "před {hours} hodinami", "{min} min ago": "před {min} min", "{n} days": "{n} dní", diff --git a/l10n/cs.json b/l10n/cs.json index 1ddc88692..40ecdfdda 100644 --- a/l10n/cs.json +++ b/l10n/cs.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} dní po termínu", "{days} days remaining": "zbývá {days} dní", "{field} is required": "{field} je povinné", - "{from} \\u2014 (no end)": "{from} \\u2014 (bez konce)", + "{from} – (no end)": "{from} – (bez konce)", "{hours} hours ago": "před {hours} hodinami", "{min} min ago": "před {min} min", "{n} days": "{n} dní", diff --git a/l10n/da.js b/l10n/da.js index 8e5e6d805..7af92c0d9 100644 --- a/l10n/da.js +++ b/l10n/da.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} dage forsinket", "{days} days remaining": "{days} dage tilbage", "{field} is required": "{field} er påkrævet", - "{from} \\u2014 (no end)": "{from} \\u2014 (ingen slutning)", + "{from} – (no end)": "{from} – (ingen slutning)", "{hours} hours ago": "for {hours} timer siden", "{min} min ago": "for {min} min. siden", "{n} days": "{n} dage", diff --git a/l10n/da.json b/l10n/da.json index d7590ff1e..38820f1de 100644 --- a/l10n/da.json +++ b/l10n/da.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} dage forsinket", "{days} days remaining": "{days} dage tilbage", "{field} is required": "{field} er påkrævet", - "{from} \\u2014 (no end)": "{from} \\u2014 (ingen slutning)", + "{from} – (no end)": "{from} – (ingen slutning)", "{hours} hours ago": "for {hours} timer siden", "{min} min ago": "for {min} min. siden", "{n} days": "{n} dage", diff --git a/l10n/de.js b/l10n/de.js index 3d1b4d89f..4b2661d83 100644 --- a/l10n/de.js +++ b/l10n/de.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} Tage überfällig", "{days} days remaining": "noch {days} Tage", "{field} is required": "{field} ist erforderlich", - "{from} \\u2014 (no end)": "{from} \\u2014 (kein Ende)", + "{from} – (no end)": "{from} – (kein Ende)", "{hours} hours ago": "vor {hours} Stunden", "{min} min ago": "vor {min} Min.", "{n} days": "{n} Tage", diff --git a/l10n/de.json b/l10n/de.json index 90176e8b1..364f54e63 100644 --- a/l10n/de.json +++ b/l10n/de.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} Tage überfällig", "{days} days remaining": "noch {days} Tage", "{field} is required": "{field} ist erforderlich", - "{from} \\u2014 (no end)": "{from} \\u2014 (kein Ende)", + "{from} – (no end)": "{from} – (kein Ende)", "{hours} hours ago": "vor {hours} Stunden", "{min} min ago": "vor {min} Min.", "{n} days": "{n} Tage", diff --git a/l10n/el.js b/l10n/el.js index 07f03af58..d8481d8b1 100644 --- a/l10n/el.js +++ b/l10n/el.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} ημέρες καθυστέρηση", "{days} days remaining": "απομένουν {days} ημέρες", "{field} is required": "Το {field} είναι υποχρεωτικό", - "{from} \\u2014 (no end)": "{from} \\u2014 (χωρίς λήξη)", + "{from} – (no end)": "{from} – (χωρίς λήξη)", "{hours} hours ago": "πριν από {hours} ώρες", "{min} min ago": "πριν από {min} λεπτά", "{n} days": "{n} ημέρες", diff --git a/l10n/el.json b/l10n/el.json index ffc8a0704..cae01f33e 100644 --- a/l10n/el.json +++ b/l10n/el.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} ημέρες καθυστέρηση", "{days} days remaining": "απομένουν {days} ημέρες", "{field} is required": "Το {field} είναι υποχρεωτικό", - "{from} \\u2014 (no end)": "{from} \\u2014 (χωρίς λήξη)", + "{from} – (no end)": "{from} – (χωρίς λήξη)", "{hours} hours ago": "πριν από {hours} ώρες", "{min} min ago": "πριν από {min} λεπτά", "{n} days": "{n} ημέρες", diff --git a/l10n/en.js b/l10n/en.js index 25924f769..056173f7a 100644 --- a/l10n/en.js +++ b/l10n/en.js @@ -34,7 +34,7 @@ OC.L10N.register( "{failed} of {total} sub-cases could not be detached, so the case was not deleted. Detach them first, then try again.": "{failed} of {total} sub-cases could not be detached, so the case was not deleted. Detach them first, then try again.", "{field} is required": "{field} is required", "{filled} of {total} properties filled": "{filled} of {total} properties filled", - "{from} \\u2014 (no end)": "{from} \\u2014 (no end)", + "{from} – (no end)": "{from} – (no end)", "{hours} hours ago": "{hours} hours ago", "{min} min ago": "{min} min ago", "{n} changes waiting for sync": "{n} changes waiting for sync", @@ -115,7 +115,7 @@ OC.L10N.register( "Aanbesteding niet gevonden.": "Aanbesteding niet gevonden.", "Aanbestedingen": "Aanbestedingen", "Aangeboden": "Aangeboden", - "Aangezocht bevoegd gezag (OIN or name)": "Aangezocht bevoegd gezag (OIN or name)", + "Aangezocht bevoegd gezag (OIN or name)": "Requested competent authority (OIN or name)", "Aangezochte bevoegd gezag": "Aangezochte bevoegd gezag", "Aanhouden": "Defer", "Aanmaken": "Aanmaken", @@ -220,7 +220,7 @@ OC.L10N.register( "Advice types per case type": "Advice types per case type", "Advice uitgebracht": "Advice uitgebracht", "Advice:": "Advice:", - "Advies": "Advies", + "Advies": "Advice", "Advies indienen": "Advies indienen", "Advies ingediend": "Advies ingediend", "Advies uitbrengen": "Advies uitbrengen", @@ -467,7 +467,7 @@ OC.L10N.register( "Betwist": "Betwist", "Betwistratio": "Betwistratio", "Bevoegd gezag": "Bevoegd gezag", - "Bevoegdheidstype": "Bevoegdheidstype", + "Bevoegdheidstype": "Authority type", "Bevoegdheidstype is required": "Bevoegdheidstype is required", "Bewaarmodus": "Bewaarmodus", "Bewaartermijn": "Bewaartermijn", @@ -499,7 +499,7 @@ OC.L10N.register( "Bottleneck ranking": "Bottleneck ranking", "bouwactiviteiten": "bouwactiviteiten", "BSN": "BSN", - "BSN (burgerservicenummer)": "BSN (burgerservicenummer)", + "BSN (burgerservicenummer)": "BSN (citizen service number)", "BSN is required for Mijn Overheid messages": "BSN is required for Mijn Overheid messages", "BTW": "VAT", "Building supervision with three inspection phases: foundation, shell, completion": "Building supervision with three inspection phases: foundation, shell, completion", @@ -973,8 +973,8 @@ OC.L10N.register( "Documents relation tab is being migrated. The full document list will appear here once dossiq-case-relation-tabs lands.": "Documents relation tab is being migrated. The full document list will appear here once dossiq-case-relation-tabs lands.", "Documents to share": "Documents to share", "Documents uploaded": "Documents uploaded", - "Doel bevoegd gezag (OIN or name)": "Doel bevoegd gezag (OIN or name)", - "Doormandaat": "Doormandaat", + "Doel bevoegd gezag (OIN or name)": "Target competent authority (OIN or name)", + "Doormandaat": "Sub-mandate", "Dossier": "Dossier", "Download": "Download", "Download evaluatierapport": "Download evaluatierapport", @@ -1511,7 +1511,7 @@ OC.L10N.register( "just now": "just now", "kalenderdagen": "kalenderdagen", "Kanaal": "Channel", - "KCC instellingen opgeslagen": "KCC instellingen opgeslagen", + "KCC instellingen opgeslagen": "KCC settings saved", "KCC-werkplek Integration": "KCC-werkplek Integration", "Kenmerk": "Reference", "Key (used to invoke the decision)": "Key (used to invoke the decision)", @@ -1608,7 +1608,7 @@ OC.L10N.register( "Manager": "Manager", "Manager-rechten vereist": "Manager permissions required", "Mandaat": "Mandate", - "Mandaat niveau": "Mandaat niveau", + "Mandaat niveau": "Mandate level", "Mandaatnummer": "Mandaatnummer", "Mandaatnummer is required": "Mandaatnummer is required", "Mandaatreferentie": "Mandaatreferentie", @@ -1956,7 +1956,7 @@ OC.L10N.register( "Offline — {n} changes waiting for sync": "Offline — {n} changes waiting for sync", "OIN (Organisatie-identificatienummer)": "OIN (Organisatie-identificatienummer)", "OK": "OK", - "Omgevingsvergunning — Detail": "Omgevingsvergunning — Detail", + "Omgevingsvergunning — Detail": "Environmental permit", "Omgevingsvergunning (regulier)": "Omgevingsvergunning (regulier)", "Omgevingsvergunning (uitgebreid)": "Omgevingsvergunning (uitgebreid)", "Omgevingsvergunning detail": "Omgevingsvergunning detail", @@ -3087,7 +3087,7 @@ OC.L10N.register( "View task": "View task", "Viewing version {version}. Active version is {active}.": "Viewing version {version}. Active version is {active}.", "Visits": "Visits", - "Vóór deadline (pre-breach)": "Vóór deadline (pre-breach)", + "Vóór deadline (pre-breach)": "Before deadline (pre-breach)", "Voor deze zaak is nog geen leges berekend.": "No fee has been calculated for this case yet.", "Voorlopige voorziening (interim relief) has been requested. Expedited handling required.": "Voorlopige voorziening (interim relief) has been requested. Expedited handling required.", "Voorlopige voorziening (interim relief) requested": "Voorlopige voorziening (interim relief) requested", @@ -3265,7 +3265,7 @@ OC.L10N.register( "Notes": "Notes", "Connected contacts": "Connected contacts", "Appointments & hearings": "Appointments & hearings", - "Besluitvorming": "Besluitvorming", + "Besluitvorming": "Decision-making", "Case assistant": "Case assistant", "Adaptive case plan": "Adaptive case plan", "Flow runs": "Flow runs", @@ -3280,17 +3280,17 @@ OC.L10N.register( "now": "now", "History": "History", "Sharing": "Sharing", - "Bezwaar": "Bezwaar", + "Bezwaar": "Objection", "Advice requests": "Advice requests", "Statutory clock & suspension": "Statutory clock & suspension", - "Commissie": "Commissie", + "Commissie": "Committee", "Assigned at": "Assigned at", "No advice requests raised for this objection yet": "No advice requests raised for this objection yet", - "Beslissingen": "Beslissingen", + "Beslissingen": "Decisions", "Disposition type": "Disposition type", "Published at": "Published at", "No decisions recorded for this objection yet": "No decisions recorded for this objection yet", - "Beslissing op bezwaar": "Beslissing op bezwaar", + "Beslissing op bezwaar": "Decision on objection", "Disposition & reasoning": "Disposition & reasoning", "Publication & documents": "Publication & documents", "Bezwaar & case": "Bezwaar & case", @@ -3310,8 +3310,8 @@ OC.L10N.register( "Tenants": "Tenants", "Provision": "Provision", "View usage": "View usage", - "Kaartlagen": "Kaartlagen", - "Kaartlaag": "Kaartlaag", + "Kaartlagen": "Map layers", + "Kaartlaag": "Map layer", "Refresh usage": "Refresh usage", "Partner organisation": "Partner organisation", "Key figures": "Key figures", @@ -3336,26 +3336,26 @@ OC.L10N.register( "LHS Recommendation": "LHS Recommendation", "Override & final": "Override & final", "Case & inspection": "Case & inspection", - "Bezwaaradviescommissies": "Bezwaaradviescommissies", - "Bezwaaradviescommissie": "Bezwaaradviescommissie", + "Bezwaaradviescommissies": "Objection advisory committees", + "Bezwaaradviescommissie": "Objection advisory committee", "Committee": "Committee", "Advice assignments": "Advice assignments", "In deliberation": "In deliberation", "Roster & term": "Roster & term", - "Adviesaanvragen": "Adviesaanvragen", + "Adviesaanvragen": "Advice requests", "No advice requests assigned to this committee yet": "No advice requests assigned to this committee yet", - "BAC-advies": "BAC-advies", + "BAC-advies": "Committee advice", "Assignment": "Assignment", "Advice & outcome": "Advice & outcome", "Bezwaar & committee": "Bezwaar & committee", - "Beroep": "Beroep", + "Beroep": "Appeal", "Filing & judgment": "Filing & judgment", "Case & source bezwaar": "Case & source bezwaar", "Deadline compliance, quarterly reporting and the annual dwangsom audit": "Deadline compliance, quarterly reporting and the annual dwangsom audit", "Dossiq handles cases from intake to archive. Load the demo data to see it work. Then initialise the register and schemas.": "Dossiq handles cases from intake to archive. Load the demo data to see it work. Then initialise the register and schemas.", "Let's take a quick spin through case handling. We'll register a case together so you can see how the pieces fit, and you'll add the record yourself.": "Let's take a quick spin through case handling. We'll register a case together so you can see how the pieces fit, and you'll add the record yourself.", "Register your first case. Give it a title, pick a case type, then save. You can add tasks, decisions and documents later.": "Register your first case. Give it a title, pick a case type, then save. You can add tasks, decisions and documents later.", - "Subsidie": "Subsidie", + "Subsidie": "Grant", "Executions": "Executions", "Case, scheme & handler": "Case, scheme & handler", "Assessments": "Assessments", @@ -3515,7 +3515,9 @@ OC.L10N.register( "When this change is due to be sent.": "When this change is due to be sent.", "When this retry ran.": "When this retry ran.", "Which layer the error came from.": "Which layer the error came from.", - "Which retry this was, counting from one.": "Which retry this was, counting from one." + "Which retry this was, counting from one.": "Which retry this was, counting from one.", + "Queue": "Queue", + "Nothing is waiting. Every open case has someone on it.": "Nothing is waiting. Every open case has someone on it." }, "nplurals=2; plural=(n != 1);" ) diff --git a/l10n/en.json b/l10n/en.json index e4afed288..16241952f 100644 --- a/l10n/en.json +++ b/l10n/en.json @@ -33,7 +33,7 @@ "{failed} of {total} sub-cases could not be detached, so the case was not deleted. Detach them first, then try again.": "{failed} of {total} sub-cases could not be detached, so the case was not deleted. Detach them first, then try again.", "{field} is required": "{field} is required", "{filled} of {total} properties filled": "{filled} of {total} properties filled", - "{from} \\u2014 (no end)": "{from} \\u2014 (no end)", + "{from} – (no end)": "{from} – (no end)", "{hours} hours ago": "{hours} hours ago", "{min} min ago": "{min} min ago", "{n} changes waiting for sync": "{n} changes waiting for sync", @@ -114,7 +114,7 @@ "Aanbesteding niet gevonden.": "Aanbesteding niet gevonden.", "Aanbestedingen": "Aanbestedingen", "Aangeboden": "Aangeboden", - "Aangezocht bevoegd gezag (OIN or name)": "Aangezocht bevoegd gezag (OIN or name)", + "Aangezocht bevoegd gezag (OIN or name)": "Requested competent authority (OIN or name)", "Aangezochte bevoegd gezag": "Aangezochte bevoegd gezag", "Aanhouden": "Defer", "Aanmaken": "Aanmaken", @@ -219,7 +219,7 @@ "Advice types per case type": "Advice types per case type", "Advice uitgebracht": "Advice uitgebracht", "Advice:": "Advice:", - "Advies": "Advies", + "Advies": "Advice", "Advies indienen": "Advies indienen", "Advies ingediend": "Advies ingediend", "Advies uitbrengen": "Advies uitbrengen", @@ -466,7 +466,7 @@ "Betwist": "Betwist", "Betwistratio": "Betwistratio", "Bevoegd gezag": "Bevoegd gezag", - "Bevoegdheidstype": "Bevoegdheidstype", + "Bevoegdheidstype": "Authority type", "Bevoegdheidstype is required": "Bevoegdheidstype is required", "Bewaarmodus": "Bewaarmodus", "Bewaartermijn": "Bewaartermijn", @@ -498,7 +498,7 @@ "Bottleneck ranking": "Bottleneck ranking", "bouwactiviteiten": "bouwactiviteiten", "BSN": "BSN", - "BSN (burgerservicenummer)": "BSN (burgerservicenummer)", + "BSN (burgerservicenummer)": "BSN (citizen service number)", "BSN is required for Mijn Overheid messages": "BSN is required for Mijn Overheid messages", "BTW": "VAT", "Building supervision with three inspection phases: foundation, shell, completion": "Building supervision with three inspection phases: foundation, shell, completion", @@ -972,8 +972,8 @@ "Documents relation tab is being migrated. The full document list will appear here once dossiq-case-relation-tabs lands.": "Documents relation tab is being migrated. The full document list will appear here once dossiq-case-relation-tabs lands.", "Documents to share": "Documents to share", "Documents uploaded": "Documents uploaded", - "Doel bevoegd gezag (OIN or name)": "Doel bevoegd gezag (OIN or name)", - "Doormandaat": "Doormandaat", + "Doel bevoegd gezag (OIN or name)": "Target competent authority (OIN or name)", + "Doormandaat": "Sub-mandate", "Dossier": "Dossier", "Download": "Download", "Download evaluatierapport": "Download evaluatierapport", @@ -1510,7 +1510,7 @@ "just now": "just now", "kalenderdagen": "kalenderdagen", "Kanaal": "Channel", - "KCC instellingen opgeslagen": "KCC instellingen opgeslagen", + "KCC instellingen opgeslagen": "KCC settings saved", "KCC-werkplek Integration": "KCC-werkplek Integration", "Kenmerk": "Reference", "Key (used to invoke the decision)": "Key (used to invoke the decision)", @@ -1607,7 +1607,7 @@ "Manager": "Manager", "Manager-rechten vereist": "Manager permissions required", "Mandaat": "Mandate", - "Mandaat niveau": "Mandaat niveau", + "Mandaat niveau": "Mandate level", "Mandaatnummer": "Mandaatnummer", "Mandaatnummer is required": "Mandaatnummer is required", "Mandaatreferentie": "Mandaatreferentie", @@ -1955,7 +1955,7 @@ "Offline — {n} changes waiting for sync": "Offline — {n} changes waiting for sync", "OIN (Organisatie-identificatienummer)": "OIN (Organisatie-identificatienummer)", "OK": "OK", - "Omgevingsvergunning — Detail": "Omgevingsvergunning — Detail", + "Omgevingsvergunning — Detail": "Environmental permit", "Omgevingsvergunning (regulier)": "Omgevingsvergunning (regulier)", "Omgevingsvergunning (uitgebreid)": "Omgevingsvergunning (uitgebreid)", "Omgevingsvergunning detail": "Omgevingsvergunning detail", @@ -3086,7 +3086,7 @@ "View task": "View task", "Viewing version {version}. Active version is {active}.": "Viewing version {version}. Active version is {active}.", "Visits": "Visits", - "Vóór deadline (pre-breach)": "Vóór deadline (pre-breach)", + "Vóór deadline (pre-breach)": "Before deadline (pre-breach)", "Voor deze zaak is nog geen leges berekend.": "No fee has been calculated for this case yet.", "Voorlopige voorziening (interim relief) has been requested. Expedited handling required.": "Voorlopige voorziening (interim relief) has been requested. Expedited handling required.", "Voorlopige voorziening (interim relief) requested": "Voorlopige voorziening (interim relief) requested", @@ -3264,7 +3264,7 @@ "Notes": "Notes", "Connected contacts": "Connected contacts", "Appointments & hearings": "Appointments & hearings", - "Besluitvorming": "Besluitvorming", + "Besluitvorming": "Decision-making", "Case assistant": "Case assistant", "Adaptive case plan": "Adaptive case plan", "Flow runs": "Flow runs", @@ -3279,17 +3279,17 @@ "now": "now", "History": "History", "Sharing": "Sharing", - "Bezwaar": "Bezwaar", + "Bezwaar": "Objection", "Advice requests": "Advice requests", "Statutory clock & suspension": "Statutory clock & suspension", - "Commissie": "Commissie", + "Commissie": "Committee", "Assigned at": "Assigned at", "No advice requests raised for this objection yet": "No advice requests raised for this objection yet", - "Beslissingen": "Beslissingen", + "Beslissingen": "Decisions", "Disposition type": "Disposition type", "Published at": "Published at", "No decisions recorded for this objection yet": "No decisions recorded for this objection yet", - "Beslissing op bezwaar": "Beslissing op bezwaar", + "Beslissing op bezwaar": "Decision on objection", "Disposition & reasoning": "Disposition & reasoning", "Publication & documents": "Publication & documents", "Bezwaar & case": "Bezwaar & case", @@ -3309,8 +3309,8 @@ "Tenants": "Tenants", "Provision": "Provision", "View usage": "View usage", - "Kaartlagen": "Kaartlagen", - "Kaartlaag": "Kaartlaag", + "Kaartlagen": "Map layers", + "Kaartlaag": "Map layer", "Refresh usage": "Refresh usage", "Partner organisation": "Partner organisation", "Key figures": "Key figures", @@ -3335,26 +3335,26 @@ "LHS Recommendation": "LHS Recommendation", "Override & final": "Override & final", "Case & inspection": "Case & inspection", - "Bezwaaradviescommissies": "Bezwaaradviescommissies", - "Bezwaaradviescommissie": "Bezwaaradviescommissie", + "Bezwaaradviescommissies": "Objection advisory committees", + "Bezwaaradviescommissie": "Objection advisory committee", "Committee": "Committee", "Advice assignments": "Advice assignments", "In deliberation": "In deliberation", "Roster & term": "Roster & term", - "Adviesaanvragen": "Adviesaanvragen", + "Adviesaanvragen": "Advice requests", "No advice requests assigned to this committee yet": "No advice requests assigned to this committee yet", - "BAC-advies": "BAC-advies", + "BAC-advies": "Committee advice", "Assignment": "Assignment", "Advice & outcome": "Advice & outcome", "Bezwaar & committee": "Bezwaar & committee", - "Beroep": "Beroep", + "Beroep": "Appeal", "Filing & judgment": "Filing & judgment", "Case & source bezwaar": "Case & source bezwaar", "Deadline compliance, quarterly reporting and the annual dwangsom audit": "Deadline compliance, quarterly reporting and the annual dwangsom audit", "Dossiq handles cases from intake to archive. Load the demo data to see it work. Then initialise the register and schemas.": "Dossiq handles cases from intake to archive. Load the demo data to see it work. Then initialise the register and schemas.", "Let's take a quick spin through case handling. We'll register a case together so you can see how the pieces fit, and you'll add the record yourself.": "Let's take a quick spin through case handling. We'll register a case together so you can see how the pieces fit, and you'll add the record yourself.", "Register your first case. Give it a title, pick a case type, then save. You can add tasks, decisions and documents later.": "Register your first case. Give it a title, pick a case type, then save. You can add tasks, decisions and documents later.", - "Subsidie": "Subsidie", + "Subsidie": "Grant", "Executions": "Executions", "Case, scheme & handler": "Case, scheme & handler", "Assessments": "Assessments", @@ -3514,7 +3514,9 @@ "When this change is due to be sent.": "When this change is due to be sent.", "When this retry ran.": "When this retry ran.", "Which layer the error came from.": "Which layer the error came from.", - "Which retry this was, counting from one.": "Which retry this was, counting from one." + "Which retry this was, counting from one.": "Which retry this was, counting from one.", + "Queue": "Queue", + "Nothing is waiting. Every open case has someone on it.": "Nothing is waiting. Every open case has someone on it." }, "plurals": "" } diff --git a/l10n/en_US.js b/l10n/en_US.js index 93f82f714..e0a087954 100644 --- a/l10n/en_US.js +++ b/l10n/en_US.js @@ -549,7 +549,7 @@ OC.L10N.register( "{days} days overdue": "{days} days overdue", "{days} days remaining": "{days} days remaining", "{field} is required": "{field} is required", - "{from} \\u2014 (no end)": "{from} \\u2014 (no end)", + "{from} – (no end)": "{from} – (no end)", "{hours} hours ago": "{hours} hours ago", "{min} min ago": "{min} min ago", "{n} days": "{n} days", @@ -662,7 +662,7 @@ OC.L10N.register( "Identificatievragen": "Identificatievragen", "Identification method": "Identification method", "Identification score threshold (0.6 - 1.0)": "Identification score threshold (0.6 - 1.0)", - "KCC instellingen opgeslagen": "KCC instellingen opgeslagen", + "KCC instellingen opgeslagen": "KCC settings saved", "KCC-werkplek Integration": "KCC-werkplek Integration", "Max contactmomenten in history": "Max contactmomenten in history", "Max open zaken in voorblad": "Max open zaken in voorblad", @@ -676,7 +676,29 @@ OC.L10N.register( "This case has {count} sub-cases. Deleting it will unlink the sub-cases from their parent. Do you want to continue?": "This case has {count} sub-cases. Deleting it will unlink the sub-cases from their parent. Do you want to continue?", "Whether burgers are identified via DigiD (portaal/chat), identificatievragen (telefoon), or both.": "Whether burgers are identified via DigiD (portaal/chat), identificatievragen (telefoon), or both.", "{count} deelzaken": "{count} deelzaken", - "_%n document selected_::_%n documents selected_": ["%n document selected","%n documents selected"] + "_%n document selected_::_%n documents selected_": ["%n document selected","%n documents selected"], + "Advies": "Advice", + "Adviesaanvragen": "Advice requests", + "BAC-advies": "Committee advice", + "BSN (burgerservicenummer)": "BSN (citizen service number)", + "Beroep": "Appeal", + "Beslissing op bezwaar": "Decision on objection", + "Beslissingen": "Decisions", + "Besluitvorming": "Decision-making", + "Bevoegdheidstype": "Authority type", + "Bezwaar": "Objection", + "Bezwaaradviescommissie": "Objection advisory committee", + "Bezwaaradviescommissies": "Objection advisory committees", + "Commissie": "Committee", + "Doormandaat": "Sub-mandate", + "Kaartlaag": "Map layer", + "Kaartlagen": "Map layers", + "Omgevingsvergunning — Detail": "Environmental permit", + "Subsidie": "Grant", + "Mandaat niveau": "Mandate level", + "Aangezocht bevoegd gezag (OIN or name)": "Requested competent authority (OIN or name)", + "Doel bevoegd gezag (OIN or name)": "Target competent authority (OIN or name)", + "Vóór deadline (pre-breach)": "Before deadline (pre-breach)" }, "nplurals=2; plural=(n != 1);" ) diff --git a/l10n/en_US.json b/l10n/en_US.json index 54d0c2620..fc540137a 100644 --- a/l10n/en_US.json +++ b/l10n/en_US.json @@ -548,7 +548,7 @@ "{days} days overdue": "{days} days overdue", "{days} days remaining": "{days} days remaining", "{field} is required": "{field} is required", - "{from} \\u2014 (no end)": "{from} \\u2014 (no end)", + "{from} – (no end)": "{from} – (no end)", "{hours} hours ago": "{hours} hours ago", "{min} min ago": "{min} min ago", "{n} days": "{n} days", @@ -661,7 +661,7 @@ "Identificatievragen": "Identificatievragen", "Identification method": "Identification method", "Identification score threshold (0.6 - 1.0)": "Identification score threshold (0.6 - 1.0)", - "KCC instellingen opgeslagen": "KCC instellingen opgeslagen", + "KCC instellingen opgeslagen": "KCC settings saved", "KCC-werkplek Integration": "KCC-werkplek Integration", "Max contactmomenten in history": "Max contactmomenten in history", "Max open zaken in voorblad": "Max open zaken in voorblad", @@ -678,7 +678,29 @@ "_%n document selected_::_%n documents selected_": [ "%n document selected", "%n documents selected" - ] + ], + "Advies": "Advice", + "Adviesaanvragen": "Advice requests", + "BAC-advies": "Committee advice", + "BSN (burgerservicenummer)": "BSN (citizen service number)", + "Beroep": "Appeal", + "Beslissing op bezwaar": "Decision on objection", + "Beslissingen": "Decisions", + "Besluitvorming": "Decision-making", + "Bevoegdheidstype": "Authority type", + "Bezwaar": "Objection", + "Bezwaaradviescommissie": "Objection advisory committee", + "Bezwaaradviescommissies": "Objection advisory committees", + "Commissie": "Committee", + "Doormandaat": "Sub-mandate", + "Kaartlaag": "Map layer", + "Kaartlagen": "Map layers", + "Omgevingsvergunning — Detail": "Environmental permit", + "Subsidie": "Grant", + "Mandaat niveau": "Mandate level", + "Aangezocht bevoegd gezag (OIN or name)": "Requested competent authority (OIN or name)", + "Doel bevoegd gezag (OIN or name)": "Target competent authority (OIN or name)", + "Vóór deadline (pre-breach)": "Before deadline (pre-breach)" }, "plurals": "" } diff --git a/l10n/es.js b/l10n/es.js index 7e1775209..c7ca19fae 100644 --- a/l10n/es.js +++ b/l10n/es.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} días de retraso", "{days} days remaining": "{days} días restantes", "{field} is required": "{field} es obligatorio", - "{from} \\u2014 (no end)": "{from} \\u2014 (sin fin)", + "{from} – (no end)": "{from} – (sin fin)", "{hours} hours ago": "hace {hours} horas", "{min} min ago": "hace {min} min", "{n} days": "{n} días", diff --git a/l10n/es.json b/l10n/es.json index 2715765c8..2ff432630 100644 --- a/l10n/es.json +++ b/l10n/es.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} días de retraso", "{days} days remaining": "{days} días restantes", "{field} is required": "{field} es obligatorio", - "{from} \\u2014 (no end)": "{from} \\u2014 (sin fin)", + "{from} – (no end)": "{from} – (sin fin)", "{hours} hours ago": "hace {hours} horas", "{min} min ago": "hace {min} min", "{n} days": "{n} días", diff --git a/l10n/et.js b/l10n/et.js index 4c92e93c1..8ca3be3ce 100644 --- a/l10n/et.js +++ b/l10n/et.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} päeva üle tähtaja", "{days} days remaining": "jäänud {days} päeva", "{field} is required": "{field} on kohustuslik", - "{from} \\u2014 (no end)": "{from} \\u2014 (lõputa)", + "{from} – (no end)": "{from} – (lõputa)", "{hours} hours ago": "{hours} tundi tagasi", "{min} min ago": "{min} min tagasi", "{n} days": "{n} päeva", diff --git a/l10n/et.json b/l10n/et.json index 504e390ed..adb5b9af9 100644 --- a/l10n/et.json +++ b/l10n/et.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} päeva üle tähtaja", "{days} days remaining": "jäänud {days} päeva", "{field} is required": "{field} on kohustuslik", - "{from} \\u2014 (no end)": "{from} \\u2014 (lõputa)", + "{from} – (no end)": "{from} – (lõputa)", "{hours} hours ago": "{hours} tundi tagasi", "{min} min ago": "{min} min tagasi", "{n} days": "{n} päeva", diff --git a/l10n/fi.js b/l10n/fi.js index 9e4453ff1..80f6cfd81 100644 --- a/l10n/fi.js +++ b/l10n/fi.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} päivää myöhässä", "{days} days remaining": "{days} päivää jäljellä", "{field} is required": "{field} on pakollinen", - "{from} \\u2014 (no end)": "{from} \\u2014 (ei loppua)", + "{from} – (no end)": "{from} – (ei loppua)", "{hours} hours ago": "{hours} tuntia sitten", "{min} min ago": "{min} min sitten", "{n} days": "{n} päivää", diff --git a/l10n/fi.json b/l10n/fi.json index d821d7516..ff4ffd7cd 100644 --- a/l10n/fi.json +++ b/l10n/fi.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} päivää myöhässä", "{days} days remaining": "{days} päivää jäljellä", "{field} is required": "{field} on pakollinen", - "{from} \\u2014 (no end)": "{from} \\u2014 (ei loppua)", + "{from} – (no end)": "{from} – (ei loppua)", "{hours} hours ago": "{hours} tuntia sitten", "{min} min ago": "{min} min sitten", "{n} days": "{n} päivää", diff --git a/l10n/fr.js b/l10n/fr.js index db1524ba7..fbe789544 100644 --- a/l10n/fr.js +++ b/l10n/fr.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} jours de retard", "{days} days remaining": "{days} jours restants", "{field} is required": "{field} est obligatoire", - "{from} \\u2014 (no end)": "{from} \\u2014 (sans fin)", + "{from} – (no end)": "{from} – (sans fin)", "{hours} hours ago": "il y a {hours} heures", "{min} min ago": "il y a {min} min", "{n} days": "{n} jours", diff --git a/l10n/fr.json b/l10n/fr.json index cf9b13f08..27d961b12 100644 --- a/l10n/fr.json +++ b/l10n/fr.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} jours de retard", "{days} days remaining": "{days} jours restants", "{field} is required": "{field} est obligatoire", - "{from} \\u2014 (no end)": "{from} \\u2014 (sans fin)", + "{from} – (no end)": "{from} – (sans fin)", "{hours} hours ago": "il y a {hours} heures", "{min} min ago": "il y a {min} min", "{n} days": "{n} jours", diff --git a/l10n/ga.js b/l10n/ga.js index 6157c5b5e..ddbe4b05e 100644 --- a/l10n/ga.js +++ b/l10n/ga.js @@ -1936,7 +1936,7 @@ OC.L10N.register( "{days} days remaining": "{days} lá fágtha", "{field} is required": "Tá {field} riachtanach", "{filled} of {total} properties filled": "{filled} as {total} airí líonta", - "{from} \\u2014 (no end)": "{from} \\u2014 (gan deireadh)", + "{from} – (no end)": "{from} – (gan deireadh)", "{hours} hours ago": "{hours} uair an chloig ó shin", "{min} min ago": "{min} nóim ó shin", "{n} conflicts": "{n} coinbhleacht", diff --git a/l10n/ga.json b/l10n/ga.json index 6856295dd..364b5ffee 100644 --- a/l10n/ga.json +++ b/l10n/ga.json @@ -1935,7 +1935,7 @@ "{days} days remaining": "{days} lá fágtha", "{field} is required": "Tá {field} riachtanach", "{filled} of {total} properties filled": "{filled} as {total} airí líonta", - "{from} \\u2014 (no end)": "{from} \\u2014 (gan deireadh)", + "{from} – (no end)": "{from} – (gan deireadh)", "{hours} hours ago": "{hours} uair an chloig ó shin", "{min} min ago": "{min} nóim ó shin", "{n} conflicts": "{n} coinbhleacht", diff --git a/l10n/hr.js b/l10n/hr.js index 521f3fa0b..f5378eaf8 100644 --- a/l10n/hr.js +++ b/l10n/hr.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} dana kašnjenja", "{days} days remaining": "preostalo {days} dana", "{field} is required": "{field} je obavezno", - "{from} \\u2014 (no end)": "{from} \\u2014 (bez kraja)", + "{from} – (no end)": "{from} – (bez kraja)", "{hours} hours ago": "prije {hours} sati", "{min} min ago": "prije {min} min", "{n} days": "{n} dana", diff --git a/l10n/hr.json b/l10n/hr.json index 1779cd9a0..b7def8160 100644 --- a/l10n/hr.json +++ b/l10n/hr.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} dana kašnjenja", "{days} days remaining": "preostalo {days} dana", "{field} is required": "{field} je obavezno", - "{from} \\u2014 (no end)": "{from} \\u2014 (bez kraja)", + "{from} – (no end)": "{from} – (bez kraja)", "{hours} hours ago": "prije {hours} sati", "{min} min ago": "prije {min} min", "{n} days": "{n} dana", diff --git a/l10n/hu.js b/l10n/hu.js index df5a5fd6d..08dfe9567 100644 --- a/l10n/hu.js +++ b/l10n/hu.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} nap késésben", "{days} days remaining": "{days} nap van hátra", "{field} is required": "A(z) {field} megadása kötelező", - "{from} \\u2014 (no end)": "{from} \\u2014 (nincs vége)", + "{from} – (no end)": "{from} – (nincs vége)", "{hours} hours ago": "{hours} órája", "{min} min ago": "{min} perce", "{n} days": "{n} nap", diff --git a/l10n/hu.json b/l10n/hu.json index bc04beb83..5432a1aaa 100644 --- a/l10n/hu.json +++ b/l10n/hu.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} nap késésben", "{days} days remaining": "{days} nap van hátra", "{field} is required": "A(z) {field} megadása kötelező", - "{from} \\u2014 (no end)": "{from} \\u2014 (nincs vége)", + "{from} – (no end)": "{from} – (nincs vége)", "{hours} hours ago": "{hours} órája", "{min} min ago": "{min} perce", "{n} days": "{n} nap", diff --git a/l10n/is.js b/l10n/is.js index bfd697e5b..48fccd3d3 100644 --- a/l10n/is.js +++ b/l10n/is.js @@ -1967,7 +1967,7 @@ OC.L10N.register( "{days} days remaining": "{days} dagar eftir", "{field} is required": "{field} er nauðsynlegt", "{filled} of {total} properties filled": "{filled} af {total} eiginleikum útfylltir", - "{from} \\u2014 (no end)": "{from} \\u2014 (engin lok)", + "{from} – (no end)": "{from} – (engin lok)", "{hours} hours ago": "fyrir {hours} klukkustundum", "{min} min ago": "fyrir {min} mín", "{n} conflicts": "{n} árekstrar", diff --git a/l10n/is.json b/l10n/is.json index 43d02b3f2..88d94d191 100644 --- a/l10n/is.json +++ b/l10n/is.json @@ -1966,7 +1966,7 @@ "{days} days remaining": "{days} dagar eftir", "{field} is required": "{field} er nauðsynlegt", "{filled} of {total} properties filled": "{filled} af {total} eiginleikum útfylltir", - "{from} \\u2014 (no end)": "{from} \\u2014 (engin lok)", + "{from} – (no end)": "{from} – (engin lok)", "{hours} hours ago": "fyrir {hours} klukkustundum", "{min} min ago": "fyrir {min} mín", "{n} conflicts": "{n} árekstrar", diff --git a/l10n/it.js b/l10n/it.js index af6081ec2..8de02fd5f 100644 --- a/l10n/it.js +++ b/l10n/it.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} giorni di ritardo", "{days} days remaining": "{days} giorni rimanenti", "{field} is required": "{field} è obbligatorio", - "{from} \\u2014 (no end)": "{from} \\u2014 (nessuna fine)", + "{from} – (no end)": "{from} – (nessuna fine)", "{hours} hours ago": "{hours} ore fa", "{min} min ago": "{min} min fa", "{n} days": "{n} giorni", diff --git a/l10n/it.json b/l10n/it.json index 431b283a5..745a8c8a8 100644 --- a/l10n/it.json +++ b/l10n/it.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} giorni di ritardo", "{days} days remaining": "{days} giorni rimanenti", "{field} is required": "{field} è obbligatorio", - "{from} \\u2014 (no end)": "{from} \\u2014 (nessuna fine)", + "{from} – (no end)": "{from} – (nessuna fine)", "{hours} hours ago": "{hours} ore fa", "{min} min ago": "{min} min fa", "{n} days": "{n} giorni", diff --git a/l10n/lb.js b/l10n/lb.js index 615707ded..0db56fa21 100644 --- a/l10n/lb.js +++ b/l10n/lb.js @@ -1967,7 +1967,7 @@ OC.L10N.register( "{days} days remaining": "{days} Deeg iwwreg", "{field} is required": "{field} ass erfuerderlech", "{filled} of {total} properties filled": "{filled} vun {total} Eegeschafte gefëllt", - "{from} \\u2014 (no end)": "{from} \\u2014 (kee Enn)", + "{from} – (no end)": "{from} – (kee Enn)", "{hours} hours ago": "viru {hours} Stonnen", "{min} min ago": "viru {min} Min", "{n} conflicts": "{n} Konflikter", diff --git a/l10n/lb.json b/l10n/lb.json index f9e90db53..40258aa3a 100644 --- a/l10n/lb.json +++ b/l10n/lb.json @@ -1966,7 +1966,7 @@ "{days} days remaining": "{days} Deeg iwwreg", "{field} is required": "{field} ass erfuerderlech", "{filled} of {total} properties filled": "{filled} vun {total} Eegeschafte gefëllt", - "{from} \\u2014 (no end)": "{from} \\u2014 (kee Enn)", + "{from} – (no end)": "{from} – (kee Enn)", "{hours} hours ago": "viru {hours} Stonnen", "{min} min ago": "viru {min} Min", "{n} conflicts": "{n} Konflikter", diff --git a/l10n/lt.js b/l10n/lt.js index 015d8c50e..6ea6dade2 100644 --- a/l10n/lt.js +++ b/l10n/lt.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} d. pradelsta", "{days} days remaining": "liko {days} d.", "{field} is required": "{field} yra privalomas", - "{from} \\u2014 (no end)": "{from} \\u2014 (be pabaigos)", + "{from} – (no end)": "{from} – (be pabaigos)", "{hours} hours ago": "prieš {hours} val.", "{min} min ago": "prieš {min} min.", "{n} days": "{n} d.", diff --git a/l10n/lt.json b/l10n/lt.json index 96725f3e8..b51802d71 100644 --- a/l10n/lt.json +++ b/l10n/lt.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} d. pradelsta", "{days} days remaining": "liko {days} d.", "{field} is required": "{field} yra privalomas", - "{from} \\u2014 (no end)": "{from} \\u2014 (be pabaigos)", + "{from} – (no end)": "{from} – (be pabaigos)", "{hours} hours ago": "prieš {hours} val.", "{min} min ago": "prieš {min} min.", "{n} days": "{n} d.", diff --git a/l10n/lv.js b/l10n/lv.js index 003057880..93f6fbdc7 100644 --- a/l10n/lv.js +++ b/l10n/lv.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} dienas nokavētas", "{days} days remaining": "atlikušas {days} dienas", "{field} is required": "{field} ir obligāts", - "{from} \\u2014 (no end)": "{from} \\u2014 (bez beigām)", + "{from} – (no end)": "{from} – (bez beigām)", "{hours} hours ago": "pirms {hours} stundām", "{min} min ago": "pirms {min} min", "{n} days": "{n} dienas", diff --git a/l10n/lv.json b/l10n/lv.json index 0a2e02af7..a332d6ed2 100644 --- a/l10n/lv.json +++ b/l10n/lv.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} dienas nokavētas", "{days} days remaining": "atlikušas {days} dienas", "{field} is required": "{field} ir obligāts", - "{from} \\u2014 (no end)": "{from} \\u2014 (bez beigām)", + "{from} – (no end)": "{from} – (bez beigām)", "{hours} hours ago": "pirms {hours} stundām", "{min} min ago": "pirms {min} min", "{n} days": "{n} dienas", diff --git a/l10n/mk.js b/l10n/mk.js index 25d4b0db4..754af530a 100644 --- a/l10n/mk.js +++ b/l10n/mk.js @@ -1936,7 +1936,7 @@ OC.L10N.register( "{days} days remaining": "{days} дена преостанати", "{field} is required": "{field} е задолжително", "{filled} of {total} properties filled": "{filled} од {total} својства пополнети", - "{from} \\u2014 (no end)": "{from} \\u2014 (без крај)", + "{from} – (no end)": "{from} – (без крај)", "{hours} hours ago": "пред {hours} часа", "{min} min ago": "пред {min} мин", "{n} conflicts": "{n} конфликти", diff --git a/l10n/mk.json b/l10n/mk.json index 4830c5f86..017e62b06 100644 --- a/l10n/mk.json +++ b/l10n/mk.json @@ -1935,7 +1935,7 @@ "{days} days remaining": "{days} дена преостанати", "{field} is required": "{field} е задолжително", "{filled} of {total} properties filled": "{filled} од {total} својства пополнети", - "{from} \\u2014 (no end)": "{from} \\u2014 (без крај)", + "{from} – (no end)": "{from} – (без крај)", "{hours} hours ago": "пред {hours} часа", "{min} min ago": "пред {min} мин", "{n} conflicts": "{n} конфликти", diff --git a/l10n/mt.js b/l10n/mt.js index 6956bf152..7fb04dc3c 100644 --- a/l10n/mt.js +++ b/l10n/mt.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} jiem b'dewmien", "{days} days remaining": "{days} jiem fadal", "{field} is required": "{field} huwa meħtieġ", - "{from} \\u2014 (no end)": "{from} \\u2014 (ebda tmiem)", + "{from} – (no end)": "{from} – (ebda tmiem)", "{hours} hours ago": "{hours} sigħat ilu", "{min} min ago": "{min} min ilu", "{n} days": "{n} jiem", diff --git a/l10n/mt.json b/l10n/mt.json index b024777c6..54fbcaecc 100644 --- a/l10n/mt.json +++ b/l10n/mt.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} jiem b'dewmien", "{days} days remaining": "{days} jiem fadal", "{field} is required": "{field} huwa meħtieġ", - "{from} \\u2014 (no end)": "{from} \\u2014 (ebda tmiem)", + "{from} – (no end)": "{from} – (ebda tmiem)", "{hours} hours ago": "{hours} sigħat ilu", "{min} min ago": "{min} min ilu", "{n} days": "{n} jiem", diff --git a/l10n/nb.js b/l10n/nb.js index 541d6f72b..454fb9a10 100644 --- a/l10n/nb.js +++ b/l10n/nb.js @@ -1936,7 +1936,7 @@ OC.L10N.register( "{days} days remaining": "{days} dager gjenstår", "{field} is required": "{field} er påkrevd", "{filled} of {total} properties filled": "{filled} av {total} egenskaper fylt ut", - "{from} \\u2014 (no end)": "{from} \\u2014 (ingen slutt)", + "{from} – (no end)": "{from} – (ingen slutt)", "{hours} hours ago": "{hours} timer siden", "{min} min ago": "{min} min siden", "{n} conflicts": "{n} konflikter", diff --git a/l10n/nb.json b/l10n/nb.json index 6e1d2d793..5434134af 100644 --- a/l10n/nb.json +++ b/l10n/nb.json @@ -1935,7 +1935,7 @@ "{days} days remaining": "{days} dager gjenstår", "{field} is required": "{field} er påkrevd", "{filled} of {total} properties filled": "{filled} av {total} egenskaper fylt ut", - "{from} \\u2014 (no end)": "{from} \\u2014 (ingen slutt)", + "{from} – (no end)": "{from} – (ingen slutt)", "{hours} hours ago": "{hours} timer siden", "{min} min ago": "{min} min siden", "{n} conflicts": "{n} konflikter", diff --git a/l10n/nl.js b/l10n/nl.js index 7a5a4e38f..a91893550 100644 --- a/l10n/nl.js +++ b/l10n/nl.js @@ -34,7 +34,7 @@ OC.L10N.register( "{failed} of {total} sub-cases could not be detached, so the case was not deleted. Detach them first, then try again.": "{failed} van {total} deelzaken konden niet worden losgekoppeld, dus de zaak is niet verwijderd. Koppel ze eerst los en probeer het opnieuw.", "{field} is required": "{field} is verplicht", "{filled} of {total} properties filled": "{filled} van {total} eigenschappen ingevuld", - "{from} \\u2014 (no end)": "{from} \\u2014 (no end)", + "{from} – (no end)": "{from} – (no end)", "{hours} hours ago": "{hours} uur geleden", "{min} min ago": "{min} min geleden", "{n} changes waiting for sync": "{n} wijzigingen wachten op synchronisatie", @@ -3408,7 +3408,6 @@ OC.L10N.register( "Mail & messages": "Mail en berichten", "Log hours": "Uren boeken", "Queue": "Werkvoorraad", - "All types": "Alle typen", "Nothing is waiting. Every open case has someone on it.": "Er wacht niets. Elke open zaak heeft iemand.", "Assigned to me": "Aan mij toegewezen", "A store registry is another OpenRegister instance that publishes case configuration. Leave the address empty to keep dossiq offline: nothing is requested from the network until one is set.": "Een storeregister is een andere OpenRegister-instantie die zaakconfiguratie publiceert. Laat het adres leeg om dossiq offline te houden: er wordt niets van het netwerk opgehaald zolang er geen adres staat.", diff --git a/l10n/nl.json b/l10n/nl.json index 7c454be35..dbad3bd1a 100644 --- a/l10n/nl.json +++ b/l10n/nl.json @@ -33,7 +33,7 @@ "{failed} of {total} sub-cases could not be detached, so the case was not deleted. Detach them first, then try again.": "{failed} van {total} deelzaken konden niet worden losgekoppeld, dus de zaak is niet verwijderd. Koppel ze eerst los en probeer het opnieuw.", "{field} is required": "{field} is verplicht", "{filled} of {total} properties filled": "{filled} van {total} eigenschappen ingevuld", - "{from} \\u2014 (no end)": "{from} \\u2014 (no end)", + "{from} – (no end)": "{from} – (no end)", "{hours} hours ago": "{hours} uur geleden", "{min} min ago": "{min} min geleden", "{n} changes waiting for sync": "{n} wijzigingen wachten op synchronisatie", @@ -3407,7 +3407,6 @@ "Mail & messages": "Mail en berichten", "Log hours": "Uren boeken", "Queue": "Werkvoorraad", - "All types": "Alle typen", "Nothing is waiting. Every open case has someone on it.": "Er wacht niets. Elke open zaak heeft iemand.", "Assigned to me": "Aan mij toegewezen", "A store registry is another OpenRegister instance that publishes case configuration. Leave the address empty to keep dossiq offline: nothing is requested from the network until one is set.": "Een storeregister is een andere OpenRegister-instantie die zaakconfiguratie publiceert. Laat het adres leeg om dossiq offline te houden: er wordt niets van het netwerk opgehaald zolang er geen adres staat.", diff --git a/l10n/pl.js b/l10n/pl.js index 424777bbd..925efe82d 100644 --- a/l10n/pl.js +++ b/l10n/pl.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} dni po terminie", "{days} days remaining": "pozostało {days} dni", "{field} is required": "{field} jest wymagane", - "{from} \\u2014 (no end)": "{from} \\u2014 (brak końca)", + "{from} – (no end)": "{from} – (brak końca)", "{hours} hours ago": "{hours} godz. temu", "{min} min ago": "{min} min temu", "{n} days": "{n} dni", diff --git a/l10n/pl.json b/l10n/pl.json index 22276ec87..067845fe7 100644 --- a/l10n/pl.json +++ b/l10n/pl.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} dni po terminie", "{days} days remaining": "pozostało {days} dni", "{field} is required": "{field} jest wymagane", - "{from} \\u2014 (no end)": "{from} \\u2014 (brak końca)", + "{from} – (no end)": "{from} – (brak końca)", "{hours} hours ago": "{hours} godz. temu", "{min} min ago": "{min} min temu", "{n} days": "{n} dni", diff --git a/l10n/pt.js b/l10n/pt.js index 8ef0ee9c6..2def221bc 100644 --- a/l10n/pt.js +++ b/l10n/pt.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} dias em atraso", "{days} days remaining": "{days} dias restantes", "{field} is required": "{field} é obrigatório", - "{from} \\u2014 (no end)": "{from} \\u2014 (sem fim)", + "{from} – (no end)": "{from} – (sem fim)", "{hours} hours ago": "há {hours} horas", "{min} min ago": "há {min} min", "{n} days": "{n} dias", diff --git a/l10n/pt.json b/l10n/pt.json index 294c3fcec..242f05dca 100644 --- a/l10n/pt.json +++ b/l10n/pt.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} dias em atraso", "{days} days remaining": "{days} dias restantes", "{field} is required": "{field} é obrigatório", - "{from} \\u2014 (no end)": "{from} \\u2014 (sem fim)", + "{from} – (no end)": "{from} – (sem fim)", "{hours} hours ago": "há {hours} horas", "{min} min ago": "há {min} min", "{n} days": "{n} dias", diff --git a/l10n/rm.js b/l10n/rm.js index f844563df..ad50601c7 100644 --- a/l10n/rm.js +++ b/l10n/rm.js @@ -1936,7 +1936,7 @@ OC.L10N.register( "{days} days remaining": "{days} dis restants", "{field} is required": "{field} è obligatoric", "{filled} of {total} properties filled": "{filled} da {total} proprietads emplenidas", - "{from} \\u2014 (no end)": "{from} \\u2014 (nagina fin)", + "{from} – (no end)": "{from} – (nagina fin)", "{hours} hours ago": "avant {hours} uras", "{min} min ago": "avant {min} min", "{n} conflicts": "{n} conflicts", diff --git a/l10n/rm.json b/l10n/rm.json index 30581d28f..1353707ba 100644 --- a/l10n/rm.json +++ b/l10n/rm.json @@ -1935,7 +1935,7 @@ "{days} days remaining": "{days} dis restants", "{field} is required": "{field} è obligatoric", "{filled} of {total} properties filled": "{filled} da {total} proprietads emplenidas", - "{from} \\u2014 (no end)": "{from} \\u2014 (nagina fin)", + "{from} – (no end)": "{from} – (nagina fin)", "{hours} hours ago": "avant {hours} uras", "{min} min ago": "avant {min} min", "{n} conflicts": "{n} conflicts", diff --git a/l10n/ro.js b/l10n/ro.js index 3f501beb0..75311e5ea 100644 --- a/l10n/ro.js +++ b/l10n/ro.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} zile întârziere", "{days} days remaining": "{days} zile rămase", "{field} is required": "{field} este obligatoriu", - "{from} \\u2014 (no end)": "{from} \\u2014 (fără sfârșit)", + "{from} – (no end)": "{from} – (fără sfârșit)", "{hours} hours ago": "acum {hours} ore", "{min} min ago": "acum {min} min", "{n} days": "{n} zile", diff --git a/l10n/ro.json b/l10n/ro.json index 291d96814..403f70a34 100644 --- a/l10n/ro.json +++ b/l10n/ro.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} zile întârziere", "{days} days remaining": "{days} zile rămase", "{field} is required": "{field} este obligatoriu", - "{from} \\u2014 (no end)": "{from} \\u2014 (fără sfârșit)", + "{from} – (no end)": "{from} – (fără sfârșit)", "{hours} hours ago": "acum {hours} ore", "{min} min ago": "acum {min} min", "{n} days": "{n} zile", diff --git a/l10n/ru.js b/l10n/ru.js index 785c58331..06e525ab3 100644 --- a/l10n/ru.js +++ b/l10n/ru.js @@ -1936,7 +1936,7 @@ OC.L10N.register( "{days} days remaining": "осталось {days} дней", "{field} is required": "{field} обязательно", "{filled} of {total} properties filled": "{filled} из {total} свойств заполнено", - "{from} \\u2014 (no end)": "{from} \\u2014 (без окончания)", + "{from} – (no end)": "{from} – (без окончания)", "{hours} hours ago": "{hours} часов назад", "{min} min ago": "{min} мин назад", "{n} conflicts": "{n} конфликтов", diff --git a/l10n/ru.json b/l10n/ru.json index 1b4a700a4..eac1180fe 100644 --- a/l10n/ru.json +++ b/l10n/ru.json @@ -1935,7 +1935,7 @@ "{days} days remaining": "осталось {days} дней", "{field} is required": "{field} обязательно", "{filled} of {total} properties filled": "{filled} из {total} свойств заполнено", - "{from} \\u2014 (no end)": "{from} \\u2014 (без окончания)", + "{from} – (no end)": "{from} – (без окончания)", "{hours} hours ago": "{hours} часов назад", "{min} min ago": "{min} мин назад", "{n} conflicts": "{n} конфликтов", diff --git a/l10n/sk.js b/l10n/sk.js index b81f2988f..8b35faea4 100644 --- a/l10n/sk.js +++ b/l10n/sk.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} dní po termíne", "{days} days remaining": "zostáva {days} dní", "{field} is required": "{field} je povinný", - "{from} \\u2014 (no end)": "{from} \\u2014 (bez konca)", + "{from} – (no end)": "{from} – (bez konca)", "{hours} hours ago": "pred {hours} hodinami", "{min} min ago": "pred {min} min", "{n} days": "{n} dní", diff --git a/l10n/sk.json b/l10n/sk.json index 8642afbea..241b879b3 100644 --- a/l10n/sk.json +++ b/l10n/sk.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} dní po termíne", "{days} days remaining": "zostáva {days} dní", "{field} is required": "{field} je povinný", - "{from} \\u2014 (no end)": "{from} \\u2014 (bez konca)", + "{from} – (no end)": "{from} – (bez konca)", "{hours} hours ago": "pred {hours} hodinami", "{min} min ago": "pred {min} min", "{n} days": "{n} dní", diff --git a/l10n/sl.js b/l10n/sl.js index 8cee28580..adb67aaf4 100644 --- a/l10n/sl.js +++ b/l10n/sl.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} dni prepozno", "{days} days remaining": "preostalo dni: {days}", "{field} is required": "{field} je obvezno", - "{from} \\u2014 (no end)": "{from} \\u2014 (brez konca)", + "{from} – (no end)": "{from} – (brez konca)", "{hours} hours ago": "pred {hours} urami", "{min} min ago": "pred {min} min", "{n} days": "{n} dni", diff --git a/l10n/sl.json b/l10n/sl.json index 2c3b77dad..ec63db3a0 100644 --- a/l10n/sl.json +++ b/l10n/sl.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} dni prepozno", "{days} days remaining": "preostalo dni: {days}", "{field} is required": "{field} je obvezno", - "{from} \\u2014 (no end)": "{from} \\u2014 (brez konca)", + "{from} – (no end)": "{from} – (brez konca)", "{hours} hours ago": "pred {hours} urami", "{min} min ago": "pred {min} min", "{n} days": "{n} dni", diff --git a/l10n/sq.js b/l10n/sq.js index b22de8f4d..d0793761c 100644 --- a/l10n/sq.js +++ b/l10n/sq.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} ditë me vonesë", "{days} days remaining": "{days} ditë të mbetura", "{field} is required": "{field} është i detyrueshëm", - "{from} \\u2014 (no end)": "{from} \\u2014 (pa fund)", + "{from} – (no end)": "{from} – (pa fund)", "{hours} hours ago": "{hours} orë më parë", "{min} min ago": "{min} min më parë", "{n} days": "{n} ditë", diff --git a/l10n/sq.json b/l10n/sq.json index 05593f6fa..cf9b49f88 100644 --- a/l10n/sq.json +++ b/l10n/sq.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} ditë me vonesë", "{days} days remaining": "{days} ditë të mbetura", "{field} is required": "{field} është i detyrueshëm", - "{from} \\u2014 (no end)": "{from} \\u2014 (pa fund)", + "{from} – (no end)": "{from} – (pa fund)", "{hours} hours ago": "{hours} orë më parë", "{min} min ago": "{min} min më parë", "{n} days": "{n} ditë", diff --git a/l10n/sr.js b/l10n/sr.js index ddad85084..b7bf3ddfe 100644 --- a/l10n/sr.js +++ b/l10n/sr.js @@ -1967,7 +1967,7 @@ OC.L10N.register( "{days} days remaining": "{days} дана преостало", "{field} is required": "{field} је обавезан", "{filled} of {total} properties filled": "{filled} од {total} својстава попуњено", - "{from} \\u2014 (no end)": "{from} \\u2014 (без краја)", + "{from} – (no end)": "{from} – (без краја)", "{hours} hours ago": "пре {hours} сати", "{min} min ago": "пре {min} мин", "{n} conflicts": "{n} конфликата", diff --git a/l10n/sr.json b/l10n/sr.json index 6062d4e68..e8e95954f 100644 --- a/l10n/sr.json +++ b/l10n/sr.json @@ -1966,7 +1966,7 @@ "{days} days remaining": "{days} дана преостало", "{field} is required": "{field} је обавезан", "{filled} of {total} properties filled": "{filled} од {total} својстава попуњено", - "{from} \\u2014 (no end)": "{from} \\u2014 (без краја)", + "{from} – (no end)": "{from} – (без краја)", "{hours} hours ago": "пре {hours} сати", "{min} min ago": "пре {min} мин", "{n} conflicts": "{n} конфликата", diff --git a/l10n/sv.js b/l10n/sv.js index 21938f135..ef20523ac 100644 --- a/l10n/sv.js +++ b/l10n/sv.js @@ -356,7 +356,7 @@ OC.L10N.register( "{days} days overdue": "{days} dagar försenad", "{days} days remaining": "{days} dagar kvar", "{field} is required": "{field} krävs", - "{from} \\u2014 (no end)": "{from} \\u2014 (inget slut)", + "{from} – (no end)": "{from} – (inget slut)", "{hours} hours ago": "{hours} timmar sedan", "{min} min ago": "{min} min sedan", "{n} days": "{n} dagar", diff --git a/l10n/sv.json b/l10n/sv.json index 7e597db30..21b5b61d8 100644 --- a/l10n/sv.json +++ b/l10n/sv.json @@ -355,7 +355,7 @@ "{days} days overdue": "{days} dagar försenad", "{days} days remaining": "{days} dagar kvar", "{field} is required": "{field} krävs", - "{from} \\u2014 (no end)": "{from} \\u2014 (inget slut)", + "{from} – (no end)": "{from} – (inget slut)", "{hours} hours ago": "{hours} timmar sedan", "{min} min ago": "{min} min sedan", "{n} days": "{n} dagar", diff --git a/l10n/tr.js b/l10n/tr.js index 6c77f1cbc..2829ae3bb 100644 --- a/l10n/tr.js +++ b/l10n/tr.js @@ -1967,7 +1967,7 @@ OC.L10N.register( "{days} days remaining": "{days} gün kaldı", "{field} is required": "{field} gereklidir", "{filled} of {total} properties filled": "{total} özelliğin {filled} tanesi dolduruldu", - "{from} \\u2014 (no end)": "{from} \\u2014 (bitiş yok)", + "{from} – (no end)": "{from} – (bitiş yok)", "{hours} hours ago": "{hours} saat önce", "{min} min ago": "{min} dakika önce", "{n} conflicts": "{n} çakışma", diff --git a/l10n/tr.json b/l10n/tr.json index 0a30153a9..d0fc434b9 100644 --- a/l10n/tr.json +++ b/l10n/tr.json @@ -1966,7 +1966,7 @@ "{days} days remaining": "{days} gün kaldı", "{field} is required": "{field} gereklidir", "{filled} of {total} properties filled": "{total} özelliğin {filled} tanesi dolduruldu", - "{from} \\u2014 (no end)": "{from} \\u2014 (bitiş yok)", + "{from} – (no end)": "{from} – (bitiş yok)", "{hours} hours ago": "{hours} saat önce", "{min} min ago": "{min} dakika önce", "{n} conflicts": "{n} çakışma", diff --git a/l10n/uk.js b/l10n/uk.js index ef8e2f1e9..90d03a36f 100644 --- a/l10n/uk.js +++ b/l10n/uk.js @@ -1936,7 +1936,7 @@ OC.L10N.register( "{days} days remaining": "залишилось {days} днів", "{field} is required": "{field} є обов'язковим", "{filled} of {total} properties filled": "заповнено {filled} з {total} властивостей", - "{from} \\u2014 (no end)": "{from} \\u2014 (без завершення)", + "{from} – (no end)": "{from} – (без завершення)", "{hours} hours ago": "{hours} годин тому", "{min} min ago": "{min} хв тому", "{n} conflicts": "{n} конфліктів", diff --git a/l10n/uk.json b/l10n/uk.json index 4024a9231..e9cfce125 100644 --- a/l10n/uk.json +++ b/l10n/uk.json @@ -1935,7 +1935,7 @@ "{days} days remaining": "залишилось {days} днів", "{field} is required": "{field} є обов'язковим", "{filled} of {total} properties filled": "заповнено {filled} з {total} властивостей", - "{from} \\u2014 (no end)": "{from} \\u2014 (без завершення)", + "{from} – (no end)": "{from} – (без завершення)", "{hours} hours ago": "{hours} годин тому", "{min} min ago": "{min} хв тому", "{n} conflicts": "{n} конфліктів", diff --git a/src/views/settings/CaseTypeList.vue b/src/views/settings/CaseTypeList.vue index 01d8c3252..2f0c6b88a 100644 --- a/src/views/settings/CaseTypeList.vue +++ b/src/views/settings/CaseTypeList.vue @@ -197,9 +197,9 @@ export default { month: 'short', year: 'numeric', }) - return `${from} \u2014 ${until}` + return `${from} – ${until}` } - return t('dossiq', '{from} \u2014 (no end)', { from }) + return t('dossiq', '{from} – (no end)', { from }) }, /** diff --git a/tests/l10n/check-l10n.js b/tests/l10n/check-l10n.js index 069e53b59..346f691e4 100644 --- a/tests/l10n/check-l10n.js +++ b/tests/l10n/check-l10n.js @@ -20,9 +20,11 @@ * l10n/nl.json with a non-empty value (and vice versa). Without this, a new * English source string can ship with no Dutch translation and a Dutch-locale * user silently sees the raw English key as fallback text — the gap that - * `nl-locale-coverage-gap-and-dutch-keys` closed. It also WARNS on any new - * translation key whose text reads as Dutch (Dutch-as-key anti-pattern), since - * translation keys MUST be English source per project convention. + * `nl-locale-coverage-gap-and-dutch-keys` closed. It also FAILS on the + * Dutch-as-key anti-pattern: a USED key whose en.json value is identical to its + * nl.json value renders Dutch to an English reader, unless the word is listed in + * tests/l10n/language-neutral-keys.json as genuinely the same in both languages. + * This docblock previously claimed to WARN on that while no such code existed. * * Modes: * (default) check only — exit non-zero if any used key is missing OR the @@ -135,6 +137,11 @@ function unescape (s) { .replace(/\\'/g, "'") .replace(/\\"/g, '"') .replace(/\\`/g, '`') + // \uXXXX must decode, or the key recorded here is not the key t() looks up at + // runtime. `t('dossiq', '{from} \u2014 (no end)')` was extracted as the literal + // backslash-u text, so the catalogue held a key nothing ever requested and all + // 35 translations of it were dead on arrival. + .replace(/\\u([0-9a-fA-F]{4})/g, (_, h) => String.fromCharCode(parseInt(h, 16))) .replace(/\\\\/g, '\\') } @@ -244,6 +251,47 @@ for (const file of manifestFiles) { recordManifestStrings(parsed, file, '') } +// --------------------------------------------------------------------------- +// Dutch-as-key guard (REQ-I18N-04). +// +// A translation key is the ENGLISH SOURCE string. When a Dutch string is used as +// the key, l10n/en.json maps it to itself and an English UI renders Dutch. The +// docblock above claimed this was warned about since `nl-locale-coverage-gap-and- +// dutch-keys`; it never was, and 23 live keys shipped that way: `Commissie` and +// `Bezwaar` as column headers, `Kaartlaag` and `Subsidie` as page titles. +// +// The test is mechanical and needs no language detection. If en.json and nl.json +// hold the SAME value for a used key, the English catalogue offers a reader +// nothing the Dutch one does not. Either the word is the same in both languages, +// or the key is Dutch and untranslated. The first case is finite and listed in +// language-neutral-keys.json; everything else is the anti-pattern. +// +// The fix is NOT to change the key. Changing it orphans every other locale's +// translation of it. Give the Dutch key an English VALUE in l10n/en.json and +// leave the Dutch value in l10n/nl.json, the way 189 entries already do. +// --------------------------------------------------------------------------- +const neutralFile = path.join(ROOT, 'tests', 'l10n', 'language-neutral-keys.json') +const dutchNlFile = path.join(path.dirname(enFile), 'nl.json') +const dutchAsKey = [] +let neutralChecked = false +if (fs.existsSync(dutchNlFile) && fs.existsSync(neutralFile)) { + neutralChecked = true + const nlAll = readJson(dutchNlFile).translations || {} + const neutral = new Set(readJson(neutralFile).keys || []) + for (const key of used.keys()) { + if (neutral.has(key)) { + continue + } + if (Object.hasOwn(translations, key) + && Object.hasOwn(nlAll, key) + && translations[key] === nlAll[key]) { + dutchAsKey.push(key) + } + } +} else if (!fs.existsSync(neutralFile)) { + console.warn(`l10n-check: WARN — ${path.relative(ROOT, neutralFile)} not found; skipping the Dutch-as-key guard`) +} + const missing = [] for (const [key, locations] of used) { if (!Object.hasOwn(translations, key)) { @@ -289,12 +337,16 @@ if (fs.existsSync(nlFile)) { } const parityFail = parityMissingInNl.length > 0 || parityMissingInEn.length > 0 || parityEmptyNl.length > 0 +const dutchFail = dutchAsKey.length > 0 -if (missing.length === 0 && !parityFail) { +if (missing.length === 0 && !parityFail && !dutchFail) { console.log('l10n-check: OK — every used translation key is present in l10n/en.json') if (nlChecked) { console.log('l10n-check: OK — en.json and nl.json key sets match (no missing Dutch translations)') } + if (neutralChecked) { + console.log('l10n-check: OK — no used key renders Dutch to an English reader') + } process.exit(0) } @@ -315,7 +367,7 @@ if (WRITE && missing.length > 0) { + 'Review the diff and translate the nl.json side as needed.') // Fall through to the parity report so --write still surfaces nl gaps, // but never auto-exits 0 while the Dutch side is incomplete. - if (!parityFail) { + if (!parityFail && !dutchFail) { process.exit(0) } } @@ -366,4 +418,18 @@ if (parityFail) { + 'string falls back to the raw English key.') } -process.exit((missing.length > 0 && !WRITE) || parityFail ? 1 : 0) +if (dutchFail) { + console.error(`\nl10n-check: FAIL — ${dutchAsKey.length} used translation key(s) render Dutch to an English reader.`) + console.error('l10n/en.json maps each of these to the very same text l10n/nl.json does, so an English UI shows the Dutch string:') + for (const key of dutchAsKey.sort((a, b) => a.localeCompare(b))) { + console.error(` • ${JSON.stringify(key)}`) + for (const loc of [...used.get(key)].slice(0, 3)) { + console.error(` ${loc}`) + } + } + console.error('\nGive each key an English VALUE in l10n/en.json and keep the Dutch value in l10n/nl.json.') + console.error('Do NOT rename the key: that orphans every other locale\'s translation of it.') + console.error(`If the word really is identical in both languages, add it to ${path.relative(ROOT, neutralFile)}.`) +} + +process.exit((missing.length > 0 && !WRITE) || parityFail || dutchFail ? 1 : 0) diff --git a/tests/l10n/language-neutral-keys.json b/tests/l10n/language-neutral-keys.json new file mode 100644 index 000000000..45223027b --- /dev/null +++ b/tests/l10n/language-neutral-keys.json @@ -0,0 +1,54 @@ +{ + "_comment": [ + "Keys whose English and Dutch renderings are genuinely the same word, so l10n/en.json", + "mapping the key to itself is correct rather than an untranslated Dutch key.", + "check-l10n.js FAILS on any USED key where en.json and nl.json hold the same value and", + "the key is not listed here. That is the Dutch-as-key anti-pattern: the key is Dutch, the", + "English catalogue offers nothing better, and an English UI renders Dutch.", + "Adding an entry here is a claim that a reader of BOTH languages sees the same word.", + "It is not a place to park a Dutch string you have not translated yet: give that string an", + "English value in l10n/en.json instead, keeping the key, the way the other 189 entries do." + ], + "keys": [ + "#", + "1 week", + "Checklist", + "Circuit open", + "Cloud", + "Contact", + "Dashboard", + "Flow", + "Flows", + "HTTP", + "Hit policy", + "Initiator", + "Label", + "Mail", + "Manager", + "OK", + "Partner", + "Process mining", + "Register", + "SLA", + "Score", + "Start", + "Status", + "Status schema", + "Status: {name}", + "Status: {status}", + "Store", + "Subsidies", + "Team", + "Tenant", + "Tenants", + "Trigger", + "Type", + "Urgent", + "Workflow", + "ZGW API Mapping", + "items", + "max {n}", + "{count} items", + "{from} – (no end)" + ] +} From 9b06d89d1fb584824476771aa33b8694216a62e8 Mon Sep 17 00:00:00 2001 From: Ruben van der Linde Date: Fri, 4 Sep 2026 10:04:57 +0200 Subject: [PATCH 2/2] chore(l10n): lower the schema-string baseline to what the catalogue now covers The Dutch-key pass covered 60 more schema strings than the baseline recorded. Leaving the ratchet high would let those 60 regress unnoticed. --- l10n/.schema-l10n-baseline.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/l10n/.schema-l10n-baseline.json b/l10n/.schema-l10n-baseline.json index 14c9ffff0..9b0d96b93 100644 --- a/l10n/.schema-l10n-baseline.json +++ b/l10n/.schema-l10n-baseline.json @@ -1,3 +1,3 @@ { - "uncovered": 2824 + "uncovered": 2764 }