i18n: add Swedish (sv)

Adds a complete Swedish catalog (2,961 messages) and registers sv in the
locale list, catalogs, language picker and package boundaries. Browsers set
to Swedish get it at once; ?lang=sv or the language picker choose it
elsewhere. Numbers and dates come out Swedish from Intl.

- docs/translations/sv.md: style (imperative without a pronoun, closed
  compounds, decimal comma, space before units and %) and the glossary.
- Entries that stay identical to English on purpose (codes such as HDG and
  FOV, product, place and source names) are listed under sv in
  same-as-english.json.
- The picker-order test places Svenska after Português.
- docs/CURRENT-STATE.md and docs/TRANSLATORS.md list the new language.

The translation comes from God's Eye View Sverige, a Swedish fork, and was
brought up to date with main (wildlife sightings, event age filter, traffic
styles and the rest).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Kaj ObstandClaude Opus 5.5 committed 2026-11-08 13:31:12 +01:00
1 parent 52187c91d1
commit fbd74bb80a
9 files changed
+3492 -3

No files matched your search

+2
View File
@@ -26,6 +26,7 @@ import it from './locales/it.json' with { type: 'json' };
import ja from './locales/ja.json' with { type: 'json' };
import pt from './locales/pt.json' with { type: 'json' };
import ru from './locales/ru.json' with { type: 'json' };
import sv from './locales/sv.json' with { type: 'json' };
import uk from './locales/uk.json' with { type: 'json' };
import zhCN from './locales/zh-CN.json' with { type: 'json' };
import zhHant from './locales/zh-Hant.json' with { type: 'json' };
@@ -39,6 +40,7 @@ const CATALOGS = Object.freeze({
ja,
pt,
ru,
sv,
uk,
'zh-CN': zhCN,
'zh-Hant': zhHant,
+2
View File
@@ -18,6 +18,7 @@ export const LOCALES = Object.freeze([
'ja',
'pt',
'ru',
'sv',
'uk',
'zh-CN',
'zh-Hant',
@@ -34,6 +35,7 @@ export const LOCALE_NAMES = Object.freeze({
ja: '日本語',
pt: 'Português (Brasil)',
ru: 'Русский',
sv: 'Svenska',
uk: 'Українська',
'zh-CN': '中文(简体)',
'zh-Hant': '中文(繁體)',
File diff suppressed because it is too large. Load diff
+163
View File
@@ -944,6 +944,169 @@
"iNaturalist",
"iNaturalist ↗"
],
"sv": [
"STATION",
"NAV",
"GEO",
"SAR",
"CRT",
"NVG",
"FLIR",
"REC",
"AIS: --",
"HDG {value}°",
"BRG {value}°",
"BRG —",
"CRS {value}°",
"Station {id}",
"Station",
"FOV {value}°",
"▲ {frp} MW",
"T−{time} · {mission}",
"{value} KM",
"{value} KM/S",
"STATUS · ",
"DESTINATION",
"STATUS",
"T minus {seconds}",
"Ambient",
"Blues",
"Country",
"Dance",
"Folk",
"Funk",
"House",
"Indie",
"Jazz",
"Latin",
"Metal",
"Oldies",
"Pop",
"Punk",
"R&B",
"Reggae",
"Rock",
"Soul",
"Techno",
"Trance",
"AIS: {name}",
"{type} SPD: {speed} HDG: {heading}",
"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",
"COCKPIT",
"Layout",
"Minimal",
"Scope",
"{speed} kn",
"NORMAL",
"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",
"Sentinel-2",
"Sentinel-2 via HLS",
"Landsat 8/9",
"Landsat 8/9 via HLS",
"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",
"FOV",
"ΔN",
"LIVE",
"OK",
"{value} KM/H",
"SQUAWK {code} · {status}",
"{aircraftClass} · {emergency} · {feedState}",
"S2 GhostMaps",
"NASA FIRMS · LIVE",
"feed status|live",
"DSP {count} blocks",
"Austin",
"San Francisco",
"New York",
"Tokyo",
"London",
"Paris",
"Dubai",
"Washington DC",
"Tallinn",
"Los Angeles",
"{category} ({count})",
"A / B",
"km/h",
"m/s",
"mph",
"hPa",
"ft",
"km",
"m",
"h",
"min",
"s",
"dB",
"STD",
"Plan",
"MINI",
"standard",
"mini",
"STANDARD",
"{items} {scope}",
"FT",
"MIL",
"MM",
"SIG",
"AUTO",
"FM MHZ",
"Cyber",
"Sonar",
"Cyan",
"≥ {value} MW",
"{count} {kind}",
"Be Whale Wise",
"Salish Sea",
"Acartia",
"CC BY 4.0",
"iNaturalist"
],
"uk": [
"AIS: --",
"AIS: {name}",
+4
View File
@@ -52,6 +52,7 @@ test('the current language comes first, the rest by their own names', () => {
'fr',
'it',
'pt',
'sv',
'ar',
'zh-CN',
'zh-Hant',
@@ -73,6 +74,7 @@ test('the current language comes first, the rest by their own names', () => {
'fr',
'it',
'pt',
'sv',
'ru',
'uk',
'ar',
@@ -96,6 +98,7 @@ test('the current language comes first, the rest by their own names', () => {
'fr',
'it',
'pt',
'sv',
'ru',
'uk',
'ar',
@@ -120,6 +123,7 @@ test('the current language comes first, the rest by their own names', () => {
'fr',
'it',
'pt',
'sv',
'ru',
'uk',
'zh-CN',