Merge branch 'pulsejet:master' into issue-738.ux-improvements

pull/752/head
Alex Saltykov 2023-07-25 13:13:02 +03:00 committed by GitHub
commit 7eca2b7111
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
34 changed files with 2523 additions and 1918 deletions

View File

@ -31,7 +31,6 @@ build-js-production:
patch-external: patch-external:
patch -p1 -N < patches/scroller-perf.patch || true patch -p1 -N < patches/scroller-perf.patch || true
patch -p1 -N < patches/scroller-sticky.patch || true patch -p1 -N < patches/scroller-sticky.patch || true
bash ./patches/filerobot-patch.sh
watch-js: watch-js:
npm run watch npm run watch

3
l10n/ar.js vendored
View File

@ -78,7 +78,7 @@ OC.L10N.register(
"Sort folders oldest-first" : "رتّب المجلدات من الأقدم للأحدث", "Sort folders oldest-first" : "رتّب المجلدات من الأقدم للأحدث",
"Sort albums oldest-first" : "رتِّب الألبومات من الأقدم إلى الأحدث", "Sort albums oldest-first" : "رتِّب الألبومات من الأقدم إلى الأحدث",
"Choose Timeline Paths" : "اختر مسارات التسلسل الزمني", "Choose Timeline Paths" : "اختر مسارات التسلسل الزمني",
"Choose the root for the folders view" : "إختَر الجذر الدليل الأساسي لعرض المجلدات", "Choose the root for the folders view" : "إختَر الدليل الأساسي لعرض المجلدات",
"Are you sure you want to log out {user}?" : "هل أنت متأكد من أنك تريد تسجيل الخروج {المستخدم}؟", "Are you sure you want to log out {user}?" : "هل أنت متأكد من أنك تريد تسجيل الخروج {المستخدم}؟",
"Close" : "إغلاق", "Close" : "إغلاق",
"{photoCount} photos" : "{photoCount} صور", "{photoCount} photos" : "{photoCount} صور",
@ -168,6 +168,7 @@ OC.L10N.register(
"Enable NVENC Temporal AQ" : "تمكين التكمية التكيفية المؤقتة لمرمز NVENC", "Enable NVENC Temporal AQ" : "تمكين التكمية التكيفية المؤقتة لمرمز NVENC",
"NPP scaler" : "معداد NPP", "NPP scaler" : "معداد NPP",
"CUDA scaler" : "معدّاد CUDA ", "CUDA scaler" : "معدّاد CUDA ",
"not recommended" : "لا يُوصى به",
"VA-API device ({dev}) is readable" : "جهاز VA-API ({dev}) قابل للقراءة", "VA-API device ({dev}) is readable" : "جهاز VA-API ({dev}) قابل للقراءة",
"VA-API device ({dev}) not found" : "لم يتم العثور علي جهاز VA-API ({dev})", "VA-API device ({dev}) not found" : "لم يتم العثور علي جهاز VA-API ({dev})",
"VA-API device ({dev}) has incorrect permissions" : "جهاز VA-API ({dev}) لديه أذونات غير صحيحة", "VA-API device ({dev}) has incorrect permissions" : "جهاز VA-API ({dev}) لديه أذونات غير صحيحة",

3
l10n/ar.json vendored
View File

@ -76,7 +76,7 @@
"Sort folders oldest-first" : "رتّب المجلدات من الأقدم للأحدث", "Sort folders oldest-first" : "رتّب المجلدات من الأقدم للأحدث",
"Sort albums oldest-first" : "رتِّب الألبومات من الأقدم إلى الأحدث", "Sort albums oldest-first" : "رتِّب الألبومات من الأقدم إلى الأحدث",
"Choose Timeline Paths" : "اختر مسارات التسلسل الزمني", "Choose Timeline Paths" : "اختر مسارات التسلسل الزمني",
"Choose the root for the folders view" : "إختَر الجذر الدليل الأساسي لعرض المجلدات", "Choose the root for the folders view" : "إختَر الدليل الأساسي لعرض المجلدات",
"Are you sure you want to log out {user}?" : "هل أنت متأكد من أنك تريد تسجيل الخروج {المستخدم}؟", "Are you sure you want to log out {user}?" : "هل أنت متأكد من أنك تريد تسجيل الخروج {المستخدم}؟",
"Close" : "إغلاق", "Close" : "إغلاق",
"{photoCount} photos" : "{photoCount} صور", "{photoCount} photos" : "{photoCount} صور",
@ -166,6 +166,7 @@
"Enable NVENC Temporal AQ" : "تمكين التكمية التكيفية المؤقتة لمرمز NVENC", "Enable NVENC Temporal AQ" : "تمكين التكمية التكيفية المؤقتة لمرمز NVENC",
"NPP scaler" : "معداد NPP", "NPP scaler" : "معداد NPP",
"CUDA scaler" : "معدّاد CUDA ", "CUDA scaler" : "معدّاد CUDA ",
"not recommended" : "لا يُوصى به",
"VA-API device ({dev}) is readable" : "جهاز VA-API ({dev}) قابل للقراءة", "VA-API device ({dev}) is readable" : "جهاز VA-API ({dev}) قابل للقراءة",
"VA-API device ({dev}) not found" : "لم يتم العثور علي جهاز VA-API ({dev})", "VA-API device ({dev}) not found" : "لم يتم العثور علي جهاز VA-API ({dev})",
"VA-API device ({dev}) has incorrect permissions" : "جهاز VA-API ({dev}) لديه أذونات غير صحيحة", "VA-API device ({dev}) has incorrect permissions" : "جهاز VA-API ({dev}) لديه أذونات غير صحيحة",

1
l10n/cs.js vendored
View File

@ -167,6 +167,7 @@ OC.L10N.register(
"Enable NVENC Temporal AQ" : "Zapnout NVENC Temporal AQ", "Enable NVENC Temporal AQ" : "Zapnout NVENC Temporal AQ",
"NPP scaler" : "NPP škálování", "NPP scaler" : "NPP škálování",
"CUDA scaler" : "CUDA škálování", "CUDA scaler" : "CUDA škálování",
"not recommended" : "nedoporučeno",
"VA-API device ({dev}) is readable" : "VA-API zařízení ({dev}) není přístupné pro čtení", "VA-API device ({dev}) is readable" : "VA-API zařízení ({dev}) není přístupné pro čtení",
"VA-API device ({dev}) not found" : "VA-API zařízení ({dev}) nenalezeno", "VA-API device ({dev}) not found" : "VA-API zařízení ({dev}) nenalezeno",
"VA-API device ({dev}) has incorrect permissions" : "Na VA-API zařízení ({dev}) nejsou správně nastavená práva", "VA-API device ({dev}) has incorrect permissions" : "Na VA-API zařízení ({dev}) nejsou správně nastavená práva",

1
l10n/cs.json vendored
View File

@ -165,6 +165,7 @@
"Enable NVENC Temporal AQ" : "Zapnout NVENC Temporal AQ", "Enable NVENC Temporal AQ" : "Zapnout NVENC Temporal AQ",
"NPP scaler" : "NPP škálování", "NPP scaler" : "NPP škálování",
"CUDA scaler" : "CUDA škálování", "CUDA scaler" : "CUDA škálování",
"not recommended" : "nedoporučeno",
"VA-API device ({dev}) is readable" : "VA-API zařízení ({dev}) není přístupné pro čtení", "VA-API device ({dev}) is readable" : "VA-API zařízení ({dev}) není přístupné pro čtení",
"VA-API device ({dev}) not found" : "VA-API zařízení ({dev}) nenalezeno", "VA-API device ({dev}) not found" : "VA-API zařízení ({dev}) nenalezeno",
"VA-API device ({dev}) has incorrect permissions" : "Na VA-API zařízení ({dev}) nejsou správně nastavená práva", "VA-API device ({dev}) has incorrect permissions" : "Na VA-API zařízení ({dev}) nejsou správně nastavená práva",

1
l10n/de_DE.js vendored
View File

@ -168,6 +168,7 @@ OC.L10N.register(
"Enable NVENC Temporal AQ" : "NVENC Temporal AQ aktivieren", "Enable NVENC Temporal AQ" : "NVENC Temporal AQ aktivieren",
"NPP scaler" : "NPP-Scaler", "NPP scaler" : "NPP-Scaler",
"CUDA scaler" : "CUDA-Scaler", "CUDA scaler" : "CUDA-Scaler",
"not recommended" : "Nicht empfohlen",
"VA-API device ({dev}) is readable" : "VA-API-Gerät ({dev}) ist lesbar", "VA-API device ({dev}) is readable" : "VA-API-Gerät ({dev}) ist lesbar",
"VA-API device ({dev}) not found" : "VA-API-Gerät ({dev}) nicht gefunden", "VA-API device ({dev}) not found" : "VA-API-Gerät ({dev}) nicht gefunden",
"VA-API device ({dev}) has incorrect permissions" : "VA-API-Gerät ({dev}) hat falsche Berechtigungen", "VA-API device ({dev}) has incorrect permissions" : "VA-API-Gerät ({dev}) hat falsche Berechtigungen",

1
l10n/de_DE.json vendored
View File

@ -166,6 +166,7 @@
"Enable NVENC Temporal AQ" : "NVENC Temporal AQ aktivieren", "Enable NVENC Temporal AQ" : "NVENC Temporal AQ aktivieren",
"NPP scaler" : "NPP-Scaler", "NPP scaler" : "NPP-Scaler",
"CUDA scaler" : "CUDA-Scaler", "CUDA scaler" : "CUDA-Scaler",
"not recommended" : "Nicht empfohlen",
"VA-API device ({dev}) is readable" : "VA-API-Gerät ({dev}) ist lesbar", "VA-API device ({dev}) is readable" : "VA-API-Gerät ({dev}) ist lesbar",
"VA-API device ({dev}) not found" : "VA-API-Gerät ({dev}) nicht gefunden", "VA-API device ({dev}) not found" : "VA-API-Gerät ({dev}) nicht gefunden",
"VA-API device ({dev}) has incorrect permissions" : "VA-API-Gerät ({dev}) hat falsche Berechtigungen", "VA-API device ({dev}) has incorrect permissions" : "VA-API-Gerät ({dev}) hat falsche Berechtigungen",

1
l10n/en_GB.js vendored
View File

@ -168,6 +168,7 @@ OC.L10N.register(
"Enable NVENC Temporal AQ" : "Enable NVENC Temporal AQ", "Enable NVENC Temporal AQ" : "Enable NVENC Temporal AQ",
"NPP scaler" : "NPP scaler", "NPP scaler" : "NPP scaler",
"CUDA scaler" : "CUDA scaler", "CUDA scaler" : "CUDA scaler",
"not recommended" : "not recommended",
"VA-API device ({dev}) is readable" : "VA-API device ({dev}) is readable", "VA-API device ({dev}) is readable" : "VA-API device ({dev}) is readable",
"VA-API device ({dev}) not found" : "VA-API device ({dev}) not found", "VA-API device ({dev}) not found" : "VA-API device ({dev}) not found",
"VA-API device ({dev}) has incorrect permissions" : "VA-API device ({dev}) has incorrect permissions", "VA-API device ({dev}) has incorrect permissions" : "VA-API device ({dev}) has incorrect permissions",

1
l10n/en_GB.json vendored
View File

@ -166,6 +166,7 @@
"Enable NVENC Temporal AQ" : "Enable NVENC Temporal AQ", "Enable NVENC Temporal AQ" : "Enable NVENC Temporal AQ",
"NPP scaler" : "NPP scaler", "NPP scaler" : "NPP scaler",
"CUDA scaler" : "CUDA scaler", "CUDA scaler" : "CUDA scaler",
"not recommended" : "not recommended",
"VA-API device ({dev}) is readable" : "VA-API device ({dev}) is readable", "VA-API device ({dev}) is readable" : "VA-API device ({dev}) is readable",
"VA-API device ({dev}) not found" : "VA-API device ({dev}) not found", "VA-API device ({dev}) not found" : "VA-API device ({dev}) not found",
"VA-API device ({dev}) has incorrect permissions" : "VA-API device ({dev}) has incorrect permissions", "VA-API device ({dev}) has incorrect permissions" : "VA-API device ({dev}) has incorrect permissions",

258
l10n/es_EC.js vendored
View File

@ -2,8 +2,13 @@ OC.L10N.register(
"memories", "memories",
{ {
"Download" : "Descargar", "Download" : "Descargar",
"Memories" : "Memorias",
"Fast, modern and advanced photo management suite" : "Fast, modern and advanced photo management suite",
"# Memories: Photo Management for Nextcloud\n\nMemories is a *batteries-included* photo management solution for Nextcloud with advanced features including:\n\n- **📸 Timeline**: Sort photos and videos by date taken, parsed from Exif data.\n- **⏪ Rewind**: Jump to any time in the past instantly and relive your memories.\n- **🤖 AI Tagging**: Group photos by people and objects, powered by [recognize](https://github.com/nextcloud/recognize) and [facerecognition](https://github.com/matiasdelellis/facerecognition).\n- **🖼️ Albums**: Create albums to group photos and videos together. Then share these albums with others.\n- **🫱🏻‍🫲🏻 External Sharing**: Share photos and videos with people outside of your Nextcloud instance.\n- **📱 Mobile Support**: Work from any device, of any shape and size through the web app.\n- **✏️ Edit Metadata**: Edit dates and other metadata on photos quickly and in bulk.\n- **📦 Archive**: Store photos you don't want to see in your timeline in a separate folder.\n- **📹 Video Transcoding**: Transcode videos and use HLS for maximal performance.\n- **🗺️ Map**: View your photos on a map, tagged with accurate reverse geocoding.\n- **📦 Migration**: Migrate easily from Nextcloud Photos and Google Takeout.\n- **⚡️ Performance**: Do all this very fast.\n\n## 🚀 Installation\n\n1. Install the app from the Nextcloud app store (try a demo [here](https://demo.memories.gallery/apps/memories/)).\n1. Perform the recommended [configuration steps](https://memories.gallery/config/).\n1. Run `php occ memories:index` to generate metadata indices for existing photos.\n1. Open the 📷 Memories app in Nextcloud and set the directory containing your photos." : "# Memories: Gestión de Fotos para Nextcloud\n \n Memories es una solución de gestión de fotos para Nextcloud que incluye una amplia gama de características avanzadas, que incluyen:\n \n - **📸 Línea de tiempo**: Ordena fotos y videos por fecha de captura, extraída de los datos Exif.\n - **⏪ Retroceder**: Salta instantáneamente a cualquier momento del pasado y revive tus recuerdos.\n - **🤖 Etiquetado de IA**: Agrupa fotos por personas y objetos, potenciado por [recognize](https://github.com/nextcloud/recognize) y [facerecognition](https://github.com/matiasdelellis/facerecognition).\n - **🖼️ Álbumes**: Crea álbumes para agrupar fotos y videos juntos. Luego comparte estos álbumes con otros.\n - **🫱🏻‍🫲🏻 Compartir Externo**: Comparte fotos y videos con personas fuera de tu instancia de Nextcloud.\n - **📱 Soporte Móvil**: Trabaja desde cualquier dispositivo, de cualquier forma y tamaño a través de la aplicación web.\n - **✏️ Editar Metadatos**: Edita rápidamente fechas y otros metadatos de las fotos de forma individual o masiva.\n - **📦 Archivo**: Almacena fotos que no deseas ver en tu línea de tiempo en una carpeta separada.\n - **📹 Transcodificación de Video**: Transcodifica videos y utiliza HLS para obtener un rendimiento máximo.\n - **🗺️ Mapa**: Visualiza tus fotos en un mapa, etiquetadas con una geocodificación inversa precisa.\n - **📦 Migración**: Migra fácilmente desde Nextcloud Photos y Google Takeout.\n - **⚡️ Rendimiento**: Realiza todas estas operaciones de manera muy rápida.\n \n ## 🚀 Instalación\n \n 1. Instala la aplicación desde la tienda de aplicaciones de Nextcloud (prueba una demo [aquí](https://demo.memories.gallery/apps/memories/)).\n 2. Realiza los pasos de [configuración recomendados](https://memories.gallery/config/).\n 3. Ejecuta `php occ memories:index` para generar índices de metadatos para las fotos existentes.\n 4. Abre la aplicación 📷 Memories en Nextcloud y establece el directorio que contiene tus fotos.",
"Settings" : "Ajustes", "Settings" : "Ajustes",
"People (Recognize)" : "Personas (Recognize)",
"People" : "Personas", "People" : "Personas",
"People (Face Recognition)" : "Personas (Reconocimiento Facial)",
"Info" : "Info", "Info" : "Info",
"Timeline" : "Línea de tiempo", "Timeline" : "Línea de tiempo",
"Folders" : "Carpetas", "Folders" : "Carpetas",
@ -15,21 +20,165 @@ OC.L10N.register(
"Places" : "Lugares", "Places" : "Lugares",
"Map" : "Mapa", "Map" : "Mapa",
"Tags" : "Etiquetas", "Tags" : "Etiquetas",
"View all" : "Ver todo",
"Recognize" : "Reconocer", "Recognize" : "Reconocer",
"Face Recognition" : "Reconocimiento Facial",
"A better photos experience awaits you" : "Una experiencia de fotos mejor te espera",
"Choose the root folder of your timeline to begin" : "Elige la carpeta raíz de tu línea de tiempo para comenzar",
"Continue to Memories" : "Continuar a Memories",
"Choose again" : "Elegir de nuevo",
"Click here to start" : "Haz clic aquí para empezar",
"You can always change this later in settings" : "Siempre puedes cambiar esto luego en la configuración",
"If you just installed Memories, visit the admin panel first." : "Si acabas de instalar Memories, visita primero el panel de administración.",
"Choose the root of your timeline" : "Elegir la raíz de tu línea de tiempo",
"The selected folder does not seem to be valid. Try again." : "La carpeta seleccionada parece no ser válida. Inténtalo de nuevo.",
"No photos were found in the selected folder." : "No se encontraron fotos en la carpeta seleccionada.",
"This can happen because your media is still indexing." : "Esto puede suceder porque tus medios aún se están indexando.",
"Visit the admin panel to make sure Memories is configured correctly." : "Visita el panel de administración para asegurarte de que Memories esté configurado correctamente.",
"_Found {n} item in {path}_::_Found {n} items in {path}_" : ["Encontrado {n} elemento en {path}","Encontrados {n} elementos en {path}","Encontrados {n} elementos en {path}"],
"Edit" : "Editar", "Edit" : "Editar",
"No title" : "Sin título",
"No description" : "Sin descripción",
"No coordinates" : "Sin coordenadas",
"Click edit to set location" : "Haz clic en editar para establecer la ubicación",
"Photos" : "Fotos", "Photos" : "Fotos",
"Explore" : "Explorar", "Explore" : "Explorar",
"Cancel" : "Cancelar", "Cancel" : "Cancelar",
"Delete" : "Borrar", "Delete" : "Borrar",
"Remove from album" : "Eliminar del álbum",
"Favorite" : "Hacer favorito", "Favorite" : "Hacer favorito",
"Unarchive" : "Desarchivar", "Unarchive" : "Desarchivar",
"Edit metadata" : "Editar metadatos",
"View in folder" : "Ver en la carpeta", "View in folder" : "Ver en la carpeta",
"Move to folder" : "Mover a carpeta",
"Add to album" : "Agregar al álbum", "Add to album" : "Agregar al álbum",
"Move to person" : "Mover a persona",
"Remove from person" : "Eliminar de persona",
"You are about to download a large number of files. Are you sure?" : "Estás a punto de descargar un gran número de archivos. ¿Estás seguro?",
"You are about to delete a large number of files. Are you sure?" : "Estás a punto de eliminar un gran número de archivos. ¿Estás seguro?",
"Failed to delete files" : "Error al eliminar archivos",
"You are about to touch a large number of files. Are you sure?" : "Estás a punto de modificar un gran número de archivos. ¿Estás seguro?",
"You must enable \"Mark person in preview\" to use this feature" : "Debes habilitar \"Marcar persona en la vista previa\" para usar esta función",
"Only user \"{user}\" can update this person" : "Solo el usuario \"{user}\" puede actualizar esta persona",
"_{n} selected_::_{n} selected_" : ["{n} seleccionado","{n} seleccionados","{n} seleccionado"],
"Memories Settings" : "Configuración de Memories",
"General" : "General", "General" : "General",
"Timeline Path" : "Ruta de la Línea de Tiempo",
"Square grid mode" : "Modo de cuadrícula cuadrada",
"Show past photos on top of timeline" : "Mostrar fotos pasadas en la parte superior de la línea de tiempo",
"Load full size image on zoom" : "Cargar imagen de tamaño completo al hacer zoom",
"Always load full size image (not recommended)" : "Cargar siempre imágenes de tamaño completo (no recomendado)",
"Account" : "Cuenta", "Account" : "Cuenta",
"Logged in as {user}" : "Sesión iniciada como {user}",
"Sign out" : "Cerrar sesión",
"Device Folders" : "Carpetas de Dispositivos",
"Local folders to include in the timeline view" : "Carpetas locales para incluir en la vista de la línea de tiempo",
"Folders Path" : "Ruta de Carpetas",
"Show hidden folders" : "Mostrar carpetas ocultas",
"Sort folders oldest-first" : "Ordenar carpetas desde la más antigua",
"Sort albums oldest-first" : "Ordenar álbumes desde el más antiguo",
"Choose Timeline Paths" : "Elegir Rutas de la Línea de Tiempo",
"Choose the root for the folders view" : "Elegir la raíz para la vista de carpetas",
"Are you sure you want to log out {user}?" : "¿Estás seguro de que quieres cerrar la sesión de {user}?",
"Close" : "Cerrar", "Close" : "Cerrar",
"{photoCount} photos" : "{photoCount} fotos",
"Failed to load some photos" : "Error al cargar algunas fotos",
"Failed to update setting" : "Error al actualizar la configuración",
"EXIF Extraction" : "Extracción de Exif",
"Path to packaged exiftool binary" : "Ruta al binario Exiftool empaquetado",
"You need perl only if the packaged exiftool binary does not work for some reason." : "Necesitas Perl solo si el binario Exiftool empaquetado no funciona por alguna razón.",
"Use system perl (only if exiftool binary does not work)" : "Usar Perl del sistema (solo si el binario Exiftool no funciona)",
"File Support" : "Soporte de Archivos",
"You can configure the enabled Nextcloud preview providers below." : "Puedes configurar los proveedores de vista previa de Nextcloud activados a continuación.",
"If you are using Imaginary for preview generation, you can ignore this section." : "Si estás utilizando Imaginary para la generación de vistas previas, puedes ignorar esta sección.",
"To enable RAW support, install the Camera RAW Previews app." : "Para habilitar el soporte RAW, instala la aplicación Camera RAW Previews.",
"Documentation." : "Documentación.",
"The following MIME types are configured for preview generation." : "Los siguientes tipos MIME están configurados para la generación de vistas previas.",
"Max preview size (trade-off between quality and storage requirements)." : "Tamaño máximo de vista previa (compromiso entre calidad y requisitos de almacenamiento).",
"Max memory for preview generation (MB)" : "Memoria máxima para la generación de vistas previas (MB)",
"Max size of preview files (MB)" : "Tamaño máximo de archivos de vista previa (MB)",
"Images (JPEG, PNG, GIF, BMP)" : "Imágenes (JPEG, PNG, GIF, BMP)",
"HEIC (Imagick)" : "HEIC (Imagick)",
"TIFF (Imagick)" : "TIFF (Imagick)",
"Videos (ffmpeg)" : "Videos (ffmpeg)",
"Media Indexing" : "Indexación de Medios",
"{n} media files have been indexed" : "{n} archivos multimedia han sido indexados",
"Automatic Indexing status: {status}" : "Estado de la indexación automática: {status}",
"Last index job was run {t} seconds ago." : "La última tarea de indexación se ejecutó hace {t} segundos.",
"It took {t} seconds to complete." : "Tardó {t} segundos en completarse.",
"It is still running or was interrupted." : "Actualmente está en ejecución o fue interrumpida.",
"Only server-side encryption (OC_DEFAULT_MODULE) is supported, but another encryption module is enabled." : "Solo se admite el cifrado del lado del servidor (OC_DEFAULT_MODULE), pero otro módulo de cifrado está habilitado.",
"The EXIF indexes are built and checked in a periodic background task. Be careful when selecting anything other than automatic indexing. For example, setting the indexing to only timeline folders may cause delays before media becomes available to users, since the user configures the timeline only after logging in." : "Los índices EXIF se construyen y verifican en una tarea de fondo periódica. Ten cuidado al seleccionar algo distinto de la indexación automática. Por ejemplo, establecer la indexación solo para carpetas de la línea de tiempo puede causar retrasos antes de que los medios estén disponibles para los usuarios, ya que el usuario configura la línea de tiempo solo después de iniciar sesión.",
"Folders with a \".nomedia\" file are always excluded from indexing." : "Las carpetas con un archivo \".nomedia\" siempre se excluyen de la indexación.",
"Index all media automatically (recommended)" : "Indexar automáticamente todos los medios (recomendado)",
"Index per-user timeline folders (not recommended)" : "Indexar carpetas de la línea de tiempo por usuario (no recomendado)",
"Index a fixed relative path" : "Indexar una ruta relativa fija",
"Disable background indexing" : "Desactivar la indexación en segundo plano",
"Indexing path (relative, all users)" : "Ruta de indexación (relativa, todos los usuarios)",
"For advanced usage, perform a run of indexing by running:" : "Para un uso avanzado, realiza una ejecución de indexación ejecutando:",
"Run index in parallel with 4 threads:" : "Ejecutar la indexación en paralelo con 4 hilos:",
"Force re-indexing of all files:" : "Forzar la indexación de todos los archivos nuevamente:",
"You can limit indexing by user and/or folder:" : "Puedes limitar la indexación por usuario y/o carpeta:",
"Clear all existing index tables:" : "Eliminar todas las tablas de índices existentes:",
"Performance" : "Rendimiento", "Performance" : "Rendimiento",
"HTTPS is enabled" : "HTTPS está habilitado",
"You are accessing this page over an insecure context. Several browser APIs are not available, which will make Memories very slow. Enable HTTPS on your server to improve performance." : "Estás accediendo a esta página en un contexto inseguro. Varias API del navegador no están disponibles, lo que hará que Memories sea muy lento. Habilita HTTPS en tu servidor para mejorar el rendimiento.",
"HTTP/2 or HTTP/3 is enabled" : "Se ha habilitado HTTP/2 o HTTP/3",
"HTTP/2 or HTTP/3 is strongly recommended ({httpVer} detected)" : "Se recomienda encarecidamente HTTP/2 o HTTP/3 (detectado {httpVer})",
"Unknown" : "Desconocido", "Unknown" : "Desconocido",
"Reverse Geocoding" : "Geocodificación Inversa",
"Database is populated with {n} geometries." : "La base de datos está poblada con {n} geometrías.",
"Geometry table has not been created." : "No se ha creado la tabla de geometrías.",
"Looks like the planet data is incomplete." : "Parece que los datos del planeta están incompletos.",
"Reverse geocoding has not been configured ({status})." : "No se ha configurado la geocodificación inversa ({status}).",
"Memories supports offline reverse geocoding using the OpenStreetMaps data on MySQL and Postgres." : "Memories admite la geocodificación inversa sin conexión utilizando los datos de OpenStreetMaps en MySQL y Postgres.",
"You need to download the planet data into your database. This is highly recommended and has low overhead." : "Debes descargar los datos del planeta en tu base de datos. Esto es muy recomendable y tiene poco sobrecarga.",
"If the button below does not work for importing the planet data, use the following command:" : "Si el botón de abajo no funciona para importar los datos del planeta, usa el siguiente comando:",
"Note: the geometry data is stored in the memories_planet_geometry table, with no prefix." : "Nota: los datos de geometría se almacenan en la tabla memories_planet_geometry, sin prefijo.",
"Download planet database" : "Descargar base de datos del planeta",
"Geometry support was not detected in your database" : "No se detectó el soporte de geometría en tu base de datos",
"MySQL-like geometry support was detected " : "Se detectó el soporte de geometría similar a MySQL",
"Postgres native geometry support was detected" : "Se detectó el soporte de geometría nativo de Postgres",
"Looks like the database is already setup. Are you sure you want to redownload planet data?" : "Parece que la base de datos ya está configurada. ¿Seguro que quieres volver a descargar los datos del planeta?",
"You are about to download the planet database. This may take a while." : "Estás a punto de descargar la base de datos del planeta. Esto puede llevar un tiempo.",
"This may also cause all photos to be re-indexed!" : "¡Esto también puede hacer que se vuelvan a indexar todas las fotos!",
"Video Streaming" : "Streaming de Video",
"Live transcoding provides for adaptive streaming of videos using HLS." : "La transcodificación en vivo proporciona transmisión adaptable de videos utilizando HLS.",
"Note that this may be very CPU intensive without hardware acceleration, and transcoding will not be used for external storage." : "Ten en cuenta que esto puede ser muy intensivo para la CPU sin aceleración de hardware, y la transcodificación no se utilizará para el almacenamiento externo.",
"Enable Transcoding" : "Habilitar la transcodificación",
"ffmpeg path" : "Ruta de ffmpeg",
"ffprobe path" : "Ruta de ffprobe",
"Global default video quality (user may override)" : "Calidad de video predeterminada global (el usuario puede anular)",
"Auto (adaptive transcode)" : "Auto (transcodificación adaptable)",
"Original (transcode with max quality)" : "Original (transcodificación con máxima calidad)",
"Direct (original video file without transcode)" : "Directa (archivo de video original sin transcodificación)",
"Hardware Acceleration" : "Aceleración de Hardware",
"You must first make sure the correct drivers are installed before configuring acceleration." : "Primero debes asegurarte de que los controladores correctos estén instalados antes de configurar la aceleración.",
"Make sure you test hardware acceleration with various options after enabling." : "Asegúrate de probar la aceleración de hardware con varias opciones después de habilitarla.",
"Do not enable multiple types of hardware acceleration simultaneously." : "No habilites varios tipos de aceleración de hardware simultáneamente.",
"Intel processors supporting QuickSync Video (QSV) as well as some AMD GPUs can be used for transcoding using VA-API acceleration." : "Los procesadores Intel que admiten QuickSync Video (QSV), así como algunas GPU de AMD, se pueden utilizar para la transcodificación mediante la aceleración VA-API.",
"For more details on driver installation, check the documentation:" : "Para obtener más detalles sobre la instalación del controlador, consulta la documentación:",
"External Link" : "Enlace Externo",
"Enable acceleration with VA-API" : "Habilitar la aceleración con VA-API",
"Enable low-power mode (QSV)" : "Habilitar el modo de bajo consumo (QSV)",
"NVIDIA GPUs can be used for transcoding using the NVENC encoder with the proper drivers." : "Las GPU de NVIDIA se pueden utilizar para la transcodificación utilizando el codificador NVENC con los controladores adecuados.",
"Depending on the versions of the installed SDK and ffmpeg, you need to specify the scaler to use" : "Según las versiones del SDK instalado y ffmpeg, debes especificar el escalador a utilizar",
"No automated tests are available for NVIDIA acceleration." : "No hay pruebas automatizadas disponibles para la aceleración de NVIDIA.",
"Enable acceleration with NVENC" : "Habilitar la aceleración con NVENC",
"Enable NVENC Temporal AQ" : "Habilitar AQ Temporal NVENC",
"NPP scaler" : "Escalador NPP",
"CUDA scaler" : "Escalador CUDA",
"VA-API device ({dev}) is readable" : "El dispositivo VA-API ({dev}) es legible",
"VA-API device ({dev}) not found" : "No se encontró el dispositivo VA-API ({dev})",
"VA-API device ({dev}) has incorrect permissions" : "El dispositivo VA-API ({dev}) tiene permisos incorrectos",
"VA-API device status: {status}" : "Estado del dispositivo VA-API: {status}",
"Transcoder configuration" : "Configuración del Transcodificador",
"Memories uses the go-vod transcoder. You can run go-vod exernally (e.g. in a separate Docker container for hardware acceleration) or use the built-in transcoder. To use an external transcoder, enable the following option and follow the instructions in the documentation:" : "Memories utiliza el transcodificador go-vod. Puedes ejecutar go-vod externamente (por ejemplo, en un contenedor Docker separado para la aceleración de hardware) o utilizar el transcodificador incorporado. Para utilizar un transcodificador externo, habilita la siguiente opción y sigue las instrucciones de la documentación:",
"Enable external transcoder (go-vod)" : "Habilitar transcodificador externo (go-vod)",
"Binary path (local only)" : "Ruta del binario (solo local)",
"Bind address (local only)" : "Dirección de enlace (solo local)",
"Connection address (same as bind if local)" : "Dirección de conexión (misma que enlace si es local)",
"_{n} item added to album_::_{n} items added to album_" : ["{n} elemento añadido al álbum","{n} elementos añadidos al álbum","{n} elementos añadidos al álbum"],
"Add people or groups who can edit your album" : "Agregar personas o grupos que puedan editar tu álbum", "Add people or groups who can edit your album" : "Agregar personas o grupos que puedan editar tu álbum",
"Search for collaborators" : "Buscar colaboradores", "Search for collaborators" : "Buscar colaboradores",
"Search people or groups" : "Buscar personas o grupos", "Search people or groups" : "Buscar personas o grupos",
@ -48,6 +197,11 @@ OC.L10N.register(
"Create new album" : "Crear nuevo álbum", "Create new album" : "Crear nuevo álbum",
"Edit album details" : "Editar detalles del álbum", "Edit album details" : "Editar detalles del álbum",
"New album" : "Nuevo álbum", "New album" : "Nuevo álbum",
"Could not load the selected album" : "No se pudo cargar el álbum seleccionado",
"Remove Album" : "Eliminar Álbum",
"Are you sure you want to permanently remove album \"{name}\"?" : "¿Seguro que deseas eliminar permanentemente el álbum \"{name}\"?",
"Only user \"{user}\" can delete this album" : "Solo el usuario \"{user}\" puede eliminar este álbum",
"Failed to delete {name}." : "Error al eliminar {name}.",
"Name of the album" : "Nombre del álbum", "Name of the album" : "Nombre del álbum",
"Location of the album" : "Ubicación del álbum", "Location of the album" : "Ubicación del álbum",
"Go back to the previous view." : "Volver a la vista anterior.", "Go back to the previous view." : "Volver a la vista anterior.",
@ -57,48 +211,124 @@ OC.L10N.register(
"Back to the new album form." : "Volver al formulario de nuevo álbum.", "Back to the new album form." : "Volver al formulario de nuevo álbum.",
"Save" : "Guardar", "Save" : "Guardar",
"Create album" : "Crear álbum", "Create album" : "Crear álbum",
"Invalid album name; should not contain any slashes." : "Nombre de álbum no válido; no debe contener barras inclinadas.",
"Add selection to album {albumName}" : "Agregar selección a álbum {nombreÁlbum}", "Add selection to album {albumName}" : "Agregar selección a álbum {nombreÁlbum}",
"Create a new album." : "Crear un nuevo álbum.", "Create a new album." : "Crear un nuevo álbum.",
"shared by {owner}" : "compartido por {owner}",
"_%n item_::_%n items_" : ["%n elemento","%n elementos","%n elementos"],
"Share Album" : "Compartir Álbum",
"Save collaborators for this album." : "Guardar colaboradores para este álbum.", "Save collaborators for this album." : "Guardar colaboradores para este álbum.",
"Newest" : "Más recientes",
"Year" : "Año", "Year" : "Año",
"Month" : "Mes", "Month" : "Mes",
"Day" : "Día", "Day" : "Día",
"Time" : "Hora", "Time" : "Hora",
"Hour" : "Hora", "Hour" : "Hora",
"Minute" : "Minuto", "Minute" : "Minuto",
"Oldest" : "Más antiguos",
"Invalid Date" : "Fecha no válida",
"Newest date is older than oldest date" : "La fecha más reciente es anterior a la fecha más antigua",
"Title" : "Título", "Title" : "Título",
"Description" : "Descripción", "Description" : "Descripción",
"Label" : "Etiqueta", "Label" : "Etiqueta",
"Camera Make" : "Marca de la Cámara",
"Camera Model" : "Modelo de la Cámara",
"Lens Model" : "Modelo de Lente",
"Copyright" : "Derechos de autor", "Copyright" : "Derechos de autor",
"Empty" : "Vacío", "Empty" : "Vacío",
"Unchanged" : "Sin cambios",
"Reset" : "Restablecer", "Reset" : "Restablecer",
"Remove location" : "Eliminar ubicación",
"Search location / landmark" : "Buscar ubicación / hito",
"Failed to search for location with Nominatim." : "Error al buscar ubicación con Nominatim.",
"Date / Time" : "Fecha / Hora",
"Collaborative Tags" : "Etiquetas colaborativas", "Collaborative Tags" : "Etiquetas colaborativas",
"EXIF Fields" : "Campos EXIF",
"Geolocation" : "Geolocalización",
"Failed to load metadata for {n} photos." : "Error al cargar los metadatos de {n} fotos.",
"{n} photos cannot be edited (permissions error)." : "No se pueden editar {n} fotos (error de permisos).",
"Remove person" : "Eliminar persona", "Remove person" : "Eliminar persona",
"Are you sure you want to remove {name}?" : "¿Seguro que deseas eliminar {name}?",
"Only user \"{user}\" can delete this person" : "Solo el usuario \"{user}\" puede eliminar a esta persona",
"Rename person" : "Renombrar persona", "Rename person" : "Renombrar persona",
"Name" : "Nombre", "Name" : "Nombre",
"Update" : "Actualizar", "Update" : "Actualizar",
"Failed to rename {oldName} to {name}." : "Error al cambiar el nombre de {oldName} a {name}.",
"Search" : "Buscar", "Search" : "Buscar",
"Loading …" : "Loading …", "Loading …" : "Loading …",
"Enter name of the new face" : "Ingresa el nombre de la nueva cara",
"Failed to create face" : "Error al crear la cara",
"Merge {name} with person" : "Fusionar {name} con persona",
"Are you sure you want to merge {name} with {newName}?" : "¿Seguro que deseas fusionar {name} con {newName}?",
"Too many failures, aborting" : "Demasiados fallos, abortando",
"Error while moving {basename}" : "Error al mover {basename}",
"Failed to move {name}." : "Error al mover {name}.",
"Move selected photos to person" : "Mover fotos seleccionadas a persona",
"Move the selected photos to {target}?" : "¿Mover las fotos seleccionadas a {target}?",
"An error occurred while moving photos from {name}." : "Ocurrió un error al mover las fotos de {name}.",
"Choose a folder" : "Elegir una carpeta",
"_{n} item moved to folder_::_{n} items moved to folder_" : ["{n} elemento movido a carpeta","{n} elementos movidos a carpeta","{n} elementos movidos a carpeta"],
"Remove" : "Eliminar", "Remove" : "Eliminar",
"Add Path" : "Añadir Ruta",
"Add a root to your timeline" : "Añadir una raíz a tu línea de tiempo",
"Link Sharing" : "Compartir enlaces",
"You cannot share the root folder" : "No puedes compartir la carpeta raíz",
"Public link shares are available to people outside Nextcloud." : "Las comparticiones de enlaces públicos están disponibles para personas fuera de Nextcloud.",
"You may create or update permissions on public links using the sidebar." : "Puedes crear o actualizar permisos en los enlaces públicos usando la barra lateral.",
"Click a link to copy to clipboard." : "Haz clic en un enlace para copiarlo al portapapeles.",
"Share link" : "Compartir liga", "Share link" : "Compartir liga",
"Create Link" : "Crear Enlace",
"Refresh" : "Actualizar", "Refresh" : "Actualizar",
"Password protected" : "Protegido con contraseña", "Password protected" : "Protegido con contraseña",
"Expires" : "Expira", "Expires" : "Expira",
"Editable" : "Editable",
"Read only" : "Sólo lectura", "Read only" : "Sólo lectura",
"Link copied to clipboard" : "Enlace copiado al portapapeles", "Link copied to clipboard" : "Enlace copiado al portapapeles",
"Share File" : "Compartir Archivo",
"Reduced Size" : "Tamaño Reducido",
"Share a lower resolution image preview" : "Compartir una vista previa de imagen de menor resolución",
"High Resolution" : "Alta Resolución",
"Share the video as a high quality MOV" : "Compartir el video como un archivo MOV de alta calidad",
"Share the image as a high quality JPEG" : "Compartir la imagen como un archivo JPEG de alta calidad",
"Original File" : "Archivo Original",
"Share the original image / video file" : "Compartir la imagen / video original",
"Public Link" : "Enlace Público",
"Share an external Nextcloud link" : "Compartir un enlace externo de Nextcloud",
"Failed to download file" : "Error al descargar el archivo",
"Cannot share this type of data" : "No se puede compartir este tipo de datos",
"Sort by date" : "Ordenar por fecha", "Sort by date" : "Ordenar por fecha",
"Sort by name" : "Ordenar por nombre", "Sort by name" : "Ordenar por nombre",
"Share album" : "Compartir álbum",
"Download album" : "Descargar álbum",
"Delete album" : "Eliminar álbum", "Delete album" : "Eliminar álbum",
"Nothing to show here" : "Nada que mostrar aquí",
"Unassigned faces" : "Rostros sin asignar", "Unassigned faces" : "Rostros sin asignar",
"Merge with different person" : "Fusionar con otra persona", "Merge with different person" : "Fusionar con otra persona",
"Mark person in preview" : "Marcar persona en la vista previa",
"Folder View" : "Vista de Carpeta",
"Timeline View" : "Vista de Línea de Tiempo",
"Share folder" : "Compartir carpeta", "Share folder" : "Compartir carpeta",
"Move left" : "Mover a la izquierda",
"Move right" : "Mover a la derecha",
"Image saved successfully" : "Imagen guardada exitosamente",
"Error saving image" : "Error al guardar la imagen", "Error saving image" : "Error al guardar la imagen",
"Unsaved changes" : "Cambios no guardados", "Unsaved changes" : "Cambios no guardados",
"Drop changes" : "Descartar cambios", "Drop changes" : "Descartar cambios",
"Share" : "Compartir", "Share" : "Compartir",
"Play Live Photo" : "Reproducir Foto en Vivo",
"Download Video" : "Descargar Video",
"Slideshow" : "Presentación de Diapositivas",
"Previous" : "Previo", "Previous" : "Previo",
"Next" : "Siguiente", "Next" : "Siguiente",
"Editing is currently disabled for Live Photos" : "La edición está deshabilitada actualmente para las Fotos en Vivo",
"Are you sure you want to delete?" : "¿Estás seguro de que quieres eliminarlo?", "Are you sure you want to delete?" : "¿Estás seguro de que quieres eliminarlo?",
"Failed to delete photo" : "Error al eliminar la foto",
"{name} binary exists and is executable." : "{name} el binario existe y es ejecutable.",
"{name} binary not found." : "No se encontró el binario {name}.",
"{name} binary is not executable." : "El binario {name} no es ejecutable.",
"{name} failed test: {info}." : "{name} prueba fallida: {info}.",
"{name} binary exists and is usable ({info})." : "{name} el binario existe y es utilizable ({info}).",
"{name} binary status: {status}." : "Estado del binario {name}: {status}.",
"Save as" : "Guardar como", "Save as" : "Guardar como",
"All changes will be lost." : "Se perderán todos los cambios.", "All changes will be lost." : "Se perderán todos los cambios.",
"Are you sure you want to continue?" : "¿Estás seguro de que deseas continuar?", "Are you sure you want to continue?" : "¿Estás seguro de que deseas continuar?",
@ -182,9 +412,35 @@ OC.L10N.register(
"Note that the selected crop area is lower than the applied resize which might cause quality decrease" : "Ten en cuenta que el área de recorte seleccionada es menor que el redimensionamiento aplicado, lo que puede causar una disminución en la calidad", "Note that the selected crop area is lower than the applied resize which might cause quality decrease" : "Ten en cuenta que el área de recorte seleccionada es menor que el redimensionamiento aplicado, lo que puede causar una disminución en la calidad",
"Actual size (100%)" : "Tamaño real (100%)", "Actual size (100%)" : "Tamaño real (100%)",
"Fit size" : "Ajustar tamaño", "Fit size" : "Ajustar tamaño",
"Transcoding failed, check Nextcloud logs." : "La transcodificación falló, verifica los registros de Nextcloud.",
"Direct" : "Directa",
"Auto" : "Automático", "Auto" : "Automático",
"Shared Folder" : "Carpeta Compartida",
"Shared Album" : "Álbum Compartido",
"Failed to create {albumName}." : "Error al crear {nombreÁlbum}.", "Failed to create {albumName}." : "Error al crear {nombreÁlbum}.",
"Failed to rename {currentAlbumName} to {newAlbumName}." : "Error al cambiar el nombre de {nombreÁlbumActual} a {nombreÁlbumNuevo}.", "Failed to rename {currentAlbumName} to {newAlbumName}." : "Error al cambiar el nombre de {nombreÁlbumActual} a {nombreÁlbumNuevo}.",
"Failed to delete {fileName}." : "Error al eliminar {nombreArchivo}." "General Failure" : "Falla General",
"Error: {msg}" : "Error: {msg}",
"Failed to delete {fileName}." : "Error al eliminar {nombreArchivo}.",
"Failed to move files." : "Error al mover archivos.",
"Could not move {fileName}, target exists." : "No se pudo mover {fileName}, el destino ya existe.",
"Failed to move {fileName}." : "Error al mover {fileName}.",
"Failed to download files" : "Error al descargar archivos",
"Failed to favorite files." : "Error al marcar archivos como favoritos.",
"Failed to favorite some files." : "Error al marcar algunos archivos como favoritos.",
"Failed to favorite {fileName}." : "Error al marcar {fileName} como favorito.",
"Memories has been updated to {version}. Reload to get the new version." : "Memories ha sido actualizado a {version}. Recarga para obtener la nueva versión.",
"Upload some photos and make sure the timeline path is configured" : "Sube algunas fotos y asegúrate de que la ruta de la línea de tiempo esté configurada",
"Mark photos as favorite to find them easily" : "Marca las fotos como favoritas para encontrarlas fácilmente",
"Memories from past years will appear here" : "Aquí aparecerán los recuerdos de años anteriores",
"You will find your friends soon. Please be patient" : "Encontrarás a tus amigos pronto. Por favor, ten paciencia",
"Face Recognition is disabled. Enable in settings to find your friends" : "El Reconocimiento Facial está desactivado. Actívalo en la configuración para encontrar a tus amigos",
"Your videos will appear here" : "Aquí aparecerán tus videos",
"No photos in this album yet" : "Aún no hay fotos en este álbum",
"Create an album to get started" : "Crea un álbum para empezar",
"Archive photos you don't want to see in your timeline" : "Archiva las fotos que no desees ver en tu línea de tiempo",
"Tag photos to find them easily" : "Etiqueta las fotos para encontrarlas fácilmente",
"Recognize is still working on your photos" : "Reconoce todavía está trabajando en tus fotos",
"Places you have been to will appear here" : "Aquí aparecerán los lugares que has visitado"
}, },
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

258
l10n/es_EC.json vendored
View File

@ -1,7 +1,12 @@
{ "translations": { { "translations": {
"Download" : "Descargar", "Download" : "Descargar",
"Memories" : "Memorias",
"Fast, modern and advanced photo management suite" : "Fast, modern and advanced photo management suite",
"# Memories: Photo Management for Nextcloud\n\nMemories is a *batteries-included* photo management solution for Nextcloud with advanced features including:\n\n- **📸 Timeline**: Sort photos and videos by date taken, parsed from Exif data.\n- **⏪ Rewind**: Jump to any time in the past instantly and relive your memories.\n- **🤖 AI Tagging**: Group photos by people and objects, powered by [recognize](https://github.com/nextcloud/recognize) and [facerecognition](https://github.com/matiasdelellis/facerecognition).\n- **🖼️ Albums**: Create albums to group photos and videos together. Then share these albums with others.\n- **🫱🏻‍🫲🏻 External Sharing**: Share photos and videos with people outside of your Nextcloud instance.\n- **📱 Mobile Support**: Work from any device, of any shape and size through the web app.\n- **✏️ Edit Metadata**: Edit dates and other metadata on photos quickly and in bulk.\n- **📦 Archive**: Store photos you don't want to see in your timeline in a separate folder.\n- **📹 Video Transcoding**: Transcode videos and use HLS for maximal performance.\n- **🗺️ Map**: View your photos on a map, tagged with accurate reverse geocoding.\n- **📦 Migration**: Migrate easily from Nextcloud Photos and Google Takeout.\n- **⚡️ Performance**: Do all this very fast.\n\n## 🚀 Installation\n\n1. Install the app from the Nextcloud app store (try a demo [here](https://demo.memories.gallery/apps/memories/)).\n1. Perform the recommended [configuration steps](https://memories.gallery/config/).\n1. Run `php occ memories:index` to generate metadata indices for existing photos.\n1. Open the 📷 Memories app in Nextcloud and set the directory containing your photos." : "# Memories: Gestión de Fotos para Nextcloud\n \n Memories es una solución de gestión de fotos para Nextcloud que incluye una amplia gama de características avanzadas, que incluyen:\n \n - **📸 Línea de tiempo**: Ordena fotos y videos por fecha de captura, extraída de los datos Exif.\n - **⏪ Retroceder**: Salta instantáneamente a cualquier momento del pasado y revive tus recuerdos.\n - **🤖 Etiquetado de IA**: Agrupa fotos por personas y objetos, potenciado por [recognize](https://github.com/nextcloud/recognize) y [facerecognition](https://github.com/matiasdelellis/facerecognition).\n - **🖼️ Álbumes**: Crea álbumes para agrupar fotos y videos juntos. Luego comparte estos álbumes con otros.\n - **🫱🏻‍🫲🏻 Compartir Externo**: Comparte fotos y videos con personas fuera de tu instancia de Nextcloud.\n - **📱 Soporte Móvil**: Trabaja desde cualquier dispositivo, de cualquier forma y tamaño a través de la aplicación web.\n - **✏️ Editar Metadatos**: Edita rápidamente fechas y otros metadatos de las fotos de forma individual o masiva.\n - **📦 Archivo**: Almacena fotos que no deseas ver en tu línea de tiempo en una carpeta separada.\n - **📹 Transcodificación de Video**: Transcodifica videos y utiliza HLS para obtener un rendimiento máximo.\n - **🗺️ Mapa**: Visualiza tus fotos en un mapa, etiquetadas con una geocodificación inversa precisa.\n - **📦 Migración**: Migra fácilmente desde Nextcloud Photos y Google Takeout.\n - **⚡️ Rendimiento**: Realiza todas estas operaciones de manera muy rápida.\n \n ## 🚀 Instalación\n \n 1. Instala la aplicación desde la tienda de aplicaciones de Nextcloud (prueba una demo [aquí](https://demo.memories.gallery/apps/memories/)).\n 2. Realiza los pasos de [configuración recomendados](https://memories.gallery/config/).\n 3. Ejecuta `php occ memories:index` para generar índices de metadatos para las fotos existentes.\n 4. Abre la aplicación 📷 Memories en Nextcloud y establece el directorio que contiene tus fotos.",
"Settings" : "Ajustes", "Settings" : "Ajustes",
"People (Recognize)" : "Personas (Recognize)",
"People" : "Personas", "People" : "Personas",
"People (Face Recognition)" : "Personas (Reconocimiento Facial)",
"Info" : "Info", "Info" : "Info",
"Timeline" : "Línea de tiempo", "Timeline" : "Línea de tiempo",
"Folders" : "Carpetas", "Folders" : "Carpetas",
@ -13,21 +18,165 @@
"Places" : "Lugares", "Places" : "Lugares",
"Map" : "Mapa", "Map" : "Mapa",
"Tags" : "Etiquetas", "Tags" : "Etiquetas",
"View all" : "Ver todo",
"Recognize" : "Reconocer", "Recognize" : "Reconocer",
"Face Recognition" : "Reconocimiento Facial",
"A better photos experience awaits you" : "Una experiencia de fotos mejor te espera",
"Choose the root folder of your timeline to begin" : "Elige la carpeta raíz de tu línea de tiempo para comenzar",
"Continue to Memories" : "Continuar a Memories",
"Choose again" : "Elegir de nuevo",
"Click here to start" : "Haz clic aquí para empezar",
"You can always change this later in settings" : "Siempre puedes cambiar esto luego en la configuración",
"If you just installed Memories, visit the admin panel first." : "Si acabas de instalar Memories, visita primero el panel de administración.",
"Choose the root of your timeline" : "Elegir la raíz de tu línea de tiempo",
"The selected folder does not seem to be valid. Try again." : "La carpeta seleccionada parece no ser válida. Inténtalo de nuevo.",
"No photos were found in the selected folder." : "No se encontraron fotos en la carpeta seleccionada.",
"This can happen because your media is still indexing." : "Esto puede suceder porque tus medios aún se están indexando.",
"Visit the admin panel to make sure Memories is configured correctly." : "Visita el panel de administración para asegurarte de que Memories esté configurado correctamente.",
"_Found {n} item in {path}_::_Found {n} items in {path}_" : ["Encontrado {n} elemento en {path}","Encontrados {n} elementos en {path}","Encontrados {n} elementos en {path}"],
"Edit" : "Editar", "Edit" : "Editar",
"No title" : "Sin título",
"No description" : "Sin descripción",
"No coordinates" : "Sin coordenadas",
"Click edit to set location" : "Haz clic en editar para establecer la ubicación",
"Photos" : "Fotos", "Photos" : "Fotos",
"Explore" : "Explorar", "Explore" : "Explorar",
"Cancel" : "Cancelar", "Cancel" : "Cancelar",
"Delete" : "Borrar", "Delete" : "Borrar",
"Remove from album" : "Eliminar del álbum",
"Favorite" : "Hacer favorito", "Favorite" : "Hacer favorito",
"Unarchive" : "Desarchivar", "Unarchive" : "Desarchivar",
"Edit metadata" : "Editar metadatos",
"View in folder" : "Ver en la carpeta", "View in folder" : "Ver en la carpeta",
"Move to folder" : "Mover a carpeta",
"Add to album" : "Agregar al álbum", "Add to album" : "Agregar al álbum",
"Move to person" : "Mover a persona",
"Remove from person" : "Eliminar de persona",
"You are about to download a large number of files. Are you sure?" : "Estás a punto de descargar un gran número de archivos. ¿Estás seguro?",
"You are about to delete a large number of files. Are you sure?" : "Estás a punto de eliminar un gran número de archivos. ¿Estás seguro?",
"Failed to delete files" : "Error al eliminar archivos",
"You are about to touch a large number of files. Are you sure?" : "Estás a punto de modificar un gran número de archivos. ¿Estás seguro?",
"You must enable \"Mark person in preview\" to use this feature" : "Debes habilitar \"Marcar persona en la vista previa\" para usar esta función",
"Only user \"{user}\" can update this person" : "Solo el usuario \"{user}\" puede actualizar esta persona",
"_{n} selected_::_{n} selected_" : ["{n} seleccionado","{n} seleccionados","{n} seleccionado"],
"Memories Settings" : "Configuración de Memories",
"General" : "General", "General" : "General",
"Timeline Path" : "Ruta de la Línea de Tiempo",
"Square grid mode" : "Modo de cuadrícula cuadrada",
"Show past photos on top of timeline" : "Mostrar fotos pasadas en la parte superior de la línea de tiempo",
"Load full size image on zoom" : "Cargar imagen de tamaño completo al hacer zoom",
"Always load full size image (not recommended)" : "Cargar siempre imágenes de tamaño completo (no recomendado)",
"Account" : "Cuenta", "Account" : "Cuenta",
"Logged in as {user}" : "Sesión iniciada como {user}",
"Sign out" : "Cerrar sesión",
"Device Folders" : "Carpetas de Dispositivos",
"Local folders to include in the timeline view" : "Carpetas locales para incluir en la vista de la línea de tiempo",
"Folders Path" : "Ruta de Carpetas",
"Show hidden folders" : "Mostrar carpetas ocultas",
"Sort folders oldest-first" : "Ordenar carpetas desde la más antigua",
"Sort albums oldest-first" : "Ordenar álbumes desde el más antiguo",
"Choose Timeline Paths" : "Elegir Rutas de la Línea de Tiempo",
"Choose the root for the folders view" : "Elegir la raíz para la vista de carpetas",
"Are you sure you want to log out {user}?" : "¿Estás seguro de que quieres cerrar la sesión de {user}?",
"Close" : "Cerrar", "Close" : "Cerrar",
"{photoCount} photos" : "{photoCount} fotos",
"Failed to load some photos" : "Error al cargar algunas fotos",
"Failed to update setting" : "Error al actualizar la configuración",
"EXIF Extraction" : "Extracción de Exif",
"Path to packaged exiftool binary" : "Ruta al binario Exiftool empaquetado",
"You need perl only if the packaged exiftool binary does not work for some reason." : "Necesitas Perl solo si el binario Exiftool empaquetado no funciona por alguna razón.",
"Use system perl (only if exiftool binary does not work)" : "Usar Perl del sistema (solo si el binario Exiftool no funciona)",
"File Support" : "Soporte de Archivos",
"You can configure the enabled Nextcloud preview providers below." : "Puedes configurar los proveedores de vista previa de Nextcloud activados a continuación.",
"If you are using Imaginary for preview generation, you can ignore this section." : "Si estás utilizando Imaginary para la generación de vistas previas, puedes ignorar esta sección.",
"To enable RAW support, install the Camera RAW Previews app." : "Para habilitar el soporte RAW, instala la aplicación Camera RAW Previews.",
"Documentation." : "Documentación.",
"The following MIME types are configured for preview generation." : "Los siguientes tipos MIME están configurados para la generación de vistas previas.",
"Max preview size (trade-off between quality and storage requirements)." : "Tamaño máximo de vista previa (compromiso entre calidad y requisitos de almacenamiento).",
"Max memory for preview generation (MB)" : "Memoria máxima para la generación de vistas previas (MB)",
"Max size of preview files (MB)" : "Tamaño máximo de archivos de vista previa (MB)",
"Images (JPEG, PNG, GIF, BMP)" : "Imágenes (JPEG, PNG, GIF, BMP)",
"HEIC (Imagick)" : "HEIC (Imagick)",
"TIFF (Imagick)" : "TIFF (Imagick)",
"Videos (ffmpeg)" : "Videos (ffmpeg)",
"Media Indexing" : "Indexación de Medios",
"{n} media files have been indexed" : "{n} archivos multimedia han sido indexados",
"Automatic Indexing status: {status}" : "Estado de la indexación automática: {status}",
"Last index job was run {t} seconds ago." : "La última tarea de indexación se ejecutó hace {t} segundos.",
"It took {t} seconds to complete." : "Tardó {t} segundos en completarse.",
"It is still running or was interrupted." : "Actualmente está en ejecución o fue interrumpida.",
"Only server-side encryption (OC_DEFAULT_MODULE) is supported, but another encryption module is enabled." : "Solo se admite el cifrado del lado del servidor (OC_DEFAULT_MODULE), pero otro módulo de cifrado está habilitado.",
"The EXIF indexes are built and checked in a periodic background task. Be careful when selecting anything other than automatic indexing. For example, setting the indexing to only timeline folders may cause delays before media becomes available to users, since the user configures the timeline only after logging in." : "Los índices EXIF se construyen y verifican en una tarea de fondo periódica. Ten cuidado al seleccionar algo distinto de la indexación automática. Por ejemplo, establecer la indexación solo para carpetas de la línea de tiempo puede causar retrasos antes de que los medios estén disponibles para los usuarios, ya que el usuario configura la línea de tiempo solo después de iniciar sesión.",
"Folders with a \".nomedia\" file are always excluded from indexing." : "Las carpetas con un archivo \".nomedia\" siempre se excluyen de la indexación.",
"Index all media automatically (recommended)" : "Indexar automáticamente todos los medios (recomendado)",
"Index per-user timeline folders (not recommended)" : "Indexar carpetas de la línea de tiempo por usuario (no recomendado)",
"Index a fixed relative path" : "Indexar una ruta relativa fija",
"Disable background indexing" : "Desactivar la indexación en segundo plano",
"Indexing path (relative, all users)" : "Ruta de indexación (relativa, todos los usuarios)",
"For advanced usage, perform a run of indexing by running:" : "Para un uso avanzado, realiza una ejecución de indexación ejecutando:",
"Run index in parallel with 4 threads:" : "Ejecutar la indexación en paralelo con 4 hilos:",
"Force re-indexing of all files:" : "Forzar la indexación de todos los archivos nuevamente:",
"You can limit indexing by user and/or folder:" : "Puedes limitar la indexación por usuario y/o carpeta:",
"Clear all existing index tables:" : "Eliminar todas las tablas de índices existentes:",
"Performance" : "Rendimiento", "Performance" : "Rendimiento",
"HTTPS is enabled" : "HTTPS está habilitado",
"You are accessing this page over an insecure context. Several browser APIs are not available, which will make Memories very slow. Enable HTTPS on your server to improve performance." : "Estás accediendo a esta página en un contexto inseguro. Varias API del navegador no están disponibles, lo que hará que Memories sea muy lento. Habilita HTTPS en tu servidor para mejorar el rendimiento.",
"HTTP/2 or HTTP/3 is enabled" : "Se ha habilitado HTTP/2 o HTTP/3",
"HTTP/2 or HTTP/3 is strongly recommended ({httpVer} detected)" : "Se recomienda encarecidamente HTTP/2 o HTTP/3 (detectado {httpVer})",
"Unknown" : "Desconocido", "Unknown" : "Desconocido",
"Reverse Geocoding" : "Geocodificación Inversa",
"Database is populated with {n} geometries." : "La base de datos está poblada con {n} geometrías.",
"Geometry table has not been created." : "No se ha creado la tabla de geometrías.",
"Looks like the planet data is incomplete." : "Parece que los datos del planeta están incompletos.",
"Reverse geocoding has not been configured ({status})." : "No se ha configurado la geocodificación inversa ({status}).",
"Memories supports offline reverse geocoding using the OpenStreetMaps data on MySQL and Postgres." : "Memories admite la geocodificación inversa sin conexión utilizando los datos de OpenStreetMaps en MySQL y Postgres.",
"You need to download the planet data into your database. This is highly recommended and has low overhead." : "Debes descargar los datos del planeta en tu base de datos. Esto es muy recomendable y tiene poco sobrecarga.",
"If the button below does not work for importing the planet data, use the following command:" : "Si el botón de abajo no funciona para importar los datos del planeta, usa el siguiente comando:",
"Note: the geometry data is stored in the memories_planet_geometry table, with no prefix." : "Nota: los datos de geometría se almacenan en la tabla memories_planet_geometry, sin prefijo.",
"Download planet database" : "Descargar base de datos del planeta",
"Geometry support was not detected in your database" : "No se detectó el soporte de geometría en tu base de datos",
"MySQL-like geometry support was detected " : "Se detectó el soporte de geometría similar a MySQL",
"Postgres native geometry support was detected" : "Se detectó el soporte de geometría nativo de Postgres",
"Looks like the database is already setup. Are you sure you want to redownload planet data?" : "Parece que la base de datos ya está configurada. ¿Seguro que quieres volver a descargar los datos del planeta?",
"You are about to download the planet database. This may take a while." : "Estás a punto de descargar la base de datos del planeta. Esto puede llevar un tiempo.",
"This may also cause all photos to be re-indexed!" : "¡Esto también puede hacer que se vuelvan a indexar todas las fotos!",
"Video Streaming" : "Streaming de Video",
"Live transcoding provides for adaptive streaming of videos using HLS." : "La transcodificación en vivo proporciona transmisión adaptable de videos utilizando HLS.",
"Note that this may be very CPU intensive without hardware acceleration, and transcoding will not be used for external storage." : "Ten en cuenta que esto puede ser muy intensivo para la CPU sin aceleración de hardware, y la transcodificación no se utilizará para el almacenamiento externo.",
"Enable Transcoding" : "Habilitar la transcodificación",
"ffmpeg path" : "Ruta de ffmpeg",
"ffprobe path" : "Ruta de ffprobe",
"Global default video quality (user may override)" : "Calidad de video predeterminada global (el usuario puede anular)",
"Auto (adaptive transcode)" : "Auto (transcodificación adaptable)",
"Original (transcode with max quality)" : "Original (transcodificación con máxima calidad)",
"Direct (original video file without transcode)" : "Directa (archivo de video original sin transcodificación)",
"Hardware Acceleration" : "Aceleración de Hardware",
"You must first make sure the correct drivers are installed before configuring acceleration." : "Primero debes asegurarte de que los controladores correctos estén instalados antes de configurar la aceleración.",
"Make sure you test hardware acceleration with various options after enabling." : "Asegúrate de probar la aceleración de hardware con varias opciones después de habilitarla.",
"Do not enable multiple types of hardware acceleration simultaneously." : "No habilites varios tipos de aceleración de hardware simultáneamente.",
"Intel processors supporting QuickSync Video (QSV) as well as some AMD GPUs can be used for transcoding using VA-API acceleration." : "Los procesadores Intel que admiten QuickSync Video (QSV), así como algunas GPU de AMD, se pueden utilizar para la transcodificación mediante la aceleración VA-API.",
"For more details on driver installation, check the documentation:" : "Para obtener más detalles sobre la instalación del controlador, consulta la documentación:",
"External Link" : "Enlace Externo",
"Enable acceleration with VA-API" : "Habilitar la aceleración con VA-API",
"Enable low-power mode (QSV)" : "Habilitar el modo de bajo consumo (QSV)",
"NVIDIA GPUs can be used for transcoding using the NVENC encoder with the proper drivers." : "Las GPU de NVIDIA se pueden utilizar para la transcodificación utilizando el codificador NVENC con los controladores adecuados.",
"Depending on the versions of the installed SDK and ffmpeg, you need to specify the scaler to use" : "Según las versiones del SDK instalado y ffmpeg, debes especificar el escalador a utilizar",
"No automated tests are available for NVIDIA acceleration." : "No hay pruebas automatizadas disponibles para la aceleración de NVIDIA.",
"Enable acceleration with NVENC" : "Habilitar la aceleración con NVENC",
"Enable NVENC Temporal AQ" : "Habilitar AQ Temporal NVENC",
"NPP scaler" : "Escalador NPP",
"CUDA scaler" : "Escalador CUDA",
"VA-API device ({dev}) is readable" : "El dispositivo VA-API ({dev}) es legible",
"VA-API device ({dev}) not found" : "No se encontró el dispositivo VA-API ({dev})",
"VA-API device ({dev}) has incorrect permissions" : "El dispositivo VA-API ({dev}) tiene permisos incorrectos",
"VA-API device status: {status}" : "Estado del dispositivo VA-API: {status}",
"Transcoder configuration" : "Configuración del Transcodificador",
"Memories uses the go-vod transcoder. You can run go-vod exernally (e.g. in a separate Docker container for hardware acceleration) or use the built-in transcoder. To use an external transcoder, enable the following option and follow the instructions in the documentation:" : "Memories utiliza el transcodificador go-vod. Puedes ejecutar go-vod externamente (por ejemplo, en un contenedor Docker separado para la aceleración de hardware) o utilizar el transcodificador incorporado. Para utilizar un transcodificador externo, habilita la siguiente opción y sigue las instrucciones de la documentación:",
"Enable external transcoder (go-vod)" : "Habilitar transcodificador externo (go-vod)",
"Binary path (local only)" : "Ruta del binario (solo local)",
"Bind address (local only)" : "Dirección de enlace (solo local)",
"Connection address (same as bind if local)" : "Dirección de conexión (misma que enlace si es local)",
"_{n} item added to album_::_{n} items added to album_" : ["{n} elemento añadido al álbum","{n} elementos añadidos al álbum","{n} elementos añadidos al álbum"],
"Add people or groups who can edit your album" : "Agregar personas o grupos que puedan editar tu álbum", "Add people or groups who can edit your album" : "Agregar personas o grupos que puedan editar tu álbum",
"Search for collaborators" : "Buscar colaboradores", "Search for collaborators" : "Buscar colaboradores",
"Search people or groups" : "Buscar personas o grupos", "Search people or groups" : "Buscar personas o grupos",
@ -46,6 +195,11 @@
"Create new album" : "Crear nuevo álbum", "Create new album" : "Crear nuevo álbum",
"Edit album details" : "Editar detalles del álbum", "Edit album details" : "Editar detalles del álbum",
"New album" : "Nuevo álbum", "New album" : "Nuevo álbum",
"Could not load the selected album" : "No se pudo cargar el álbum seleccionado",
"Remove Album" : "Eliminar Álbum",
"Are you sure you want to permanently remove album \"{name}\"?" : "¿Seguro que deseas eliminar permanentemente el álbum \"{name}\"?",
"Only user \"{user}\" can delete this album" : "Solo el usuario \"{user}\" puede eliminar este álbum",
"Failed to delete {name}." : "Error al eliminar {name}.",
"Name of the album" : "Nombre del álbum", "Name of the album" : "Nombre del álbum",
"Location of the album" : "Ubicación del álbum", "Location of the album" : "Ubicación del álbum",
"Go back to the previous view." : "Volver a la vista anterior.", "Go back to the previous view." : "Volver a la vista anterior.",
@ -55,48 +209,124 @@
"Back to the new album form." : "Volver al formulario de nuevo álbum.", "Back to the new album form." : "Volver al formulario de nuevo álbum.",
"Save" : "Guardar", "Save" : "Guardar",
"Create album" : "Crear álbum", "Create album" : "Crear álbum",
"Invalid album name; should not contain any slashes." : "Nombre de álbum no válido; no debe contener barras inclinadas.",
"Add selection to album {albumName}" : "Agregar selección a álbum {nombreÁlbum}", "Add selection to album {albumName}" : "Agregar selección a álbum {nombreÁlbum}",
"Create a new album." : "Crear un nuevo álbum.", "Create a new album." : "Crear un nuevo álbum.",
"shared by {owner}" : "compartido por {owner}",
"_%n item_::_%n items_" : ["%n elemento","%n elementos","%n elementos"],
"Share Album" : "Compartir Álbum",
"Save collaborators for this album." : "Guardar colaboradores para este álbum.", "Save collaborators for this album." : "Guardar colaboradores para este álbum.",
"Newest" : "Más recientes",
"Year" : "Año", "Year" : "Año",
"Month" : "Mes", "Month" : "Mes",
"Day" : "Día", "Day" : "Día",
"Time" : "Hora", "Time" : "Hora",
"Hour" : "Hora", "Hour" : "Hora",
"Minute" : "Minuto", "Minute" : "Minuto",
"Oldest" : "Más antiguos",
"Invalid Date" : "Fecha no válida",
"Newest date is older than oldest date" : "La fecha más reciente es anterior a la fecha más antigua",
"Title" : "Título", "Title" : "Título",
"Description" : "Descripción", "Description" : "Descripción",
"Label" : "Etiqueta", "Label" : "Etiqueta",
"Camera Make" : "Marca de la Cámara",
"Camera Model" : "Modelo de la Cámara",
"Lens Model" : "Modelo de Lente",
"Copyright" : "Derechos de autor", "Copyright" : "Derechos de autor",
"Empty" : "Vacío", "Empty" : "Vacío",
"Unchanged" : "Sin cambios",
"Reset" : "Restablecer", "Reset" : "Restablecer",
"Remove location" : "Eliminar ubicación",
"Search location / landmark" : "Buscar ubicación / hito",
"Failed to search for location with Nominatim." : "Error al buscar ubicación con Nominatim.",
"Date / Time" : "Fecha / Hora",
"Collaborative Tags" : "Etiquetas colaborativas", "Collaborative Tags" : "Etiquetas colaborativas",
"EXIF Fields" : "Campos EXIF",
"Geolocation" : "Geolocalización",
"Failed to load metadata for {n} photos." : "Error al cargar los metadatos de {n} fotos.",
"{n} photos cannot be edited (permissions error)." : "No se pueden editar {n} fotos (error de permisos).",
"Remove person" : "Eliminar persona", "Remove person" : "Eliminar persona",
"Are you sure you want to remove {name}?" : "¿Seguro que deseas eliminar {name}?",
"Only user \"{user}\" can delete this person" : "Solo el usuario \"{user}\" puede eliminar a esta persona",
"Rename person" : "Renombrar persona", "Rename person" : "Renombrar persona",
"Name" : "Nombre", "Name" : "Nombre",
"Update" : "Actualizar", "Update" : "Actualizar",
"Failed to rename {oldName} to {name}." : "Error al cambiar el nombre de {oldName} a {name}.",
"Search" : "Buscar", "Search" : "Buscar",
"Loading …" : "Loading …", "Loading …" : "Loading …",
"Enter name of the new face" : "Ingresa el nombre de la nueva cara",
"Failed to create face" : "Error al crear la cara",
"Merge {name} with person" : "Fusionar {name} con persona",
"Are you sure you want to merge {name} with {newName}?" : "¿Seguro que deseas fusionar {name} con {newName}?",
"Too many failures, aborting" : "Demasiados fallos, abortando",
"Error while moving {basename}" : "Error al mover {basename}",
"Failed to move {name}." : "Error al mover {name}.",
"Move selected photos to person" : "Mover fotos seleccionadas a persona",
"Move the selected photos to {target}?" : "¿Mover las fotos seleccionadas a {target}?",
"An error occurred while moving photos from {name}." : "Ocurrió un error al mover las fotos de {name}.",
"Choose a folder" : "Elegir una carpeta",
"_{n} item moved to folder_::_{n} items moved to folder_" : ["{n} elemento movido a carpeta","{n} elementos movidos a carpeta","{n} elementos movidos a carpeta"],
"Remove" : "Eliminar", "Remove" : "Eliminar",
"Add Path" : "Añadir Ruta",
"Add a root to your timeline" : "Añadir una raíz a tu línea de tiempo",
"Link Sharing" : "Compartir enlaces",
"You cannot share the root folder" : "No puedes compartir la carpeta raíz",
"Public link shares are available to people outside Nextcloud." : "Las comparticiones de enlaces públicos están disponibles para personas fuera de Nextcloud.",
"You may create or update permissions on public links using the sidebar." : "Puedes crear o actualizar permisos en los enlaces públicos usando la barra lateral.",
"Click a link to copy to clipboard." : "Haz clic en un enlace para copiarlo al portapapeles.",
"Share link" : "Compartir liga", "Share link" : "Compartir liga",
"Create Link" : "Crear Enlace",
"Refresh" : "Actualizar", "Refresh" : "Actualizar",
"Password protected" : "Protegido con contraseña", "Password protected" : "Protegido con contraseña",
"Expires" : "Expira", "Expires" : "Expira",
"Editable" : "Editable",
"Read only" : "Sólo lectura", "Read only" : "Sólo lectura",
"Link copied to clipboard" : "Enlace copiado al portapapeles", "Link copied to clipboard" : "Enlace copiado al portapapeles",
"Share File" : "Compartir Archivo",
"Reduced Size" : "Tamaño Reducido",
"Share a lower resolution image preview" : "Compartir una vista previa de imagen de menor resolución",
"High Resolution" : "Alta Resolución",
"Share the video as a high quality MOV" : "Compartir el video como un archivo MOV de alta calidad",
"Share the image as a high quality JPEG" : "Compartir la imagen como un archivo JPEG de alta calidad",
"Original File" : "Archivo Original",
"Share the original image / video file" : "Compartir la imagen / video original",
"Public Link" : "Enlace Público",
"Share an external Nextcloud link" : "Compartir un enlace externo de Nextcloud",
"Failed to download file" : "Error al descargar el archivo",
"Cannot share this type of data" : "No se puede compartir este tipo de datos",
"Sort by date" : "Ordenar por fecha", "Sort by date" : "Ordenar por fecha",
"Sort by name" : "Ordenar por nombre", "Sort by name" : "Ordenar por nombre",
"Share album" : "Compartir álbum",
"Download album" : "Descargar álbum",
"Delete album" : "Eliminar álbum", "Delete album" : "Eliminar álbum",
"Nothing to show here" : "Nada que mostrar aquí",
"Unassigned faces" : "Rostros sin asignar", "Unassigned faces" : "Rostros sin asignar",
"Merge with different person" : "Fusionar con otra persona", "Merge with different person" : "Fusionar con otra persona",
"Mark person in preview" : "Marcar persona en la vista previa",
"Folder View" : "Vista de Carpeta",
"Timeline View" : "Vista de Línea de Tiempo",
"Share folder" : "Compartir carpeta", "Share folder" : "Compartir carpeta",
"Move left" : "Mover a la izquierda",
"Move right" : "Mover a la derecha",
"Image saved successfully" : "Imagen guardada exitosamente",
"Error saving image" : "Error al guardar la imagen", "Error saving image" : "Error al guardar la imagen",
"Unsaved changes" : "Cambios no guardados", "Unsaved changes" : "Cambios no guardados",
"Drop changes" : "Descartar cambios", "Drop changes" : "Descartar cambios",
"Share" : "Compartir", "Share" : "Compartir",
"Play Live Photo" : "Reproducir Foto en Vivo",
"Download Video" : "Descargar Video",
"Slideshow" : "Presentación de Diapositivas",
"Previous" : "Previo", "Previous" : "Previo",
"Next" : "Siguiente", "Next" : "Siguiente",
"Editing is currently disabled for Live Photos" : "La edición está deshabilitada actualmente para las Fotos en Vivo",
"Are you sure you want to delete?" : "¿Estás seguro de que quieres eliminarlo?", "Are you sure you want to delete?" : "¿Estás seguro de que quieres eliminarlo?",
"Failed to delete photo" : "Error al eliminar la foto",
"{name} binary exists and is executable." : "{name} el binario existe y es ejecutable.",
"{name} binary not found." : "No se encontró el binario {name}.",
"{name} binary is not executable." : "El binario {name} no es ejecutable.",
"{name} failed test: {info}." : "{name} prueba fallida: {info}.",
"{name} binary exists and is usable ({info})." : "{name} el binario existe y es utilizable ({info}).",
"{name} binary status: {status}." : "Estado del binario {name}: {status}.",
"Save as" : "Guardar como", "Save as" : "Guardar como",
"All changes will be lost." : "Se perderán todos los cambios.", "All changes will be lost." : "Se perderán todos los cambios.",
"Are you sure you want to continue?" : "¿Estás seguro de que deseas continuar?", "Are you sure you want to continue?" : "¿Estás seguro de que deseas continuar?",
@ -180,9 +410,35 @@
"Note that the selected crop area is lower than the applied resize which might cause quality decrease" : "Ten en cuenta que el área de recorte seleccionada es menor que el redimensionamiento aplicado, lo que puede causar una disminución en la calidad", "Note that the selected crop area is lower than the applied resize which might cause quality decrease" : "Ten en cuenta que el área de recorte seleccionada es menor que el redimensionamiento aplicado, lo que puede causar una disminución en la calidad",
"Actual size (100%)" : "Tamaño real (100%)", "Actual size (100%)" : "Tamaño real (100%)",
"Fit size" : "Ajustar tamaño", "Fit size" : "Ajustar tamaño",
"Transcoding failed, check Nextcloud logs." : "La transcodificación falló, verifica los registros de Nextcloud.",
"Direct" : "Directa",
"Auto" : "Automático", "Auto" : "Automático",
"Shared Folder" : "Carpeta Compartida",
"Shared Album" : "Álbum Compartido",
"Failed to create {albumName}." : "Error al crear {nombreÁlbum}.", "Failed to create {albumName}." : "Error al crear {nombreÁlbum}.",
"Failed to rename {currentAlbumName} to {newAlbumName}." : "Error al cambiar el nombre de {nombreÁlbumActual} a {nombreÁlbumNuevo}.", "Failed to rename {currentAlbumName} to {newAlbumName}." : "Error al cambiar el nombre de {nombreÁlbumActual} a {nombreÁlbumNuevo}.",
"Failed to delete {fileName}." : "Error al eliminar {nombreArchivo}." "General Failure" : "Falla General",
"Error: {msg}" : "Error: {msg}",
"Failed to delete {fileName}." : "Error al eliminar {nombreArchivo}.",
"Failed to move files." : "Error al mover archivos.",
"Could not move {fileName}, target exists." : "No se pudo mover {fileName}, el destino ya existe.",
"Failed to move {fileName}." : "Error al mover {fileName}.",
"Failed to download files" : "Error al descargar archivos",
"Failed to favorite files." : "Error al marcar archivos como favoritos.",
"Failed to favorite some files." : "Error al marcar algunos archivos como favoritos.",
"Failed to favorite {fileName}." : "Error al marcar {fileName} como favorito.",
"Memories has been updated to {version}. Reload to get the new version." : "Memories ha sido actualizado a {version}. Recarga para obtener la nueva versión.",
"Upload some photos and make sure the timeline path is configured" : "Sube algunas fotos y asegúrate de que la ruta de la línea de tiempo esté configurada",
"Mark photos as favorite to find them easily" : "Marca las fotos como favoritas para encontrarlas fácilmente",
"Memories from past years will appear here" : "Aquí aparecerán los recuerdos de años anteriores",
"You will find your friends soon. Please be patient" : "Encontrarás a tus amigos pronto. Por favor, ten paciencia",
"Face Recognition is disabled. Enable in settings to find your friends" : "El Reconocimiento Facial está desactivado. Actívalo en la configuración para encontrar a tus amigos",
"Your videos will appear here" : "Aquí aparecerán tus videos",
"No photos in this album yet" : "Aún no hay fotos en este álbum",
"Create an album to get started" : "Crea un álbum para empezar",
"Archive photos you don't want to see in your timeline" : "Archiva las fotos que no desees ver en tu línea de tiempo",
"Tag photos to find them easily" : "Etiqueta las fotos para encontrarlas fácilmente",
"Recognize is still working on your photos" : "Reconoce todavía está trabajando en tus fotos",
"Places you have been to will appear here" : "Aquí aparecerán los lugares que has visitado"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} }

1
l10n/gl.js vendored
View File

@ -168,6 +168,7 @@ OC.L10N.register(
"Enable NVENC Temporal AQ" : "Activar a AQ temporal de NVENC", "Enable NVENC Temporal AQ" : "Activar a AQ temporal de NVENC",
"NPP scaler" : "Escalador NPP", "NPP scaler" : "Escalador NPP",
"CUDA scaler" : "Escalador CUDA", "CUDA scaler" : "Escalador CUDA",
"not recommended" : "non recomendado",
"VA-API device ({dev}) is readable" : "O dispositivo VA-API ({dev}) é lexíbel", "VA-API device ({dev}) is readable" : "O dispositivo VA-API ({dev}) é lexíbel",
"VA-API device ({dev}) not found" : "Non se atopou o dispositivo VA-API ({dev}).", "VA-API device ({dev}) not found" : "Non se atopou o dispositivo VA-API ({dev}).",
"VA-API device ({dev}) has incorrect permissions" : "O dispositivo VA-API ({dev}) ten permisos incorrectos", "VA-API device ({dev}) has incorrect permissions" : "O dispositivo VA-API ({dev}) ten permisos incorrectos",

1
l10n/gl.json vendored
View File

@ -166,6 +166,7 @@
"Enable NVENC Temporal AQ" : "Activar a AQ temporal de NVENC", "Enable NVENC Temporal AQ" : "Activar a AQ temporal de NVENC",
"NPP scaler" : "Escalador NPP", "NPP scaler" : "Escalador NPP",
"CUDA scaler" : "Escalador CUDA", "CUDA scaler" : "Escalador CUDA",
"not recommended" : "non recomendado",
"VA-API device ({dev}) is readable" : "O dispositivo VA-API ({dev}) é lexíbel", "VA-API device ({dev}) is readable" : "O dispositivo VA-API ({dev}) é lexíbel",
"VA-API device ({dev}) not found" : "Non se atopou o dispositivo VA-API ({dev}).", "VA-API device ({dev}) not found" : "Non se atopou o dispositivo VA-API ({dev}).",
"VA-API device ({dev}) has incorrect permissions" : "O dispositivo VA-API ({dev}) ten permisos incorrectos", "VA-API device ({dev}) has incorrect permissions" : "O dispositivo VA-API ({dev}) ten permisos incorrectos",

1
l10n/tr.js vendored
View File

@ -168,6 +168,7 @@ OC.L10N.register(
"Enable NVENC Temporal AQ" : "NVENC Temporal AQ kullanılsın", "Enable NVENC Temporal AQ" : "NVENC Temporal AQ kullanılsın",
"NPP scaler" : "NPP ölçekleyici", "NPP scaler" : "NPP ölçekleyici",
"CUDA scaler" : "CUDA ölçekleyici", "CUDA scaler" : "CUDA ölçekleyici",
"not recommended" : "önerilmez",
"VA-API device ({dev}) is readable" : "VA-API aygıtı ({dev}) okunabilir", "VA-API device ({dev}) is readable" : "VA-API aygıtı ({dev}) okunabilir",
"VA-API device ({dev}) not found" : "VA-API aygıtı ({dev}) bulunamadı", "VA-API device ({dev}) not found" : "VA-API aygıtı ({dev}) bulunamadı",
"VA-API device ({dev}) has incorrect permissions" : "VA-API aygıtının ({dev}) izinleri doğru değil", "VA-API device ({dev}) has incorrect permissions" : "VA-API aygıtının ({dev}) izinleri doğru değil",

1
l10n/tr.json vendored
View File

@ -166,6 +166,7 @@
"Enable NVENC Temporal AQ" : "NVENC Temporal AQ kullanılsın", "Enable NVENC Temporal AQ" : "NVENC Temporal AQ kullanılsın",
"NPP scaler" : "NPP ölçekleyici", "NPP scaler" : "NPP ölçekleyici",
"CUDA scaler" : "CUDA ölçekleyici", "CUDA scaler" : "CUDA ölçekleyici",
"not recommended" : "önerilmez",
"VA-API device ({dev}) is readable" : "VA-API aygıtı ({dev}) okunabilir", "VA-API device ({dev}) is readable" : "VA-API aygıtı ({dev}) okunabilir",
"VA-API device ({dev}) not found" : "VA-API aygıtı ({dev}) bulunamadı", "VA-API device ({dev}) not found" : "VA-API aygıtı ({dev}) bulunamadı",
"VA-API device ({dev}) has incorrect permissions" : "VA-API aygıtının ({dev}) izinleri doğru değil", "VA-API device ({dev}) has incorrect permissions" : "VA-API aygıtının ({dev}) izinleri doğru değil",

1
l10n/zh_HK.js vendored
View File

@ -168,6 +168,7 @@ OC.L10N.register(
"Enable NVENC Temporal AQ" : "啟用 NVENC 臨時 AQ", "Enable NVENC Temporal AQ" : "啟用 NVENC 臨時 AQ",
"NPP scaler" : "NPP scaler", "NPP scaler" : "NPP scaler",
"CUDA scaler" : "CUDA scaler", "CUDA scaler" : "CUDA scaler",
"not recommended" : "不推薦",
"VA-API device ({dev}) is readable" : "VA-API 裝置({dev})可讀", "VA-API device ({dev}) is readable" : "VA-API 裝置({dev})可讀",
"VA-API device ({dev}) not found" : "找不到 VA-API 裝置({dev}", "VA-API device ({dev}) not found" : "找不到 VA-API 裝置({dev}",
"VA-API device ({dev}) has incorrect permissions" : "VA-API 裝置({dev})權限不正確", "VA-API device ({dev}) has incorrect permissions" : "VA-API 裝置({dev})權限不正確",

1
l10n/zh_HK.json vendored
View File

@ -166,6 +166,7 @@
"Enable NVENC Temporal AQ" : "啟用 NVENC 臨時 AQ", "Enable NVENC Temporal AQ" : "啟用 NVENC 臨時 AQ",
"NPP scaler" : "NPP scaler", "NPP scaler" : "NPP scaler",
"CUDA scaler" : "CUDA scaler", "CUDA scaler" : "CUDA scaler",
"not recommended" : "不推薦",
"VA-API device ({dev}) is readable" : "VA-API 裝置({dev})可讀", "VA-API device ({dev}) is readable" : "VA-API 裝置({dev})可讀",
"VA-API device ({dev}) not found" : "找不到 VA-API 裝置({dev}", "VA-API device ({dev}) not found" : "找不到 VA-API 裝置({dev}",
"VA-API device ({dev}) has incorrect permissions" : "VA-API 裝置({dev})權限不正確", "VA-API device ({dev}) has incorrect permissions" : "VA-API 裝置({dev})權限不正確",

1
l10n/zh_TW.js vendored
View File

@ -168,6 +168,7 @@ OC.L10N.register(
"Enable NVENC Temporal AQ" : "啟用 NVENC 臨時 AQ", "Enable NVENC Temporal AQ" : "啟用 NVENC 臨時 AQ",
"NPP scaler" : "NPP scaler", "NPP scaler" : "NPP scaler",
"CUDA scaler" : "CUDA scaler", "CUDA scaler" : "CUDA scaler",
"not recommended" : "不建議",
"VA-API device ({dev}) is readable" : "VA-API 裝置({dev})可讀", "VA-API device ({dev}) is readable" : "VA-API 裝置({dev})可讀",
"VA-API device ({dev}) not found" : "找不到 VA-API 裝置({dev}", "VA-API device ({dev}) not found" : "找不到 VA-API 裝置({dev}",
"VA-API device ({dev}) has incorrect permissions" : "VA-API 裝置({dev})權限不正確", "VA-API device ({dev}) has incorrect permissions" : "VA-API 裝置({dev})權限不正確",

1
l10n/zh_TW.json vendored
View File

@ -166,6 +166,7 @@
"Enable NVENC Temporal AQ" : "啟用 NVENC 臨時 AQ", "Enable NVENC Temporal AQ" : "啟用 NVENC 臨時 AQ",
"NPP scaler" : "NPP scaler", "NPP scaler" : "NPP scaler",
"CUDA scaler" : "CUDA scaler", "CUDA scaler" : "CUDA scaler",
"not recommended" : "不建議",
"VA-API device ({dev}) is readable" : "VA-API 裝置({dev})可讀", "VA-API device ({dev}) is readable" : "VA-API 裝置({dev})可讀",
"VA-API device ({dev}) not found" : "找不到 VA-API 裝置({dev}", "VA-API device ({dev}) not found" : "找不到 VA-API 裝置({dev}",
"VA-API device ({dev}) has incorrect permissions" : "VA-API 裝置({dev})權限不正確", "VA-API device ({dev}) has incorrect permissions" : "VA-API 裝置({dev})權限不正確",

View File

@ -393,6 +393,8 @@ class ImageController extends GenericApiController
$mimetype = $image->getImageMimeType(); $mimetype = $image->getImageMimeType();
} catch (\ImagickException $e) { } catch (\ImagickException $e) {
throw Exceptions::Forbidden('Imagick failed to convert image: '.$e->getMessage()); throw Exceptions::Forbidden('Imagick failed to convert image: '.$e->getMessage());
} finally {
$image->clear();
} }
return [$blob, $mimetype]; return [$blob, $mimetype];

View File

@ -9,7 +9,7 @@ use OCA\Memories\Util;
class BinExt class BinExt
{ {
public const EXIFTOOL_VER = '12.60'; public const EXIFTOOL_VER = '12.60';
public const GOVOD_VER = '0.1.7'; public const GOVOD_VER = '0.1.8';
public const NX_VER_MIN = '1.0'; public const NX_VER_MIN = '1.0';
/** Copy a binary to temp dir for execution */ /** Copy a binary to temp dir for execution */

3643
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -30,21 +30,22 @@
"e2e": "playwright test" "e2e": "playwright test"
}, },
"dependencies": { "dependencies": {
"@nextcloud/l10n": "^2.1.0", "@nextcloud/l10n": "^2.2.0",
"@nextcloud/paths": "^2.1.0", "@nextcloud/paths": "^2.1.0",
"@nextcloud/sharing": "^0.1.0", "@nextcloud/sharing": "^0.1.0",
"@nextcloud/vue": "7.11.2", "@nextcloud/vue": "7.12.1",
"camelcase": "^7.0.1", "camelcase": "^7.0.1",
"filerobot-image-editor": "^4.4.0", "filerobot-image-editor": "^4.5.1",
"fuse.js": "^6.6.2", "fuse.js": "^6.6.2",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",
"justified-layout": "^4.1.0", "justified-layout": "^4.1.0",
"leaflet": "^1.9.3", "leaflet": "^1.9.4",
"leaflet-edgebuffer": "^1.0.6", "leaflet-edgebuffer": "^1.0.6",
"luxon": "^3.3.0", "luxon": "^3.3.0",
"path-posix": "^1.0.0", "path-posix": "^1.0.0",
"photoswipe": "^5.3.7", "photoswipe": "^5.3.8",
"plyr": "^3.7.8", "plyr": "^3.7.8",
"react-filerobot-image-editor": "^4.5.1",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"video.js": "^8.3.0", "video.js": "^8.3.0",
"vue": "^2.7.14", "vue": "^2.7.14",
@ -64,14 +65,14 @@
"devDependencies": { "devDependencies": {
"@nextcloud/browserslist-config": "^2.3.0", "@nextcloud/browserslist-config": "^2.3.0",
"@nextcloud/webpack-vue-config": "^5.5.1", "@nextcloud/webpack-vue-config": "^5.5.1",
"@playwright/test": "^1.33.0", "@playwright/test": "^1.36.1",
"@types/hammerjs": "^2.0.41", "@types/hammerjs": "^2.0.41",
"@types/luxon": "^3.3.0", "@types/luxon": "^3.3.1",
"@types/url-parse": "^1.4.8", "@types/url-parse": "^1.4.8",
"@types/videojs-contrib-quality-levels": "^2.0.1", "@types/videojs-contrib-quality-levels": "^2.0.1",
"playwright": "^1.33.0", "playwright": "^1.36.1",
"ts-loader": "^9.4.2", "ts-loader": "^9.4.4",
"typescript": "^5.0.4", "typescript": "^5.1.6",
"workbox-webpack-plugin": "^6.5.4" "workbox-webpack-plugin": "^7.0.0"
} }
} }

View File

@ -1,22 +0,0 @@
/**
* Filerobot has issues with loading images from HTML elements.
* We need to wait for the react object to be created properly before loading.
* This is a monkey patch to select an existing image using a global, but after wait.
*/
import loadImageOriginal from './loadImageOriginal.js';
var loadImage = function() {
const image = globalThis._fileRobotOverrideImage;
if (image) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(image);
}, 0);
});
}
return loadImageOriginal.apply(this, arguments);
}
export default loadImage;

View File

@ -1,17 +0,0 @@
#!/bin/bash
target="node_modules/react-filerobot-image-editor/lib/utils"
if [ -f $target/loadImageOriginal.js ]; then
echo "Filerobot is already patched, copying patch again ..."
else
if [ ! -f $target/loadImage.js ]; then
echo "Filerobot not installed or patch outdated"
exit 1
fi
echo "Patching filerobot-image-editor ..."
cp $target/loadImage.js $target/loadImageOriginal.js
fi
cp patches/filerobot-loadImage.js $target/loadImage.js

View File

@ -311,17 +311,22 @@ export default defineComponent({
if (event.pointerType === 'touch') return; // let touch events handle this if (event.pointerType === 'touch') return; // let touch events handle this
if (event.pointerType === 'mouse' && event.button !== 0) return; // only left click for mouse if (event.pointerType === 'mouse' && event.button !== 0) return; // only left click for mouse
if (this.has()) { if (this.has() || event.ctrlKey || event.shiftKey) {
if (event.shiftKey) { this.clickSelectionIcon(photo, event, rowIdx);
this.selectMulti(photo, this.rows, rowIdx);
} else {
this.selectPhoto(photo);
}
} else { } else {
this.openViewer(photo); this.openViewer(photo);
} }
}, },
/** Clicking on checkmark icon */
clickSelectionIcon(photo: IPhoto, event: PointerEvent, rowIdx: number) {
if (this.has() && event.shiftKey) {
this.selectMulti(photo, this.rows, rowIdx);
} else {
this.selectPhoto(photo);
}
},
/** Tap on */ /** Tap on */
touchstartPhoto(photo: IPhoto, event: TouchEvent, rowIdx: number) { touchstartPhoto(photo: IPhoto, event: TouchEvent, rowIdx: number) {
if (photo.flag & this.c.FLAG_PLACEHOLDER) return; if (photo.flag & this.c.FLAG_PLACEHOLDER) return;

View File

@ -56,7 +56,7 @@
}" }"
:data="photo" :data="photo"
:day="item.day" :day="item.day"
@select="selectionManager().selectPhoto($event)" @select="selectionManager().clickSelectionIcon(photo, $event, index)"
@pointerdown="selectionManager().clickPhoto(photo, $event, index)" @pointerdown="selectionManager().clickPhoto(photo, $event, index)"
@touchstart="selectionManager().touchstartPhoto(photo, $event, index)" @touchstart="selectionManager().touchstartPhoto(photo, $event, index)"
@touchend="selectionManager().touchendPhoto(photo, $event, index)" @touchend="selectionManager().touchendPhoto(photo, $event, index)"

View File

@ -93,7 +93,7 @@
type="radio" type="radio"
class="m-radio" class="m-radio"
@update:checked="update('memories.vod.nvenc.scale')" @update:checked="update('memories.vod.nvenc.scale')"
>{{ t('memories', 'CUDA scaler') }} >{{ t('memories', 'CUDA scaler') }} ({{ t('memories', 'not recommended') }})
</NcCheckboxRadioSwitch> </NcCheckboxRadioSwitch>
</p> </p>
</div> </div>

View File

@ -9,7 +9,14 @@
error: data.flag & c.FLAG_LOAD_FAIL, error: data.flag & c.FLAG_LOAD_FAIL,
}" }"
> >
<CheckCircleIcon v-once :size="18" class="select" @click="toggleSelect" /> <div
class="select"
v-once
v-if="!(data.flag & c.FLAG_PLACEHOLDER)"
@pointerdown.passive="$emit('select', $event)"
>
<CheckCircleIcon :size="18" />
</div>
<div class="video" v-if="data.flag & c.FLAG_IS_VIDEO"> <div class="video" v-if="data.flag & c.FLAG_IS_VIDEO">
<span v-if="data.video_duration" class="time"> <span v-if="data.video_duration" class="time">
@ -154,10 +161,6 @@ export default defineComponent({
}, },
methods: { methods: {
emitSelect(data: IPhoto) {
this.$emit('select', data);
},
/** Get url of the photo */ /** Get url of the photo */
url() { url() {
let base: 256 | 512 = 256; let base: 256 | 512 = 256;
@ -227,11 +230,6 @@ export default defineComponent({
this.data.flag |= this.c.FLAG_LOAD_FAIL; this.data.flag |= this.c.FLAG_LOAD_FAIL;
}, },
toggleSelect() {
if (this.data.flag & this.c.FLAG_PLACEHOLDER) return;
this.emitSelect(this.data);
},
contextmenu(e: Event) { contextmenu(e: Event) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
@ -288,41 +286,45 @@ $icon-half-size: 6px;
$icon-size: $icon-half-size * 2; $icon-size: $icon-half-size * 2;
/* Extra icons */ /* Extra icons */
.check-circle-icon.select { .select {
position: absolute; position: absolute;
top: calc(var(--icon-dist) + 2px); top: calc(var(--icon-dist) + 2px);
left: calc(var(--icon-dist) + 2px); left: calc(var(--icon-dist) + 2px);
z-index: 100; z-index: 100;
border-radius: 50%; border-radius: 50%;
cursor: pointer;
display: none; display: none;
@media (hover: hover) {
.p-outer:hover > & {
display: flex;
}
}
opacity: 0.7; opacity: 0.7;
&:hover,
.p-outer.selected & { @mixin visible {
display: flex;
opacity: 1; opacity: 1;
} }
// Extremely ugly way to fill up the space @media (hover: hover) {
// If this isn't done, bg has a border .p-outer:hover > & {
:deep path { @include visible;
transform: scale(1.2) translate(-2px, -2px); }
} }
filter: invert(1) brightness(100); filter: invert(1) brightness(100);
.p-outer.selected > & { .p-outer.selected > & {
display: flex; @include visible;
filter: invert(0); filter: invert(0);
background-color: white; background-color: white;
color: var(--color-primary); color: var(--color-primary);
} }
.check-circle-icon {
cursor: pointer;
// Extremely ugly way to fill up the space
// If this isn't done, bg has a border
:deep path {
transform: scale(1.2) translate(-2px, -2px);
}
}
} }
.video, .video,
.bottom-left-flag, .bottom-left-flag,
.livephoto { .livephoto {

View File

@ -106,8 +106,7 @@ export default defineComponent({
font-size: 1.075em; font-size: 1.075em;
} }
:hover, @mixin visible {
&.selected {
.select { .select {
display: flex; display: flex;
opacity: 0.7; opacity: 0.7;
@ -116,9 +115,21 @@ export default defineComponent({
transform: translateX(24px); transform: translateX(24px);
} }
} }
&.selected .select {
opacity: 1; // Show the icon (gray) when hovering or selected
color: var(--color-primary); @media (hover: hover) {
&:hover {
@include visible;
}
}
// Show the icon (blue) when selected
&.selected {
@include visible;
.select {
opacity: 1;
color: var(--color-primary);
}
} }
@media (max-width: 768px) { @media (max-width: 768px) {

View File

@ -8,7 +8,7 @@
</NcBreadcrumb> </NcBreadcrumb>
<NcBreadcrumb <NcBreadcrumb
v-for="folder in list" v-for="folder in list"
:key="folder.path" :key="folder.idx"
:title="folder.text" :title="folder.text"
:to="{ name: 'folders', params: { path: folder.path } }" :to="{ name: 'folders', params: { path: folder.path } }"
/> />
@ -67,7 +67,8 @@ export default defineComponent({
computed: { computed: {
list(): { list(): {
text: string; text: string;
path: string; path: string[];
idx: number;
}[] { }[] {
let path: string[] | string = this.$route.params.path || ''; let path: string[] | string = this.$route.params.path || '';
if (typeof path === 'string') { if (typeof path === 'string') {
@ -76,11 +77,9 @@ export default defineComponent({
return path return path
.filter((x) => x) .filter((x) => x)
.map((x, idx, arr) => { .map((text, idx, arr) => {
return { const path = arr.slice(0, idx + 1);
text: x, return { text, path, idx };
path: arr.slice(0, idx + 1).join('/'),
};
}); });
}, },

View File

@ -141,10 +141,15 @@ export default defineComponent({
async mounted() { async mounted() {
await loadFilerobot(); await loadFilerobot();
globalThis._fileRobotOverrideImage = await this.getImage();
const div = <HTMLElement>this.$refs.editor; const div = <HTMLElement>this.$refs.editor;
this.imageEditor = new FilerobotImageEditor(div, this.config);
// Directly use an HTML element to make sure the resolution
// in the editor matches the original file, but we can work
// with a preview instead
const source = await this.getImage();
const config = { ...this.config, source };
this.imageEditor = new FilerobotImageEditor(div, config);
this.imageEditor.render(); this.imageEditor.render();
// Handle keyboard // Handle keyboard
@ -155,7 +160,6 @@ export default defineComponent({
if (this.imageEditor) { if (this.imageEditor) {
this.imageEditor.terminate(); this.imageEditor.terminate();
} }
globalThis._fileRobotOverrideImage = undefined;
window.removeEventListener('keydown', this.handleKeydown, true); window.removeEventListener('keydown', this.handleKeydown, true);
}, },

View File

@ -4,7 +4,6 @@ export * from './dav/archive';
export * from './dav/download'; export * from './dav/download';
export * from './dav/face'; export * from './dav/face';
export * from './dav/favorites'; export * from './dav/favorites';
export * from './dav/folders';
export * from './dav/onthisday'; export * from './dav/onthisday';
export * from './dav/tags'; export * from './dav/tags';
export * from './dav/other'; export * from './dav/other';

View File

@ -1,73 +0,0 @@
import * as base from './base';
import { getCurrentUser } from '@nextcloud/auth';
import { genFileInfo } from '../FileUtils';
import { IFileInfo } from '../../types';
import client from '../DavClient';
/**
* Get file infos for files in folder path
* @param folderPath Path to folder
* @param limit Max number of files to return
*/
export async function getFolderPreviewFileIds(folderPath: string, limit: number): Promise<IFileInfo[]> {
const prefixPath = `/files/${getCurrentUser()?.uid}`;
const filter = base.IMAGE_MIME_TYPES.map(
(mime) => `
<d:like>
<d:prop>
<d:getcontenttype/>
</d:prop>
<d:literal>${mime}</d:literal>
</d:like>
`
).join('');
const options = {
method: 'SEARCH',
headers: {
'content-Type': 'text/xml',
},
data: `<?xml version="1.0" encoding="UTF-8"?>
<d:searchrequest xmlns:d="DAV:"
xmlns:oc="http://owncloud.org/ns"
xmlns:nc="http://nextcloud.org/ns"
xmlns:ns="https://github.com/icewind1991/SearchDAV/ns"
xmlns:ocs="http://open-collaboration-services.org/ns">
<d:basicsearch>
<d:select>
<d:prop>
${base.props}
</d:prop>
</d:select>
<d:from>
<d:scope>
<d:href>${prefixPath}/${folderPath}</d:href>
<d:depth>0</d:depth>
</d:scope>
</d:from>
<d:where>
<d:or>
${filter}
</d:or>
</d:where>
<d:limit>
<d:nresults>${limit}</d:nresults>
</d:limit>
</d:basicsearch>
</d:searchrequest>`,
deep: true,
details: true,
responseType: 'text',
};
let response: any = await client.getDirectoryContents('', options);
return response.data
.map((data: any) => genFileInfo(data))
.map((data: any) =>
Object.assign({}, data, {
filename: data.filename.replace(prefixPath, ''),
etag: data.etag.replace(/&quot;/g, ''), // remove quotes
})
);
}