feat: uv config other feats

- add uv configuration for the backend
- update frontend to make auth work
- add new auth endpoints
- add bookmars feat
- add reader feat
This commit is contained in:
2026-06-03 22:06:01 -05:00
parent 730c748f5f
commit 6b4c0c43f8
137 changed files with 20319 additions and 2340 deletions
+236
View File
@@ -0,0 +1,236 @@
import type { Locale } from "./en-US";
const esES: Locale = {
common: {
loading: "Cargando...",
back: "Volver",
save: "Guardar",
saving: "Guardando...",
retry: "Reintentar",
dismiss: "Descartar",
cancel: "Cancelar",
delete: "Eliminar",
deleting: "Eliminando...",
edit: "Editar",
unknownError: "Algo salió mal",
unknownAuthor: "Autor desconocido",
appName: "Cloud Reader",
},
auth: {
signIn: "Iniciar sesión",
createAccount: "Crear cuenta",
email: "Correo electrónico",
password: "Contraseña",
confirmPassword: "Confirmar contraseña",
emailPlaceholder: "tu@ejemplo.com",
passwordPlaceholder: "Al menos 8 caracteres",
confirmPasswordPlaceholder: "Repite tu contraseña",
signingIn: "Iniciando sesión...",
creatingAccount: "Creando cuenta...",
noAccount: "¿No tienes cuenta?",
hasAccount: "¿Ya tienes cuenta?",
register: "Registrarse",
passwordsMismatch: "Las contraseñas no coinciden.",
loginFailed: "Error al iniciar sesión",
registrationFailed: "Error al registrarse",
},
library: {
title: "Biblioteca",
bookCountOne: "{{count}} libro",
bookCountMany: "{{count}} libros",
addBook: "Añadir libro",
bookmarks: "Marcadores",
settings: "Ajustes",
logout: "Cerrar sesión",
searchPlaceholder: "Buscar por título, autor o género...",
voiceSearchTitle: "Buscar con voz",
voiceSearchStopTitle: "Dejar de escuchar",
filtersShow: "Filtros",
filtersHide: "Filtros",
filtersLabel: "Filtros",
genre: "Género",
author: "Autor",
status: "Estado",
allGenres: "Todos los géneros",
allAuthors: "Todos los autores",
allStatuses: "Todos los estados",
clearFilters: "Limpiar",
loadFailed: "Error al cargar los libros",
listening: "Escuchando... habla ahora",
stop: "Detener",
voiceNoSpeech: "No se detectó voz. Inténtalo de nuevo.",
voiceError: "Búsqueda por voz: {{message}}",
pdfNotice: "La lectura de PDF no está disponible en el lector web. Sube un EPUB para leer aquí.",
emptyTitle: "Tu biblioteca está vacía",
emptyFilteredTitle: "No se encontraron libros",
emptyDescription: "Añade un libro para empezar tu colección.",
emptyFilteredDescription: "Prueba a ajustar la búsqueda o los filtros.",
clearAllFilters: "Limpiar todos los filtros",
addFirstBook: "Añade tu primer libro",
readingStatus: {
wantToRead: "Quiero leer",
reading: "Leyendo",
readingWithProgress: "Leyendo · {{percent}}%",
finished: "Terminado",
dnf: "No terminado",
uploaded: "Subido",
},
finishedSection: "Terminados",
finishedCount: "{{count}} terminados",
finishedCountShort: "{{count}} terminados",
allInFinishedShelf: "Tus libros terminados están en el panel inferior. Toca para expandir.",
},
contextMenu: {
syncMetadata: "Sincronizar metadatos",
syncingMetadata: "Sincronizando metadatos…",
remove: "Eliminar",
removing: "Eliminando…",
confirmRemove: '¿Eliminar "{{title}}" de tu biblioteca?',
},
toast: {
metadataSynced: 'Metadatos sincronizados para "{{title}}"',
noMatch: "No se encontró coincidencia en Open Library",
refreshDone: "Actualización de metadatos completada",
removed: '"{{title}}" eliminado de tu biblioteca',
},
settings: {
title: "Ajustes de lectura",
loading: "Cargando ajustes...",
loadFailed: "Error al cargar los ajustes",
saveFailed: "Error al guardar los ajustes",
saved: "¡Ajustes guardados!",
uiLanguage: "Idioma de la interfaz",
uiLanguageEn: "English",
uiLanguageEs: "Español",
fontSize: "Tamaño de fuente ({{size}}px)",
fontStyle: "Estilo de fuente",
backgroundColor: "Color de fondo",
fontSans: "Sans Serif",
fontSerif: "Serif",
fontMonospace: "Monospace",
bgWhite: "Blanco",
bgSepia: "Sepia",
bgDark: "Oscuro",
bgGreen: "Verde",
saveSettings: "Guardar ajustes",
},
reader: {
loading: "Cargando lector...",
reading: "Leyendo",
loadBookFailed: "Error al cargar los detalles del libro",
epubOnly: "La lectura de PDF no está disponible en el lector web. Solo EPUB.",
unableToOpen: "No se puede abrir este libro.",
backToLibrary: "Volver a la biblioteca",
prevPage: "Página anterior",
nextPage: "Página siguiente",
resumeReading: "Volver a la lectura",
resumeReadingAria: "Volver a donde estabas leyendo",
backToLibraryAria: "Volver a la biblioteca",
tocAria: "Tabla de contenidos",
settingsAria: "Ajustes de lectura",
settingsTitle: "Ajustes de lectura",
closeSettingsAria: "Cerrar ajustes",
theme: "Tema",
font: "Fuente",
fontSize: "Tamaño de fuente: {{size}}px",
lineHeight: "Interlineado: {{value}}",
margins: "Márgenes: {{value}}px",
brightness: "Brillo: {{value}}%",
orientation: "Orientación",
themeSepia: "Sepia",
themeDark: "Oscuro",
themeLight: "Claro",
themePaper: "Papel",
fontSans: "Sans-serif",
fontSerif: "Serif",
fontMonospace: "Monospace",
orientationAuto: "Auto",
orientationPortrait: "Vertical",
orientationLandscape: "Horizontal",
fontSizeAria: "Tamaño de fuente",
lineHeightAria: "Interlineado",
marginWidthAria: "Ancho de márgenes",
brightnessAria: "Brillo",
tocTitle: "Contenido",
closeTocAria: "Cerrar tabla de contenidos",
tocEmpty: "No hay capítulos disponibles.",
},
addBook: {
title: "Añadir libro",
fileLabel: "Archivo (EPUB o PDF) *",
selected: "Seleccionado: {{name}}",
titleLabel: "Título *",
titlePlaceholder: "Título del libro",
authorLabel: "Autor",
authorPlaceholder: "Nombre del autor",
uploading: "Subiendo...",
upload: "Subir libro",
fileTypeError: "Solo se admiten archivos EPUB y PDF.",
requiredError: "El título y el archivo son obligatorios.",
uploadFailed: "Error al subir.",
},
bookDetail: {
backToLibrary: "Volver a la biblioteca",
back: "Volver",
notFound: "Libro no encontrado",
notFoundDescription: "El libro que buscas no existe o fue eliminado.",
invalidId: "ID de libro no válido",
loadFailed: "Error al cargar los detalles del libro",
byAuthor: "de {{author}}",
pages: "{{count}} páginas",
description: "Descripción",
added: "Añadido {{date}}",
updated: "Actualizado {{date}}",
},
search: {
searching: "Buscando...",
noSuggestions: "Sin sugerencias rápidas",
},
annotations: {
title: "Marcadores y notas",
loading: "Cargando marcadores...",
empty: "Aún no hay marcadores ni notas.",
bookmarkCount: "{{count}} marcadores",
noteCount: "{{count}} notas",
markerCount: "{{count}} marcadores",
bookmark: "Marcador",
note: "Nota",
bookmarkOnly: "Marcador",
saveMarker: "Guardar",
markerSaved: "Marcador guardado",
markerSavedWithNote: "Nota guardada",
thoughtPlaceholder: "Tu reflexión sobre este pasaje (opcional)",
highlightColor: "Color del resaltado",
highlightCustom: "Color personalizado",
highlightYellow: "Amarillo",
highlightGreen: "Verde",
highlightPink: "Rosa",
highlightBlue: "Azul",
highlightPurple: "Morado",
selectTextHint: "Selecciona texto en el lector para añadir un marcador o nota.",
showMore: "Ver más",
showLess: "Ver menos",
goToPassage: "Ir al pasaje",
goToPage: "Ir a la página",
inBookPanel: "Marcadores de este libro",
chapterIndex: "Capítulo {{index}}",
page: "Página {{page}}",
pageShort: "p.{{page}}",
loadingBookmarks: "Cargando marcadores...",
bookmarksEmpty: "Aún no hay marcadores. Selecciona un pasaje mientras lees.",
loadingNotes: "Cargando notas...",
notesEmpty: "Aún no hay notas. Selecciona un pasaje mientras lees.",
addToPage: "Añadir a la página {{page}}",
addBookmark: "Añadir marcador",
addNote: "Añadir nota",
noteLabel: "Nota:",
notePlaceholder: "Escribe tu nota aquí...",
noteEmpty: "El contenido de la nota no puede estar vacío.",
saveFailed: "Error al guardar la anotación.",
close: "Cerrar",
home: "Inicio",
bookmarksNotes: "Marcadores y notas",
},
};
export default esES;