Files
alva/felsokning/services/gemensam/sprak/en.mjs
T
Claude be10704349 Grinden talar organisationens språk — engelska som standard
Kvalitetsgrinden formulerade sina hinder på svenska, hårdkodat. I en
produkt där engelska är standardspråket betyder det att en spärr kan
neka ett avslut på ett språk teknikern inte läser. Det är en spärr utan
väg förbi: teknikern ser att systemet vägrar men inte varför, och den
enda utvägen blir att ringa någon. Det är då regeln slutar vara en regel
och blir ett hinder man lär sig kringgå.

Varje hinder bär nu både nyckel och färdig text. Nyckeln därför att en
klient som byter språk ska kunna rendera om utan att fråga servern;
texten därför att ett hinder som hamnar i en logg eller en PDF måste gå
att läsa utan katalogen. Hindrets id och nyckel är språkoberoende — det
är bara texten som byter.

Språket är organisationens, inte användarens. En verkstad i Tyskland med
en polsk tekniker ska ha ett gemensamt dokumentationsspråk; rapporten
ska inte byta språk beroende på vem som råkade stänga ärendet. Det
lagras i organisationens inställningar, och en felstavad landskod blir
engelska i stället för ett fel — språkinställningen är en etikett och
ska inte hindra någon från att spara sina objekttyper.

SPARRFRAGOR bär nu nycklar i stället för svensk text. Testet som jämför
serverns lista med klientens jämför nycklar, så listorna kan fortfarande
inte glida isär.

Två tester prövade svenska ord i grindens utdata och gick sönder, vilket
var rätt av dem. De prövar nu nyckeln — texten är översatt och byter
språk med organisationen, och att pröva svenska ord hade gjort dem till
tester av vilket språk som råkar vara standard. Ett nytt test prövar det
som faktiskt betyder något: samma id, samma nyckel, olika text.

Integrationstestet följer språket hela vägen — organisationens
inställning, genom servern, ut i det 409-svar som nekar avslutet: engelska
som standard, tyska efter byte, engelska igen vid okänd kod.

582 tester, 186 integrationskontroller mot riktig Postgres, genomgång och
portalspärr gröna.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2026-08-06 16:36:53 +00:00

156 lines
7.8 KiB
JavaScript

