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
+41
View File
@@ -0,0 +1,41 @@
export const smartPlaylists = {
sectionBasic: '1. Basic',
sectionGenres: '2. Genres',
sectionYearsAndFilters: '3. Years and filters',
genreMode: 'Genre mode',
genreModeInclude: 'Include genres',
genreModeExclude: 'Exclude genres',
genreSearchPlaceholder: 'Filter genres...',
availableGenres: 'Available',
selectedGenres: 'Selected',
yearMode: 'Year mode',
yearModeInclude: 'Include range',
yearModeExclude: 'Exclude range',
name: 'Name (without prefix)',
limit: 'Limit',
limitHint: 'How many tracks to include in playlist (1-{{max}}, usually 50).',
artistContains: 'Artist contains…',
albumContains: 'Album contains…',
titleContains: 'Title contains…',
minRating: 'Minimum rating',
minRatingAria: 'Minimum rating for smart playlist',
minRatingHint: '0 disables minimum threshold; 1-5 keeps tracks with rating above selected value.',
fromYear: 'From year',
toYear: 'To year',
excludeUnrated: 'Exclude unrated tracks',
compilationOnly: 'Only compilations',
create: 'New Smart Playlist',
save: 'Save Smart Playlist',
created: 'Created {{name}}',
updated: 'Updated {{name}}',
createFailed: 'Could not create smart playlist.',
updateFailed: 'Could not update smart playlist.',
navidromeOnly: 'Smart playlists can only be created on Navidrome servers.',
loadFailed: 'Could not load smart playlists from Navidrome.',
sortRandom: 'Sort: random',
sortTitleAsc: 'Sort: title A-Z',
sortTitleDesc: 'Sort: title Z-A',
sortYearDesc: 'Sort: year desc',
sortYearAsc: 'Sort: year asc',
sortPlayCountDesc: 'Sort: play count desc',
};