Files
alva/felsokning/services/gemensam/sprak/en.mjs
T
Claude 995858174d Språk: engelska som källa, tio EU-språk, och en struktur som inte får översättas
Engelska är standard- och källspråk. Nio översättningar till: tyska,
franska, spanska, italienska, polska, nederländska, portugisiska,
rumänska och svenska.

Två sorters text, behandlade olika. GRÄNSSNITTSTEXT faller tillbaka på
engelska tyst — en engelsk knapp hos en tysk användare är irriterande
men ofarlig. METODIKINNEHÅLL gör det aldrig tyst: det märks som
ogranskat, med språket namngivet. Skälet står i modulhuvudet och är hela
poängen med uppdelningen: engelska SYNS som ett annat språk, medan en
felaktig översättning ser ut som en instruktion. En maskinöversatt
säkerhetsanvisning som ingen fackman läst är därför sämre än en engelsk.
Bara engelska och svenska är `granskat: true`.

Strukturen översätts inte. ALVA-SPEC-001 §2 slår fast att fasnamn och
statusord skrivs likadant i varje land — en revisor ska kunna läsa en
rumänsk och en tysk rapport utan att veta vilket språk verkstaden
arbetar på. Det hade gått att skriva in dem oöversatta i varje katalog
och låsa dem med ett test; det är svagare, för en översättare som ser
"Passed" i den polska filen översätter den, och testet blir en tvist i
stället för en regel. Nycklarna saknas i stället helt i
översättningarna och `t()` hämtar dem alltid ur engelskan. Då finns
ingenting att översätta fel.

Testet räknar inte bara nycklar — det går att få grönt genom att
kopiera engelskan till tio filer. Det prövar fyra saker: att katalogen
är komplett, att strukturen inte är översatt, att inget språk är
engelska i förklädnad (tak på 25 % identiska strängar), och att
variabelhållarna överlevde. {procent} som blir {percent} i den franska
filen ger inget fel — den ger "{percent} % de l'interface" på skärmen,
för alltid.

Mutationsprövat: en borttagen nyckel, en översatt statussträng, en
trasig variabelhållare och en polsk fil som var en kopia av engelskan
gav sex röda tester. Polskan har dessutom en egen anmärkning i
filhuvudet: {sprak} sätter in "Polski" i nominativ, och "w języku
Polski" är fel — meningarna är därför omskrivna så att namnet står som
etikett i parentes.

581 tester, typkontroll och lint rena.

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

149 lines
7.4 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.",
// ---- 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}",
};