From cdccf88bbba3a3926213d54eb33d1222775e8117 Mon Sep 17 00:00:00 2001 From: Kaj Obst <217931875+Kajjan7610@users.noreply.github.com> Date: Mon, 9 Nov 2026 19:25:24 +0100 Subject: [PATCH] i18n(sv): address review (export buttons, singular, consistent terms) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - EXP. {slot} and EXPORT so the Recent Imagery export buttons fit and A and B read apart; EXPORT listed as same-as-English. - {count} HÖRT / hört for one aircraft; the plural rule in sv.md no longer lists HÖRDA. - INTE FARA ÖVER throughout; VÄ/HÖ for left/right (V is west on the compass); STYRD KURS vs KURS Ö. GRUND; MIK in the first-run tip. - Label-first counts for sightings and standby cameras; neuter audio states; OSÄKER on chip and status line; KN for knots; the ellipsis character; Ladda ned and VÄNTLÄGE throughout; Olagligt ingripande; FÖRHANDSVY for the preview flag and authoring heading. - sv.json in the format scope; Swedish in language-code order in TRANSLATORS.md; glossary row reduced to incident → händelse; 29 letterless entries dropped from same-as-english.json. Co-Authored-By: Claude Opus 5.5 --- docs/TRANSLATORS.md | 4 +-- docs/translations/sv.md | 4 +-- scripts/format-scope.json | 1 + src/i18n/locales/sv.json | 50 +++++++++++++++++------------------ src/i18n/same-as-english.json | 32 ++-------------------- 5 files changed, 32 insertions(+), 59 deletions(-) diff --git a/docs/TRANSLATORS.md b/docs/TRANSLATORS.md index 36c37b62f..db196fb88 100644 --- a/docs/TRANSLATORS.md +++ b/docs/TRANSLATORS.md @@ -1,6 +1,6 @@ # Translating God's Eye View -Shipped languages: **English** (source and fallback), **Arabic** (`ar`), **German** (`de`), **Spanish** (`es`), **French** (`fr`), **Italian** (`it`), **Japanese** (`ja`), **Brazilian Portuguese** (`pt`), **Russian** (`ru`), **Ukrainian** (`uk`), **Simplified Chinese** (`zh-CN`), **Traditional Chinese** (`zh-Hant`) and **Swedish** (`sv`). +Shipped languages: **English** (source and fallback), **Arabic** (`ar`), **German** (`de`), **Spanish** (`es`), **French** (`fr`), **Italian** (`it`), **Japanese** (`ja`), **Brazilian Portuguese** (`pt`), **Russian** (`ru`), **Swedish** (`sv`), **Ukrainian** (`uk`), **Simplified Chinese** (`zh-CN`) and **Traditional Chinese** (`zh-Hant`). ## How it works @@ -63,4 +63,4 @@ These are contracts, not copy: layer ids and registry keys, status enums and oth ## Language notes -Each language keeps its glossary, plural forms, units and style in its own file, `docs/translations/.md`: [Arabic](./translations/ar.md), [German](./translations/de.md), [Spanish](./translations/es.md), [French](./translations/fr.md), [Italian](./translations/it.md), [Japanese](./translations/ja.md), [Brazilian Portuguese](./translations/pt.md), [Russian](./translations/ru.md), [Ukrainian](./translations/uk.md), [Simplified Chinese](./translations/zh-CN.md), [Traditional Chinese](./translations/zh-Hant.md), [Swedish](./translations/sv.md). Read it before translating, and add a term there when you settle on one. +Each language keeps its glossary, plural forms, units and style in its own file, `docs/translations/.md`: [Arabic](./translations/ar.md), [German](./translations/de.md), [Spanish](./translations/es.md), [French](./translations/fr.md), [Italian](./translations/it.md), [Japanese](./translations/ja.md), [Brazilian Portuguese](./translations/pt.md), [Russian](./translations/ru.md), [Swedish](./translations/sv.md), [Ukrainian](./translations/uk.md), [Simplified Chinese](./translations/zh-CN.md), [Traditional Chinese](./translations/zh-Hant.md). Read it before translating, and add a term there when you settle on one. diff --git a/docs/translations/sv.md b/docs/translations/sv.md index 13d557e96..12d3a8b80 100644 --- a/docs/translations/sv.md +++ b/docs/translations/sv.md @@ -32,7 +32,7 @@ A `tn()` entry needs two forms. `Intl.PluralRules('sv')` picks: | `one` | 1 | 1 kamera | | `other` | everything else: 0, 2, 1,5… | 3 kameror | -Abbreviated units and codes do not change: «{count} MEDD.», «{count} HÖRDA». +Abbreviated units and codes do not change: «{count} MEDD.». ## Glossary @@ -81,4 +81,4 @@ Abbreviated units and codes do not change: «{count} MEDD.», «{count} HÖRDA» | click / tap / press a key | klicka / tryck / tryck på tangenten | | card / label (on the map) / clear (layers) | kort / etikett / stäng av | | frame (weather, video) / image | bildruta / bild | -| road condition / incident / roadwork | väglag / händelse / vägarbete | +| incident | händelse | diff --git a/scripts/format-scope.json b/scripts/format-scope.json index 2bb7a20ae..ca69f6195 100644 --- a/scripts/format-scope.json +++ b/scripts/format-scope.json @@ -1295,6 +1295,7 @@ "src/i18n/locales/ja.json", "src/i18n/locales/pt.json", "src/i18n/locales/ru.json", + "src/i18n/locales/sv.json", "src/i18n/locales/uk.json", "src/i18n/locales/zh-CN.json", "src/i18n/locales/zh-Hant.json", diff --git a/src/i18n/locales/sv.json b/src/i18n/locales/sv.json index 35b89bdcd..081afdf7d 100644 --- a/src/i18n/locales/sv.json +++ b/src/i18n/locales/sv.json @@ -132,7 +132,7 @@ "⚠️ Not renting": "⚠️ Ingen uthyrning", "⚠️ Not returning": "⚠️ Ingen återlämning", "HDG {value}° (ESTIMATED)": "HDG {value}° (UPPSKATTAD)", - "{count} CAMERAS STANDING BY · NO CAMERA SELECTED · CLICK A CAMERA TO ACTIVATE": "{count} KAMEROR I BEREDSKAP · INGEN KAMERA VALD · KLICKA PÅ EN KAMERA FÖR ATT AKTIVERA DEN", + "{count} CAMERAS STANDING BY · NO CAMERA SELECTED · CLICK A CAMERA TO ACTIVATE": "KAMEROR I BEREDSKAP: {count} · INGEN KAMERA VALD · KLICKA PÅ EN KAMERA FÖR ATT AKTIVERA DEN", "No cameras available in catalog.": "Inga kameror finns i katalogen.", "{city} CCTV": "CCTV {city}", "FOV {value}°": "FOV {value}°", @@ -415,8 +415,8 @@ "{cohort}, Unavailable": "{cohort}, otillgänglig", "AHEAD": "RAKT FRAM", "{side} {angle}": "{side} {angle}", - "L": "V", - "R": "H", + "L": "VÄ", + "R": "HÖ", "{count} INPUTS UNKNOWN · NOT AN ALL-CLEAR": { "one": "{count} KÄLLA OKÄND · INTE FARA ÖVER", "other": "{count} KÄLLOR OKÄNDA · INTE FARA ÖVER" @@ -474,7 +474,7 @@ "Restore real aircraft": "Återställ verkligt flygplan", "Reclassify as TR-3B": "Klassa om som TR-3B", "TRACK ACQUIRED": "SPÅR LÅST", - "{label} · COURSE {heading}°": "{label} · KURS {heading}°", + "{label} · COURSE {heading}°": "{label} · KURS Ö. GRUND {heading}°", "Context could not restore every layer; try again": "Läget ”Kontext” kunde inte återställa alla lager – försök igen", "No selected data layers": "Inga valda datalager", "{count} data layers could not be cleared": { @@ -527,7 +527,7 @@ "{state} · {source} · {ago} · retrying in {seconds}s": "{state} · {source} · {ago} · nytt försök om {seconds} s", "{state} · {source} · {ago}": "{state} · {source} · {ago}", "{source} · {ago}": "{source} · {ago}", - "UNCERTAIN": "OKLART", + "UNCERTAIN": "OSÄKER", "{name}: {state}": "{name}: {state}", "{count}s ago": "{count} s sedan", "CONNECTING": "ANSLUTER", @@ -740,7 +740,7 @@ "Keep location tray open": "Håll platsfältet öppet", "Search any location": "Sök valfri plats", "Search location by name or coordinates": "Sök plats efter namn eller koordinater", - "Search any location...": "Sök valfri plats ...", + "Search any location...": "Sök valfri plats …", "WEATHER": "VÄDER", "CONTEXT": "KONTEXT", "Context mode": "Kontextläge", @@ -816,7 +816,7 @@ "Sharpen intensity": "Skärpestyrka", "EXIT CLEAN VIEW": "LÄMNA RENT GRÄNSSNITT", "Return UI controls": "Visa gränssnittet igen", - "Initializing photorealistic world...": "Initierar fotorealistisk värld ...", + "Initializing photorealistic world...": "Initierar fotorealistisk värld …", "DATA LAYERS": "DATALAGER", "NEAREST": "NÄRMASTE", "CCTV camera": "CCTV-kamera", @@ -859,7 +859,7 @@ "Begin with a clean globe": "Börja med en tom glob", "Don't show this again": "Visa inte igen", "ESC to dismiss": "ESC för att stänga", - "Tip: the GEV MIC button in the dock lets you talk to the map.": "Tips: med knappen GEV MIC i dockan går det att prata med kartan.", + "Tip: the GEV MIC button in the dock lets you talk to the map.": "Tips: med knappen MIK i dockan går det att prata med kartan.", "Pick a shape, then click the map.": "Välj en form och klicka sedan på kartan.", "Enter to place the pin, Esc to cancel.": "Enter placerar nålen, Esc avbryter.", "Click where the pin goes.": "Klicka där nålen ska sitta.", @@ -892,7 +892,7 @@ "Business jet": "Affärsjet", "Drone": "Drönare", "General emergency": "Allmänt nödläge", - "Unlawful interference": "Olaglig inblandning", + "Unlawful interference": "Olagligt ingripande", "Radio failure": "Radiobortfall", "Downed aircraft": "Nedstörtat luftfartyg", "Minimum fuel": "Minimum fuel (låg bränslemängd)", @@ -2097,7 +2097,7 @@ "{scope} · INSTALLATIONS {coverage}": "{scope} · ANLÄGGNINGAR {coverage}", "MILITARY FEED OFF · PARTIAL PICTURE": "MILITÄRFLÖDET AV · OFULLSTÄNDIG BILD", "FLIGHTS FEED OFF · PARTIAL PICTURE": "FLYGFLÖDET AV · OFULLSTÄNDIG BILD", - "NEARBY AIRCRAFT INCOMPLETE · NOT AN ALL-CLEAR": "FLYGPLAN I NÄRHETEN OFULLSTÄNDIGA · INTE FRITT FRAM", + "NEARBY AIRCRAFT INCOMPLETE · NOT AN ALL-CLEAR": "FLYGPLAN I NÄRHETEN OFULLSTÄNDIGA · INTE FARA ÖVER", "SQUAWK {code} · {status}": "SQUAWK {code} · {status}", "ADS-B PRIORITY · {status}": "ADS-B-PRIORITET · {status}", "ADS-B EMERGENCY · {status}": "ADS-B-NÖDLÄGE · {status}", @@ -2171,10 +2171,10 @@ "TUNING": "STÄLLER IN", "STREAMING": "STRÖMMAR", "UNSUPPORTED": "STÖDS INTE", - "idle": "inaktiv", + "idle": "inaktivt", "running": "körs", - "suspended": "pausad", - "closed": "stängd", + "suspended": "pausat", + "closed": "stängt", "feed status|live": "live", "feed status|stale": "inaktuell", "feed status|unreachable": "går inte att nå", @@ -2193,7 +2193,7 @@ "audio signal --": "ljudsignal --", "audio {state}": "ljud {state}", "{count} HEARD": { - "one": "{count} HÖRDA", + "one": "{count} HÖRT", "other": "{count} HÖRDA" }, "DISCONNECT": "KOPPLA FRÅN", @@ -2292,7 +2292,7 @@ "Forget the box and its images": "Glöm området och dess bilder", "START HERE": "BÖRJA HÄR", "Checking": "Kontrollerar", - "PREVIEW": "FÖRHANDSVISNING", + "PREVIEW": "FÖRHANDSVY", "Newest day with imagery for this box": "Senaste dag med bilder för området", "SHOW": "VISA", "Pin {day} as {slot}": "Fäst {day} som {slot}", @@ -2311,8 +2311,8 @@ "Source off": "Källa av", "Unpin {slot}": "Lossa {slot}", "Unpin the image": "Lossa bilden", - "EXPORT {slot}": "EXPORTERA {slot}", - "EXPORT": "EXPORTERA", + "EXPORT {slot}": "EXP. {slot}", + "EXPORT": "EXPORT", "Download {slot} as a PNG": "Ladda ned {slot} som PNG", "Download the image as a PNG": "Ladda ned bilden som PNG", "Box {width} × {height} km": "Område {width} × {height} km", @@ -2412,7 +2412,7 @@ }, "Loading {feeds}": "Laddar {feeds}", "{count} heard": { - "one": "{count} hörda", + "one": "{count} hört", "other": "{count} hörda" }, "USB {rate} msg/s": "USB {rate} medd./s", @@ -2947,11 +2947,11 @@ "Stop playback (Esc)": "Stoppa uppspelningen (Esc)", "Play the shot after the selected one, moving on to the next scene when needed": "Spela upp tagningen efter den valda och gå vidare till nästa scen vid behov", "SAVE & SHARE": "SPARA & DELA", - "Download every scene as a JSON file you can import later": "Ladda ner alla scener som en JSON-fil som kan importeras senare", + "Download every scene as a JSON file you can import later": "Ladda ned alla scener som en JSON-fil som kan importeras senare", "Load scenes from an exported JSON file": "Läs in scener från en exporterad JSON-fil", - "Download the timing log of the last play": "Ladda ner tidsloggen från senaste uppspelningen", + "Download the timing log of the last play": "Ladda ned tidsloggen från senaste uppspelningen", "Edit anchors, data packs and shot details": "Redigera ankare, datapaket och tagningsdetaljer", - "Download this scene as JSON or an asset bundle": "Ladda ner scenen som JSON eller som resurspaket", + "Download this scene as JSON or an asset bundle": "Ladda ned scenen som JSON eller som resurspaket", "Left panels": "Vänstra paneler", "Right panels": "Högra paneler", "CONFIRMED": "BEKRÄFTAD", @@ -3163,7 +3163,7 @@ "Photo of {name}": "Foto av {name}", "Acartia": "Acartia", "CC BY 4.0": "CC BY 4.0", - "{count} sightings in view": "{count} observationer i vyn", + "{count} sightings in view": "Observationer i vyn: {count}", "Close sighting": "Stäng observationen", "Wildlife observed within 48 h (whales 7 d). Color and badge glyph show the taxon group. Sensitive species are shown only as 0.2° cells; Salish Sea marine mammal reports via Acartia are rounded to 0.01°. Not a census.": "Vilda djur observerade de senaste 48 h (valar 7 d). Färg och symbol visar artgruppen. Känsliga arter visas bara som rutor på 0,2°; rapporter om marina däggdjur i Salish Sea via Acartia avrundas till 0,01°. Ingen inventering.", "Open {name} on iNaturalist": "Öppna {name} på iNaturalist", @@ -3213,7 +3213,7 @@ "{range} NM": "{range} NM", "AIS DESTINATION · CREW REPORTED": "AIS-DESTINATION · ANGIVEN AV BESÄTTNINGEN", "{label} · NADIR VIEW": "{label} · NADIRVY", - "SITES STANDBY": "PLATSER I VÄNTELÄGE", + "SITES STANDBY": "PLATSER I VÄNTLÄGE", "ENABLE MAPPED INSTALLATIONS FOR SITE PINGS": "SLÅ PÅ ”KARTLAGDA ANLÄGGNINGAR” FÖR PLATSPINGAR", "Unnamed site": "Namnlös plats", "OFF-NADIR {angle}°": "OFF-NADIR {angle}°", @@ -3231,7 +3231,7 @@ "{direction} {angle}°": "{direction} {angle}°", "OFF-NADIR {angle}° · {offset}": "OFF-NADIR {angle}° · {offset}", "BRIDGE": "BRYGGA", - "{label} · HEADING {heading}°": "{label} · KURS {heading}°", + "{label} · HEADING {heading}°": "{label} · STYRD KURS {heading}°", "{label} · NO HEADING": "{label} · INGEN KURS", "Place names": "Ortnamn", "Ship bridge view": "Fartygets bryggvy", @@ -3244,7 +3244,7 @@ "COURSE HOLD · AIS": "KURS ÖVER GRUND · AIS", "HEADING HOLD · AIS": "STYRD KURS · AIS", "NO HEADING · AIS": "INGEN KURS · AIS", - "SPEED OVER GROUND · KTS": "FART ÖVER GRUND · KNOP", + "SPEED OVER GROUND · KTS": "FART ÖVER GRUND · KN", "BRIDGE VIEW": "BRYGGVY", "Look ahead: turn the bridge view back to the bow": "Titta framåt: vrid bryggvyn tillbaka mot fören", "Look ahead (Home or 0)": "Titta framåt (Home eller 0)", diff --git a/src/i18n/same-as-english.json b/src/i18n/same-as-english.json index 4f09c40e8..c96b35a40 100644 --- a/src/i18n/same-as-english.json +++ b/src/i18n/same-as-english.json @@ -1042,7 +1042,6 @@ "Station", "FOV {value}°", "▲ {frp} MW", - "T−{time} · {mission}", "{value} KM", "{value} KM/S", "STATUS · ", @@ -1063,7 +1062,6 @@ "Oldies", "Pop", "Punk", - "R&B", "Reggae", "Rock", "Soul", @@ -1074,23 +1072,12 @@ "POS: LIVE", "POS: {time}Z", "Bloom", - "{domain} · {age}", - "{cohort} · {contact}", - "{side} {angle}", "DEST {bearing}", "Normal", "Anime", "Noir", - "{aircraftClass} · {distance}", "CCTV", "Radio", - "{state} · {source}", - "{state} · {source} · {detail}", - "{source} · {loadingLabel}", - "{state} · {source} · {detail} · {ago}", - "{state} · {source} · {ago}", - "{source} · {ago}", - "{name}: {state}", "DEST ---°", "TEMP", "RADIO", @@ -1103,11 +1090,8 @@ "ANIME", "NOIR", "view band|GLOBAL", - "{distance} · {duration} · {mode}", - "S2 · {name}", "1090 MHz", "978 MHz UAT", - "V/S {rate}", "POSITION {age}", "fire behavior|Minimal", "{county} County", @@ -1118,14 +1102,10 @@ "Google Street View", "GOOGLE STREET VIEW", "Hybrid", - "{state} · {time} · {lag}", - "{state}: {time}", "RADAR · {units}", "REGION", "FILTER", "{source} HTTP {status}", - "N", - "S", "WHOT/BHOT", "Ironbow", "HDG", @@ -1135,7 +1115,6 @@ "OK", "{value} KM/H", "SQUAWK {code} · {status}", - "{aircraftClass} · {emergency} · {feedState}", "S2 GhostMaps", "NASA FIRMS · LIVE", "feed status|live", @@ -1150,18 +1129,12 @@ "Washington DC", "Tallinn", "Los Angeles", - "{category} ({count})", - "A / B", "km/h", - "m/s", "mph", "hPa", "ft", "km", - "m", - "h", "min", - "s", "dB", "STD", "Plan", @@ -1169,7 +1142,6 @@ "standard", "mini", "STANDARD", - "{items} {scope}", "FT", "MIL", "MM", @@ -1180,7 +1152,6 @@ "Sonar", "Cyan", "≥ {value} MW", - "{count} {kind}", "Be Whale Wise", "Salish Sea", "Acartia", @@ -1199,7 +1170,8 @@ "NADIR", "SENSOR", "1 min/s", - "Live" + "Live", + "EXPORT" ], "uk": [ "AIS: --",