refactor(i18n): split locale files into per-namespace modules (Phase K) (#688)

Each src/locales/<lang>.ts (~1800 LOC) becomes a folder src/locales/<lang>/
with one module per i18n namespace (44 each) plus an index.ts barrel that
reassembles <lang>Translation in the original key order.

Mechanical, script-driven split with a JSON round-trip check: every
locale object is byte-identical to its pre-split form. i18n.ts is
unchanged — './locales/<lang>' now resolves to the folder index.

The per-namespace settings.ts files land ~440-460 LOC; a single i18n
namespace is the natural, non-arbitrary split unit for a flat string
table, so they are intentionally left whole.
This commit is contained in:
Frank Stellmacher
2026-05-14 14:06:31 +02:00
committed by GitHub
parent ec112922a2
commit 2409a1fec8
414 changed files with 17424 additions and 16624 deletions
+65
View File
@@ -0,0 +1,65 @@
export const statistics = {
title: 'Statistiken',
recentlyPlayed: 'Zuletzt gehört',
mostPlayed: 'Meistgespielte Alben',
highestRated: 'Höchstbewertete Alben',
genreDistribution: 'Genre-Verteilung (Top 20)',
loadMore: 'Mehr laden',
statArtists: 'Künstler',
statArtistsTooltip: 'Nur Album-Künstler — Künstler, die ausschließlich als Track-Künstler vorkommen (Featured, Gast usw.) und kein eigenes Album haben, werden nicht gezählt.',
statAlbums: 'Alben',
statSongs: 'Songs',
statGenres: 'Genres',
statPlaytime: 'Gesamtspielzeit',
genreInsights: 'Genre-Einblicke',
formatDistribution: 'Format-Verteilung',
formatSample: 'Stichprobe von {{n}} Titeln',
computing: 'Wird berechnet…',
genreSongs: '{{count}} Songs',
genreAlbums: '{{count}} Alben',
recentlyAdded: 'Neu hinzugefügt',
decadeDistribution: 'Alben nach Jahrzehnt',
decadeAlbums_one: '{{count}} Album',
decadeAlbums_other: '{{count}} Alben',
decadeUnknown: 'Unbekannt',
lfmTitle: 'Last.fm Statistiken',
lfmTopArtists: 'Top-Künstler',
lfmTopAlbums: 'Top-Alben',
lfmTopTracks: 'Top-Titel',
lfmPlays: '{{count}} Plays',
lfmPeriodOverall: 'Gesamt',
lfmPeriod7day: '7 Tage',
lfmPeriod1month: '1 Monat',
lfmPeriod3month: '3 Monate',
lfmPeriod6month: '6 Monate',
lfmPeriod12month: '12 Monate',
lfmNotConnected: 'Verbinde Last.fm in den Einstellungen, um deine Statistiken zu sehen.',
lfmRecentTracks: 'Zuletzt gescrobbelt',
lfmNowPlaying: 'Läuft gerade',
lfmJustNow: 'gerade eben',
lfmMinutesAgo: 'vor {{n}} Min.',
lfmHoursAgo: 'vor {{n}} Std.',
lfmDaysAgo: 'vor {{n}} Tagen',
topRatedSongs: 'Bestbewertete Songs',
topRatedArtists: 'Bestbewertete Künstler',
noRatedSongs: 'Noch keine bewerteten Songs. Songs in Album- oder Playlist-Ansicht bewerten.',
noRatedArtists: 'Noch keine bewerteten Künstler.',
exportShare: 'Teilen',
exportTitle: 'Top-Alben teilen',
exportSubtitle: 'Ein teilbares Bild deiner meistgespielten Alben erstellen.',
exportFormat: 'Format',
exportFormatStory: 'Story',
exportFormatSquare: 'Quadrat',
exportFormatTwitter: 'Twitter-Card',
exportGrid: 'Raster',
exportGridLabel: '{{n}}×{{n}}',
exportPreview: 'Vorschau',
exportGenerate: 'Erstellen',
exportSave: 'Bild speichern…',
exportCancel: 'Abbrechen',
exportFooterLabel: 'Top-Alben',
exportNotEnough: 'Für ein {{n}}×{{n}}-Raster braucht es mindestens {{count}} Alben in der Library.',
exportSaving: 'Speichere…',
exportSaved: 'Gespeichert.',
exportSaveFailed: 'Bild konnte nicht gespeichert werden.',
};