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
+39
View File
@@ -0,0 +1,39 @@
export const randomMix = {
title: 'Mezcla Aleatoria',
remix: 'Remezclar',
remixTooltip: 'Cargar nuevas canciones aleatorias',
remixGenre: 'Remezclar {{genre}}',
remixTooltipGenre: 'Cargar nuevas canciones de {{genre}}',
playAll: 'Reproducir Todo',
trackTitle: 'Título',
trackArtist: 'Artista',
trackAlbum: 'Álbum',
trackFavorite: 'Favorito',
trackDuration: 'Duración',
favoriteAdd: 'Agregar a Favoritos',
favoriteRemove: 'Quitar de Favoritos',
play: 'Reproducir',
trackGenre: 'Género',
mixSettingsHeader: 'Ajustes del mix',
exclusionsHeader: 'Exclusiones',
filterPanelInexactSizeNote: 'El tamaño del mix es un objetivo — las solicitudes grandes pueden devolver menos pistas únicas si el grupo aleatorio del servidor se agota.',
mixSize: 'Tamaño de lista',
excludeAudiobooks: 'Excluir audiolibros y radioteatros',
excludeAudiobooksDesc: 'Busca palabras clave en género, título, álbum y artista — ej. Hörbuch, Audiobook, Spoken Word, …',
genreBlocked: 'Palabra clave bloqueada',
genreAddedToBlacklist: 'Agregada a lista de filtros',
genreAlreadyBlocked: 'Ya está bloqueada',
artistBlocked: 'Artista bloqueado',
artistAddedToBlacklist: 'Artista agregado a lista de filtros',
artistClickHint: 'Click para bloquear este artista',
blacklistToggle: 'Filtro de Palabras Clave',
genreMixTitle: 'Mezcla por Género',
genreMixDesc: 'Top 20 géneros por cantidad de canciones — click para cargar mezcla aleatoria',
genreMixAll: 'Todas las Canciones',
genreMixLoadMore: 'Cargar 10 más',
genreMixNoGenres: 'No se encontraron géneros en el servidor.',
shuffleGenres: 'Mostrar géneros diferentes',
filterPanelTitle: 'Filtros',
filterPanelDesc: 'Click en una etiqueta de género o nombre de artista en la lista para bloquearlo de futuras mezclas.',
genreClickHint: 'Click en una etiqueta de género para agregarla\ncomo palabra clave filtrada.\nBusca en género, título, álbum y artista.',
};