diff --git a/pkg/api/locale.go b/pkg/api/locale.go
index 856f710d2..9d8593d7c 100644
--- a/pkg/api/locale.go
+++ b/pkg/api/locale.go
@@ -10,6 +10,7 @@ var matcher = language.NewMatcher([]language.Tag{
language.MustParse("en-US"), // The first language is used as fallback.
language.MustParse("en-GB"),
language.MustParse("en-AU"),
+ language.MustParse("es-ES"),
language.MustParse("de-DE"),
language.MustParse("it-IT"),
language.MustParse("pt-BR"),
diff --git a/ui/v2.5/src/components/Changelog/versions/v0110.md b/ui/v2.5/src/components/Changelog/versions/v0110.md
index 44478def3..74061b207 100644
--- a/ui/v2.5/src/components/Changelog/versions/v0110.md
+++ b/ui/v2.5/src/components/Changelog/versions/v0110.md
@@ -5,6 +5,7 @@
* Added interface options to disable creating performers/studios/tags from dropdown selectors. ([#1814](https://github.com/stashapp/stash/pull/1814))
### 🎨 Improvements
+* Added es-ES language option. ([#1886](https://github.com/stashapp/stash/pull/1886))
* Show pagination at top and bottom of page. ([#1776](https://github.com/stashapp/stash/pull/1776))
* Include total duration/megapixels and filesize information on Scenes and Images pages. ([#1776](https://github.com/stashapp/stash/pull/1776))
* Added it-IT language option. ([#1875](https://github.com/stashapp/stash/pull/1875))
diff --git a/ui/v2.5/src/components/Settings/SettingsInterfacePanel/SettingsInterfacePanel.tsx b/ui/v2.5/src/components/Settings/SettingsInterfacePanel/SettingsInterfacePanel.tsx
index 6d63386bd..6965088ac 100644
--- a/ui/v2.5/src/components/Settings/SettingsInterfacePanel/SettingsInterfacePanel.tsx
+++ b/ui/v2.5/src/components/Settings/SettingsInterfacePanel/SettingsInterfacePanel.tsx
@@ -133,6 +133,7 @@ export const SettingsInterfacePanel: React.FC = () => {
>
+
diff --git a/ui/v2.5/src/locales/es-ES.json b/ui/v2.5/src/locales/es-ES.json
new file mode 100644
index 000000000..edb54ed36
--- /dev/null
+++ b/ui/v2.5/src/locales/es-ES.json
@@ -0,0 +1,702 @@
+{
+ "actions": {
+ "add": "Añadir",
+ "add_directory": "Añadir directorio",
+ "add_entity": "Añadir {entityType}",
+ "add_to_entity": "Añadir a {entityType}",
+ "allow": "Permitir",
+ "allow_temporarily": "Permitir temporalmente",
+ "apply": "Aplicar",
+ "auto_tag": "Etiquetado automático",
+ "backup": "Copia de seguridad",
+ "cancel": "Cancelar",
+ "clean": "Limpiar",
+ "clear": "Eliminar",
+ "clear_back_image": "Eliminar contraportada",
+ "clear_front_image": "Eliminar portada",
+ "clear_image": "Eliminar imagen",
+ "close": "Cerrar",
+ "create": "Crear",
+ "create_entity": "Crear {entityType}",
+ "create_marker": "Crear marcador",
+ "created_entity": "{entity_type} creado: {entity_name}",
+ "delete": "Eliminar",
+ "delete_entity": "Eliminar {entityType}",
+ "delete_file": "Eliminar archivo",
+ "delete_generated_supporting_files": "Eliminar ficheros de soporte generados",
+ "disallow": "No permitir/Denegar",
+ "download": "Descargar",
+ "download_backup": "Descargar copia de seguridad",
+ "edit": "Editar",
+ "export": "Exportar…",
+ "export_all": "Exportar todo…",
+ "find": "Buscar",
+ "from_file": "Desde archivo…",
+ "from_url": "Desde dirección web…",
+ "full_export": "Exportación completa",
+ "full_import": "Importación completa",
+ "generate": "Generar",
+ "generate_thumb_default": "Generar miniatura por defecto",
+ "generate_thumb_from_current": "Generar miniatura del frame actual",
+ "hash_migration": "Migración hash",
+ "hide": "Ocultar",
+ "import": "Importar…",
+ "import_from_file": "Importar desde archivo",
+ "merge": "Unir",
+ "merge_from": "Unir desde",
+ "merge_into": "Unir en",
+ "not_running": "no está en funcionamiento",
+ "overwrite": "Sobreescribir",
+ "play_random": "Reproducir aleatoria",
+ "play_selected": "Reproducir seleccionada",
+ "preview": "Vista previa",
+ "refresh": "Actualizar",
+ "reload_plugins": "Recargar plugins",
+ "reload_scrapers": "Recargar scrapers",
+ "remove": "Borrar",
+ "rename_gen_files": "Renombrar archivos generados",
+ "rescan": "Volver a escanear",
+ "reshuffle": "Reorganizar",
+ "running": "en funcionamiento",
+ "save": "Guardar",
+ "save_filter": "Guardar filtro",
+ "scan": "Escanear",
+ "scrape_with": "Consultar con…",
+ "scrape_query": "Cadena de consulta",
+ "scrape_scene_fragment": "Consultar por fragmento",
+ "search": "Buscar",
+ "select_all": "Seleccionar todo",
+ "select_none": "No seleccionar nada",
+ "selective_auto_tag": "Etiquetado automático selectivo",
+ "selective_scan": "Búsqueda selectiva",
+ "set_as_default": "Establecer por defecto",
+ "set_back_image": "Contraportada…",
+ "set_front_image": "Portada…",
+ "set_image": "Foto de perfil…",
+ "show": "Mostrar",
+ "skip": "Saltar",
+ "stop": "Parar",
+ "tasks": {
+ "clean_confirm_message": "¿Estás seguro que quieres iniciar la limpieza? Esto eliminará la información en la base de datos, y el contenido generado para todas las escenas y galerías que ya no estén disponibles en el sistema de ficheros.",
+ "dry_mode_selected": "Modo de simulación seleccionado. No se eliminará información, solo se guardarán registros de las acciones a realizar.",
+ "import_warning": "¿Estás seguro que quieres llevar a cabo la importación? Esta acción eliminará la base de datos e importará la información desde los metadatos previamente exportados."
+ },
+ "temp_disable": "Deshabilitar temporalmente…",
+ "temp_enable": "Habilitar temporalmente…",
+ "view_random": "Ver aleatoria",
+ "confirm": "Confirmar",
+ "select_folders": "Seleccionar carpetas",
+ "browse_for_image": "Explorar imagen…",
+ "open_random": "Abrir aleatoria"
+ },
+ "actions_name": "Acciones",
+ "age": "Edad",
+ "aliases": "Pseudónimos",
+ "also_known_as": "También conocida como",
+ "ascending": "Ascendente",
+ "average_resolution": "Resolución media",
+ "birth_year": "Año de nacimiento",
+ "birthdate": "Cumpleaños",
+ "bitrate": "Tasa de bits",
+ "career_length": "Años en activo",
+ "subsidiary_studios": "Estudios afiliados/filiales",
+ "sub_tags": "Pestañas secundarias",
+ "sub_tag_count": "Contador de pestañas secundarias",
+ "component_tagger": {
+ "config": {
+ "active_instance": "Instancia activa de stash-box:",
+ "blacklist_desc": "Los elementos de la lista negra son excluidos de las consultas. Nota: los elementos son expresiones regulares y son insensitivos a las mayúsculas. Ciertos caracteres deben ser denotados con una barra invertida: {chars_require_escape}",
+ "blacklist_label": "Lista de exclusiones",
+ "query_mode_auto": "Auto",
+ "query_mode_auto_desc": "Usa metadatos, si están presentes, o el nombre del archivo",
+ "query_mode_dir": "Directorio",
+ "query_mode_dir_desc": "Solo usa el directorio que contiene el archivo de vídeo",
+ "query_mode_filename": "Nombre de archivo",
+ "query_mode_filename_desc": "Solo usa el nombre del fichero",
+ "query_mode_label": "Modo de consulta",
+ "query_mode_metadata": "Metadatos",
+ "query_mode_metadata_desc": "Solo usa metadatos",
+ "query_mode_path": "Ruta",
+ "query_mode_path_desc": "Emplea la ruta completa del archivo",
+ "set_cover_desc": "Reemplazar la carátula de la escena si alguna es encontrada.",
+ "set_cover_label": "Seleccionar carátula de la escena",
+ "set_tag_desc": "Adjuntar etiquetas a la escena, ya sea sobreescribiéndolas (elimina las que existieran previamente) o fusionando las nuevas con las que ya existían previamente.",
+ "set_tag_label": "Seleccionar etiquetas",
+ "source": "Fuente",
+ "show_male_desc": "Marcar esta opción hará que los actores masculinos estén disponibles para su etiquetado.",
+ "show_male_label": "Mostrar actores"
+ },
+ "noun_query": "Consulta",
+ "results": {
+ "fp_found": "{fpCount, plural, =0 {No se han encontrado nuevas huellas dactilares} other {# resultados de huellas dactilares encontrados}}",
+ "fp_matches": "La duración coincide",
+ "fp_matches_multi": "La duración coincide {matchCount}/{durationsLength} huella(s) dactilar(es)",
+ "hash_matches": "{hash_type} coincide",
+ "match_failed_already_tagged": "Escena ya etiquetada",
+ "match_failed_no_result": "No se han encontrado resultados",
+ "match_success": "Escena etiquetada correctamente",
+ "unnamed": "Sin nombre",
+ "duration_off": "La duración se diferencia en, al menos, {number} segundos",
+ "duration_unknown": "Duración desconocida",
+ "phash_matches": "{count} PHash(es) coincide(n)"
+ },
+ "verb_match_fp": " huellas dactilares",
+ "verb_matched": "Matched",
+ "verb_scrape_all": "Escrapear todo",
+ "verb_submit_fp": "Enviar {fpCount, plural, one{# huella dactilar} other{# huellas dactilares}}",
+ "verb_toggle_config": "{toggle} {configuration}",
+ "verb_toggle_unmatched": "{toggle} escenas sin coincidencia"
+ },
+ "config": {
+ "about": {
+ "build_hash": "Hash de la versión:",
+ "build_time": "Fecha de la versión:",
+ "check_for_new_version": "Buscar versión actualizada",
+ "latest_version_build_hash": "Hash de la última versión:",
+ "new_version_notice": "[NUEVA]",
+ "stash_discord": "Únete a nuestro canal {url}",
+ "stash_home": "Página principal del proyecto en {url}",
+ "stash_open_collective": "Donaciones al proyecto a través de {url}",
+ "stash_wiki": "Documentación del proyecto en nuestro {url}",
+ "version": "Versión"
+ },
+ "categories": {
+ "about": "Acerca de",
+ "interface": "Diseño",
+ "logs": "Registros",
+ "plugins": "Plugins",
+ "scraping": "Escraping",
+ "tasks": "Tareas",
+ "tools": "Herramientas"
+ },
+ "dlna": {
+ "allow_temp_ip": "Permitir {tempIP}",
+ "allowed_ip_addresses": "Direcciones IP permitidas",
+ "default_ip_whitelist": "Lista de direcciones IP permitidas",
+ "default_ip_whitelist_desc": "Direcciones IP que tienen acceso al servidor DLNA por defecto. Escribe {wildcard} para permitir todas las direcciones IP.",
+ "enabled_by_default": "Activado por defecto",
+ "network_interfaces": "Interfaces",
+ "network_interfaces_desc": "Interfaces en las que se expondrá el servidor DLNA. Si no se selecciona ninguna se mostrará para todas las interfaces disponibles. Los cambios se guardarán tras reiniciar el servidor DLNA.",
+ "recent_ip_addresses": "Direcciones IP recientes",
+ "server_display_name": "Nombre del servidor",
+ "server_display_name_desc": "Nombre del servidor DLNA. Si no se indica un valor se usará {server_name} por defecto.",
+ "until_restart": "hasta reinicio"
+ },
+ "general": {
+ "auth": {
+ "api_key": "Clave API",
+ "api_key_desc": "Clave API para sistemas externos. Requiere la configuración de usuario y contraseña. El nombre de usuario debe ser guardado antes de generar una clave API.",
+ "authentication": "Autentificación",
+ "clear_api_key": "Limpiar clave API",
+ "generate_api_key": "Generar clave API",
+ "log_file": "Archivo de registro",
+ "log_file_desc": "Ruta del archivo en el que se volcarán los registros de eventos. En blanco deshabilita el fichero de registro. Los cambios se guardarán tras reiniciar la aplicación.",
+ "log_http": "Registro de accesos http",
+ "log_http_desc": "Registro de accesos http en consola. Requiere reinicio de la aplicación.",
+ "log_to_terminal": "Registro de eventos en consola",
+ "log_to_terminal_desc": "Registro de eventos en la consola de Stash además del respaldo en fichero. Habilitado si el registro a fichero está deshabilitado. Requiere reinicio de la aplicación.",
+ "maximum_session_age": "Tiempo máximo de sesión",
+ "maximum_session_age_desc": "Tiempo máximo en segundos para que la sesión de usuario expire.",
+ "password": "Contraseña",
+ "password_desc": "Contraseña para acceder a Stash. Dejar en blanco para deshabilitar la exigencia de autentificación para acceder a la aplicación.",
+ "stash-box_integration": "Integración Stash-box",
+ "trusted_proxies": "Proxies verificados",
+ "trusted_proxies_desc": "Lista de proxies que tienen permitido el acceso a Stash. Dejar en blanco para permitir redes privadas.",
+ "username": "Usuario",
+ "username_desc": "Usuario para acceder a Stash. Dejar en blanco para deshabilitar la exigencia de autentificación para acceder a la aplicación."
+ },
+ "cache_location": "Localización del directorio donde se almacenarán los ficheros de la caché.",
+ "cache_path_head": "Ruta para la caché",
+ "calculate_md5_and_ohash_desc": "Calcular comprobación MD5 en adición a oshash. Habilitar esta opción puede provocar que los escaneos iniciales resulten más lentos. Hash File naming hash must be set to oshash to disable MD5 calculation.",
+ "calculate_md5_and_ohash_label": "Calcular MD5 para los vídeos",
+ "check_for_insecure_certificates": "Comprobación para certificados no seguros",
+ "check_for_insecure_certificates_desc": "Algunos sitios utilizan certificados SSL inseguros. Cuando la casilla esté desmarcada el escrapeador se saltará la comprobación de certificados inseguros y permitirá el escrapeo de esos sitios web. Si el resultado es un error de certificado al escrapear entonces desmarca esta opción.",
+ "chrome_cdp_path": "Ruta Chrome CDP",
+ "chrome_cdp_path_desc": "Ruta del archivo del ejecutable Chrome o una dirección remota (comenzando por http:// o https://, por ejemplo, http://localhost:9222/json/version) para una instancia Chrome.",
+ "create_galleries_from_folders_desc": "Si esta opción está marcada se crearán automáticamente galerías de aquellos directorios que contienen imágenes.",
+ "create_galleries_from_folders_label": "Crear galerías desde directorios con imágenes",
+ "db_path_head": "Ruta de la base de datos",
+ "directory_locations_to_your_content": "Localización de los directorios que almacenan el contenido",
+ "exclude_image": "Excluir imagen",
+ "exclude_video": "Excluir vídeo",
+ "excluded_image_gallery_patterns_desc": "Expresiones regulares de archivos/rutas de imágenes que serán excluidas del escaneo y que serán añadidos a la tarea de depuración/limpieza",
+ "excluded_image_gallery_patterns_head": "Patrones de imágenes/galerías excluidos",
+ "excluded_video_patterns_desc": "Expresiones regulares de archivos/rutas de vídeos que serán excluidas del escaneo y que serán añadidos a la tarea de depuración/limpieza",
+ "excluded_video_patterns_head": "Patrones de vídeo excluidos",
+ "gallery_ext_desc": "Lista delimitada por comas de extensiones de archivo que serán identificados como archivos de galería en formato zip.",
+ "gallery_ext_head": "Extensiones de galería zip",
+ "generated_file_naming_hash_desc": "Usar MD5 o oshash para la los nombres de archivo generados. Cambiar esta opción requiere que todas las escenas tengan relleno el correspondiente valor MD5/oshash. Después de cambiar este valor los ficheros generados existentes tendrán que ser migrados o regenerados. Ver la página de tareas para llevar a cabo la migración.",
+ "generated_file_naming_hash_head": "Hash de nombre de archivo generado",
+ "generated_files_location": "Localización relativa del directorio para los ficheros generados (marcadores de escena, vistas previas de escena, conjuntos de imágenes o “sprites”, etc)",
+ "generated_path_head": "Ruta generada",
+ "hashing": "Hashing",
+ "image_ext_desc": "Lista delimitada por comas de las extensiones de archivo que serán identificadas como imágenes.",
+ "image_ext_head": "Extensiones de imagen",
+ "logging": "Logueado",
+ "maximum_streaming_transcode_size_desc": "Tamaño máximo para la transcodificación de archivos de vídeo en streaming en aquellos dispositivos en los que la reproducción del fichero de vídeo original no sea posible",
+ "maximum_streaming_transcode_size_head": "Tamaño máximo de transcodificación en streaming",
+ "maximum_transcode_size_desc": "Tamaño máximo para las transcodificaciones generadas y almacenadas en el sistema de archivos donde se encuentra la aplicación Stash instalada",
+ "maximum_transcode_size_head": "Tamaño máximo de transcodificación",
+ "metadata_path": {
+ "heading": "Ruta de metadatos",
+ "description": "Localización del directorio usado para llevar a cabo la exportación o importación completa de todos los metadatos"
+ },
+ "number_of_parallel_task_for_scan_generation_desc": "Seleccionar 0 para detección automática. Advertencia: lanzar más tareas de las requeridas puede provocar una elevada utilización de la CPU pudiendo provocar lentitud en el sistema y otros problemas.",
+ "number_of_parallel_task_for_scan_generation_head": "Número de tareas en paralelo para escaneo/generación de ficheros",
+ "parallel_scan_head": "Escaneo/Generación en paralelo",
+ "preview_generation": "Previsualizar generación de ficheros",
+ "scraper_user_agent": "Identificación del navegador para escrapeo",
+ "scraper_user_agent_desc": "Identificación del navegador usada durante el escrapeo de peticiones http",
+ "scraping": "Escraping",
+ "sqlite_location": "Localización para la base de datos SQLite (requiere reinicio)",
+ "video_ext_desc": "Comma-delimited list of file extensions that will be identified as videos.",
+ "video_ext_head": "Extensiones de vídeo",
+ "video_head": "Vídeo",
+ "include_audio_head": "Incluir audio",
+ "include_audio_desc": "Incluye flujo de audio cuando se generen vistas previas."
+ },
+ "logs": {
+ "log_level": "Nivel de registro"
+ },
+ "plugins": {
+ "hooks": "Hooks",
+ "triggers_on": "Se lleva a cabo durante"
+ },
+ "scraping": {
+ "entity_metadata": "{entityType} metadatos",
+ "entity_scrapers": "{entityType} escrapers",
+ "excluded_tag_patterns_desc": "Expresiones regulares de nombres de etiquetas para excluir resultados del escrapeo",
+ "excluded_tag_patterns_head": "Patrones de etiquetas excluidos",
+ "scrapers": "Escrapers",
+ "search_by_name": "Buscar por nombre",
+ "supported_types": "Tipos soportados",
+ "supported_urls": "Direcciones web"
+ },
+ "stashbox": {
+ "add_instance": "Añadir instancia stash-box",
+ "api_key": "Clave API",
+ "description": "Stash-box permite automatizar el etiquetado automatizado de escenas, actores y actrices, basado en huellas dactilares y nombres de archivo.\nEl terminal de red y la clave API pueden ser encontrados en tu página de usuario de la instancia stash-box. Los nombres son requeridos cuando se agregue más de una instancia stash-box.",
+ "endpoint": "Terminal de red",
+ "graphql_endpoint": "Terminal de red GraphQL",
+ "name": "Nombre",
+ "title": "Terminal de red Stash-box"
+ },
+ "tasks": {
+ "added_job_to_queue": "Añadido/a {operation_name} a la cola de trabajo",
+ "auto_tag_based_on_filenames": "Etiquetado automatizado del contenido basado en nombres de archivo.",
+ "auto_tagging": "Auto-Etiquetado",
+ "backing_up_database": "Guardando respaldo de la base de datos",
+ "backup_and_download": "Lleva a cabo una copia de seguridad de la base de datos y la guarda en un fichero de respaldo.",
+ "backup_database": "Lleva a cabo una copia de seguridad de la base de datos en el mismo directorio en que se encuentra ésta. El formato de nombre del fichero generado es {filename_format}",
+ "cleanup_desc": "Buscar ficheros eliminados del sistema de archivos y eliminarlos de la base de datos. PRECAUCIÓN: esta es una acción destructiva.",
+ "dont_include_file_extension_as_part_of_the_title": "No incluir la extensión del archivo como parte del título",
+ "export_to_json": "Exporta el contenido de la base de datos en formato JSON en el directorio de metadatos.",
+ "generate_desc": "Generar imagen de soporte, conjuntos de imágenes, vídeo, vtt y resto de archivos.",
+ "generate_phashes_during_scan": "Generar hashes de percepción (Phases) de los vídeos durante el escaneo (este valor es empleado para la búsqueda de archivos de vídeo duplicados y para la identificación de escenas)",
+ "generate_previews_during_scan": "Generar imágenes previas durante el escaneo (vistas previas WebP animadas). Solo requerido si el tipo de previsualización seleccionado es “Imágenes animadas”)",
+ "generate_sprites_during_scan": "Generar conjunto de imágenes o “sprites” durante el escaneo (para el depurador/limpiador de escenas)",
+ "generate_video_previews_during_scan": "Generar vistas previas durante el escaneo (vistas previas en vídeo que se muestran al pasar el enlace por encima de una escena)",
+ "generate_thumbnails_during_scan": "Generar miniaturas de las imágenes durante el escaneo.",
+ "generated_content": "Contenido generado",
+ "import_from_exported_json": "Importar desde el fichero JSON exportado al directorio de metadatos. Borrará la base de datos existente.",
+ "incremental_import": "Importación gradual o progresiva desde un archivo zip de exportación aportado por el usuario.",
+ "job_queue": "Cola de trabajo",
+ "maintenance": "Mantenimiento",
+ "migrate_hash_files": "Usado tras el cambiar el hash de nombre del fichero generado para renombrar los ficheros generados al nuevo formato hash.",
+ "migrations": "Migraciones",
+ "only_dry_run": "Llevar a cabo el modo de simulación. No eliminará nada.",
+ "plugin_tasks": "Tareas de plugins",
+ "scan_for_content_desc": "Buscar contenido nuevo y añadirlo a la base de datos.",
+ "set_name_date_details_from_metadata_if_present": "Establecer el nombre, fecha y detalles desde los metadatos (si se encuentran)"
+ },
+ "tools": {
+ "scene_duplicate_checker": "Comprobación de escenas duplicadas",
+ "scene_filename_parser": {
+ "add_field": "Añadir campo",
+ "capitalize_title": "Capitalizar título (todas las palabras comienzan por mayúscula)",
+ "display_fields": "Mostrar campos",
+ "escape_chars": "Usar \\ para evitar caracteres literales",
+ "filename": "Nombre de archivo",
+ "filename_pattern": "Patrón de nombres de ficheros",
+ "ignore_organized": "Ignorar escenas ya clasificadas",
+ "ignored_words": "Palabras ignoradas",
+ "matches_with": "Coincide con {i}",
+ "select_parser_recipe": "Seleccionar fórmula para el analizador sintáctico",
+ "title": "Analizador sintáctico del título de escena",
+ "whitespace_chars": "Espacios en blanco",
+ "whitespace_chars_desc": "Estos caracteres se reemplazarán en el título por espacios en blanco"
+ },
+ "scene_tools": "Herramientas de escenas"
+ },
+ "ui": {
+ "custom_css": {
+ "description": "La página debe ser recargada para que se lleven a cabo los cambios realizados.",
+ "heading": "CSS personalizado",
+ "option_label": "Habilitar CSS personalizado"
+ },
+ "editing": {
+ "disable_dropdown_create": {
+ "heading": "Deshabilitar creación en menú desplegable",
+ "description": "Eliminar la capacidad de crear nuevos recursos desde los selectores de formulario desplegables"
+ },
+ "heading": "Edición"
+ },
+ "handy_connection_key": {
+ "description": "Clave para conexión práctica que se usará en las escenas interactivas.",
+ "heading": "Clave para conexión práctica"
+ },
+ "funscript_offset": {
+ "description": "Tiempo de compensación en milisegundos para la reproducción de scripts interactivos.",
+ "heading": "Tiempo de compensación Funscript (mseg)"
+ },
+ "images": {
+ "options": {
+ "write_image_thumbnails": {
+ "heading": "Guardar miniaturas de imágenes",
+ "description": "Guardar miniaturas de imagen al sistema de ficheros cuando son generados al vuelo"
+ }
+ }
+ },
+ "language": {
+ "heading": "Lenguaje"
+ },
+ "max_loop_duration": {
+ "description": "Máxima duración de escena para la que el reproductor de vídeo reproducirá en bucle el vídeo. Usar “0” para deshabilitar",
+ "heading": "Máxima duración del bucle"
+ },
+ "menu_items": {
+ "description": "Mostrar o esconder los diferentes tipos de contenido del menú de navegación",
+ "heading": "Elementos del menú"
+ },
+ "performers": {
+ "options": {
+ "image_location": {
+ "heading": "Ruta para las imágenes personalizadas de actrices/actores",
+ "description": "Ruta personalizada para las imágenes de perfil de actrices/actores. Dejar en blanco para usar ruta por defecto"
+ }
+ }
+ },
+ "preview_type": {
+ "description": "Configuración para los elementos del muro",
+ "heading": "Tipo de previsualización",
+ "options": {
+ "animated": "Imagen animada",
+ "static": "Imagen estática",
+ "video": "Vídeo"
+ }
+ },
+ "scene_list": {
+ "heading": "Listado de escenas",
+ "options": {
+ "show_studio_as_text": "Mostrar nombres de estudio como texto"
+ }
+ },
+ "scene_player": {
+ "heading": "Reproductor de vídeo",
+ "options": {
+ "auto_start_video": "Iniciar vídeo automáticamente"
+ }
+ },
+ "scene_wall": {
+ "heading": "Muro de escenas/Marcadores",
+ "options": {
+ "display_title": "Mostrar título y etiquetas",
+ "toggle_sound": "Habilitar sonido"
+ }
+ },
+ "slideshow_delay": {
+ "description": "Presentación de diapositivas estará disponible en las galerías al seleccionar el muro como modo de visualización",
+ "heading": "Retardo en la presentación de diapositivas"
+ },
+ "title": "Interfaz de usuario"
+ }
+ },
+ "configuration": "Configuración",
+ "countables": {
+ "galleries": "{count, plural, one {Galería} other {Galerías}}",
+ "images": "{count, plural, one {Imagen} other {Imágenes}}",
+ "markers": "{count, plural, one {Marcador} other {Marcadores}}",
+ "movies": "{count, plural, one {Película} other {Películas}}",
+ "performers": "{count, plural, one {Actriz/Actor} other {Actrices/Actores}}",
+ "scenes": "{count, plural, one {Escena} other {Escenas}}",
+ "studios": "{count, plural, one {Estudio} other {Estudios}}",
+ "tags": "{count, plural, one {Etiqueta} other {Etiquetas}}"
+ },
+ "country": "País",
+ "cover_image": "Carátula",
+ "created_at": "Fecha de creación",
+ "criterion": {
+ "greater_than": "Mayor que",
+ "less_than": "Menor que",
+ "value": "Valor"
+ },
+ "criterion_modifier": {
+ "equals": "es",
+ "excludes": "no incluye",
+ "format_string": "{criterion} {modifierString} {valueString}",
+ "greater_than": "es mayor que",
+ "includes": "incluye",
+ "includes_all": "incluye todos",
+ "is_null": "es nulo",
+ "less_than": "es menor que",
+ "matches_regex": "coincide con la expresión regular",
+ "not_equals": "no es",
+ "not_matches_regex": "no coincide con la expresión regular",
+ "not_null": "no es nulo",
+ "between": "está entre",
+ "not_between": "no está entre"
+ },
+ "custom": "Personalizado",
+ "date": "Fecha",
+ "death_date": "Fallecimiento",
+ "death_year": "Año de fallecimiento",
+ "descending": "Descendente",
+ "detail": "Detalle",
+ "details": "Detalles",
+ "developmentVersion": "Versión de desarrollo",
+ "dialogs": {
+ "delete_confirm": "¿Estás seguro que deseas eliminar {entityName}?",
+ "delete_entity_desc": "{count, plural, one {¿Estás seguro que deseas eliminar esta {singularEntity}? Hasta que el archivo sea eliminado también, esta {singularEntity} se volverá a añadir cuando se lleve a cabo un escaneo.} other {¿Estás seguro que deseas eliminar {pluralEntity}? Hasta que los archivos sean eliminados del sistema de ficheros también, estas {pluralEntity} se volverán a añadir cuando se lleve a cabo un escaneo.}}",
+ "delete_entity_title": "{count, plural, one {Eliminar {singularEntity}} other {Eliminar {pluralEntity}}}",
+ "delete_object_desc": "¿Estás seguro que deseas eliminar {count, plural, one {esta {singularEntity}} other {estas {pluralEntity}}}?",
+ "delete_object_overflow": "…y {count} other {count, plural, one {{singularEntity}} other {{pluralEntity}}}.",
+ "delete_object_title": "Eliminar {count, plural, one {{singularEntity}} other {{pluralEntity}}}",
+ "edit_entity_title": "Editar {count, plural, one {{singularEntity}} other {{pluralEntity}}}",
+ "export_include_related_objects": "Incluir objetos relacionados en la exportación",
+ "export_title": "Exportar",
+ "lightbox": {
+ "delay": "Retardo (seg)",
+ "display_mode": {
+ "label": "Modo de visualización",
+ "original": "Original",
+ "fit_to_screen": "Ajustar a pantalla",
+ "fit_horizontally": "Ajustar horizontalmente"
+ },
+ "options": "Opciones",
+ "reset_zoom_on_nav": "Restaurar nivel de zoom al cambiar de imagen",
+ "scale_up": {
+ "label": "Ampliación hasta ajuste",
+ "description": "Aumentar imágenes pequeñas hasta rellenar la pantalla"
+ },
+ "scroll_mode": {
+ "label": "Modo scroll",
+ "zoom": "Zoom",
+ "pan_y": "Panorámica eje Y",
+ "description": "Mantener pulsado la tecla shift para cambiar de modo temporalmente."
+ }
+ },
+ "merge_tags": {
+ "destination": "Destino",
+ "source": "Fuente"
+ },
+ "overwrite_filter_confirm": "¿Estás seguro de sobreescribir la consulta guardada {entityName}?",
+ "scene_gen": {
+ "image_previews": "Imágenes previas (vistas previas WebP animadas). Solo requerido si el tipo de previsualización seleccionado es “Imágenes animadas”.",
+ "markers": "Marcadores (vídeos de 20 segundos que comienzan a partir del tiempo de reproducción seleccionado)",
+ "marker_image_previews": "Vistas previas de marcadores (vistas previas WebP animadas). Solo requerido si el tipo de previsualización seleccionado es “Imágenes animadas”.",
+ "marker_screenshots": "Capturas de pantalla de marcadores (imagen JPG estática). Solo requerido si el tipo de previsualización seleccionado es “Imagen estática”.",
+ "overwrite": "Sobreescribir archivos generados.",
+ "phash": "PHases o Hashes (para búsqueda de duplicados)",
+ "preview_exclude_end_time_desc": "Excluir los últimos X segundos de la vista previa de la escena. Puede ser un valor en segundos o un porcentaje (p.ej. 2%) de la duración total de la escena.",
+ "preview_exclude_end_time_head": "Excluir desde el final del vídeo",
+ "preview_exclude_start_time_desc": "Excluir los primeros X segundos de la vista previa de la escena. Puede ser un valor en segundos o un porcentaje (p.ej. 2%) de la duración total de la escena.",
+ "preview_exclude_start_time_head": "Excluir desde el inicio del vídeo",
+ "preview_options": "Opciones de previsualización",
+ "preview_preset_desc": "La configuración predeterminada regula el tamaño, calidad y tiempo de codificación de las generación de vistas previas. Ajustes por encima de “lento” pueden disminuir los resultados obtenidos y no son recomendables.",
+ "preview_preset_head": "Codificación predeterminada de vistas previas",
+ "preview_seg_count_desc": "Número de segmentos en la vista previa de los ficheros.",
+ "preview_seg_count_head": "Número de segmentos en la previsualización",
+ "preview_seg_duration_desc": "Duración en segundos de cada segmento de la vista previa.",
+ "preview_seg_duration_head": "Duración del segmento en la vista previa",
+ "sprites": "Conjunto de imágenes o “sprites” (para su uso en el depurador/limpiador de escenas)",
+ "transcodes": "Transcodificaciones (conversiones en MP4 de formatos de vídeo no soportados)",
+ "video_previews": "Vistas previas (vistas previas en vídeo que se muestran al pasar el ratón por encima sobre una escena)"
+ },
+ "scenes_found": "{count} escenas encontradas",
+ "scrape_entity_query": "Consulta de escrapeo de {entity_type}",
+ "scrape_entity_title": "Resultados de escrapeo de {entity_type}",
+ "scrape_results_existing": "Existente",
+ "scrape_results_scraped": "Escrapeado",
+ "set_image_url_title": "Dirección web de la imagen",
+ "unsaved_changes": "Los cambios no han sido guardados. ¿Estás seguro que quieres salir?"
+ },
+ "dimensions": "Dimensiones",
+ "director": "Director",
+ "display_mode": {
+ "grid": "Cuadrícula",
+ "list": "Lista",
+ "tagger": "Etiquetadora",
+ "unknown": "Desconocido/a",
+ "wall": "Muro"
+ },
+ "donate": "Donar",
+ "dupe_check": {
+ "description": "El cálculo en los niveles por debajo de “Exacto” puede llevar más tiempo. En los niveles de menor exactitud además pueden aparecer mayor número de falsos positivos en las coincidencias.",
+ "found_sets": "{setCount, plural, one{# conjunto de duplicados encontrado.} other {# conjuntos de duplicados encontrados.}}",
+ "options": {
+ "exact": "Exacto",
+ "high": "Alto",
+ "low": "Bajo",
+ "medium": "Medio"
+ },
+ "search_accuracy_label": "Search Accuracy",
+ "title": "Escenas duplicadas"
+ },
+ "duration": "Duración",
+ "effect_filters": {
+ "aspect": "Exposición",
+ "blue": "Azul",
+ "blur": "Nitidez",
+ "brightness": "Brillo",
+ "contrast": "Contraste",
+ "gamma": "Corrección de la gama de colores",
+ "green": "Verde",
+ "hue": "Color",
+ "name": "Filtro",
+ "name_transforms": "Transformaciones de vídeo",
+ "red": "Rojo",
+ "reset_filters": "Restablecer filtros",
+ "reset_transforms": "Restablecer transformaciones",
+ "rotate": "Rotación",
+ "rotate_left_and_scale": "Rotar a la izquierda y escalar",
+ "rotate_right_and_scale": "Rotar a la derecha y escalar",
+ "saturation": "Saturación",
+ "scale": "Escala",
+ "warmth": "Calidez"
+ },
+ "ethnicity": "Origen étnico",
+ "eye_color": "Color de ojos",
+ "fake_tits": "Pecho operado",
+ "favourite": "Favorita",
+ "file_info": "Información del archivo",
+ "file_mod_time": "Hora de modificación del fichero",
+ "filesize": "Tamaño de archivo",
+ "filter": "Filtro",
+ "filter_name": "Filtrar por nombre",
+ "filters": "Filtros",
+ "framerate": "Tasa de frames",
+ "frames_per_second": "{value} frames por segundo (fps)",
+ "galleries": "Galerías",
+ "gallery": "Galería",
+ "gallery_count": "Número de galerías",
+ "gender": "Género",
+ "hair_color": "Color de pelo",
+ "hasMarkers": "Tiene marcadores",
+ "height": "Estatura",
+ "help": "Ayuda",
+ "image": "Imagen",
+ "image_count": "Número de imágenes",
+ "images": "Imágenes",
+ "include_parent_tags": "Incluir etiquetas de la matriz",
+ "include_sub_studios": "Incluir estudios filiales",
+ "include_sub_tags": "Incluir sub-etiquetas",
+ "instagram": "Instagram",
+ "interactive": "Interactivo",
+ "isMissing": "No se encuentra",
+ "library": "Biblioteca",
+ "loading": {
+ "generic": "Cargando…"
+ },
+ "marker_count": "Número de marcadores",
+ "markers": "Marcadores",
+ "measurements": "Medidas",
+ "media_info": {
+ "audio_codec": "Códec de audio",
+ "checksum": "Checksum",
+ "downloaded_from": "Descargado de",
+ "hash": "Hash",
+ "performer_card": {
+ "age": "{age} {years_old}",
+ "age_context": "{age} {years_old} en esta escena"
+ },
+ "phash": "PHash",
+ "stream": "Stream",
+ "video_codec": "Códec de vídeo"
+ },
+ "megabits_per_second": "{value} megabits por segundo (mbps)",
+ "metadata": "Metadatos",
+ "movie": "Película",
+ "movie_scene_number": "Número de escena",
+ "movies": "Películas",
+ "name": "Nombre",
+ "new": "Nueva",
+ "none": "Ninguno/a",
+ "o_counter": "Contador “P”",
+ "operations": "Acciones",
+ "organized": "Clasificadas",
+ "pagination": {
+ "first": "Primera",
+ "last": "Última",
+ "next": "Siguiente",
+ "previous": "Anterior"
+ },
+ "parent_of": "Matriz de {children}",
+ "parent_studios": "Estudio matriz",
+ "parent_tags": "Etiqueta matriz",
+ "parent_tag_count": "Contador de etiqueta matriz",
+ "part_of": "Parte de {parent}",
+ "path": "Ruta",
+ "performer": "Actriz/Actor",
+ "performer_count": "Contador de ",
+ "performer_image": "Imagen de actriz/actor",
+ "performers": "Actrices/Actores",
+ "performerTags": "Etiquetas de actriz/actor",
+ "piercings": "Piercings",
+ "queue": "Cola",
+ "random": "Aleatoria",
+ "rating": "Puntuación",
+ "resolution": "Resolución",
+ "scene": "Escena",
+ "scene_count": "Contador de escenas",
+ "scene_id": "Indentificador de escena",
+ "scenes": "Escenas",
+ "scenes_updated_at": "Escena actualizada a las",
+ "sceneTagger": "Etiquetador de escenas",
+ "sceneTags": "Etiquetas de escena",
+ "search_filter": {
+ "add_filter": "Añadir filtro",
+ "name": "Filtro",
+ "saved_filters": "Filtros guardados",
+ "update_filter": "Actualizar filtro"
+ },
+ "seconds": "Segundos",
+ "settings": "Preferencias",
+ "sub_tag_of": "Sub-etiquetas de {parent}",
+ "stash_id": "Identificador único Stash",
+ "status": "Estado: {statusText}",
+ "studio": "Estudio",
+ "studio_depth": "Niveles (en blanco para mostrar todos)",
+ "studios": "Estudios",
+ "synopsis": "Sinopsis",
+ "tag": "Etiqueta",
+ "tag_count": "Contador de etiqueta",
+ "tags": "Etiquetas",
+ "tattoos": "Tattoos",
+ "title": "Título",
+ "toast": {
+ "added_entity": "{entity} añadida",
+ "added_generation_job_to_queue": "Tarea de generación añadida a la cola",
+ "create_entity": "{entity} creada",
+ "default_filter_set": "Establecer como filtro por defecto",
+ "delete_entity": "Eliminar {count, plural, one {{singularEntity}} other {{pluralEntity}}}",
+ "delete_past_tense": "Eliminado {count, plural, one {{singularEntity}} other {{pluralEntity}}}",
+ "generating_screenshot": "Generando captura…",
+ "merged_tags": "Etiquetas combinadas",
+ "rescanning_entity": "Reescanear {count, plural, one {{singularEntity}} other {{pluralEntity}}}…",
+ "started_auto_tagging": "Auto-etiquetado iniciado",
+ "saved_entity": "{entity} guardada",
+ "updated_entity": "{entity} actualizada"
+ },
+ "total": "Total",
+ "twitter": "Twitter",
+ "up-dir": "Ascender en el árbol de directorios",
+ "updated_at": "Actualizado a las",
+ "url": "Dirección web",
+ "weight": "Peso",
+ "years_old": "años",
+ "stats": {
+ "image_size": "Tamaño de imágenes",
+ "scenes_size": "Tamaño de las escenas",
+ "scenes_duration": "Duración de las escenas"
+ }
+}
diff --git a/ui/v2.5/src/locales/index.ts b/ui/v2.5/src/locales/index.ts
index 3f2682f33..6a3534d8d 100644
--- a/ui/v2.5/src/locales/index.ts
+++ b/ui/v2.5/src/locales/index.ts
@@ -1,6 +1,7 @@
import deDE from "./de-DE.json";
import enGB from "./en-GB.json";
import enUS from "./en-US.json";
+import esES from "./es-ES.json";
import ptBR from "./pt-BR.json";
import itIT from "./it-IT.json";
import svSE from "./sv-SE.json";
@@ -11,6 +12,7 @@ export default {
deDE,
enGB,
enUS,
+ esES,
ptBR,
itIT,
svSE,