fix: show one clock convention in English on the panel
The labels this application writes itself already read "6:30 pm", while a translated notice kept whatever the French said, so the screen could show "Closes at 6:30 pm" above "Delayed opening at 14:00". Two conventions side by side on one panel. The conversion is done in code, not by the prompt. The model is still told to leave times alone — reading a clock and rewriting it is deterministic work, and asking a language model to do it introduces a failure mode for no benefit. Only HH:mm is touched, never a time that already carries am or pm, so the pass is idempotent and years, dates written 20/07 and percentages are left alone. Hand-written translations are not rewritten: that wording was somebody's explicit choice. Verified against the live service: "Ouvert 10:00 – 13:00 puis 14:00 – 18:30" now comes back as "Open 10:00 am – 1:00 pm then 2:00 pm – 6:30 pm". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012cSY9pVhZmJUKNN7wf1Myd
This commit is contained in:
@@ -97,6 +97,26 @@ export function formatTimeEn(time: string): string {
|
||||
return `${hour12}:${minute.toString().padStart(2, '0')} ${suffix}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rewrites 24-hour times in English text to the 12-hour clock.
|
||||
*
|
||||
* The labels this application generates itself already read "6:30 pm", while a
|
||||
* translated message keeps whatever the source said, because the prompt tells
|
||||
* the model to leave times alone — which it should, since converting a clock
|
||||
* is not a job for a language model. Doing it here instead keeps both
|
||||
* conventions from appearing side by side on the same panel.
|
||||
*
|
||||
* Only `HH:mm` is touched, and never a time that already carries am/pm, so
|
||||
* years and dates written 20/07 are left alone.
|
||||
*/
|
||||
export function toEnglishClock(text: string): string {
|
||||
return text.replace(
|
||||
/\b([01]?\d|2[0-3]):([0-5]\d)\b(?!\s*(?:am|pm|AM|PM))/g,
|
||||
(match, hours: string, minutes: string) =>
|
||||
formatTimeEn(`${hours.padStart(2, '0')}:${minutes}`) ?? match,
|
||||
);
|
||||
}
|
||||
|
||||
export function formatNextChangeFr(change: NextChange | null, today: CivilDate): string {
|
||||
if (!change) {
|
||||
return '';
|
||||
|
||||
Reference in New Issue
Block a user