From a7d7d00eb35a0da680d85836376b5c40e1a2d32c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n?= <38050447+oxixes@users.noreply.github.com> Date: Sun, 2 Feb 2025 09:17:54 +0100 Subject: [PATCH] feat: Translate app to Spanish (#457) --- i18n.ts | 3 + translations/es.json | 457 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 460 insertions(+) create mode 100644 translations/es.json diff --git a/i18n.ts b/i18n.ts index edfe7202..96213192 100644 --- a/i18n.ts +++ b/i18n.ts @@ -2,12 +2,14 @@ import i18n from "i18next"; import { initReactI18next } from "react-i18next"; import en from "./translations/en.json"; +import es from "./translations/es.json"; import fr from "./translations/fr.json"; import sv from "./translations/sv.json"; import { getLocales } from "expo-localization"; export const APP_LANGUAGES = [ { label: "English", value: "en" }, + { label: "Español", value: "es" }, { label: "Français", value: "fr" }, { label: "Svenska", value: "sv" }, ]; @@ -16,6 +18,7 @@ i18n.use(initReactI18next).init({ compatibilityJSON: "v4", resources: { en: { translation: en }, + es: { translation: es }, fr: { translation: fr }, sv: { translation: sv }, }, diff --git a/translations/es.json b/translations/es.json new file mode 100644 index 00000000..55890beb --- /dev/null +++ b/translations/es.json @@ -0,0 +1,457 @@ +{ + "login": { + "username_required": "Se requiere un nombre de usuario", + "error_title": "Error", + "login_title": "Iniciar sesión", + "login_to_title": "Iniciar sesión en", + "username_placeholder": "Nombre de usuario", + "password_placeholder": "Contraseña", + "login_button": "Iniciar sesión", + "quick_connect": "Conexión rápida", + "enter_code_to_login": "Introduce el código {{code}} para iniciar sesión", + "failed_to_initiate_quick_connect": "Error al iniciar la conexión rápida", + "got_it": "Entendido", + "connection_failed": "Conexión fallida", + "could_not_connect_to_server": "No se pudo conectar al servidor. Por favor comprueba la URL y tu conexión de red.", + "an_unexpected_error_occured": "Ha ocurrido un error inesperado", + "change_server": "Cambiar servidor", + "invalid_username_or_password": "Usuario o contraseña inválidos", + "user_does_not_have_permission_to_log_in": "El usuario no tiene permiso para iniciar sesión", + "server_is_taking_too_long_to_respond_try_again_later": "El servidor está tardando mucho en responder, inténtalo de nuevo más tarde.", + "server_received_too_many_requests_try_again_later": "El servidor está recibiendo muchas peticiones, inténtalo de nuevo más tarde.", + "there_is_a_server_error": "Hay un error en el servidor", + "an_unexpected_error_occured_did_you_enter_the_correct_url": "Ha ocurrido un error inesperado. ¿Has introducido la URL correcta?" + }, + "server": { + "enter_url_to_jellyfin_server": "Introduce la URL de tu servidor Jellyfin", + "server_url_placeholder": "http(s)://tu-servidor.com", + "connect_button": "Conectar", + "previous_servers": "Servidores previos", + "clear_button": "Limpiar", + "search_for_local_servers": "Buscar servidores locales", + "searching": "Buscando...", + "servers": "Servidores" + }, + "home": { + "no_internet": "Sin internet", + "no_items": "No hay ítems", + "no_internet_message": "No te preocupes, todavía puedes\nver el contenido descargado.", + "go_to_downloads": "Ir a descargas", + "oops": "¡Vaya!", + "error_message": "Algo ha salido mal.\nPor favor, cierra la sesión y vuelve a iniciar.", + "continue_watching": "Seguir viendo", + "next_up": "A continuación", + "recently_added_in": "Recientemente añadido en {{libraryName}}", + "suggested_movies": "Películas sugeridas", + "suggested_episodes": "Episodios sugeridos", + "intro": { + "welcome_to_streamyfin": "Bienvenido a Streamyfin", + "a_free_and_open_source_client_for_jellyfin": "Un cliente gratuito y de código abierto para Jellyfin.", + "features_title": "Características", + "features_description": "Streamyfin tiene una amplia gama de características y se integra con una variedad de software que puedes encontrar en el menú de configuración, esto incluye:", + "jellyseerr_feature_description": "Conéctate a tu servidor de Jellyseer y pide películas directamente desde la app.", + "downloads_feature_title": "Descargas", + "downloads_feature_description": "Descarga películas y series para ver sin conexión. Usa el método por defecto o el servidor optimizado para descargar archivos en segundo plano.", + "chromecast_feature_description": "Envía pelícuas y series a tus dispositivos Chromecast.", + "centralised_settings_plugin_title": "Plugin de configuración centralizada", + "centralised_settings_plugin_description": "Crea configuraciones desde una ubicación centralizada en tu servidor de Jellyfin. Todas las configuraciones para todos los usuarios se sincronizarán automáticamente.", + "done_button": "Hecho", + "go_to_settings_button": "Ir a la configuración", + "read_more": "Leer más" + }, + "settings": { + "settings_title": "Configuración", + "log_out_button": "Cerrar sesión", + "user_info": { + "user_info_title": "Información de usuario", + "user": "Usuario", + "server": "Servidor", + "token": "Token", + "app_version": "Versión de la app" + }, + "quick_connect": { + "quick_connect_title": "Conexión rápida", + "authorize_button": "Autorizar conexión rápida", + "enter_the_quick_connect_code": "Introduce el código de conexión rápida...", + "success": "Hecho", + "quick_connect_autorized": "Conexión rápida autorizada", + "error": "Error", + "invalid_code": "Código inválido", + "authorize": "Autorizar" + }, + "media_controls": { + "media_controls_title": "Controles de reproducción", + "forward_skip_length": "Longitud de avance", + "rewind_length": "Longitud de retroceso", + "seconds_unit": "s" + }, + "audio": { + "audio_title": "Audio", + "set_audio_track": "Establecer pista de audio del elemento anterior", + "audio_language": "Idioma de audio", + "audio_hint": "Elige un idioma de audio por defecto.", + "none": "Ninguno", + "language": "Idioma" + }, + "subtitles": { + "subtitle_title": "Subtítulos", + "subtitle_language": "Idioma de subtítulos", + "subtitle_mode": "Modo de subtítulos", + "set_subtitle_track": "Establecer pista de subtítulos del elemento anterior", + "subtitle_size": "Tamaño de subtítulos", + "subtitle_hint": "Configurar preferencias de subtítulos.", + "none": "Ninguno", + "language": "Idioma", + "loading": "Cargando", + "modes": { + "Default": "Por defecto", + "Smart": "Inteligente", + "Always": "Siempre", + "None": "Nada", + "OnlyForced": "Solo forzados" + } + }, + "other": { + "other_title": "Otros", + "auto_rotate": "Rotación automática", + "video_orientation": "Orientación de vídeo", + "orientation": "Orientación", + "orientations": { + "DEFAULT": "Por defecto", + "ALL": "Todas", + "PORTRAIT": "Vertical", + "PORTRAIT_UP": "Vertical arriba", + "PORTRAIT_DOWN": "Vertical abajo", + "LANDSCAPE": "Horizontal", + "LANDSCAPE_LEFT": "Horizontal izquierda", + "LANDSCAPE_RIGHT": "Horizontal derecha", + "OTHER": "Otra", + "UNKNOWN": "Desconocida" + }, + "safe_area_in_controls": "Área segura en controles", + "show_custom_menu_links": "Mostrar enlaces de menú personalizados", + "hide_libraries": "Ocultar bibliotecas", + "select_liraries_you_want_to_hide": "Selecciona las bibliotecas que quieres ocultar de la pestaña Bibliotecas y de Inicio.", + "disable_haptic_feedback": "Desactivar feedback háptico" + }, + "downloads": { + "downloads_title": "Descargas", + "download_method": "Método de descarga", + "remux_max_download": "Remux máx. descarga", + "auto_download": "Descarga automática", + "optimized_versions_server": "Servidor de versiones optimizadas", + "save_button": "Guardar", + "optimized_server": "Servidor optimizado", + "optimized": "Optimizado", + "default": "Por defecto", + "optimized_version_hint": "Introduce la URL del servidor de versiones optimizadas. La URL debe incluir http o https y opcionalmente el puerto.", + "read_more_about_optimized_server": "Leer más sobre el servidor de versiones optimizadas.", + "url": "URL", + "server_url_placeholder": "http(s)://dominio.org:puerto" + }, + "plugins": { + "plugins_title": "Plugins", + "jellyseerr": { + "jellyseerr_warning": "Esta integración está en sus primeras etapas. Cuenta con posibles cambios.", + "server_url": "URL del servidor", + "server_url_hint": "Ejemplo: http(s)://tu-dominio.url\n(añade el puerto si es necesario)", + "server_url_placeholder": "URL de Jellyseerr...", + "password": "Contrasñea", + "password_placeholder": "Introduce la contraseña de Jellyfin de {{username}}", + "save_button": "Guardar", + "clear_button": "Limpiar", + "login_button": "Iniciar sesión", + "total_media_requests": "Peticiones totales de medios", + "movie_quota_limit": "Límite de cuota de películas", + "movie_quota_days": "Días de cuota de películas", + "tv_quota_limit": "Límite de cuota de series", + "tv_quota_days": "Días de cuota de series", + "reset_jellyseerr_config_button": "Restablecer configuración de Jellyseerr", + "unlimited": "Ilimitado" + }, + "marlin_search": { + "enable_marlin_search": "Habilitar búsqueda de Marlin", + "url": "URL", + "server_url_placeholder": "http(s)://dominio.org:puerto", + "marlin_search_hint": "Introduce la URL del servidor de Marlin. La URL debe incluir http o https y opcionalmente el puerto.", + "read_more_about_marlin": "Leer más sobre Marlin.", + "save_button": "Guardar", + "toasts": { + "saved": "Guardado" + } + } + }, + "storage": { + "storage_title": "Almacenamiento", + "app_usage": "App {{usedSpace}}%", + "phone_usage": "Dispositivo {{availableSpace}}%", + "size_used": "{{used}} de {{total}} usado", + "delete_all_downloaded_files": "Eliminar todos los archivos descargados" + }, + "intro": { + "show_intro": "Mostrar intro", + "reset_intro": "Restablecer intro" + }, + "logs": { + "logs_title": "Registros", + "no_logs_available": "No hay registros disponibles", + "delete_all_logs": "Eliminar todos los registros" + }, + "languages": { + "title": "Idiomas", + "app_language": "Idioma de la app", + "app_language_description": "Selecciona el idioma de la app.", + "system": "Sistema" + }, + "toasts":{ + "error_deleting_files": "Error al eliminar archivos", + "background_downloads_enabled": "Descargas en segundo plano habilitadas", + "background_downloads_disabled": "Descargas en segundo plano deshabilitadas", + "connected": "Conectado", + "could_not_connect": "No se pudo conectar", + "invalid_url": "URL inválida" + } + }, + "downloads": { + "downloads_title": "Descargas", + "tvseries": "Series", + "movies": "Películas", + "queue": "Cola", + "queue_hint": "La cola de series y películas se perderá al reiniciar la app", + "no_items_in_queue": "No hay ítems en la cola", + "no_downloaded_items": "No hay ítems descargados", + "delete_all_movies_button": "Eliminar todas las películas", + "delete_all_tvseries_button": "Eliminar todas las series", + "delete_all_button": "Eliminar todo", + "active_download": "Descarga activa", + "no_active_downloads": "No hay descargas activas", + "active_downloads": "Descargas activas", + "new_app_version_requires_re_download": "La nueva actualización requiere volver a descargar", + "new_app_version_requires_re_download_description": "La nueva actualización requiere volver a descargar el contenido. Por favor, elimina todo el código descargado y vuélvelo a intentar.", + "back": "Atrás", + "delete": "Borrar", + "something_went_wrong": "Algo ha salido mal", + "could_not_get_stream_url_from_jellyfin": "No se pudo obtener la URL del stream de Jellyfin", + "eta": "{{eta}} restante", + "methods": "Métodos", + "toasts": { + "you_are_not_allowed_to_download_files": "No tienes permiso para descargar archivos.", + "deleted_all_movies_successfully": "¡Todas las películas eliminadas con éxito!", + "failed_to_delete_all_movies": "Error al eliminar todas las películas", + "deleted_all_tvseries_successfully": "¡Todas las series eliminadas con éxito!", + "failed_to_delete_all_tvseries": "Error al eliminar todas las series", + "download_cancelled": "Descarga cancelada", + "could_not_cancel_download": "No se pudo cancelar la descarga", + "download_completed": "Descarga completada", + "download_started_for": "Descarga iniciada para {{item}}", + "item_is_ready_to_be_downloaded": "{{item}} está listo para ser descargado", + "download_stated_for_item": "Descarga iniciada para {{item}}", + "download_failed_for_item": "Descarga fallida para {{item}} - {{error}}", + "download_completed_for_item": "Descarga completada para {{item}}", + "queued_item_for_optimization": "{{item}} en cola para optimización", + "failed_to_start_download_for_item": "Error al iniciar la descarga para {{item}}: {{message}}", + "server_responded_with_status_code": "El servidor ha respondido con el estado {{statusCode}}", + "no_response_received_from_server": "No se ha recibido respuesta del servidor", + "error_setting_up_the_request": "Error al configurar la petición", + "failed_to_start_download_for_item_unexpected_error": "Error al iniciar la descarga para {{item}}: Error inesperado", + "all_files_folders_and_jobs_deleted_successfully": "Todos los archivos, carpetas y trabajos eliminados con éxito", + "an_error_occured_while_deleting_files_and_jobs": "Ha ocurrido un error al eliminar archivos y trabajos", + "go_to_downloads": "Ir a descargas" + } + } + }, + "search": { + "search_here": "Buscar aquí...", + "search": "Buscar...", + "x_items": "{{count}} ítems", + "library": "Biblioteca", + "discover": "Descubrir", + "no_results": "Sin resultados", + "no_results_found_for": "No se han encontrado resultados para", + "movies": "Películas", + "series": "Series", + "episodes": "Episodios", + "collections": "Colecciones", + "actors": "Actores", + "request_movies": "Solicitar películas", + "request_series": "Solicitar series", + "recently_added": "Recientemente añadido", + "recent_requests": "Solicitudes recientes", + "plex_watchlist": "Lista de seguimiento de Plex", + "trending": "Trending", + "popular_movies": "Películas populares", + "movie_genres": "Géneros de películas", + "upcoming_movies": "Próximas películas", + "studios": "Estudios", + "popular_tv": "Series populares", + "tv_genres": "Géneros de series", + "upcoming_tv": "Próximas series", + "networks": "Cadenas", + "tmdb_movie_keyword": "Palabra clave de película de TMDB", + "tmdb_movie_genre": "Género de película de TMDB", + "tmdb_tv_keyword": "Palabra clave de serie de TMDB", + "tmdb_tv_genre": "Género de serie de TMDB", + "tmdb_search": "Búsqueda de TMDB", + "tmdb_studio": "Estudio de TMDB", + "tmdb_network": "Cadena de TMDB", + "tmdb_movie_streaming_services": "Servicios de streaming de películas de TMDB", + "tmdb_tv_streaming_services": "Servicios de streaming de series de TMDB" + }, + "library": { + "no_items_found": "No se han encontrado ítems", + "no_results": "Sin resultados", + "no_libraries_found": "No se han encontrado bibliotecas", + "item_types": { + "movies": "películas", + "series": "series", + "boxsets": "colecciones", + "items": "ítems" + }, + "options": { + "display": "Mostrar", + "row": "Fila", + "list": "Lista", + "image_style": "Estilo de imagen", + "poster": "Poster", + "cover": "Portada", + "show_titles": "Mostrar títulos", + "show_stats": "Mostrar estadísticas" + }, + "filters": { + "genres": "Géneros", + "years": "Años", + "sort_by": "Ordenar por", + "sort_order": "Ordenar", + "tags": "Etiquetas" + } + }, + "favorites": { + "series": "Series", + "movies": "Películas", + "episodes": "Episodios", + "videos": "Vídeos", + "boxsets": "Colecciones", + "playlists": "Playlists" + }, + "custom_links": { + "no_links": "Sin enlaces" + }, + "player": { + "error": "Error", + "failed_to_get_stream_url": "Error al obtener la URL del stream", + "an_error_occured_while_playing_the_video": "Ha ocurrido un error al reproducir el vídeo. Comprueba los registros en la configuración.", + "client_error": "Error del cliente", + "could_not_create_stream_for_chromecast": "No se pudo crear el stream para Chromecast", + "message_from_server": "Mensaje del servidor: {{message}}", + "video_has_finished_playing": "El vídeo ha terminado de reproducirse", + "no_video_source": "No hay fuente de vídeo...", + "next_episode": "Siguiente episodio", + "refresh_tracks": "Refrescar pistas", + "subtitle_tracks": "Pistas de subtítulos:", + "audio_tracks": "Pistas de audio:", + "playback_state": "Estado de la reproducción:", + "no_data_available": "No hay datos disponibles", + "index": "Índice:" + }, + "item_card": { + "next_up": "A continuación", + "no_items_to_display": "No hay ítems para mostrar", + "cast_and_crew": "Reparto y equipo", + "series": "Series", + "seasons": "Temporadas", + "season": "Temporada", + "no_episodes_for_this_season": "No hay episodios para esta temporada", + "overview": "Resumen", + "more_with": "Más con {{name}}", + "similar_items": "Ítems similares", + "no_similar_items_found": "No se han encontrado ítems similares", + "video": "Vídeo", + "more_details": "Más detalles", + "quality": "Calidad", + "audio": "Audio", + "subtitles": "Subtítulos", + "show_more": "Mostrar más", + "show_less": "Mostrar menos", + "appeared_in": "Apareció en", + "could_not_load_item": "No se pudo cargar el ítem", + "none": "Ninguno", + "download": { + "download_season": "Descargar temporada", + "download_series": "Descargar serie", + "download_episode": "Descargar episodio", + "download_movie": "Descargar película", + "download_x_item": "Descargar {{item_count}} ítems", + "download_button": "Descargar", + "using_optimized_server": "Usando servidor optimizado", + "using_default_method": "Usando método por defecto" + } + }, + "live_tv": { + "next": "Siguiente", + "previous": "Anterior", + "live_tv": "TV en directo", + "coming_soon": "Próximamente", + "on_now": "En directo", + "shows": "Programas", + "movies": "Películas", + "sports": "Deportes", + "for_kids": "Para niños", + "news": "Noticias" + }, + "jellyseerr":{ + "confirm": "Confirmar", + "cancel": "Cancelar", + "yes": "Sí", + "whats_wrong": "¿Qué pasa?", + "issue_type": "Tipo de problema", + "select_an_issue": "Selecciona un problema", + "types": "Tipos", + "describe_the_issue": "(opcional) Describe el problema...", + "submit_button": "Enviar", + "report_issue_button": "Reportar problema", + "request_button": "Solicitar", + "are_you_sure_you_want_to_request_all_seasons": "¿Estás seguro de que quieres solicitar todas las temporadas?", + "failed_to_login": "Error al iniciar sesión", + "cast": "Reparto", + "details": "Detalles", + "status": "Estado", + "original_title": "Título original", + "series_type": "Tipo de serie", + "release_dates": "Fechas de estreno", + "first_air_date": "Primera fecha de emisión", + "next_air_date": "Próxima fecha de emisión", + "revenue": "Ingresos", + "budget": "Presupuesto", + "original_language": "Idioma original", + "production_country": "País de producción", + "studios": "Estudios", + "network": "Cadena", + "currently_streaming_on": "Actualmente en streaming en", + "advanced": "Avanzado", + "request_as": "Solicitar como", + "tags": "Etiquetas", + "quality_profile": "Perfil de calidad", + "root_folder": "Carpeta raíz", + "season_x": "Temporada {{seasons}}", + "season_number": "Temporada {{season_number}}", + "number_episodes": "{{episode_number}} episodios", + "born": "Nacido", + "appearances": "Apariciones", + "toasts": { + "jellyseer_does_not_meet_requirements": "¡Jellyseer no cumple con los requisitos! Por favor, actualízalo al menos a la versión 2.0.0.", + "jellyseerr_test_failed": "La prueba de Jellyseerr ha fallado. Por favor inténtalo de nuevo.", + "failed_to_test_jellyseerr_server_url": "Error al probar la URL del servidor de Jellyseerr", + "issue_submitted": "¡Problema enviado!", + "requested_item": "¡{{item}} solicitado!", + "you_dont_have_permission_to_request": "¡No tienes permiso para solicitar!", + "something_went_wrong_requesting_media": "¡Algo ha salido mal solicitando los medios!" + } + }, + "tabs": { + "home": "Inicio", + "search": "Buscar", + "library": "Bibliotecas", + "custom_links": "Enlaces personalizados", + "favorites": "Favoritos" + } +}