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: 'Statistici',
recentlyPlayed: 'Redate recent',
mostPlayed: 'Cele mai Redate Albume',
highestRated: 'Cele mai Votate Albume',
genreDistribution: 'Distribuția de Genuri (Top 20)',
loadMore: 'Încearcă mai mult',
statArtists: 'Artiști',
statArtistsTooltip: 'Doar albume de artiști — artiștii care apar doar ca un artist la nivel de piesă (prezentate, oaspete, etc.) fără albumul lor nu sunt incluși.',
statAlbums: 'Albume',
statSongs: 'Piese',
statGenres: 'Genuri',
statPlaytime: 'Timpul total de redare',
genreInsights: 'Perspectivele Genurilor',
formatDistribution: 'Distribuția Formatului',
formatSample: 'Eșantion de {{n}} piese',
computing: 'Se calculează…',
genreSongs: '{{count}} Piese',
genreAlbums: '{{count}} Albume',
recentlyAdded: 'Adăugate recent',
decadeDistribution: 'Albume după Deceniu',
decadeAlbums_one: '{{count}} Album',
decadeAlbums_other: '{{count}} Albume',
decadeUnknown: 'Necunoscut',
lfmTitle: 'Statistici Last.fm',
lfmTopArtists: 'Artiști de top',
lfmTopAlbums: 'Albume de top',
lfmTopTracks: 'Piese de top',
lfmPlays: '{{count}} redări',
lfmPeriodOverall: 'Din tot timpul',
lfmPeriod7day: '7 Zile',
lfmPeriod1month: '1 Lună',
lfmPeriod3month: '3 Luni',
lfmPeriod6month: '6 Luni',
lfmPeriod12month: '12 Luni',
lfmNotConnected: 'Conectează Last.fm în Setări pentru a îți vedea statisticile.',
lfmRecentTracks: 'Scrobble-uri Recente',
lfmNowPlaying: 'Now Playing',
lfmJustNow: 'tocmai acum',
lfmMinutesAgo: 'acum {{n}}m',
lfmHoursAgo: 'acum {{n}}h',
lfmDaysAgo: 'acum {{n}}d',
topRatedSongs: 'Cele mai bine cotate Piese',
topRatedArtists: 'Cei mai bine cotați Artiști',
noRatedSongs: 'Nicio piesă evaluată încă. Evaluează piese în afișajul de album sau playlist.',
noRatedArtists: 'Niciun artist evaluat încă.',
exportShare: 'Distribuie',
exportTitle: 'Distribuie Albumele din Top',
exportSubtitle: 'Generează o imagine distribuibilă cu cele mai redate albume ale tale.',
exportFormat: 'Format',
exportFormatStory: 'Poveste',
exportFormatSquare: 'Pătrat',
exportFormatTwitter: 'Card Twitter',
exportGrid: 'Grilă',
exportGridLabel: '{{n}}×{{n}}',
exportPreview: 'Previzualizare',
exportGenerate: 'Generează',
exportSave: 'Salvează imaginea…',
exportCancel: 'Anulează',
exportFooterLabel: 'Top Albume',
exportNotEnough: 'Ai nevoie de cel puțin {{count}} albume în librăria ta pentru o grilă {{n}}×{{n}}.',
exportSaving: 'Se salvează…',
exportSaved: 'Salvat.',
exportSaveFailed: 'Nu s-a putut salva imaginea.',
};