// ALVA-SPEC-060 · English — the source language.
//
// Every key that exists lives here first. A key added to another
// catalogue but not to this one is not a translation; it is a string
// with no original, and the test refuses it.
//
// ---- Naming --------------------------------------------------------------
//
// `område.sak` — the prefix says where the string is used, so a
// translator can read the file in the order the user meets it rather
// than alphabetically.
//
// ---- Tone ---------------------------------------------------------------
//
// The status language of ALVA-SPEC-001 §7 applies to every string here:
// the system reports state, it does not address the user. "Verification
// passed", not "Well done!". A translator who makes it friendlier has
// made it wrong.
export const EN = {
// ---- Phases (ALVA) ----------------------------------------------------
"fas.analys": "Analysis",
"fas.lokalisering": "Localization",
"fas.verifiering": "Verification",
"fas.atgard": "Action",
// ---- Status ------------------------------------------------------------
"status.pending": "Pending",
"status.in_progress": "In progress",
"status.complete": "Complete",
"status.passed": "Passed",
"status.failed": "Failed",
"status.blocked": "Blocked",
"status.incomplete": "Incomplete",
"status.not_applicable": "Not applicable",
// ---- Evidence grades ----------------------------------------------------
"evidens.E1": "Observation",
"evidens.E2": "Photograph",
"evidens.E3": "Video with sound",
"evidens.E4": "Measurement, calibrated instrument",
"evidens.E5": "Document",
"evidens.ej_kalibrerad": "calibration missing or expired",
"evidens.ej_angivet": "instrument not stated",
"evidens.ej_fotograferad": "entered, not photographed",
// ---- The quality gate ---------------------------------------------------
//
// These are the highest-stakes strings in the product. Each one is the
// reason a technician cannot close a case, so it has to say what is
// missing — not that something is missing.
"grind.objekt": "Vehicle or object identification verified",
"grind.historik": "Vehicle history checked or justified",
"grind.historik.nekad": "A declined history check requires a stated reason.",
"grind.historik.saknas": "No history check documented.",
"grind.matarstallning.ingaende": "Incoming odometer reading photographed",
"grind.matarstallning.utgaende": "Outgoing odometer reading photographed",
"grind.matarstallning.saknas": "No odometer reading documented.",
"grind.matarstallning.ej_foto":
"The reading is entered but not photographed. Photograph the odometer, or state why that is not possible.",
"grind.reproducering": "Symptom verification: reproduced, or documented as not reproducible",
"grind.felorsak": "Root cause analysis documented",
"grind.atgard": "Corrective action documented or justified",
"grind.atgard.saknas": "Neither a performed action nor a reason for its absence is documented.",
"grind.kundbeslut": "Customer decision on the proposal recorded",
"grind.kundbeslut.avbojt": "Work performed despite a declined proposal",
"grind.kundbeslut.avbojt.detalj": "The customer declined the proposal, but work has been documented as performed.",
"grind.kvalitetskontroll": "Quality check performed — symptom verified",
"grind.kontroller": "Methodology checks: evidence, or a documented exemption",
"grind.foton": "Photographs present for checks that require them",
"grind.slutsats": "Closing statement (ALVA-RULE-200)",
"grind.hogvolt.behorighet": "High-voltage authorisation confirmed",
"grind.hogvolt.spanningslos": "Vehicle de-energised per the manufacturer's procedure",
"grind.regelpaket": "Rule package signature does not match — closing blocked.",
"grind.regelpaket.osignerat": "An external rule package is in use without a signature — closing blocked.",
"grind.evidens": "Evidence above E0",
"grind.evidens.saknas": "No evidence of any kind is present in the log.",
"grind.foton.detalj": "{kontroller} checks require a photograph, {foton} photographs in the log.",
"grind.sparr.ej_uppfyllt": "The safety requirement is not met.",
"grind.arendetyp.okant": "Unknown requirement in the rule package: {krav}",
"grind.arendetyp.krav": "Requirement for this case type: {krav}",
// ---- The closing statement (ALVA-RULE-200) ------------------------------
"slutsats.rubrik": "Closing statement",
"slutsats.konstaterat": "What was established",
"slutsats.evidens": "Which evidence carries it",
"slutsats.avfardat": "Which hypotheses were dismissed, and why",
"slutsats.osakert": "What remains uncertain",
"slutsats.ickesvar": "That is not an answer. State what was established and which evidence carries it.",
// ---- Case flow -----------------------------------------------------------
"arende.nytt": "New case",
"arende.oppna": "Open cases",
"arende.avslutade": "Closed cases",
"arende.avsluta": "Close case",
"arende.avslutat": "Case closed",
"arende.kan_ej_avslutas": "The case cannot be closed yet",
"arende.hinder": "Outstanding before closing",
"arende.overlamna": "Hand over",
"arende.ansvarig": "Responsible",
// ---- Pre-diagnostics ------------------------------------------------------
"pre.rubrik": "Pre-diagnostics — before the work begins",
"pre.historik.fraga": "Has the vehicle's history been checked? (previous work, recurring faults, TSBs, campaigns)",
"pre.historik.ja": "Yes — checked",
"pre.historik.nej": "No",
"pre.historik.skal": "Reason the history was not checked (required)",
"pre.historik.relevant": "Relevant previous work (optional — causal chain)",
"pre.matarstallning": "Odometer reading",
"pre.fotografera": "Photograph the instrument panel",
"pre.felbeskrivning": "Customer's description verified",
"pre.observationer": "Anything else on receipt?",
// ---- Common actions --------------------------------------------------------
"handling.spara": "Save",
"handling.avbryt": "Cancel",
"handling.fortsatt": "Continue",
"handling.tillbaka": "Back",
"handling.dokumentera": "Document",
"handling.fotografera": "Photograph",
"handling.spela_in": "Record video",
"handling.undantag": "Document an exemption",
"handling.undantag.skal": "Reason for the exemption (required)",
"handling.exportera": "Export",
"handling.skriv_ut": "Print",
// ---- Measurement -------------------------------------------------------------
"matning.varde": "Value",
"matning.enhet": "Unit",
"matning.matdon": "Instrument",
"matning.matdon.valj": "Select instrument",
"matning.matdon.okant": "Unknown instrument. Register it before saving the measurement.",
"matning.kalibrerad_till": "Calibrated until",
// ---- Report --------------------------------------------------------------------
"rapport.rubrik": "Case report",
"rapport.sammanfattning": "Summary",
"rapport.evidens": "Evidence",
"rapport.atgarder": "Actions",
"rapport.harledd": "Generated from the case log. Observations and measurements are reported without conclusions that lack support.",
// ---- Language ----------------------------------------------------------------------
"sprak.valj": "Language",
"sprak.granskat": "Reviewed",
"sprak.ogranskat": "Not reviewed",
"sprak.tackning": "{procent} % of the interface",
// Shown when the methodology content has not been reviewed by a
// specialist in the user's language. Deliberately specific: a general
// disclaimer is read by nobody.
"metodik.ogranskad":
"Procedure text has not been reviewed by a technical specialist in {sprak}. Steps and checks are shown in English where no reviewed translation exists — an unreviewed translation of a safety instruction is worse than a foreign-language one, because it does not look foreign.",
"metodik.pa_engelska": "Shown in English — no reviewed translation in {sprak}",
};