Add Activepieces integration for workflow automation
- Add Activepieces fork with SmoothSchedule custom piece - Create integrations app with Activepieces service layer - Add embed token endpoint for iframe integration - Create Automations page with embedded workflow builder - Add sidebar visibility fix for embed mode - Add list inactive customers endpoint to Public API - Include SmoothSchedule triggers: event created/updated/cancelled - Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"extends": [
|
||||
"../../../../.eslintrc.base.json"
|
||||
],
|
||||
"ignorePatterns": [
|
||||
"!**/*"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"files": [
|
||||
"*.ts",
|
||||
"*.tsx",
|
||||
"*.js",
|
||||
"*.jsx"
|
||||
],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"*.ts",
|
||||
"*.tsx"
|
||||
],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"*.js",
|
||||
"*.jsx"
|
||||
],
|
||||
"rules": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
# pieces-cloudinary
|
||||
|
||||
This library was generated with [Nx](https://nx.dev).
|
||||
|
||||
## Building
|
||||
|
||||
Run `nx build pieces-cloudinary` to build the library.
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "@activepieces/piece-cloudinary",
|
||||
"version": "0.0.6"
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"name": "pieces-cloudinary",
|
||||
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
|
||||
"sourceRoot": "packages/pieces/community/cloudinary/src",
|
||||
"projectType": "library",
|
||||
"release": {
|
||||
"version": {
|
||||
"currentVersionResolver": "git-tag",
|
||||
"preserveLocalDependencyProtocols": false,
|
||||
"manifestRootsToUpdate": [
|
||||
"dist/{projectRoot}"
|
||||
]
|
||||
}
|
||||
},
|
||||
"tags": [],
|
||||
"targets": {
|
||||
"build": {
|
||||
"executor": "@nx/js:tsc",
|
||||
"outputs": [
|
||||
"{options.outputPath}"
|
||||
],
|
||||
"options": {
|
||||
"outputPath": "dist/packages/pieces/community/cloudinary",
|
||||
"tsConfig": "packages/pieces/community/cloudinary/tsconfig.lib.json",
|
||||
"packageJson": "packages/pieces/community/cloudinary/package.json",
|
||||
"main": "packages/pieces/community/cloudinary/src/index.ts",
|
||||
"assets": [
|
||||
"packages/pieces/community/cloudinary/*.md",
|
||||
{
|
||||
"input": "packages/pieces/community/cloudinary/src/i18n",
|
||||
"output": "./src/i18n",
|
||||
"glob": "**/!(i18n.json)"
|
||||
}
|
||||
],
|
||||
"buildableProjectDepsInPackageJsonType": "dependencies",
|
||||
"updateBuildableProjectDepsInPackageJson": true
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build",
|
||||
"prebuild"
|
||||
]
|
||||
},
|
||||
"nx-release-publish": {
|
||||
"options": {
|
||||
"packageRoot": "dist/{projectRoot}"
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
"executor": "@nx/eslint:lint",
|
||||
"outputs": [
|
||||
"{options.outputFile}"
|
||||
]
|
||||
},
|
||||
"prebuild": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"cwd": "packages/pieces/community/cloudinary",
|
||||
"command": "bun install --no-save --silent"
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"Cloudinary is a cloud-based image and video management platform that allows you to upload, store, manage, and deliver your media assets. It provides a range of features for image and video optimization, transformation, and delivery.": "Cloudinary ist eine Cloud-basierte Bild- und Videoverwaltungsplattform, mit der Sie Ihre Mediendateien hochladen, speichern, verwalten und liefern können. Es bietet eine Reihe von Funktionen zur Bild- und Videooptimierung, Transformation und Auslieferung.",
|
||||
"API Key": "API-Schlüssel",
|
||||
"API Secret": "API-Geheimnis",
|
||||
"Cloud Name": "Cloud-Name",
|
||||
"Your Cloudinary API Key. Found in Console Settings → API Keys page.": "Ihr Cloudinary API Key. Gefunden in Konsolen-Einstellungen → API-Schlüssel-Seite.",
|
||||
"Your Cloudinary API Secret. Found in Console Settings → API Keys page. Keep this secure and never share publicly.": "Ihr Cloudinary API Secret. Gefunden in Konsolen-Einstellungen → API-Schlüssel-Seite. Bewahren Sie dies sicher und geben Sie niemals öffentlich weiter.",
|
||||
"Your Cloudinary Cloud Name. Found in Console Settings → API Keys page or in your dashboard URL (e.g., \"demo\" from console.cloudinary.com/console/demo).": "Ihr Cloud-Cloud-Name. Gefunden in Konsolen-Einstellungen → API-Schlüssel Seite oder in Ihrer Dashboard-URL (z.B. \"Demo\" von console.cloudinary.com/console/demo).",
|
||||
"Enter your Cloudinary account credentials. Find these in your Cloudinary Console settings under the API keys page.": "Geben Sie Ihre Cloudinär-Zugangsdaten ein. Finden Sie diese in den Cloudinärkonsolen-Einstellungen unter der Seite API-Schlüssel.",
|
||||
"Upload Resource": "Ressource hochladen",
|
||||
"Delete Resource": "Ressource löschen",
|
||||
"Create Usage Report": "Nutzungsbericht erstellen",
|
||||
"Find Resource by Public ID": "Ressource mittels öffentlicher ID finden",
|
||||
"Transform Resource": "Ressource transformieren",
|
||||
"Upload a new image, video, or file to Cloudinary.": "Laden Sie ein neues Bild, Video oder Datei in Cloudinary hoch.",
|
||||
"Permanently delete images, videos, or files from Cloudinary.": "Lösche Bilder, Videos oder Dateien dauerhaft aus Cloudinary.",
|
||||
"Generate a comprehensive report of account usage and quotas including storage, bandwidth, transformations, requests, and add-on usage.": "Erstellen Sie einen umfassenden Bericht über Kontonutzung und Quoten einschließlich Speicherplatz, Bandbreite, Transformationen, Anfragen und Add-on-Nutzung.",
|
||||
"Retrieve details of an asset using its unique public ID.": "Rufen Sie Details zu einem Vermögenswert mit einer eindeutigen öffentlichen ID ab.",
|
||||
"Apply transformations (resize, crop, watermark, etc.) to an asset and generate a new URL.": "Transformationen (Größe, Zuschneidung, Wasserzeichen etc.) auf ein Asset anwenden und eine neue URL generieren.",
|
||||
"File": "Datei",
|
||||
"Public ID": "Öffentliche ID",
|
||||
"Folder": "Ordner",
|
||||
"Tags": "Tags",
|
||||
"Overwrite": "Überschreiben",
|
||||
"Use Original Filename": "Verwende ursprünglichen Dateinamen",
|
||||
"Deletion Mode": "Löschmodus",
|
||||
"Resource Type": "Ressourcentyp",
|
||||
"Public IDs": "Öffentliche IDs",
|
||||
"Manual Public IDs": "Manuelle öffentliche IDs",
|
||||
"Manual Tag": "Manueller Tag",
|
||||
"Prefix": "Präfix",
|
||||
"Delivery Type": "Lieferart",
|
||||
"Keep Original": "Original behalten",
|
||||
"Invalidate CDN Cache": "CDN-Cache ungültig",
|
||||
"Report Date": "Berichtsdatum",
|
||||
"Include Detailed Breakdown": "Detaillierte Aufteilung einbeziehen",
|
||||
"Manual Public ID": "Manuelle öffentliche ID",
|
||||
"Width": "Width",
|
||||
"Height": "Höhe",
|
||||
"Crop Mode": "Crop-Modus",
|
||||
"Gravity": "Schwerkraft",
|
||||
"Output Format": "Ausgabeformat",
|
||||
"Quality": "Qualität",
|
||||
"Border": "Border",
|
||||
"Border Radius": "Randradius",
|
||||
"Opacity": "Deckkraft",
|
||||
"Rotation": "Drehung",
|
||||
"Raw Transformation": "Roh-Transformation",
|
||||
"Generate URL Only": "Nur URL generieren",
|
||||
"The file to upload to Cloudinary.": "Die Datei, die in Cloudinary hochgeladen werden soll.",
|
||||
"The public ID for the uploaded resource. If not specified, a random ID will be generated.": "Die öffentliche ID für die hochgeladene Ressource. Wenn nicht angegeben, wird eine zufällige ID generiert.",
|
||||
"Select an existing folder or type a new folder path (e.g., \"samples/animals\")": "Wählen Sie einen existierenden Ordner oder geben Sie einen neuen Ordnerpfad ein (z.B. \"samples/animals\")",
|
||||
"Select existing tags or type new ones": "Vorhandene Tags auswählen oder neue eingeben",
|
||||
"Whether to overwrite existing assets with the same public ID.": "Gibt an, ob vorhandene Assets mit der gleichen öffentlichen ID überschrieben werden sollen.",
|
||||
"Whether to use the original file name as the public ID.": "Gibt an, ob der ursprüngliche Dateiname als öffentliche ID verwendet werden soll.",
|
||||
"Choose how to specify assets for deletion": "Legen Sie fest, wie Assets zum Löschen angegeben werden sollen",
|
||||
"Select the type of resource to upload to Cloudinary.": "Wählen Sie die Art der Ressource, die in Cloudinary hochgeladen werden soll.",
|
||||
"Select assets to delete by their public IDs": "Wählen Sie Assets aus, die mit ihren öffentlichen IDs gelöscht werden sollen",
|
||||
"Or type comma-separated public IDs manually (up to 100). Example: image1,image2,folder/image3": "Oder geben Sie durch Kommas getrennte öffentliche IDs manuell ein (bis zu 100). Beispiel: image1,image2,folder/image3",
|
||||
"Select existing tags or type new ones (comma-separated)": "Bestehende Tags auswählen oder neue eingeben (durch Komma getrennt)",
|
||||
"Or type tag name manually to delete all assets with this tag (up to 1000 assets)": "Oder geben Sie den Tagnamen manuell ein, um alle Assets mit diesem Tag zu löschen (bis zu 1000 Assets)",
|
||||
"Delete all assets whose public ID starts with this prefix (up to 1000 assets)": "Löschen Sie alle Assets, deren öffentliche ID mit diesem Präfix beginnt (bis zu 1000 Assets)",
|
||||
"The delivery type of assets to delete": "Die zu löschende Zustellung von Assets",
|
||||
"Delete only derived assets, keep the original": "Nur abgeleitete Assets löschen, das Original behalten",
|
||||
"Whether to invalidate CDN cached copies. Takes a few minutes to propagate.": "Gibt an, ob CDN zwischengespeicherte Kopien ungültig gemacht werden sollen. Es dauert ein paar Minuten, um sie zu verbreiten.",
|
||||
"Date for the usage report. Must be within the last 3 months. Leave empty for current date.": "Datum für den Nutzungsbericht. Muss innerhalb der letzten 3 Monate sein. Leer lassen für aktuelles Datum.",
|
||||
"Whether to include detailed breakdown of transformation types and add-on usage in the response.": "Gibt an, ob in der Antwort eine detaillierte Aufschlüsselung von Transformationstypen und Add-on-Verwendung enthalten sein soll.",
|
||||
"Select an asset to find by its public ID": "Wählen Sie ein Asset aus, das über seine öffentliche ID gefunden werden soll",
|
||||
"Or enter the public ID manually if not found in dropdown (e.g., \"sample\", \"folder/image-name\")": "Oder geben Sie die öffentliche ID manuell ein, wenn sie nicht im Dropdown gefunden wurde (z.B. \"Beispiel\", \"Ordner/Bildname\")",
|
||||
"The delivery type of the asset": "Der Lieferungstyp des Asset",
|
||||
"Or enter public ID manually if not in dropdown": "Oder öffentliche ID manuell eingeben, wenn nicht im Dropdown-Menü",
|
||||
"Target width in pixels": "Zielbreite in Pixeln",
|
||||
"Target height in pixels": "Zielhöhe in Pixeln",
|
||||
"How to handle resizing when aspect ratios differ": "Wie man mit der Größenänderung umgeht, wenn das Seitenverhältnis unterschiedlich ist",
|
||||
"Which part to focus on when cropping": "Welcher Teil beim Zuschneiden fokussiert werden soll",
|
||||
"Convert to this format": "In dieses Format konvertieren",
|
||||
"Image quality/compression level": "Bildqualität/-komprimierungsstufe",
|
||||
"Add border (e.g., \"5px_solid_blue\", \"10px_solid_#ff0000\")": "Füge Rand hinzu (z.B. \"5px_solid_blue\", \"10px_solid_#ff0000\")",
|
||||
"Round corners or make circular": "Runde Ecken oder kreisförmig machen",
|
||||
"Transparency level (0-100, where 100 is opaque)": "Transparenzstufe (0-100, wo 100 undurchsichtig sind)",
|
||||
"Rotate image by degrees (0-360)": "Bild um Grad drehen (0-360)",
|
||||
"Advanced: Raw transformation string (e.g., \"c_fill,w_300,h_200/e_sepia/r_20\"). This will be applied after the above basic transformations.": "Erweitert: Roher Transformationsstring (z.B. \"c_fill,w_300,h_200/e_sepia/r_20\"). Dieser wird nach den obigen grundlegenden Transformationen angewendet.",
|
||||
"If true, only return the transformation URL. If false, also make a request to generate the transformed asset.": "Wenn aktiviert, gibt nur die Transformation URL zurück. Falls falsch, wird auch eine Anfrage gestellt, um das Transformierte Asset zu generieren.",
|
||||
"By Public IDs": "Von öffentlichen IDs",
|
||||
"By Tag": "Nach Tag",
|
||||
"By Prefix": "Nach Präfix",
|
||||
"Upload": "Hochladen",
|
||||
"Private": "Privat",
|
||||
"Authenticated": "Authentifiziert",
|
||||
"Scale (fit within bounds)": "Skalierung (innerhalb der Grenzen passen)",
|
||||
"Fill (crop to exact size)": "Füllen (auf exakte Größe schneiden)",
|
||||
"Fit (pad to exact size)": "Anpassen (Pad auf exakte Größe)",
|
||||
"Crop (exact size, smart cropping)": "Zuschneiden (exakte Größe, Smart Cropping)",
|
||||
"Thumb (face-aware cropping)": "Thumb (face-aware cropping)",
|
||||
"Limit (only scale down)": "Limit (nur skalieren)",
|
||||
"Auto (smart cropping)": "Auto (Smart Cropping)",
|
||||
"Face detection": "Gesichtserkennung",
|
||||
"Center": "Zentriert",
|
||||
"North (top)": "Norden (oben)",
|
||||
"South (bottom)": "Süd (unten)",
|
||||
"East (right)": "Ost (rechts)",
|
||||
"West (left)": "West (links)",
|
||||
"Northwest (top-left)": "Nordwest (oben links)",
|
||||
"Northeast (top-right)": "Nordost (oben rechts)",
|
||||
"Southwest (bottom-left)": "Südwesten (unten links)",
|
||||
"Southeast (bottom-right)": "Südost (unten rechts)",
|
||||
"Auto (best format for browser)": "Auto (bestes Format für Browser)",
|
||||
"JPEG": "JPEG",
|
||||
"PNG": "PNG",
|
||||
"WebP": "WebP",
|
||||
"AVIF": "AVIF",
|
||||
"GIF": "GIF",
|
||||
"SVG": "SVG",
|
||||
"Auto (optimal for format)": "Auto (optimal für Format)",
|
||||
"High (90)": "Hoch (90)",
|
||||
"Good (80)": "Gut (80)",
|
||||
"Medium (70)": "Mittel (70)",
|
||||
"Low (50)": "Niedrig (50)",
|
||||
"Slight rounding (10px)": "Leichte Runde (10px)",
|
||||
"Rounded corners (20px)": "Abgerundete Ecken (20px)",
|
||||
"Very rounded (50px)": "Sehr abgerundet (50px)",
|
||||
"Circle/Oval (max)": "Kreis/Oval (max)",
|
||||
"New Resource": "Neue Ressource",
|
||||
"New Tag Added to Asset": "Neuer Tag zum Asset hinzugefügt",
|
||||
"Triggers when a new image, video, or file is uploaded to a specific folder or account in Cloudinary.": "Wird ausgelöst, wenn ein neues Bild, ein Video oder eine Datei in einen bestimmten Ordner oder ein bestimmtes Konto in Cloudinary hochgeladen wird.",
|
||||
"Triggers when a tag is added to an asset in Cloudinary.": "Wird ausgelöst, wenn ein Tag zu einem Asset in Cloudinary hinzugefügt wird.",
|
||||
"Asset Folder": "Asset-Ordner",
|
||||
"The Cloudinary folder to watch for new resources. Leave empty to watch the entire account.": "Der Cloudinär-Ordner, um nach neuen Ressourcen zu schauen. Lassen Sie leer, um das gesamte Konto zu beobachten.",
|
||||
"The type of resources to monitor for tag changes": "Die Art der Ressourcen, die für Tagänderungen überwacht werden sollen",
|
||||
"Optional: Watch only assets in this specific folder. Leave empty to watch all assets.": "Optional: Nur Assets in diesem Ordner anzeigen. Leer lassen um alle Assets zu beobachten.",
|
||||
"Image": "Bild",
|
||||
"Video": "Video",
|
||||
"Raw": "Rohe"
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"Cloudinary is a cloud-based image and video management platform that allows you to upload, store, manage, and deliver your media assets. It provides a range of features for image and video optimization, transformation, and delivery.": "Cloudinary es una plataforma de gestión de imágenes y vídeo basada en la nube que le permite cargar, almacenar, administrar y entregar sus activos multimedia. Proporciona una gama de características para la optimización de imágenes y vídeo, la transformación y la entrega.",
|
||||
"API Key": "Clave API",
|
||||
"API Secret": "API secreta",
|
||||
"Cloud Name": "Nombre de la nube",
|
||||
"Your Cloudinary API Key. Found in Console Settings → API Keys page.": "Su Cloudinary API Key. Encontrado en la página Configuración de la consola → Claves API.",
|
||||
"Your Cloudinary API Secret. Found in Console Settings → API Keys page. Keep this secure and never share publicly.": "Tu Cloudinary API secreto. Encontrado en la página Configuración de la consola → Claves API. Mantén esto seguro y nunca lo compartas públicamente.",
|
||||
"Your Cloudinary Cloud Name. Found in Console Settings → API Keys page or in your dashboard URL (e.g., \"demo\" from console.cloudinary.com/console/demo).": "Tu nombre de Cloudinary Cloudinary Cloud se encuentra en la página de claves de la consola → API o en tu URL del panel de control (por ejemplo, \"demo\" de console.cloudinary.com/console/demo).",
|
||||
"Enter your Cloudinary account credentials. Find these in your Cloudinary Console settings under the API keys page.": "Introduce las credenciales de tu cuenta Cloudinary. Encuéntralas en la configuración de tu consola Cloudinary en la página de claves API.",
|
||||
"Upload Resource": "Subir Recurso",
|
||||
"Delete Resource": "Eliminar Recurso",
|
||||
"Create Usage Report": "Crear Reporte de Uso",
|
||||
"Find Resource by Public ID": "Buscar recursos por ID pública",
|
||||
"Transform Resource": "Transformar recurso",
|
||||
"Upload a new image, video, or file to Cloudinary.": "Subir una nueva imagen, vídeo o archivo a Cloudinary.",
|
||||
"Permanently delete images, videos, or files from Cloudinary.": "Elimina permanentemente imágenes, vídeos o archivos de Cloudinary.",
|
||||
"Generate a comprehensive report of account usage and quotas including storage, bandwidth, transformations, requests, and add-on usage.": "Generar un informe completo de uso de la cuenta y cupos incluyendo almacenamiento, ancho de banda, transformaciones, solicitudes y uso de complementos.",
|
||||
"Retrieve details of an asset using its unique public ID.": "Recuperar detalles de un activo utilizando su único ID público.",
|
||||
"Apply transformations (resize, crop, watermark, etc.) to an asset and generate a new URL.": "Aplicar transformaciones (redimensionar, recortar, marca de agua, etc.) a un activo y generar una nueva URL.",
|
||||
"File": "Archivo",
|
||||
"Public ID": "ID Pública",
|
||||
"Folder": "Carpeta",
|
||||
"Tags": "Etiquetas",
|
||||
"Overwrite": "Sobrescribir",
|
||||
"Use Original Filename": "Usar nombre de archivo original",
|
||||
"Deletion Mode": "Modo de eliminación",
|
||||
"Resource Type": "Tipo de recurso",
|
||||
"Public IDs": "IDs públicos",
|
||||
"Manual Public IDs": "IDs públicos manuales",
|
||||
"Manual Tag": "Etiqueta manual",
|
||||
"Prefix": "Prefijo",
|
||||
"Delivery Type": "Tipo de entrega",
|
||||
"Keep Original": "Mantener original",
|
||||
"Invalidate CDN Cache": "Invalidar caché CDN",
|
||||
"Report Date": "Fecha del informe",
|
||||
"Include Detailed Breakdown": "Incluye desglose detallado",
|
||||
"Manual Public ID": "ID Pública manual",
|
||||
"Width": "Width",
|
||||
"Height": "Altura",
|
||||
"Crop Mode": "Modo recorte",
|
||||
"Gravity": "Gravedad",
|
||||
"Output Format": "Formato de salida",
|
||||
"Quality": "Calidad",
|
||||
"Border": "Border",
|
||||
"Border Radius": "Radio de borde",
|
||||
"Opacity": "Opacidad",
|
||||
"Rotation": "Rotación",
|
||||
"Raw Transformation": "Transformación sin procesar",
|
||||
"Generate URL Only": "Generar sólo URL",
|
||||
"The file to upload to Cloudinary.": "El archivo a subir a Cloudinary.",
|
||||
"The public ID for the uploaded resource. If not specified, a random ID will be generated.": "El ID público del recurso subido. Si no se especifica, se generará un ID aleatorio.",
|
||||
"Select an existing folder or type a new folder path (e.g., \"samples/animals\")": "Seleccione una carpeta existente o escriba una nueva ruta de carpeta (por ejemplo, \"muestras/animales\")",
|
||||
"Select existing tags or type new ones": "Seleccione etiquetas existentes o escriba nuevas",
|
||||
"Whether to overwrite existing assets with the same public ID.": "Si sobrescribir los activos existentes con el mismo ID público.",
|
||||
"Whether to use the original file name as the public ID.": "Si usar el nombre del archivo original como el ID público.",
|
||||
"Choose how to specify assets for deletion": "Elegir cómo especificar los recursos para la eliminación",
|
||||
"Select the type of resource to upload to Cloudinary.": "Selecciona el tipo de recurso a subir a Cloudinary.",
|
||||
"Select assets to delete by their public IDs": "Seleccione los recursos a eliminar por sus IDs públicos",
|
||||
"Or type comma-separated public IDs manually (up to 100). Example: image1,image2,folder/image3": "O escriba identificadores públicos separados por comas manualmente (hasta 100). Ejemplo: imagen1,imagen2,carpeta/imagen3",
|
||||
"Select existing tags or type new ones (comma-separated)": "Seleccione etiquetas existentes o escriba nuevas (separadas por comas)",
|
||||
"Or type tag name manually to delete all assets with this tag (up to 1000 assets)": "O escriba el nombre de la etiqueta manualmente para eliminar todos los recursos con esta etiqueta (hasta 1000 activos)",
|
||||
"Delete all assets whose public ID starts with this prefix (up to 1000 assets)": "Eliminar todos los activos cuyo ID público comienza con este prefijo (hasta 1000 activos)",
|
||||
"The delivery type of assets to delete": "El tipo de entrega de recursos a eliminar",
|
||||
"Delete only derived assets, keep the original": "Eliminar sólo activos derivados, mantener el original",
|
||||
"Whether to invalidate CDN cached copies. Takes a few minutes to propagate.": "Si no es necesario realizar copias en caché CDN y tarda unos minutos en propagarse.",
|
||||
"Date for the usage report. Must be within the last 3 months. Leave empty for current date.": "Fecha para el informe de uso. Debe estar en los últimos 3 meses. Dejar vacío para la fecha actual.",
|
||||
"Whether to include detailed breakdown of transformation types and add-on usage in the response.": "Si se debe incluir un desglose detallado de los tipos de transformaciones y el uso de complementos en la respuesta.",
|
||||
"Select an asset to find by its public ID": "Seleccione un recurso para encontrar por su ID pública",
|
||||
"Or enter the public ID manually if not found in dropdown (e.g., \"sample\", \"folder/image-name\")": "O introduzca el ID público manualmente si no se encuentra en el menú desplegable (por ejemplo, \"muestra\", \"carpeta/nombre-imagen\")",
|
||||
"The delivery type of the asset": "El tipo de entrega del recurso",
|
||||
"Or enter public ID manually if not in dropdown": "O introduzca el ID público manualmente si no está en la lista desplegable",
|
||||
"Target width in pixels": "Ancho objetivo en píxeles",
|
||||
"Target height in pixels": "Altura objetivo en píxeles",
|
||||
"How to handle resizing when aspect ratios differ": "Cómo manejar el cambio de tamaño cuando los ratios de aspecto difieren",
|
||||
"Which part to focus on when cropping": "En qué parte enfocar al recortar",
|
||||
"Convert to this format": "Convertir a este formato",
|
||||
"Image quality/compression level": "Nivel de calidad/compresión de la imagen",
|
||||
"Add border (e.g., \"5px_solid_blue\", \"10px_solid_#ff0000\")": "Añadir borde (por ej., \"5px_solid_blue\", \"10px_solid_#ff0000\")",
|
||||
"Round corners or make circular": "Redondear esquinas o hacer circular",
|
||||
"Transparency level (0-100, where 100 is opaque)": "Nivel de transparencia (0-100, donde 100 es opaco)",
|
||||
"Rotate image by degrees (0-360)": "Rotar la imagen por grados (0-360)",
|
||||
"Advanced: Raw transformation string (e.g., \"c_fill,w_300,h_200/e_sepia/r_20\"). This will be applied after the above basic transformations.": "Advanced: Raw transformation string (p. ej., \"c_fill,w_300,h_200/e_sepia/r_20\"). Esto se aplicará después de las transformaciones básicas anteriores.",
|
||||
"If true, only return the transformation URL. If false, also make a request to generate the transformed asset.": "Si es verdadero, sólo devuelve la URL de transformación. Si es falso, haga una petición para generar el activo transformado.",
|
||||
"By Public IDs": "Por IDs públicos",
|
||||
"By Tag": "Por etiqueta",
|
||||
"By Prefix": "Por prefijo",
|
||||
"Upload": "Subir",
|
||||
"Private": "Privado",
|
||||
"Authenticated": "Autenticado",
|
||||
"Scale (fit within bounds)": "Escala (ajuste dentro de los límites)",
|
||||
"Fill (crop to exact size)": "Rellenar (recortar a tamaño exacto)",
|
||||
"Fit (pad to exact size)": "Ajustar (pad al tamaño exacto)",
|
||||
"Crop (exact size, smart cropping)": "Recortar (tamaño exacto, recorte inteligente)",
|
||||
"Thumb (face-aware cropping)": "Pulgar (recorte a cara)",
|
||||
"Limit (only scale down)": "Límite (solo escala abajo)",
|
||||
"Auto (smart cropping)": "Auto (recorte inteligente)",
|
||||
"Face detection": "Detección de caras",
|
||||
"Center": "Centrar",
|
||||
"North (top)": "Norte (arriba)",
|
||||
"South (bottom)": "Sur (abajo)",
|
||||
"East (right)": "Este (derecha)",
|
||||
"West (left)": "Oeste (izquierda)",
|
||||
"Northwest (top-left)": "Noroeste (arriba-izquierda)",
|
||||
"Northeast (top-right)": "Noreste (arriba-derecha)",
|
||||
"Southwest (bottom-left)": "Suroeste (inferior izquierda)",
|
||||
"Southeast (bottom-right)": "Sureste (abajo derecha)",
|
||||
"Auto (best format for browser)": "Auto (mejor formato para el navegador)",
|
||||
"JPEG": "JPEG",
|
||||
"PNG": "PNG",
|
||||
"WebP": "WebP",
|
||||
"AVIF": "AVIF",
|
||||
"GIF": "GIF",
|
||||
"SVG": "SVG",
|
||||
"Auto (optimal for format)": "Auto (óptimo para el formato)",
|
||||
"High (90)": "Alta (90)",
|
||||
"Good (80)": "Bien (80)",
|
||||
"Medium (70)": "Medio (70)",
|
||||
"Low (50)": "Baja (50)",
|
||||
"Slight rounding (10px)": "Redondeo ligero (10px)",
|
||||
"Rounded corners (20px)": "Esquinas redondeadas (20px)",
|
||||
"Very rounded (50px)": "Muy redondeado (50px)",
|
||||
"Circle/Oval (max)": "Círculo/óvalo (máximo)",
|
||||
"New Resource": "Nuevo recurso",
|
||||
"New Tag Added to Asset": "Nueva etiqueta añadida al activo",
|
||||
"Triggers when a new image, video, or file is uploaded to a specific folder or account in Cloudinary.": "Se activa cuando una nueva imagen, vídeo o archivo se suben a una carpeta o cuenta específica en Cloudinary.",
|
||||
"Triggers when a tag is added to an asset in Cloudinary.": "Dispara cuando una etiqueta se agrega a un activo en Cloudinary.",
|
||||
"Asset Folder": "Carpeta de recursos",
|
||||
"The Cloudinary folder to watch for new resources. Leave empty to watch the entire account.": "La carpeta de nubes para ver nuevos recursos. Deje en blanco para ver toda la cuenta.",
|
||||
"The type of resources to monitor for tag changes": "El tipo de recursos a monitorizar para los cambios de etiqueta",
|
||||
"Optional: Watch only assets in this specific folder. Leave empty to watch all assets.": "Opcional: Ver sólo activos en esta carpeta específica. Dejar en blanco para ver todos los activos.",
|
||||
"Image": "Imagen",
|
||||
"Video": "Vídeo",
|
||||
"Raw": "Rápido"
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"Cloudinary is a cloud-based image and video management platform that allows you to upload, store, manage, and deliver your media assets. It provides a range of features for image and video optimization, transformation, and delivery.": "Cloudinary est une plateforme de gestion d'images et de vidéos basée sur le nuage qui vous permet de télécharger, de stocker, de gérer et de livrer vos ressources multimédias. Il fournit une gamme de fonctionnalités pour l'optimisation des images et des vidéos, la transformation et la livraison.",
|
||||
"API Key": "Clé API",
|
||||
"API Secret": "Secret de l'API",
|
||||
"Cloud Name": "Nom du Cloud",
|
||||
"Your Cloudinary API Key. Found in Console Settings → API Keys page.": "Votre clé Cloudinary API. Trouvé dans les Paramètres de la console → Clés de l'API.",
|
||||
"Your Cloudinary API Secret. Found in Console Settings → API Keys page. Keep this secure and never share publicly.": "Votre Secret Cloudinary API. Trouvé dans Paramètres de la console → Page des clés API. Gardez cette sécurité et ne partagez jamais publiquement.",
|
||||
"Your Cloudinary Cloud Name. Found in Console Settings → API Keys page or in your dashboard URL (e.g., \"demo\" from console.cloudinary.com/console/demo).": "Votre nom Cloudinary Cloud. Trouvé dans Paramètres de la console → Page des clés de l'API ou dans l'URL de votre tableau de bord (par exemple, \"demo\" de console.cloudinary.com/console/demo).",
|
||||
"Enter your Cloudinary account credentials. Find these in your Cloudinary Console settings under the API keys page.": "Entrez vos identifiants de compte Cloudinary. Retrouvez-les dans les paramètres de votre console Cloudinary sous la page des clés API.",
|
||||
"Upload Resource": "Charger une ressource",
|
||||
"Delete Resource": "Supprimer la ressource",
|
||||
"Create Usage Report": "Créer un rapport d'utilisation",
|
||||
"Find Resource by Public ID": "Trouver une ressource par ID public",
|
||||
"Transform Resource": "Ressource de transformation",
|
||||
"Upload a new image, video, or file to Cloudinary.": "Télécharger une nouvelle image, vidéo ou fichier sur Cloudinary.",
|
||||
"Permanently delete images, videos, or files from Cloudinary.": "Supprimer définitivement des images, des vidéos ou des fichiers de Cloudinary.",
|
||||
"Generate a comprehensive report of account usage and quotas including storage, bandwidth, transformations, requests, and add-on usage.": "Générer un rapport complet de l'utilisation du compte et des quotas incluant le stockage, la bande passante, les transformations, les requêtes et l'utilisation des modules complémentaires.",
|
||||
"Retrieve details of an asset using its unique public ID.": "Récupérer les détails d'une ressource à l'aide de son identifiant public unique.",
|
||||
"Apply transformations (resize, crop, watermark, etc.) to an asset and generate a new URL.": "Appliquer les transformations (redimensionnement, recadrage, filigrane, etc.) à une ressource et générer une nouvelle URL.",
|
||||
"File": "Ficher",
|
||||
"Public ID": "Identifiant public",
|
||||
"Folder": "Dossier",
|
||||
"Tags": "Tags",
|
||||
"Overwrite": "Écraser",
|
||||
"Use Original Filename": "Utiliser le nom de fichier original",
|
||||
"Deletion Mode": "Mode de suppression",
|
||||
"Resource Type": "Type de ressource",
|
||||
"Public IDs": "IDs publics",
|
||||
"Manual Public IDs": "IDs publics manuels",
|
||||
"Manual Tag": "Étiquette manuelle",
|
||||
"Prefix": "Préfixe",
|
||||
"Delivery Type": "Type de livraison",
|
||||
"Keep Original": "Garder l'original",
|
||||
"Invalidate CDN Cache": "Invalider le cache CDN",
|
||||
"Report Date": "Date du rapport",
|
||||
"Include Detailed Breakdown": "Inclure la répartition détaillée",
|
||||
"Manual Public ID": "Identifiant public manuel",
|
||||
"Width": "Width",
|
||||
"Height": "Hauteur",
|
||||
"Crop Mode": "Mode de rognage",
|
||||
"Gravity": "Gravité",
|
||||
"Output Format": "Format de sortie",
|
||||
"Quality": "Qualité",
|
||||
"Border": "Border",
|
||||
"Border Radius": "Rayon de bordure",
|
||||
"Opacity": "Opacité",
|
||||
"Rotation": "Rotation",
|
||||
"Raw Transformation": "Transformation brute",
|
||||
"Generate URL Only": "Générer une URL uniquement",
|
||||
"The file to upload to Cloudinary.": "Le fichier à télécharger vers Cloudinary.",
|
||||
"The public ID for the uploaded resource. If not specified, a random ID will be generated.": "L'ID public pour la ressource téléchargée. Si non spécifié, un ID aléatoire sera généré.",
|
||||
"Select an existing folder or type a new folder path (e.g., \"samples/animals\")": "Sélectionnez un dossier existant ou tapez un nouveau chemin de dossier (par exemple, \"échantillons/animaux\")",
|
||||
"Select existing tags or type new ones": "Sélectionnez les tags existants ou tapez de nouveaux tags",
|
||||
"Whether to overwrite existing assets with the same public ID.": "Écraser ou non les actifs existants avec le même ID public.",
|
||||
"Whether to use the original file name as the public ID.": "Utiliser le nom du fichier original comme identifiant public.",
|
||||
"Choose how to specify assets for deletion": "Choisir comment spécifier les actifs à supprimer",
|
||||
"Select the type of resource to upload to Cloudinary.": "Sélectionnez le type de ressource à télécharger sur Cloudinary.",
|
||||
"Select assets to delete by their public IDs": "Sélectionner les actifs à supprimer par leurs identifiants publics",
|
||||
"Or type comma-separated public IDs manually (up to 100). Example: image1,image2,folder/image3": "Ou tapez manuellement les identifiants publics séparés par des virgules (jusqu'à 100). Exemple: image1,image2,dossier/image3",
|
||||
"Select existing tags or type new ones (comma-separated)": "Sélectionnez les balises existantes ou tapez de nouvelles balises (séparées par des virgules)",
|
||||
"Or type tag name manually to delete all assets with this tag (up to 1000 assets)": "Ou tapez le nom du tag manuellement pour supprimer tous les assets avec ce tag (jusqu'à 1000 ressources)",
|
||||
"Delete all assets whose public ID starts with this prefix (up to 1000 assets)": "Supprimer tous les assets dont l'ID public commence par ce préfixe (jusqu'à 1000 ressources)",
|
||||
"The delivery type of assets to delete": "Le type de livraison des actifs à supprimer",
|
||||
"Delete only derived assets, keep the original": "Supprimer uniquement les actifs dérivés, conserver l'original",
|
||||
"Whether to invalidate CDN cached copies. Takes a few minutes to propagate.": "S'il faut invalider les copies CDN mises en cache. Prend quelques minutes pour se propager.",
|
||||
"Date for the usage report. Must be within the last 3 months. Leave empty for current date.": "Date pour le rapport d'utilisation. Doit être dans les 3 derniers mois. Laisser vide pour la date courante.",
|
||||
"Whether to include detailed breakdown of transformation types and add-on usage in the response.": "Inclure la ventilation détaillée des types de transformation et l'utilisation des modules dans la réponse.",
|
||||
"Select an asset to find by its public ID": "Sélectionnez une ressource à trouver par son ID public",
|
||||
"Or enter the public ID manually if not found in dropdown (e.g., \"sample\", \"folder/image-name\")": "Ou entrez manuellement l'identifiant public s'il n'est pas trouvé dans la liste déroulante (par exemple, \"échantillon\", \"nom du dossier/image\")",
|
||||
"The delivery type of the asset": "Le type de livraison du bien",
|
||||
"Or enter public ID manually if not in dropdown": "Ou entrez l'ID public manuellement si ce n'est pas dans la liste déroulante",
|
||||
"Target width in pixels": "Largeur de la cible en pixels",
|
||||
"Target height in pixels": "Hauteur de la cible en pixels",
|
||||
"How to handle resizing when aspect ratios differ": "Comment gérer le redimensionnement lorsque les proportions diffèrent",
|
||||
"Which part to focus on when cropping": "Sur quelle partie se concentrer lors du recadrage",
|
||||
"Convert to this format": "Convertir vers ce format",
|
||||
"Image quality/compression level": "Niveau de qualité/compression de l'image",
|
||||
"Add border (e.g., \"5px_solid_blue\", \"10px_solid_#ff0000\")": "Ajouter une bordure (par exemple, \"5px_solid_blue\", \"10px_solid_#ff0000\")",
|
||||
"Round corners or make circular": "Coins arrondis ou circulaires",
|
||||
"Transparency level (0-100, where 100 is opaque)": "Niveau de transparence (0-100, où 100 est opaque)",
|
||||
"Rotate image by degrees (0-360)": "Faire pivoter l'image par degrés (0-360)",
|
||||
"Advanced: Raw transformation string (e.g., \"c_fill,w_300,h_200/e_sepia/r_20\"). This will be applied after the above basic transformations.": "Avancé : Chaîne de transformation brute (par exemple, \"c_fill,w_300,h_200/e_sepia/r_20\"). Elle sera appliquée après les transformations de base ci-dessus.",
|
||||
"If true, only return the transformation URL. If false, also make a request to generate the transformed asset.": "Si vrai, retourne uniquement l'URL de transformation. Si false, faites également une requête pour générer l'actif transformé.",
|
||||
"By Public IDs": "Par ID public",
|
||||
"By Tag": "Par Tag",
|
||||
"By Prefix": "Par préfixe",
|
||||
"Upload": "Charger",
|
||||
"Private": "Privé",
|
||||
"Authenticated": "Authentifié",
|
||||
"Scale (fit within bounds)": "Échelle (ajustée dans les limites)",
|
||||
"Fill (crop to exact size)": "Remplir (recadrer à la taille exacte)",
|
||||
"Fit (pad to exact size)": "Ajuster (pad à la taille exacte)",
|
||||
"Crop (exact size, smart cropping)": "Rogner (taille exacte, recadrage intelligent)",
|
||||
"Thumb (face-aware cropping)": "Pouce (recadrage facial)",
|
||||
"Limit (only scale down)": "Limite (seulement réduire l'échelle)",
|
||||
"Auto (smart cropping)": "Auto (recadrage intelligent)",
|
||||
"Face detection": "Détection de visage",
|
||||
"Center": "Centrer",
|
||||
"North (top)": "Nord (haut)",
|
||||
"South (bottom)": "Sud (bas)",
|
||||
"East (right)": "Est (à droite)",
|
||||
"West (left)": "Ouest (à gauche)",
|
||||
"Northwest (top-left)": "Nord-Ouest (en haut à gauche)",
|
||||
"Northeast (top-right)": "Nord-Est (en haut à droite)",
|
||||
"Southwest (bottom-left)": "Sud-Ouest (en bas à gauche)",
|
||||
"Southeast (bottom-right)": "Sud-Est (en bas à droite)",
|
||||
"Auto (best format for browser)": "Auto (meilleur format pour le navigateur)",
|
||||
"JPEG": "JPEG",
|
||||
"PNG": "PNG",
|
||||
"WebP": "WebP",
|
||||
"AVIF": "AVIF",
|
||||
"GIF": "GIF",
|
||||
"SVG": "SVG",
|
||||
"Auto (optimal for format)": "Auto (optimal pour le format)",
|
||||
"High (90)": "Haut (90)",
|
||||
"Good (80)": "Bon (80)",
|
||||
"Medium (70)": "Moyen (70)",
|
||||
"Low (50)": "Bas (50)",
|
||||
"Slight rounding (10px)": "Arrondi léger (10px)",
|
||||
"Rounded corners (20px)": "Coins arrondis (20px)",
|
||||
"Very rounded (50px)": "Très arrondi (50px)",
|
||||
"Circle/Oval (max)": "Cercle/Oval (max)",
|
||||
"New Resource": "Nouvelle ressource",
|
||||
"New Tag Added to Asset": "Nouveau tag ajouté à l'actif",
|
||||
"Triggers when a new image, video, or file is uploaded to a specific folder or account in Cloudinary.": "Déclenche quand une nouvelle image, vidéo ou fichier est téléchargé dans un dossier ou un compte spécifique dans Cloudinary.",
|
||||
"Triggers when a tag is added to an asset in Cloudinary.": "Déclenche lorsqu'un tag est ajouté à une ressource dans Cloudinary.",
|
||||
"Asset Folder": "Répertoire d'actif",
|
||||
"The Cloudinary folder to watch for new resources. Leave empty to watch the entire account.": "Le dossier Cloudinary à surveiller pour les nouvelles ressources. Laissez vide pour regarder le compte en entier.",
|
||||
"The type of resources to monitor for tag changes": "Le type de ressources à surveiller pour les changements de tags",
|
||||
"Optional: Watch only assets in this specific folder. Leave empty to watch all assets.": "Optionnel: Regardez uniquement les actifs dans ce dossier spécifique. Laissez vide pour regarder tous les actifs.",
|
||||
"Image": "Image",
|
||||
"Video": "Vidéo",
|
||||
"Raw": "Brute"
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"Cloudinary is a cloud-based image and video management platform that allows you to upload, store, manage, and deliver your media assets. It provides a range of features for image and video optimization, transformation, and delivery.": "Clodinaryは、メディア資産のアップロード、保存、管理、および配信を可能にするクラウドベースの画像およびビデオ管理プラットフォームです。 画像とビデオの最適化、変換、配信のためのさまざまな機能を提供します。",
|
||||
"API Key": "API キー",
|
||||
"API Secret": "APIシークレット",
|
||||
"Cloud Name": "クラウド名",
|
||||
"Your Cloudinary API Key. Found in Console Settings → API Keys page.": "Cloudinary API キーは、コンソールの設定 → API キーページで見つかります。",
|
||||
"Your Cloudinary API Secret. Found in Console Settings → API Keys page. Keep this secure and never share publicly.": "Clodinary API Secret. Consoleの設定 → APIキーのページで見つかります。これを安全に保ち、公開で共有することはありません。",
|
||||
"Your Cloudinary Cloud Name. Found in Console Settings → API Keys page or in your dashboard URL (e.g., \"demo\" from console.cloudinary.com/console/demo).": "クラウド名。コンソール設定→APIキーページまたはダッシュボードURL(例:console.clouddinary.com/console/demo)で見つかります。",
|
||||
"Enter your Cloudinary account credentials. Find these in your Cloudinary Console settings under the API keys page.": "Clodinary アカウントの認証情報を入力します。これらは、Clodinary Console 設定の API キーページから確認できます。",
|
||||
"Upload Resource": "リソースをアップロード",
|
||||
"Delete Resource": "リソースを削除",
|
||||
"Create Usage Report": "使用状況レポートを作成",
|
||||
"Find Resource by Public ID": "公開IDでリソースを検索",
|
||||
"Transform Resource": "資源変換",
|
||||
"Upload a new image, video, or file to Cloudinary.": "新しい画像、ビデオ、またはファイルをCloudinaryにアップロードします。",
|
||||
"Permanently delete images, videos, or files from Cloudinary.": "Cloudinaryから画像、ビデオ、またはファイルを完全に削除します。",
|
||||
"Generate a comprehensive report of account usage and quotas including storage, bandwidth, transformations, requests, and add-on usage.": "ストレージ、帯域幅、変換、リクエスト、アドオンの使用状況を含むアカウントの使用状況とクォータの包括的なレポートを生成します。",
|
||||
"Retrieve details of an asset using its unique public ID.": "一意のパブリック IDを使用して資産の詳細を取得します。",
|
||||
"Apply transformations (resize, crop, watermark, etc.) to an asset and generate a new URL.": "変換(リサイズ、トリミング、透かしなど)をアセットに適用し、新しいURLを生成します。",
|
||||
"File": "ファイル",
|
||||
"Public ID": "パブリック ID",
|
||||
"Folder": "Folder",
|
||||
"Tags": "タグ",
|
||||
"Overwrite": "上書き",
|
||||
"Use Original Filename": "元のファイル名を使用",
|
||||
"Deletion Mode": "削除モード",
|
||||
"Resource Type": "リソースタイプ",
|
||||
"Public IDs": "パブリックID",
|
||||
"Manual Public IDs": "手動公開ID",
|
||||
"Manual Tag": "手動タグ",
|
||||
"Prefix": "プレフィックス",
|
||||
"Delivery Type": "配送タイプ",
|
||||
"Keep Original": "元のままにする",
|
||||
"Invalidate CDN Cache": "CDN キャッシュを無効にする",
|
||||
"Report Date": "報告日",
|
||||
"Include Detailed Breakdown": "詳細な内訳を含める",
|
||||
"Manual Public ID": "手動公開ID",
|
||||
"Width": "Width",
|
||||
"Height": "高さ",
|
||||
"Crop Mode": "クロップモード",
|
||||
"Gravity": "Gravity",
|
||||
"Output Format": "出力形式",
|
||||
"Quality": "品質",
|
||||
"Border": "Border",
|
||||
"Border Radius": "境界半径",
|
||||
"Opacity": "透明度",
|
||||
"Rotation": "回転",
|
||||
"Raw Transformation": "未加工の変換",
|
||||
"Generate URL Only": "URLのみを生成",
|
||||
"The file to upload to Cloudinary.": "クラウディナリーにアップロードするファイル。",
|
||||
"The public ID for the uploaded resource. If not specified, a random ID will be generated.": "アップロードされたリソースの公開 ID が指定されていない場合、ランダムな ID が生成されます。",
|
||||
"Select an existing folder or type a new folder path (e.g., \"samples/animals\")": "既存のフォルダを選択するか、新しいフォルダパスを入力します (例: \"samples/animals\")",
|
||||
"Select existing tags or type new ones": "既存のタグを選択するか、新しいタグを入力してください",
|
||||
"Whether to overwrite existing assets with the same public ID.": "同じパブリック IDで既存のアセットを上書きするかどうか。",
|
||||
"Whether to use the original file name as the public ID.": "元のファイル名をパブリック IDとして使用するかどうかを指定します。",
|
||||
"Choose how to specify assets for deletion": "削除するアセットを指定する方法を選択してください",
|
||||
"Select the type of resource to upload to Cloudinary.": "Cloudinary にアップロードするリソースの種類を選択します。",
|
||||
"Select assets to delete by their public IDs": "パブリックIDで削除するアセットを選択します",
|
||||
"Or type comma-separated public IDs manually (up to 100). Example: image1,image2,folder/image3": "または、手動でカンマ区切りのパブリック ID を入力します(最大 100)。例: image1,image2,folder/image3",
|
||||
"Select existing tags or type new ones (comma-separated)": "既存のタグを選択するか、新しいタグを入力してください(カンマ区切り)",
|
||||
"Or type tag name manually to delete all assets with this tag (up to 1000 assets)": "または、手動でタグ名を入力して、このタグを持つすべてのアセットを削除します(最大1000アセット)",
|
||||
"Delete all assets whose public ID starts with this prefix (up to 1000 assets)": "パブリック ID がこのプレフィックスで始まるすべてのアセット(最大 1000 アセット)を削除します。",
|
||||
"The delivery type of assets to delete": "削除するアセットの配信タイプ",
|
||||
"Delete only derived assets, keep the original": "派生資産のみを削除し、元の資産を保持",
|
||||
"Whether to invalidate CDN cached copies. Takes a few minutes to propagate.": "CDNキャッシュされたコピーを無効にするかどうか。伝播には数分かかります。",
|
||||
"Date for the usage report. Must be within the last 3 months. Leave empty for current date.": "使用状況レポートの日付。過去3ヶ月以内である必要があります。現在の日付は空のままにしてください。",
|
||||
"Whether to include detailed breakdown of transformation types and add-on usage in the response.": "レスポンスに変換タイプとアドオンの使用状況の詳細な内訳を含めるかどうかを設定します。",
|
||||
"Select an asset to find by its public ID": "パブリックIDで見つけるアセットを選択してください",
|
||||
"Or enter the public ID manually if not found in dropdown (e.g., \"sample\", \"folder/image-name\")": "または、ドロップダウンに見つからない場合は、パブリックIDを手動で入力します(例: \"sample\", \"folder/image-name\")",
|
||||
"The delivery type of the asset": "アセットの配送タイプ",
|
||||
"Or enter public ID manually if not in dropdown": "またはドロップダウンにない場合は手動でパブリック ID を入力してください",
|
||||
"Target width in pixels": "ターゲットの幅(ピクセル単位)",
|
||||
"Target height in pixels": "目標の高さ(ピクセル単位)",
|
||||
"How to handle resizing when aspect ratios differ": "アスペクト比が異なる場合のサイズ変更の処理方法",
|
||||
"Which part to focus on when cropping": "トリミング時にフォーカスする部分",
|
||||
"Convert to this format": "この形式に変換",
|
||||
"Image quality/compression level": "画像の品質/圧縮レベル",
|
||||
"Add border (e.g., \"5px_solid_blue\", \"10px_solid_#ff0000\")": "境界を追加(例:\"5px_solid_blue\", \"10px_solid_#ff0000\")",
|
||||
"Round corners or make circular": "角を丸くするか、丸くする",
|
||||
"Transparency level (0-100, where 100 is opaque)": "透明度レベル (0-100、100 が不透明)",
|
||||
"Rotate image by degrees (0-360)": "画像を度数で回転 (0-360)",
|
||||
"Advanced: Raw transformation string (e.g., \"c_fill,w_300,h_200/e_sepia/r_20\"). This will be applied after the above basic transformations.": "Advanced: Raw変換文字列 (例: \"c_fill,w_300,h_200/e_sepia/r_20\") 。これは上記の基本変換の後に適用されます。",
|
||||
"If true, only return the transformation URL. If false, also make a request to generate the transformed asset.": "true の場合、変換された URL のみを返します。false の場合、変換されたアセットを生成するリクエストも作成します。",
|
||||
"By Public IDs": "パブリックID順",
|
||||
"By Tag": "タグ別",
|
||||
"By Prefix": "プレフィックス順",
|
||||
"Upload": "アップロード",
|
||||
"Private": "非公開",
|
||||
"Authenticated": "認証済み",
|
||||
"Scale (fit within bounds)": "拡大縮小 (境界内に収まる)",
|
||||
"Fill (crop to exact size)": "塗りつぶし (正確なサイズ)",
|
||||
"Fit (pad to exact size)": "フィット (正確なサイズにパッド)",
|
||||
"Crop (exact size, smart cropping)": "クロップ (正確なサイズ、スマートトリミング)",
|
||||
"Thumb (face-aware cropping)": "親指(顔認識クロップ)",
|
||||
"Limit (only scale down)": "制限 (スケールダウンのみ)",
|
||||
"Auto (smart cropping)": "自動 (スマートトリミング)",
|
||||
"Face detection": "顔検出",
|
||||
"Center": "中央揃え",
|
||||
"North (top)": "North (top)",
|
||||
"South (bottom)": "南(下)",
|
||||
"East (right)": "東(右)",
|
||||
"West (left)": "西(左)",
|
||||
"Northwest (top-left)": "北西部(左上)",
|
||||
"Northeast (top-right)": "北東部(右上)",
|
||||
"Southwest (bottom-left)": "南西部(左下)",
|
||||
"Southeast (bottom-right)": "南アフリカ (右下)",
|
||||
"Auto (best format for browser)": "自動(ブラウザに最適な形式)",
|
||||
"JPEG": "JPEG",
|
||||
"PNG": "PNG",
|
||||
"WebP": "WebP",
|
||||
"AVIF": "AVIF",
|
||||
"GIF": "GIF",
|
||||
"SVG": "SVG",
|
||||
"Auto (optimal for format)": "自動(フォーマットに最適)",
|
||||
"High (90)": "高い (90)",
|
||||
"Good (80)": "Good (80)",
|
||||
"Medium (70)": "中 (70)",
|
||||
"Low (50)": "低い (50)",
|
||||
"Slight rounding (10px)": "僅かな丸め (10px)",
|
||||
"Rounded corners (20px)": "角を丸くする(20ピクセル)",
|
||||
"Very rounded (50px)": "非常に丸い(50px)",
|
||||
"Circle/Oval (max)": "円/楕円形(最大)",
|
||||
"New Resource": "新しいリソース",
|
||||
"New Tag Added to Asset": "アセットに新しいタグが追加されました",
|
||||
"Triggers when a new image, video, or file is uploaded to a specific folder or account in Cloudinary.": "新しい画像、ビデオ、またはファイルがCloudinaryの特定のフォルダまたはアカウントにアップロードされたときにトリガーされます。",
|
||||
"Triggers when a tag is added to an asset in Cloudinary.": "Clodinaryでタグがアセットに追加されたときにトリガーします。",
|
||||
"Asset Folder": "アセットフォルダ",
|
||||
"The Cloudinary folder to watch for new resources. Leave empty to watch the entire account.": "新しいリソースを見るためのCloudinaryフォルダ。アカウント全体を見るには空のままにしてください。",
|
||||
"The type of resources to monitor for tag changes": "タグの変更を監視するリソースの種類",
|
||||
"Optional: Watch only assets in this specific folder. Leave empty to watch all assets.": "オプション: この特定のフォルダ内のアセットのみを見ることができます。すべてのアセットを見るには空白のままにしてください。",
|
||||
"Image": "画像",
|
||||
"Video": "ビデオ",
|
||||
"Raw": "Raw"
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"Cloudinary is a cloud-based image and video management platform that allows you to upload, store, manage, and deliver your media assets. It provides a range of features for image and video optimization, transformation, and delivery.": "Cloudinary is een cloud-gebaseerd platform voor afbeeldings- en videobeheer dat het mogelijk maakt om je mediabezit te uploaden, op te slaan, te beheren en te leveren. Het biedt een reeks functies voor image en video optimalisatie, transformatie en levering.",
|
||||
"API Key": "API Sleutel",
|
||||
"API Secret": "API Geheim",
|
||||
"Cloud Name": "Cloud naam",
|
||||
"Your Cloudinary API Key. Found in Console Settings → API Keys page.": "Uw Cloudinary API-sleutel. Gevonden in Console Instellingen → API Keys pagina.",
|
||||
"Your Cloudinary API Secret. Found in Console Settings → API Keys page. Keep this secure and never share publicly.": "Uw Cloudinary API Secret. Gevonden in Console Instellingen → API Keys pagina. Bewaar dit en deel dit nooit in het openbaar.",
|
||||
"Your Cloudinary Cloud Name. Found in Console Settings → API Keys page or in your dashboard URL (e.g., \"demo\" from console.cloudinary.com/console/demo).": "Je Cloudinary Cloud Name. Gevonden in Console Instellingen → API Keys pagina of in je dashboard URL (bijv. \"demo\" van console.cloudinary.com/console/demo).",
|
||||
"Enter your Cloudinary account credentials. Find these in your Cloudinary Console settings under the API keys page.": "Vul uw Cloudinary account gegevens in. U vindt deze in uw Cloudinary Console instellingen onder de API keypagina.",
|
||||
"Upload Resource": "Document uploaden",
|
||||
"Delete Resource": "Document verwijderen",
|
||||
"Create Usage Report": "Maak gebruik rapport",
|
||||
"Find Resource by Public ID": "Document zoeken op openbare ID",
|
||||
"Transform Resource": "Transformeer Bron",
|
||||
"Upload a new image, video, or file to Cloudinary.": "Upload een nieuwe afbeelding, video of bestand naar de Cloudinary.",
|
||||
"Permanently delete images, videos, or files from Cloudinary.": "Verwijder permanent afbeeldingen, video's of bestanden uit de Cloudinary.",
|
||||
"Generate a comprehensive report of account usage and quotas including storage, bandwidth, transformations, requests, and add-on usage.": "Genereer een uitgebreid rapport van accountgebruik en -quota, waaronder opslag, bandbreedte, transformaties, verzoeken en add-ongebruik.",
|
||||
"Retrieve details of an asset using its unique public ID.": "Haal details op van een asset met zijn unieke publieke ID.",
|
||||
"Apply transformations (resize, crop, watermark, etc.) to an asset and generate a new URL.": "Pas transformaties toe (grootte, bijsnijd, watermerk, etc.) op een asset en genereer een nieuwe URL.",
|
||||
"File": "Bestand",
|
||||
"Public ID": "Openbare ID",
|
||||
"Folder": "Map",
|
||||
"Tags": "Labels",
|
||||
"Overwrite": "Overschrijf",
|
||||
"Use Original Filename": "Originele bestandsnaam gebruiken",
|
||||
"Deletion Mode": "Verwijder Modus",
|
||||
"Resource Type": "Type bron",
|
||||
"Public IDs": "Openbare ID's",
|
||||
"Manual Public IDs": "Handmatige openbare ID's",
|
||||
"Manual Tag": "Handmatige tag",
|
||||
"Prefix": "Voorvoegsel",
|
||||
"Delivery Type": "Levering Type",
|
||||
"Keep Original": "Origineel behouden",
|
||||
"Invalidate CDN Cache": "CDN-cache afkeuren",
|
||||
"Report Date": "Rapport datum",
|
||||
"Include Detailed Breakdown": "Inclusief gedetailleerde uitsplitsing",
|
||||
"Manual Public ID": "Handmatige openbare ID",
|
||||
"Width": "Width",
|
||||
"Height": "Højde",
|
||||
"Crop Mode": "Modus Bijsnijden",
|
||||
"Gravity": "Zwaartekracht",
|
||||
"Output Format": "Uitvoer formaat",
|
||||
"Quality": "Kwaliteit",
|
||||
"Border": "Border",
|
||||
"Border Radius": "Rand Straal",
|
||||
"Opacity": "Transparantie",
|
||||
"Rotation": "Rotatie",
|
||||
"Raw Transformation": "Rauwe Transformatie",
|
||||
"Generate URL Only": "Alleen URL genereren",
|
||||
"The file to upload to Cloudinary.": "Het te uploaden bestand naar de Cloudinary.",
|
||||
"The public ID for the uploaded resource. If not specified, a random ID will be generated.": "De publieke ID voor het geüploade document. Indien niet opgegeven, zal een willekeurige ID worden gegenereerd.",
|
||||
"Select an existing folder or type a new folder path (e.g., \"samples/animals\")": "Selecteer een bestaande map of typ een nieuw mappad (bijv. \"samples/dieren\")",
|
||||
"Select existing tags or type new ones": "Selecteer bestaande tags of typ nieuwe",
|
||||
"Whether to overwrite existing assets with the same public ID.": "Of bestaande assets met hetzelfde publieke ID moeten worden overschreven.",
|
||||
"Whether to use the original file name as the public ID.": "Of de originele bestandsnaam als publiek ID gebruikt moet worden.",
|
||||
"Choose how to specify assets for deletion": "Kies hoe u assets moet specificeren voor verwijdering",
|
||||
"Select the type of resource to upload to Cloudinary.": "Selecteer het type bron om te uploaden naar de Cloudinary.",
|
||||
"Select assets to delete by their public IDs": "Selecteer assets om te verwijderen door hun openbare ID's",
|
||||
"Or type comma-separated public IDs manually (up to 100). Example: image1,image2,folder/image3": "Of typ komma-gescheiden publieke ID's handmatig (tot 100). Voorbeeld: image1,image2,map/image3",
|
||||
"Select existing tags or type new ones (comma-separated)": "Selecteer bestaande tags of typ nieuwe tags (komma-gescheiden)",
|
||||
"Or type tag name manually to delete all assets with this tag (up to 1000 assets)": "Of typ tagnaam handmatig om alle assets met dit label te verwijderen (tot 1000 assets)",
|
||||
"Delete all assets whose public ID starts with this prefix (up to 1000 assets)": "Verwijder alle assets waarvan de publieke ID begint met dit voorvoegsel (tot 1000 assets)",
|
||||
"The delivery type of assets to delete": "Het leveringstype van assets om te verwijderen",
|
||||
"Delete only derived assets, keep the original": "Verwijder alleen afgeleide assets en bewaar het origineel",
|
||||
"Whether to invalidate CDN cached copies. Takes a few minutes to propagate.": "Invalideer CDN gecachte kopieën. Neemt een paar minuten in om te propageren.",
|
||||
"Date for the usage report. Must be within the last 3 months. Leave empty for current date.": "Datum voor het gebruiksrapport. Moet binnen de laatste 3 maanden zijn. Laat leeg voor de huidige datum.",
|
||||
"Whether to include detailed breakdown of transformation types and add-on usage in the response.": "Of u gedetailleerde uitsplitsing van transformatietypen en het gebruik van add-on in het antwoord wilt opnemen.",
|
||||
"Select an asset to find by its public ID": "Selecteer een product om te vinden op zijn publieke ID",
|
||||
"Or enter the public ID manually if not found in dropdown (e.g., \"sample\", \"folder/image-name\")": "Of vul de publieke ID handmatig in indien niet in dropdown gevonden (bijv. \"sample\", \"folder/image-name\")",
|
||||
"The delivery type of the asset": "Het aflever type van de bezitting",
|
||||
"Or enter public ID manually if not in dropdown": "Of voer publieke ID handmatig in indien niet in dropdown",
|
||||
"Target width in pixels": "Doelbreedte in pixels",
|
||||
"Target height in pixels": "Doelhoogte in pixels",
|
||||
"How to handle resizing when aspect ratios differ": "Hoe om te gaan met formaat als hoogte-breedteverhoudingen verschillen",
|
||||
"Which part to focus on when cropping": "Welk deel moet zich concentreren op bijsnijden",
|
||||
"Convert to this format": "Converteer naar dit formaat",
|
||||
"Image quality/compression level": "Kwaliteit/compressie niveau van afbeelding",
|
||||
"Add border (e.g., \"5px_solid_blue\", \"10px_solid_#ff0000\")": "Voeg rand toe (bijv. \"5px_solid_blue\", \"10px_solid_#ff0000\")",
|
||||
"Round corners or make circular": "Ronde hoeken of maak circulaire",
|
||||
"Transparency level (0-100, where 100 is opaque)": "Transparantieniveau (0-100, waar 100 ondoorzichtig is)",
|
||||
"Rotate image by degrees (0-360)": "Draai afbeelding per graden (0-360)",
|
||||
"Advanced: Raw transformation string (e.g., \"c_fill,w_300,h_200/e_sepia/r_20\"). This will be applied after the above basic transformations.": "Geavanceerd: Raw transformatie string (bijv. \"c_fill,w_300,h_200/e_sepia/r_20\"). Dit zal worden toegepast na de bovenstaande basis transformaties.",
|
||||
"If true, only return the transformation URL. If false, also make a request to generate the transformed asset.": "Indien waar, alleen de transformatie-URL retourneren. Indien onwaar, doe dan ook een verzoek voor het genereren van het getransformeerde asset.",
|
||||
"By Public IDs": "Via openbare IDs",
|
||||
"By Tag": "Op label",
|
||||
"By Prefix": "Op voorvoegsel",
|
||||
"Upload": "Uploaden",
|
||||
"Private": "Privé",
|
||||
"Authenticated": "Geverifieerd",
|
||||
"Scale (fit within bounds)": "Schaal (passend binnen grenzen)",
|
||||
"Fill (crop to exact size)": "Vul (bijsnijden naar exacte grootte)",
|
||||
"Fit (pad to exact size)": "Aanpassen (pad naar exacte grootte)",
|
||||
"Crop (exact size, smart cropping)": "Bijsnijden (exact formaat, slim bijsnijden)",
|
||||
"Thumb (face-aware cropping)": "Thumb (bewust bijsnijden)",
|
||||
"Limit (only scale down)": "Limiet (alleen schaal omlaag)",
|
||||
"Auto (smart cropping)": "Automatisch (slim bijsnijden)",
|
||||
"Face detection": "Gezichtsdetectie",
|
||||
"Center": "Gecentreerd",
|
||||
"North (top)": "Noord (boven)",
|
||||
"South (bottom)": "Zuid (onder)",
|
||||
"East (right)": "Oost (rechts)",
|
||||
"West (left)": "West (links)",
|
||||
"Northwest (top-left)": "Noord-west (linksboven)",
|
||||
"Northeast (top-right)": "Noord-oost (rechtsboven)",
|
||||
"Southwest (bottom-left)": "Zuidwest (linksonder)",
|
||||
"Southeast (bottom-right)": "Zuid-Oost (rechtsonder)",
|
||||
"Auto (best format for browser)": "Auto (beste indeling voor browser)",
|
||||
"JPEG": "JPEG",
|
||||
"PNG": "PNG",
|
||||
"WebP": "WebP",
|
||||
"AVIF": "AVIF",
|
||||
"GIF": "GIF",
|
||||
"SVG": "SVG",
|
||||
"Auto (optimal for format)": "Auto (optimaal voor formaat)",
|
||||
"High (90)": "Hoog (90)",
|
||||
"Good (80)": "Goed (80)",
|
||||
"Medium (70)": "Gemiddeld (70)",
|
||||
"Low (50)": "Laag (50)",
|
||||
"Slight rounding (10px)": "Lichte afronding (10px)",
|
||||
"Rounded corners (20px)": "Afgeronde hoeken (20px)",
|
||||
"Very rounded (50px)": "Zeer afgerond (50px)",
|
||||
"Circle/Oval (max)": "Cirkel/Ovaal (max)",
|
||||
"New Resource": "Nieuw document",
|
||||
"New Tag Added to Asset": "Nieuwe tag toegevoegd aan Asset",
|
||||
"Triggers when a new image, video, or file is uploaded to a specific folder or account in Cloudinary.": "Triggert wanneer een nieuwe afbeelding, video of bestand wordt geüpload naar een specifieke map of account in de Cloudinary.",
|
||||
"Triggers when a tag is added to an asset in Cloudinary.": "Triggert wanneer een tag wordt toegevoegd aan een asset in de Cloudinary.",
|
||||
"Asset Folder": "Asset map",
|
||||
"The Cloudinary folder to watch for new resources. Leave empty to watch the entire account.": "De Cloudinary map om naar nieuwe bronnen te kijken. Laat leeg om het hele account te bekijken.",
|
||||
"The type of resources to monitor for tag changes": "Het type resources om te monitoren voor tagwijzigingen",
|
||||
"Optional: Watch only assets in this specific folder. Leave empty to watch all assets.": "Optioneel: Bekijk alleen assets in deze specifieke map. Laat leeg om alle assets te bekijken.",
|
||||
"Image": "Afbeelding",
|
||||
"Video": "Video",
|
||||
"Raw": "Onbewerkte"
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"Cloudinary is a cloud-based image and video management platform that allows you to upload, store, manage, and deliver your media assets. It provides a range of features for image and video optimization, transformation, and delivery.": "Cloudinary é uma plataforma de gerenciamento de imagens e vídeos baseada em nuvem que permite que você carregue, armazene, gerencie e entregue seus ativos de mídia. Ele fornece uma variedade de recursos para otimização de imagens e vídeos, transformação e entrega.",
|
||||
"API Key": "Chave de API",
|
||||
"API Secret": "API Segredo",
|
||||
"Cloud Name": "Nome da Nuvem",
|
||||
"Your Cloudinary API Key. Found in Console Settings → API Keys page.": "Sua chave de API Cloudinário. Encontrada nas Configurações de Console → página de Chaves de API.",
|
||||
"Your Cloudinary API Secret. Found in Console Settings → API Keys page. Keep this secure and never share publicly.": "Seu Segredo de API Cloudinário. Encontrado nas Configurações de Console → Página de Chaves de API. Mantenha isto seguro e nunca compartilhe publicamente.",
|
||||
"Your Cloudinary Cloud Name. Found in Console Settings → API Keys page or in your dashboard URL (e.g., \"demo\" from console.cloudinary.com/console/demo).": "Seu nome na Nuvem Cloudinária. Encontrado nas Configurações de Console → Página de Chaves API ou na URL do seu painel (por exemplo, \"demo\" de console.cloudinary.com/console/demo).",
|
||||
"Enter your Cloudinary account credentials. Find these in your Cloudinary Console settings under the API keys page.": "Insira as credenciais da sua conta nuvem. Encontre elas nas configurações do Console Cloudinário na página de chaves de API.",
|
||||
"Upload Resource": "Enviar Recurso",
|
||||
"Delete Resource": "Excluir Recurso",
|
||||
"Create Usage Report": "Criar Relatório de Uso",
|
||||
"Find Resource by Public ID": "Encontrar Recurso por ID Público",
|
||||
"Transform Resource": "Transformar Recurso",
|
||||
"Upload a new image, video, or file to Cloudinary.": "Envie uma nova imagem, vídeo ou arquivo para a Cloudinary.",
|
||||
"Permanently delete images, videos, or files from Cloudinary.": "Exclua permanentemente imagens, vídeos ou arquivos da Cloudinary.",
|
||||
"Generate a comprehensive report of account usage and quotas including storage, bandwidth, transformations, requests, and add-on usage.": "Gere um relatório abrangente sobre o uso e as quotas da conta incluindo armazenamento, largura de banda, transformações, solicitações e uso de complementos.",
|
||||
"Retrieve details of an asset using its unique public ID.": "Recuperar detalhes de um ativo usando sua ID pública exclusiva.",
|
||||
"Apply transformations (resize, crop, watermark, etc.) to an asset and generate a new URL.": "Aplicar transformações (redimensionamento, colheita, marca d'água, etc.) a um ativo e gerar uma nova URL.",
|
||||
"File": "Arquivo",
|
||||
"Public ID": "ID Público",
|
||||
"Folder": "Pasta",
|
||||
"Tags": "Etiquetas",
|
||||
"Overwrite": "Substituir",
|
||||
"Use Original Filename": "Usar Nome do Arquivo Original",
|
||||
"Deletion Mode": "Modo de exclusão",
|
||||
"Resource Type": "Tipo de Recurso",
|
||||
"Public IDs": "IDs Públicos",
|
||||
"Manual Public IDs": "IDs Públicos Manuais",
|
||||
"Manual Tag": "Tag manual",
|
||||
"Prefix": "Prefixo",
|
||||
"Delivery Type": "Tipo de entrega",
|
||||
"Keep Original": "Manter original",
|
||||
"Invalidate CDN Cache": "Invalidar Cache CDN",
|
||||
"Report Date": "Data do relatório",
|
||||
"Include Detailed Breakdown": "Incluir Breakdown Detalhado",
|
||||
"Manual Public ID": "ID Público Manual",
|
||||
"Width": "Width",
|
||||
"Height": "Altura",
|
||||
"Crop Mode": "Modo de Corte",
|
||||
"Gravity": "Gravidade",
|
||||
"Output Format": "Formato de saída",
|
||||
"Quality": "Qualidade",
|
||||
"Border": "Border",
|
||||
"Border Radius": "Raio da borda",
|
||||
"Opacity": "Transparência",
|
||||
"Rotation": "Rotação",
|
||||
"Raw Transformation": "Transformação bruta",
|
||||
"Generate URL Only": "Gerar URL apenas",
|
||||
"The file to upload to Cloudinary.": "O arquivo para enviar para a Cloudinary.",
|
||||
"The public ID for the uploaded resource. If not specified, a random ID will be generated.": "O ID público para o recurso carregado. Se não for especificado, será gerada uma ID aleatória.",
|
||||
"Select an existing folder or type a new folder path (e.g., \"samples/animals\")": "Selecione uma pasta existente ou digite um novo caminho para a pasta (por exemplo, \"samples/animais\")",
|
||||
"Select existing tags or type new ones": "Selecione tags existentes ou digite novas",
|
||||
"Whether to overwrite existing assets with the same public ID.": "Se deseja sobrescrever ativos existentes com o mesmo ID público.",
|
||||
"Whether to use the original file name as the public ID.": "Se deseja usar o nome do arquivo original como a ID pública.",
|
||||
"Choose how to specify assets for deletion": "Escolha como especificar ativos para exclusão",
|
||||
"Select the type of resource to upload to Cloudinary.": "Selecione o tipo de recurso para fazer upload para a nuvem.",
|
||||
"Select assets to delete by their public IDs": "Selecione os arquivos para excluir pelos seus IDs públicos",
|
||||
"Or type comma-separated public IDs manually (up to 100). Example: image1,image2,folder/image3": "Ou digite IDs públicos separados por vírgulas manualmente (até 100). Exemplo: image1,image2,folder/image3",
|
||||
"Select existing tags or type new ones (comma-separated)": "Selecione os marcadores existentes ou digite os novos (separados por vírgula)",
|
||||
"Or type tag name manually to delete all assets with this tag (up to 1000 assets)": "Ou digite nome da tag manualmente para excluir todos os arquivos com este marcador (até 1000 mídias)",
|
||||
"Delete all assets whose public ID starts with this prefix (up to 1000 assets)": "Excluir todos os ativos cujo ID público comece com este prefixo (até 1000 ativos)",
|
||||
"The delivery type of assets to delete": "O tipo de entrega de arquivos para excluir",
|
||||
"Delete only derived assets, keep the original": "Excluir apenas arquivos derivados, manter o original",
|
||||
"Whether to invalidate CDN cached copies. Takes a few minutes to propagate.": "Se invalidar cópias em cache da CDN. Leva alguns minutos para propagar.",
|
||||
"Date for the usage report. Must be within the last 3 months. Leave empty for current date.": "Data para o relatório de uso. Deve estar dentro dos últimos 3 meses. Deixe em branco para a data atual.",
|
||||
"Whether to include detailed breakdown of transformation types and add-on usage in the response.": "Se você deve incluir detalhadamente o detalhado dos tipos de transformação e o uso do complemento na resposta.",
|
||||
"Select an asset to find by its public ID": "Selecione um arquivo para encontrar por seu ID público",
|
||||
"Or enter the public ID manually if not found in dropdown (e.g., \"sample\", \"folder/image-name\")": "Ou insira o ID público manualmente se não for encontrado na lista suspensa (por exemplo, \"amostra\", \"pasta/imagem nome\")",
|
||||
"The delivery type of the asset": "O tipo de entrega do ativo",
|
||||
"Or enter public ID manually if not in dropdown": "Ou insira o ID público manualmente se não estiver no menu suspenso",
|
||||
"Target width in pixels": "Largura alvo em pixels",
|
||||
"Target height in pixels": "Altura alvo em pixels",
|
||||
"How to handle resizing when aspect ratios differ": "Como lidar com redimensionamento quando os rácios de aspecto são diferentes",
|
||||
"Which part to focus on when cropping": "Qual parte o foco ao cortar",
|
||||
"Convert to this format": "Converter para este formato",
|
||||
"Image quality/compression level": "Qualidade da imagem/nível de compressão",
|
||||
"Add border (e.g., \"5px_solid_blue\", \"10px_solid_#ff0000\")": "Adicionar borda (p. ex., \"5px_solid_blue\", \"10px_solid_#ff0000\")",
|
||||
"Round corners or make circular": "Arredondar ou circular",
|
||||
"Transparency level (0-100, where 100 is opaque)": "Nível de transparência (0-100, onde 100 é opacos)",
|
||||
"Rotate image by degrees (0-360)": "Girar a imagem por graus (0-360)",
|
||||
"Advanced: Raw transformation string (e.g., \"c_fill,w_300,h_200/e_sepia/r_20\"). This will be applied after the above basic transformations.": "Avançado: String de transformação bruta (por exemplo, \"c_fill,w_300,h_200/e_sepia/r_20\"). Isto será aplicado após as transformações básicas acima.",
|
||||
"If true, only return the transformation URL. If false, also make a request to generate the transformed asset.": "Se verdadeiro, retorna somente a URL de transformação. Se falso, também faça uma requisição para gerar o ativo transformado.",
|
||||
"By Public IDs": "Por IDs públicos",
|
||||
"By Tag": "Por Tag",
|
||||
"By Prefix": "Por prefixo",
|
||||
"Upload": "Transferir",
|
||||
"Private": "Privado",
|
||||
"Authenticated": "Autenticado",
|
||||
"Scale (fit within bounds)": "Escala (cabe dentro dos limites)",
|
||||
"Fill (crop to exact size)": "Preencher (cortar para tamanho exato)",
|
||||
"Fit (pad to exact size)": "Ajustar (teclado para tamanho exato)",
|
||||
"Crop (exact size, smart cropping)": "Cortar (tamanho exato, corte inteligente)",
|
||||
"Thumb (face-aware cropping)": "Miniatura (corte de cara)",
|
||||
"Limit (only scale down)": "Limite (escala apenas)",
|
||||
"Auto (smart cropping)": "Auto (corte automático)",
|
||||
"Face detection": "Detecção de rosto",
|
||||
"Center": "Centralizar",
|
||||
"North (top)": "Norte (superior)",
|
||||
"South (bottom)": "Sul (inferior)",
|
||||
"East (right)": "Leste (direita)",
|
||||
"West (left)": "Oeste (esquerda)",
|
||||
"Northwest (top-left)": "Noroeste (topo-esquerdo)",
|
||||
"Northeast (top-right)": "Nordeste (topo-direita)",
|
||||
"Southwest (bottom-left)": "Sudoeste (inferior-esquerdo)",
|
||||
"Southeast (bottom-right)": "Sudeste (parte inferior-direita)",
|
||||
"Auto (best format for browser)": "Auto (melhor formato para navegador)",
|
||||
"JPEG": "JPEG",
|
||||
"PNG": "PNG",
|
||||
"WebP": "WebP",
|
||||
"AVIF": "AJUDA",
|
||||
"GIF": "GIF",
|
||||
"SVG": "Svg",
|
||||
"Auto (optimal for format)": "Automático (ideal para o formato)",
|
||||
"High (90)": "Alta (90)",
|
||||
"Good (80)": "Bom (80)",
|
||||
"Medium (70)": "Médio (70)",
|
||||
"Low (50)": "Baixo (50)",
|
||||
"Slight rounding (10px)": "Arredondamento leve (10px)",
|
||||
"Rounded corners (20px)": "Cantos arredondados (20px)",
|
||||
"Very rounded (50px)": "Muito arredondado (50px)",
|
||||
"Circle/Oval (max)": "Círculo/Oval (máx)",
|
||||
"New Resource": "Novo Recurso",
|
||||
"New Tag Added to Asset": "Nova marcação adicionada ao ativo",
|
||||
"Triggers when a new image, video, or file is uploaded to a specific folder or account in Cloudinary.": "Aciona quando uma nova imagem, vídeo ou arquivo é carregado para uma pasta específica ou conta na nuvem.",
|
||||
"Triggers when a tag is added to an asset in Cloudinary.": "Aciona quando uma tag é adicionada a um ativo na nuvem.",
|
||||
"Asset Folder": "Pasta de Ativos",
|
||||
"The Cloudinary folder to watch for new resources. Leave empty to watch the entire account.": "A pasta do Cloudinary para assistir a novos recursos. Deixe em branco para assistir toda a conta.",
|
||||
"The type of resources to monitor for tag changes": "O tipo de recursos para monitorar as alterações das tags",
|
||||
"Optional: Watch only assets in this specific folder. Leave empty to watch all assets.": "Opcional: Veja apenas arquivos nesta pasta específica. Deixe em branco para ver todos os ativos.",
|
||||
"Image": "Imagem:",
|
||||
"Video": "Vídeo",
|
||||
"Raw": "RAW"
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
{
|
||||
"Cloudinary": "Облачный",
|
||||
"Cloudinary is a cloud-based image and video management platform that allows you to upload, store, manage, and deliver your media assets. It provides a range of features for image and video optimization, transformation, and delivery.": "Cloudinary это облачная платформа для управления изображениями и видео, позволяющая загружать, хранить, управлять и доставлять ваши медиаресурсы. Он предоставляет ряд возможностей для оптимизации изображения и видео, преобразования и доставки.",
|
||||
"API Key": "Ключ API",
|
||||
"API Secret": "Секрет API",
|
||||
"Cloud Name": "Имя Облака",
|
||||
"Your Cloudinary API Key. Found in Console Settings → API Keys page.": "Ваш Cloudinary API ключ. Найден в Настройках консоли → странице API ключей.",
|
||||
"Your Cloudinary API Secret. Found in Console Settings → API Keys page. Keep this secure and never share publicly.": "Ваш Cloudinary API Secret. Найден в Настройках консоли → странице API Keys на странице. Оставьте это безопасным и никогда не поделитесь публично.",
|
||||
"Your Cloudinary Cloud Name. Found in Console Settings → API Keys page or in your dashboard URL (e.g., \"demo\" from console.cloudinary.com/console/demo).": "Ваше Облачное имя. Найдено в Настройках консоли → Ключи API или в URL панели инструментов (например, \"demo\" от console.cloudinary.com/console/demo).",
|
||||
"Enter your Cloudinary account credentials. Find these in your Cloudinary Console settings under the API keys page.": "Введите данные учетной записи в Облаке. Найдите их в настройках Cloudinary Console, на странице ключей API.",
|
||||
"Upload Resource": "Загрузить ресурс",
|
||||
"Delete Resource": "Удалить ресурс",
|
||||
"Create Usage Report": "Создать отчет об использовании",
|
||||
"Find Resource by Public ID": "Поиск ресурсов по публичному ID",
|
||||
"Transform Resource": "Преобразовать ресурс",
|
||||
"Upload a new image, video, or file to Cloudinary.": "Загрузите новое изображение, видео или файл в Облако.",
|
||||
"Permanently delete images, videos, or files from Cloudinary.": "Окончательно удалять изображения, видео или файлы из облака.",
|
||||
"Generate a comprehensive report of account usage and quotas including storage, bandwidth, transformations, requests, and add-on usage.": "Генерировать всеобъемлющий отчет об использовании и квотах аккаунта, включая хранение, пропускную способность, преобразования, запросы и использование дополнений.",
|
||||
"Retrieve details of an asset using its unique public ID.": "Получить детали актива, используя свой уникальный публичный ID.",
|
||||
"Apply transformations (resize, crop, watermark, etc.) to an asset and generate a new URL.": "Применить преобразования (изменять, обрезать, водяной знак и т. д.) к активу и создать новый URL.",
|
||||
"File": "Файл",
|
||||
"Public ID": "Публичный ID",
|
||||
"Folder": "Папка",
|
||||
"Tags": "Теги",
|
||||
"Overwrite": "Перезаписать",
|
||||
"Use Original Filename": "Использовать исходное имя файла",
|
||||
"Deletion Mode": "Режим удаления",
|
||||
"Resource Type": "Тип ресурса",
|
||||
"Public IDs": "Публичные ID",
|
||||
"Manual Public IDs": "Публичные ID вручную",
|
||||
"Manual Tag": "Ручной тег",
|
||||
"Prefix": "Префикс",
|
||||
"Delivery Type": "Тип доставки",
|
||||
"Keep Original": "Оставить оригинал",
|
||||
"Invalidate CDN Cache": "Отмена кэша CDN",
|
||||
"Report Date": "Дата отчета",
|
||||
"Include Detailed Breakdown": "Включить подробный разбиение",
|
||||
"Manual Public ID": "Ручной ID публичного",
|
||||
"Width": "Width",
|
||||
"Height": "Высота",
|
||||
"Crop Mode": "Обрезать",
|
||||
"Gravity": "Гравитация",
|
||||
"Output Format": "Формат вывода",
|
||||
"Quality": "Качество",
|
||||
"Border": "Border",
|
||||
"Border Radius": "Радиус границы",
|
||||
"Opacity": "Прозрачность",
|
||||
"Rotation": "Поворот",
|
||||
"Raw Transformation": "Сырое преобразование",
|
||||
"Generate URL Only": "Генерировать только URL",
|
||||
"The file to upload to Cloudinary.": "Файл для загрузки в Облако.",
|
||||
"The public ID for the uploaded resource. If not specified, a random ID will be generated.": "Публичный ID для загруженного ресурса. Если не указано, будет сгенерирован случайный ID.",
|
||||
"Select an existing folder or type a new folder path (e.g., \"samples/animals\")": "Выберите существующую папку или введите новый путь к папке (например, «samples/animals»)",
|
||||
"Select existing tags or type new ones": "Выберите существующие теги или введите новые.",
|
||||
"Whether to overwrite existing assets with the same public ID.": "Должен ли перезаписывать существующие активы с тем же публичным ID.",
|
||||
"Whether to use the original file name as the public ID.": "Использовать исходное имя файла в качестве публичного ID.",
|
||||
"Choose how to specify assets for deletion": "Выберите, как указывать активы для удаления",
|
||||
"Select the type of resource to upload to Cloudinary.": "Выберите тип ресурса для загрузки в Облако.",
|
||||
"Select assets to delete by their public IDs": "Выберите медиафайлы для удаления по их публичным идентификаторам",
|
||||
"Or type comma-separated public IDs manually (up to 100). Example: image1,image2,folder/image3": "Или введите идентификаторы через запятую вручную (до 100). Пример: image1,image2,папка/image3",
|
||||
"Select existing tags or type new ones (comma-separated)": "Выберите существующие метки или введите новые (через запятую)",
|
||||
"Or type tag name manually to delete all assets with this tag (up to 1000 assets)": "Или введите имя тега вручную, чтобы удалить все медиафайлы с этим тегом (до 1000 медиафайлов)",
|
||||
"Delete all assets whose public ID starts with this prefix (up to 1000 assets)": "Удалить все активы, публичный ID которых начинается с этого префикса (до 1000 активов)",
|
||||
"The delivery type of assets to delete": "Тип доставки активов для удаления",
|
||||
"Delete only derived assets, keep the original": "Удалить только производные активы, сохранить оригинал",
|
||||
"Whether to invalidate CDN cached copies. Takes a few minutes to propagate.": "Следует ли аннулировать кэшированные копии CDN. Требуется несколько минут для распространения.",
|
||||
"Date for the usage report. Must be within the last 3 months. Leave empty for current date.": "Дата отчета об использовании должна быть в течение последних 3 месяцев. Оставьте пустым для текущей даты.",
|
||||
"Whether to include detailed breakdown of transformation types and add-on usage in the response.": "Включать ли в ответ подробную разбивку типов преобразований и использования дополнений.",
|
||||
"Select an asset to find by its public ID": "Выберите актив для поиска по его публичному ID",
|
||||
"Or enter the public ID manually if not found in dropdown (e.g., \"sample\", \"folder/image-name\")": "Или введите публичный ID вручную, если не найден в раскрывающемся списке (например, \"sample\", \"folder/image-name\")",
|
||||
"The delivery type of the asset": "Тип доставки актива",
|
||||
"Or enter public ID manually if not in dropdown": "Или введите публичный ID вручную, если не в раскрывающемся списке",
|
||||
"Target width in pixels": "Целевая ширина в пикселях",
|
||||
"Target height in pixels": "Целевая высота в пикселях",
|
||||
"How to handle resizing when aspect ratios differ": "Как обрабатывать размеры при разных пропорциях",
|
||||
"Which part to focus on when cropping": "Какая часть фокусироваться на процессе обрезки",
|
||||
"Convert to this format": "Преобразовать в этот формат",
|
||||
"Image quality/compression level": "Качество изображения/уровень сжатия",
|
||||
"Add border (e.g., \"5px_solid_blue\", \"10px_solid_#ff0000\")": "Добавить границу (например, \"5px_solid_blue\", \"10px_solid_#ff0000\")",
|
||||
"Round corners or make circular": "Округлить углы или сделать круговой",
|
||||
"Transparency level (0-100, where 100 is opaque)": "Уровень прозрачности (0-100, где 100 непрозрачный)",
|
||||
"Rotate image by degrees (0-360)": "Повернуть изображение на градусах (0-360)",
|
||||
"Advanced: Raw transformation string (e.g., \"c_fill,w_300,h_200/e_sepia/r_20\"). This will be applied after the above basic transformations.": "Дополнительно: Строка первичного преобразования (например, \"c_fill,w_300,h_200/e_sepia/r_20\").",
|
||||
"If true, only return the transformation URL. If false, also make a request to generate the transformed asset.": "Если установлено значение true, возвращает только URL преобразования. Если false, также делает запрос для генерации преобразованного актива.",
|
||||
"By Public IDs": "Публичные ID",
|
||||
"By Tag": "По тегу",
|
||||
"By Prefix": "По префиксу",
|
||||
"Upload": "Выгрузить",
|
||||
"Private": "Приватный",
|
||||
"Authenticated": "Аутентификация",
|
||||
"Scale (fit within bounds)": "Масштаб (поместите в рамки)",
|
||||
"Fill (crop to exact size)": "Заполнить (обрезать до точного размера)",
|
||||
"Fit (pad to exact size)": "По размеру (документ до точного размера)",
|
||||
"Crop (exact size, smart cropping)": "Обрезать (точный размер, умная обрезка)",
|
||||
"Thumb (face-aware cropping)": "Миниатюра (обрезка лица с учетом лица)",
|
||||
"Limit (only scale down)": "Лимит (только понижение масштаба)",
|
||||
"Auto (smart cropping)": "Авто (умная обрезка)",
|
||||
"Face detection": "Распознавание лиц",
|
||||
"Center": "По центру",
|
||||
"North (top)": "Север (сверху)",
|
||||
"South (bottom)": "Южный (внизу)",
|
||||
"East (right)": "Восток (справа)",
|
||||
"West (left)": "Запад (слева)",
|
||||
"Northwest (top-left)": "Северо-запад (сверху слева)",
|
||||
"Northeast (top-right)": "Северо-восток (справа сверху)",
|
||||
"Southwest (bottom-left)": "Юго-запад (нижний левый)",
|
||||
"Southeast (bottom-right)": "Юго-восток (снизу справа)",
|
||||
"Auto (best format for browser)": "Авто (лучший формат для браузера)",
|
||||
"JPEG": "JPEG",
|
||||
"PNG": "PNG",
|
||||
"WebP": "WebP",
|
||||
"AVIF": "AVIF",
|
||||
"GIF": "GIF",
|
||||
"SVG": "SVG",
|
||||
"Auto (optimal for format)": "Авто (оптимальное для формата)",
|
||||
"High (90)": "Высокий (90)",
|
||||
"Good (80)": "Хорошее (80)",
|
||||
"Medium (70)": "Средний (70)",
|
||||
"Low (50)": "Низкий (50)",
|
||||
"Slight rounding (10px)": "Небольшое округление (10px)",
|
||||
"Rounded corners (20px)": "Скругленные углы (20px)",
|
||||
"Very rounded (50px)": "Очень округлённый (50px)",
|
||||
"Circle/Oval (max)": "Круг/Овал (макс)",
|
||||
"New Resource": "Новый ресурс",
|
||||
"New Tag Added to Asset": "Новый тег добавлен в актив",
|
||||
"Triggers when a new image, video, or file is uploaded to a specific folder or account in Cloudinary.": "Включает при загрузке нового изображения, видео или файла в определенную папку или учетную запись в Облаке.",
|
||||
"Triggers when a tag is added to an asset in Cloudinary.": "Включает при добавлении тега к активу в облаке.",
|
||||
"Asset Folder": "Папка активов",
|
||||
"The Cloudinary folder to watch for new resources. Leave empty to watch the entire account.": "Папка Cloudinary для просмотра новых ресурсов. Оставьте пустым, чтобы просмотреть весь аккаунт.",
|
||||
"The type of resources to monitor for tag changes": "Тип ресурсов для отслеживания изменений тегов",
|
||||
"Optional: Watch only assets in this specific folder. Leave empty to watch all assets.": "Необязательно: Смотреть только активы в этой папке. Оставьте пустым, чтобы смотреть все активы.",
|
||||
"Image": "Изображение",
|
||||
"Video": "Видео",
|
||||
"Raw": "Сырье"
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"Cloudinary is a cloud-based image and video management platform that allows you to upload, store, manage, and deliver your media assets. It provides a range of features for image and video optimization, transformation, and delivery.": "Cloudinary is a cloud-based image and video management platform that allows you to upload, store, manage, and deliver your media assets. It provides a range of features for image and video optimization, transformation, and delivery.",
|
||||
"API Key": "API Key",
|
||||
"API Secret": "API Secret",
|
||||
"Cloud Name": "Cloud Name",
|
||||
"Your Cloudinary API Key. Found in Console Settings → API Keys page.": "Your Cloudinary API Key. Found in Console Settings → API Keys page.",
|
||||
"Your Cloudinary API Secret. Found in Console Settings → API Keys page. Keep this secure and never share publicly.": "Your Cloudinary API Secret. Found in Console Settings → API Keys page. Keep this secure and never share publicly.",
|
||||
"Your Cloudinary Cloud Name. Found in Console Settings → API Keys page or in your dashboard URL (e.g., \"demo\" from console.cloudinary.com/console/demo).": "Your Cloudinary Cloud Name. Found in Console Settings → API Keys page or in your dashboard URL (e.g., \"demo\" from console.cloudinary.com/console/demo).",
|
||||
"Enter your Cloudinary account credentials. Find these in your Cloudinary Console settings under the API keys page.": "Enter your Cloudinary account credentials. Find these in your Cloudinary Console settings under the API keys page.",
|
||||
"Upload Resource": "Upload Resource",
|
||||
"Delete Resource": "Delete Resource",
|
||||
"Create Usage Report": "Create Usage Report",
|
||||
"Find Resource by Public ID": "Find Resource by Public ID",
|
||||
"Transform Resource": "Transform Resource",
|
||||
"Upload a new image, video, or file to Cloudinary.": "Upload a new image, video, or file to Cloudinary.",
|
||||
"Permanently delete images, videos, or files from Cloudinary.": "Permanently delete images, videos, or files from Cloudinary.",
|
||||
"Generate a comprehensive report of account usage and quotas including storage, bandwidth, transformations, requests, and add-on usage.": "Generate a comprehensive report of account usage and quotas including storage, bandwidth, transformations, requests, and add-on usage.",
|
||||
"Retrieve details of an asset using its unique public ID.": "Retrieve details of an asset using its unique public ID.",
|
||||
"Apply transformations (resize, crop, watermark, etc.) to an asset and generate a new URL.": "Apply transformations (resize, crop, watermark, etc.) to an asset and generate a new URL.",
|
||||
"File": "File",
|
||||
"Public ID": "Public ID",
|
||||
"Folder": "Folder",
|
||||
"Tags": "Tags",
|
||||
"Overwrite": "Overwrite",
|
||||
"Use Original Filename": "Use Original Filename",
|
||||
"Deletion Mode": "Deletion Mode",
|
||||
"Resource Type": "Resource Type",
|
||||
"Public IDs": "Public IDs",
|
||||
"Manual Public IDs": "Manual Public IDs",
|
||||
"Manual Tag": "Manual Tag",
|
||||
"Prefix": "Prefix",
|
||||
"Delivery Type": "Delivery Type",
|
||||
"Keep Original": "Keep Original",
|
||||
"Invalidate CDN Cache": "Invalidate CDN Cache",
|
||||
"Report Date": "Report Date",
|
||||
"Include Detailed Breakdown": "Include Detailed Breakdown",
|
||||
"Manual Public ID": "Manual Public ID",
|
||||
"Width": "Width",
|
||||
"Height": "Height",
|
||||
"Crop Mode": "Crop Mode",
|
||||
"Gravity": "Gravity",
|
||||
"Output Format": "Output Format",
|
||||
"Quality": "Quality",
|
||||
"Border": "Border",
|
||||
"Border Radius": "Border Radius",
|
||||
"Opacity": "Opacity",
|
||||
"Rotation": "Rotation",
|
||||
"Raw Transformation": "Raw Transformation",
|
||||
"Generate URL Only": "Generate URL Only",
|
||||
"The file to upload to Cloudinary.": "The file to upload to Cloudinary.",
|
||||
"The public ID for the uploaded resource. If not specified, a random ID will be generated.": "The public ID for the uploaded resource. If not specified, a random ID will be generated.",
|
||||
"Select an existing folder or type a new folder path (e.g., \"samples/animals\")": "Select an existing folder or type a new folder path (e.g., \"samples/animals\")",
|
||||
"Select existing tags or type new ones": "Select existing tags or type new ones",
|
||||
"Whether to overwrite existing assets with the same public ID.": "Whether to overwrite existing assets with the same public ID.",
|
||||
"Whether to use the original file name as the public ID.": "Whether to use the original file name as the public ID.",
|
||||
"Choose how to specify assets for deletion": "Choose how to specify assets for deletion",
|
||||
"Select the type of resource to upload to Cloudinary.": "Select the type of resource to upload to Cloudinary.",
|
||||
"Select assets to delete by their public IDs": "Select assets to delete by their public IDs",
|
||||
"Or type comma-separated public IDs manually (up to 100). Example: image1,image2,folder/image3": "Or type comma-separated public IDs manually (up to 100). Example: image1,image2,folder/image3",
|
||||
"Select existing tags or type new ones (comma-separated)": "Select existing tags or type new ones (comma-separated)",
|
||||
"Or type tag name manually to delete all assets with this tag (up to 1000 assets)": "Or type tag name manually to delete all assets with this tag (up to 1000 assets)",
|
||||
"Delete all assets whose public ID starts with this prefix (up to 1000 assets)": "Delete all assets whose public ID starts with this prefix (up to 1000 assets)",
|
||||
"The delivery type of assets to delete": "The delivery type of assets to delete",
|
||||
"Delete only derived assets, keep the original": "Delete only derived assets, keep the original",
|
||||
"Whether to invalidate CDN cached copies. Takes a few minutes to propagate.": "Whether to invalidate CDN cached copies. Takes a few minutes to propagate.",
|
||||
"Date for the usage report. Must be within the last 3 months. Leave empty for current date.": "Date for the usage report. Must be within the last 3 months. Leave empty for current date.",
|
||||
"Whether to include detailed breakdown of transformation types and add-on usage in the response.": "Whether to include detailed breakdown of transformation types and add-on usage in the response.",
|
||||
"Select an asset to find by its public ID": "Select an asset to find by its public ID",
|
||||
"Or enter the public ID manually if not found in dropdown (e.g., \"sample\", \"folder/image-name\")": "Or enter the public ID manually if not found in dropdown (e.g., \"sample\", \"folder/image-name\")",
|
||||
"The delivery type of the asset": "The delivery type of the asset",
|
||||
"Or enter public ID manually if not in dropdown": "Or enter public ID manually if not in dropdown",
|
||||
"Target width in pixels": "Target width in pixels",
|
||||
"Target height in pixels": "Target height in pixels",
|
||||
"How to handle resizing when aspect ratios differ": "How to handle resizing when aspect ratios differ",
|
||||
"Which part to focus on when cropping": "Which part to focus on when cropping",
|
||||
"Convert to this format": "Convert to this format",
|
||||
"Image quality/compression level": "Image quality/compression level",
|
||||
"Add border (e.g., \"5px_solid_blue\", \"10px_solid_#ff0000\")": "Add border (e.g., \"5px_solid_blue\", \"10px_solid_#ff0000\")",
|
||||
"Round corners or make circular": "Round corners or make circular",
|
||||
"Transparency level (0-100, where 100 is opaque)": "Transparency level (0-100, where 100 is opaque)",
|
||||
"Rotate image by degrees (0-360)": "Rotate image by degrees (0-360)",
|
||||
"Advanced: Raw transformation string (e.g., \"c_fill,w_300,h_200/e_sepia/r_20\"). This will be applied after the above basic transformations.": "Advanced: Raw transformation string (e.g., \"c_fill,w_300,h_200/e_sepia/r_20\"). This will be applied after the above basic transformations.",
|
||||
"If true, only return the transformation URL. If false, also make a request to generate the transformed asset.": "If true, only return the transformation URL. If false, also make a request to generate the transformed asset.",
|
||||
"By Public IDs": "By Public IDs",
|
||||
"By Tag": "By Tag",
|
||||
"By Prefix": "By Prefix",
|
||||
"Upload": "Upload",
|
||||
"Private": "Private",
|
||||
"Authenticated": "Authenticated",
|
||||
"Scale (fit within bounds)": "Scale (fit within bounds)",
|
||||
"Fill (crop to exact size)": "Fill (crop to exact size)",
|
||||
"Fit (pad to exact size)": "Fit (pad to exact size)",
|
||||
"Crop (exact size, smart cropping)": "Crop (exact size, smart cropping)",
|
||||
"Thumb (face-aware cropping)": "Thumb (face-aware cropping)",
|
||||
"Limit (only scale down)": "Limit (only scale down)",
|
||||
"Auto (smart cropping)": "Auto (smart cropping)",
|
||||
"Face detection": "Face detection",
|
||||
"Center": "Center",
|
||||
"North (top)": "North (top)",
|
||||
"South (bottom)": "South (bottom)",
|
||||
"East (right)": "East (right)",
|
||||
"West (left)": "West (left)",
|
||||
"Northwest (top-left)": "Northwest (top-left)",
|
||||
"Northeast (top-right)": "Northeast (top-right)",
|
||||
"Southwest (bottom-left)": "Southwest (bottom-left)",
|
||||
"Southeast (bottom-right)": "Southeast (bottom-right)",
|
||||
"Auto (best format for browser)": "Auto (best format for browser)",
|
||||
"JPEG": "JPEG",
|
||||
"PNG": "PNG",
|
||||
"WebP": "WebP",
|
||||
"AVIF": "AVIF",
|
||||
"GIF": "GIF",
|
||||
"SVG": "SVG",
|
||||
"Auto (optimal for format)": "Auto (optimal for format)",
|
||||
"High (90)": "High (90)",
|
||||
"Good (80)": "Good (80)",
|
||||
"Medium (70)": "Medium (70)",
|
||||
"Low (50)": "Low (50)",
|
||||
"Slight rounding (10px)": "Slight rounding (10px)",
|
||||
"Rounded corners (20px)": "Rounded corners (20px)",
|
||||
"Very rounded (50px)": "Very rounded (50px)",
|
||||
"Circle/Oval (max)": "Circle/Oval (max)",
|
||||
"New Resource": "New Resource",
|
||||
"New Tag Added to Asset": "New Tag Added to Asset",
|
||||
"Triggers when a new image, video, or file is uploaded to a specific folder or account in Cloudinary.": "Triggers when a new image, video, or file is uploaded to a specific folder or account in Cloudinary.",
|
||||
"Triggers when a tag is added to an asset in Cloudinary.": "Triggers when a tag is added to an asset in Cloudinary.",
|
||||
"Asset Folder": "Asset Folder",
|
||||
"The Cloudinary folder to watch for new resources. Leave empty to watch the entire account.": "The Cloudinary folder to watch for new resources. Leave empty to watch the entire account.",
|
||||
"The type of resources to monitor for tag changes": "The type of resources to monitor for tag changes",
|
||||
"Optional: Watch only assets in this specific folder. Leave empty to watch all assets.": "Optional: Watch only assets in this specific folder. Leave empty to watch all assets.",
|
||||
"Image": "Image",
|
||||
"Video": "Video",
|
||||
"Raw": "Raw"
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
{
|
||||
"Cloudinary": "Cloudinary",
|
||||
"Cloudinary is a cloud-based image and video management platform that allows you to upload, store, manage, and deliver your media assets. It provides a range of features for image and video optimization, transformation, and delivery.": "Cloudinary is a cloud-based image and video management platform that allows you to upload, store, manage, and deliver your media assets. It provides a range of features for image and video optimization, transformation, and delivery.",
|
||||
"API Key": "API Key",
|
||||
"API Secret": "API Secret",
|
||||
"Cloud Name": "Cloud Name",
|
||||
"Your Cloudinary API Key. Found in Console Settings → API Keys page.": "Your Cloudinary API Key. Found in Console Settings → API Keys page.",
|
||||
"Your Cloudinary API Secret. Found in Console Settings → API Keys page. Keep this secure and never share publicly.": "Your Cloudinary API Secret. Found in Console Settings → API Keys page. Keep this secure and never share publicly.",
|
||||
"Your Cloudinary Cloud Name. Found in Console Settings → API Keys page or in your dashboard URL (e.g., \"demo\" from console.cloudinary.com/console/demo).": "Your Cloudinary Cloud Name. Found in Console Settings → API Keys page or in your dashboard URL (e.g., \"demo\" from console.cloudinary.com/console/demo).",
|
||||
"Enter your Cloudinary account credentials. Find these in your Cloudinary Console settings under the API keys page.": "Enter your Cloudinary account credentials. Find these in your Cloudinary Console settings under the API keys page.",
|
||||
"Upload Resource": "Upload Resource",
|
||||
"Delete Resource": "Delete Resource",
|
||||
"Create Usage Report": "Create Usage Report",
|
||||
"Find Resource by Public ID": "Find Resource by Public ID",
|
||||
"Transform Resource": "Transform Resource",
|
||||
"Upload a new image, video, or file to Cloudinary.": "Upload a new image, video, or file to Cloudinary.",
|
||||
"Permanently delete images, videos, or files from Cloudinary.": "Permanently delete images, videos, or files from Cloudinary.",
|
||||
"Generate a comprehensive report of account usage and quotas including storage, bandwidth, transformations, requests, and add-on usage.": "Generate a comprehensive report of account usage and quotas including storage, bandwidth, transformations, requests, and add-on usage.",
|
||||
"Retrieve details of an asset using its unique public ID.": "Retrieve details of an asset using its unique public ID.",
|
||||
"Apply transformations (resize, crop, watermark, etc.) to an asset and generate a new URL.": "Apply transformations (resize, crop, watermark, etc.) to an asset and generate a new URL.",
|
||||
"File": "File",
|
||||
"Public ID": "Public ID",
|
||||
"Folder": "Folder",
|
||||
"Tags": "Tags",
|
||||
"Overwrite": "Overwrite",
|
||||
"Use Original Filename": "Use Original Filename",
|
||||
"Deletion Mode": "Deletion Mode",
|
||||
"Resource Type": "Resource Type",
|
||||
"Public IDs": "Public IDs",
|
||||
"Manual Public IDs": "Manual Public IDs",
|
||||
"Manual Tag": "Manual Tag",
|
||||
"Prefix": "Prefix",
|
||||
"Delivery Type": "Delivery Type",
|
||||
"Keep Original": "Keep Original",
|
||||
"Invalidate CDN Cache": "Invalidate CDN Cache",
|
||||
"Report Date": "Report Date",
|
||||
"Include Detailed Breakdown": "Include Detailed Breakdown",
|
||||
"Manual Public ID": "Manual Public ID",
|
||||
"Width": "Width",
|
||||
"Height": "Height",
|
||||
"Crop Mode": "Crop Mode",
|
||||
"Gravity": "Gravity",
|
||||
"Output Format": "Output Format",
|
||||
"Quality": "Quality",
|
||||
"Border": "Border",
|
||||
"Border Radius": "Border Radius",
|
||||
"Opacity": "Opacity",
|
||||
"Rotation": "Rotation",
|
||||
"Raw Transformation": "Raw Transformation",
|
||||
"Generate URL Only": "Generate URL Only",
|
||||
"The file to upload to Cloudinary.": "The file to upload to Cloudinary.",
|
||||
"The public ID for the uploaded resource. If not specified, a random ID will be generated.": "The public ID for the uploaded resource. If not specified, a random ID will be generated.",
|
||||
"Select an existing folder or type a new folder path (e.g., \"samples/animals\")": "Select an existing folder or type a new folder path (e.g., \"samples/animals\")",
|
||||
"Select existing tags or type new ones": "Select existing tags or type new ones",
|
||||
"Whether to overwrite existing assets with the same public ID.": "Whether to overwrite existing assets with the same public ID.",
|
||||
"Whether to use the original file name as the public ID.": "Whether to use the original file name as the public ID.",
|
||||
"Choose how to specify assets for deletion": "Choose how to specify assets for deletion",
|
||||
"Select the type of resource to upload to Cloudinary.": "Select the type of resource to upload to Cloudinary.",
|
||||
"Select assets to delete by their public IDs": "Select assets to delete by their public IDs",
|
||||
"Or type comma-separated public IDs manually (up to 100). Example: image1,image2,folder/image3": "Or type comma-separated public IDs manually (up to 100). Example: image1,image2,folder/image3",
|
||||
"Select existing tags or type new ones (comma-separated)": "Select existing tags or type new ones (comma-separated)",
|
||||
"Or type tag name manually to delete all assets with this tag (up to 1000 assets)": "Or type tag name manually to delete all assets with this tag (up to 1000 assets)",
|
||||
"Delete all assets whose public ID starts with this prefix (up to 1000 assets)": "Delete all assets whose public ID starts with this prefix (up to 1000 assets)",
|
||||
"The delivery type of assets to delete": "The delivery type of assets to delete",
|
||||
"Delete only derived assets, keep the original": "Delete only derived assets, keep the original",
|
||||
"Whether to invalidate CDN cached copies. Takes a few minutes to propagate.": "Whether to invalidate CDN cached copies. Takes a few minutes to propagate.",
|
||||
"Date for the usage report. Must be within the last 3 months. Leave empty for current date.": "Date for the usage report. Must be within the last 3 months. Leave empty for current date.",
|
||||
"Whether to include detailed breakdown of transformation types and add-on usage in the response.": "Whether to include detailed breakdown of transformation types and add-on usage in the response.",
|
||||
"Select an asset to find by its public ID": "Select an asset to find by its public ID",
|
||||
"Or enter the public ID manually if not found in dropdown (e.g., \"sample\", \"folder/image-name\")": "Or enter the public ID manually if not found in dropdown (e.g., \"sample\", \"folder/image-name\")",
|
||||
"The delivery type of the asset": "The delivery type of the asset",
|
||||
"Or enter public ID manually if not in dropdown": "Or enter public ID manually if not in dropdown",
|
||||
"Target width in pixels": "Target width in pixels",
|
||||
"Target height in pixels": "Target height in pixels",
|
||||
"How to handle resizing when aspect ratios differ": "How to handle resizing when aspect ratios differ",
|
||||
"Which part to focus on when cropping": "Which part to focus on when cropping",
|
||||
"Convert to this format": "Convert to this format",
|
||||
"Image quality/compression level": "Image quality/compression level",
|
||||
"Add border (e.g., \"5px_solid_blue\", \"10px_solid_#ff0000\")": "Add border (e.g., \"5px_solid_blue\", \"10px_solid_#ff0000\")",
|
||||
"Round corners or make circular": "Round corners or make circular",
|
||||
"Transparency level (0-100, where 100 is opaque)": "Transparency level (0-100, where 100 is opaque)",
|
||||
"Rotate image by degrees (0-360)": "Rotate image by degrees (0-360)",
|
||||
"Advanced: Raw transformation string (e.g., \"c_fill,w_300,h_200/e_sepia/r_20\"). This will be applied after the above basic transformations.": "Advanced: Raw transformation string (e.g., \"c_fill,w_300,h_200/e_sepia/r_20\"). This will be applied after the above basic transformations.",
|
||||
"If true, only return the transformation URL. If false, also make a request to generate the transformed asset.": "If true, only return the transformation URL. If false, also make a request to generate the transformed asset.",
|
||||
"By Public IDs": "By Public IDs",
|
||||
"By Tag": "By Tag",
|
||||
"By Prefix": "By Prefix",
|
||||
"Upload": "Upload",
|
||||
"Private": "Private",
|
||||
"Authenticated": "Authenticated",
|
||||
"Scale (fit within bounds)": "Scale (fit within bounds)",
|
||||
"Fill (crop to exact size)": "Fill (crop to exact size)",
|
||||
"Fit (pad to exact size)": "Fit (pad to exact size)",
|
||||
"Crop (exact size, smart cropping)": "Crop (exact size, smart cropping)",
|
||||
"Thumb (face-aware cropping)": "Thumb (face-aware cropping)",
|
||||
"Limit (only scale down)": "Limit (only scale down)",
|
||||
"Auto (smart cropping)": "Auto (smart cropping)",
|
||||
"Face detection": "Face detection",
|
||||
"Center": "Center",
|
||||
"North (top)": "North (top)",
|
||||
"South (bottom)": "South (bottom)",
|
||||
"East (right)": "East (right)",
|
||||
"West (left)": "West (left)",
|
||||
"Northwest (top-left)": "Northwest (top-left)",
|
||||
"Northeast (top-right)": "Northeast (top-right)",
|
||||
"Southwest (bottom-left)": "Southwest (bottom-left)",
|
||||
"Southeast (bottom-right)": "Southeast (bottom-right)",
|
||||
"Auto (best format for browser)": "Auto (best format for browser)",
|
||||
"JPEG": "JPEG",
|
||||
"PNG": "PNG",
|
||||
"WebP": "WebP",
|
||||
"AVIF": "AVIF",
|
||||
"GIF": "GIF",
|
||||
"SVG": "SVG",
|
||||
"Auto (optimal for format)": "Auto (optimal for format)",
|
||||
"High (90)": "High (90)",
|
||||
"Good (80)": "Good (80)",
|
||||
"Medium (70)": "Medium (70)",
|
||||
"Low (50)": "Low (50)",
|
||||
"Slight rounding (10px)": "Slight rounding (10px)",
|
||||
"Rounded corners (20px)": "Rounded corners (20px)",
|
||||
"Very rounded (50px)": "Very rounded (50px)",
|
||||
"Circle/Oval (max)": "Circle/Oval (max)",
|
||||
"New Resource": "New Resource",
|
||||
"New Tag Added to Asset": "New Tag Added to Asset",
|
||||
"Triggers when a new image, video, or file is uploaded to a specific folder or account in Cloudinary.": "Triggers when a new image, video, or file is uploaded to a specific folder or account in Cloudinary.",
|
||||
"Triggers when a tag is added to an asset in Cloudinary.": "Triggers when a tag is added to an asset in Cloudinary.",
|
||||
"Asset Folder": "Asset Folder",
|
||||
"The Cloudinary folder to watch for new resources. Leave empty to watch the entire account.": "The Cloudinary folder to watch for new resources. Leave empty to watch the entire account.",
|
||||
"The type of resources to monitor for tag changes": "The type of resources to monitor for tag changes",
|
||||
"Optional: Watch only assets in this specific folder. Leave empty to watch all assets.": "Optional: Watch only assets in this specific folder. Leave empty to watch all assets.",
|
||||
"Image": "Image",
|
||||
"Video": "Video",
|
||||
"Raw": "Raw"
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"Cloudinary is a cloud-based image and video management platform that allows you to upload, store, manage, and deliver your media assets. It provides a range of features for image and video optimization, transformation, and delivery.": "Cloudinary is a cloud-based image and video management platform that allows you to upload, store, manage, and deliver your media assets. It provides a range of features for image and video optimization, transformation, and delivery.",
|
||||
"API Key": "API 密钥",
|
||||
"API Secret": "API Secret",
|
||||
"Cloud Name": "Cloud Name",
|
||||
"Your Cloudinary API Key. Found in Console Settings → API Keys page.": "Your Cloudinary API Key. Found in Console Settings → API Keys page.",
|
||||
"Your Cloudinary API Secret. Found in Console Settings → API Keys page. Keep this secure and never share publicly.": "Your Cloudinary API Secret. Found in Console Settings → API Keys page. Keep this secure and never share publicly.",
|
||||
"Your Cloudinary Cloud Name. Found in Console Settings → API Keys page or in your dashboard URL (e.g., \"demo\" from console.cloudinary.com/console/demo).": "Your Cloudinary Cloud Name. Found in Console Settings → API Keys page or in your dashboard URL (e.g., \"demo\" from console.cloudinary.com/console/demo).",
|
||||
"Enter your Cloudinary account credentials. Find these in your Cloudinary Console settings under the API keys page.": "Enter your Cloudinary account credentials. Find these in your Cloudinary Console settings under the API keys page.",
|
||||
"Upload Resource": "Upload Resource",
|
||||
"Delete Resource": "Delete Resource",
|
||||
"Create Usage Report": "Create Usage Report",
|
||||
"Find Resource by Public ID": "Find Resource by Public ID",
|
||||
"Transform Resource": "Transform Resource",
|
||||
"Upload a new image, video, or file to Cloudinary.": "Upload a new image, video, or file to Cloudinary.",
|
||||
"Permanently delete images, videos, or files from Cloudinary.": "Permanently delete images, videos, or files from Cloudinary.",
|
||||
"Generate a comprehensive report of account usage and quotas including storage, bandwidth, transformations, requests, and add-on usage.": "Generate a comprehensive report of account usage and quotas including storage, bandwidth, transformations, requests, and add-on usage.",
|
||||
"Retrieve details of an asset using its unique public ID.": "Retrieve details of an asset using its unique public ID.",
|
||||
"Apply transformations (resize, crop, watermark, etc.) to an asset and generate a new URL.": "Apply transformations (resize, crop, watermark, etc.) to an asset and generate a new URL.",
|
||||
"File": "文件",
|
||||
"Public ID": "Public ID",
|
||||
"Folder": "Folder",
|
||||
"Tags": "标签",
|
||||
"Overwrite": "Overwrite",
|
||||
"Use Original Filename": "Use Original Filename",
|
||||
"Deletion Mode": "Deletion Mode",
|
||||
"Resource Type": "Resource Type",
|
||||
"Public IDs": "Public IDs",
|
||||
"Manual Public IDs": "Manual Public IDs",
|
||||
"Manual Tag": "Manual Tag",
|
||||
"Prefix": "Prefix",
|
||||
"Delivery Type": "Delivery Type",
|
||||
"Keep Original": "Keep Original",
|
||||
"Invalidate CDN Cache": "Invalidate CDN Cache",
|
||||
"Report Date": "Report Date",
|
||||
"Include Detailed Breakdown": "Include Detailed Breakdown",
|
||||
"Manual Public ID": "Manual Public ID",
|
||||
"Width": "Width",
|
||||
"Height": "Height",
|
||||
"Crop Mode": "Crop Mode",
|
||||
"Gravity": "Gravity",
|
||||
"Output Format": "Output Format",
|
||||
"Quality": "Quality",
|
||||
"Border": "Border",
|
||||
"Border Radius": "Border Radius",
|
||||
"Opacity": "Opacity",
|
||||
"Rotation": "Rotation",
|
||||
"Raw Transformation": "Raw Transformation",
|
||||
"Generate URL Only": "Generate URL Only",
|
||||
"The file to upload to Cloudinary.": "The file to upload to Cloudinary.",
|
||||
"The public ID for the uploaded resource. If not specified, a random ID will be generated.": "The public ID for the uploaded resource. If not specified, a random ID will be generated.",
|
||||
"Select an existing folder or type a new folder path (e.g., \"samples/animals\")": "Select an existing folder or type a new folder path (e.g., \"samples/animals\")",
|
||||
"Select existing tags or type new ones": "Select existing tags or type new ones",
|
||||
"Whether to overwrite existing assets with the same public ID.": "Whether to overwrite existing assets with the same public ID.",
|
||||
"Whether to use the original file name as the public ID.": "Whether to use the original file name as the public ID.",
|
||||
"Choose how to specify assets for deletion": "Choose how to specify assets for deletion",
|
||||
"Select the type of resource to upload to Cloudinary.": "Select the type of resource to upload to Cloudinary.",
|
||||
"Select assets to delete by their public IDs": "Select assets to delete by their public IDs",
|
||||
"Or type comma-separated public IDs manually (up to 100). Example: image1,image2,folder/image3": "Or type comma-separated public IDs manually (up to 100). Example: image1,image2,folder/image3",
|
||||
"Select existing tags or type new ones (comma-separated)": "Select existing tags or type new ones (comma-separated)",
|
||||
"Or type tag name manually to delete all assets with this tag (up to 1000 assets)": "Or type tag name manually to delete all assets with this tag (up to 1000 assets)",
|
||||
"Delete all assets whose public ID starts with this prefix (up to 1000 assets)": "Delete all assets whose public ID starts with this prefix (up to 1000 assets)",
|
||||
"The delivery type of assets to delete": "The delivery type of assets to delete",
|
||||
"Delete only derived assets, keep the original": "Delete only derived assets, keep the original",
|
||||
"Whether to invalidate CDN cached copies. Takes a few minutes to propagate.": "Whether to invalidate CDN cached copies. Takes a few minutes to propagate.",
|
||||
"Date for the usage report. Must be within the last 3 months. Leave empty for current date.": "Date for the usage report. Must be within the last 3 months. Leave empty for current date.",
|
||||
"Whether to include detailed breakdown of transformation types and add-on usage in the response.": "Whether to include detailed breakdown of transformation types and add-on usage in the response.",
|
||||
"Select an asset to find by its public ID": "Select an asset to find by its public ID",
|
||||
"Or enter the public ID manually if not found in dropdown (e.g., \"sample\", \"folder/image-name\")": "Or enter the public ID manually if not found in dropdown (e.g., \"sample\", \"folder/image-name\")",
|
||||
"The delivery type of the asset": "The delivery type of the asset",
|
||||
"Or enter public ID manually if not in dropdown": "Or enter public ID manually if not in dropdown",
|
||||
"Target width in pixels": "Target width in pixels",
|
||||
"Target height in pixels": "Target height in pixels",
|
||||
"How to handle resizing when aspect ratios differ": "How to handle resizing when aspect ratios differ",
|
||||
"Which part to focus on when cropping": "Which part to focus on when cropping",
|
||||
"Convert to this format": "Convert to this format",
|
||||
"Image quality/compression level": "Image quality/compression level",
|
||||
"Add border (e.g., \"5px_solid_blue\", \"10px_solid_#ff0000\")": "Add border (e.g., \"5px_solid_blue\", \"10px_solid_#ff0000\")",
|
||||
"Round corners or make circular": "Round corners or make circular",
|
||||
"Transparency level (0-100, where 100 is opaque)": "Transparency level (0-100, where 100 is opaque)",
|
||||
"Rotate image by degrees (0-360)": "Rotate image by degrees (0-360)",
|
||||
"Advanced: Raw transformation string (e.g., \"c_fill,w_300,h_200/e_sepia/r_20\"). This will be applied after the above basic transformations.": "Advanced: Raw transformation string (e.g., \"c_fill,w_300,h_200/e_sepia/r_20\"). This will be applied after the above basic transformations.",
|
||||
"If true, only return the transformation URL. If false, also make a request to generate the transformed asset.": "If true, only return the transformation URL. If false, also make a request to generate the transformed asset.",
|
||||
"By Public IDs": "By Public IDs",
|
||||
"By Tag": "By Tag",
|
||||
"By Prefix": "By Prefix",
|
||||
"Upload": "Upload",
|
||||
"Private": "Private",
|
||||
"Authenticated": "Authenticated",
|
||||
"Scale (fit within bounds)": "Scale (fit within bounds)",
|
||||
"Fill (crop to exact size)": "Fill (crop to exact size)",
|
||||
"Fit (pad to exact size)": "Fit (pad to exact size)",
|
||||
"Crop (exact size, smart cropping)": "Crop (exact size, smart cropping)",
|
||||
"Thumb (face-aware cropping)": "Thumb (face-aware cropping)",
|
||||
"Limit (only scale down)": "Limit (only scale down)",
|
||||
"Auto (smart cropping)": "Auto (smart cropping)",
|
||||
"Face detection": "Face detection",
|
||||
"Center": "Center",
|
||||
"North (top)": "North (top)",
|
||||
"South (bottom)": "South (bottom)",
|
||||
"East (right)": "East (right)",
|
||||
"West (left)": "West (left)",
|
||||
"Northwest (top-left)": "Northwest (top-left)",
|
||||
"Northeast (top-right)": "Northeast (top-right)",
|
||||
"Southwest (bottom-left)": "Southwest (bottom-left)",
|
||||
"Southeast (bottom-right)": "Southeast (bottom-right)",
|
||||
"Auto (best format for browser)": "Auto (best format for browser)",
|
||||
"JPEG": "JPEG",
|
||||
"PNG": "PNG",
|
||||
"WebP": "WebP",
|
||||
"AVIF": "AVIF",
|
||||
"GIF": "GIF",
|
||||
"SVG": "SVG",
|
||||
"Auto (optimal for format)": "Auto (optimal for format)",
|
||||
"High (90)": "High (90)",
|
||||
"Good (80)": "Good (80)",
|
||||
"Medium (70)": "Medium (70)",
|
||||
"Low (50)": "Low (50)",
|
||||
"Slight rounding (10px)": "Slight rounding (10px)",
|
||||
"Rounded corners (20px)": "Rounded corners (20px)",
|
||||
"Very rounded (50px)": "Very rounded (50px)",
|
||||
"Circle/Oval (max)": "Circle/Oval (max)",
|
||||
"New Resource": "New Resource",
|
||||
"New Tag Added to Asset": "New Tag Added to Asset",
|
||||
"Triggers when a new image, video, or file is uploaded to a specific folder or account in Cloudinary.": "Triggers when a new image, video, or file is uploaded to a specific folder or account in Cloudinary.",
|
||||
"Triggers when a tag is added to an asset in Cloudinary.": "Triggers when a tag is added to an asset in Cloudinary.",
|
||||
"Asset Folder": "Asset Folder",
|
||||
"The Cloudinary folder to watch for new resources. Leave empty to watch the entire account.": "The Cloudinary folder to watch for new resources. Leave empty to watch the entire account.",
|
||||
"The type of resources to monitor for tag changes": "The type of resources to monitor for tag changes",
|
||||
"Optional: Watch only assets in this specific folder. Leave empty to watch all assets.": "Optional: Watch only assets in this specific folder. Leave empty to watch all assets.",
|
||||
"Image": "Image",
|
||||
"Video": "Video",
|
||||
"Raw": "原始文件"
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
|
||||
import { createPiece } from "@activepieces/pieces-framework";
|
||||
import { cloudinaryAuth } from "./lib/common/auth";
|
||||
import { uploadResource } from "./lib/actions/upload-resource";
|
||||
import { deleteResource } from "./lib/actions/delete-resource";
|
||||
import { createUsageReport } from "./lib/actions/create-usage-report";
|
||||
import { findResourceByPublicId } from "./lib/actions/find-resource-by-public-id";
|
||||
import { transformResource } from "./lib/actions/transform-resource";
|
||||
import { newResourceInFolder } from "./lib/triggers/new-resource";
|
||||
import { newTagAddedToAsset } from "./lib/triggers/new-tag-added-to-asset";
|
||||
import { PieceCategory } from "@activepieces/shared";
|
||||
|
||||
export const cloudinary = createPiece({
|
||||
displayName: "Cloudinary",
|
||||
auth: cloudinaryAuth,
|
||||
description: "Cloudinary is a cloud-based image and video management platform that allows you to upload, store, manage, and deliver your media assets. It provides a range of features for image and video optimization, transformation, and delivery.",
|
||||
categories: [PieceCategory.CONTENT_AND_FILES],
|
||||
minimumSupportedRelease: '0.36.1',
|
||||
logoUrl: "https://cdn.activepieces.com/pieces/cloudinary.png",
|
||||
authors: ['Sanket6652','onyedikachi-david'],
|
||||
actions: [uploadResource, deleteResource, createUsageReport, findResourceByPublicId, transformResource],
|
||||
triggers: [newResourceInFolder, newTagAddedToAsset],
|
||||
});
|
||||
@@ -0,0 +1,96 @@
|
||||
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { cloudinaryAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
|
||||
export const createUsageReport = createAction({
|
||||
auth: cloudinaryAuth,
|
||||
name: 'createUsageReport',
|
||||
displayName: 'Create Usage Report',
|
||||
description: 'Generate a comprehensive report of account usage and quotas including storage, bandwidth, transformations, requests, and add-on usage.',
|
||||
props: {
|
||||
date: Property.DateTime({
|
||||
displayName: 'Report Date',
|
||||
description: 'Date for the usage report. Must be within the last 3 months. Leave empty for current date.',
|
||||
required: false,
|
||||
}),
|
||||
include_breakdown: Property.Checkbox({
|
||||
displayName: 'Include Detailed Breakdown',
|
||||
description: 'Whether to include detailed breakdown of transformation types and add-on usage in the response.',
|
||||
required: false,
|
||||
defaultValue: true,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { date, include_breakdown } = propsValue;
|
||||
|
||||
if (date) {
|
||||
const inputDate = new Date(date);
|
||||
const threeMonthsAgo = new Date();
|
||||
threeMonthsAgo.setMonth(threeMonthsAgo.getMonth() - 3);
|
||||
|
||||
if (inputDate < threeMonthsAgo) {
|
||||
throw new Error('Date must be within the last 3 months');
|
||||
}
|
||||
|
||||
if (inputDate > new Date()) {
|
||||
throw new Error('Date cannot be in the future');
|
||||
}
|
||||
}
|
||||
|
||||
const queryParams: Record<string, string> = {};
|
||||
if (date) {
|
||||
const inputDate = new Date(date);
|
||||
const dateString = inputDate.toISOString().split('T')[0];
|
||||
queryParams['date'] = dateString;
|
||||
}
|
||||
|
||||
const path = `/usage`;
|
||||
const response = await makeRequest(auth, HttpMethod.GET, path, undefined, queryParams);
|
||||
|
||||
if (!include_breakdown && response) {
|
||||
const simplified = {
|
||||
plan: response.plan,
|
||||
last_updated: response.last_updated,
|
||||
date_requested: response.date_requested,
|
||||
summary: {
|
||||
transformations: {
|
||||
usage: response.transformations?.usage,
|
||||
limit: response.transformations?.limit,
|
||||
used_percent: response.transformations?.used_percent,
|
||||
},
|
||||
bandwidth: {
|
||||
usage: response.bandwidth?.usage,
|
||||
limit: response.bandwidth?.limit,
|
||||
used_percent: response.bandwidth?.used_percent,
|
||||
usage_gb: response.bandwidth?.usage ? Math.round(response.bandwidth.usage / (1024 * 1024 * 1024) * 100) / 100 : null,
|
||||
},
|
||||
storage: {
|
||||
usage: response.storage?.usage,
|
||||
limit: response.storage?.limit,
|
||||
used_percent: response.storage?.used_percent,
|
||||
usage_gb: response.storage?.usage ? Math.round(response.storage.usage / (1024 * 1024 * 1024) * 100) / 100 : null,
|
||||
},
|
||||
requests: response.requests,
|
||||
resources: response.resources,
|
||||
derived_resources: response.derived_resources,
|
||||
},
|
||||
media_limits: response.media_limits,
|
||||
};
|
||||
|
||||
return simplified;
|
||||
}
|
||||
|
||||
if (response) {
|
||||
if (response.bandwidth?.usage) {
|
||||
response.bandwidth.usage_gb = Math.round(response.bandwidth.usage / (1024 * 1024 * 1024) * 100) / 100;
|
||||
}
|
||||
if (response.storage?.usage) {
|
||||
response.storage.usage_gb = Math.round(response.storage.usage / (1024 * 1024 * 1024) * 100) / 100;
|
||||
}
|
||||
}
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,128 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { cloudinaryAuth } from '../common/auth';
|
||||
import { resourceTypeDropdown, publicIdsDropdown, tagsDropdown } from '../common/props';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { makeRequest } from '../common/client';
|
||||
|
||||
export const deleteResource = createAction({
|
||||
auth: cloudinaryAuth,
|
||||
name: 'deleteResource',
|
||||
displayName: 'Delete Resource',
|
||||
description: 'Permanently delete images, videos, or files from Cloudinary.',
|
||||
props: {
|
||||
deletion_mode: Property.StaticDropdown({
|
||||
displayName: 'Deletion Mode',
|
||||
description: 'Choose how to specify assets for deletion',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'By Public IDs', value: 'public_ids' },
|
||||
{ label: 'By Tag', value: 'tag' },
|
||||
{ label: 'By Prefix', value: 'prefix' },
|
||||
],
|
||||
},
|
||||
defaultValue: 'public_ids',
|
||||
}),
|
||||
resource_type: resourceTypeDropdown,
|
||||
public_ids_dropdown: publicIdsDropdown,
|
||||
public_ids_manual: Property.LongText({
|
||||
displayName: 'Manual Public IDs',
|
||||
description: 'Or type comma-separated public IDs manually (up to 100). Example: image1,image2,folder/image3',
|
||||
required: false,
|
||||
}),
|
||||
tag_dropdown: tagsDropdown,
|
||||
tag_manual: Property.ShortText({
|
||||
displayName: 'Manual Tag',
|
||||
description: 'Or type tag name manually to delete all assets with this tag (up to 1000 assets)',
|
||||
required: false,
|
||||
}),
|
||||
prefix: Property.ShortText({
|
||||
displayName: 'Prefix',
|
||||
description: 'Delete all assets whose public ID starts with this prefix (up to 1000 assets)',
|
||||
required: false,
|
||||
}),
|
||||
type: Property.StaticDropdown({
|
||||
displayName: 'Delivery Type',
|
||||
description: 'The delivery type of assets to delete',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Upload', value: 'upload' },
|
||||
{ label: 'Private', value: 'private' },
|
||||
{ label: 'Authenticated', value: 'authenticated' },
|
||||
],
|
||||
},
|
||||
defaultValue: 'upload',
|
||||
}),
|
||||
keep_original: Property.Checkbox({
|
||||
displayName: 'Keep Original',
|
||||
description: 'Delete only derived assets, keep the original',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
invalidate: Property.Checkbox({
|
||||
displayName: 'Invalidate CDN Cache',
|
||||
description: 'Whether to invalidate CDN cached copies. Takes a few minutes to propagate.',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const {
|
||||
deletion_mode,
|
||||
resource_type,
|
||||
public_ids_dropdown,
|
||||
public_ids_manual,
|
||||
tag_dropdown,
|
||||
tag_manual,
|
||||
prefix,
|
||||
type,
|
||||
keep_original,
|
||||
invalidate
|
||||
} = propsValue;
|
||||
|
||||
const FormData = (await import('form-data')).default;
|
||||
const form = new FormData();
|
||||
|
||||
if (deletion_mode === 'tag') {
|
||||
const tag = (tag_dropdown as string) || tag_manual;
|
||||
if (!tag) {
|
||||
throw new Error('Please select or enter a tag for deletion.');
|
||||
}
|
||||
|
||||
const path = `/resources/${resource_type}/tags/${encodeURIComponent(tag)}`;
|
||||
|
||||
if (keep_original) form.append('keep_original', keep_original.toString());
|
||||
if (invalidate) form.append('invalidate', invalidate.toString());
|
||||
|
||||
return await makeRequest(auth, HttpMethod.DELETE, path, form);
|
||||
} else if (deletion_mode === 'public_ids') {
|
||||
let ids: string[] = [];
|
||||
|
||||
if (public_ids_dropdown && Array.isArray(public_ids_dropdown) && public_ids_dropdown.length > 0) {
|
||||
ids = public_ids_dropdown as string[];
|
||||
} else if (public_ids_manual) {
|
||||
ids = public_ids_manual.split(',').map(id => id.trim()).filter(id => id);
|
||||
}
|
||||
|
||||
if (ids.length === 0) {
|
||||
throw new Error('Please select assets from dropdown or enter public IDs manually.');
|
||||
}
|
||||
|
||||
ids.forEach(id => form.append('public_ids[]', id));
|
||||
} else if (deletion_mode === 'prefix' && prefix) {
|
||||
form.append('prefix', prefix);
|
||||
} else {
|
||||
throw new Error(`Please provide ${deletion_mode} for deletion.`);
|
||||
}
|
||||
|
||||
// Add optional parameters
|
||||
if (keep_original) form.append('keep_original', keep_original.toString());
|
||||
if (invalidate) form.append('invalidate', invalidate.toString());
|
||||
|
||||
// Use standard endpoint for public_ids and prefix modes
|
||||
const path = `/resources/${resource_type}/${type}`;
|
||||
|
||||
return await makeRequest(auth, HttpMethod.DELETE, path, form);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,71 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { resourceTypeDropdown, publicIdDropdown } from '../common/props';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { cloudinaryAuth } from '../common/auth';
|
||||
|
||||
export const findResourceByPublicId = createAction({
|
||||
auth: cloudinaryAuth,
|
||||
name: 'findResourceByPublicId',
|
||||
displayName: 'Find Resource by Public ID',
|
||||
description: 'Retrieve details of an asset using its unique public ID.',
|
||||
props: {
|
||||
resource_type: resourceTypeDropdown,
|
||||
public_id_dropdown: publicIdDropdown,
|
||||
public_id_manual: Property.ShortText({
|
||||
displayName: 'Manual Public ID',
|
||||
description: 'Or enter the public ID manually if not found in dropdown (e.g., "sample", "folder/image-name")',
|
||||
required: false,
|
||||
}),
|
||||
delivery_type: Property.StaticDropdown({
|
||||
displayName: 'Delivery Type',
|
||||
description: 'The delivery type of the asset',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Upload', value: 'upload' },
|
||||
{ label: 'Private', value: 'private' },
|
||||
{ label: 'Authenticated', value: 'authenticated' },
|
||||
],
|
||||
},
|
||||
defaultValue: 'upload',
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { resource_type, public_id_dropdown, public_id_manual, delivery_type } = propsValue;
|
||||
|
||||
const public_id = (public_id_dropdown as string) || (public_id_manual as string);
|
||||
|
||||
if (!public_id || !public_id.trim()) {
|
||||
throw new Error('Please select an asset from the dropdown or enter a public ID manually.');
|
||||
}
|
||||
|
||||
const trimmedPublicId = public_id.trim();
|
||||
const type = delivery_type || 'upload';
|
||||
|
||||
const path = `/resources/${resource_type}/${type}/${encodeURIComponent(trimmedPublicId)}`;
|
||||
|
||||
try {
|
||||
const response = await makeRequest(auth, HttpMethod.GET, path);
|
||||
return {
|
||||
found: true,
|
||||
resource: response,
|
||||
public_id: trimmedPublicId,
|
||||
resource_type: resource_type,
|
||||
delivery_type: type,
|
||||
};
|
||||
} catch (error: any) {
|
||||
if (error.response?.status === 404 || error.message?.includes('not found')) {
|
||||
return {
|
||||
found: false,
|
||||
message: `Resource with public ID "${trimmedPublicId}" not found in ${resource_type}/${type}`,
|
||||
public_id: trimmedPublicId,
|
||||
resource_type: resource_type,
|
||||
delivery_type: type,
|
||||
};
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,225 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { cloudinaryAuth } from '../common/auth';
|
||||
import { resourceTypeDropdown, publicIdsDropdown } from '../common/props';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
|
||||
export const transformResource = createAction({
|
||||
auth: cloudinaryAuth,
|
||||
name: 'transformResource',
|
||||
displayName: 'Transform Resource',
|
||||
description: 'Apply transformations (resize, crop, watermark, etc.) to an asset and generate a new URL.',
|
||||
props: {
|
||||
resource_type: resourceTypeDropdown,
|
||||
public_ids_dropdown: publicIdsDropdown,
|
||||
public_id_manual: Property.ShortText({
|
||||
displayName: 'Manual Public ID',
|
||||
description: 'Or enter public ID manually if not in dropdown',
|
||||
required: false,
|
||||
}),
|
||||
|
||||
width: Property.Number({
|
||||
displayName: 'Width',
|
||||
description: 'Target width in pixels',
|
||||
required: false,
|
||||
}),
|
||||
height: Property.Number({
|
||||
displayName: 'Height',
|
||||
description: 'Target height in pixels',
|
||||
required: false,
|
||||
}),
|
||||
crop_mode: Property.StaticDropdown({
|
||||
displayName: 'Crop Mode',
|
||||
description: 'How to handle resizing when aspect ratios differ',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Scale (fit within bounds)', value: 'scale' },
|
||||
{ label: 'Fill (crop to exact size)', value: 'fill' },
|
||||
{ label: 'Fit (pad to exact size)', value: 'fit' },
|
||||
{ label: 'Crop (exact size, smart cropping)', value: 'crop' },
|
||||
{ label: 'Thumb (face-aware cropping)', value: 'thumb' },
|
||||
{ label: 'Limit (only scale down)', value: 'limit' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
gravity: Property.StaticDropdown({
|
||||
displayName: 'Gravity',
|
||||
description: 'Which part to focus on when cropping',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Auto (smart cropping)', value: 'auto' },
|
||||
{ label: 'Face detection', value: 'face' },
|
||||
{ label: 'Center', value: 'center' },
|
||||
{ label: 'North (top)', value: 'north' },
|
||||
{ label: 'South (bottom)', value: 'south' },
|
||||
{ label: 'East (right)', value: 'east' },
|
||||
{ label: 'West (left)', value: 'west' },
|
||||
{ label: 'Northwest (top-left)', value: 'north_west' },
|
||||
{ label: 'Northeast (top-right)', value: 'north_east' },
|
||||
{ label: 'Southwest (bottom-left)', value: 'south_west' },
|
||||
{ label: 'Southeast (bottom-right)', value: 'south_east' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
|
||||
format: Property.StaticDropdown({
|
||||
displayName: 'Output Format',
|
||||
description: 'Convert to this format',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Auto (best format for browser)', value: 'auto' },
|
||||
{ label: 'JPEG', value: 'jpg' },
|
||||
{ label: 'PNG', value: 'png' },
|
||||
{ label: 'WebP', value: 'webp' },
|
||||
{ label: 'AVIF', value: 'avif' },
|
||||
{ label: 'GIF', value: 'gif' },
|
||||
{ label: 'SVG', value: 'svg' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
quality: Property.StaticDropdown({
|
||||
displayName: 'Quality',
|
||||
description: 'Image quality/compression level',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Auto (optimal for format)', value: 'auto' },
|
||||
{ label: 'High (90)', value: '90' },
|
||||
{ label: 'Good (80)', value: '80' },
|
||||
{ label: 'Medium (70)', value: '70' },
|
||||
{ label: 'Low (50)', value: '50' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
|
||||
border: Property.ShortText({
|
||||
displayName: 'Border',
|
||||
description: 'Add border (e.g., "5px_solid_blue", "10px_solid_#ff0000")',
|
||||
required: false,
|
||||
}),
|
||||
radius: Property.StaticDropdown({
|
||||
displayName: 'Border Radius',
|
||||
description: 'Round corners or make circular',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Slight rounding (10px)', value: '10' },
|
||||
{ label: 'Rounded corners (20px)', value: '20' },
|
||||
{ label: 'Very rounded (50px)', value: '50' },
|
||||
{ label: 'Circle/Oval (max)', value: 'max' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
opacity: Property.Number({
|
||||
displayName: 'Opacity',
|
||||
description: 'Transparency level (0-100, where 100 is opaque)',
|
||||
required: false,
|
||||
}),
|
||||
rotation: Property.Number({
|
||||
displayName: 'Rotation',
|
||||
description: 'Rotate image by degrees (0-360)',
|
||||
required: false,
|
||||
}),
|
||||
|
||||
raw_transformation: Property.LongText({
|
||||
displayName: 'Raw Transformation',
|
||||
description: 'Advanced: Raw transformation string (e.g., "c_fill,w_300,h_200/e_sepia/r_20"). This will be applied after the above basic transformations.',
|
||||
required: false,
|
||||
}),
|
||||
|
||||
generate_url_only: Property.Checkbox({
|
||||
displayName: 'Generate URL Only',
|
||||
description: 'If true, only return the transformation URL. If false, also make a request to generate the transformed asset.',
|
||||
required: false,
|
||||
defaultValue: true,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const {
|
||||
resource_type,
|
||||
public_ids_dropdown,
|
||||
public_id_manual,
|
||||
width,
|
||||
height,
|
||||
crop_mode,
|
||||
gravity,
|
||||
format,
|
||||
quality,
|
||||
border,
|
||||
radius,
|
||||
opacity,
|
||||
rotation,
|
||||
raw_transformation,
|
||||
generate_url_only
|
||||
} = propsValue;
|
||||
|
||||
let public_id: string;
|
||||
if (Array.isArray(public_ids_dropdown) && public_ids_dropdown.length > 0) {
|
||||
public_id = public_ids_dropdown[0] as string;
|
||||
} else if (public_id_manual) {
|
||||
public_id = public_id_manual;
|
||||
} else {
|
||||
throw new Error('Please select an asset from dropdown or enter a public ID manually.');
|
||||
}
|
||||
|
||||
const cloud_name = auth.props.cloud_name.trim();
|
||||
|
||||
const transformations: string[] = [];
|
||||
|
||||
const basicParams: string[] = [];
|
||||
if (width) basicParams.push(`w_${width}`);
|
||||
if (height) basicParams.push(`h_${height}`);
|
||||
if (crop_mode) basicParams.push(`c_${crop_mode}`);
|
||||
if (gravity) basicParams.push(`g_${gravity}`);
|
||||
|
||||
if (basicParams.length > 0) {
|
||||
transformations.push(basicParams.join(','));
|
||||
}
|
||||
|
||||
if (format) transformations.push(`f_${format}`);
|
||||
if (quality) transformations.push(`q_${quality}`);
|
||||
|
||||
if (border) transformations.push(`bo_${border}`);
|
||||
if (radius) transformations.push(`r_${radius}`);
|
||||
if (opacity !== undefined) transformations.push(`o_${opacity}`);
|
||||
if (rotation !== undefined) transformations.push(`a_${rotation}`);
|
||||
|
||||
if (raw_transformation) {
|
||||
transformations.push(raw_transformation);
|
||||
}
|
||||
|
||||
const transformationString = transformations.length > 0 ? transformations.join('/') + '/' : '';
|
||||
const transformationUrl = `https://res.cloudinary.com/${cloud_name}/${resource_type}/upload/${transformationString}${public_id}`;
|
||||
|
||||
let finalUrl = transformationUrl;
|
||||
if (format && format !== 'auto') {
|
||||
finalUrl = `${transformationUrl}.${format === 'jpg' ? 'jpg' : format}`;
|
||||
}
|
||||
|
||||
const result: any = {
|
||||
transformation_url: finalUrl,
|
||||
public_id: public_id,
|
||||
resource_type: resource_type,
|
||||
applied_transformations: transformations,
|
||||
cloud_name: cloud_name,
|
||||
};
|
||||
|
||||
if (!generate_url_only) {
|
||||
try {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.HEAD,
|
||||
url: finalUrl,
|
||||
});
|
||||
result.transformation_triggered = response.status >= 200 && response.status < 300;
|
||||
result.status_code = response.status;
|
||||
} catch (error) {
|
||||
result.transformation_triggered = false;
|
||||
result.error = 'Failed to trigger transformation generation';
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,162 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { cloudinaryAuth } from '../common/auth';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { makeRequest } from '../common/client';
|
||||
import crypto from 'crypto';
|
||||
|
||||
function generateSignature(params: Record<string, any>, apiSecret: string): string {
|
||||
const keys = Object.keys(params)
|
||||
.filter(k => !['file', 'cloud_name', 'resource_type', 'api_key'].includes(k) && params[k] !== undefined && params[k] !== '')
|
||||
.sort();
|
||||
const toSign = keys.map(k => `${k}=${params[k]}`).join('&');
|
||||
const signature = crypto.createHash('sha1').update(toSign + apiSecret).digest('hex');
|
||||
return signature;
|
||||
}
|
||||
|
||||
function getResourceType(extension: string, filename: string): 'image' | 'video' | 'raw' {
|
||||
const ext = (extension || filename.split('.').pop() || '').toLowerCase();
|
||||
if (['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'tiff', 'svg', 'ico'].includes(ext)) return 'image';
|
||||
if (['mp4', 'mov', 'avi', 'wmv', 'flv', 'mkv', 'webm', 'ogv', '3gp', 'm4v'].includes(ext)) return 'video';
|
||||
return 'raw';
|
||||
}
|
||||
|
||||
export const uploadResource = createAction({
|
||||
auth: cloudinaryAuth,
|
||||
name: 'uploadResource',
|
||||
displayName: 'Upload Resource',
|
||||
description: 'Upload a new image, video, or file to Cloudinary.',
|
||||
props: {
|
||||
file: Property.File({
|
||||
displayName: 'File',
|
||||
description: 'The file to upload to Cloudinary.',
|
||||
required: true,
|
||||
}),
|
||||
public_id: Property.ShortText({
|
||||
displayName: 'Public ID',
|
||||
description: 'The public ID for the uploaded resource. If not specified, a random ID will be generated.',
|
||||
required: false,
|
||||
}),
|
||||
folder: Property.Dropdown({
|
||||
auth: cloudinaryAuth,
|
||||
displayName: 'Folder',
|
||||
description: 'Select an existing folder or type a new folder path (e.g., "samples/animals")',
|
||||
required: false,
|
||||
refreshers: ['auth'],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await makeRequest(auth, HttpMethod.GET, `/folders`);
|
||||
const folders = response.folders || [];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: '(Root - no folder)', value: '' },
|
||||
...folders.map((folder: any) => ({
|
||||
label: folder.path,
|
||||
value: folder.path,
|
||||
})),
|
||||
],
|
||||
placeholder: 'Select a folder or type a new path',
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading folders - you can still type a folder path',
|
||||
};
|
||||
}
|
||||
},
|
||||
}),
|
||||
tags: Property.MultiSelectDropdown({
|
||||
auth: cloudinaryAuth,
|
||||
displayName: 'Tags',
|
||||
description: 'Select existing tags or type new ones',
|
||||
required: false,
|
||||
refreshers: ['auth'],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await makeRequest(auth, HttpMethod.GET, `/tags/image?max_results=100`);
|
||||
const tags = response.tags || [];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: tags.map((tag: string) => ({
|
||||
label: tag,
|
||||
value: tag,
|
||||
})),
|
||||
placeholder: 'Select existing tags or type new ones',
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading tags - you can still type tags manually',
|
||||
};
|
||||
}
|
||||
},
|
||||
}),
|
||||
overwrite: Property.Checkbox({
|
||||
displayName: 'Overwrite',
|
||||
description: 'Whether to overwrite existing assets with the same public ID.',
|
||||
required: false,
|
||||
defaultValue: true,
|
||||
}),
|
||||
use_filename: Property.Checkbox({
|
||||
displayName: 'Use Original Filename',
|
||||
description: 'Whether to use the original file name as the public ID.',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { file, public_id, folder, tags, overwrite, use_filename } = propsValue;
|
||||
const timestamp = Math.floor(Date.now() / 1000);
|
||||
const api_key = auth.props.api_key.trim();
|
||||
const api_secret = auth.props.api_secret.trim();
|
||||
|
||||
const paramsToSign: Record<string, any> = {
|
||||
timestamp,
|
||||
};
|
||||
|
||||
if (public_id) paramsToSign['public_id'] = public_id;
|
||||
if (folder) paramsToSign['folder'] = folder;
|
||||
if (tags && tags.length > 0) paramsToSign['tags'] = tags.join(',');
|
||||
if (overwrite !== undefined) paramsToSign['overwrite'] = overwrite;
|
||||
if (use_filename !== undefined) paramsToSign['use_filename'] = use_filename;
|
||||
|
||||
const signature = generateSignature(paramsToSign, api_secret);
|
||||
const resource_type = getResourceType(file.extension ?? '', file.filename);
|
||||
|
||||
const FormData = (await import('form-data')).default;
|
||||
const form = new FormData();
|
||||
|
||||
form.append('file', Buffer.from(file.data), file.filename);
|
||||
form.append('signature', signature);
|
||||
form.append('api_key', api_key);
|
||||
form.append('timestamp', timestamp.toString());
|
||||
|
||||
if (public_id) form.append('public_id', public_id);
|
||||
if (folder) form.append('folder', folder);
|
||||
if (tags && tags.length > 0) form.append('tags', tags.join(','));
|
||||
if (overwrite !== undefined) form.append('overwrite', overwrite.toString());
|
||||
if (use_filename !== undefined) form.append('use_filename', use_filename.toString());
|
||||
|
||||
return await makeRequest(auth, HttpMethod.POST, `/${resource_type}/upload`, form);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,48 @@
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { PieceAuth, Property } from '@activepieces/pieces-framework';
|
||||
import { makeRequest } from './client';
|
||||
import { AppConnectionType } from '@activepieces/shared';
|
||||
|
||||
export const cloudinaryAuth = PieceAuth.CustomAuth({
|
||||
required: true,
|
||||
description: 'Enter your Cloudinary account credentials. Find these in your Cloudinary Console settings under the API keys page.',
|
||||
props: {
|
||||
api_key: Property.ShortText({
|
||||
displayName: 'API Key',
|
||||
description: 'Your Cloudinary API Key. Found in Console Settings → API Keys page.',
|
||||
required: true,
|
||||
}),
|
||||
api_secret: PieceAuth.SecretText({
|
||||
displayName: 'API Secret',
|
||||
description: 'Your Cloudinary API Secret. Found in Console Settings → API Keys page. Keep this secure and never share publicly.',
|
||||
required: true,
|
||||
}),
|
||||
cloud_name: Property.ShortText({
|
||||
displayName: 'Cloud Name',
|
||||
description: 'Your Cloudinary Cloud Name. Found in Console Settings → API Keys page or in your dashboard URL (e.g., "demo" from console.cloudinary.com/console/demo).',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
validate: async ({ auth }) => {
|
||||
try {
|
||||
if (!auth) {
|
||||
return {
|
||||
valid: false,
|
||||
error: 'Authentication credentials are required. Please provide your API Key, API Secret, and Cloud Name from your Cloudinary Console.',
|
||||
};
|
||||
}
|
||||
await makeRequest({
|
||||
type: AppConnectionType.CUSTOM_AUTH,
|
||||
props: auth,
|
||||
}, HttpMethod.GET, '/folders');
|
||||
return {
|
||||
valid: true,
|
||||
};
|
||||
} catch (error: any) {
|
||||
return {
|
||||
valid: false,
|
||||
error: 'Invalid credentials. Please check your API Key, API Secret, and Cloud Name in your Cloudinary Console Settings → API Keys page.',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,66 @@
|
||||
import { HttpMethod, httpClient } from '@activepieces/pieces-common';
|
||||
import { AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
|
||||
import { BasicAuthConnectionValue, CustomAuthConnectionValue } from '@activepieces/shared';
|
||||
import { cloudinaryAuth } from './auth';
|
||||
|
||||
export const BASE_URL = 'https://api.cloudinary.com/v1_1';
|
||||
|
||||
export async function makeRequest(
|
||||
auth: AppConnectionValueForAuthProperty<typeof cloudinaryAuth>,
|
||||
method: HttpMethod,
|
||||
path: string,
|
||||
body?: unknown,
|
||||
queryParams?: Record<string, any>,
|
||||
) {
|
||||
try {
|
||||
const api_key = auth.props.api_key.trim();
|
||||
const api_secret = auth.props.api_secret.trim();
|
||||
const cloud_name = auth.props.cloud_name.trim();
|
||||
|
||||
let headers: Record<string, string> = {};
|
||||
|
||||
|
||||
if (body && typeof body === 'object' && typeof (body as any).getHeaders === 'function') {
|
||||
headers = {
|
||||
...headers,
|
||||
...(body as any).getHeaders(),
|
||||
};
|
||||
} else {
|
||||
headers = {
|
||||
'Authorization': `Basic ${Buffer.from(`${api_key}:${api_secret}`).toString('base64')}`,
|
||||
'Content-Type': 'application/json',
|
||||
};
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method,
|
||||
url: `${BASE_URL}/${cloud_name}${path}`,
|
||||
headers,
|
||||
body,
|
||||
queryParams,
|
||||
});
|
||||
|
||||
return response.body;
|
||||
} catch (error: any) {
|
||||
if (error.response) {
|
||||
const status = error.response.status;
|
||||
switch (status) {
|
||||
case 400:
|
||||
throw new Error(`Bad request: ${error.response.body?.error?.message || 'Invalid request parameters'}`);
|
||||
case 401:
|
||||
throw new Error(`Authorization required: ${error.response.body?.error?.message || 'Invalid API credentials'}`);
|
||||
case 403:
|
||||
throw new Error(`Not allowed: ${error.response.body?.error?.message || 'Insufficient permissions'}`);
|
||||
case 404:
|
||||
throw new Error(`Not found: ${error.response.body?.error?.message || 'Resource not found'}`);
|
||||
case 420:
|
||||
throw new Error(`Rate limited: ${error.response.body?.error?.message || 'Too many requests'}`);
|
||||
case 500:
|
||||
throw new Error(`Internal server error: ${error.response.body?.error?.message || 'Cloudinary server error'}`);
|
||||
default:
|
||||
throw new Error(`Request failed (${status}): ${error.response.body?.error?.message || 'Unknown error'}`);
|
||||
}
|
||||
}
|
||||
throw new Error(`Request failed: ${error.message || 'Unknown error'}`);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,325 @@
|
||||
import { Property } from "@activepieces/pieces-framework";
|
||||
import { makeRequest } from "./client";
|
||||
import { HttpMethod } from "@activepieces/pieces-common";
|
||||
import { cloudinaryAuth } from "./auth";
|
||||
|
||||
export const resourceTypeDropdown = Property.Dropdown({
|
||||
auth: cloudinaryAuth,
|
||||
displayName: 'Resource Type',
|
||||
description: 'Select the type of resource to upload to Cloudinary.',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async () => {
|
||||
return {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'Image', value: 'image' },
|
||||
{ label: 'Video', value: 'video' },
|
||||
{ label: 'Raw', value: 'raw' },
|
||||
],
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const resourceDropdown = Property.Dropdown({
|
||||
auth: cloudinaryAuth,
|
||||
displayName: 'Resource ID',
|
||||
description: 'Select the team containing the database',
|
||||
required: true,
|
||||
refreshers: ['auth', 'resource_type'],
|
||||
options: async ({ auth, resource_type }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const resources = await makeRequest(auth, HttpMethod.GET, `/resources/${resource_type}`);
|
||||
return {
|
||||
disabled: false,
|
||||
options: resources.resources.map((resource: any) => ({
|
||||
label: resource.public_id,
|
||||
value: resource.asset_id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading teams',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const resourceAssetIdsDropdown = Property.MultiSelectDropdown({
|
||||
auth: cloudinaryAuth,
|
||||
displayName: 'Resource Ids',
|
||||
description: 'Select the Resource',
|
||||
required: true,
|
||||
refreshers: ['auth', 'resource_type'],
|
||||
options: async ({ auth, resource_type }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const resources = await makeRequest(auth, HttpMethod.GET, `/resources/${resource_type}`);
|
||||
return {
|
||||
disabled: false,
|
||||
options: resources.resources.map((resource: any) => ({
|
||||
label: resource.public_id,
|
||||
value: resource.asset_id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading teams',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const folderDropdown = Property.Dropdown({
|
||||
auth: cloudinaryAuth,
|
||||
displayName: 'Folder',
|
||||
description: 'Select an existing folder or type a new folder path',
|
||||
required: false,
|
||||
refreshers: ['auth'],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await makeRequest(auth, HttpMethod.GET, `/folders`);
|
||||
const folders = response.folders || [];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: '(Root - no folder)', value: '' },
|
||||
...folders.map((folder: any) => ({
|
||||
label: folder.path,
|
||||
value: folder.path,
|
||||
})),
|
||||
],
|
||||
placeholder: 'Select a folder or type a new path',
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading folders - you can still type a folder path',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const tagsDropdown = Property.Dropdown({
|
||||
auth: cloudinaryAuth,
|
||||
displayName: 'Tags',
|
||||
description: 'Select existing tags or type new ones (comma-separated)',
|
||||
required: false,
|
||||
refreshers: ['auth', 'resource_type'],
|
||||
options: async ({ auth, resource_type }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
|
||||
const type = resource_type || 'image';
|
||||
|
||||
try {
|
||||
const response = await makeRequest(auth, HttpMethod.GET, `/tags/${type}?max_results=100`);
|
||||
const tags = response.tags || [];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: tags.map((tag: string) => ({
|
||||
label: tag,
|
||||
value: tag,
|
||||
})),
|
||||
placeholder: 'Select existing tags or type new ones',
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading tags - you can still type tags manually',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const multiTagsDropdown = Property.MultiSelectDropdown({
|
||||
auth: cloudinaryAuth,
|
||||
displayName: 'Tags',
|
||||
description: 'Select multiple existing tags',
|
||||
required: false,
|
||||
refreshers: ['auth', 'resource_type'],
|
||||
options: async ({ auth, resource_type }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
|
||||
const type = resource_type || 'image';
|
||||
|
||||
try {
|
||||
const response = await makeRequest(auth, HttpMethod.GET, `/tags/${type}?max_results=100`);
|
||||
const tags = response.tags || [];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: tags.map((tag: string) => ({
|
||||
label: tag,
|
||||
value: tag,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading tags',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const subfolderDropdown = Property.Dropdown({
|
||||
auth: cloudinaryAuth,
|
||||
displayName: 'Subfolder',
|
||||
description: 'Select a subfolder within the parent folder',
|
||||
required: false,
|
||||
refreshers: ['auth', 'folder'],
|
||||
options: async ({ auth, folder }) => {
|
||||
if (!auth || !folder) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please select a parent folder first',
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await makeRequest(auth, HttpMethod.GET, `/folders/${encodeURIComponent(folder as string)}`);
|
||||
const subfolders = response.folders || [];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: '(No subfolder)', value: '' },
|
||||
...subfolders.map((folder: any) => ({
|
||||
label: folder.name,
|
||||
value: folder.path,
|
||||
})),
|
||||
],
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading subfolders',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const publicIdsDropdown = Property.MultiSelectDropdown({
|
||||
auth: cloudinaryAuth,
|
||||
displayName: 'Public IDs',
|
||||
description: 'Select assets to delete by their public IDs',
|
||||
required: false,
|
||||
refreshers: ['auth', 'resource_type'],
|
||||
options: async ({ auth, resource_type }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
|
||||
const type = resource_type || 'image';
|
||||
|
||||
try {
|
||||
const response = await makeRequest(auth, HttpMethod.GET, `/resources/${type}?max_results=100`);
|
||||
const resources = response.resources || [];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: resources.map((resource: any) => ({
|
||||
label: `${resource.public_id} (${resource.format || 'unknown'})`,
|
||||
value: resource.public_id,
|
||||
})),
|
||||
placeholder: 'Select assets to delete',
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading assets - you can still type public IDs manually',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
// Single-select version for finding a specific resource
|
||||
export const publicIdDropdown = Property.Dropdown({
|
||||
auth: cloudinaryAuth,
|
||||
displayName: 'Public ID',
|
||||
description: 'Select an asset to find by its public ID',
|
||||
required: false,
|
||||
refreshers: ['auth', 'resource_type'],
|
||||
options: async ({ auth, resource_type }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
|
||||
const type = resource_type || 'image';
|
||||
|
||||
try {
|
||||
const response = await makeRequest(auth, HttpMethod.GET, `/resources/${type}?max_results=100`);
|
||||
const resources = response.resources || [];
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: resources.map((resource: any) => ({
|
||||
label: `${resource.public_id} (${resource.format || 'unknown'})`,
|
||||
value: resource.public_id,
|
||||
})),
|
||||
placeholder: 'Select an asset to find',
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading assets - you can still type public ID manually',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,89 @@
|
||||
|
||||
import {
|
||||
DedupeStrategy,
|
||||
HttpMethod,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import {
|
||||
AppConnectionValueForAuthProperty,
|
||||
PiecePropValueSchema,
|
||||
Property,
|
||||
StaticPropsValue,
|
||||
TriggerStrategy,
|
||||
createTrigger,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { cloudinaryAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
const props = {
|
||||
asset_folder: Property.ShortText({
|
||||
displayName: 'Asset Folder',
|
||||
description: 'The Cloudinary folder to watch for new resources. Leave empty to watch the entire account.',
|
||||
required: false,
|
||||
}),
|
||||
};
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof cloudinaryAuth>, StaticPropsValue<typeof props>> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, propsValue }) => {
|
||||
let endpoint = '/resources/image'; // Default to all resources
|
||||
|
||||
if (propsValue.asset_folder && propsValue.asset_folder.trim()) {
|
||||
endpoint = `/resources/by_asset_folder?asset_folder=${encodeURIComponent(propsValue.asset_folder.trim())}`;
|
||||
}
|
||||
|
||||
const resources = await makeRequest(auth, HttpMethod.GET, endpoint);
|
||||
|
||||
return (resources.resources || []).map((item: any) => ({
|
||||
epochMilliSeconds: dayjs(item.created_at).valueOf(),
|
||||
data: item,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export const newResourceInFolder = createTrigger({
|
||||
auth: cloudinaryAuth,
|
||||
name: 'new_resource',
|
||||
displayName: 'New Resource',
|
||||
description: 'Triggers when a new image, video, or file is uploaded to a specific folder or account in Cloudinary.',
|
||||
props,
|
||||
sampleData: {
|
||||
"asset_id": "bcace221f5b11685dd6effb9d69d5ec3",
|
||||
"public_id": "signature_snc5z4",
|
||||
"format": "png",
|
||||
"version": 1752843735,
|
||||
"resource_type": "image",
|
||||
"type": "upload",
|
||||
"created_at": "2025-07-18T13:02:15Z",
|
||||
"bytes": 13685,
|
||||
"width": 667,
|
||||
"height": 276,
|
||||
"asset_folder": "Testr",
|
||||
"display_name": "signature_snc5z4",
|
||||
"url": "http://res.cloudinary.com/dndacs7ddse/image/upload/v1752843735/signature_snc5z4.png",
|
||||
"secure_url": "https://res.cloudinary.com/dndacs7sdde/image/upload/v1752843735/signature_snc5z4.png"
|
||||
},
|
||||
type: TriggerStrategy.POLLING,
|
||||
async onEnable(context) {
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async onDisable(context) {
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,127 @@
|
||||
|
||||
import {
|
||||
DedupeStrategy,
|
||||
HttpMethod,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import {
|
||||
AppConnectionValueForAuthProperty,
|
||||
PiecePropValueSchema,
|
||||
Property,
|
||||
StaticPropsValue,
|
||||
TriggerStrategy,
|
||||
createTrigger,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { cloudinaryAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
const props = {
|
||||
resource_type: Property.StaticDropdown({
|
||||
displayName: 'Resource Type',
|
||||
description: 'The type of resources to monitor for tag changes',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Image', value: 'image' },
|
||||
{ label: 'Video', value: 'video' },
|
||||
{ label: 'Raw', value: 'raw' },
|
||||
],
|
||||
},
|
||||
defaultValue: 'image',
|
||||
}),
|
||||
asset_folder: Property.ShortText({
|
||||
displayName: 'Asset Folder',
|
||||
description: 'Optional: Watch only assets in this specific folder. Leave empty to watch all assets.',
|
||||
required: false,
|
||||
}),
|
||||
};
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof cloudinaryAuth>, StaticPropsValue<typeof props>> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, propsValue, lastFetchEpochMS }) => {
|
||||
const resourceType = propsValue.resource_type || 'image';
|
||||
const endpoint = `/resources/${resourceType}`;
|
||||
|
||||
const queryParams: Record<string, string> = {};
|
||||
if (propsValue.asset_folder && propsValue.asset_folder.trim()) {
|
||||
queryParams['prefix'] = propsValue.asset_folder.trim();
|
||||
}
|
||||
|
||||
const response = await makeRequest(auth, HttpMethod.GET, endpoint, undefined, queryParams);
|
||||
const items = response.resources || [];
|
||||
|
||||
return items
|
||||
.filter((item: any) => {
|
||||
const tagUpdatedAt = item.last_updated?.tags_updated_at;
|
||||
if (!tagUpdatedAt) return false;
|
||||
|
||||
const updatedTime = dayjs(tagUpdatedAt).valueOf();
|
||||
return updatedTime > (lastFetchEpochMS || 0);
|
||||
})
|
||||
.map((item: any) => {
|
||||
const tagUpdatedAt = item.last_updated?.tags_updated_at;
|
||||
return {
|
||||
epochMilliSeconds: dayjs(tagUpdatedAt).valueOf(),
|
||||
data: {
|
||||
...item,
|
||||
trigger_type: 'tag_added',
|
||||
tags_updated_at: tagUpdatedAt,
|
||||
},
|
||||
};
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
export const newTagAddedToAsset = createTrigger({
|
||||
auth: cloudinaryAuth,
|
||||
name: 'new_tag_added_to_asset',
|
||||
displayName: 'New Tag Added to Asset',
|
||||
description: 'Triggers when a tag is added to an asset in Cloudinary.',
|
||||
props,
|
||||
sampleData: {
|
||||
"asset_id": "d78ae88939e267ca6f3b5a352648259d",
|
||||
"public_id": "sample_image",
|
||||
"format": "png",
|
||||
"version": 1752588559,
|
||||
"resource_type": "image",
|
||||
"type": "upload",
|
||||
"created_at": "2025-07-15T14:09:19Z",
|
||||
"bytes": 13685,
|
||||
"width": 667,
|
||||
"height": 276,
|
||||
"asset_folder": "",
|
||||
"display_name": "sample_image",
|
||||
"tags": ["nature", "landscape", "sunset"],
|
||||
"url": "http://res.cloudinary.com/<cloud_name>/image/upload/v1752588559/sample_image.png",
|
||||
"secure_url": "https://res.cloudinary.com/<cloud_name>/image/upload/v1752588559/sample_image.png",
|
||||
"last_updated": {
|
||||
"tags_updated_at": "2025-07-15T17:37:12+00:00",
|
||||
"updated_at": "2025-07-15T17:37:12+00:00"
|
||||
},
|
||||
"trigger_type": "tag_added",
|
||||
"tags_updated_at": "2025-07-15T17:37:12+00:00"
|
||||
},
|
||||
type: TriggerStrategy.POLLING,
|
||||
async onEnable(context) {
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async onDisable(context) {
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"extends": "../../../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"noImplicitOverride": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noPropertyAccessFromIndexSignature": true
|
||||
},
|
||||
"files": [],
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.lib.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"outDir": "../../../../dist/out-tsc",
|
||||
"declaration": true,
|
||||
"types": ["node"]
|
||||
},
|
||||
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"],
|
||||
"include": ["src/**/*.ts"]
|
||||
}
|
||||
Reference in New Issue
Block a user