feat(web): one date standard across the UI — "25 Qer 14:30"

Dates were a mix: catalog-formatted "25 Qershor 20:01" where screens used
formatRelativeDateTime, and browser-locale "7/6/2026, 9:34 AM" in ~20
places that called raw toLocaleString/-Date-/-Time-String. Unified:

- common.monthsShort in both catalogs (Jan/Shk/…/Qer/Korr/…/Dhj);
  formatDate ("25 Qer", year only when not current), formatDateTime
  ("25 Qer 14:30", optional seconds), formatClock ("HH:mm", 24h) in
  lib/format.ts. formatRelativeDateTime keeps Sot/Dje and switches its
  older-dates branch to the same short months.
- Every raw toLocale* DATE call swept: shifts X-report line, plan
  effective dates, sub version labels, drawer today feed, snapshot
  tooltips, device footer checkedAt, event-detail timestamp (keeps
  seconds — chain evidence), tariff composer active-since + version
  sidebar. Number toLocaleString (thousand separators) untouched.

The catalogs in this commit also carry the keys for the two follow-up
commits (fee breakdown, composer increment labels).

Claude-Session: https://claude.ai/code/session_01Xcm6ikLgGoCxxHrxtjkk5V
This commit is contained in:
2026-07-06 15:41:40 +02:00
parent 6cf3492bff
commit 5e1a885dcb
11 changed files with 96 additions and 22 deletions
+19 -1
View File
@@ -35,6 +35,8 @@ export const sq = {
"Nëntor",
"Dhjetor",
],
// Short month names — the UI-wide date standard ("25 Qer", "7 Korr").
monthsShort: ["Jan", "Shk", "Mar", "Pri", "Maj", "Qer", "Korr", "Gush", "Sht", "Tet", "Nën", "Dhj"],
},
auth: {
title: "Sistemi i Parkimit",
@@ -332,7 +334,13 @@ export const sq = {
bandDuration: "Kohëzgjatja e brezit",
hoursUnit: "orë",
egHours: "p.sh. 2",
pricePerIncrement: "Çmimi / interval (orë)",
pricePerIncrement: "Çmimi / interval (min)",
pricePerHour: "Çmimi / orë",
pricePerN: "Çmimi / {{min}} min",
modeFlatN: "Çmim fiks / {{min}} min",
perHourEquiv: "= {{amount}} / orë",
incrementWarning:
"Kujdes: intervali i faturimit është {{min}} min — çdo çmim më poshtë faturohet për çdo {{min}} minuta të filluara, JO për orë.",
thereafter: "më pas (i hapur)",
remove: "Hiq",
addBlock: "+ Shto bllok",
@@ -574,6 +582,16 @@ export const sq = {
graceExpires: "Afati skadon",
curve: "Kurba sipas kohëzgjatjes",
curveHint: "Tarifa nga hyrja për disa kohëzgjatje — shih ku rrafshohet kufiri ditor ose ndryshojnë dritaret.",
bd: {
title: "Si prodhohet shuma",
rounding: "{{raw}} min qëndrim → {{billed}} min të faturuara (njësi {{inc}} min)",
grace: "Falas — brenda minutave të hirit ({{min}} min)",
package: "paketë dritareje",
step: "Dita {{day}}: qëndrim deri në {{hours}}h — total",
stepRepeated: "Dita {{day}}: mbi shkallën më të lartë — totali ditor",
cap: "U zbatua kufiri ditor {{cap}} (dita {{day}})",
total: "Totali",
},
},
subs: {
title: "Abonimet",