+ )
+ }
+
+ if (!canView || accessDenied) {
+ return (
+ <>
+ {renderHeader?.(null)}
+
+
+
+
+
+ {t("On-demand migration is unavailable")}
+
+ {t("You do not have permission to view this bucket's migration settings.")}
+
+
+
+ >
+ )
+ }
+
+ if (supported === false) {
+ return (
+ <>
+ {renderHeader?.(null)}
+
+
+
+
+
+ {t("On-demand migration is not available on this server")}
+
+ {t("Upgrade RustFS to a version that provides the on-demand migration admin API.")}
+
+
+
+ >
+ )
+ }
+
+ if (loadError) {
+ return (
+ <>
+ {renderHeader?.(actions)}
+
+
+ {t("Unable to load on-demand migration")}
+
+
{loadError}
+
+
+
+ >
+ )
+ }
+
+ return (
+ <>
+ {renderHeader?.(actions)}
+
+ {status && !status.module_enabled ? (
+
+
+ {t("On-demand migration is not enabled on this server")}
+
+ {t(
+ "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.",
+ )}
+
+
+ ) : null}
+
+ {status?.configured ? (
+
+
+ {t("Plan a read-only source cutover")}
+
+ {t(
+ "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.",
+ )}
+
+
+ ) : null}
+
+
+ {status?.configured ? (
+
+
+
+
+ }
+ >
+
+ )
+ }
+
+ const state = loadError
+ ? { label: t("Unavailable"), variant: "destructive" as const }
+ : !status?.configured
+ ? { label: t("Not configured"), variant: "outline" as const }
+ : !status.module_enabled
+ ? { label: t("Server module disabled"), variant: "destructive" as const }
+ : !status.enabled
+ ? { label: t("Migration paused"), variant: "outline" as const }
+ : status.breaker?.state === "open"
+ ? { label: t("Source circuit open"), variant: "destructive" as const }
+ : { label: t("Migration active"), variant: "secondary" as const }
+
+ return (
+ }
+ >
+ {status?.configured ? t("Manage migration") : t("Open migration settings")}
+
+
+ }
+ error={loadError || undefined}
+ errorTitle={t("Unable to load this setting")}
+ retryLabel={t("Retry")}
+ onRetry={loadStatus}
+ />
+ )
+}
diff --git a/components/top-nav-breadcrumb.tsx b/components/top-nav-breadcrumb.tsx
index 15de5733..37add0db 100644
--- a/components/top-nav-breadcrumb.tsx
+++ b/components/top-nav-breadcrumb.tsx
@@ -20,7 +20,9 @@ function getLabelByPath(pathSegment: string, t: (k: string) => string): string {
const nav = navs.find(
(n) => n.type !== "divider" && n.to && (n.to === path || n.to.replace(/^\//, "") === pathSegment),
)
- return nav?.label ? t(nav.label) : pathSegment
+ if (nav?.label) return t(nav.label)
+ if (path === "/on-demand-migration") return t("On-demand migration")
+ return pathSegment
}
export function TopNavBreadcrumb() {
diff --git a/hooks/use-on-demand-migration.ts b/hooks/use-on-demand-migration.ts
new file mode 100644
index 00000000..ffe067cc
--- /dev/null
+++ b/hooks/use-on-demand-migration.ts
@@ -0,0 +1,46 @@
+"use client"
+
+import * as React from "react"
+import { useApi } from "@/contexts/api-context"
+import type {
+ OnDemandMigrationBackfillRequest,
+ OnDemandMigrationBackfillResponse,
+ OnDemandMigrationConfig,
+ OnDemandMigrationGetResponse,
+ OnDemandMigrationSetResponse,
+ OnDemandMigrationStatus,
+} from "@/types/on-demand-migration"
+
+const pathFor = (bucket: string) => `/on-demand-migration/${encodeURIComponent(bucket)}`
+const requestOptions = { suppress403Redirect: true, dedupe: false } as const
+
+export function useOnDemandMigration() {
+ const api = useApi()
+
+ return React.useMemo(
+ () => ({
+ getConfig: (bucket: string) => api.get(pathFor(bucket), requestOptions) as Promise,
+ getStatus: (bucket: string) =>
+ api.get(`${pathFor(bucket)}/status`, requestOptions) as Promise,
+ setConfig: (bucket: string, config: OnDemandMigrationConfig, dryRun = false) =>
+ api.put(pathFor(bucket), config, {
+ ...requestOptions,
+ params: dryRun ? { "dry-run": "true" } : undefined,
+ }) as Promise,
+ deleteConfig: (bucket: string) => api.delete(pathFor(bucket), requestOptions) as Promise,
+ getBackfill: (bucket: string) =>
+ api.get(`${pathFor(bucket)}/backfill`, requestOptions) as Promise,
+ startBackfill: (bucket: string, request: OnDemandMigrationBackfillRequest) =>
+ api.post(`${pathFor(bucket)}/backfill`, request, {
+ ...requestOptions,
+ params: { op: "start" },
+ }) as Promise,
+ cancelBackfill: (bucket: string) =>
+ api.post(`${pathFor(bucket)}/backfill`, undefined, {
+ ...requestOptions,
+ params: { op: "cancel" },
+ }) as Promise,
+ }),
+ [api],
+ )
+}
diff --git a/i18n/locales/ar-MA.json b/i18n/locales/ar-MA.json
index b80e635c..c3d9bddd 100644
--- a/i18n/locales/ar-MA.json
+++ b/i18n/locales/ar-MA.json
@@ -1966,5 +1966,255 @@
"The destination was copied, but source deletion could not be confirmed. Check both locations before retrying.": "تم نسخ الكائن إلى الوجهة، لكن تعذّر تأكيد حذف المصدر. تحقّق من الموقعين قبل إعادة المحاولة.",
"The source changed or the destination already exists. Refresh and choose a different destination.": "تغيّر المصدر أو أن الوجهة موجودة بالفعل. حدّث الصفحة واختر وجهة أخرى.",
"Show key": "إظهار المفتاح",
- "Hide key": "إخفاء المفتاح"
+ "Hide key": "إخفاء المفتاح",
+ "0 disables the cache; maximum 3600.": "0 disables the cache; maximum 3600.",
+ "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.": "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.",
+ "100–600000 ms between source body chunks.": "100–600000 ms between source body chunks.",
+ "100–600000 ms.": "100–600000 ms.",
+ "1–256 across inline, background, and backfill work.": "1–256 across inline, background, and backfill work.",
+ "1–65536 waiting background pulls.": "1–65536 waiting background pulls.",
+ "5242880–5368709120 bytes (5 MiB–5 GiB).": "5242880–5368709120 bytes (5 MiB–5 GiB).",
+ "A backfill job is already running": "A backfill job is already running",
+ "A local versioned delete marker prevents the object from being pulled again.": "A local versioned delete marker prevents the object from being pulled again.",
+ "AWS regions may contain only letters, numbers, and hyphens.": "AWS regions may contain only letters, numbers, and hyphens.",
+ "Access key is required.": "Access key is required.",
+ "Account key": "Account key",
+ "Addressing style": "Addressing style",
+ "Adds source requests to listings so clients can see objects not yet migrated.": "Adds source requests to listings so clients can see objects not yet migrated.",
+ "All keys": "All keys",
+ "Always skip": "Always skip",
+ "Amazon S3": "Amazon S3",
+ "Any current local object is skipped.": "Any current local object is skipped.",
+ "Automatic": "Automatic",
+ "Azure Blob Storage (Native)": "Azure Blob Storage (Native)",
+ "Azure account key must be valid Base64.": "Azure account key must be valid Base64.",
+ "Azure account may contain only letters, numbers, and hyphens.": "Azure account may contain only letters, numbers, and hyphens.",
+ "Azure credential type": "Azure credential type",
+ "Azure storage account": "Azure storage account",
+ "Azure storage account is required.": "Azure storage account is required.",
+ "Backfill cancellation requested": "Backfill cancellation requested",
+ "Backfill cancelled": "Backfill cancelled",
+ "Backfill cannot start until the module is enabled on every server node.": "Backfill cannot start until the module is enabled on every server node.",
+ "Backfill completed": "Backfill completed",
+ "Backfill completed with failures": "Backfill completed with failures",
+ "Backfill dry run started": "Backfill dry run started",
+ "Backfill failed": "Backfill failed",
+ "Backfill in progress": "Backfill in progress",
+ "Backfill operation failed": "Backfill operation failed",
+ "Backfill paused": "Backfill paused",
+ "Backfill pending": "Backfill pending",
+ "Backfill running": "Backfill running",
+ "Backfill started": "Backfill started",
+ "Background backfill": "Background backfill",
+ "Bandwidth limit (bytes/s, optional)": "Bandwidth limit (bytes/s, optional)",
+ "Bandwidth limit must be a whole number of at least 65536 bytes/s.": "Bandwidth limit must be a whole number of at least 65536 bytes/s.",
+ "Breaker closed": "Breaker closed",
+ "Breaker half-open": "Breaker half-open",
+ "Breaker open": "Breaker open",
+ "CA certificate (PEM, optional)": "CA certificate (PEM, optional)",
+ "CA certificate must be PEM encoded.": "CA certificate must be PEM encoded.",
+ "Cancel backfill": "Cancel backfill",
+ "Cancel the running backfill?": "Cancel the running backfill?",
+ "Cancelling": "Cancelling",
+ "Circuit breaker": "Circuit breaker",
+ "Compare source ETag and size": "Compare source ETag and size",
+ "Concurrent pulls": "Concurrent pulls",
+ "Concurrent pulls must be a whole number from 1 to 256.": "Concurrent pulls must be a whole number from 1 to 256.",
+ "Configuration changed on the server. Refresh and review it before disabling migration.": "Configuration changed on the server. Refresh and review it before disabling migration.",
+ "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.": "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.",
+ "Connect this bucket to an external source without interrupting reads.": "Connect this bucket to an external source without interrupting reads.",
+ "Connect timeout (ms)": "Connect timeout (ms)",
+ "Connect timeout must be a whole number from 100 to 600000.": "Connect timeout must be a whole number from 100 to 600000.",
+ "Connection test passed": "Connection test passed",
+ "Copy object tags": "Copy object tags",
+ "Create a bucket before configuring an external migration source.": "Create a bucket before configuring an external migration source.",
+ "Credentials are write-only": "Credentials are write-only",
+ "Custom endpoint (optional)": "Custom endpoint (optional)",
+ "Data": "Data",
+ "Disable": "Disable",
+ "Disable migration": "Disable migration",
+ "Disable on-demand migration?": "Disable on-demand migration?",
+ "Disabling": "Disabling",
+ "Discard changes": "Discard changes",
+ "Discard unsaved changes?": "Discard unsaved changes?",
+ "Edit on-demand migration": "Edit on-demand migration",
+ "Editing cancels the active backfill": "Editing cancels the active backfill",
+ "Emit object-created events": "Emit object-created events",
+ "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.": "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.",
+ "Enable migration": "Enable migration",
+ "Enable on-demand migration": "Enable on-demand migration",
+ "Endpoint host": "Endpoint host",
+ "Endpoint is required for this provider.": "Endpoint is required for this provider.",
+ "Enter a real region or auto.": "Enter a real region or auto.",
+ "Enter an absolute HTTP or HTTPS endpoint.": "Enter an absolute HTTP or HTTPS endpoint.",
+ "Enter the Base64 storage account key.": "Enter the Base64 storage account key.",
+ "Enter the SAS query string without a leading question mark.": "Enter the SAS query string without a leading question mark.",
+ "Existing local objects": "Existing local objects",
+ "Failed objects": "Failed objects",
+ "First-byte timeout (ms)": "First-byte timeout (ms)",
+ "First-byte timeout must be a whole number from 100 to 600000.": "First-byte timeout must be a whole number from 100 to 600000.",
+ "For security, re-enter the source credential before testing or saving any change.": "For security, re-enter the source credential before testing or saving any change.",
+ "Google Cloud Storage (HMAC)": "Google Cloud Storage (HMAC)",
+ "Google Cloud Storage (Native)": "Google Cloud Storage (Native)",
+ "HEAD requests": "HEAD requests",
+ "Idle timeout (ms)": "Idle timeout (ms)",
+ "Idle timeout must be a whole number from 100 to 600000.": "Idle timeout must be a whole number from 100 to 600000.",
+ "In-flight pulls": "In-flight pulls",
+ "Include source objects in ListObjectsV2": "Include source objects in ListObjectsV2",
+ "Inline object limit (bytes)": "Inline object limit (bytes)",
+ "Inline object limit must be a whole number from 0 to 268435456.": "Inline object limit must be a whole number from 0 to 268435456.",
+ "Keep editing": "Keep editing",
+ "Keep running": "Keep running",
+ "Keep the source ETag unless local bucket encryption replaces it.": "Keep the source ETag unless local bucket encryption replaces it.",
+ "Key mapping": "Key mapping",
+ "Last backfill error": "Last backfill error",
+ "Last source error": "Last source error",
+ "Latest job": "Latest job",
+ "Leave empty for unlimited; the server minimum is 65536 bytes/s.": "Leave empty for unlimited; the server minimum is 65536 bytes/s.",
+ "Leave empty to scan the complete configured source namespace.": "Leave empty to scan the complete configured source namespace.",
+ "Leave empty to use https://storage.googleapis.com.": "Leave empty to use https://storage.googleapis.com.",
+ "Leave empty to use the account's public Azure Blob endpoint.": "Leave empty to use the account's public Azure Blob endpoint.",
+ "Leave empty to use the regional Amazon S3 endpoint.": "Leave empty to use the regional Amazon S3 endpoint.",
+ "Lifetime on this node": "Lifetime on this node",
+ "List matching objects without queueing or writing any object.": "List matching objects without queueing or writing any object.",
+ "Listed": "Listed",
+ "Live counters from the RustFS node that answered this request.": "Live counters from the RustFS node that answered this request.",
+ "Loading on-demand migration settings": "Loading on-demand migration settings",
+ "Local only": "Local only",
+ "Local prefix": "Local prefix",
+ "Local prefix (optional)": "Local prefix (optional)",
+ "Manage migration": "Manage migration",
+ "Migrated data": "Migrated data",
+ "Migrated objects": "Migrated objects",
+ "Migration active": "Migration active",
+ "Migration configuration could not be saved": "Migration configuration could not be saved",
+ "Migration configuration updated": "Migration configuration updated",
+ "Migration not configured": "Migration not configured",
+ "Migration paused": "Migration paused",
+ "Missing local objects are served from this source and then stored locally.": "Missing local objects are served from this source and then stored locally.",
+ "Multipart part size (bytes)": "Multipart part size (bytes)",
+ "Multipart part size must be a whole number from 5242880 to 5368709120.": "Multipart part size must be a whole number from 5242880 to 5368709120.",
+ "Native GCS has no object tags, so no tags will be copied.": "Native GCS has no object tags, so no tags will be copied.",
+ "Negative cache TTL (seconds)": "Negative cache TTL (seconds)",
+ "Negative cache TTL must be a whole number from 0 to 3600.": "Negative cache TTL must be a whole number from 0 to 3600.",
+ "No added prefix": "No added prefix",
+ "No backfill yet": "No backfill yet",
+ "No background backfill has been started for this bucket.": "No background backfill has been started for this bucket.",
+ "No live runtime state on this node": "No live runtime state on this node",
+ "No migration source configured": "No migration source configured",
+ "No recorded pull failures": "No recorded pull failures",
+ "No runtime state": "No runtime state",
+ "No source error recorded": "No source error recorded",
+ "Objects already migrated remain in the local bucket. You can start a new job later.": "Objects already migrated remain in the local bucket. You can start a new job later.",
+ "Objects listed": "Objects listed",
+ "Objects pulled": "Objects pulled",
+ "Objects whose recorded source ETag and size differ are pulled again.": "Objects whose recorded source ETag and size differ are pulled again.",
+ "On-demand migration": "On-demand migration",
+ "On-demand migration disabled": "On-demand migration disabled",
+ "On-demand migration enabled": "On-demand migration enabled",
+ "On-demand migration is not available on this server": "On-demand migration is not available on this server",
+ "On-demand migration is not enabled on this server": "On-demand migration is not enabled on this server",
+ "On-demand migration is unavailable": "On-demand migration is unavailable",
+ "Only local keys with this prefix will consult the source.": "Only local keys with this prefix will consult the source.",
+ "Open license settings": "Open license settings",
+ "Open migration settings": "Open migration settings",
+ "Paste the issuing certificate when the source uses a private CA.": "Paste the issuing certificate when the source uses a private CA.",
+ "Path style": "Path style",
+ "Performance and limits": "Performance and limits",
+ "Plan a read-only source cutover": "Plan a read-only source cutover",
+ "Prepended to the local key when RustFS reads the source.": "Prepended to the local key when RustFS reads the source.",
+ "Preserve source ETag": "Preserve source ETag",
+ "Provide it only when the source credentials require a session token.": "Provide it only when the source credentials require a session token.",
+ "Provider": "Provider",
+ "Pull queue capacity": "Pull queue capacity",
+ "Pull queue capacity must be a whole number from 1 to 65536.": "Pull queue capacity must be a whole number from 1 to 65536.",
+ "Pulled": "Pulled",
+ "Queue depth": "Queue depth",
+ "Range GET requests": "Range GET requests",
+ "Re-enter the Azure credential to test or save changes.": "Re-enter the Azure credential to test or save changes.",
+ "Re-enter the secret key to test or save changes.": "Re-enter the secret key to test or save changes.",
+ "Re-enter the service account JSON to test or save changes.": "Re-enter the service account JSON to test or save changes.",
+ "Read behavior": "Read behavior",
+ "Read from source on a miss": "Read from source on a miss",
+ "Region is required.": "Region is required.",
+ "Requires admin:SetBucketOnDemandMigration": "Requires admin:SetBucketOnDemandMigration",
+ "Requires source tag-read permission and adds one request per pull.": "Requires source tag-read permission and adds one request per pull.",
+ "Respect local delete markers": "Respect local delete markers",
+ "Return Not Found": "Return Not Found",
+ "Return SourceUnavailable": "Return SourceUnavailable",
+ "Returning Not Found can make sync clients treat a temporary source failure as a deletion.": "Returning Not Found can make sync clients treat a temporary source failure as a deletion.",
+ "Runtime status": "Runtime status",
+ "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.": "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.",
+ "RustFS reached the source bucket and listed it successfully.": "RustFS reached the source bucket and listed it successfully.",
+ "RustFS reads from this source and never writes or deletes objects there.": "RustFS reads from this source and never writes or deletes objects there.",
+ "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.": "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.",
+ "S3-compatible storage": "S3-compatible storage",
+ "SAS token": "SAS token",
+ "SAS token must omit the leading question mark and whitespace.": "SAS token must omit the leading question mark and whitespace.",
+ "Sample object": "Sample object",
+ "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.": "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.",
+ "Saving": "Saving",
+ "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.": "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.",
+ "Scan the source and pull objects that have not been requested yet.": "Scan the source and pull objects that have not been requested yet.",
+ "Send normal bucket notifications when a pulled object is stored locally.": "Send normal bucket notifications when a pulled object is stored locally.",
+ "Serve missing objects from an external source while migrating them into RustFS.": "Serve missing objects from an external source while migrating them into RustFS.",
+ "Serve range and queue the full object": "Serve range and queue the full object",
+ "Serve range only": "Serve range only",
+ "Server module disabled": "Server module disabled",
+ "Service-account JSON key": "Service-account JSON key",
+ "Session token (optional)": "Session token (optional)",
+ "Skip TLS certificate verification": "Skip TLS certificate verification",
+ "Skipped existing": "Skipped existing",
+ "Source bucket is required.": "Source bucket is required.",
+ "Source bucket must not contain slashes or whitespace.": "Source bucket must not contain slashes or whitespace.",
+ "Source circuit open": "Source circuit open",
+ "Source connection": "Source connection",
+ "Source container": "Source container",
+ "Source error response": "Source error response",
+ "Source listing prefix (optional)": "Source listing prefix (optional)",
+ "Source prefix": "Source prefix",
+ "Source prefix (optional)": "Source prefix (optional)",
+ "Source-hit ratio": "Source-hit ratio",
+ "Start a job when you are ready to migrate the remaining source objects.": "Start a job when you are ready to migrate the remaining source objects.",
+ "Start backfill": "Start backfill",
+ "Start background backfill": "Start background backfill",
+ "Start dry run": "Start dry run",
+ "TLS": "TLS",
+ "Test connection": "Test connection",
+ "Testing connection": "Testing connection",
+ "The endpoint must not contain a path, query, or fragment.": "The endpoint must not contain a path, query, or fragment.",
+ "The endpoint must not contain credentials.": "The endpoint must not contain credentials.",
+ "The existing source that RustFS will read from.": "The existing source that RustFS will read from.",
+ "The secret is stored by RustFS but never returned to the Console.": "The secret is stored by RustFS but never returned to the Console.",
+ "The server rejected this operation": "The server rejected this operation",
+ "The source bucket is empty or the selected prefix has no objects.": "The source bucket is empty or the selected prefix has no objects.",
+ "The source could not be reached": "The source could not be reached",
+ "The source is still being scanned, so no completion percentage is shown.": "The source is still being scanned, so no completion percentage is shown.",
+ "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.": "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.",
+ "This backend is not included in the server build": "This backend is not included in the server build",
+ "This provider requires a real region; auto is not supported.": "This provider requires a real region; auto is not supported.",
+ "Turn off to keep the saved configuration without consulting the source.": "Turn off to keep the saved configuration without consulting the source.",
+ "Unable to load on-demand migration": "Unable to load on-demand migration",
+ "Unable to load this setting": "Unable to load this setting",
+ "Unavailable when the server has no bucket GET total.": "Unavailable when the server has no bucket GET total.",
+ "Updated": "Updated",
+ "Upgrade RustFS to a version that provides the on-demand migration admin API.": "Upgrade RustFS to a version that provides the on-demand migration admin API.",
+ "Use a read-only key scoped to the source bucket.": "Use a read-only key scoped to the source bucket.",
+ "Use a service account with storage.objects.get and storage.objects.list.": "Use a service account with storage.objects.get and storage.objects.list.",
+ "Use a valid service-account JSON key with client_email and private_key.": "Use a valid service-account JSON key with client_email and private_key.",
+ "Use an absolute HTTP or HTTPS URL with no path.": "Use an absolute HTTP or HTTPS URL with no path.",
+ "Use an explicit style when the source redirects or reports a missing bucket.": "Use an explicit style when the source redirects or reports a missing bucket.",
+ "Use only in a trusted test environment. Prefer a custom CA certificate.": "Use only in a trusted test environment. Prefer a custom CA certificate.",
+ "Use provider default": "Use provider default",
+ "Used to derive the public endpoint when no custom endpoint is set.": "Used to derive the public endpoint when no custom endpoint is set.",
+ "Uses the S3 interoperability API and an HMAC key pair.": "Uses the S3 interoperability API and an HMAC key pair.",
+ "Uses the native Azure Blob API.": "Uses the native Azure Blob API.",
+ "Uses the native GCS API and a service-account JSON key.": "Uses the native GCS API and a service-account JSON key.",
+ "View backfill": "View backfill",
+ "Virtual-host style": "Virtual-host style",
+ "You do not have permission to change migration settings": "You do not have permission to change migration settings",
+ "You do not have permission to control backfill": "You do not have permission to control backfill",
+ "You do not have permission to view this bucket's migration settings.": "You do not have permission to view this bucket's migration settings.",
+ "Your migration configuration changes will be lost.": "Your migration configuration changes will be lost.",
+ "pull failures": "pull failures"
}
diff --git a/i18n/locales/de-DE.json b/i18n/locales/de-DE.json
index ea6f4dfc..9109a630 100644
--- a/i18n/locales/de-DE.json
+++ b/i18n/locales/de-DE.json
@@ -1966,5 +1966,255 @@
"The destination was copied, but source deletion could not be confirmed. Check both locations before retrying.": "Das Objekt wurde an das Ziel kopiert, aber das Löschen der Quelle konnte nicht bestätigt werden. Prüfen Sie beide Speicherorte, bevor Sie es erneut versuchen.",
"The source changed or the destination already exists. Refresh and choose a different destination.": "Die Quelle wurde geändert oder das Ziel ist bereits vorhanden. Aktualisieren Sie die Ansicht und wählen Sie ein anderes Ziel.",
"Show key": "Schlüssel anzeigen",
- "Hide key": "Schlüssel ausblenden"
+ "Hide key": "Schlüssel ausblenden",
+ "0 disables the cache; maximum 3600.": "0 disables the cache; maximum 3600.",
+ "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.": "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.",
+ "100–600000 ms between source body chunks.": "100–600000 ms between source body chunks.",
+ "100–600000 ms.": "100–600000 ms.",
+ "1–256 across inline, background, and backfill work.": "1–256 across inline, background, and backfill work.",
+ "1–65536 waiting background pulls.": "1–65536 waiting background pulls.",
+ "5242880–5368709120 bytes (5 MiB–5 GiB).": "5242880–5368709120 bytes (5 MiB–5 GiB).",
+ "A backfill job is already running": "A backfill job is already running",
+ "A local versioned delete marker prevents the object from being pulled again.": "A local versioned delete marker prevents the object from being pulled again.",
+ "AWS regions may contain only letters, numbers, and hyphens.": "AWS regions may contain only letters, numbers, and hyphens.",
+ "Access key is required.": "Access key is required.",
+ "Account key": "Account key",
+ "Addressing style": "Addressing style",
+ "Adds source requests to listings so clients can see objects not yet migrated.": "Adds source requests to listings so clients can see objects not yet migrated.",
+ "All keys": "All keys",
+ "Always skip": "Always skip",
+ "Amazon S3": "Amazon S3",
+ "Any current local object is skipped.": "Any current local object is skipped.",
+ "Automatic": "Automatic",
+ "Azure Blob Storage (Native)": "Azure Blob Storage (Native)",
+ "Azure account key must be valid Base64.": "Azure account key must be valid Base64.",
+ "Azure account may contain only letters, numbers, and hyphens.": "Azure account may contain only letters, numbers, and hyphens.",
+ "Azure credential type": "Azure credential type",
+ "Azure storage account": "Azure storage account",
+ "Azure storage account is required.": "Azure storage account is required.",
+ "Backfill cancellation requested": "Backfill cancellation requested",
+ "Backfill cancelled": "Backfill cancelled",
+ "Backfill cannot start until the module is enabled on every server node.": "Backfill cannot start until the module is enabled on every server node.",
+ "Backfill completed": "Backfill completed",
+ "Backfill completed with failures": "Backfill completed with failures",
+ "Backfill dry run started": "Backfill dry run started",
+ "Backfill failed": "Backfill failed",
+ "Backfill in progress": "Backfill in progress",
+ "Backfill operation failed": "Backfill operation failed",
+ "Backfill paused": "Backfill paused",
+ "Backfill pending": "Backfill pending",
+ "Backfill running": "Backfill running",
+ "Backfill started": "Backfill started",
+ "Background backfill": "Background backfill",
+ "Bandwidth limit (bytes/s, optional)": "Bandwidth limit (bytes/s, optional)",
+ "Bandwidth limit must be a whole number of at least 65536 bytes/s.": "Bandwidth limit must be a whole number of at least 65536 bytes/s.",
+ "Breaker closed": "Breaker closed",
+ "Breaker half-open": "Breaker half-open",
+ "Breaker open": "Breaker open",
+ "CA certificate (PEM, optional)": "CA certificate (PEM, optional)",
+ "CA certificate must be PEM encoded.": "CA certificate must be PEM encoded.",
+ "Cancel backfill": "Cancel backfill",
+ "Cancel the running backfill?": "Cancel the running backfill?",
+ "Cancelling": "Cancelling",
+ "Circuit breaker": "Circuit breaker",
+ "Compare source ETag and size": "Compare source ETag and size",
+ "Concurrent pulls": "Concurrent pulls",
+ "Concurrent pulls must be a whole number from 1 to 256.": "Concurrent pulls must be a whole number from 1 to 256.",
+ "Configuration changed on the server. Refresh and review it before disabling migration.": "Configuration changed on the server. Refresh and review it before disabling migration.",
+ "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.": "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.",
+ "Connect this bucket to an external source without interrupting reads.": "Connect this bucket to an external source without interrupting reads.",
+ "Connect timeout (ms)": "Connect timeout (ms)",
+ "Connect timeout must be a whole number from 100 to 600000.": "Connect timeout must be a whole number from 100 to 600000.",
+ "Connection test passed": "Connection test passed",
+ "Copy object tags": "Copy object tags",
+ "Create a bucket before configuring an external migration source.": "Create a bucket before configuring an external migration source.",
+ "Credentials are write-only": "Credentials are write-only",
+ "Custom endpoint (optional)": "Custom endpoint (optional)",
+ "Data": "Data",
+ "Disable": "Disable",
+ "Disable migration": "Disable migration",
+ "Disable on-demand migration?": "Disable on-demand migration?",
+ "Disabling": "Disabling",
+ "Discard changes": "Discard changes",
+ "Discard unsaved changes?": "Discard unsaved changes?",
+ "Edit on-demand migration": "Edit on-demand migration",
+ "Editing cancels the active backfill": "Editing cancels the active backfill",
+ "Emit object-created events": "Emit object-created events",
+ "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.": "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.",
+ "Enable migration": "Enable migration",
+ "Enable on-demand migration": "Enable on-demand migration",
+ "Endpoint host": "Endpoint host",
+ "Endpoint is required for this provider.": "Endpoint is required for this provider.",
+ "Enter a real region or auto.": "Enter a real region or auto.",
+ "Enter an absolute HTTP or HTTPS endpoint.": "Enter an absolute HTTP or HTTPS endpoint.",
+ "Enter the Base64 storage account key.": "Enter the Base64 storage account key.",
+ "Enter the SAS query string without a leading question mark.": "Enter the SAS query string without a leading question mark.",
+ "Existing local objects": "Existing local objects",
+ "Failed objects": "Failed objects",
+ "First-byte timeout (ms)": "First-byte timeout (ms)",
+ "First-byte timeout must be a whole number from 100 to 600000.": "First-byte timeout must be a whole number from 100 to 600000.",
+ "For security, re-enter the source credential before testing or saving any change.": "For security, re-enter the source credential before testing or saving any change.",
+ "Google Cloud Storage (HMAC)": "Google Cloud Storage (HMAC)",
+ "Google Cloud Storage (Native)": "Google Cloud Storage (Native)",
+ "HEAD requests": "HEAD requests",
+ "Idle timeout (ms)": "Idle timeout (ms)",
+ "Idle timeout must be a whole number from 100 to 600000.": "Idle timeout must be a whole number from 100 to 600000.",
+ "In-flight pulls": "In-flight pulls",
+ "Include source objects in ListObjectsV2": "Include source objects in ListObjectsV2",
+ "Inline object limit (bytes)": "Inline object limit (bytes)",
+ "Inline object limit must be a whole number from 0 to 268435456.": "Inline object limit must be a whole number from 0 to 268435456.",
+ "Keep editing": "Keep editing",
+ "Keep running": "Keep running",
+ "Keep the source ETag unless local bucket encryption replaces it.": "Keep the source ETag unless local bucket encryption replaces it.",
+ "Key mapping": "Key mapping",
+ "Last backfill error": "Last backfill error",
+ "Last source error": "Last source error",
+ "Latest job": "Latest job",
+ "Leave empty for unlimited; the server minimum is 65536 bytes/s.": "Leave empty for unlimited; the server minimum is 65536 bytes/s.",
+ "Leave empty to scan the complete configured source namespace.": "Leave empty to scan the complete configured source namespace.",
+ "Leave empty to use https://storage.googleapis.com.": "Leave empty to use https://storage.googleapis.com.",
+ "Leave empty to use the account's public Azure Blob endpoint.": "Leave empty to use the account's public Azure Blob endpoint.",
+ "Leave empty to use the regional Amazon S3 endpoint.": "Leave empty to use the regional Amazon S3 endpoint.",
+ "Lifetime on this node": "Lifetime on this node",
+ "List matching objects without queueing or writing any object.": "List matching objects without queueing or writing any object.",
+ "Listed": "Listed",
+ "Live counters from the RustFS node that answered this request.": "Live counters from the RustFS node that answered this request.",
+ "Loading on-demand migration settings": "Loading on-demand migration settings",
+ "Local only": "Local only",
+ "Local prefix": "Local prefix",
+ "Local prefix (optional)": "Local prefix (optional)",
+ "Manage migration": "Manage migration",
+ "Migrated data": "Migrated data",
+ "Migrated objects": "Migrated objects",
+ "Migration active": "Migration active",
+ "Migration configuration could not be saved": "Migration configuration could not be saved",
+ "Migration configuration updated": "Migration configuration updated",
+ "Migration not configured": "Migration not configured",
+ "Migration paused": "Migration paused",
+ "Missing local objects are served from this source and then stored locally.": "Missing local objects are served from this source and then stored locally.",
+ "Multipart part size (bytes)": "Multipart part size (bytes)",
+ "Multipart part size must be a whole number from 5242880 to 5368709120.": "Multipart part size must be a whole number from 5242880 to 5368709120.",
+ "Native GCS has no object tags, so no tags will be copied.": "Native GCS has no object tags, so no tags will be copied.",
+ "Negative cache TTL (seconds)": "Negative cache TTL (seconds)",
+ "Negative cache TTL must be a whole number from 0 to 3600.": "Negative cache TTL must be a whole number from 0 to 3600.",
+ "No added prefix": "No added prefix",
+ "No backfill yet": "No backfill yet",
+ "No background backfill has been started for this bucket.": "No background backfill has been started for this bucket.",
+ "No live runtime state on this node": "No live runtime state on this node",
+ "No migration source configured": "No migration source configured",
+ "No recorded pull failures": "No recorded pull failures",
+ "No runtime state": "No runtime state",
+ "No source error recorded": "No source error recorded",
+ "Objects already migrated remain in the local bucket. You can start a new job later.": "Objects already migrated remain in the local bucket. You can start a new job later.",
+ "Objects listed": "Objects listed",
+ "Objects pulled": "Objects pulled",
+ "Objects whose recorded source ETag and size differ are pulled again.": "Objects whose recorded source ETag and size differ are pulled again.",
+ "On-demand migration": "On-demand migration",
+ "On-demand migration disabled": "On-demand migration disabled",
+ "On-demand migration enabled": "On-demand migration enabled",
+ "On-demand migration is not available on this server": "On-demand migration is not available on this server",
+ "On-demand migration is not enabled on this server": "On-demand migration is not enabled on this server",
+ "On-demand migration is unavailable": "On-demand migration is unavailable",
+ "Only local keys with this prefix will consult the source.": "Only local keys with this prefix will consult the source.",
+ "Open license settings": "Open license settings",
+ "Open migration settings": "Open migration settings",
+ "Paste the issuing certificate when the source uses a private CA.": "Paste the issuing certificate when the source uses a private CA.",
+ "Path style": "Path style",
+ "Performance and limits": "Performance and limits",
+ "Plan a read-only source cutover": "Plan a read-only source cutover",
+ "Prepended to the local key when RustFS reads the source.": "Prepended to the local key when RustFS reads the source.",
+ "Preserve source ETag": "Preserve source ETag",
+ "Provide it only when the source credentials require a session token.": "Provide it only when the source credentials require a session token.",
+ "Provider": "Provider",
+ "Pull queue capacity": "Pull queue capacity",
+ "Pull queue capacity must be a whole number from 1 to 65536.": "Pull queue capacity must be a whole number from 1 to 65536.",
+ "Pulled": "Pulled",
+ "Queue depth": "Queue depth",
+ "Range GET requests": "Range GET requests",
+ "Re-enter the Azure credential to test or save changes.": "Re-enter the Azure credential to test or save changes.",
+ "Re-enter the secret key to test or save changes.": "Re-enter the secret key to test or save changes.",
+ "Re-enter the service account JSON to test or save changes.": "Re-enter the service account JSON to test or save changes.",
+ "Read behavior": "Read behavior",
+ "Read from source on a miss": "Read from source on a miss",
+ "Region is required.": "Region is required.",
+ "Requires admin:SetBucketOnDemandMigration": "Requires admin:SetBucketOnDemandMigration",
+ "Requires source tag-read permission and adds one request per pull.": "Requires source tag-read permission and adds one request per pull.",
+ "Respect local delete markers": "Respect local delete markers",
+ "Return Not Found": "Return Not Found",
+ "Return SourceUnavailable": "Return SourceUnavailable",
+ "Returning Not Found can make sync clients treat a temporary source failure as a deletion.": "Returning Not Found can make sync clients treat a temporary source failure as a deletion.",
+ "Runtime status": "Runtime status",
+ "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.": "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.",
+ "RustFS reached the source bucket and listed it successfully.": "RustFS reached the source bucket and listed it successfully.",
+ "RustFS reads from this source and never writes or deletes objects there.": "RustFS reads from this source and never writes or deletes objects there.",
+ "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.": "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.",
+ "S3-compatible storage": "S3-compatible storage",
+ "SAS token": "SAS token",
+ "SAS token must omit the leading question mark and whitespace.": "SAS token must omit the leading question mark and whitespace.",
+ "Sample object": "Sample object",
+ "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.": "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.",
+ "Saving": "Saving",
+ "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.": "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.",
+ "Scan the source and pull objects that have not been requested yet.": "Scan the source and pull objects that have not been requested yet.",
+ "Send normal bucket notifications when a pulled object is stored locally.": "Send normal bucket notifications when a pulled object is stored locally.",
+ "Serve missing objects from an external source while migrating them into RustFS.": "Serve missing objects from an external source while migrating them into RustFS.",
+ "Serve range and queue the full object": "Serve range and queue the full object",
+ "Serve range only": "Serve range only",
+ "Server module disabled": "Server module disabled",
+ "Service-account JSON key": "Service-account JSON key",
+ "Session token (optional)": "Session token (optional)",
+ "Skip TLS certificate verification": "Skip TLS certificate verification",
+ "Skipped existing": "Skipped existing",
+ "Source bucket is required.": "Source bucket is required.",
+ "Source bucket must not contain slashes or whitespace.": "Source bucket must not contain slashes or whitespace.",
+ "Source circuit open": "Source circuit open",
+ "Source connection": "Source connection",
+ "Source container": "Source container",
+ "Source error response": "Source error response",
+ "Source listing prefix (optional)": "Source listing prefix (optional)",
+ "Source prefix": "Source prefix",
+ "Source prefix (optional)": "Source prefix (optional)",
+ "Source-hit ratio": "Source-hit ratio",
+ "Start a job when you are ready to migrate the remaining source objects.": "Start a job when you are ready to migrate the remaining source objects.",
+ "Start backfill": "Start backfill",
+ "Start background backfill": "Start background backfill",
+ "Start dry run": "Start dry run",
+ "TLS": "TLS",
+ "Test connection": "Test connection",
+ "Testing connection": "Testing connection",
+ "The endpoint must not contain a path, query, or fragment.": "The endpoint must not contain a path, query, or fragment.",
+ "The endpoint must not contain credentials.": "The endpoint must not contain credentials.",
+ "The existing source that RustFS will read from.": "The existing source that RustFS will read from.",
+ "The secret is stored by RustFS but never returned to the Console.": "The secret is stored by RustFS but never returned to the Console.",
+ "The server rejected this operation": "The server rejected this operation",
+ "The source bucket is empty or the selected prefix has no objects.": "The source bucket is empty or the selected prefix has no objects.",
+ "The source could not be reached": "The source could not be reached",
+ "The source is still being scanned, so no completion percentage is shown.": "The source is still being scanned, so no completion percentage is shown.",
+ "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.": "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.",
+ "This backend is not included in the server build": "This backend is not included in the server build",
+ "This provider requires a real region; auto is not supported.": "This provider requires a real region; auto is not supported.",
+ "Turn off to keep the saved configuration without consulting the source.": "Turn off to keep the saved configuration without consulting the source.",
+ "Unable to load on-demand migration": "Unable to load on-demand migration",
+ "Unable to load this setting": "Unable to load this setting",
+ "Unavailable when the server has no bucket GET total.": "Unavailable when the server has no bucket GET total.",
+ "Updated": "Updated",
+ "Upgrade RustFS to a version that provides the on-demand migration admin API.": "Upgrade RustFS to a version that provides the on-demand migration admin API.",
+ "Use a read-only key scoped to the source bucket.": "Use a read-only key scoped to the source bucket.",
+ "Use a service account with storage.objects.get and storage.objects.list.": "Use a service account with storage.objects.get and storage.objects.list.",
+ "Use a valid service-account JSON key with client_email and private_key.": "Use a valid service-account JSON key with client_email and private_key.",
+ "Use an absolute HTTP or HTTPS URL with no path.": "Use an absolute HTTP or HTTPS URL with no path.",
+ "Use an explicit style when the source redirects or reports a missing bucket.": "Use an explicit style when the source redirects or reports a missing bucket.",
+ "Use only in a trusted test environment. Prefer a custom CA certificate.": "Use only in a trusted test environment. Prefer a custom CA certificate.",
+ "Use provider default": "Use provider default",
+ "Used to derive the public endpoint when no custom endpoint is set.": "Used to derive the public endpoint when no custom endpoint is set.",
+ "Uses the S3 interoperability API and an HMAC key pair.": "Uses the S3 interoperability API and an HMAC key pair.",
+ "Uses the native Azure Blob API.": "Uses the native Azure Blob API.",
+ "Uses the native GCS API and a service-account JSON key.": "Uses the native GCS API and a service-account JSON key.",
+ "View backfill": "View backfill",
+ "Virtual-host style": "Virtual-host style",
+ "You do not have permission to change migration settings": "You do not have permission to change migration settings",
+ "You do not have permission to control backfill": "You do not have permission to control backfill",
+ "You do not have permission to view this bucket's migration settings.": "You do not have permission to view this bucket's migration settings.",
+ "Your migration configuration changes will be lost.": "Your migration configuration changes will be lost.",
+ "pull failures": "pull failures"
}
diff --git a/i18n/locales/en-US.json b/i18n/locales/en-US.json
index daa95b66..1c92cb3e 100644
--- a/i18n/locales/en-US.json
+++ b/i18n/locales/en-US.json
@@ -1966,5 +1966,255 @@
"The destination was copied, but source deletion could not be confirmed. Check both locations before retrying.": "The destination was copied, but source deletion could not be confirmed. Check both locations before retrying.",
"The source changed or the destination already exists. Refresh and choose a different destination.": "The source changed or the destination already exists. Refresh and choose a different destination.",
"Show key": "Show key",
- "Hide key": "Hide key"
+ "Hide key": "Hide key",
+ "0 disables the cache; maximum 3600.": "0 disables the cache; maximum 3600.",
+ "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.": "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.",
+ "100–600000 ms between source body chunks.": "100–600000 ms between source body chunks.",
+ "100–600000 ms.": "100–600000 ms.",
+ "1–256 across inline, background, and backfill work.": "1–256 across inline, background, and backfill work.",
+ "1–65536 waiting background pulls.": "1–65536 waiting background pulls.",
+ "5242880–5368709120 bytes (5 MiB–5 GiB).": "5242880–5368709120 bytes (5 MiB–5 GiB).",
+ "A backfill job is already running": "A backfill job is already running",
+ "A local versioned delete marker prevents the object from being pulled again.": "A local versioned delete marker prevents the object from being pulled again.",
+ "AWS regions may contain only letters, numbers, and hyphens.": "AWS regions may contain only letters, numbers, and hyphens.",
+ "Access key is required.": "Access key is required.",
+ "Account key": "Account key",
+ "Addressing style": "Addressing style",
+ "Adds source requests to listings so clients can see objects not yet migrated.": "Adds source requests to listings so clients can see objects not yet migrated.",
+ "All keys": "All keys",
+ "Always skip": "Always skip",
+ "Amazon S3": "Amazon S3",
+ "Any current local object is skipped.": "Any current local object is skipped.",
+ "Automatic": "Automatic",
+ "Azure Blob Storage (Native)": "Azure Blob Storage (Native)",
+ "Azure account key must be valid Base64.": "Azure account key must be valid Base64.",
+ "Azure account may contain only letters, numbers, and hyphens.": "Azure account may contain only letters, numbers, and hyphens.",
+ "Azure credential type": "Azure credential type",
+ "Azure storage account": "Azure storage account",
+ "Azure storage account is required.": "Azure storage account is required.",
+ "Backfill cancellation requested": "Backfill cancellation requested",
+ "Backfill cancelled": "Backfill cancelled",
+ "Backfill cannot start until the module is enabled on every server node.": "Backfill cannot start until the module is enabled on every server node.",
+ "Backfill completed": "Backfill completed",
+ "Backfill completed with failures": "Backfill completed with failures",
+ "Backfill dry run started": "Backfill dry run started",
+ "Backfill failed": "Backfill failed",
+ "Backfill in progress": "Backfill in progress",
+ "Backfill operation failed": "Backfill operation failed",
+ "Backfill paused": "Backfill paused",
+ "Backfill pending": "Backfill pending",
+ "Backfill running": "Backfill running",
+ "Backfill started": "Backfill started",
+ "Background backfill": "Background backfill",
+ "Bandwidth limit (bytes/s, optional)": "Bandwidth limit (bytes/s, optional)",
+ "Bandwidth limit must be a whole number of at least 65536 bytes/s.": "Bandwidth limit must be a whole number of at least 65536 bytes/s.",
+ "Breaker closed": "Breaker closed",
+ "Breaker half-open": "Breaker half-open",
+ "Breaker open": "Breaker open",
+ "CA certificate (PEM, optional)": "CA certificate (PEM, optional)",
+ "CA certificate must be PEM encoded.": "CA certificate must be PEM encoded.",
+ "Cancel backfill": "Cancel backfill",
+ "Cancel the running backfill?": "Cancel the running backfill?",
+ "Cancelling": "Cancelling",
+ "Circuit breaker": "Circuit breaker",
+ "Compare source ETag and size": "Compare source ETag and size",
+ "Concurrent pulls": "Concurrent pulls",
+ "Concurrent pulls must be a whole number from 1 to 256.": "Concurrent pulls must be a whole number from 1 to 256.",
+ "Configuration changed on the server. Refresh and review it before disabling migration.": "Configuration changed on the server. Refresh and review it before disabling migration.",
+ "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.": "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.",
+ "Connect this bucket to an external source without interrupting reads.": "Connect this bucket to an external source without interrupting reads.",
+ "Connect timeout (ms)": "Connect timeout (ms)",
+ "Connect timeout must be a whole number from 100 to 600000.": "Connect timeout must be a whole number from 100 to 600000.",
+ "Connection test passed": "Connection test passed",
+ "Copy object tags": "Copy object tags",
+ "Create a bucket before configuring an external migration source.": "Create a bucket before configuring an external migration source.",
+ "Credentials are write-only": "Credentials are write-only",
+ "Custom endpoint (optional)": "Custom endpoint (optional)",
+ "Data": "Data",
+ "Disable": "Disable",
+ "Disable migration": "Disable migration",
+ "Disable on-demand migration?": "Disable on-demand migration?",
+ "Disabling": "Disabling",
+ "Discard changes": "Discard changes",
+ "Discard unsaved changes?": "Discard unsaved changes?",
+ "Edit on-demand migration": "Edit on-demand migration",
+ "Editing cancels the active backfill": "Editing cancels the active backfill",
+ "Emit object-created events": "Emit object-created events",
+ "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.": "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.",
+ "Enable migration": "Enable migration",
+ "Enable on-demand migration": "Enable on-demand migration",
+ "Endpoint host": "Endpoint host",
+ "Endpoint is required for this provider.": "Endpoint is required for this provider.",
+ "Enter a real region or auto.": "Enter a real region or auto.",
+ "Enter an absolute HTTP or HTTPS endpoint.": "Enter an absolute HTTP or HTTPS endpoint.",
+ "Enter the Base64 storage account key.": "Enter the Base64 storage account key.",
+ "Enter the SAS query string without a leading question mark.": "Enter the SAS query string without a leading question mark.",
+ "Existing local objects": "Existing local objects",
+ "Failed objects": "Failed objects",
+ "First-byte timeout (ms)": "First-byte timeout (ms)",
+ "First-byte timeout must be a whole number from 100 to 600000.": "First-byte timeout must be a whole number from 100 to 600000.",
+ "For security, re-enter the source credential before testing or saving any change.": "For security, re-enter the source credential before testing or saving any change.",
+ "Google Cloud Storage (HMAC)": "Google Cloud Storage (HMAC)",
+ "Google Cloud Storage (Native)": "Google Cloud Storage (Native)",
+ "HEAD requests": "HEAD requests",
+ "Idle timeout (ms)": "Idle timeout (ms)",
+ "Idle timeout must be a whole number from 100 to 600000.": "Idle timeout must be a whole number from 100 to 600000.",
+ "In-flight pulls": "In-flight pulls",
+ "Include source objects in ListObjectsV2": "Include source objects in ListObjectsV2",
+ "Inline object limit (bytes)": "Inline object limit (bytes)",
+ "Inline object limit must be a whole number from 0 to 268435456.": "Inline object limit must be a whole number from 0 to 268435456.",
+ "Keep editing": "Keep editing",
+ "Keep running": "Keep running",
+ "Keep the source ETag unless local bucket encryption replaces it.": "Keep the source ETag unless local bucket encryption replaces it.",
+ "Key mapping": "Key mapping",
+ "Last backfill error": "Last backfill error",
+ "Last source error": "Last source error",
+ "Latest job": "Latest job",
+ "Leave empty for unlimited; the server minimum is 65536 bytes/s.": "Leave empty for unlimited; the server minimum is 65536 bytes/s.",
+ "Leave empty to scan the complete configured source namespace.": "Leave empty to scan the complete configured source namespace.",
+ "Leave empty to use https://storage.googleapis.com.": "Leave empty to use https://storage.googleapis.com.",
+ "Leave empty to use the account's public Azure Blob endpoint.": "Leave empty to use the account's public Azure Blob endpoint.",
+ "Leave empty to use the regional Amazon S3 endpoint.": "Leave empty to use the regional Amazon S3 endpoint.",
+ "Lifetime on this node": "Lifetime on this node",
+ "List matching objects without queueing or writing any object.": "List matching objects without queueing or writing any object.",
+ "Listed": "Listed",
+ "Live counters from the RustFS node that answered this request.": "Live counters from the RustFS node that answered this request.",
+ "Loading on-demand migration settings": "Loading on-demand migration settings",
+ "Local only": "Local only",
+ "Local prefix": "Local prefix",
+ "Local prefix (optional)": "Local prefix (optional)",
+ "Manage migration": "Manage migration",
+ "Migrated data": "Migrated data",
+ "Migrated objects": "Migrated objects",
+ "Migration active": "Migration active",
+ "Migration configuration could not be saved": "Migration configuration could not be saved",
+ "Migration configuration updated": "Migration configuration updated",
+ "Migration not configured": "Migration not configured",
+ "Migration paused": "Migration paused",
+ "Missing local objects are served from this source and then stored locally.": "Missing local objects are served from this source and then stored locally.",
+ "Multipart part size (bytes)": "Multipart part size (bytes)",
+ "Multipart part size must be a whole number from 5242880 to 5368709120.": "Multipart part size must be a whole number from 5242880 to 5368709120.",
+ "Native GCS has no object tags, so no tags will be copied.": "Native GCS has no object tags, so no tags will be copied.",
+ "Negative cache TTL (seconds)": "Negative cache TTL (seconds)",
+ "Negative cache TTL must be a whole number from 0 to 3600.": "Negative cache TTL must be a whole number from 0 to 3600.",
+ "No added prefix": "No added prefix",
+ "No backfill yet": "No backfill yet",
+ "No background backfill has been started for this bucket.": "No background backfill has been started for this bucket.",
+ "No live runtime state on this node": "No live runtime state on this node",
+ "No migration source configured": "No migration source configured",
+ "No recorded pull failures": "No recorded pull failures",
+ "No runtime state": "No runtime state",
+ "No source error recorded": "No source error recorded",
+ "Objects already migrated remain in the local bucket. You can start a new job later.": "Objects already migrated remain in the local bucket. You can start a new job later.",
+ "Objects listed": "Objects listed",
+ "Objects pulled": "Objects pulled",
+ "Objects whose recorded source ETag and size differ are pulled again.": "Objects whose recorded source ETag and size differ are pulled again.",
+ "On-demand migration": "On-demand migration",
+ "On-demand migration disabled": "On-demand migration disabled",
+ "On-demand migration enabled": "On-demand migration enabled",
+ "On-demand migration is not available on this server": "On-demand migration is not available on this server",
+ "On-demand migration is not enabled on this server": "On-demand migration is not enabled on this server",
+ "On-demand migration is unavailable": "On-demand migration is unavailable",
+ "Only local keys with this prefix will consult the source.": "Only local keys with this prefix will consult the source.",
+ "Open license settings": "Open license settings",
+ "Open migration settings": "Open migration settings",
+ "Paste the issuing certificate when the source uses a private CA.": "Paste the issuing certificate when the source uses a private CA.",
+ "Path style": "Path style",
+ "Performance and limits": "Performance and limits",
+ "Plan a read-only source cutover": "Plan a read-only source cutover",
+ "Prepended to the local key when RustFS reads the source.": "Prepended to the local key when RustFS reads the source.",
+ "Preserve source ETag": "Preserve source ETag",
+ "Provide it only when the source credentials require a session token.": "Provide it only when the source credentials require a session token.",
+ "Provider": "Provider",
+ "Pull queue capacity": "Pull queue capacity",
+ "Pull queue capacity must be a whole number from 1 to 65536.": "Pull queue capacity must be a whole number from 1 to 65536.",
+ "Pulled": "Pulled",
+ "Queue depth": "Queue depth",
+ "Range GET requests": "Range GET requests",
+ "Re-enter the Azure credential to test or save changes.": "Re-enter the Azure credential to test or save changes.",
+ "Re-enter the secret key to test or save changes.": "Re-enter the secret key to test or save changes.",
+ "Re-enter the service account JSON to test or save changes.": "Re-enter the service account JSON to test or save changes.",
+ "Read behavior": "Read behavior",
+ "Read from source on a miss": "Read from source on a miss",
+ "Region is required.": "Region is required.",
+ "Requires admin:SetBucketOnDemandMigration": "Requires admin:SetBucketOnDemandMigration",
+ "Requires source tag-read permission and adds one request per pull.": "Requires source tag-read permission and adds one request per pull.",
+ "Respect local delete markers": "Respect local delete markers",
+ "Return Not Found": "Return Not Found",
+ "Return SourceUnavailable": "Return SourceUnavailable",
+ "Returning Not Found can make sync clients treat a temporary source failure as a deletion.": "Returning Not Found can make sync clients treat a temporary source failure as a deletion.",
+ "Runtime status": "Runtime status",
+ "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.": "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.",
+ "RustFS reached the source bucket and listed it successfully.": "RustFS reached the source bucket and listed it successfully.",
+ "RustFS reads from this source and never writes or deletes objects there.": "RustFS reads from this source and never writes or deletes objects there.",
+ "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.": "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.",
+ "S3-compatible storage": "S3-compatible storage",
+ "SAS token": "SAS token",
+ "SAS token must omit the leading question mark and whitespace.": "SAS token must omit the leading question mark and whitespace.",
+ "Sample object": "Sample object",
+ "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.": "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.",
+ "Saving": "Saving",
+ "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.": "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.",
+ "Scan the source and pull objects that have not been requested yet.": "Scan the source and pull objects that have not been requested yet.",
+ "Send normal bucket notifications when a pulled object is stored locally.": "Send normal bucket notifications when a pulled object is stored locally.",
+ "Serve missing objects from an external source while migrating them into RustFS.": "Serve missing objects from an external source while migrating them into RustFS.",
+ "Serve range and queue the full object": "Serve range and queue the full object",
+ "Serve range only": "Serve range only",
+ "Server module disabled": "Server module disabled",
+ "Service-account JSON key": "Service-account JSON key",
+ "Session token (optional)": "Session token (optional)",
+ "Skip TLS certificate verification": "Skip TLS certificate verification",
+ "Skipped existing": "Skipped existing",
+ "Source bucket is required.": "Source bucket is required.",
+ "Source bucket must not contain slashes or whitespace.": "Source bucket must not contain slashes or whitespace.",
+ "Source circuit open": "Source circuit open",
+ "Source connection": "Source connection",
+ "Source container": "Source container",
+ "Source error response": "Source error response",
+ "Source listing prefix (optional)": "Source listing prefix (optional)",
+ "Source prefix": "Source prefix",
+ "Source prefix (optional)": "Source prefix (optional)",
+ "Source-hit ratio": "Source-hit ratio",
+ "Start a job when you are ready to migrate the remaining source objects.": "Start a job when you are ready to migrate the remaining source objects.",
+ "Start backfill": "Start backfill",
+ "Start background backfill": "Start background backfill",
+ "Start dry run": "Start dry run",
+ "TLS": "TLS",
+ "Test connection": "Test connection",
+ "Testing connection": "Testing connection",
+ "The endpoint must not contain a path, query, or fragment.": "The endpoint must not contain a path, query, or fragment.",
+ "The endpoint must not contain credentials.": "The endpoint must not contain credentials.",
+ "The existing source that RustFS will read from.": "The existing source that RustFS will read from.",
+ "The secret is stored by RustFS but never returned to the Console.": "The secret is stored by RustFS but never returned to the Console.",
+ "The server rejected this operation": "The server rejected this operation",
+ "The source bucket is empty or the selected prefix has no objects.": "The source bucket is empty or the selected prefix has no objects.",
+ "The source could not be reached": "The source could not be reached",
+ "The source is still being scanned, so no completion percentage is shown.": "The source is still being scanned, so no completion percentage is shown.",
+ "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.": "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.",
+ "This backend is not included in the server build": "This backend is not included in the server build",
+ "This provider requires a real region; auto is not supported.": "This provider requires a real region; auto is not supported.",
+ "Turn off to keep the saved configuration without consulting the source.": "Turn off to keep the saved configuration without consulting the source.",
+ "Unable to load on-demand migration": "Unable to load on-demand migration",
+ "Unable to load this setting": "Unable to load this setting",
+ "Unavailable when the server has no bucket GET total.": "Unavailable when the server has no bucket GET total.",
+ "Updated": "Updated",
+ "Upgrade RustFS to a version that provides the on-demand migration admin API.": "Upgrade RustFS to a version that provides the on-demand migration admin API.",
+ "Use a read-only key scoped to the source bucket.": "Use a read-only key scoped to the source bucket.",
+ "Use a service account with storage.objects.get and storage.objects.list.": "Use a service account with storage.objects.get and storage.objects.list.",
+ "Use a valid service-account JSON key with client_email and private_key.": "Use a valid service-account JSON key with client_email and private_key.",
+ "Use an absolute HTTP or HTTPS URL with no path.": "Use an absolute HTTP or HTTPS URL with no path.",
+ "Use an explicit style when the source redirects or reports a missing bucket.": "Use an explicit style when the source redirects or reports a missing bucket.",
+ "Use only in a trusted test environment. Prefer a custom CA certificate.": "Use only in a trusted test environment. Prefer a custom CA certificate.",
+ "Use provider default": "Use provider default",
+ "Used to derive the public endpoint when no custom endpoint is set.": "Used to derive the public endpoint when no custom endpoint is set.",
+ "Uses the S3 interoperability API and an HMAC key pair.": "Uses the S3 interoperability API and an HMAC key pair.",
+ "Uses the native Azure Blob API.": "Uses the native Azure Blob API.",
+ "Uses the native GCS API and a service-account JSON key.": "Uses the native GCS API and a service-account JSON key.",
+ "View backfill": "View backfill",
+ "Virtual-host style": "Virtual-host style",
+ "You do not have permission to change migration settings": "You do not have permission to change migration settings",
+ "You do not have permission to control backfill": "You do not have permission to control backfill",
+ "You do not have permission to view this bucket's migration settings.": "You do not have permission to view this bucket's migration settings.",
+ "Your migration configuration changes will be lost.": "Your migration configuration changes will be lost.",
+ "pull failures": "pull failures"
}
diff --git a/i18n/locales/es-ES.json b/i18n/locales/es-ES.json
index 8715c66f..c19544a2 100644
--- a/i18n/locales/es-ES.json
+++ b/i18n/locales/es-ES.json
@@ -1966,5 +1966,255 @@
"The destination was copied, but source deletion could not be confirmed. Check both locations before retrying.": "El objeto se ha copiado al destino, pero no se pudo confirmar la eliminación del origen. Compruebe ambas ubicaciones antes de volver a intentarlo.",
"The source changed or the destination already exists. Refresh and choose a different destination.": "El origen ha cambiado o el destino ya existe. Actualice y elija otro destino.",
"Show key": "Mostrar clave",
- "Hide key": "Ocultar clave"
+ "Hide key": "Ocultar clave",
+ "0 disables the cache; maximum 3600.": "0 disables the cache; maximum 3600.",
+ "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.": "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.",
+ "100–600000 ms between source body chunks.": "100–600000 ms between source body chunks.",
+ "100–600000 ms.": "100–600000 ms.",
+ "1–256 across inline, background, and backfill work.": "1–256 across inline, background, and backfill work.",
+ "1–65536 waiting background pulls.": "1–65536 waiting background pulls.",
+ "5242880–5368709120 bytes (5 MiB–5 GiB).": "5242880–5368709120 bytes (5 MiB–5 GiB).",
+ "A backfill job is already running": "A backfill job is already running",
+ "A local versioned delete marker prevents the object from being pulled again.": "A local versioned delete marker prevents the object from being pulled again.",
+ "AWS regions may contain only letters, numbers, and hyphens.": "AWS regions may contain only letters, numbers, and hyphens.",
+ "Access key is required.": "Access key is required.",
+ "Account key": "Account key",
+ "Addressing style": "Addressing style",
+ "Adds source requests to listings so clients can see objects not yet migrated.": "Adds source requests to listings so clients can see objects not yet migrated.",
+ "All keys": "All keys",
+ "Always skip": "Always skip",
+ "Amazon S3": "Amazon S3",
+ "Any current local object is skipped.": "Any current local object is skipped.",
+ "Automatic": "Automatic",
+ "Azure Blob Storage (Native)": "Azure Blob Storage (Native)",
+ "Azure account key must be valid Base64.": "Azure account key must be valid Base64.",
+ "Azure account may contain only letters, numbers, and hyphens.": "Azure account may contain only letters, numbers, and hyphens.",
+ "Azure credential type": "Azure credential type",
+ "Azure storage account": "Azure storage account",
+ "Azure storage account is required.": "Azure storage account is required.",
+ "Backfill cancellation requested": "Backfill cancellation requested",
+ "Backfill cancelled": "Backfill cancelled",
+ "Backfill cannot start until the module is enabled on every server node.": "Backfill cannot start until the module is enabled on every server node.",
+ "Backfill completed": "Backfill completed",
+ "Backfill completed with failures": "Backfill completed with failures",
+ "Backfill dry run started": "Backfill dry run started",
+ "Backfill failed": "Backfill failed",
+ "Backfill in progress": "Backfill in progress",
+ "Backfill operation failed": "Backfill operation failed",
+ "Backfill paused": "Backfill paused",
+ "Backfill pending": "Backfill pending",
+ "Backfill running": "Backfill running",
+ "Backfill started": "Backfill started",
+ "Background backfill": "Background backfill",
+ "Bandwidth limit (bytes/s, optional)": "Bandwidth limit (bytes/s, optional)",
+ "Bandwidth limit must be a whole number of at least 65536 bytes/s.": "Bandwidth limit must be a whole number of at least 65536 bytes/s.",
+ "Breaker closed": "Breaker closed",
+ "Breaker half-open": "Breaker half-open",
+ "Breaker open": "Breaker open",
+ "CA certificate (PEM, optional)": "CA certificate (PEM, optional)",
+ "CA certificate must be PEM encoded.": "CA certificate must be PEM encoded.",
+ "Cancel backfill": "Cancel backfill",
+ "Cancel the running backfill?": "Cancel the running backfill?",
+ "Cancelling": "Cancelling",
+ "Circuit breaker": "Circuit breaker",
+ "Compare source ETag and size": "Compare source ETag and size",
+ "Concurrent pulls": "Concurrent pulls",
+ "Concurrent pulls must be a whole number from 1 to 256.": "Concurrent pulls must be a whole number from 1 to 256.",
+ "Configuration changed on the server. Refresh and review it before disabling migration.": "Configuration changed on the server. Refresh and review it before disabling migration.",
+ "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.": "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.",
+ "Connect this bucket to an external source without interrupting reads.": "Connect this bucket to an external source without interrupting reads.",
+ "Connect timeout (ms)": "Connect timeout (ms)",
+ "Connect timeout must be a whole number from 100 to 600000.": "Connect timeout must be a whole number from 100 to 600000.",
+ "Connection test passed": "Connection test passed",
+ "Copy object tags": "Copy object tags",
+ "Create a bucket before configuring an external migration source.": "Create a bucket before configuring an external migration source.",
+ "Credentials are write-only": "Credentials are write-only",
+ "Custom endpoint (optional)": "Custom endpoint (optional)",
+ "Data": "Data",
+ "Disable": "Disable",
+ "Disable migration": "Disable migration",
+ "Disable on-demand migration?": "Disable on-demand migration?",
+ "Disabling": "Disabling",
+ "Discard changes": "Discard changes",
+ "Discard unsaved changes?": "Discard unsaved changes?",
+ "Edit on-demand migration": "Edit on-demand migration",
+ "Editing cancels the active backfill": "Editing cancels the active backfill",
+ "Emit object-created events": "Emit object-created events",
+ "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.": "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.",
+ "Enable migration": "Enable migration",
+ "Enable on-demand migration": "Enable on-demand migration",
+ "Endpoint host": "Endpoint host",
+ "Endpoint is required for this provider.": "Endpoint is required for this provider.",
+ "Enter a real region or auto.": "Enter a real region or auto.",
+ "Enter an absolute HTTP or HTTPS endpoint.": "Enter an absolute HTTP or HTTPS endpoint.",
+ "Enter the Base64 storage account key.": "Enter the Base64 storage account key.",
+ "Enter the SAS query string without a leading question mark.": "Enter the SAS query string without a leading question mark.",
+ "Existing local objects": "Existing local objects",
+ "Failed objects": "Failed objects",
+ "First-byte timeout (ms)": "First-byte timeout (ms)",
+ "First-byte timeout must be a whole number from 100 to 600000.": "First-byte timeout must be a whole number from 100 to 600000.",
+ "For security, re-enter the source credential before testing or saving any change.": "For security, re-enter the source credential before testing or saving any change.",
+ "Google Cloud Storage (HMAC)": "Google Cloud Storage (HMAC)",
+ "Google Cloud Storage (Native)": "Google Cloud Storage (Native)",
+ "HEAD requests": "HEAD requests",
+ "Idle timeout (ms)": "Idle timeout (ms)",
+ "Idle timeout must be a whole number from 100 to 600000.": "Idle timeout must be a whole number from 100 to 600000.",
+ "In-flight pulls": "In-flight pulls",
+ "Include source objects in ListObjectsV2": "Include source objects in ListObjectsV2",
+ "Inline object limit (bytes)": "Inline object limit (bytes)",
+ "Inline object limit must be a whole number from 0 to 268435456.": "Inline object limit must be a whole number from 0 to 268435456.",
+ "Keep editing": "Keep editing",
+ "Keep running": "Keep running",
+ "Keep the source ETag unless local bucket encryption replaces it.": "Keep the source ETag unless local bucket encryption replaces it.",
+ "Key mapping": "Key mapping",
+ "Last backfill error": "Last backfill error",
+ "Last source error": "Last source error",
+ "Latest job": "Latest job",
+ "Leave empty for unlimited; the server minimum is 65536 bytes/s.": "Leave empty for unlimited; the server minimum is 65536 bytes/s.",
+ "Leave empty to scan the complete configured source namespace.": "Leave empty to scan the complete configured source namespace.",
+ "Leave empty to use https://storage.googleapis.com.": "Leave empty to use https://storage.googleapis.com.",
+ "Leave empty to use the account's public Azure Blob endpoint.": "Leave empty to use the account's public Azure Blob endpoint.",
+ "Leave empty to use the regional Amazon S3 endpoint.": "Leave empty to use the regional Amazon S3 endpoint.",
+ "Lifetime on this node": "Lifetime on this node",
+ "List matching objects without queueing or writing any object.": "List matching objects without queueing or writing any object.",
+ "Listed": "Listed",
+ "Live counters from the RustFS node that answered this request.": "Live counters from the RustFS node that answered this request.",
+ "Loading on-demand migration settings": "Loading on-demand migration settings",
+ "Local only": "Local only",
+ "Local prefix": "Local prefix",
+ "Local prefix (optional)": "Local prefix (optional)",
+ "Manage migration": "Manage migration",
+ "Migrated data": "Migrated data",
+ "Migrated objects": "Migrated objects",
+ "Migration active": "Migration active",
+ "Migration configuration could not be saved": "Migration configuration could not be saved",
+ "Migration configuration updated": "Migration configuration updated",
+ "Migration not configured": "Migration not configured",
+ "Migration paused": "Migration paused",
+ "Missing local objects are served from this source and then stored locally.": "Missing local objects are served from this source and then stored locally.",
+ "Multipart part size (bytes)": "Multipart part size (bytes)",
+ "Multipart part size must be a whole number from 5242880 to 5368709120.": "Multipart part size must be a whole number from 5242880 to 5368709120.",
+ "Native GCS has no object tags, so no tags will be copied.": "Native GCS has no object tags, so no tags will be copied.",
+ "Negative cache TTL (seconds)": "Negative cache TTL (seconds)",
+ "Negative cache TTL must be a whole number from 0 to 3600.": "Negative cache TTL must be a whole number from 0 to 3600.",
+ "No added prefix": "No added prefix",
+ "No backfill yet": "No backfill yet",
+ "No background backfill has been started for this bucket.": "No background backfill has been started for this bucket.",
+ "No live runtime state on this node": "No live runtime state on this node",
+ "No migration source configured": "No migration source configured",
+ "No recorded pull failures": "No recorded pull failures",
+ "No runtime state": "No runtime state",
+ "No source error recorded": "No source error recorded",
+ "Objects already migrated remain in the local bucket. You can start a new job later.": "Objects already migrated remain in the local bucket. You can start a new job later.",
+ "Objects listed": "Objects listed",
+ "Objects pulled": "Objects pulled",
+ "Objects whose recorded source ETag and size differ are pulled again.": "Objects whose recorded source ETag and size differ are pulled again.",
+ "On-demand migration": "On-demand migration",
+ "On-demand migration disabled": "On-demand migration disabled",
+ "On-demand migration enabled": "On-demand migration enabled",
+ "On-demand migration is not available on this server": "On-demand migration is not available on this server",
+ "On-demand migration is not enabled on this server": "On-demand migration is not enabled on this server",
+ "On-demand migration is unavailable": "On-demand migration is unavailable",
+ "Only local keys with this prefix will consult the source.": "Only local keys with this prefix will consult the source.",
+ "Open license settings": "Open license settings",
+ "Open migration settings": "Open migration settings",
+ "Paste the issuing certificate when the source uses a private CA.": "Paste the issuing certificate when the source uses a private CA.",
+ "Path style": "Path style",
+ "Performance and limits": "Performance and limits",
+ "Plan a read-only source cutover": "Plan a read-only source cutover",
+ "Prepended to the local key when RustFS reads the source.": "Prepended to the local key when RustFS reads the source.",
+ "Preserve source ETag": "Preserve source ETag",
+ "Provide it only when the source credentials require a session token.": "Provide it only when the source credentials require a session token.",
+ "Provider": "Provider",
+ "Pull queue capacity": "Pull queue capacity",
+ "Pull queue capacity must be a whole number from 1 to 65536.": "Pull queue capacity must be a whole number from 1 to 65536.",
+ "Pulled": "Pulled",
+ "Queue depth": "Queue depth",
+ "Range GET requests": "Range GET requests",
+ "Re-enter the Azure credential to test or save changes.": "Re-enter the Azure credential to test or save changes.",
+ "Re-enter the secret key to test or save changes.": "Re-enter the secret key to test or save changes.",
+ "Re-enter the service account JSON to test or save changes.": "Re-enter the service account JSON to test or save changes.",
+ "Read behavior": "Read behavior",
+ "Read from source on a miss": "Read from source on a miss",
+ "Region is required.": "Region is required.",
+ "Requires admin:SetBucketOnDemandMigration": "Requires admin:SetBucketOnDemandMigration",
+ "Requires source tag-read permission and adds one request per pull.": "Requires source tag-read permission and adds one request per pull.",
+ "Respect local delete markers": "Respect local delete markers",
+ "Return Not Found": "Return Not Found",
+ "Return SourceUnavailable": "Return SourceUnavailable",
+ "Returning Not Found can make sync clients treat a temporary source failure as a deletion.": "Returning Not Found can make sync clients treat a temporary source failure as a deletion.",
+ "Runtime status": "Runtime status",
+ "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.": "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.",
+ "RustFS reached the source bucket and listed it successfully.": "RustFS reached the source bucket and listed it successfully.",
+ "RustFS reads from this source and never writes or deletes objects there.": "RustFS reads from this source and never writes or deletes objects there.",
+ "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.": "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.",
+ "S3-compatible storage": "S3-compatible storage",
+ "SAS token": "SAS token",
+ "SAS token must omit the leading question mark and whitespace.": "SAS token must omit the leading question mark and whitespace.",
+ "Sample object": "Sample object",
+ "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.": "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.",
+ "Saving": "Saving",
+ "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.": "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.",
+ "Scan the source and pull objects that have not been requested yet.": "Scan the source and pull objects that have not been requested yet.",
+ "Send normal bucket notifications when a pulled object is stored locally.": "Send normal bucket notifications when a pulled object is stored locally.",
+ "Serve missing objects from an external source while migrating them into RustFS.": "Serve missing objects from an external source while migrating them into RustFS.",
+ "Serve range and queue the full object": "Serve range and queue the full object",
+ "Serve range only": "Serve range only",
+ "Server module disabled": "Server module disabled",
+ "Service-account JSON key": "Service-account JSON key",
+ "Session token (optional)": "Session token (optional)",
+ "Skip TLS certificate verification": "Skip TLS certificate verification",
+ "Skipped existing": "Skipped existing",
+ "Source bucket is required.": "Source bucket is required.",
+ "Source bucket must not contain slashes or whitespace.": "Source bucket must not contain slashes or whitespace.",
+ "Source circuit open": "Source circuit open",
+ "Source connection": "Source connection",
+ "Source container": "Source container",
+ "Source error response": "Source error response",
+ "Source listing prefix (optional)": "Source listing prefix (optional)",
+ "Source prefix": "Source prefix",
+ "Source prefix (optional)": "Source prefix (optional)",
+ "Source-hit ratio": "Source-hit ratio",
+ "Start a job when you are ready to migrate the remaining source objects.": "Start a job when you are ready to migrate the remaining source objects.",
+ "Start backfill": "Start backfill",
+ "Start background backfill": "Start background backfill",
+ "Start dry run": "Start dry run",
+ "TLS": "TLS",
+ "Test connection": "Test connection",
+ "Testing connection": "Testing connection",
+ "The endpoint must not contain a path, query, or fragment.": "The endpoint must not contain a path, query, or fragment.",
+ "The endpoint must not contain credentials.": "The endpoint must not contain credentials.",
+ "The existing source that RustFS will read from.": "The existing source that RustFS will read from.",
+ "The secret is stored by RustFS but never returned to the Console.": "The secret is stored by RustFS but never returned to the Console.",
+ "The server rejected this operation": "The server rejected this operation",
+ "The source bucket is empty or the selected prefix has no objects.": "The source bucket is empty or the selected prefix has no objects.",
+ "The source could not be reached": "The source could not be reached",
+ "The source is still being scanned, so no completion percentage is shown.": "The source is still being scanned, so no completion percentage is shown.",
+ "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.": "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.",
+ "This backend is not included in the server build": "This backend is not included in the server build",
+ "This provider requires a real region; auto is not supported.": "This provider requires a real region; auto is not supported.",
+ "Turn off to keep the saved configuration without consulting the source.": "Turn off to keep the saved configuration without consulting the source.",
+ "Unable to load on-demand migration": "Unable to load on-demand migration",
+ "Unable to load this setting": "Unable to load this setting",
+ "Unavailable when the server has no bucket GET total.": "Unavailable when the server has no bucket GET total.",
+ "Updated": "Updated",
+ "Upgrade RustFS to a version that provides the on-demand migration admin API.": "Upgrade RustFS to a version that provides the on-demand migration admin API.",
+ "Use a read-only key scoped to the source bucket.": "Use a read-only key scoped to the source bucket.",
+ "Use a service account with storage.objects.get and storage.objects.list.": "Use a service account with storage.objects.get and storage.objects.list.",
+ "Use a valid service-account JSON key with client_email and private_key.": "Use a valid service-account JSON key with client_email and private_key.",
+ "Use an absolute HTTP or HTTPS URL with no path.": "Use an absolute HTTP or HTTPS URL with no path.",
+ "Use an explicit style when the source redirects or reports a missing bucket.": "Use an explicit style when the source redirects or reports a missing bucket.",
+ "Use only in a trusted test environment. Prefer a custom CA certificate.": "Use only in a trusted test environment. Prefer a custom CA certificate.",
+ "Use provider default": "Use provider default",
+ "Used to derive the public endpoint when no custom endpoint is set.": "Used to derive the public endpoint when no custom endpoint is set.",
+ "Uses the S3 interoperability API and an HMAC key pair.": "Uses the S3 interoperability API and an HMAC key pair.",
+ "Uses the native Azure Blob API.": "Uses the native Azure Blob API.",
+ "Uses the native GCS API and a service-account JSON key.": "Uses the native GCS API and a service-account JSON key.",
+ "View backfill": "View backfill",
+ "Virtual-host style": "Virtual-host style",
+ "You do not have permission to change migration settings": "You do not have permission to change migration settings",
+ "You do not have permission to control backfill": "You do not have permission to control backfill",
+ "You do not have permission to view this bucket's migration settings.": "You do not have permission to view this bucket's migration settings.",
+ "Your migration configuration changes will be lost.": "Your migration configuration changes will be lost.",
+ "pull failures": "pull failures"
}
diff --git a/i18n/locales/fr-FR.json b/i18n/locales/fr-FR.json
index ae360fb0..2a55d2ec 100644
--- a/i18n/locales/fr-FR.json
+++ b/i18n/locales/fr-FR.json
@@ -1966,5 +1966,255 @@
"The destination was copied, but source deletion could not be confirmed. Check both locations before retrying.": "L’objet a été copié vers la destination, mais la suppression de la source n’a pas pu être confirmée. Vérifiez les deux emplacements avant de réessayer.",
"The source changed or the destination already exists. Refresh and choose a different destination.": "La source a changé ou la destination existe déjà. Actualisez et choisissez une autre destination.",
"Show key": "Afficher la clé",
- "Hide key": "Masquer la clé"
+ "Hide key": "Masquer la clé",
+ "0 disables the cache; maximum 3600.": "0 disables the cache; maximum 3600.",
+ "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.": "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.",
+ "100–600000 ms between source body chunks.": "100–600000 ms between source body chunks.",
+ "100–600000 ms.": "100–600000 ms.",
+ "1–256 across inline, background, and backfill work.": "1–256 across inline, background, and backfill work.",
+ "1–65536 waiting background pulls.": "1–65536 waiting background pulls.",
+ "5242880–5368709120 bytes (5 MiB–5 GiB).": "5242880–5368709120 bytes (5 MiB–5 GiB).",
+ "A backfill job is already running": "A backfill job is already running",
+ "A local versioned delete marker prevents the object from being pulled again.": "A local versioned delete marker prevents the object from being pulled again.",
+ "AWS regions may contain only letters, numbers, and hyphens.": "AWS regions may contain only letters, numbers, and hyphens.",
+ "Access key is required.": "Access key is required.",
+ "Account key": "Account key",
+ "Addressing style": "Addressing style",
+ "Adds source requests to listings so clients can see objects not yet migrated.": "Adds source requests to listings so clients can see objects not yet migrated.",
+ "All keys": "All keys",
+ "Always skip": "Always skip",
+ "Amazon S3": "Amazon S3",
+ "Any current local object is skipped.": "Any current local object is skipped.",
+ "Automatic": "Automatic",
+ "Azure Blob Storage (Native)": "Azure Blob Storage (Native)",
+ "Azure account key must be valid Base64.": "Azure account key must be valid Base64.",
+ "Azure account may contain only letters, numbers, and hyphens.": "Azure account may contain only letters, numbers, and hyphens.",
+ "Azure credential type": "Azure credential type",
+ "Azure storage account": "Azure storage account",
+ "Azure storage account is required.": "Azure storage account is required.",
+ "Backfill cancellation requested": "Backfill cancellation requested",
+ "Backfill cancelled": "Backfill cancelled",
+ "Backfill cannot start until the module is enabled on every server node.": "Backfill cannot start until the module is enabled on every server node.",
+ "Backfill completed": "Backfill completed",
+ "Backfill completed with failures": "Backfill completed with failures",
+ "Backfill dry run started": "Backfill dry run started",
+ "Backfill failed": "Backfill failed",
+ "Backfill in progress": "Backfill in progress",
+ "Backfill operation failed": "Backfill operation failed",
+ "Backfill paused": "Backfill paused",
+ "Backfill pending": "Backfill pending",
+ "Backfill running": "Backfill running",
+ "Backfill started": "Backfill started",
+ "Background backfill": "Background backfill",
+ "Bandwidth limit (bytes/s, optional)": "Bandwidth limit (bytes/s, optional)",
+ "Bandwidth limit must be a whole number of at least 65536 bytes/s.": "Bandwidth limit must be a whole number of at least 65536 bytes/s.",
+ "Breaker closed": "Breaker closed",
+ "Breaker half-open": "Breaker half-open",
+ "Breaker open": "Breaker open",
+ "CA certificate (PEM, optional)": "CA certificate (PEM, optional)",
+ "CA certificate must be PEM encoded.": "CA certificate must be PEM encoded.",
+ "Cancel backfill": "Cancel backfill",
+ "Cancel the running backfill?": "Cancel the running backfill?",
+ "Cancelling": "Cancelling",
+ "Circuit breaker": "Circuit breaker",
+ "Compare source ETag and size": "Compare source ETag and size",
+ "Concurrent pulls": "Concurrent pulls",
+ "Concurrent pulls must be a whole number from 1 to 256.": "Concurrent pulls must be a whole number from 1 to 256.",
+ "Configuration changed on the server. Refresh and review it before disabling migration.": "Configuration changed on the server. Refresh and review it before disabling migration.",
+ "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.": "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.",
+ "Connect this bucket to an external source without interrupting reads.": "Connect this bucket to an external source without interrupting reads.",
+ "Connect timeout (ms)": "Connect timeout (ms)",
+ "Connect timeout must be a whole number from 100 to 600000.": "Connect timeout must be a whole number from 100 to 600000.",
+ "Connection test passed": "Connection test passed",
+ "Copy object tags": "Copy object tags",
+ "Create a bucket before configuring an external migration source.": "Create a bucket before configuring an external migration source.",
+ "Credentials are write-only": "Credentials are write-only",
+ "Custom endpoint (optional)": "Custom endpoint (optional)",
+ "Data": "Data",
+ "Disable": "Disable",
+ "Disable migration": "Disable migration",
+ "Disable on-demand migration?": "Disable on-demand migration?",
+ "Disabling": "Disabling",
+ "Discard changes": "Discard changes",
+ "Discard unsaved changes?": "Discard unsaved changes?",
+ "Edit on-demand migration": "Edit on-demand migration",
+ "Editing cancels the active backfill": "Editing cancels the active backfill",
+ "Emit object-created events": "Emit object-created events",
+ "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.": "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.",
+ "Enable migration": "Enable migration",
+ "Enable on-demand migration": "Enable on-demand migration",
+ "Endpoint host": "Endpoint host",
+ "Endpoint is required for this provider.": "Endpoint is required for this provider.",
+ "Enter a real region or auto.": "Enter a real region or auto.",
+ "Enter an absolute HTTP or HTTPS endpoint.": "Enter an absolute HTTP or HTTPS endpoint.",
+ "Enter the Base64 storage account key.": "Enter the Base64 storage account key.",
+ "Enter the SAS query string without a leading question mark.": "Enter the SAS query string without a leading question mark.",
+ "Existing local objects": "Existing local objects",
+ "Failed objects": "Failed objects",
+ "First-byte timeout (ms)": "First-byte timeout (ms)",
+ "First-byte timeout must be a whole number from 100 to 600000.": "First-byte timeout must be a whole number from 100 to 600000.",
+ "For security, re-enter the source credential before testing or saving any change.": "For security, re-enter the source credential before testing or saving any change.",
+ "Google Cloud Storage (HMAC)": "Google Cloud Storage (HMAC)",
+ "Google Cloud Storage (Native)": "Google Cloud Storage (Native)",
+ "HEAD requests": "HEAD requests",
+ "Idle timeout (ms)": "Idle timeout (ms)",
+ "Idle timeout must be a whole number from 100 to 600000.": "Idle timeout must be a whole number from 100 to 600000.",
+ "In-flight pulls": "In-flight pulls",
+ "Include source objects in ListObjectsV2": "Include source objects in ListObjectsV2",
+ "Inline object limit (bytes)": "Inline object limit (bytes)",
+ "Inline object limit must be a whole number from 0 to 268435456.": "Inline object limit must be a whole number from 0 to 268435456.",
+ "Keep editing": "Keep editing",
+ "Keep running": "Keep running",
+ "Keep the source ETag unless local bucket encryption replaces it.": "Keep the source ETag unless local bucket encryption replaces it.",
+ "Key mapping": "Key mapping",
+ "Last backfill error": "Last backfill error",
+ "Last source error": "Last source error",
+ "Latest job": "Latest job",
+ "Leave empty for unlimited; the server minimum is 65536 bytes/s.": "Leave empty for unlimited; the server minimum is 65536 bytes/s.",
+ "Leave empty to scan the complete configured source namespace.": "Leave empty to scan the complete configured source namespace.",
+ "Leave empty to use https://storage.googleapis.com.": "Leave empty to use https://storage.googleapis.com.",
+ "Leave empty to use the account's public Azure Blob endpoint.": "Leave empty to use the account's public Azure Blob endpoint.",
+ "Leave empty to use the regional Amazon S3 endpoint.": "Leave empty to use the regional Amazon S3 endpoint.",
+ "Lifetime on this node": "Lifetime on this node",
+ "List matching objects without queueing or writing any object.": "List matching objects without queueing or writing any object.",
+ "Listed": "Listed",
+ "Live counters from the RustFS node that answered this request.": "Live counters from the RustFS node that answered this request.",
+ "Loading on-demand migration settings": "Loading on-demand migration settings",
+ "Local only": "Local only",
+ "Local prefix": "Local prefix",
+ "Local prefix (optional)": "Local prefix (optional)",
+ "Manage migration": "Manage migration",
+ "Migrated data": "Migrated data",
+ "Migrated objects": "Migrated objects",
+ "Migration active": "Migration active",
+ "Migration configuration could not be saved": "Migration configuration could not be saved",
+ "Migration configuration updated": "Migration configuration updated",
+ "Migration not configured": "Migration not configured",
+ "Migration paused": "Migration paused",
+ "Missing local objects are served from this source and then stored locally.": "Missing local objects are served from this source and then stored locally.",
+ "Multipart part size (bytes)": "Multipart part size (bytes)",
+ "Multipart part size must be a whole number from 5242880 to 5368709120.": "Multipart part size must be a whole number from 5242880 to 5368709120.",
+ "Native GCS has no object tags, so no tags will be copied.": "Native GCS has no object tags, so no tags will be copied.",
+ "Negative cache TTL (seconds)": "Negative cache TTL (seconds)",
+ "Negative cache TTL must be a whole number from 0 to 3600.": "Negative cache TTL must be a whole number from 0 to 3600.",
+ "No added prefix": "No added prefix",
+ "No backfill yet": "No backfill yet",
+ "No background backfill has been started for this bucket.": "No background backfill has been started for this bucket.",
+ "No live runtime state on this node": "No live runtime state on this node",
+ "No migration source configured": "No migration source configured",
+ "No recorded pull failures": "No recorded pull failures",
+ "No runtime state": "No runtime state",
+ "No source error recorded": "No source error recorded",
+ "Objects already migrated remain in the local bucket. You can start a new job later.": "Objects already migrated remain in the local bucket. You can start a new job later.",
+ "Objects listed": "Objects listed",
+ "Objects pulled": "Objects pulled",
+ "Objects whose recorded source ETag and size differ are pulled again.": "Objects whose recorded source ETag and size differ are pulled again.",
+ "On-demand migration": "On-demand migration",
+ "On-demand migration disabled": "On-demand migration disabled",
+ "On-demand migration enabled": "On-demand migration enabled",
+ "On-demand migration is not available on this server": "On-demand migration is not available on this server",
+ "On-demand migration is not enabled on this server": "On-demand migration is not enabled on this server",
+ "On-demand migration is unavailable": "On-demand migration is unavailable",
+ "Only local keys with this prefix will consult the source.": "Only local keys with this prefix will consult the source.",
+ "Open license settings": "Open license settings",
+ "Open migration settings": "Open migration settings",
+ "Paste the issuing certificate when the source uses a private CA.": "Paste the issuing certificate when the source uses a private CA.",
+ "Path style": "Path style",
+ "Performance and limits": "Performance and limits",
+ "Plan a read-only source cutover": "Plan a read-only source cutover",
+ "Prepended to the local key when RustFS reads the source.": "Prepended to the local key when RustFS reads the source.",
+ "Preserve source ETag": "Preserve source ETag",
+ "Provide it only when the source credentials require a session token.": "Provide it only when the source credentials require a session token.",
+ "Provider": "Provider",
+ "Pull queue capacity": "Pull queue capacity",
+ "Pull queue capacity must be a whole number from 1 to 65536.": "Pull queue capacity must be a whole number from 1 to 65536.",
+ "Pulled": "Pulled",
+ "Queue depth": "Queue depth",
+ "Range GET requests": "Range GET requests",
+ "Re-enter the Azure credential to test or save changes.": "Re-enter the Azure credential to test or save changes.",
+ "Re-enter the secret key to test or save changes.": "Re-enter the secret key to test or save changes.",
+ "Re-enter the service account JSON to test or save changes.": "Re-enter the service account JSON to test or save changes.",
+ "Read behavior": "Read behavior",
+ "Read from source on a miss": "Read from source on a miss",
+ "Region is required.": "Region is required.",
+ "Requires admin:SetBucketOnDemandMigration": "Requires admin:SetBucketOnDemandMigration",
+ "Requires source tag-read permission and adds one request per pull.": "Requires source tag-read permission and adds one request per pull.",
+ "Respect local delete markers": "Respect local delete markers",
+ "Return Not Found": "Return Not Found",
+ "Return SourceUnavailable": "Return SourceUnavailable",
+ "Returning Not Found can make sync clients treat a temporary source failure as a deletion.": "Returning Not Found can make sync clients treat a temporary source failure as a deletion.",
+ "Runtime status": "Runtime status",
+ "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.": "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.",
+ "RustFS reached the source bucket and listed it successfully.": "RustFS reached the source bucket and listed it successfully.",
+ "RustFS reads from this source and never writes or deletes objects there.": "RustFS reads from this source and never writes or deletes objects there.",
+ "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.": "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.",
+ "S3-compatible storage": "S3-compatible storage",
+ "SAS token": "SAS token",
+ "SAS token must omit the leading question mark and whitespace.": "SAS token must omit the leading question mark and whitespace.",
+ "Sample object": "Sample object",
+ "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.": "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.",
+ "Saving": "Saving",
+ "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.": "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.",
+ "Scan the source and pull objects that have not been requested yet.": "Scan the source and pull objects that have not been requested yet.",
+ "Send normal bucket notifications when a pulled object is stored locally.": "Send normal bucket notifications when a pulled object is stored locally.",
+ "Serve missing objects from an external source while migrating them into RustFS.": "Serve missing objects from an external source while migrating them into RustFS.",
+ "Serve range and queue the full object": "Serve range and queue the full object",
+ "Serve range only": "Serve range only",
+ "Server module disabled": "Server module disabled",
+ "Service-account JSON key": "Service-account JSON key",
+ "Session token (optional)": "Session token (optional)",
+ "Skip TLS certificate verification": "Skip TLS certificate verification",
+ "Skipped existing": "Skipped existing",
+ "Source bucket is required.": "Source bucket is required.",
+ "Source bucket must not contain slashes or whitespace.": "Source bucket must not contain slashes or whitespace.",
+ "Source circuit open": "Source circuit open",
+ "Source connection": "Source connection",
+ "Source container": "Source container",
+ "Source error response": "Source error response",
+ "Source listing prefix (optional)": "Source listing prefix (optional)",
+ "Source prefix": "Source prefix",
+ "Source prefix (optional)": "Source prefix (optional)",
+ "Source-hit ratio": "Source-hit ratio",
+ "Start a job when you are ready to migrate the remaining source objects.": "Start a job when you are ready to migrate the remaining source objects.",
+ "Start backfill": "Start backfill",
+ "Start background backfill": "Start background backfill",
+ "Start dry run": "Start dry run",
+ "TLS": "TLS",
+ "Test connection": "Test connection",
+ "Testing connection": "Testing connection",
+ "The endpoint must not contain a path, query, or fragment.": "The endpoint must not contain a path, query, or fragment.",
+ "The endpoint must not contain credentials.": "The endpoint must not contain credentials.",
+ "The existing source that RustFS will read from.": "The existing source that RustFS will read from.",
+ "The secret is stored by RustFS but never returned to the Console.": "The secret is stored by RustFS but never returned to the Console.",
+ "The server rejected this operation": "The server rejected this operation",
+ "The source bucket is empty or the selected prefix has no objects.": "The source bucket is empty or the selected prefix has no objects.",
+ "The source could not be reached": "The source could not be reached",
+ "The source is still being scanned, so no completion percentage is shown.": "The source is still being scanned, so no completion percentage is shown.",
+ "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.": "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.",
+ "This backend is not included in the server build": "This backend is not included in the server build",
+ "This provider requires a real region; auto is not supported.": "This provider requires a real region; auto is not supported.",
+ "Turn off to keep the saved configuration without consulting the source.": "Turn off to keep the saved configuration without consulting the source.",
+ "Unable to load on-demand migration": "Unable to load on-demand migration",
+ "Unable to load this setting": "Unable to load this setting",
+ "Unavailable when the server has no bucket GET total.": "Unavailable when the server has no bucket GET total.",
+ "Updated": "Updated",
+ "Upgrade RustFS to a version that provides the on-demand migration admin API.": "Upgrade RustFS to a version that provides the on-demand migration admin API.",
+ "Use a read-only key scoped to the source bucket.": "Use a read-only key scoped to the source bucket.",
+ "Use a service account with storage.objects.get and storage.objects.list.": "Use a service account with storage.objects.get and storage.objects.list.",
+ "Use a valid service-account JSON key with client_email and private_key.": "Use a valid service-account JSON key with client_email and private_key.",
+ "Use an absolute HTTP or HTTPS URL with no path.": "Use an absolute HTTP or HTTPS URL with no path.",
+ "Use an explicit style when the source redirects or reports a missing bucket.": "Use an explicit style when the source redirects or reports a missing bucket.",
+ "Use only in a trusted test environment. Prefer a custom CA certificate.": "Use only in a trusted test environment. Prefer a custom CA certificate.",
+ "Use provider default": "Use provider default",
+ "Used to derive the public endpoint when no custom endpoint is set.": "Used to derive the public endpoint when no custom endpoint is set.",
+ "Uses the S3 interoperability API and an HMAC key pair.": "Uses the S3 interoperability API and an HMAC key pair.",
+ "Uses the native Azure Blob API.": "Uses the native Azure Blob API.",
+ "Uses the native GCS API and a service-account JSON key.": "Uses the native GCS API and a service-account JSON key.",
+ "View backfill": "View backfill",
+ "Virtual-host style": "Virtual-host style",
+ "You do not have permission to change migration settings": "You do not have permission to change migration settings",
+ "You do not have permission to control backfill": "You do not have permission to control backfill",
+ "You do not have permission to view this bucket's migration settings.": "You do not have permission to view this bucket's migration settings.",
+ "Your migration configuration changes will be lost.": "Your migration configuration changes will be lost.",
+ "pull failures": "pull failures"
}
diff --git a/i18n/locales/id-ID.json b/i18n/locales/id-ID.json
index cb4e1318..7fc7d6aa 100644
--- a/i18n/locales/id-ID.json
+++ b/i18n/locales/id-ID.json
@@ -1966,5 +1966,255 @@
"The destination was copied, but source deletion could not be confirmed. Check both locations before retrying.": "Objek telah disalin ke tujuan, tetapi penghapusan sumber tidak dapat dikonfirmasi. Periksa kedua lokasi sebelum mencoba lagi.",
"The source changed or the destination already exists. Refresh and choose a different destination.": "Sumber berubah atau tujuan sudah ada. Muat ulang dan pilih tujuan lain.",
"Show key": "Tampilkan kunci",
- "Hide key": "Sembunyikan kunci"
+ "Hide key": "Sembunyikan kunci",
+ "0 disables the cache; maximum 3600.": "0 disables the cache; maximum 3600.",
+ "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.": "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.",
+ "100–600000 ms between source body chunks.": "100–600000 ms between source body chunks.",
+ "100–600000 ms.": "100–600000 ms.",
+ "1–256 across inline, background, and backfill work.": "1–256 across inline, background, and backfill work.",
+ "1–65536 waiting background pulls.": "1–65536 waiting background pulls.",
+ "5242880–5368709120 bytes (5 MiB–5 GiB).": "5242880–5368709120 bytes (5 MiB–5 GiB).",
+ "A backfill job is already running": "A backfill job is already running",
+ "A local versioned delete marker prevents the object from being pulled again.": "A local versioned delete marker prevents the object from being pulled again.",
+ "AWS regions may contain only letters, numbers, and hyphens.": "AWS regions may contain only letters, numbers, and hyphens.",
+ "Access key is required.": "Access key is required.",
+ "Account key": "Account key",
+ "Addressing style": "Addressing style",
+ "Adds source requests to listings so clients can see objects not yet migrated.": "Adds source requests to listings so clients can see objects not yet migrated.",
+ "All keys": "All keys",
+ "Always skip": "Always skip",
+ "Amazon S3": "Amazon S3",
+ "Any current local object is skipped.": "Any current local object is skipped.",
+ "Automatic": "Automatic",
+ "Azure Blob Storage (Native)": "Azure Blob Storage (Native)",
+ "Azure account key must be valid Base64.": "Azure account key must be valid Base64.",
+ "Azure account may contain only letters, numbers, and hyphens.": "Azure account may contain only letters, numbers, and hyphens.",
+ "Azure credential type": "Azure credential type",
+ "Azure storage account": "Azure storage account",
+ "Azure storage account is required.": "Azure storage account is required.",
+ "Backfill cancellation requested": "Backfill cancellation requested",
+ "Backfill cancelled": "Backfill cancelled",
+ "Backfill cannot start until the module is enabled on every server node.": "Backfill cannot start until the module is enabled on every server node.",
+ "Backfill completed": "Backfill completed",
+ "Backfill completed with failures": "Backfill completed with failures",
+ "Backfill dry run started": "Backfill dry run started",
+ "Backfill failed": "Backfill failed",
+ "Backfill in progress": "Backfill in progress",
+ "Backfill operation failed": "Backfill operation failed",
+ "Backfill paused": "Backfill paused",
+ "Backfill pending": "Backfill pending",
+ "Backfill running": "Backfill running",
+ "Backfill started": "Backfill started",
+ "Background backfill": "Background backfill",
+ "Bandwidth limit (bytes/s, optional)": "Bandwidth limit (bytes/s, optional)",
+ "Bandwidth limit must be a whole number of at least 65536 bytes/s.": "Bandwidth limit must be a whole number of at least 65536 bytes/s.",
+ "Breaker closed": "Breaker closed",
+ "Breaker half-open": "Breaker half-open",
+ "Breaker open": "Breaker open",
+ "CA certificate (PEM, optional)": "CA certificate (PEM, optional)",
+ "CA certificate must be PEM encoded.": "CA certificate must be PEM encoded.",
+ "Cancel backfill": "Cancel backfill",
+ "Cancel the running backfill?": "Cancel the running backfill?",
+ "Cancelling": "Cancelling",
+ "Circuit breaker": "Circuit breaker",
+ "Compare source ETag and size": "Compare source ETag and size",
+ "Concurrent pulls": "Concurrent pulls",
+ "Concurrent pulls must be a whole number from 1 to 256.": "Concurrent pulls must be a whole number from 1 to 256.",
+ "Configuration changed on the server. Refresh and review it before disabling migration.": "Configuration changed on the server. Refresh and review it before disabling migration.",
+ "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.": "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.",
+ "Connect this bucket to an external source without interrupting reads.": "Connect this bucket to an external source without interrupting reads.",
+ "Connect timeout (ms)": "Connect timeout (ms)",
+ "Connect timeout must be a whole number from 100 to 600000.": "Connect timeout must be a whole number from 100 to 600000.",
+ "Connection test passed": "Connection test passed",
+ "Copy object tags": "Copy object tags",
+ "Create a bucket before configuring an external migration source.": "Create a bucket before configuring an external migration source.",
+ "Credentials are write-only": "Credentials are write-only",
+ "Custom endpoint (optional)": "Custom endpoint (optional)",
+ "Data": "Data",
+ "Disable": "Disable",
+ "Disable migration": "Disable migration",
+ "Disable on-demand migration?": "Disable on-demand migration?",
+ "Disabling": "Disabling",
+ "Discard changes": "Discard changes",
+ "Discard unsaved changes?": "Discard unsaved changes?",
+ "Edit on-demand migration": "Edit on-demand migration",
+ "Editing cancels the active backfill": "Editing cancels the active backfill",
+ "Emit object-created events": "Emit object-created events",
+ "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.": "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.",
+ "Enable migration": "Enable migration",
+ "Enable on-demand migration": "Enable on-demand migration",
+ "Endpoint host": "Endpoint host",
+ "Endpoint is required for this provider.": "Endpoint is required for this provider.",
+ "Enter a real region or auto.": "Enter a real region or auto.",
+ "Enter an absolute HTTP or HTTPS endpoint.": "Enter an absolute HTTP or HTTPS endpoint.",
+ "Enter the Base64 storage account key.": "Enter the Base64 storage account key.",
+ "Enter the SAS query string without a leading question mark.": "Enter the SAS query string without a leading question mark.",
+ "Existing local objects": "Existing local objects",
+ "Failed objects": "Failed objects",
+ "First-byte timeout (ms)": "First-byte timeout (ms)",
+ "First-byte timeout must be a whole number from 100 to 600000.": "First-byte timeout must be a whole number from 100 to 600000.",
+ "For security, re-enter the source credential before testing or saving any change.": "For security, re-enter the source credential before testing or saving any change.",
+ "Google Cloud Storage (HMAC)": "Google Cloud Storage (HMAC)",
+ "Google Cloud Storage (Native)": "Google Cloud Storage (Native)",
+ "HEAD requests": "HEAD requests",
+ "Idle timeout (ms)": "Idle timeout (ms)",
+ "Idle timeout must be a whole number from 100 to 600000.": "Idle timeout must be a whole number from 100 to 600000.",
+ "In-flight pulls": "In-flight pulls",
+ "Include source objects in ListObjectsV2": "Include source objects in ListObjectsV2",
+ "Inline object limit (bytes)": "Inline object limit (bytes)",
+ "Inline object limit must be a whole number from 0 to 268435456.": "Inline object limit must be a whole number from 0 to 268435456.",
+ "Keep editing": "Keep editing",
+ "Keep running": "Keep running",
+ "Keep the source ETag unless local bucket encryption replaces it.": "Keep the source ETag unless local bucket encryption replaces it.",
+ "Key mapping": "Key mapping",
+ "Last backfill error": "Last backfill error",
+ "Last source error": "Last source error",
+ "Latest job": "Latest job",
+ "Leave empty for unlimited; the server minimum is 65536 bytes/s.": "Leave empty for unlimited; the server minimum is 65536 bytes/s.",
+ "Leave empty to scan the complete configured source namespace.": "Leave empty to scan the complete configured source namespace.",
+ "Leave empty to use https://storage.googleapis.com.": "Leave empty to use https://storage.googleapis.com.",
+ "Leave empty to use the account's public Azure Blob endpoint.": "Leave empty to use the account's public Azure Blob endpoint.",
+ "Leave empty to use the regional Amazon S3 endpoint.": "Leave empty to use the regional Amazon S3 endpoint.",
+ "Lifetime on this node": "Lifetime on this node",
+ "List matching objects without queueing or writing any object.": "List matching objects without queueing or writing any object.",
+ "Listed": "Listed",
+ "Live counters from the RustFS node that answered this request.": "Live counters from the RustFS node that answered this request.",
+ "Loading on-demand migration settings": "Loading on-demand migration settings",
+ "Local only": "Local only",
+ "Local prefix": "Local prefix",
+ "Local prefix (optional)": "Local prefix (optional)",
+ "Manage migration": "Manage migration",
+ "Migrated data": "Migrated data",
+ "Migrated objects": "Migrated objects",
+ "Migration active": "Migration active",
+ "Migration configuration could not be saved": "Migration configuration could not be saved",
+ "Migration configuration updated": "Migration configuration updated",
+ "Migration not configured": "Migration not configured",
+ "Migration paused": "Migration paused",
+ "Missing local objects are served from this source and then stored locally.": "Missing local objects are served from this source and then stored locally.",
+ "Multipart part size (bytes)": "Multipart part size (bytes)",
+ "Multipart part size must be a whole number from 5242880 to 5368709120.": "Multipart part size must be a whole number from 5242880 to 5368709120.",
+ "Native GCS has no object tags, so no tags will be copied.": "Native GCS has no object tags, so no tags will be copied.",
+ "Negative cache TTL (seconds)": "Negative cache TTL (seconds)",
+ "Negative cache TTL must be a whole number from 0 to 3600.": "Negative cache TTL must be a whole number from 0 to 3600.",
+ "No added prefix": "No added prefix",
+ "No backfill yet": "No backfill yet",
+ "No background backfill has been started for this bucket.": "No background backfill has been started for this bucket.",
+ "No live runtime state on this node": "No live runtime state on this node",
+ "No migration source configured": "No migration source configured",
+ "No recorded pull failures": "No recorded pull failures",
+ "No runtime state": "No runtime state",
+ "No source error recorded": "No source error recorded",
+ "Objects already migrated remain in the local bucket. You can start a new job later.": "Objects already migrated remain in the local bucket. You can start a new job later.",
+ "Objects listed": "Objects listed",
+ "Objects pulled": "Objects pulled",
+ "Objects whose recorded source ETag and size differ are pulled again.": "Objects whose recorded source ETag and size differ are pulled again.",
+ "On-demand migration": "On-demand migration",
+ "On-demand migration disabled": "On-demand migration disabled",
+ "On-demand migration enabled": "On-demand migration enabled",
+ "On-demand migration is not available on this server": "On-demand migration is not available on this server",
+ "On-demand migration is not enabled on this server": "On-demand migration is not enabled on this server",
+ "On-demand migration is unavailable": "On-demand migration is unavailable",
+ "Only local keys with this prefix will consult the source.": "Only local keys with this prefix will consult the source.",
+ "Open license settings": "Open license settings",
+ "Open migration settings": "Open migration settings",
+ "Paste the issuing certificate when the source uses a private CA.": "Paste the issuing certificate when the source uses a private CA.",
+ "Path style": "Path style",
+ "Performance and limits": "Performance and limits",
+ "Plan a read-only source cutover": "Plan a read-only source cutover",
+ "Prepended to the local key when RustFS reads the source.": "Prepended to the local key when RustFS reads the source.",
+ "Preserve source ETag": "Preserve source ETag",
+ "Provide it only when the source credentials require a session token.": "Provide it only when the source credentials require a session token.",
+ "Provider": "Provider",
+ "Pull queue capacity": "Pull queue capacity",
+ "Pull queue capacity must be a whole number from 1 to 65536.": "Pull queue capacity must be a whole number from 1 to 65536.",
+ "Pulled": "Pulled",
+ "Queue depth": "Queue depth",
+ "Range GET requests": "Range GET requests",
+ "Re-enter the Azure credential to test or save changes.": "Re-enter the Azure credential to test or save changes.",
+ "Re-enter the secret key to test or save changes.": "Re-enter the secret key to test or save changes.",
+ "Re-enter the service account JSON to test or save changes.": "Re-enter the service account JSON to test or save changes.",
+ "Read behavior": "Read behavior",
+ "Read from source on a miss": "Read from source on a miss",
+ "Region is required.": "Region is required.",
+ "Requires admin:SetBucketOnDemandMigration": "Requires admin:SetBucketOnDemandMigration",
+ "Requires source tag-read permission and adds one request per pull.": "Requires source tag-read permission and adds one request per pull.",
+ "Respect local delete markers": "Respect local delete markers",
+ "Return Not Found": "Return Not Found",
+ "Return SourceUnavailable": "Return SourceUnavailable",
+ "Returning Not Found can make sync clients treat a temporary source failure as a deletion.": "Returning Not Found can make sync clients treat a temporary source failure as a deletion.",
+ "Runtime status": "Runtime status",
+ "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.": "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.",
+ "RustFS reached the source bucket and listed it successfully.": "RustFS reached the source bucket and listed it successfully.",
+ "RustFS reads from this source and never writes or deletes objects there.": "RustFS reads from this source and never writes or deletes objects there.",
+ "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.": "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.",
+ "S3-compatible storage": "S3-compatible storage",
+ "SAS token": "SAS token",
+ "SAS token must omit the leading question mark and whitespace.": "SAS token must omit the leading question mark and whitespace.",
+ "Sample object": "Sample object",
+ "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.": "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.",
+ "Saving": "Saving",
+ "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.": "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.",
+ "Scan the source and pull objects that have not been requested yet.": "Scan the source and pull objects that have not been requested yet.",
+ "Send normal bucket notifications when a pulled object is stored locally.": "Send normal bucket notifications when a pulled object is stored locally.",
+ "Serve missing objects from an external source while migrating them into RustFS.": "Serve missing objects from an external source while migrating them into RustFS.",
+ "Serve range and queue the full object": "Serve range and queue the full object",
+ "Serve range only": "Serve range only",
+ "Server module disabled": "Server module disabled",
+ "Service-account JSON key": "Service-account JSON key",
+ "Session token (optional)": "Session token (optional)",
+ "Skip TLS certificate verification": "Skip TLS certificate verification",
+ "Skipped existing": "Skipped existing",
+ "Source bucket is required.": "Source bucket is required.",
+ "Source bucket must not contain slashes or whitespace.": "Source bucket must not contain slashes or whitespace.",
+ "Source circuit open": "Source circuit open",
+ "Source connection": "Source connection",
+ "Source container": "Source container",
+ "Source error response": "Source error response",
+ "Source listing prefix (optional)": "Source listing prefix (optional)",
+ "Source prefix": "Source prefix",
+ "Source prefix (optional)": "Source prefix (optional)",
+ "Source-hit ratio": "Source-hit ratio",
+ "Start a job when you are ready to migrate the remaining source objects.": "Start a job when you are ready to migrate the remaining source objects.",
+ "Start backfill": "Start backfill",
+ "Start background backfill": "Start background backfill",
+ "Start dry run": "Start dry run",
+ "TLS": "TLS",
+ "Test connection": "Test connection",
+ "Testing connection": "Testing connection",
+ "The endpoint must not contain a path, query, or fragment.": "The endpoint must not contain a path, query, or fragment.",
+ "The endpoint must not contain credentials.": "The endpoint must not contain credentials.",
+ "The existing source that RustFS will read from.": "The existing source that RustFS will read from.",
+ "The secret is stored by RustFS but never returned to the Console.": "The secret is stored by RustFS but never returned to the Console.",
+ "The server rejected this operation": "The server rejected this operation",
+ "The source bucket is empty or the selected prefix has no objects.": "The source bucket is empty or the selected prefix has no objects.",
+ "The source could not be reached": "The source could not be reached",
+ "The source is still being scanned, so no completion percentage is shown.": "The source is still being scanned, so no completion percentage is shown.",
+ "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.": "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.",
+ "This backend is not included in the server build": "This backend is not included in the server build",
+ "This provider requires a real region; auto is not supported.": "This provider requires a real region; auto is not supported.",
+ "Turn off to keep the saved configuration without consulting the source.": "Turn off to keep the saved configuration without consulting the source.",
+ "Unable to load on-demand migration": "Unable to load on-demand migration",
+ "Unable to load this setting": "Unable to load this setting",
+ "Unavailable when the server has no bucket GET total.": "Unavailable when the server has no bucket GET total.",
+ "Updated": "Updated",
+ "Upgrade RustFS to a version that provides the on-demand migration admin API.": "Upgrade RustFS to a version that provides the on-demand migration admin API.",
+ "Use a read-only key scoped to the source bucket.": "Use a read-only key scoped to the source bucket.",
+ "Use a service account with storage.objects.get and storage.objects.list.": "Use a service account with storage.objects.get and storage.objects.list.",
+ "Use a valid service-account JSON key with client_email and private_key.": "Use a valid service-account JSON key with client_email and private_key.",
+ "Use an absolute HTTP or HTTPS URL with no path.": "Use an absolute HTTP or HTTPS URL with no path.",
+ "Use an explicit style when the source redirects or reports a missing bucket.": "Use an explicit style when the source redirects or reports a missing bucket.",
+ "Use only in a trusted test environment. Prefer a custom CA certificate.": "Use only in a trusted test environment. Prefer a custom CA certificate.",
+ "Use provider default": "Use provider default",
+ "Used to derive the public endpoint when no custom endpoint is set.": "Used to derive the public endpoint when no custom endpoint is set.",
+ "Uses the S3 interoperability API and an HMAC key pair.": "Uses the S3 interoperability API and an HMAC key pair.",
+ "Uses the native Azure Blob API.": "Uses the native Azure Blob API.",
+ "Uses the native GCS API and a service-account JSON key.": "Uses the native GCS API and a service-account JSON key.",
+ "View backfill": "View backfill",
+ "Virtual-host style": "Virtual-host style",
+ "You do not have permission to change migration settings": "You do not have permission to change migration settings",
+ "You do not have permission to control backfill": "You do not have permission to control backfill",
+ "You do not have permission to view this bucket's migration settings.": "You do not have permission to view this bucket's migration settings.",
+ "Your migration configuration changes will be lost.": "Your migration configuration changes will be lost.",
+ "pull failures": "pull failures"
}
diff --git a/i18n/locales/it-IT.json b/i18n/locales/it-IT.json
index 61d4633f..8f587ed8 100644
--- a/i18n/locales/it-IT.json
+++ b/i18n/locales/it-IT.json
@@ -1966,5 +1966,255 @@
"The destination was copied, but source deletion could not be confirmed. Check both locations before retrying.": "L’oggetto è stato copiato nella destinazione, ma non è stato possibile confermare l’eliminazione dell’origine. Controlla entrambe le posizioni prima di riprovare.",
"The source changed or the destination already exists. Refresh and choose a different destination.": "L’origine è cambiata o la destinazione esiste già. Aggiorna e scegli un’altra destinazione.",
"Show key": "Mostra chiave",
- "Hide key": "Nascondi chiave"
+ "Hide key": "Nascondi chiave",
+ "0 disables the cache; maximum 3600.": "0 disables the cache; maximum 3600.",
+ "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.": "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.",
+ "100–600000 ms between source body chunks.": "100–600000 ms between source body chunks.",
+ "100–600000 ms.": "100–600000 ms.",
+ "1–256 across inline, background, and backfill work.": "1–256 across inline, background, and backfill work.",
+ "1–65536 waiting background pulls.": "1–65536 waiting background pulls.",
+ "5242880–5368709120 bytes (5 MiB–5 GiB).": "5242880–5368709120 bytes (5 MiB–5 GiB).",
+ "A backfill job is already running": "A backfill job is already running",
+ "A local versioned delete marker prevents the object from being pulled again.": "A local versioned delete marker prevents the object from being pulled again.",
+ "AWS regions may contain only letters, numbers, and hyphens.": "AWS regions may contain only letters, numbers, and hyphens.",
+ "Access key is required.": "Access key is required.",
+ "Account key": "Account key",
+ "Addressing style": "Addressing style",
+ "Adds source requests to listings so clients can see objects not yet migrated.": "Adds source requests to listings so clients can see objects not yet migrated.",
+ "All keys": "All keys",
+ "Always skip": "Always skip",
+ "Amazon S3": "Amazon S3",
+ "Any current local object is skipped.": "Any current local object is skipped.",
+ "Automatic": "Automatic",
+ "Azure Blob Storage (Native)": "Azure Blob Storage (Native)",
+ "Azure account key must be valid Base64.": "Azure account key must be valid Base64.",
+ "Azure account may contain only letters, numbers, and hyphens.": "Azure account may contain only letters, numbers, and hyphens.",
+ "Azure credential type": "Azure credential type",
+ "Azure storage account": "Azure storage account",
+ "Azure storage account is required.": "Azure storage account is required.",
+ "Backfill cancellation requested": "Backfill cancellation requested",
+ "Backfill cancelled": "Backfill cancelled",
+ "Backfill cannot start until the module is enabled on every server node.": "Backfill cannot start until the module is enabled on every server node.",
+ "Backfill completed": "Backfill completed",
+ "Backfill completed with failures": "Backfill completed with failures",
+ "Backfill dry run started": "Backfill dry run started",
+ "Backfill failed": "Backfill failed",
+ "Backfill in progress": "Backfill in progress",
+ "Backfill operation failed": "Backfill operation failed",
+ "Backfill paused": "Backfill paused",
+ "Backfill pending": "Backfill pending",
+ "Backfill running": "Backfill running",
+ "Backfill started": "Backfill started",
+ "Background backfill": "Background backfill",
+ "Bandwidth limit (bytes/s, optional)": "Bandwidth limit (bytes/s, optional)",
+ "Bandwidth limit must be a whole number of at least 65536 bytes/s.": "Bandwidth limit must be a whole number of at least 65536 bytes/s.",
+ "Breaker closed": "Breaker closed",
+ "Breaker half-open": "Breaker half-open",
+ "Breaker open": "Breaker open",
+ "CA certificate (PEM, optional)": "CA certificate (PEM, optional)",
+ "CA certificate must be PEM encoded.": "CA certificate must be PEM encoded.",
+ "Cancel backfill": "Cancel backfill",
+ "Cancel the running backfill?": "Cancel the running backfill?",
+ "Cancelling": "Cancelling",
+ "Circuit breaker": "Circuit breaker",
+ "Compare source ETag and size": "Compare source ETag and size",
+ "Concurrent pulls": "Concurrent pulls",
+ "Concurrent pulls must be a whole number from 1 to 256.": "Concurrent pulls must be a whole number from 1 to 256.",
+ "Configuration changed on the server. Refresh and review it before disabling migration.": "Configuration changed on the server. Refresh and review it before disabling migration.",
+ "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.": "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.",
+ "Connect this bucket to an external source without interrupting reads.": "Connect this bucket to an external source without interrupting reads.",
+ "Connect timeout (ms)": "Connect timeout (ms)",
+ "Connect timeout must be a whole number from 100 to 600000.": "Connect timeout must be a whole number from 100 to 600000.",
+ "Connection test passed": "Connection test passed",
+ "Copy object tags": "Copy object tags",
+ "Create a bucket before configuring an external migration source.": "Create a bucket before configuring an external migration source.",
+ "Credentials are write-only": "Credentials are write-only",
+ "Custom endpoint (optional)": "Custom endpoint (optional)",
+ "Data": "Data",
+ "Disable": "Disable",
+ "Disable migration": "Disable migration",
+ "Disable on-demand migration?": "Disable on-demand migration?",
+ "Disabling": "Disabling",
+ "Discard changes": "Discard changes",
+ "Discard unsaved changes?": "Discard unsaved changes?",
+ "Edit on-demand migration": "Edit on-demand migration",
+ "Editing cancels the active backfill": "Editing cancels the active backfill",
+ "Emit object-created events": "Emit object-created events",
+ "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.": "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.",
+ "Enable migration": "Enable migration",
+ "Enable on-demand migration": "Enable on-demand migration",
+ "Endpoint host": "Endpoint host",
+ "Endpoint is required for this provider.": "Endpoint is required for this provider.",
+ "Enter a real region or auto.": "Enter a real region or auto.",
+ "Enter an absolute HTTP or HTTPS endpoint.": "Enter an absolute HTTP or HTTPS endpoint.",
+ "Enter the Base64 storage account key.": "Enter the Base64 storage account key.",
+ "Enter the SAS query string without a leading question mark.": "Enter the SAS query string without a leading question mark.",
+ "Existing local objects": "Existing local objects",
+ "Failed objects": "Failed objects",
+ "First-byte timeout (ms)": "First-byte timeout (ms)",
+ "First-byte timeout must be a whole number from 100 to 600000.": "First-byte timeout must be a whole number from 100 to 600000.",
+ "For security, re-enter the source credential before testing or saving any change.": "For security, re-enter the source credential before testing or saving any change.",
+ "Google Cloud Storage (HMAC)": "Google Cloud Storage (HMAC)",
+ "Google Cloud Storage (Native)": "Google Cloud Storage (Native)",
+ "HEAD requests": "HEAD requests",
+ "Idle timeout (ms)": "Idle timeout (ms)",
+ "Idle timeout must be a whole number from 100 to 600000.": "Idle timeout must be a whole number from 100 to 600000.",
+ "In-flight pulls": "In-flight pulls",
+ "Include source objects in ListObjectsV2": "Include source objects in ListObjectsV2",
+ "Inline object limit (bytes)": "Inline object limit (bytes)",
+ "Inline object limit must be a whole number from 0 to 268435456.": "Inline object limit must be a whole number from 0 to 268435456.",
+ "Keep editing": "Keep editing",
+ "Keep running": "Keep running",
+ "Keep the source ETag unless local bucket encryption replaces it.": "Keep the source ETag unless local bucket encryption replaces it.",
+ "Key mapping": "Key mapping",
+ "Last backfill error": "Last backfill error",
+ "Last source error": "Last source error",
+ "Latest job": "Latest job",
+ "Leave empty for unlimited; the server minimum is 65536 bytes/s.": "Leave empty for unlimited; the server minimum is 65536 bytes/s.",
+ "Leave empty to scan the complete configured source namespace.": "Leave empty to scan the complete configured source namespace.",
+ "Leave empty to use https://storage.googleapis.com.": "Leave empty to use https://storage.googleapis.com.",
+ "Leave empty to use the account's public Azure Blob endpoint.": "Leave empty to use the account's public Azure Blob endpoint.",
+ "Leave empty to use the regional Amazon S3 endpoint.": "Leave empty to use the regional Amazon S3 endpoint.",
+ "Lifetime on this node": "Lifetime on this node",
+ "List matching objects without queueing or writing any object.": "List matching objects without queueing or writing any object.",
+ "Listed": "Listed",
+ "Live counters from the RustFS node that answered this request.": "Live counters from the RustFS node that answered this request.",
+ "Loading on-demand migration settings": "Loading on-demand migration settings",
+ "Local only": "Local only",
+ "Local prefix": "Local prefix",
+ "Local prefix (optional)": "Local prefix (optional)",
+ "Manage migration": "Manage migration",
+ "Migrated data": "Migrated data",
+ "Migrated objects": "Migrated objects",
+ "Migration active": "Migration active",
+ "Migration configuration could not be saved": "Migration configuration could not be saved",
+ "Migration configuration updated": "Migration configuration updated",
+ "Migration not configured": "Migration not configured",
+ "Migration paused": "Migration paused",
+ "Missing local objects are served from this source and then stored locally.": "Missing local objects are served from this source and then stored locally.",
+ "Multipart part size (bytes)": "Multipart part size (bytes)",
+ "Multipart part size must be a whole number from 5242880 to 5368709120.": "Multipart part size must be a whole number from 5242880 to 5368709120.",
+ "Native GCS has no object tags, so no tags will be copied.": "Native GCS has no object tags, so no tags will be copied.",
+ "Negative cache TTL (seconds)": "Negative cache TTL (seconds)",
+ "Negative cache TTL must be a whole number from 0 to 3600.": "Negative cache TTL must be a whole number from 0 to 3600.",
+ "No added prefix": "No added prefix",
+ "No backfill yet": "No backfill yet",
+ "No background backfill has been started for this bucket.": "No background backfill has been started for this bucket.",
+ "No live runtime state on this node": "No live runtime state on this node",
+ "No migration source configured": "No migration source configured",
+ "No recorded pull failures": "No recorded pull failures",
+ "No runtime state": "No runtime state",
+ "No source error recorded": "No source error recorded",
+ "Objects already migrated remain in the local bucket. You can start a new job later.": "Objects already migrated remain in the local bucket. You can start a new job later.",
+ "Objects listed": "Objects listed",
+ "Objects pulled": "Objects pulled",
+ "Objects whose recorded source ETag and size differ are pulled again.": "Objects whose recorded source ETag and size differ are pulled again.",
+ "On-demand migration": "On-demand migration",
+ "On-demand migration disabled": "On-demand migration disabled",
+ "On-demand migration enabled": "On-demand migration enabled",
+ "On-demand migration is not available on this server": "On-demand migration is not available on this server",
+ "On-demand migration is not enabled on this server": "On-demand migration is not enabled on this server",
+ "On-demand migration is unavailable": "On-demand migration is unavailable",
+ "Only local keys with this prefix will consult the source.": "Only local keys with this prefix will consult the source.",
+ "Open license settings": "Open license settings",
+ "Open migration settings": "Open migration settings",
+ "Paste the issuing certificate when the source uses a private CA.": "Paste the issuing certificate when the source uses a private CA.",
+ "Path style": "Path style",
+ "Performance and limits": "Performance and limits",
+ "Plan a read-only source cutover": "Plan a read-only source cutover",
+ "Prepended to the local key when RustFS reads the source.": "Prepended to the local key when RustFS reads the source.",
+ "Preserve source ETag": "Preserve source ETag",
+ "Provide it only when the source credentials require a session token.": "Provide it only when the source credentials require a session token.",
+ "Provider": "Provider",
+ "Pull queue capacity": "Pull queue capacity",
+ "Pull queue capacity must be a whole number from 1 to 65536.": "Pull queue capacity must be a whole number from 1 to 65536.",
+ "Pulled": "Pulled",
+ "Queue depth": "Queue depth",
+ "Range GET requests": "Range GET requests",
+ "Re-enter the Azure credential to test or save changes.": "Re-enter the Azure credential to test or save changes.",
+ "Re-enter the secret key to test or save changes.": "Re-enter the secret key to test or save changes.",
+ "Re-enter the service account JSON to test or save changes.": "Re-enter the service account JSON to test or save changes.",
+ "Read behavior": "Read behavior",
+ "Read from source on a miss": "Read from source on a miss",
+ "Region is required.": "Region is required.",
+ "Requires admin:SetBucketOnDemandMigration": "Requires admin:SetBucketOnDemandMigration",
+ "Requires source tag-read permission and adds one request per pull.": "Requires source tag-read permission and adds one request per pull.",
+ "Respect local delete markers": "Respect local delete markers",
+ "Return Not Found": "Return Not Found",
+ "Return SourceUnavailable": "Return SourceUnavailable",
+ "Returning Not Found can make sync clients treat a temporary source failure as a deletion.": "Returning Not Found can make sync clients treat a temporary source failure as a deletion.",
+ "Runtime status": "Runtime status",
+ "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.": "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.",
+ "RustFS reached the source bucket and listed it successfully.": "RustFS reached the source bucket and listed it successfully.",
+ "RustFS reads from this source and never writes or deletes objects there.": "RustFS reads from this source and never writes or deletes objects there.",
+ "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.": "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.",
+ "S3-compatible storage": "S3-compatible storage",
+ "SAS token": "SAS token",
+ "SAS token must omit the leading question mark and whitespace.": "SAS token must omit the leading question mark and whitespace.",
+ "Sample object": "Sample object",
+ "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.": "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.",
+ "Saving": "Saving",
+ "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.": "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.",
+ "Scan the source and pull objects that have not been requested yet.": "Scan the source and pull objects that have not been requested yet.",
+ "Send normal bucket notifications when a pulled object is stored locally.": "Send normal bucket notifications when a pulled object is stored locally.",
+ "Serve missing objects from an external source while migrating them into RustFS.": "Serve missing objects from an external source while migrating them into RustFS.",
+ "Serve range and queue the full object": "Serve range and queue the full object",
+ "Serve range only": "Serve range only",
+ "Server module disabled": "Server module disabled",
+ "Service-account JSON key": "Service-account JSON key",
+ "Session token (optional)": "Session token (optional)",
+ "Skip TLS certificate verification": "Skip TLS certificate verification",
+ "Skipped existing": "Skipped existing",
+ "Source bucket is required.": "Source bucket is required.",
+ "Source bucket must not contain slashes or whitespace.": "Source bucket must not contain slashes or whitespace.",
+ "Source circuit open": "Source circuit open",
+ "Source connection": "Source connection",
+ "Source container": "Source container",
+ "Source error response": "Source error response",
+ "Source listing prefix (optional)": "Source listing prefix (optional)",
+ "Source prefix": "Source prefix",
+ "Source prefix (optional)": "Source prefix (optional)",
+ "Source-hit ratio": "Source-hit ratio",
+ "Start a job when you are ready to migrate the remaining source objects.": "Start a job when you are ready to migrate the remaining source objects.",
+ "Start backfill": "Start backfill",
+ "Start background backfill": "Start background backfill",
+ "Start dry run": "Start dry run",
+ "TLS": "TLS",
+ "Test connection": "Test connection",
+ "Testing connection": "Testing connection",
+ "The endpoint must not contain a path, query, or fragment.": "The endpoint must not contain a path, query, or fragment.",
+ "The endpoint must not contain credentials.": "The endpoint must not contain credentials.",
+ "The existing source that RustFS will read from.": "The existing source that RustFS will read from.",
+ "The secret is stored by RustFS but never returned to the Console.": "The secret is stored by RustFS but never returned to the Console.",
+ "The server rejected this operation": "The server rejected this operation",
+ "The source bucket is empty or the selected prefix has no objects.": "The source bucket is empty or the selected prefix has no objects.",
+ "The source could not be reached": "The source could not be reached",
+ "The source is still being scanned, so no completion percentage is shown.": "The source is still being scanned, so no completion percentage is shown.",
+ "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.": "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.",
+ "This backend is not included in the server build": "This backend is not included in the server build",
+ "This provider requires a real region; auto is not supported.": "This provider requires a real region; auto is not supported.",
+ "Turn off to keep the saved configuration without consulting the source.": "Turn off to keep the saved configuration without consulting the source.",
+ "Unable to load on-demand migration": "Unable to load on-demand migration",
+ "Unable to load this setting": "Unable to load this setting",
+ "Unavailable when the server has no bucket GET total.": "Unavailable when the server has no bucket GET total.",
+ "Updated": "Updated",
+ "Upgrade RustFS to a version that provides the on-demand migration admin API.": "Upgrade RustFS to a version that provides the on-demand migration admin API.",
+ "Use a read-only key scoped to the source bucket.": "Use a read-only key scoped to the source bucket.",
+ "Use a service account with storage.objects.get and storage.objects.list.": "Use a service account with storage.objects.get and storage.objects.list.",
+ "Use a valid service-account JSON key with client_email and private_key.": "Use a valid service-account JSON key with client_email and private_key.",
+ "Use an absolute HTTP or HTTPS URL with no path.": "Use an absolute HTTP or HTTPS URL with no path.",
+ "Use an explicit style when the source redirects or reports a missing bucket.": "Use an explicit style when the source redirects or reports a missing bucket.",
+ "Use only in a trusted test environment. Prefer a custom CA certificate.": "Use only in a trusted test environment. Prefer a custom CA certificate.",
+ "Use provider default": "Use provider default",
+ "Used to derive the public endpoint when no custom endpoint is set.": "Used to derive the public endpoint when no custom endpoint is set.",
+ "Uses the S3 interoperability API and an HMAC key pair.": "Uses the S3 interoperability API and an HMAC key pair.",
+ "Uses the native Azure Blob API.": "Uses the native Azure Blob API.",
+ "Uses the native GCS API and a service-account JSON key.": "Uses the native GCS API and a service-account JSON key.",
+ "View backfill": "View backfill",
+ "Virtual-host style": "Virtual-host style",
+ "You do not have permission to change migration settings": "You do not have permission to change migration settings",
+ "You do not have permission to control backfill": "You do not have permission to control backfill",
+ "You do not have permission to view this bucket's migration settings.": "You do not have permission to view this bucket's migration settings.",
+ "Your migration configuration changes will be lost.": "Your migration configuration changes will be lost.",
+ "pull failures": "pull failures"
}
diff --git a/i18n/locales/ja-JP.json b/i18n/locales/ja-JP.json
index 0ba90142..4c06e940 100644
--- a/i18n/locales/ja-JP.json
+++ b/i18n/locales/ja-JP.json
@@ -1966,5 +1966,255 @@
"The destination was copied, but source deletion could not be confirmed. Check both locations before retrying.": "宛先へのコピーは完了しましたが、元のオブジェクトの削除を確認できませんでした。再試行する前に両方の場所を確認してください。",
"The source changed or the destination already exists. Refresh and choose a different destination.": "元のオブジェクトが変更されたか、宛先にオブジェクトが既に存在します。更新して別の宛先を選択してください。",
"Show key": "キーを表示",
- "Hide key": "キーを隠す"
+ "Hide key": "キーを隠す",
+ "0 disables the cache; maximum 3600.": "0 disables the cache; maximum 3600.",
+ "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.": "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.",
+ "100–600000 ms between source body chunks.": "100–600000 ms between source body chunks.",
+ "100–600000 ms.": "100–600000 ms.",
+ "1–256 across inline, background, and backfill work.": "1–256 across inline, background, and backfill work.",
+ "1–65536 waiting background pulls.": "1–65536 waiting background pulls.",
+ "5242880–5368709120 bytes (5 MiB–5 GiB).": "5242880–5368709120 bytes (5 MiB–5 GiB).",
+ "A backfill job is already running": "A backfill job is already running",
+ "A local versioned delete marker prevents the object from being pulled again.": "A local versioned delete marker prevents the object from being pulled again.",
+ "AWS regions may contain only letters, numbers, and hyphens.": "AWS regions may contain only letters, numbers, and hyphens.",
+ "Access key is required.": "Access key is required.",
+ "Account key": "Account key",
+ "Addressing style": "Addressing style",
+ "Adds source requests to listings so clients can see objects not yet migrated.": "Adds source requests to listings so clients can see objects not yet migrated.",
+ "All keys": "All keys",
+ "Always skip": "Always skip",
+ "Amazon S3": "Amazon S3",
+ "Any current local object is skipped.": "Any current local object is skipped.",
+ "Automatic": "Automatic",
+ "Azure Blob Storage (Native)": "Azure Blob Storage (Native)",
+ "Azure account key must be valid Base64.": "Azure account key must be valid Base64.",
+ "Azure account may contain only letters, numbers, and hyphens.": "Azure account may contain only letters, numbers, and hyphens.",
+ "Azure credential type": "Azure credential type",
+ "Azure storage account": "Azure storage account",
+ "Azure storage account is required.": "Azure storage account is required.",
+ "Backfill cancellation requested": "Backfill cancellation requested",
+ "Backfill cancelled": "Backfill cancelled",
+ "Backfill cannot start until the module is enabled on every server node.": "Backfill cannot start until the module is enabled on every server node.",
+ "Backfill completed": "Backfill completed",
+ "Backfill completed with failures": "Backfill completed with failures",
+ "Backfill dry run started": "Backfill dry run started",
+ "Backfill failed": "Backfill failed",
+ "Backfill in progress": "Backfill in progress",
+ "Backfill operation failed": "Backfill operation failed",
+ "Backfill paused": "Backfill paused",
+ "Backfill pending": "Backfill pending",
+ "Backfill running": "Backfill running",
+ "Backfill started": "Backfill started",
+ "Background backfill": "Background backfill",
+ "Bandwidth limit (bytes/s, optional)": "Bandwidth limit (bytes/s, optional)",
+ "Bandwidth limit must be a whole number of at least 65536 bytes/s.": "Bandwidth limit must be a whole number of at least 65536 bytes/s.",
+ "Breaker closed": "Breaker closed",
+ "Breaker half-open": "Breaker half-open",
+ "Breaker open": "Breaker open",
+ "CA certificate (PEM, optional)": "CA certificate (PEM, optional)",
+ "CA certificate must be PEM encoded.": "CA certificate must be PEM encoded.",
+ "Cancel backfill": "Cancel backfill",
+ "Cancel the running backfill?": "Cancel the running backfill?",
+ "Cancelling": "Cancelling",
+ "Circuit breaker": "Circuit breaker",
+ "Compare source ETag and size": "Compare source ETag and size",
+ "Concurrent pulls": "Concurrent pulls",
+ "Concurrent pulls must be a whole number from 1 to 256.": "Concurrent pulls must be a whole number from 1 to 256.",
+ "Configuration changed on the server. Refresh and review it before disabling migration.": "Configuration changed on the server. Refresh and review it before disabling migration.",
+ "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.": "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.",
+ "Connect this bucket to an external source without interrupting reads.": "Connect this bucket to an external source without interrupting reads.",
+ "Connect timeout (ms)": "Connect timeout (ms)",
+ "Connect timeout must be a whole number from 100 to 600000.": "Connect timeout must be a whole number from 100 to 600000.",
+ "Connection test passed": "Connection test passed",
+ "Copy object tags": "Copy object tags",
+ "Create a bucket before configuring an external migration source.": "Create a bucket before configuring an external migration source.",
+ "Credentials are write-only": "Credentials are write-only",
+ "Custom endpoint (optional)": "Custom endpoint (optional)",
+ "Data": "Data",
+ "Disable": "Disable",
+ "Disable migration": "Disable migration",
+ "Disable on-demand migration?": "Disable on-demand migration?",
+ "Disabling": "Disabling",
+ "Discard changes": "Discard changes",
+ "Discard unsaved changes?": "Discard unsaved changes?",
+ "Edit on-demand migration": "Edit on-demand migration",
+ "Editing cancels the active backfill": "Editing cancels the active backfill",
+ "Emit object-created events": "Emit object-created events",
+ "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.": "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.",
+ "Enable migration": "Enable migration",
+ "Enable on-demand migration": "Enable on-demand migration",
+ "Endpoint host": "Endpoint host",
+ "Endpoint is required for this provider.": "Endpoint is required for this provider.",
+ "Enter a real region or auto.": "Enter a real region or auto.",
+ "Enter an absolute HTTP or HTTPS endpoint.": "Enter an absolute HTTP or HTTPS endpoint.",
+ "Enter the Base64 storage account key.": "Enter the Base64 storage account key.",
+ "Enter the SAS query string without a leading question mark.": "Enter the SAS query string without a leading question mark.",
+ "Existing local objects": "Existing local objects",
+ "Failed objects": "Failed objects",
+ "First-byte timeout (ms)": "First-byte timeout (ms)",
+ "First-byte timeout must be a whole number from 100 to 600000.": "First-byte timeout must be a whole number from 100 to 600000.",
+ "For security, re-enter the source credential before testing or saving any change.": "For security, re-enter the source credential before testing or saving any change.",
+ "Google Cloud Storage (HMAC)": "Google Cloud Storage (HMAC)",
+ "Google Cloud Storage (Native)": "Google Cloud Storage (Native)",
+ "HEAD requests": "HEAD requests",
+ "Idle timeout (ms)": "Idle timeout (ms)",
+ "Idle timeout must be a whole number from 100 to 600000.": "Idle timeout must be a whole number from 100 to 600000.",
+ "In-flight pulls": "In-flight pulls",
+ "Include source objects in ListObjectsV2": "Include source objects in ListObjectsV2",
+ "Inline object limit (bytes)": "Inline object limit (bytes)",
+ "Inline object limit must be a whole number from 0 to 268435456.": "Inline object limit must be a whole number from 0 to 268435456.",
+ "Keep editing": "Keep editing",
+ "Keep running": "Keep running",
+ "Keep the source ETag unless local bucket encryption replaces it.": "Keep the source ETag unless local bucket encryption replaces it.",
+ "Key mapping": "Key mapping",
+ "Last backfill error": "Last backfill error",
+ "Last source error": "Last source error",
+ "Latest job": "Latest job",
+ "Leave empty for unlimited; the server minimum is 65536 bytes/s.": "Leave empty for unlimited; the server minimum is 65536 bytes/s.",
+ "Leave empty to scan the complete configured source namespace.": "Leave empty to scan the complete configured source namespace.",
+ "Leave empty to use https://storage.googleapis.com.": "Leave empty to use https://storage.googleapis.com.",
+ "Leave empty to use the account's public Azure Blob endpoint.": "Leave empty to use the account's public Azure Blob endpoint.",
+ "Leave empty to use the regional Amazon S3 endpoint.": "Leave empty to use the regional Amazon S3 endpoint.",
+ "Lifetime on this node": "Lifetime on this node",
+ "List matching objects without queueing or writing any object.": "List matching objects without queueing or writing any object.",
+ "Listed": "Listed",
+ "Live counters from the RustFS node that answered this request.": "Live counters from the RustFS node that answered this request.",
+ "Loading on-demand migration settings": "Loading on-demand migration settings",
+ "Local only": "Local only",
+ "Local prefix": "Local prefix",
+ "Local prefix (optional)": "Local prefix (optional)",
+ "Manage migration": "Manage migration",
+ "Migrated data": "Migrated data",
+ "Migrated objects": "Migrated objects",
+ "Migration active": "Migration active",
+ "Migration configuration could not be saved": "Migration configuration could not be saved",
+ "Migration configuration updated": "Migration configuration updated",
+ "Migration not configured": "Migration not configured",
+ "Migration paused": "Migration paused",
+ "Missing local objects are served from this source and then stored locally.": "Missing local objects are served from this source and then stored locally.",
+ "Multipart part size (bytes)": "Multipart part size (bytes)",
+ "Multipart part size must be a whole number from 5242880 to 5368709120.": "Multipart part size must be a whole number from 5242880 to 5368709120.",
+ "Native GCS has no object tags, so no tags will be copied.": "Native GCS has no object tags, so no tags will be copied.",
+ "Negative cache TTL (seconds)": "Negative cache TTL (seconds)",
+ "Negative cache TTL must be a whole number from 0 to 3600.": "Negative cache TTL must be a whole number from 0 to 3600.",
+ "No added prefix": "No added prefix",
+ "No backfill yet": "No backfill yet",
+ "No background backfill has been started for this bucket.": "No background backfill has been started for this bucket.",
+ "No live runtime state on this node": "No live runtime state on this node",
+ "No migration source configured": "No migration source configured",
+ "No recorded pull failures": "No recorded pull failures",
+ "No runtime state": "No runtime state",
+ "No source error recorded": "No source error recorded",
+ "Objects already migrated remain in the local bucket. You can start a new job later.": "Objects already migrated remain in the local bucket. You can start a new job later.",
+ "Objects listed": "Objects listed",
+ "Objects pulled": "Objects pulled",
+ "Objects whose recorded source ETag and size differ are pulled again.": "Objects whose recorded source ETag and size differ are pulled again.",
+ "On-demand migration": "On-demand migration",
+ "On-demand migration disabled": "On-demand migration disabled",
+ "On-demand migration enabled": "On-demand migration enabled",
+ "On-demand migration is not available on this server": "On-demand migration is not available on this server",
+ "On-demand migration is not enabled on this server": "On-demand migration is not enabled on this server",
+ "On-demand migration is unavailable": "On-demand migration is unavailable",
+ "Only local keys with this prefix will consult the source.": "Only local keys with this prefix will consult the source.",
+ "Open license settings": "Open license settings",
+ "Open migration settings": "Open migration settings",
+ "Paste the issuing certificate when the source uses a private CA.": "Paste the issuing certificate when the source uses a private CA.",
+ "Path style": "Path style",
+ "Performance and limits": "Performance and limits",
+ "Plan a read-only source cutover": "Plan a read-only source cutover",
+ "Prepended to the local key when RustFS reads the source.": "Prepended to the local key when RustFS reads the source.",
+ "Preserve source ETag": "Preserve source ETag",
+ "Provide it only when the source credentials require a session token.": "Provide it only when the source credentials require a session token.",
+ "Provider": "Provider",
+ "Pull queue capacity": "Pull queue capacity",
+ "Pull queue capacity must be a whole number from 1 to 65536.": "Pull queue capacity must be a whole number from 1 to 65536.",
+ "Pulled": "Pulled",
+ "Queue depth": "Queue depth",
+ "Range GET requests": "Range GET requests",
+ "Re-enter the Azure credential to test or save changes.": "Re-enter the Azure credential to test or save changes.",
+ "Re-enter the secret key to test or save changes.": "Re-enter the secret key to test or save changes.",
+ "Re-enter the service account JSON to test or save changes.": "Re-enter the service account JSON to test or save changes.",
+ "Read behavior": "Read behavior",
+ "Read from source on a miss": "Read from source on a miss",
+ "Region is required.": "Region is required.",
+ "Requires admin:SetBucketOnDemandMigration": "Requires admin:SetBucketOnDemandMigration",
+ "Requires source tag-read permission and adds one request per pull.": "Requires source tag-read permission and adds one request per pull.",
+ "Respect local delete markers": "Respect local delete markers",
+ "Return Not Found": "Return Not Found",
+ "Return SourceUnavailable": "Return SourceUnavailable",
+ "Returning Not Found can make sync clients treat a temporary source failure as a deletion.": "Returning Not Found can make sync clients treat a temporary source failure as a deletion.",
+ "Runtime status": "Runtime status",
+ "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.": "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.",
+ "RustFS reached the source bucket and listed it successfully.": "RustFS reached the source bucket and listed it successfully.",
+ "RustFS reads from this source and never writes or deletes objects there.": "RustFS reads from this source and never writes or deletes objects there.",
+ "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.": "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.",
+ "S3-compatible storage": "S3-compatible storage",
+ "SAS token": "SAS token",
+ "SAS token must omit the leading question mark and whitespace.": "SAS token must omit the leading question mark and whitespace.",
+ "Sample object": "Sample object",
+ "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.": "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.",
+ "Saving": "Saving",
+ "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.": "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.",
+ "Scan the source and pull objects that have not been requested yet.": "Scan the source and pull objects that have not been requested yet.",
+ "Send normal bucket notifications when a pulled object is stored locally.": "Send normal bucket notifications when a pulled object is stored locally.",
+ "Serve missing objects from an external source while migrating them into RustFS.": "Serve missing objects from an external source while migrating them into RustFS.",
+ "Serve range and queue the full object": "Serve range and queue the full object",
+ "Serve range only": "Serve range only",
+ "Server module disabled": "Server module disabled",
+ "Service-account JSON key": "Service-account JSON key",
+ "Session token (optional)": "Session token (optional)",
+ "Skip TLS certificate verification": "Skip TLS certificate verification",
+ "Skipped existing": "Skipped existing",
+ "Source bucket is required.": "Source bucket is required.",
+ "Source bucket must not contain slashes or whitespace.": "Source bucket must not contain slashes or whitespace.",
+ "Source circuit open": "Source circuit open",
+ "Source connection": "Source connection",
+ "Source container": "Source container",
+ "Source error response": "Source error response",
+ "Source listing prefix (optional)": "Source listing prefix (optional)",
+ "Source prefix": "Source prefix",
+ "Source prefix (optional)": "Source prefix (optional)",
+ "Source-hit ratio": "Source-hit ratio",
+ "Start a job when you are ready to migrate the remaining source objects.": "Start a job when you are ready to migrate the remaining source objects.",
+ "Start backfill": "Start backfill",
+ "Start background backfill": "Start background backfill",
+ "Start dry run": "Start dry run",
+ "TLS": "TLS",
+ "Test connection": "Test connection",
+ "Testing connection": "Testing connection",
+ "The endpoint must not contain a path, query, or fragment.": "The endpoint must not contain a path, query, or fragment.",
+ "The endpoint must not contain credentials.": "The endpoint must not contain credentials.",
+ "The existing source that RustFS will read from.": "The existing source that RustFS will read from.",
+ "The secret is stored by RustFS but never returned to the Console.": "The secret is stored by RustFS but never returned to the Console.",
+ "The server rejected this operation": "The server rejected this operation",
+ "The source bucket is empty or the selected prefix has no objects.": "The source bucket is empty or the selected prefix has no objects.",
+ "The source could not be reached": "The source could not be reached",
+ "The source is still being scanned, so no completion percentage is shown.": "The source is still being scanned, so no completion percentage is shown.",
+ "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.": "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.",
+ "This backend is not included in the server build": "This backend is not included in the server build",
+ "This provider requires a real region; auto is not supported.": "This provider requires a real region; auto is not supported.",
+ "Turn off to keep the saved configuration without consulting the source.": "Turn off to keep the saved configuration without consulting the source.",
+ "Unable to load on-demand migration": "Unable to load on-demand migration",
+ "Unable to load this setting": "Unable to load this setting",
+ "Unavailable when the server has no bucket GET total.": "Unavailable when the server has no bucket GET total.",
+ "Updated": "Updated",
+ "Upgrade RustFS to a version that provides the on-demand migration admin API.": "Upgrade RustFS to a version that provides the on-demand migration admin API.",
+ "Use a read-only key scoped to the source bucket.": "Use a read-only key scoped to the source bucket.",
+ "Use a service account with storage.objects.get and storage.objects.list.": "Use a service account with storage.objects.get and storage.objects.list.",
+ "Use a valid service-account JSON key with client_email and private_key.": "Use a valid service-account JSON key with client_email and private_key.",
+ "Use an absolute HTTP or HTTPS URL with no path.": "Use an absolute HTTP or HTTPS URL with no path.",
+ "Use an explicit style when the source redirects or reports a missing bucket.": "Use an explicit style when the source redirects or reports a missing bucket.",
+ "Use only in a trusted test environment. Prefer a custom CA certificate.": "Use only in a trusted test environment. Prefer a custom CA certificate.",
+ "Use provider default": "Use provider default",
+ "Used to derive the public endpoint when no custom endpoint is set.": "Used to derive the public endpoint when no custom endpoint is set.",
+ "Uses the S3 interoperability API and an HMAC key pair.": "Uses the S3 interoperability API and an HMAC key pair.",
+ "Uses the native Azure Blob API.": "Uses the native Azure Blob API.",
+ "Uses the native GCS API and a service-account JSON key.": "Uses the native GCS API and a service-account JSON key.",
+ "View backfill": "View backfill",
+ "Virtual-host style": "Virtual-host style",
+ "You do not have permission to change migration settings": "You do not have permission to change migration settings",
+ "You do not have permission to control backfill": "You do not have permission to control backfill",
+ "You do not have permission to view this bucket's migration settings.": "You do not have permission to view this bucket's migration settings.",
+ "Your migration configuration changes will be lost.": "Your migration configuration changes will be lost.",
+ "pull failures": "pull failures"
}
diff --git a/i18n/locales/ko-KR.json b/i18n/locales/ko-KR.json
index 47520f86..17e687a6 100644
--- a/i18n/locales/ko-KR.json
+++ b/i18n/locales/ko-KR.json
@@ -1966,5 +1966,255 @@
"The destination was copied, but source deletion could not be confirmed. Check both locations before retrying.": "대상 위치에 복사했지만 원본 객체가 삭제되었는지 확인할 수 없습니다. 다시 시도하기 전에 두 위치를 모두 확인하세요.",
"The source changed or the destination already exists. Refresh and choose a different destination.": "원본 객체가 변경되었거나 대상 객체가 이미 존재합니다. 새로 고친 후 다른 대상 위치를 선택하세요.",
"Show key": "키 표시",
- "Hide key": "키 숨기기"
+ "Hide key": "키 숨기기",
+ "0 disables the cache; maximum 3600.": "0 disables the cache; maximum 3600.",
+ "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.": "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.",
+ "100–600000 ms between source body chunks.": "100–600000 ms between source body chunks.",
+ "100–600000 ms.": "100–600000 ms.",
+ "1–256 across inline, background, and backfill work.": "1–256 across inline, background, and backfill work.",
+ "1–65536 waiting background pulls.": "1–65536 waiting background pulls.",
+ "5242880–5368709120 bytes (5 MiB–5 GiB).": "5242880–5368709120 bytes (5 MiB–5 GiB).",
+ "A backfill job is already running": "A backfill job is already running",
+ "A local versioned delete marker prevents the object from being pulled again.": "A local versioned delete marker prevents the object from being pulled again.",
+ "AWS regions may contain only letters, numbers, and hyphens.": "AWS regions may contain only letters, numbers, and hyphens.",
+ "Access key is required.": "Access key is required.",
+ "Account key": "Account key",
+ "Addressing style": "Addressing style",
+ "Adds source requests to listings so clients can see objects not yet migrated.": "Adds source requests to listings so clients can see objects not yet migrated.",
+ "All keys": "All keys",
+ "Always skip": "Always skip",
+ "Amazon S3": "Amazon S3",
+ "Any current local object is skipped.": "Any current local object is skipped.",
+ "Automatic": "Automatic",
+ "Azure Blob Storage (Native)": "Azure Blob Storage (Native)",
+ "Azure account key must be valid Base64.": "Azure account key must be valid Base64.",
+ "Azure account may contain only letters, numbers, and hyphens.": "Azure account may contain only letters, numbers, and hyphens.",
+ "Azure credential type": "Azure credential type",
+ "Azure storage account": "Azure storage account",
+ "Azure storage account is required.": "Azure storage account is required.",
+ "Backfill cancellation requested": "Backfill cancellation requested",
+ "Backfill cancelled": "Backfill cancelled",
+ "Backfill cannot start until the module is enabled on every server node.": "Backfill cannot start until the module is enabled on every server node.",
+ "Backfill completed": "Backfill completed",
+ "Backfill completed with failures": "Backfill completed with failures",
+ "Backfill dry run started": "Backfill dry run started",
+ "Backfill failed": "Backfill failed",
+ "Backfill in progress": "Backfill in progress",
+ "Backfill operation failed": "Backfill operation failed",
+ "Backfill paused": "Backfill paused",
+ "Backfill pending": "Backfill pending",
+ "Backfill running": "Backfill running",
+ "Backfill started": "Backfill started",
+ "Background backfill": "Background backfill",
+ "Bandwidth limit (bytes/s, optional)": "Bandwidth limit (bytes/s, optional)",
+ "Bandwidth limit must be a whole number of at least 65536 bytes/s.": "Bandwidth limit must be a whole number of at least 65536 bytes/s.",
+ "Breaker closed": "Breaker closed",
+ "Breaker half-open": "Breaker half-open",
+ "Breaker open": "Breaker open",
+ "CA certificate (PEM, optional)": "CA certificate (PEM, optional)",
+ "CA certificate must be PEM encoded.": "CA certificate must be PEM encoded.",
+ "Cancel backfill": "Cancel backfill",
+ "Cancel the running backfill?": "Cancel the running backfill?",
+ "Cancelling": "Cancelling",
+ "Circuit breaker": "Circuit breaker",
+ "Compare source ETag and size": "Compare source ETag and size",
+ "Concurrent pulls": "Concurrent pulls",
+ "Concurrent pulls must be a whole number from 1 to 256.": "Concurrent pulls must be a whole number from 1 to 256.",
+ "Configuration changed on the server. Refresh and review it before disabling migration.": "Configuration changed on the server. Refresh and review it before disabling migration.",
+ "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.": "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.",
+ "Connect this bucket to an external source without interrupting reads.": "Connect this bucket to an external source without interrupting reads.",
+ "Connect timeout (ms)": "Connect timeout (ms)",
+ "Connect timeout must be a whole number from 100 to 600000.": "Connect timeout must be a whole number from 100 to 600000.",
+ "Connection test passed": "Connection test passed",
+ "Copy object tags": "Copy object tags",
+ "Create a bucket before configuring an external migration source.": "Create a bucket before configuring an external migration source.",
+ "Credentials are write-only": "Credentials are write-only",
+ "Custom endpoint (optional)": "Custom endpoint (optional)",
+ "Data": "Data",
+ "Disable": "Disable",
+ "Disable migration": "Disable migration",
+ "Disable on-demand migration?": "Disable on-demand migration?",
+ "Disabling": "Disabling",
+ "Discard changes": "Discard changes",
+ "Discard unsaved changes?": "Discard unsaved changes?",
+ "Edit on-demand migration": "Edit on-demand migration",
+ "Editing cancels the active backfill": "Editing cancels the active backfill",
+ "Emit object-created events": "Emit object-created events",
+ "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.": "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.",
+ "Enable migration": "Enable migration",
+ "Enable on-demand migration": "Enable on-demand migration",
+ "Endpoint host": "Endpoint host",
+ "Endpoint is required for this provider.": "Endpoint is required for this provider.",
+ "Enter a real region or auto.": "Enter a real region or auto.",
+ "Enter an absolute HTTP or HTTPS endpoint.": "Enter an absolute HTTP or HTTPS endpoint.",
+ "Enter the Base64 storage account key.": "Enter the Base64 storage account key.",
+ "Enter the SAS query string without a leading question mark.": "Enter the SAS query string without a leading question mark.",
+ "Existing local objects": "Existing local objects",
+ "Failed objects": "Failed objects",
+ "First-byte timeout (ms)": "First-byte timeout (ms)",
+ "First-byte timeout must be a whole number from 100 to 600000.": "First-byte timeout must be a whole number from 100 to 600000.",
+ "For security, re-enter the source credential before testing or saving any change.": "For security, re-enter the source credential before testing or saving any change.",
+ "Google Cloud Storage (HMAC)": "Google Cloud Storage (HMAC)",
+ "Google Cloud Storage (Native)": "Google Cloud Storage (Native)",
+ "HEAD requests": "HEAD requests",
+ "Idle timeout (ms)": "Idle timeout (ms)",
+ "Idle timeout must be a whole number from 100 to 600000.": "Idle timeout must be a whole number from 100 to 600000.",
+ "In-flight pulls": "In-flight pulls",
+ "Include source objects in ListObjectsV2": "Include source objects in ListObjectsV2",
+ "Inline object limit (bytes)": "Inline object limit (bytes)",
+ "Inline object limit must be a whole number from 0 to 268435456.": "Inline object limit must be a whole number from 0 to 268435456.",
+ "Keep editing": "Keep editing",
+ "Keep running": "Keep running",
+ "Keep the source ETag unless local bucket encryption replaces it.": "Keep the source ETag unless local bucket encryption replaces it.",
+ "Key mapping": "Key mapping",
+ "Last backfill error": "Last backfill error",
+ "Last source error": "Last source error",
+ "Latest job": "Latest job",
+ "Leave empty for unlimited; the server minimum is 65536 bytes/s.": "Leave empty for unlimited; the server minimum is 65536 bytes/s.",
+ "Leave empty to scan the complete configured source namespace.": "Leave empty to scan the complete configured source namespace.",
+ "Leave empty to use https://storage.googleapis.com.": "Leave empty to use https://storage.googleapis.com.",
+ "Leave empty to use the account's public Azure Blob endpoint.": "Leave empty to use the account's public Azure Blob endpoint.",
+ "Leave empty to use the regional Amazon S3 endpoint.": "Leave empty to use the regional Amazon S3 endpoint.",
+ "Lifetime on this node": "Lifetime on this node",
+ "List matching objects without queueing or writing any object.": "List matching objects without queueing or writing any object.",
+ "Listed": "Listed",
+ "Live counters from the RustFS node that answered this request.": "Live counters from the RustFS node that answered this request.",
+ "Loading on-demand migration settings": "Loading on-demand migration settings",
+ "Local only": "Local only",
+ "Local prefix": "Local prefix",
+ "Local prefix (optional)": "Local prefix (optional)",
+ "Manage migration": "Manage migration",
+ "Migrated data": "Migrated data",
+ "Migrated objects": "Migrated objects",
+ "Migration active": "Migration active",
+ "Migration configuration could not be saved": "Migration configuration could not be saved",
+ "Migration configuration updated": "Migration configuration updated",
+ "Migration not configured": "Migration not configured",
+ "Migration paused": "Migration paused",
+ "Missing local objects are served from this source and then stored locally.": "Missing local objects are served from this source and then stored locally.",
+ "Multipart part size (bytes)": "Multipart part size (bytes)",
+ "Multipart part size must be a whole number from 5242880 to 5368709120.": "Multipart part size must be a whole number from 5242880 to 5368709120.",
+ "Native GCS has no object tags, so no tags will be copied.": "Native GCS has no object tags, so no tags will be copied.",
+ "Negative cache TTL (seconds)": "Negative cache TTL (seconds)",
+ "Negative cache TTL must be a whole number from 0 to 3600.": "Negative cache TTL must be a whole number from 0 to 3600.",
+ "No added prefix": "No added prefix",
+ "No backfill yet": "No backfill yet",
+ "No background backfill has been started for this bucket.": "No background backfill has been started for this bucket.",
+ "No live runtime state on this node": "No live runtime state on this node",
+ "No migration source configured": "No migration source configured",
+ "No recorded pull failures": "No recorded pull failures",
+ "No runtime state": "No runtime state",
+ "No source error recorded": "No source error recorded",
+ "Objects already migrated remain in the local bucket. You can start a new job later.": "Objects already migrated remain in the local bucket. You can start a new job later.",
+ "Objects listed": "Objects listed",
+ "Objects pulled": "Objects pulled",
+ "Objects whose recorded source ETag and size differ are pulled again.": "Objects whose recorded source ETag and size differ are pulled again.",
+ "On-demand migration": "On-demand migration",
+ "On-demand migration disabled": "On-demand migration disabled",
+ "On-demand migration enabled": "On-demand migration enabled",
+ "On-demand migration is not available on this server": "On-demand migration is not available on this server",
+ "On-demand migration is not enabled on this server": "On-demand migration is not enabled on this server",
+ "On-demand migration is unavailable": "On-demand migration is unavailable",
+ "Only local keys with this prefix will consult the source.": "Only local keys with this prefix will consult the source.",
+ "Open license settings": "Open license settings",
+ "Open migration settings": "Open migration settings",
+ "Paste the issuing certificate when the source uses a private CA.": "Paste the issuing certificate when the source uses a private CA.",
+ "Path style": "Path style",
+ "Performance and limits": "Performance and limits",
+ "Plan a read-only source cutover": "Plan a read-only source cutover",
+ "Prepended to the local key when RustFS reads the source.": "Prepended to the local key when RustFS reads the source.",
+ "Preserve source ETag": "Preserve source ETag",
+ "Provide it only when the source credentials require a session token.": "Provide it only when the source credentials require a session token.",
+ "Provider": "Provider",
+ "Pull queue capacity": "Pull queue capacity",
+ "Pull queue capacity must be a whole number from 1 to 65536.": "Pull queue capacity must be a whole number from 1 to 65536.",
+ "Pulled": "Pulled",
+ "Queue depth": "Queue depth",
+ "Range GET requests": "Range GET requests",
+ "Re-enter the Azure credential to test or save changes.": "Re-enter the Azure credential to test or save changes.",
+ "Re-enter the secret key to test or save changes.": "Re-enter the secret key to test or save changes.",
+ "Re-enter the service account JSON to test or save changes.": "Re-enter the service account JSON to test or save changes.",
+ "Read behavior": "Read behavior",
+ "Read from source on a miss": "Read from source on a miss",
+ "Region is required.": "Region is required.",
+ "Requires admin:SetBucketOnDemandMigration": "Requires admin:SetBucketOnDemandMigration",
+ "Requires source tag-read permission and adds one request per pull.": "Requires source tag-read permission and adds one request per pull.",
+ "Respect local delete markers": "Respect local delete markers",
+ "Return Not Found": "Return Not Found",
+ "Return SourceUnavailable": "Return SourceUnavailable",
+ "Returning Not Found can make sync clients treat a temporary source failure as a deletion.": "Returning Not Found can make sync clients treat a temporary source failure as a deletion.",
+ "Runtime status": "Runtime status",
+ "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.": "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.",
+ "RustFS reached the source bucket and listed it successfully.": "RustFS reached the source bucket and listed it successfully.",
+ "RustFS reads from this source and never writes or deletes objects there.": "RustFS reads from this source and never writes or deletes objects there.",
+ "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.": "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.",
+ "S3-compatible storage": "S3-compatible storage",
+ "SAS token": "SAS token",
+ "SAS token must omit the leading question mark and whitespace.": "SAS token must omit the leading question mark and whitespace.",
+ "Sample object": "Sample object",
+ "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.": "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.",
+ "Saving": "Saving",
+ "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.": "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.",
+ "Scan the source and pull objects that have not been requested yet.": "Scan the source and pull objects that have not been requested yet.",
+ "Send normal bucket notifications when a pulled object is stored locally.": "Send normal bucket notifications when a pulled object is stored locally.",
+ "Serve missing objects from an external source while migrating them into RustFS.": "Serve missing objects from an external source while migrating them into RustFS.",
+ "Serve range and queue the full object": "Serve range and queue the full object",
+ "Serve range only": "Serve range only",
+ "Server module disabled": "Server module disabled",
+ "Service-account JSON key": "Service-account JSON key",
+ "Session token (optional)": "Session token (optional)",
+ "Skip TLS certificate verification": "Skip TLS certificate verification",
+ "Skipped existing": "Skipped existing",
+ "Source bucket is required.": "Source bucket is required.",
+ "Source bucket must not contain slashes or whitespace.": "Source bucket must not contain slashes or whitespace.",
+ "Source circuit open": "Source circuit open",
+ "Source connection": "Source connection",
+ "Source container": "Source container",
+ "Source error response": "Source error response",
+ "Source listing prefix (optional)": "Source listing prefix (optional)",
+ "Source prefix": "Source prefix",
+ "Source prefix (optional)": "Source prefix (optional)",
+ "Source-hit ratio": "Source-hit ratio",
+ "Start a job when you are ready to migrate the remaining source objects.": "Start a job when you are ready to migrate the remaining source objects.",
+ "Start backfill": "Start backfill",
+ "Start background backfill": "Start background backfill",
+ "Start dry run": "Start dry run",
+ "TLS": "TLS",
+ "Test connection": "Test connection",
+ "Testing connection": "Testing connection",
+ "The endpoint must not contain a path, query, or fragment.": "The endpoint must not contain a path, query, or fragment.",
+ "The endpoint must not contain credentials.": "The endpoint must not contain credentials.",
+ "The existing source that RustFS will read from.": "The existing source that RustFS will read from.",
+ "The secret is stored by RustFS but never returned to the Console.": "The secret is stored by RustFS but never returned to the Console.",
+ "The server rejected this operation": "The server rejected this operation",
+ "The source bucket is empty or the selected prefix has no objects.": "The source bucket is empty or the selected prefix has no objects.",
+ "The source could not be reached": "The source could not be reached",
+ "The source is still being scanned, so no completion percentage is shown.": "The source is still being scanned, so no completion percentage is shown.",
+ "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.": "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.",
+ "This backend is not included in the server build": "This backend is not included in the server build",
+ "This provider requires a real region; auto is not supported.": "This provider requires a real region; auto is not supported.",
+ "Turn off to keep the saved configuration without consulting the source.": "Turn off to keep the saved configuration without consulting the source.",
+ "Unable to load on-demand migration": "Unable to load on-demand migration",
+ "Unable to load this setting": "Unable to load this setting",
+ "Unavailable when the server has no bucket GET total.": "Unavailable when the server has no bucket GET total.",
+ "Updated": "Updated",
+ "Upgrade RustFS to a version that provides the on-demand migration admin API.": "Upgrade RustFS to a version that provides the on-demand migration admin API.",
+ "Use a read-only key scoped to the source bucket.": "Use a read-only key scoped to the source bucket.",
+ "Use a service account with storage.objects.get and storage.objects.list.": "Use a service account with storage.objects.get and storage.objects.list.",
+ "Use a valid service-account JSON key with client_email and private_key.": "Use a valid service-account JSON key with client_email and private_key.",
+ "Use an absolute HTTP or HTTPS URL with no path.": "Use an absolute HTTP or HTTPS URL with no path.",
+ "Use an explicit style when the source redirects or reports a missing bucket.": "Use an explicit style when the source redirects or reports a missing bucket.",
+ "Use only in a trusted test environment. Prefer a custom CA certificate.": "Use only in a trusted test environment. Prefer a custom CA certificate.",
+ "Use provider default": "Use provider default",
+ "Used to derive the public endpoint when no custom endpoint is set.": "Used to derive the public endpoint when no custom endpoint is set.",
+ "Uses the S3 interoperability API and an HMAC key pair.": "Uses the S3 interoperability API and an HMAC key pair.",
+ "Uses the native Azure Blob API.": "Uses the native Azure Blob API.",
+ "Uses the native GCS API and a service-account JSON key.": "Uses the native GCS API and a service-account JSON key.",
+ "View backfill": "View backfill",
+ "Virtual-host style": "Virtual-host style",
+ "You do not have permission to change migration settings": "You do not have permission to change migration settings",
+ "You do not have permission to control backfill": "You do not have permission to control backfill",
+ "You do not have permission to view this bucket's migration settings.": "You do not have permission to view this bucket's migration settings.",
+ "Your migration configuration changes will be lost.": "Your migration configuration changes will be lost.",
+ "pull failures": "pull failures"
}
diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json
index a57d6848..5f960f14 100644
--- a/i18n/locales/pt-BR.json
+++ b/i18n/locales/pt-BR.json
@@ -1966,5 +1966,255 @@
"The destination was copied, but source deletion could not be confirmed. Check both locations before retrying.": "O objeto foi copiado para o destino, mas não foi possível confirmar a exclusão da origem. Verifique os dois locais antes de tentar novamente.",
"The source changed or the destination already exists. Refresh and choose a different destination.": "A origem foi alterada ou o destino já existe. Atualize e escolha outro destino.",
"Show key": "Mostrar chave",
- "Hide key": "Ocultar chave"
+ "Hide key": "Ocultar chave",
+ "0 disables the cache; maximum 3600.": "0 disables the cache; maximum 3600.",
+ "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.": "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.",
+ "100–600000 ms between source body chunks.": "100–600000 ms between source body chunks.",
+ "100–600000 ms.": "100–600000 ms.",
+ "1–256 across inline, background, and backfill work.": "1–256 across inline, background, and backfill work.",
+ "1–65536 waiting background pulls.": "1–65536 waiting background pulls.",
+ "5242880–5368709120 bytes (5 MiB–5 GiB).": "5242880–5368709120 bytes (5 MiB–5 GiB).",
+ "A backfill job is already running": "A backfill job is already running",
+ "A local versioned delete marker prevents the object from being pulled again.": "A local versioned delete marker prevents the object from being pulled again.",
+ "AWS regions may contain only letters, numbers, and hyphens.": "AWS regions may contain only letters, numbers, and hyphens.",
+ "Access key is required.": "Access key is required.",
+ "Account key": "Account key",
+ "Addressing style": "Addressing style",
+ "Adds source requests to listings so clients can see objects not yet migrated.": "Adds source requests to listings so clients can see objects not yet migrated.",
+ "All keys": "All keys",
+ "Always skip": "Always skip",
+ "Amazon S3": "Amazon S3",
+ "Any current local object is skipped.": "Any current local object is skipped.",
+ "Automatic": "Automatic",
+ "Azure Blob Storage (Native)": "Azure Blob Storage (Native)",
+ "Azure account key must be valid Base64.": "Azure account key must be valid Base64.",
+ "Azure account may contain only letters, numbers, and hyphens.": "Azure account may contain only letters, numbers, and hyphens.",
+ "Azure credential type": "Azure credential type",
+ "Azure storage account": "Azure storage account",
+ "Azure storage account is required.": "Azure storage account is required.",
+ "Backfill cancellation requested": "Backfill cancellation requested",
+ "Backfill cancelled": "Backfill cancelled",
+ "Backfill cannot start until the module is enabled on every server node.": "Backfill cannot start until the module is enabled on every server node.",
+ "Backfill completed": "Backfill completed",
+ "Backfill completed with failures": "Backfill completed with failures",
+ "Backfill dry run started": "Backfill dry run started",
+ "Backfill failed": "Backfill failed",
+ "Backfill in progress": "Backfill in progress",
+ "Backfill operation failed": "Backfill operation failed",
+ "Backfill paused": "Backfill paused",
+ "Backfill pending": "Backfill pending",
+ "Backfill running": "Backfill running",
+ "Backfill started": "Backfill started",
+ "Background backfill": "Background backfill",
+ "Bandwidth limit (bytes/s, optional)": "Bandwidth limit (bytes/s, optional)",
+ "Bandwidth limit must be a whole number of at least 65536 bytes/s.": "Bandwidth limit must be a whole number of at least 65536 bytes/s.",
+ "Breaker closed": "Breaker closed",
+ "Breaker half-open": "Breaker half-open",
+ "Breaker open": "Breaker open",
+ "CA certificate (PEM, optional)": "CA certificate (PEM, optional)",
+ "CA certificate must be PEM encoded.": "CA certificate must be PEM encoded.",
+ "Cancel backfill": "Cancel backfill",
+ "Cancel the running backfill?": "Cancel the running backfill?",
+ "Cancelling": "Cancelling",
+ "Circuit breaker": "Circuit breaker",
+ "Compare source ETag and size": "Compare source ETag and size",
+ "Concurrent pulls": "Concurrent pulls",
+ "Concurrent pulls must be a whole number from 1 to 256.": "Concurrent pulls must be a whole number from 1 to 256.",
+ "Configuration changed on the server. Refresh and review it before disabling migration.": "Configuration changed on the server. Refresh and review it before disabling migration.",
+ "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.": "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.",
+ "Connect this bucket to an external source without interrupting reads.": "Connect this bucket to an external source without interrupting reads.",
+ "Connect timeout (ms)": "Connect timeout (ms)",
+ "Connect timeout must be a whole number from 100 to 600000.": "Connect timeout must be a whole number from 100 to 600000.",
+ "Connection test passed": "Connection test passed",
+ "Copy object tags": "Copy object tags",
+ "Create a bucket before configuring an external migration source.": "Create a bucket before configuring an external migration source.",
+ "Credentials are write-only": "Credentials are write-only",
+ "Custom endpoint (optional)": "Custom endpoint (optional)",
+ "Data": "Data",
+ "Disable": "Disable",
+ "Disable migration": "Disable migration",
+ "Disable on-demand migration?": "Disable on-demand migration?",
+ "Disabling": "Disabling",
+ "Discard changes": "Discard changes",
+ "Discard unsaved changes?": "Discard unsaved changes?",
+ "Edit on-demand migration": "Edit on-demand migration",
+ "Editing cancels the active backfill": "Editing cancels the active backfill",
+ "Emit object-created events": "Emit object-created events",
+ "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.": "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.",
+ "Enable migration": "Enable migration",
+ "Enable on-demand migration": "Enable on-demand migration",
+ "Endpoint host": "Endpoint host",
+ "Endpoint is required for this provider.": "Endpoint is required for this provider.",
+ "Enter a real region or auto.": "Enter a real region or auto.",
+ "Enter an absolute HTTP or HTTPS endpoint.": "Enter an absolute HTTP or HTTPS endpoint.",
+ "Enter the Base64 storage account key.": "Enter the Base64 storage account key.",
+ "Enter the SAS query string without a leading question mark.": "Enter the SAS query string without a leading question mark.",
+ "Existing local objects": "Existing local objects",
+ "Failed objects": "Failed objects",
+ "First-byte timeout (ms)": "First-byte timeout (ms)",
+ "First-byte timeout must be a whole number from 100 to 600000.": "First-byte timeout must be a whole number from 100 to 600000.",
+ "For security, re-enter the source credential before testing or saving any change.": "For security, re-enter the source credential before testing or saving any change.",
+ "Google Cloud Storage (HMAC)": "Google Cloud Storage (HMAC)",
+ "Google Cloud Storage (Native)": "Google Cloud Storage (Native)",
+ "HEAD requests": "HEAD requests",
+ "Idle timeout (ms)": "Idle timeout (ms)",
+ "Idle timeout must be a whole number from 100 to 600000.": "Idle timeout must be a whole number from 100 to 600000.",
+ "In-flight pulls": "In-flight pulls",
+ "Include source objects in ListObjectsV2": "Include source objects in ListObjectsV2",
+ "Inline object limit (bytes)": "Inline object limit (bytes)",
+ "Inline object limit must be a whole number from 0 to 268435456.": "Inline object limit must be a whole number from 0 to 268435456.",
+ "Keep editing": "Keep editing",
+ "Keep running": "Keep running",
+ "Keep the source ETag unless local bucket encryption replaces it.": "Keep the source ETag unless local bucket encryption replaces it.",
+ "Key mapping": "Key mapping",
+ "Last backfill error": "Last backfill error",
+ "Last source error": "Last source error",
+ "Latest job": "Latest job",
+ "Leave empty for unlimited; the server minimum is 65536 bytes/s.": "Leave empty for unlimited; the server minimum is 65536 bytes/s.",
+ "Leave empty to scan the complete configured source namespace.": "Leave empty to scan the complete configured source namespace.",
+ "Leave empty to use https://storage.googleapis.com.": "Leave empty to use https://storage.googleapis.com.",
+ "Leave empty to use the account's public Azure Blob endpoint.": "Leave empty to use the account's public Azure Blob endpoint.",
+ "Leave empty to use the regional Amazon S3 endpoint.": "Leave empty to use the regional Amazon S3 endpoint.",
+ "Lifetime on this node": "Lifetime on this node",
+ "List matching objects without queueing or writing any object.": "List matching objects without queueing or writing any object.",
+ "Listed": "Listed",
+ "Live counters from the RustFS node that answered this request.": "Live counters from the RustFS node that answered this request.",
+ "Loading on-demand migration settings": "Loading on-demand migration settings",
+ "Local only": "Local only",
+ "Local prefix": "Local prefix",
+ "Local prefix (optional)": "Local prefix (optional)",
+ "Manage migration": "Manage migration",
+ "Migrated data": "Migrated data",
+ "Migrated objects": "Migrated objects",
+ "Migration active": "Migration active",
+ "Migration configuration could not be saved": "Migration configuration could not be saved",
+ "Migration configuration updated": "Migration configuration updated",
+ "Migration not configured": "Migration not configured",
+ "Migration paused": "Migration paused",
+ "Missing local objects are served from this source and then stored locally.": "Missing local objects are served from this source and then stored locally.",
+ "Multipart part size (bytes)": "Multipart part size (bytes)",
+ "Multipart part size must be a whole number from 5242880 to 5368709120.": "Multipart part size must be a whole number from 5242880 to 5368709120.",
+ "Native GCS has no object tags, so no tags will be copied.": "Native GCS has no object tags, so no tags will be copied.",
+ "Negative cache TTL (seconds)": "Negative cache TTL (seconds)",
+ "Negative cache TTL must be a whole number from 0 to 3600.": "Negative cache TTL must be a whole number from 0 to 3600.",
+ "No added prefix": "No added prefix",
+ "No backfill yet": "No backfill yet",
+ "No background backfill has been started for this bucket.": "No background backfill has been started for this bucket.",
+ "No live runtime state on this node": "No live runtime state on this node",
+ "No migration source configured": "No migration source configured",
+ "No recorded pull failures": "No recorded pull failures",
+ "No runtime state": "No runtime state",
+ "No source error recorded": "No source error recorded",
+ "Objects already migrated remain in the local bucket. You can start a new job later.": "Objects already migrated remain in the local bucket. You can start a new job later.",
+ "Objects listed": "Objects listed",
+ "Objects pulled": "Objects pulled",
+ "Objects whose recorded source ETag and size differ are pulled again.": "Objects whose recorded source ETag and size differ are pulled again.",
+ "On-demand migration": "On-demand migration",
+ "On-demand migration disabled": "On-demand migration disabled",
+ "On-demand migration enabled": "On-demand migration enabled",
+ "On-demand migration is not available on this server": "On-demand migration is not available on this server",
+ "On-demand migration is not enabled on this server": "On-demand migration is not enabled on this server",
+ "On-demand migration is unavailable": "On-demand migration is unavailable",
+ "Only local keys with this prefix will consult the source.": "Only local keys with this prefix will consult the source.",
+ "Open license settings": "Open license settings",
+ "Open migration settings": "Open migration settings",
+ "Paste the issuing certificate when the source uses a private CA.": "Paste the issuing certificate when the source uses a private CA.",
+ "Path style": "Path style",
+ "Performance and limits": "Performance and limits",
+ "Plan a read-only source cutover": "Plan a read-only source cutover",
+ "Prepended to the local key when RustFS reads the source.": "Prepended to the local key when RustFS reads the source.",
+ "Preserve source ETag": "Preserve source ETag",
+ "Provide it only when the source credentials require a session token.": "Provide it only when the source credentials require a session token.",
+ "Provider": "Provider",
+ "Pull queue capacity": "Pull queue capacity",
+ "Pull queue capacity must be a whole number from 1 to 65536.": "Pull queue capacity must be a whole number from 1 to 65536.",
+ "Pulled": "Pulled",
+ "Queue depth": "Queue depth",
+ "Range GET requests": "Range GET requests",
+ "Re-enter the Azure credential to test or save changes.": "Re-enter the Azure credential to test or save changes.",
+ "Re-enter the secret key to test or save changes.": "Re-enter the secret key to test or save changes.",
+ "Re-enter the service account JSON to test or save changes.": "Re-enter the service account JSON to test or save changes.",
+ "Read behavior": "Read behavior",
+ "Read from source on a miss": "Read from source on a miss",
+ "Region is required.": "Region is required.",
+ "Requires admin:SetBucketOnDemandMigration": "Requires admin:SetBucketOnDemandMigration",
+ "Requires source tag-read permission and adds one request per pull.": "Requires source tag-read permission and adds one request per pull.",
+ "Respect local delete markers": "Respect local delete markers",
+ "Return Not Found": "Return Not Found",
+ "Return SourceUnavailable": "Return SourceUnavailable",
+ "Returning Not Found can make sync clients treat a temporary source failure as a deletion.": "Returning Not Found can make sync clients treat a temporary source failure as a deletion.",
+ "Runtime status": "Runtime status",
+ "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.": "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.",
+ "RustFS reached the source bucket and listed it successfully.": "RustFS reached the source bucket and listed it successfully.",
+ "RustFS reads from this source and never writes or deletes objects there.": "RustFS reads from this source and never writes or deletes objects there.",
+ "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.": "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.",
+ "S3-compatible storage": "S3-compatible storage",
+ "SAS token": "SAS token",
+ "SAS token must omit the leading question mark and whitespace.": "SAS token must omit the leading question mark and whitespace.",
+ "Sample object": "Sample object",
+ "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.": "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.",
+ "Saving": "Saving",
+ "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.": "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.",
+ "Scan the source and pull objects that have not been requested yet.": "Scan the source and pull objects that have not been requested yet.",
+ "Send normal bucket notifications when a pulled object is stored locally.": "Send normal bucket notifications when a pulled object is stored locally.",
+ "Serve missing objects from an external source while migrating them into RustFS.": "Serve missing objects from an external source while migrating them into RustFS.",
+ "Serve range and queue the full object": "Serve range and queue the full object",
+ "Serve range only": "Serve range only",
+ "Server module disabled": "Server module disabled",
+ "Service-account JSON key": "Service-account JSON key",
+ "Session token (optional)": "Session token (optional)",
+ "Skip TLS certificate verification": "Skip TLS certificate verification",
+ "Skipped existing": "Skipped existing",
+ "Source bucket is required.": "Source bucket is required.",
+ "Source bucket must not contain slashes or whitespace.": "Source bucket must not contain slashes or whitespace.",
+ "Source circuit open": "Source circuit open",
+ "Source connection": "Source connection",
+ "Source container": "Source container",
+ "Source error response": "Source error response",
+ "Source listing prefix (optional)": "Source listing prefix (optional)",
+ "Source prefix": "Source prefix",
+ "Source prefix (optional)": "Source prefix (optional)",
+ "Source-hit ratio": "Source-hit ratio",
+ "Start a job when you are ready to migrate the remaining source objects.": "Start a job when you are ready to migrate the remaining source objects.",
+ "Start backfill": "Start backfill",
+ "Start background backfill": "Start background backfill",
+ "Start dry run": "Start dry run",
+ "TLS": "TLS",
+ "Test connection": "Test connection",
+ "Testing connection": "Testing connection",
+ "The endpoint must not contain a path, query, or fragment.": "The endpoint must not contain a path, query, or fragment.",
+ "The endpoint must not contain credentials.": "The endpoint must not contain credentials.",
+ "The existing source that RustFS will read from.": "The existing source that RustFS will read from.",
+ "The secret is stored by RustFS but never returned to the Console.": "The secret is stored by RustFS but never returned to the Console.",
+ "The server rejected this operation": "The server rejected this operation",
+ "The source bucket is empty or the selected prefix has no objects.": "The source bucket is empty or the selected prefix has no objects.",
+ "The source could not be reached": "The source could not be reached",
+ "The source is still being scanned, so no completion percentage is shown.": "The source is still being scanned, so no completion percentage is shown.",
+ "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.": "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.",
+ "This backend is not included in the server build": "This backend is not included in the server build",
+ "This provider requires a real region; auto is not supported.": "This provider requires a real region; auto is not supported.",
+ "Turn off to keep the saved configuration without consulting the source.": "Turn off to keep the saved configuration without consulting the source.",
+ "Unable to load on-demand migration": "Unable to load on-demand migration",
+ "Unable to load this setting": "Unable to load this setting",
+ "Unavailable when the server has no bucket GET total.": "Unavailable when the server has no bucket GET total.",
+ "Updated": "Updated",
+ "Upgrade RustFS to a version that provides the on-demand migration admin API.": "Upgrade RustFS to a version that provides the on-demand migration admin API.",
+ "Use a read-only key scoped to the source bucket.": "Use a read-only key scoped to the source bucket.",
+ "Use a service account with storage.objects.get and storage.objects.list.": "Use a service account with storage.objects.get and storage.objects.list.",
+ "Use a valid service-account JSON key with client_email and private_key.": "Use a valid service-account JSON key with client_email and private_key.",
+ "Use an absolute HTTP or HTTPS URL with no path.": "Use an absolute HTTP or HTTPS URL with no path.",
+ "Use an explicit style when the source redirects or reports a missing bucket.": "Use an explicit style when the source redirects or reports a missing bucket.",
+ "Use only in a trusted test environment. Prefer a custom CA certificate.": "Use only in a trusted test environment. Prefer a custom CA certificate.",
+ "Use provider default": "Use provider default",
+ "Used to derive the public endpoint when no custom endpoint is set.": "Used to derive the public endpoint when no custom endpoint is set.",
+ "Uses the S3 interoperability API and an HMAC key pair.": "Uses the S3 interoperability API and an HMAC key pair.",
+ "Uses the native Azure Blob API.": "Uses the native Azure Blob API.",
+ "Uses the native GCS API and a service-account JSON key.": "Uses the native GCS API and a service-account JSON key.",
+ "View backfill": "View backfill",
+ "Virtual-host style": "Virtual-host style",
+ "You do not have permission to change migration settings": "You do not have permission to change migration settings",
+ "You do not have permission to control backfill": "You do not have permission to control backfill",
+ "You do not have permission to view this bucket's migration settings.": "You do not have permission to view this bucket's migration settings.",
+ "Your migration configuration changes will be lost.": "Your migration configuration changes will be lost.",
+ "pull failures": "pull failures"
}
diff --git a/i18n/locales/ru-RU.json b/i18n/locales/ru-RU.json
index 0212d6ec..e627becd 100644
--- a/i18n/locales/ru-RU.json
+++ b/i18n/locales/ru-RU.json
@@ -1966,5 +1966,255 @@
"The destination was copied, but source deletion could not be confirmed. Check both locations before retrying.": "Объект скопирован в место назначения, но удаление исходного объекта не подтверждено. Проверьте оба места перед повторной попыткой.",
"The source changed or the destination already exists. Refresh and choose a different destination.": "Исходный объект изменился или целевой объект уже существует. Обновите данные и выберите другое место назначения.",
"Show key": "Показать ключ",
- "Hide key": "Скрыть ключ"
+ "Hide key": "Скрыть ключ",
+ "0 disables the cache; maximum 3600.": "0 disables the cache; maximum 3600.",
+ "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.": "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.",
+ "100–600000 ms between source body chunks.": "100–600000 ms between source body chunks.",
+ "100–600000 ms.": "100–600000 ms.",
+ "1–256 across inline, background, and backfill work.": "1–256 across inline, background, and backfill work.",
+ "1–65536 waiting background pulls.": "1–65536 waiting background pulls.",
+ "5242880–5368709120 bytes (5 MiB–5 GiB).": "5242880–5368709120 bytes (5 MiB–5 GiB).",
+ "A backfill job is already running": "A backfill job is already running",
+ "A local versioned delete marker prevents the object from being pulled again.": "A local versioned delete marker prevents the object from being pulled again.",
+ "AWS regions may contain only letters, numbers, and hyphens.": "AWS regions may contain only letters, numbers, and hyphens.",
+ "Access key is required.": "Access key is required.",
+ "Account key": "Account key",
+ "Addressing style": "Addressing style",
+ "Adds source requests to listings so clients can see objects not yet migrated.": "Adds source requests to listings so clients can see objects not yet migrated.",
+ "All keys": "All keys",
+ "Always skip": "Always skip",
+ "Amazon S3": "Amazon S3",
+ "Any current local object is skipped.": "Any current local object is skipped.",
+ "Automatic": "Automatic",
+ "Azure Blob Storage (Native)": "Azure Blob Storage (Native)",
+ "Azure account key must be valid Base64.": "Azure account key must be valid Base64.",
+ "Azure account may contain only letters, numbers, and hyphens.": "Azure account may contain only letters, numbers, and hyphens.",
+ "Azure credential type": "Azure credential type",
+ "Azure storage account": "Azure storage account",
+ "Azure storage account is required.": "Azure storage account is required.",
+ "Backfill cancellation requested": "Backfill cancellation requested",
+ "Backfill cancelled": "Backfill cancelled",
+ "Backfill cannot start until the module is enabled on every server node.": "Backfill cannot start until the module is enabled on every server node.",
+ "Backfill completed": "Backfill completed",
+ "Backfill completed with failures": "Backfill completed with failures",
+ "Backfill dry run started": "Backfill dry run started",
+ "Backfill failed": "Backfill failed",
+ "Backfill in progress": "Backfill in progress",
+ "Backfill operation failed": "Backfill operation failed",
+ "Backfill paused": "Backfill paused",
+ "Backfill pending": "Backfill pending",
+ "Backfill running": "Backfill running",
+ "Backfill started": "Backfill started",
+ "Background backfill": "Background backfill",
+ "Bandwidth limit (bytes/s, optional)": "Bandwidth limit (bytes/s, optional)",
+ "Bandwidth limit must be a whole number of at least 65536 bytes/s.": "Bandwidth limit must be a whole number of at least 65536 bytes/s.",
+ "Breaker closed": "Breaker closed",
+ "Breaker half-open": "Breaker half-open",
+ "Breaker open": "Breaker open",
+ "CA certificate (PEM, optional)": "CA certificate (PEM, optional)",
+ "CA certificate must be PEM encoded.": "CA certificate must be PEM encoded.",
+ "Cancel backfill": "Cancel backfill",
+ "Cancel the running backfill?": "Cancel the running backfill?",
+ "Cancelling": "Cancelling",
+ "Circuit breaker": "Circuit breaker",
+ "Compare source ETag and size": "Compare source ETag and size",
+ "Concurrent pulls": "Concurrent pulls",
+ "Concurrent pulls must be a whole number from 1 to 256.": "Concurrent pulls must be a whole number from 1 to 256.",
+ "Configuration changed on the server. Refresh and review it before disabling migration.": "Configuration changed on the server. Refresh and review it before disabling migration.",
+ "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.": "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.",
+ "Connect this bucket to an external source without interrupting reads.": "Connect this bucket to an external source without interrupting reads.",
+ "Connect timeout (ms)": "Connect timeout (ms)",
+ "Connect timeout must be a whole number from 100 to 600000.": "Connect timeout must be a whole number from 100 to 600000.",
+ "Connection test passed": "Connection test passed",
+ "Copy object tags": "Copy object tags",
+ "Create a bucket before configuring an external migration source.": "Create a bucket before configuring an external migration source.",
+ "Credentials are write-only": "Credentials are write-only",
+ "Custom endpoint (optional)": "Custom endpoint (optional)",
+ "Data": "Data",
+ "Disable": "Disable",
+ "Disable migration": "Disable migration",
+ "Disable on-demand migration?": "Disable on-demand migration?",
+ "Disabling": "Disabling",
+ "Discard changes": "Discard changes",
+ "Discard unsaved changes?": "Discard unsaved changes?",
+ "Edit on-demand migration": "Edit on-demand migration",
+ "Editing cancels the active backfill": "Editing cancels the active backfill",
+ "Emit object-created events": "Emit object-created events",
+ "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.": "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.",
+ "Enable migration": "Enable migration",
+ "Enable on-demand migration": "Enable on-demand migration",
+ "Endpoint host": "Endpoint host",
+ "Endpoint is required for this provider.": "Endpoint is required for this provider.",
+ "Enter a real region or auto.": "Enter a real region or auto.",
+ "Enter an absolute HTTP or HTTPS endpoint.": "Enter an absolute HTTP or HTTPS endpoint.",
+ "Enter the Base64 storage account key.": "Enter the Base64 storage account key.",
+ "Enter the SAS query string without a leading question mark.": "Enter the SAS query string without a leading question mark.",
+ "Existing local objects": "Existing local objects",
+ "Failed objects": "Failed objects",
+ "First-byte timeout (ms)": "First-byte timeout (ms)",
+ "First-byte timeout must be a whole number from 100 to 600000.": "First-byte timeout must be a whole number from 100 to 600000.",
+ "For security, re-enter the source credential before testing or saving any change.": "For security, re-enter the source credential before testing or saving any change.",
+ "Google Cloud Storage (HMAC)": "Google Cloud Storage (HMAC)",
+ "Google Cloud Storage (Native)": "Google Cloud Storage (Native)",
+ "HEAD requests": "HEAD requests",
+ "Idle timeout (ms)": "Idle timeout (ms)",
+ "Idle timeout must be a whole number from 100 to 600000.": "Idle timeout must be a whole number from 100 to 600000.",
+ "In-flight pulls": "In-flight pulls",
+ "Include source objects in ListObjectsV2": "Include source objects in ListObjectsV2",
+ "Inline object limit (bytes)": "Inline object limit (bytes)",
+ "Inline object limit must be a whole number from 0 to 268435456.": "Inline object limit must be a whole number from 0 to 268435456.",
+ "Keep editing": "Keep editing",
+ "Keep running": "Keep running",
+ "Keep the source ETag unless local bucket encryption replaces it.": "Keep the source ETag unless local bucket encryption replaces it.",
+ "Key mapping": "Key mapping",
+ "Last backfill error": "Last backfill error",
+ "Last source error": "Last source error",
+ "Latest job": "Latest job",
+ "Leave empty for unlimited; the server minimum is 65536 bytes/s.": "Leave empty for unlimited; the server minimum is 65536 bytes/s.",
+ "Leave empty to scan the complete configured source namespace.": "Leave empty to scan the complete configured source namespace.",
+ "Leave empty to use https://storage.googleapis.com.": "Leave empty to use https://storage.googleapis.com.",
+ "Leave empty to use the account's public Azure Blob endpoint.": "Leave empty to use the account's public Azure Blob endpoint.",
+ "Leave empty to use the regional Amazon S3 endpoint.": "Leave empty to use the regional Amazon S3 endpoint.",
+ "Lifetime on this node": "Lifetime on this node",
+ "List matching objects without queueing or writing any object.": "List matching objects without queueing or writing any object.",
+ "Listed": "Listed",
+ "Live counters from the RustFS node that answered this request.": "Live counters from the RustFS node that answered this request.",
+ "Loading on-demand migration settings": "Loading on-demand migration settings",
+ "Local only": "Local only",
+ "Local prefix": "Local prefix",
+ "Local prefix (optional)": "Local prefix (optional)",
+ "Manage migration": "Manage migration",
+ "Migrated data": "Migrated data",
+ "Migrated objects": "Migrated objects",
+ "Migration active": "Migration active",
+ "Migration configuration could not be saved": "Migration configuration could not be saved",
+ "Migration configuration updated": "Migration configuration updated",
+ "Migration not configured": "Migration not configured",
+ "Migration paused": "Migration paused",
+ "Missing local objects are served from this source and then stored locally.": "Missing local objects are served from this source and then stored locally.",
+ "Multipart part size (bytes)": "Multipart part size (bytes)",
+ "Multipart part size must be a whole number from 5242880 to 5368709120.": "Multipart part size must be a whole number from 5242880 to 5368709120.",
+ "Native GCS has no object tags, so no tags will be copied.": "Native GCS has no object tags, so no tags will be copied.",
+ "Negative cache TTL (seconds)": "Negative cache TTL (seconds)",
+ "Negative cache TTL must be a whole number from 0 to 3600.": "Negative cache TTL must be a whole number from 0 to 3600.",
+ "No added prefix": "No added prefix",
+ "No backfill yet": "No backfill yet",
+ "No background backfill has been started for this bucket.": "No background backfill has been started for this bucket.",
+ "No live runtime state on this node": "No live runtime state on this node",
+ "No migration source configured": "No migration source configured",
+ "No recorded pull failures": "No recorded pull failures",
+ "No runtime state": "No runtime state",
+ "No source error recorded": "No source error recorded",
+ "Objects already migrated remain in the local bucket. You can start a new job later.": "Objects already migrated remain in the local bucket. You can start a new job later.",
+ "Objects listed": "Objects listed",
+ "Objects pulled": "Objects pulled",
+ "Objects whose recorded source ETag and size differ are pulled again.": "Objects whose recorded source ETag and size differ are pulled again.",
+ "On-demand migration": "On-demand migration",
+ "On-demand migration disabled": "On-demand migration disabled",
+ "On-demand migration enabled": "On-demand migration enabled",
+ "On-demand migration is not available on this server": "On-demand migration is not available on this server",
+ "On-demand migration is not enabled on this server": "On-demand migration is not enabled on this server",
+ "On-demand migration is unavailable": "On-demand migration is unavailable",
+ "Only local keys with this prefix will consult the source.": "Only local keys with this prefix will consult the source.",
+ "Open license settings": "Open license settings",
+ "Open migration settings": "Open migration settings",
+ "Paste the issuing certificate when the source uses a private CA.": "Paste the issuing certificate when the source uses a private CA.",
+ "Path style": "Path style",
+ "Performance and limits": "Performance and limits",
+ "Plan a read-only source cutover": "Plan a read-only source cutover",
+ "Prepended to the local key when RustFS reads the source.": "Prepended to the local key when RustFS reads the source.",
+ "Preserve source ETag": "Preserve source ETag",
+ "Provide it only when the source credentials require a session token.": "Provide it only when the source credentials require a session token.",
+ "Provider": "Provider",
+ "Pull queue capacity": "Pull queue capacity",
+ "Pull queue capacity must be a whole number from 1 to 65536.": "Pull queue capacity must be a whole number from 1 to 65536.",
+ "Pulled": "Pulled",
+ "Queue depth": "Queue depth",
+ "Range GET requests": "Range GET requests",
+ "Re-enter the Azure credential to test or save changes.": "Re-enter the Azure credential to test or save changes.",
+ "Re-enter the secret key to test or save changes.": "Re-enter the secret key to test or save changes.",
+ "Re-enter the service account JSON to test or save changes.": "Re-enter the service account JSON to test or save changes.",
+ "Read behavior": "Read behavior",
+ "Read from source on a miss": "Read from source on a miss",
+ "Region is required.": "Region is required.",
+ "Requires admin:SetBucketOnDemandMigration": "Requires admin:SetBucketOnDemandMigration",
+ "Requires source tag-read permission and adds one request per pull.": "Requires source tag-read permission and adds one request per pull.",
+ "Respect local delete markers": "Respect local delete markers",
+ "Return Not Found": "Return Not Found",
+ "Return SourceUnavailable": "Return SourceUnavailable",
+ "Returning Not Found can make sync clients treat a temporary source failure as a deletion.": "Returning Not Found can make sync clients treat a temporary source failure as a deletion.",
+ "Runtime status": "Runtime status",
+ "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.": "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.",
+ "RustFS reached the source bucket and listed it successfully.": "RustFS reached the source bucket and listed it successfully.",
+ "RustFS reads from this source and never writes or deletes objects there.": "RustFS reads from this source and never writes or deletes objects there.",
+ "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.": "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.",
+ "S3-compatible storage": "S3-compatible storage",
+ "SAS token": "SAS token",
+ "SAS token must omit the leading question mark and whitespace.": "SAS token must omit the leading question mark and whitespace.",
+ "Sample object": "Sample object",
+ "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.": "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.",
+ "Saving": "Saving",
+ "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.": "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.",
+ "Scan the source and pull objects that have not been requested yet.": "Scan the source and pull objects that have not been requested yet.",
+ "Send normal bucket notifications when a pulled object is stored locally.": "Send normal bucket notifications when a pulled object is stored locally.",
+ "Serve missing objects from an external source while migrating them into RustFS.": "Serve missing objects from an external source while migrating them into RustFS.",
+ "Serve range and queue the full object": "Serve range and queue the full object",
+ "Serve range only": "Serve range only",
+ "Server module disabled": "Server module disabled",
+ "Service-account JSON key": "Service-account JSON key",
+ "Session token (optional)": "Session token (optional)",
+ "Skip TLS certificate verification": "Skip TLS certificate verification",
+ "Skipped existing": "Skipped existing",
+ "Source bucket is required.": "Source bucket is required.",
+ "Source bucket must not contain slashes or whitespace.": "Source bucket must not contain slashes or whitespace.",
+ "Source circuit open": "Source circuit open",
+ "Source connection": "Source connection",
+ "Source container": "Source container",
+ "Source error response": "Source error response",
+ "Source listing prefix (optional)": "Source listing prefix (optional)",
+ "Source prefix": "Source prefix",
+ "Source prefix (optional)": "Source prefix (optional)",
+ "Source-hit ratio": "Source-hit ratio",
+ "Start a job when you are ready to migrate the remaining source objects.": "Start a job when you are ready to migrate the remaining source objects.",
+ "Start backfill": "Start backfill",
+ "Start background backfill": "Start background backfill",
+ "Start dry run": "Start dry run",
+ "TLS": "TLS",
+ "Test connection": "Test connection",
+ "Testing connection": "Testing connection",
+ "The endpoint must not contain a path, query, or fragment.": "The endpoint must not contain a path, query, or fragment.",
+ "The endpoint must not contain credentials.": "The endpoint must not contain credentials.",
+ "The existing source that RustFS will read from.": "The existing source that RustFS will read from.",
+ "The secret is stored by RustFS but never returned to the Console.": "The secret is stored by RustFS but never returned to the Console.",
+ "The server rejected this operation": "The server rejected this operation",
+ "The source bucket is empty or the selected prefix has no objects.": "The source bucket is empty or the selected prefix has no objects.",
+ "The source could not be reached": "The source could not be reached",
+ "The source is still being scanned, so no completion percentage is shown.": "The source is still being scanned, so no completion percentage is shown.",
+ "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.": "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.",
+ "This backend is not included in the server build": "This backend is not included in the server build",
+ "This provider requires a real region; auto is not supported.": "This provider requires a real region; auto is not supported.",
+ "Turn off to keep the saved configuration without consulting the source.": "Turn off to keep the saved configuration without consulting the source.",
+ "Unable to load on-demand migration": "Unable to load on-demand migration",
+ "Unable to load this setting": "Unable to load this setting",
+ "Unavailable when the server has no bucket GET total.": "Unavailable when the server has no bucket GET total.",
+ "Updated": "Updated",
+ "Upgrade RustFS to a version that provides the on-demand migration admin API.": "Upgrade RustFS to a version that provides the on-demand migration admin API.",
+ "Use a read-only key scoped to the source bucket.": "Use a read-only key scoped to the source bucket.",
+ "Use a service account with storage.objects.get and storage.objects.list.": "Use a service account with storage.objects.get and storage.objects.list.",
+ "Use a valid service-account JSON key with client_email and private_key.": "Use a valid service-account JSON key with client_email and private_key.",
+ "Use an absolute HTTP or HTTPS URL with no path.": "Use an absolute HTTP or HTTPS URL with no path.",
+ "Use an explicit style when the source redirects or reports a missing bucket.": "Use an explicit style when the source redirects or reports a missing bucket.",
+ "Use only in a trusted test environment. Prefer a custom CA certificate.": "Use only in a trusted test environment. Prefer a custom CA certificate.",
+ "Use provider default": "Use provider default",
+ "Used to derive the public endpoint when no custom endpoint is set.": "Used to derive the public endpoint when no custom endpoint is set.",
+ "Uses the S3 interoperability API and an HMAC key pair.": "Uses the S3 interoperability API and an HMAC key pair.",
+ "Uses the native Azure Blob API.": "Uses the native Azure Blob API.",
+ "Uses the native GCS API and a service-account JSON key.": "Uses the native GCS API and a service-account JSON key.",
+ "View backfill": "View backfill",
+ "Virtual-host style": "Virtual-host style",
+ "You do not have permission to change migration settings": "You do not have permission to change migration settings",
+ "You do not have permission to control backfill": "You do not have permission to control backfill",
+ "You do not have permission to view this bucket's migration settings.": "You do not have permission to view this bucket's migration settings.",
+ "Your migration configuration changes will be lost.": "Your migration configuration changes will be lost.",
+ "pull failures": "pull failures"
}
diff --git a/i18n/locales/tr-TR.json b/i18n/locales/tr-TR.json
index 53a6be6e..ad74e797 100644
--- a/i18n/locales/tr-TR.json
+++ b/i18n/locales/tr-TR.json
@@ -1966,5 +1966,255 @@
"The destination was copied, but source deletion could not be confirmed. Check both locations before retrying.": "Nesne hedefe kopyalandı ancak kaynağın silindiği doğrulanamadı. Yeniden denemeden önce her iki konumu da kontrol edin.",
"The source changed or the destination already exists. Refresh and choose a different destination.": "Kaynak değişti veya hedef zaten mevcut. Yenileyin ve farklı bir hedef seçin.",
"Show key": "Anahtarı göster",
- "Hide key": "Anahtarı gizle"
+ "Hide key": "Anahtarı gizle",
+ "0 disables the cache; maximum 3600.": "0 disables the cache; maximum 3600.",
+ "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.": "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.",
+ "100–600000 ms between source body chunks.": "100–600000 ms between source body chunks.",
+ "100–600000 ms.": "100–600000 ms.",
+ "1–256 across inline, background, and backfill work.": "1–256 across inline, background, and backfill work.",
+ "1–65536 waiting background pulls.": "1–65536 waiting background pulls.",
+ "5242880–5368709120 bytes (5 MiB–5 GiB).": "5242880–5368709120 bytes (5 MiB–5 GiB).",
+ "A backfill job is already running": "A backfill job is already running",
+ "A local versioned delete marker prevents the object from being pulled again.": "A local versioned delete marker prevents the object from being pulled again.",
+ "AWS regions may contain only letters, numbers, and hyphens.": "AWS regions may contain only letters, numbers, and hyphens.",
+ "Access key is required.": "Access key is required.",
+ "Account key": "Account key",
+ "Addressing style": "Addressing style",
+ "Adds source requests to listings so clients can see objects not yet migrated.": "Adds source requests to listings so clients can see objects not yet migrated.",
+ "All keys": "All keys",
+ "Always skip": "Always skip",
+ "Amazon S3": "Amazon S3",
+ "Any current local object is skipped.": "Any current local object is skipped.",
+ "Automatic": "Automatic",
+ "Azure Blob Storage (Native)": "Azure Blob Storage (Native)",
+ "Azure account key must be valid Base64.": "Azure account key must be valid Base64.",
+ "Azure account may contain only letters, numbers, and hyphens.": "Azure account may contain only letters, numbers, and hyphens.",
+ "Azure credential type": "Azure credential type",
+ "Azure storage account": "Azure storage account",
+ "Azure storage account is required.": "Azure storage account is required.",
+ "Backfill cancellation requested": "Backfill cancellation requested",
+ "Backfill cancelled": "Backfill cancelled",
+ "Backfill cannot start until the module is enabled on every server node.": "Backfill cannot start until the module is enabled on every server node.",
+ "Backfill completed": "Backfill completed",
+ "Backfill completed with failures": "Backfill completed with failures",
+ "Backfill dry run started": "Backfill dry run started",
+ "Backfill failed": "Backfill failed",
+ "Backfill in progress": "Backfill in progress",
+ "Backfill operation failed": "Backfill operation failed",
+ "Backfill paused": "Backfill paused",
+ "Backfill pending": "Backfill pending",
+ "Backfill running": "Backfill running",
+ "Backfill started": "Backfill started",
+ "Background backfill": "Background backfill",
+ "Bandwidth limit (bytes/s, optional)": "Bandwidth limit (bytes/s, optional)",
+ "Bandwidth limit must be a whole number of at least 65536 bytes/s.": "Bandwidth limit must be a whole number of at least 65536 bytes/s.",
+ "Breaker closed": "Breaker closed",
+ "Breaker half-open": "Breaker half-open",
+ "Breaker open": "Breaker open",
+ "CA certificate (PEM, optional)": "CA certificate (PEM, optional)",
+ "CA certificate must be PEM encoded.": "CA certificate must be PEM encoded.",
+ "Cancel backfill": "Cancel backfill",
+ "Cancel the running backfill?": "Cancel the running backfill?",
+ "Cancelling": "Cancelling",
+ "Circuit breaker": "Circuit breaker",
+ "Compare source ETag and size": "Compare source ETag and size",
+ "Concurrent pulls": "Concurrent pulls",
+ "Concurrent pulls must be a whole number from 1 to 256.": "Concurrent pulls must be a whole number from 1 to 256.",
+ "Configuration changed on the server. Refresh and review it before disabling migration.": "Configuration changed on the server. Refresh and review it before disabling migration.",
+ "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.": "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.",
+ "Connect this bucket to an external source without interrupting reads.": "Connect this bucket to an external source without interrupting reads.",
+ "Connect timeout (ms)": "Connect timeout (ms)",
+ "Connect timeout must be a whole number from 100 to 600000.": "Connect timeout must be a whole number from 100 to 600000.",
+ "Connection test passed": "Connection test passed",
+ "Copy object tags": "Copy object tags",
+ "Create a bucket before configuring an external migration source.": "Create a bucket before configuring an external migration source.",
+ "Credentials are write-only": "Credentials are write-only",
+ "Custom endpoint (optional)": "Custom endpoint (optional)",
+ "Data": "Data",
+ "Disable": "Disable",
+ "Disable migration": "Disable migration",
+ "Disable on-demand migration?": "Disable on-demand migration?",
+ "Disabling": "Disabling",
+ "Discard changes": "Discard changes",
+ "Discard unsaved changes?": "Discard unsaved changes?",
+ "Edit on-demand migration": "Edit on-demand migration",
+ "Editing cancels the active backfill": "Editing cancels the active backfill",
+ "Emit object-created events": "Emit object-created events",
+ "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.": "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.",
+ "Enable migration": "Enable migration",
+ "Enable on-demand migration": "Enable on-demand migration",
+ "Endpoint host": "Endpoint host",
+ "Endpoint is required for this provider.": "Endpoint is required for this provider.",
+ "Enter a real region or auto.": "Enter a real region or auto.",
+ "Enter an absolute HTTP or HTTPS endpoint.": "Enter an absolute HTTP or HTTPS endpoint.",
+ "Enter the Base64 storage account key.": "Enter the Base64 storage account key.",
+ "Enter the SAS query string without a leading question mark.": "Enter the SAS query string without a leading question mark.",
+ "Existing local objects": "Existing local objects",
+ "Failed objects": "Failed objects",
+ "First-byte timeout (ms)": "First-byte timeout (ms)",
+ "First-byte timeout must be a whole number from 100 to 600000.": "First-byte timeout must be a whole number from 100 to 600000.",
+ "For security, re-enter the source credential before testing or saving any change.": "For security, re-enter the source credential before testing or saving any change.",
+ "Google Cloud Storage (HMAC)": "Google Cloud Storage (HMAC)",
+ "Google Cloud Storage (Native)": "Google Cloud Storage (Native)",
+ "HEAD requests": "HEAD requests",
+ "Idle timeout (ms)": "Idle timeout (ms)",
+ "Idle timeout must be a whole number from 100 to 600000.": "Idle timeout must be a whole number from 100 to 600000.",
+ "In-flight pulls": "In-flight pulls",
+ "Include source objects in ListObjectsV2": "Include source objects in ListObjectsV2",
+ "Inline object limit (bytes)": "Inline object limit (bytes)",
+ "Inline object limit must be a whole number from 0 to 268435456.": "Inline object limit must be a whole number from 0 to 268435456.",
+ "Keep editing": "Keep editing",
+ "Keep running": "Keep running",
+ "Keep the source ETag unless local bucket encryption replaces it.": "Keep the source ETag unless local bucket encryption replaces it.",
+ "Key mapping": "Key mapping",
+ "Last backfill error": "Last backfill error",
+ "Last source error": "Last source error",
+ "Latest job": "Latest job",
+ "Leave empty for unlimited; the server minimum is 65536 bytes/s.": "Leave empty for unlimited; the server minimum is 65536 bytes/s.",
+ "Leave empty to scan the complete configured source namespace.": "Leave empty to scan the complete configured source namespace.",
+ "Leave empty to use https://storage.googleapis.com.": "Leave empty to use https://storage.googleapis.com.",
+ "Leave empty to use the account's public Azure Blob endpoint.": "Leave empty to use the account's public Azure Blob endpoint.",
+ "Leave empty to use the regional Amazon S3 endpoint.": "Leave empty to use the regional Amazon S3 endpoint.",
+ "Lifetime on this node": "Lifetime on this node",
+ "List matching objects without queueing or writing any object.": "List matching objects without queueing or writing any object.",
+ "Listed": "Listed",
+ "Live counters from the RustFS node that answered this request.": "Live counters from the RustFS node that answered this request.",
+ "Loading on-demand migration settings": "Loading on-demand migration settings",
+ "Local only": "Local only",
+ "Local prefix": "Local prefix",
+ "Local prefix (optional)": "Local prefix (optional)",
+ "Manage migration": "Manage migration",
+ "Migrated data": "Migrated data",
+ "Migrated objects": "Migrated objects",
+ "Migration active": "Migration active",
+ "Migration configuration could not be saved": "Migration configuration could not be saved",
+ "Migration configuration updated": "Migration configuration updated",
+ "Migration not configured": "Migration not configured",
+ "Migration paused": "Migration paused",
+ "Missing local objects are served from this source and then stored locally.": "Missing local objects are served from this source and then stored locally.",
+ "Multipart part size (bytes)": "Multipart part size (bytes)",
+ "Multipart part size must be a whole number from 5242880 to 5368709120.": "Multipart part size must be a whole number from 5242880 to 5368709120.",
+ "Native GCS has no object tags, so no tags will be copied.": "Native GCS has no object tags, so no tags will be copied.",
+ "Negative cache TTL (seconds)": "Negative cache TTL (seconds)",
+ "Negative cache TTL must be a whole number from 0 to 3600.": "Negative cache TTL must be a whole number from 0 to 3600.",
+ "No added prefix": "No added prefix",
+ "No backfill yet": "No backfill yet",
+ "No background backfill has been started for this bucket.": "No background backfill has been started for this bucket.",
+ "No live runtime state on this node": "No live runtime state on this node",
+ "No migration source configured": "No migration source configured",
+ "No recorded pull failures": "No recorded pull failures",
+ "No runtime state": "No runtime state",
+ "No source error recorded": "No source error recorded",
+ "Objects already migrated remain in the local bucket. You can start a new job later.": "Objects already migrated remain in the local bucket. You can start a new job later.",
+ "Objects listed": "Objects listed",
+ "Objects pulled": "Objects pulled",
+ "Objects whose recorded source ETag and size differ are pulled again.": "Objects whose recorded source ETag and size differ are pulled again.",
+ "On-demand migration": "On-demand migration",
+ "On-demand migration disabled": "On-demand migration disabled",
+ "On-demand migration enabled": "On-demand migration enabled",
+ "On-demand migration is not available on this server": "On-demand migration is not available on this server",
+ "On-demand migration is not enabled on this server": "On-demand migration is not enabled on this server",
+ "On-demand migration is unavailable": "On-demand migration is unavailable",
+ "Only local keys with this prefix will consult the source.": "Only local keys with this prefix will consult the source.",
+ "Open license settings": "Open license settings",
+ "Open migration settings": "Open migration settings",
+ "Paste the issuing certificate when the source uses a private CA.": "Paste the issuing certificate when the source uses a private CA.",
+ "Path style": "Path style",
+ "Performance and limits": "Performance and limits",
+ "Plan a read-only source cutover": "Plan a read-only source cutover",
+ "Prepended to the local key when RustFS reads the source.": "Prepended to the local key when RustFS reads the source.",
+ "Preserve source ETag": "Preserve source ETag",
+ "Provide it only when the source credentials require a session token.": "Provide it only when the source credentials require a session token.",
+ "Provider": "Provider",
+ "Pull queue capacity": "Pull queue capacity",
+ "Pull queue capacity must be a whole number from 1 to 65536.": "Pull queue capacity must be a whole number from 1 to 65536.",
+ "Pulled": "Pulled",
+ "Queue depth": "Queue depth",
+ "Range GET requests": "Range GET requests",
+ "Re-enter the Azure credential to test or save changes.": "Re-enter the Azure credential to test or save changes.",
+ "Re-enter the secret key to test or save changes.": "Re-enter the secret key to test or save changes.",
+ "Re-enter the service account JSON to test or save changes.": "Re-enter the service account JSON to test or save changes.",
+ "Read behavior": "Read behavior",
+ "Read from source on a miss": "Read from source on a miss",
+ "Region is required.": "Region is required.",
+ "Requires admin:SetBucketOnDemandMigration": "Requires admin:SetBucketOnDemandMigration",
+ "Requires source tag-read permission and adds one request per pull.": "Requires source tag-read permission and adds one request per pull.",
+ "Respect local delete markers": "Respect local delete markers",
+ "Return Not Found": "Return Not Found",
+ "Return SourceUnavailable": "Return SourceUnavailable",
+ "Returning Not Found can make sync clients treat a temporary source failure as a deletion.": "Returning Not Found can make sync clients treat a temporary source failure as a deletion.",
+ "Runtime status": "Runtime status",
+ "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.": "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.",
+ "RustFS reached the source bucket and listed it successfully.": "RustFS reached the source bucket and listed it successfully.",
+ "RustFS reads from this source and never writes or deletes objects there.": "RustFS reads from this source and never writes or deletes objects there.",
+ "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.": "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.",
+ "S3-compatible storage": "S3-compatible storage",
+ "SAS token": "SAS token",
+ "SAS token must omit the leading question mark and whitespace.": "SAS token must omit the leading question mark and whitespace.",
+ "Sample object": "Sample object",
+ "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.": "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.",
+ "Saving": "Saving",
+ "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.": "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.",
+ "Scan the source and pull objects that have not been requested yet.": "Scan the source and pull objects that have not been requested yet.",
+ "Send normal bucket notifications when a pulled object is stored locally.": "Send normal bucket notifications when a pulled object is stored locally.",
+ "Serve missing objects from an external source while migrating them into RustFS.": "Serve missing objects from an external source while migrating them into RustFS.",
+ "Serve range and queue the full object": "Serve range and queue the full object",
+ "Serve range only": "Serve range only",
+ "Server module disabled": "Server module disabled",
+ "Service-account JSON key": "Service-account JSON key",
+ "Session token (optional)": "Session token (optional)",
+ "Skip TLS certificate verification": "Skip TLS certificate verification",
+ "Skipped existing": "Skipped existing",
+ "Source bucket is required.": "Source bucket is required.",
+ "Source bucket must not contain slashes or whitespace.": "Source bucket must not contain slashes or whitespace.",
+ "Source circuit open": "Source circuit open",
+ "Source connection": "Source connection",
+ "Source container": "Source container",
+ "Source error response": "Source error response",
+ "Source listing prefix (optional)": "Source listing prefix (optional)",
+ "Source prefix": "Source prefix",
+ "Source prefix (optional)": "Source prefix (optional)",
+ "Source-hit ratio": "Source-hit ratio",
+ "Start a job when you are ready to migrate the remaining source objects.": "Start a job when you are ready to migrate the remaining source objects.",
+ "Start backfill": "Start backfill",
+ "Start background backfill": "Start background backfill",
+ "Start dry run": "Start dry run",
+ "TLS": "TLS",
+ "Test connection": "Test connection",
+ "Testing connection": "Testing connection",
+ "The endpoint must not contain a path, query, or fragment.": "The endpoint must not contain a path, query, or fragment.",
+ "The endpoint must not contain credentials.": "The endpoint must not contain credentials.",
+ "The existing source that RustFS will read from.": "The existing source that RustFS will read from.",
+ "The secret is stored by RustFS but never returned to the Console.": "The secret is stored by RustFS but never returned to the Console.",
+ "The server rejected this operation": "The server rejected this operation",
+ "The source bucket is empty or the selected prefix has no objects.": "The source bucket is empty or the selected prefix has no objects.",
+ "The source could not be reached": "The source could not be reached",
+ "The source is still being scanned, so no completion percentage is shown.": "The source is still being scanned, so no completion percentage is shown.",
+ "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.": "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.",
+ "This backend is not included in the server build": "This backend is not included in the server build",
+ "This provider requires a real region; auto is not supported.": "This provider requires a real region; auto is not supported.",
+ "Turn off to keep the saved configuration without consulting the source.": "Turn off to keep the saved configuration without consulting the source.",
+ "Unable to load on-demand migration": "Unable to load on-demand migration",
+ "Unable to load this setting": "Unable to load this setting",
+ "Unavailable when the server has no bucket GET total.": "Unavailable when the server has no bucket GET total.",
+ "Updated": "Updated",
+ "Upgrade RustFS to a version that provides the on-demand migration admin API.": "Upgrade RustFS to a version that provides the on-demand migration admin API.",
+ "Use a read-only key scoped to the source bucket.": "Use a read-only key scoped to the source bucket.",
+ "Use a service account with storage.objects.get and storage.objects.list.": "Use a service account with storage.objects.get and storage.objects.list.",
+ "Use a valid service-account JSON key with client_email and private_key.": "Use a valid service-account JSON key with client_email and private_key.",
+ "Use an absolute HTTP or HTTPS URL with no path.": "Use an absolute HTTP or HTTPS URL with no path.",
+ "Use an explicit style when the source redirects or reports a missing bucket.": "Use an explicit style when the source redirects or reports a missing bucket.",
+ "Use only in a trusted test environment. Prefer a custom CA certificate.": "Use only in a trusted test environment. Prefer a custom CA certificate.",
+ "Use provider default": "Use provider default",
+ "Used to derive the public endpoint when no custom endpoint is set.": "Used to derive the public endpoint when no custom endpoint is set.",
+ "Uses the S3 interoperability API and an HMAC key pair.": "Uses the S3 interoperability API and an HMAC key pair.",
+ "Uses the native Azure Blob API.": "Uses the native Azure Blob API.",
+ "Uses the native GCS API and a service-account JSON key.": "Uses the native GCS API and a service-account JSON key.",
+ "View backfill": "View backfill",
+ "Virtual-host style": "Virtual-host style",
+ "You do not have permission to change migration settings": "You do not have permission to change migration settings",
+ "You do not have permission to control backfill": "You do not have permission to control backfill",
+ "You do not have permission to view this bucket's migration settings.": "You do not have permission to view this bucket's migration settings.",
+ "Your migration configuration changes will be lost.": "Your migration configuration changes will be lost.",
+ "pull failures": "pull failures"
}
diff --git a/i18n/locales/vi-VN.json b/i18n/locales/vi-VN.json
index fb44d9bf..7699af46 100644
--- a/i18n/locales/vi-VN.json
+++ b/i18n/locales/vi-VN.json
@@ -1966,5 +1966,255 @@
"The destination was copied, but source deletion could not be confirmed. Check both locations before retrying.": "Đã sao chép đối tượng đến đích nhưng không thể xác nhận việc xóa đối tượng nguồn. Hãy kiểm tra cả hai vị trí trước khi thử lại.",
"The source changed or the destination already exists. Refresh and choose a different destination.": "Đối tượng nguồn đã thay đổi hoặc đích đã tồn tại. Hãy làm mới và chọn đích khác.",
"Show key": "Hiện khóa",
- "Hide key": "Ẩn khóa"
+ "Hide key": "Ẩn khóa",
+ "0 disables the cache; maximum 3600.": "0 disables the cache; maximum 3600.",
+ "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.": "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.",
+ "100–600000 ms between source body chunks.": "100–600000 ms between source body chunks.",
+ "100–600000 ms.": "100–600000 ms.",
+ "1–256 across inline, background, and backfill work.": "1–256 across inline, background, and backfill work.",
+ "1–65536 waiting background pulls.": "1–65536 waiting background pulls.",
+ "5242880–5368709120 bytes (5 MiB–5 GiB).": "5242880–5368709120 bytes (5 MiB–5 GiB).",
+ "A backfill job is already running": "A backfill job is already running",
+ "A local versioned delete marker prevents the object from being pulled again.": "A local versioned delete marker prevents the object from being pulled again.",
+ "AWS regions may contain only letters, numbers, and hyphens.": "AWS regions may contain only letters, numbers, and hyphens.",
+ "Access key is required.": "Access key is required.",
+ "Account key": "Account key",
+ "Addressing style": "Addressing style",
+ "Adds source requests to listings so clients can see objects not yet migrated.": "Adds source requests to listings so clients can see objects not yet migrated.",
+ "All keys": "All keys",
+ "Always skip": "Always skip",
+ "Amazon S3": "Amazon S3",
+ "Any current local object is skipped.": "Any current local object is skipped.",
+ "Automatic": "Automatic",
+ "Azure Blob Storage (Native)": "Azure Blob Storage (Native)",
+ "Azure account key must be valid Base64.": "Azure account key must be valid Base64.",
+ "Azure account may contain only letters, numbers, and hyphens.": "Azure account may contain only letters, numbers, and hyphens.",
+ "Azure credential type": "Azure credential type",
+ "Azure storage account": "Azure storage account",
+ "Azure storage account is required.": "Azure storage account is required.",
+ "Backfill cancellation requested": "Backfill cancellation requested",
+ "Backfill cancelled": "Backfill cancelled",
+ "Backfill cannot start until the module is enabled on every server node.": "Backfill cannot start until the module is enabled on every server node.",
+ "Backfill completed": "Backfill completed",
+ "Backfill completed with failures": "Backfill completed with failures",
+ "Backfill dry run started": "Backfill dry run started",
+ "Backfill failed": "Backfill failed",
+ "Backfill in progress": "Backfill in progress",
+ "Backfill operation failed": "Backfill operation failed",
+ "Backfill paused": "Backfill paused",
+ "Backfill pending": "Backfill pending",
+ "Backfill running": "Backfill running",
+ "Backfill started": "Backfill started",
+ "Background backfill": "Background backfill",
+ "Bandwidth limit (bytes/s, optional)": "Bandwidth limit (bytes/s, optional)",
+ "Bandwidth limit must be a whole number of at least 65536 bytes/s.": "Bandwidth limit must be a whole number of at least 65536 bytes/s.",
+ "Breaker closed": "Breaker closed",
+ "Breaker half-open": "Breaker half-open",
+ "Breaker open": "Breaker open",
+ "CA certificate (PEM, optional)": "CA certificate (PEM, optional)",
+ "CA certificate must be PEM encoded.": "CA certificate must be PEM encoded.",
+ "Cancel backfill": "Cancel backfill",
+ "Cancel the running backfill?": "Cancel the running backfill?",
+ "Cancelling": "Cancelling",
+ "Circuit breaker": "Circuit breaker",
+ "Compare source ETag and size": "Compare source ETag and size",
+ "Concurrent pulls": "Concurrent pulls",
+ "Concurrent pulls must be a whole number from 1 to 256.": "Concurrent pulls must be a whole number from 1 to 256.",
+ "Configuration changed on the server. Refresh and review it before disabling migration.": "Configuration changed on the server. Refresh and review it before disabling migration.",
+ "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.": "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.",
+ "Connect this bucket to an external source without interrupting reads.": "Connect this bucket to an external source without interrupting reads.",
+ "Connect timeout (ms)": "Connect timeout (ms)",
+ "Connect timeout must be a whole number from 100 to 600000.": "Connect timeout must be a whole number from 100 to 600000.",
+ "Connection test passed": "Connection test passed",
+ "Copy object tags": "Copy object tags",
+ "Create a bucket before configuring an external migration source.": "Create a bucket before configuring an external migration source.",
+ "Credentials are write-only": "Credentials are write-only",
+ "Custom endpoint (optional)": "Custom endpoint (optional)",
+ "Data": "Data",
+ "Disable": "Disable",
+ "Disable migration": "Disable migration",
+ "Disable on-demand migration?": "Disable on-demand migration?",
+ "Disabling": "Disabling",
+ "Discard changes": "Discard changes",
+ "Discard unsaved changes?": "Discard unsaved changes?",
+ "Edit on-demand migration": "Edit on-demand migration",
+ "Editing cancels the active backfill": "Editing cancels the active backfill",
+ "Emit object-created events": "Emit object-created events",
+ "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.": "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.",
+ "Enable migration": "Enable migration",
+ "Enable on-demand migration": "Enable on-demand migration",
+ "Endpoint host": "Endpoint host",
+ "Endpoint is required for this provider.": "Endpoint is required for this provider.",
+ "Enter a real region or auto.": "Enter a real region or auto.",
+ "Enter an absolute HTTP or HTTPS endpoint.": "Enter an absolute HTTP or HTTPS endpoint.",
+ "Enter the Base64 storage account key.": "Enter the Base64 storage account key.",
+ "Enter the SAS query string without a leading question mark.": "Enter the SAS query string without a leading question mark.",
+ "Existing local objects": "Existing local objects",
+ "Failed objects": "Failed objects",
+ "First-byte timeout (ms)": "First-byte timeout (ms)",
+ "First-byte timeout must be a whole number from 100 to 600000.": "First-byte timeout must be a whole number from 100 to 600000.",
+ "For security, re-enter the source credential before testing or saving any change.": "For security, re-enter the source credential before testing or saving any change.",
+ "Google Cloud Storage (HMAC)": "Google Cloud Storage (HMAC)",
+ "Google Cloud Storage (Native)": "Google Cloud Storage (Native)",
+ "HEAD requests": "HEAD requests",
+ "Idle timeout (ms)": "Idle timeout (ms)",
+ "Idle timeout must be a whole number from 100 to 600000.": "Idle timeout must be a whole number from 100 to 600000.",
+ "In-flight pulls": "In-flight pulls",
+ "Include source objects in ListObjectsV2": "Include source objects in ListObjectsV2",
+ "Inline object limit (bytes)": "Inline object limit (bytes)",
+ "Inline object limit must be a whole number from 0 to 268435456.": "Inline object limit must be a whole number from 0 to 268435456.",
+ "Keep editing": "Keep editing",
+ "Keep running": "Keep running",
+ "Keep the source ETag unless local bucket encryption replaces it.": "Keep the source ETag unless local bucket encryption replaces it.",
+ "Key mapping": "Key mapping",
+ "Last backfill error": "Last backfill error",
+ "Last source error": "Last source error",
+ "Latest job": "Latest job",
+ "Leave empty for unlimited; the server minimum is 65536 bytes/s.": "Leave empty for unlimited; the server minimum is 65536 bytes/s.",
+ "Leave empty to scan the complete configured source namespace.": "Leave empty to scan the complete configured source namespace.",
+ "Leave empty to use https://storage.googleapis.com.": "Leave empty to use https://storage.googleapis.com.",
+ "Leave empty to use the account's public Azure Blob endpoint.": "Leave empty to use the account's public Azure Blob endpoint.",
+ "Leave empty to use the regional Amazon S3 endpoint.": "Leave empty to use the regional Amazon S3 endpoint.",
+ "Lifetime on this node": "Lifetime on this node",
+ "List matching objects without queueing or writing any object.": "List matching objects without queueing or writing any object.",
+ "Listed": "Listed",
+ "Live counters from the RustFS node that answered this request.": "Live counters from the RustFS node that answered this request.",
+ "Loading on-demand migration settings": "Loading on-demand migration settings",
+ "Local only": "Local only",
+ "Local prefix": "Local prefix",
+ "Local prefix (optional)": "Local prefix (optional)",
+ "Manage migration": "Manage migration",
+ "Migrated data": "Migrated data",
+ "Migrated objects": "Migrated objects",
+ "Migration active": "Migration active",
+ "Migration configuration could not be saved": "Migration configuration could not be saved",
+ "Migration configuration updated": "Migration configuration updated",
+ "Migration not configured": "Migration not configured",
+ "Migration paused": "Migration paused",
+ "Missing local objects are served from this source and then stored locally.": "Missing local objects are served from this source and then stored locally.",
+ "Multipart part size (bytes)": "Multipart part size (bytes)",
+ "Multipart part size must be a whole number from 5242880 to 5368709120.": "Multipart part size must be a whole number from 5242880 to 5368709120.",
+ "Native GCS has no object tags, so no tags will be copied.": "Native GCS has no object tags, so no tags will be copied.",
+ "Negative cache TTL (seconds)": "Negative cache TTL (seconds)",
+ "Negative cache TTL must be a whole number from 0 to 3600.": "Negative cache TTL must be a whole number from 0 to 3600.",
+ "No added prefix": "No added prefix",
+ "No backfill yet": "No backfill yet",
+ "No background backfill has been started for this bucket.": "No background backfill has been started for this bucket.",
+ "No live runtime state on this node": "No live runtime state on this node",
+ "No migration source configured": "No migration source configured",
+ "No recorded pull failures": "No recorded pull failures",
+ "No runtime state": "No runtime state",
+ "No source error recorded": "No source error recorded",
+ "Objects already migrated remain in the local bucket. You can start a new job later.": "Objects already migrated remain in the local bucket. You can start a new job later.",
+ "Objects listed": "Objects listed",
+ "Objects pulled": "Objects pulled",
+ "Objects whose recorded source ETag and size differ are pulled again.": "Objects whose recorded source ETag and size differ are pulled again.",
+ "On-demand migration": "On-demand migration",
+ "On-demand migration disabled": "On-demand migration disabled",
+ "On-demand migration enabled": "On-demand migration enabled",
+ "On-demand migration is not available on this server": "On-demand migration is not available on this server",
+ "On-demand migration is not enabled on this server": "On-demand migration is not enabled on this server",
+ "On-demand migration is unavailable": "On-demand migration is unavailable",
+ "Only local keys with this prefix will consult the source.": "Only local keys with this prefix will consult the source.",
+ "Open license settings": "Open license settings",
+ "Open migration settings": "Open migration settings",
+ "Paste the issuing certificate when the source uses a private CA.": "Paste the issuing certificate when the source uses a private CA.",
+ "Path style": "Path style",
+ "Performance and limits": "Performance and limits",
+ "Plan a read-only source cutover": "Plan a read-only source cutover",
+ "Prepended to the local key when RustFS reads the source.": "Prepended to the local key when RustFS reads the source.",
+ "Preserve source ETag": "Preserve source ETag",
+ "Provide it only when the source credentials require a session token.": "Provide it only when the source credentials require a session token.",
+ "Provider": "Provider",
+ "Pull queue capacity": "Pull queue capacity",
+ "Pull queue capacity must be a whole number from 1 to 65536.": "Pull queue capacity must be a whole number from 1 to 65536.",
+ "Pulled": "Pulled",
+ "Queue depth": "Queue depth",
+ "Range GET requests": "Range GET requests",
+ "Re-enter the Azure credential to test or save changes.": "Re-enter the Azure credential to test or save changes.",
+ "Re-enter the secret key to test or save changes.": "Re-enter the secret key to test or save changes.",
+ "Re-enter the service account JSON to test or save changes.": "Re-enter the service account JSON to test or save changes.",
+ "Read behavior": "Read behavior",
+ "Read from source on a miss": "Read from source on a miss",
+ "Region is required.": "Region is required.",
+ "Requires admin:SetBucketOnDemandMigration": "Requires admin:SetBucketOnDemandMigration",
+ "Requires source tag-read permission and adds one request per pull.": "Requires source tag-read permission and adds one request per pull.",
+ "Respect local delete markers": "Respect local delete markers",
+ "Return Not Found": "Return Not Found",
+ "Return SourceUnavailable": "Return SourceUnavailable",
+ "Returning Not Found can make sync clients treat a temporary source failure as a deletion.": "Returning Not Found can make sync clients treat a temporary source failure as a deletion.",
+ "Runtime status": "Runtime status",
+ "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.": "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.",
+ "RustFS reached the source bucket and listed it successfully.": "RustFS reached the source bucket and listed it successfully.",
+ "RustFS reads from this source and never writes or deletes objects there.": "RustFS reads from this source and never writes or deletes objects there.",
+ "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.": "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.",
+ "S3-compatible storage": "S3-compatible storage",
+ "SAS token": "SAS token",
+ "SAS token must omit the leading question mark and whitespace.": "SAS token must omit the leading question mark and whitespace.",
+ "Sample object": "Sample object",
+ "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.": "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.",
+ "Saving": "Saving",
+ "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.": "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.",
+ "Scan the source and pull objects that have not been requested yet.": "Scan the source and pull objects that have not been requested yet.",
+ "Send normal bucket notifications when a pulled object is stored locally.": "Send normal bucket notifications when a pulled object is stored locally.",
+ "Serve missing objects from an external source while migrating them into RustFS.": "Serve missing objects from an external source while migrating them into RustFS.",
+ "Serve range and queue the full object": "Serve range and queue the full object",
+ "Serve range only": "Serve range only",
+ "Server module disabled": "Server module disabled",
+ "Service-account JSON key": "Service-account JSON key",
+ "Session token (optional)": "Session token (optional)",
+ "Skip TLS certificate verification": "Skip TLS certificate verification",
+ "Skipped existing": "Skipped existing",
+ "Source bucket is required.": "Source bucket is required.",
+ "Source bucket must not contain slashes or whitespace.": "Source bucket must not contain slashes or whitespace.",
+ "Source circuit open": "Source circuit open",
+ "Source connection": "Source connection",
+ "Source container": "Source container",
+ "Source error response": "Source error response",
+ "Source listing prefix (optional)": "Source listing prefix (optional)",
+ "Source prefix": "Source prefix",
+ "Source prefix (optional)": "Source prefix (optional)",
+ "Source-hit ratio": "Source-hit ratio",
+ "Start a job when you are ready to migrate the remaining source objects.": "Start a job when you are ready to migrate the remaining source objects.",
+ "Start backfill": "Start backfill",
+ "Start background backfill": "Start background backfill",
+ "Start dry run": "Start dry run",
+ "TLS": "TLS",
+ "Test connection": "Test connection",
+ "Testing connection": "Testing connection",
+ "The endpoint must not contain a path, query, or fragment.": "The endpoint must not contain a path, query, or fragment.",
+ "The endpoint must not contain credentials.": "The endpoint must not contain credentials.",
+ "The existing source that RustFS will read from.": "The existing source that RustFS will read from.",
+ "The secret is stored by RustFS but never returned to the Console.": "The secret is stored by RustFS but never returned to the Console.",
+ "The server rejected this operation": "The server rejected this operation",
+ "The source bucket is empty or the selected prefix has no objects.": "The source bucket is empty or the selected prefix has no objects.",
+ "The source could not be reached": "The source could not be reached",
+ "The source is still being scanned, so no completion percentage is shown.": "The source is still being scanned, so no completion percentage is shown.",
+ "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.": "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.",
+ "This backend is not included in the server build": "This backend is not included in the server build",
+ "This provider requires a real region; auto is not supported.": "This provider requires a real region; auto is not supported.",
+ "Turn off to keep the saved configuration without consulting the source.": "Turn off to keep the saved configuration without consulting the source.",
+ "Unable to load on-demand migration": "Unable to load on-demand migration",
+ "Unable to load this setting": "Unable to load this setting",
+ "Unavailable when the server has no bucket GET total.": "Unavailable when the server has no bucket GET total.",
+ "Updated": "Updated",
+ "Upgrade RustFS to a version that provides the on-demand migration admin API.": "Upgrade RustFS to a version that provides the on-demand migration admin API.",
+ "Use a read-only key scoped to the source bucket.": "Use a read-only key scoped to the source bucket.",
+ "Use a service account with storage.objects.get and storage.objects.list.": "Use a service account with storage.objects.get and storage.objects.list.",
+ "Use a valid service-account JSON key with client_email and private_key.": "Use a valid service-account JSON key with client_email and private_key.",
+ "Use an absolute HTTP or HTTPS URL with no path.": "Use an absolute HTTP or HTTPS URL with no path.",
+ "Use an explicit style when the source redirects or reports a missing bucket.": "Use an explicit style when the source redirects or reports a missing bucket.",
+ "Use only in a trusted test environment. Prefer a custom CA certificate.": "Use only in a trusted test environment. Prefer a custom CA certificate.",
+ "Use provider default": "Use provider default",
+ "Used to derive the public endpoint when no custom endpoint is set.": "Used to derive the public endpoint when no custom endpoint is set.",
+ "Uses the S3 interoperability API and an HMAC key pair.": "Uses the S3 interoperability API and an HMAC key pair.",
+ "Uses the native Azure Blob API.": "Uses the native Azure Blob API.",
+ "Uses the native GCS API and a service-account JSON key.": "Uses the native GCS API and a service-account JSON key.",
+ "View backfill": "View backfill",
+ "Virtual-host style": "Virtual-host style",
+ "You do not have permission to change migration settings": "You do not have permission to change migration settings",
+ "You do not have permission to control backfill": "You do not have permission to control backfill",
+ "You do not have permission to view this bucket's migration settings.": "You do not have permission to view this bucket's migration settings.",
+ "Your migration configuration changes will be lost.": "Your migration configuration changes will be lost.",
+ "pull failures": "pull failures"
}
diff --git a/i18n/locales/zh-CN.json b/i18n/locales/zh-CN.json
index 4722cb4d..7040f64e 100644
--- a/i18n/locales/zh-CN.json
+++ b/i18n/locales/zh-CN.json
@@ -1966,5 +1966,255 @@
"The destination was copied, but source deletion could not be confirmed. Check both locations before retrying.": "对象已复制到目标位置,但无法确认源对象是否已删除。请检查源位置和目标位置后再重试。",
"The source changed or the destination already exists. Refresh and choose a different destination.": "源对象已发生变化,或目标对象已存在。请刷新后选择其他目标位置。",
"Show key": "显示密钥",
- "Hide key": "隐藏密钥"
+ "Hide key": "隐藏密钥",
+ "0 disables the cache; maximum 3600.": "0 表示禁用缓存;最大值为 3600。",
+ "0–268435456 bytes (256 MiB). Larger objects are served first and queued for background pull.": "范围为 0–268435456 字节(256 MiB)。更大的对象会先响应请求,再排队进行后台拉取。",
+ "100–600000 ms between source body chunks.": "源响应正文数据块之间的超时范围为 100–600000 毫秒。",
+ "100–600000 ms.": "范围为 100–600000 毫秒。",
+ "1–256 across inline, background, and backfill work.": "内联、后台和回填任务合计可设置为 1–256。",
+ "1–65536 waiting background pulls.": "等待中的后台拉取任务数可设置为 1–65536。",
+ "5242880–5368709120 bytes (5 MiB–5 GiB).": "范围为 5242880–5368709120 字节(5 MiB–5 GiB)。",
+ "A backfill job is already running": "已有回填任务正在运行",
+ "A local versioned delete marker prevents the object from being pulled again.": "本地版本化删除标记会阻止再次拉取该对象。",
+ "AWS regions may contain only letters, numbers, and hyphens.": "AWS 区域只能包含字母、数字和连字符。",
+ "Access key is required.": "访问密钥为必填项。",
+ "Account key": "账户密钥",
+ "Addressing style": "寻址方式",
+ "Adds source requests to listings so clients can see objects not yet migrated.": "将源端对象合并到列表中,使客户端可以看到尚未迁移的对象。",
+ "All keys": "所有对象键",
+ "Always skip": "始终跳过",
+ "Amazon S3": "Amazon S3",
+ "Any current local object is skipped.": "只要对象已存在于本地,就会跳过。",
+ "Automatic": "自动",
+ "Azure Blob Storage (Native)": "Azure Blob 存储(原生)",
+ "Azure account key must be valid Base64.": "Azure 账户密钥必须是有效的 Base64。",
+ "Azure account may contain only letters, numbers, and hyphens.": "Azure 存储账户只能包含字母、数字和连字符。",
+ "Azure credential type": "Azure 凭据类型",
+ "Azure storage account": "Azure 存储账户",
+ "Azure storage account is required.": "Azure 存储账户为必填项。",
+ "Backfill cancellation requested": "已请求取消回填任务",
+ "Backfill cancelled": "回填已取消",
+ "Backfill cannot start until the module is enabled on every server node.": "必须在所有服务器节点上启用该模块后才能开始回填。",
+ "Backfill completed": "回填已完成",
+ "Backfill completed with failures": "回填已完成,但有失败项",
+ "Backfill dry run started": "回填试运行已开始",
+ "Backfill failed": "回填失败",
+ "Backfill in progress": "回填进行中",
+ "Backfill operation failed": "回填操作失败",
+ "Backfill paused": "回填已暂停",
+ "Backfill pending": "回填等待中",
+ "Backfill running": "回填运行中",
+ "Backfill started": "回填已开始",
+ "Background backfill": "后台回填",
+ "Bandwidth limit (bytes/s, optional)": "带宽限制(字节/秒,可选)",
+ "Bandwidth limit must be a whole number of at least 65536 bytes/s.": "带宽限制必须是至少 65536 字节/秒的整数。",
+ "Breaker closed": "熔断器已关闭",
+ "Breaker half-open": "熔断器半开",
+ "Breaker open": "熔断器已打开",
+ "CA certificate (PEM, optional)": "CA 证书(PEM,可选)",
+ "CA certificate must be PEM encoded.": "CA 证书必须使用 PEM 编码。",
+ "Cancel backfill": "取消回填",
+ "Cancel the running backfill?": "取消正在运行的回填任务?",
+ "Cancelling": "正在取消",
+ "Circuit breaker": "熔断器",
+ "Compare source ETag and size": "比较源端 ETag 和大小",
+ "Concurrent pulls": "并发拉取数",
+ "Concurrent pulls must be a whole number from 1 to 256.": "并发拉取数必须是 1 到 256 之间的整数。",
+ "Configuration changed on the server. Refresh and review it before disabling migration.": "服务器上的配置已发生变化。请刷新并检查后再禁用迁移。",
+ "Connect an existing AWS S3, S3-compatible, Azure Blob, or Google Cloud Storage bucket.": "连接现有的 AWS S3、S3 兼容、Azure Blob 或 Google Cloud Storage 存储桶。",
+ "Connect this bucket to an external source without interrupting reads.": "在不中断读取的情况下,将此存储桶连接到外部源端。",
+ "Connect timeout (ms)": "连接超时(毫秒)",
+ "Connect timeout must be a whole number from 100 to 600000.": "连接超时必须是 100 到 600000 之间的整数。",
+ "Connection test passed": "连接测试通过",
+ "Copy object tags": "复制对象标签",
+ "Create a bucket before configuring an external migration source.": "请先创建存储桶,再配置外部迁移源。",
+ "Credentials are write-only": "凭据只写",
+ "Custom endpoint (optional)": "自定义端点(可选)",
+ "Data": "数据量",
+ "Disable": "禁用",
+ "Disable migration": "禁用迁移",
+ "Disable on-demand migration?": "禁用按需迁移?",
+ "Disabling": "正在禁用",
+ "Discard changes": "放弃更改",
+ "Discard unsaved changes?": "放弃未保存的更改?",
+ "Edit on-demand migration": "编辑按需迁移",
+ "Editing cancels the active backfill": "编辑配置会取消当前回填任务",
+ "Emit object-created events": "发送对象创建事件",
+ "Enable RUSTFS_ON_DEMAND_MIGRATION_ENABLED on every server node, restart, and try again.": "请在每个服务器节点上启用 RUSTFS_ON_DEMAND_MIGRATION_ENABLED,重启后再试。",
+ "Enable migration": "启用迁移",
+ "Enable on-demand migration": "启用按需迁移",
+ "Endpoint host": "端点主机",
+ "Endpoint is required for this provider.": "此提供商必须填写端点。",
+ "Enter a real region or auto.": "请输入实际区域或 auto。",
+ "Enter an absolute HTTP or HTTPS endpoint.": "请输入绝对 HTTP 或 HTTPS 端点。",
+ "Enter the Base64 storage account key.": "请输入 Base64 编码的存储账户密钥。",
+ "Enter the SAS query string without a leading question mark.": "请输入不带开头问号的 SAS 查询字符串。",
+ "Existing local objects": "已存在的本地对象",
+ "Failed objects": "失败对象数",
+ "First-byte timeout (ms)": "首字节超时(毫秒)",
+ "First-byte timeout must be a whole number from 100 to 600000.": "首字节超时必须是 100 到 600000 之间的整数。",
+ "For security, re-enter the source credential before testing or saving any change.": "为确保安全,测试连接或保存任何更改前,请重新输入源端凭据。",
+ "Google Cloud Storage (HMAC)": "Google Cloud Storage(HMAC)",
+ "Google Cloud Storage (Native)": "Google Cloud Storage(原生)",
+ "HEAD requests": "HEAD 请求",
+ "Idle timeout (ms)": "空闲超时(毫秒)",
+ "Idle timeout must be a whole number from 100 to 600000.": "空闲超时必须是 100 到 600000 之间的整数。",
+ "In-flight pulls": "正在拉取",
+ "Include source objects in ListObjectsV2": "在 ListObjectsV2 中包含源端对象",
+ "Inline object limit (bytes)": "内联对象上限(字节)",
+ "Inline object limit must be a whole number from 0 to 268435456.": "内联对象上限必须是 0 到 268435456 之间的整数。",
+ "Keep editing": "继续编辑",
+ "Keep running": "继续运行",
+ "Keep the source ETag unless local bucket encryption replaces it.": "保留源端 ETag;本地存储桶加密导致 ETag 变化时除外。",
+ "Key mapping": "对象键映射",
+ "Last backfill error": "最近一次回填错误",
+ "Last source error": "最近一次源端错误",
+ "Latest job": "最近任务",
+ "Leave empty for unlimited; the server minimum is 65536 bytes/s.": "留空表示不限速;服务器允许的最小值为 65536 字节/秒。",
+ "Leave empty to scan the complete configured source namespace.": "留空以扫描已配置源端的完整命名空间。",
+ "Leave empty to use https://storage.googleapis.com.": "留空以使用 https://storage.googleapis.com。",
+ "Leave empty to use the account's public Azure Blob endpoint.": "留空以使用该账户的公共 Azure Blob 端点。",
+ "Leave empty to use the regional Amazon S3 endpoint.": "留空以使用对应区域的 Amazon S3 端点。",
+ "Lifetime on this node": "当前节点累计值",
+ "List matching objects without queueing or writing any object.": "仅列出匹配对象,不排队也不写入任何对象。",
+ "Listed": "已列出",
+ "Live counters from the RustFS node that answered this request.": "显示响应此请求的 RustFS 节点上的实时计数。",
+ "Loading on-demand migration settings": "正在加载按需迁移设置",
+ "Local only": "仅本地",
+ "Local prefix": "本地前缀",
+ "Local prefix (optional)": "本地前缀(可选)",
+ "Manage migration": "管理迁移",
+ "Migrated data": "已迁移数据",
+ "Migrated objects": "已迁移对象",
+ "Migration active": "迁移运行中",
+ "Migration configuration could not be saved": "无法保存迁移配置",
+ "Migration configuration updated": "迁移配置已更新",
+ "Migration not configured": "未配置迁移",
+ "Migration paused": "迁移已暂停",
+ "Missing local objects are served from this source and then stored locally.": "本地缺失的对象会从此源端返回,并随后存储到本地。",
+ "Multipart part size (bytes)": "分片大小(字节)",
+ "Multipart part size must be a whole number from 5242880 to 5368709120.": "分片大小必须是 5242880 到 5368709120 之间的整数。",
+ "Native GCS has no object tags, so no tags will be copied.": "原生 GCS 不提供对象标签,因此不会复制标签。",
+ "Negative cache TTL (seconds)": "否定缓存 TTL(秒)",
+ "Negative cache TTL must be a whole number from 0 to 3600.": "否定缓存 TTL 必须是 0 到 3600 之间的整数。",
+ "No added prefix": "未添加前缀",
+ "No backfill yet": "尚无回填任务",
+ "No background backfill has been started for this bucket.": "此存储桶尚未启动后台回填。",
+ "No live runtime state on this node": "当前节点没有实时运行状态",
+ "No migration source configured": "未配置迁移源",
+ "No recorded pull failures": "没有拉取失败记录",
+ "No runtime state": "无运行状态",
+ "No source error recorded": "没有源端错误记录",
+ "Objects already migrated remain in the local bucket. You can start a new job later.": "已迁移的对象会保留在本地存储桶中。之后可以启动新任务。",
+ "Objects listed": "已列出对象",
+ "Objects pulled": "已拉取对象",
+ "Objects whose recorded source ETag and size differ are pulled again.": "记录的源端 ETag 或大小不一致的对象会被重新拉取。",
+ "On-demand migration": "按需迁移",
+ "On-demand migration disabled": "按需迁移已禁用",
+ "On-demand migration enabled": "按需迁移已启用",
+ "On-demand migration is not available on this server": "此服务器不支持按需迁移",
+ "On-demand migration is not enabled on this server": "此服务器未启用按需迁移",
+ "On-demand migration is unavailable": "按需迁移不可用",
+ "Only local keys with this prefix will consult the source.": "只有带此前缀的本地对象键才会查询源端。",
+ "Open license settings": "打开许可证设置",
+ "Open migration settings": "打开迁移设置",
+ "Paste the issuing certificate when the source uses a private CA.": "源端使用私有 CA 时,请粘贴签发证书。",
+ "Path style": "路径样式",
+ "Performance and limits": "性能与限制",
+ "Plan a read-only source cutover": "规划只读源切换",
+ "Prepended to the local key when RustFS reads the source.": "RustFS 读取源端时,会将此前缀添加到本地对象键之前。",
+ "Preserve source ETag": "保留源端 ETag",
+ "Provide it only when the source credentials require a session token.": "仅当源端凭据需要会话令牌时填写。",
+ "Provider": "提供商",
+ "Pull queue capacity": "拉取队列容量",
+ "Pull queue capacity must be a whole number from 1 to 65536.": "拉取队列容量必须是 1 到 65536 之间的整数。",
+ "Pulled": "已拉取",
+ "Queue depth": "队列深度",
+ "Range GET requests": "范围 GET 请求",
+ "Re-enter the Azure credential to test or save changes.": "请重新输入 Azure 凭据以测试或保存更改。",
+ "Re-enter the secret key to test or save changes.": "请重新输入秘密密钥以测试或保存更改。",
+ "Re-enter the service account JSON to test or save changes.": "请重新输入服务账号 JSON 以测试或保存更改。",
+ "Read behavior": "读取行为",
+ "Read from source on a miss": "本地缺失时从源端读取",
+ "Region is required.": "区域为必填项。",
+ "Requires admin:SetBucketOnDemandMigration": "需要 admin:SetBucketOnDemandMigration 权限",
+ "Requires source tag-read permission and adds one request per pull.": "需要源端标签读取权限,并且每次拉取会增加一个请求。",
+ "Respect local delete markers": "遵循本地删除标记",
+ "Return Not Found": "返回 Not Found",
+ "Return SourceUnavailable": "返回 SourceUnavailable",
+ "Returning Not Found can make sync clients treat a temporary source failure as a deletion.": "返回 Not Found 可能导致同步客户端将源端临时故障视为对象已删除。",
+ "Runtime status": "运行状态",
+ "RustFS pulls objects only when they are read or backfilled. New PUT and DELETE operations in RustFS are not synchronized to the source, and later source changes do not update local copies.": "RustFS 只在对象被读取或回填时拉取它们。RustFS 中新的 PUT 和 DELETE 操作不会同步到源端,源端后续的更改也不会更新本地副本。",
+ "RustFS reached the source bucket and listed it successfully.": "RustFS 已连接源端存储桶并成功列出对象。",
+ "RustFS reads from this source and never writes or deletes objects there.": "RustFS 只从此源端读取,绝不会在源端写入或删除对象。",
+ "RustFS will stop consulting the source. Already migrated objects remain local, an active backfill is cancelled, and missing local objects return Not Found.": "RustFS 将停止查询源端。已迁移对象会保留在本地,当前回填任务会被取消,本地缺失的对象将返回 Not Found。",
+ "S3-compatible storage": "S3 兼容存储",
+ "SAS token": "SAS 令牌",
+ "SAS token must omit the leading question mark and whitespace.": "SAS 令牌不能包含开头的问号或任何空白字符。",
+ "Sample object": "示例对象",
+ "Saved settings remain visible, but reads and new backfills are inactive until the module is enabled on every node.": "已保存的设置仍然可见,但在所有节点启用该模块之前,源端读取和新回填任务均不会运行。",
+ "Saving": "正在保存",
+ "Saving a replacement configuration cancels the current job. You can start a new backfill afterward.": "保存替换配置会取消当前任务。之后可以启动新的回填任务。",
+ "Scan the source and pull objects that have not been requested yet.": "扫描源端并拉取尚未被请求的对象。",
+ "Send normal bucket notifications when a pulled object is stored locally.": "拉取的对象存储到本地时,发送常规存储桶通知。",
+ "Serve missing objects from an external source while migrating them into RustFS.": "从外部源端提供缺失对象,并同时将它们迁移到 RustFS。",
+ "Serve range and queue the full object": "返回范围数据并排队拉取完整对象",
+ "Serve range only": "仅返回范围数据",
+ "Server module disabled": "服务器模块已禁用",
+ "Service-account JSON key": "服务账号 JSON 密钥",
+ "Session token (optional)": "会话令牌(可选)",
+ "Skip TLS certificate verification": "跳过 TLS 证书验证",
+ "Skipped existing": "已跳过现有对象",
+ "Source bucket is required.": "源端存储桶为必填项。",
+ "Source bucket must not contain slashes or whitespace.": "源端存储桶不能包含斜杠或空白字符。",
+ "Source circuit open": "源端熔断器已打开",
+ "Source connection": "源端连接",
+ "Source container": "源端容器",
+ "Source error response": "源端错误响应",
+ "Source listing prefix (optional)": "源端列举前缀(可选)",
+ "Source prefix": "源端前缀",
+ "Source prefix (optional)": "源端前缀(可选)",
+ "Source-hit ratio": "源端命中率",
+ "Start a job when you are ready to migrate the remaining source objects.": "准备迁移源端剩余对象时,请启动回填任务。",
+ "Start backfill": "开始回填",
+ "Start background backfill": "开始后台回填",
+ "Start dry run": "开始试运行",
+ "TLS": "TLS",
+ "Test connection": "测试连接",
+ "Testing connection": "正在测试连接",
+ "The endpoint must not contain a path, query, or fragment.": "端点不能包含路径、查询参数或片段。",
+ "The endpoint must not contain credentials.": "端点不能包含凭据。",
+ "The existing source that RustFS will read from.": "RustFS 将从这个现有源端读取数据。",
+ "The secret is stored by RustFS but never returned to the Console.": "秘密密钥由 RustFS 存储,但永远不会返回给控制台。",
+ "The server rejected this operation": "服务器拒绝了此操作",
+ "The source bucket is empty or the selected prefix has no objects.": "源端存储桶为空,或所选前缀下没有对象。",
+ "The source could not be reached": "无法连接源端",
+ "The source is still being scanned, so no completion percentage is shown.": "源端仍在扫描中,因此不显示完成百分比。",
+ "The source scan is active. Totals are not known until listing finishes, so progress is shown as counters.": "源端扫描正在进行。列举完成前无法确定总数,因此进度以计数器显示。",
+ "This backend is not included in the server build": "服务器构建中未包含此后端",
+ "This provider requires a real region; auto is not supported.": "此提供商需要实际区域,不支持 auto。",
+ "Turn off to keep the saved configuration without consulting the source.": "关闭后保留已保存的配置,但不再查询源端。",
+ "Unable to load on-demand migration": "无法加载按需迁移",
+ "Unable to load this setting": "无法加载此设置",
+ "Unavailable when the server has no bucket GET total.": "服务器没有存储桶 GET 总数时不可用。",
+ "Updated": "更新时间",
+ "Upgrade RustFS to a version that provides the on-demand migration admin API.": "请将 RustFS 升级到提供按需迁移管理 API 的版本。",
+ "Use a read-only key scoped to the source bucket.": "请使用权限范围仅限源端存储桶的只读密钥。",
+ "Use a service account with storage.objects.get and storage.objects.list.": "请使用具有 storage.objects.get 和 storage.objects.list 权限的服务账号。",
+ "Use a valid service-account JSON key with client_email and private_key.": "请使用包含 client_email 和 private_key 的有效服务账号 JSON 密钥。",
+ "Use an absolute HTTP or HTTPS URL with no path.": "请使用不含路径的绝对 HTTP 或 HTTPS URL。",
+ "Use an explicit style when the source redirects or reports a missing bucket.": "当源端发生重定向或报告存储桶不存在时,请明确选择寻址方式。",
+ "Use only in a trusted test environment. Prefer a custom CA certificate.": "仅在可信的测试环境中使用。应优先配置自定义 CA 证书。",
+ "Use provider default": "使用提供商默认值",
+ "Used to derive the public endpoint when no custom endpoint is set.": "未设置自定义端点时,用于派生公共端点。",
+ "Uses the S3 interoperability API and an HMAC key pair.": "使用 S3 互操作 API 和 HMAC 密钥对。",
+ "Uses the native Azure Blob API.": "使用原生 Azure Blob API。",
+ "Uses the native GCS API and a service-account JSON key.": "使用原生 GCS API 和服务账号 JSON 密钥。",
+ "View backfill": "查看回填",
+ "Virtual-host style": "虚拟主机样式",
+ "You do not have permission to change migration settings": "你没有更改迁移设置的权限",
+ "You do not have permission to control backfill": "你没有控制回填任务的权限",
+ "You do not have permission to view this bucket's migration settings.": "你没有查看此存储桶迁移设置的权限。",
+ "Your migration configuration changes will be lost.": "对迁移配置的更改将会丢失。",
+ "pull failures": "次拉取失败"
}
diff --git a/lib/api-client.ts b/lib/api-client.ts
index d80fac2a..db3bd54d 100644
--- a/lib/api-client.ts
+++ b/lib/api-client.ts
@@ -1,7 +1,7 @@
import { joinURL } from "ufo"
import type { IApiErrorHandler } from "@/types/api"
import { redactRequestOptionsForLog } from "./api-request-log"
-import { parseApiError } from "./error-handler"
+import { parseApiErrorDetails } from "./error-handler"
import { logger } from "./logger"
type ApiRequestInit = RequestInit & { body?: BodyInit | null; aws?: Record }
@@ -30,9 +30,16 @@ interface RequestOptions {
signal?: AbortSignal
}
-async function createHttpError(response: Response) {
- const error = new Error(await parseApiError(response)) as Error & { status: number }
+interface HttpError extends Error {
+ status: number
+ code?: string
+}
+
+async function createHttpError(response: Response): Promise {
+ const details = await parseApiErrorDetails(response)
+ const error = new Error(details.message) as HttpError
error.status = response.status
+ error.code = details.code
return error
}
diff --git a/lib/api-request-log.ts b/lib/api-request-log.ts
index b6f36923..2696822f 100644
--- a/lib/api-request-log.ts
+++ b/lib/api-request-log.ts
@@ -1,5 +1,5 @@
const SENSITIVE_LOG_KEY =
- /(?:token|secret|password|authorization|cookie|credential|creds|api[_-]?key|master[_-]?key|private[_-]?key)/i
+ /(?:token|secret|password|authorization|cookie|credential|creds|api[_-]?key|master[_-]?key|private[_-]?key|account[_-]?key|service[_-]?account[_-]?json)/i
function redactLogValue(value: unknown, key?: string): unknown {
if (key && SENSITIVE_LOG_KEY.test(key)) return "[REDACTED]"
diff --git a/lib/console-permissions.ts b/lib/console-permissions.ts
index f39e4bd0..24b1b13f 100644
--- a/lib/console-permissions.ts
+++ b/lib/console-permissions.ts
@@ -27,6 +27,7 @@ export const CONSOLE_SCOPES = {
export const PAGE_PERMISSIONS: Record = {
"/browser": [CONSOLE_SCOPES.VIEW_BROWSER],
"/buckets": [CONSOLE_SCOPES.VIEW_BROWSER],
+ "/on-demand-migration": [CONSOLE_SCOPES.VIEW_BROWSER],
"/table-catalog": [CONSOLE_SCOPES.VIEW_TABLE_CATALOG],
"/access-keys": [CONSOLE_SCOPES.VIEW_ACCESS_KEYS],
"/policies": [CONSOLE_SCOPES.VIEW_POLICIES],
diff --git a/lib/error-handler.ts b/lib/error-handler.ts
index dfc8eb1c..6cf8fd87 100644
--- a/lib/error-handler.ts
+++ b/lib/error-handler.ts
@@ -5,6 +5,11 @@ export interface ApiError {
originalError?: Error
}
+export interface ParsedApiError {
+ message: string
+ code?: string
+}
+
const GENERIC_ERROR_MESSAGES = new Set(["error", "unknown", "unknownerror"])
const normalizeErrorText = (value: unknown): string | null => {
@@ -167,26 +172,51 @@ export class ConfigLoadError extends Error {
}
}
-export const parseApiError = async (response: Response): Promise => {
+export const parseApiErrorDetails = async (response: Response): Promise => {
try {
- const errorData = await response.clone().json()
- return (errorData as { message?: string }).message || JSON.stringify(errorData) || response.statusText
+ const errorData = (await response.clone().json()) as {
+ code?: unknown
+ Code?: unknown
+ message?: unknown
+ Message?: unknown
+ error?: { code?: unknown; Code?: unknown; message?: unknown; Message?: unknown }
+ }
+ const code =
+ normalizeErrorText(errorData.code) ??
+ normalizeErrorText(errorData.Code) ??
+ normalizeErrorText(errorData.error?.code) ??
+ normalizeErrorText(errorData.error?.Code) ??
+ undefined
+ const message =
+ normalizeErrorText(errorData.message) ??
+ normalizeErrorText(errorData.Message) ??
+ normalizeErrorText(errorData.error?.message) ??
+ normalizeErrorText(errorData.error?.Message) ??
+ JSON.stringify(errorData) ??
+ response.statusText
+ return { message, code }
} catch {
try {
const text = await response.clone().text()
if (text) {
if (text.trim().startsWith("<")) {
- return getXmlErrorMessage(text) ?? text
+ return {
+ message: getXmlErrorMessage(text) ?? text,
+ code: getXmlErrorCode(text) ?? undefined,
+ }
}
- return text
+ return { message: text }
}
} catch {
// keep statusText
}
}
- return response.statusText
+ return { message: response.statusText }
}
+export const parseApiError = async (response: Response): Promise =>
+ (await parseApiErrorDetails(response)).message
+
export const handleConfigError = (error: unknown, context: string): ConfigLoadError => {
if (error instanceof ConfigLoadError) {
return error
diff --git a/lib/module-bucket-route.ts b/lib/module-bucket-route.ts
index a522d60e..3110ca71 100644
--- a/lib/module-bucket-route.ts
+++ b/lib/module-bucket-route.ts
@@ -1,4 +1,4 @@
-export type BucketModuleRoute = "/events" | "/lifecycle" | "/replication"
+export type BucketModuleRoute = "/events" | "/lifecycle" | "/replication" | "/on-demand-migration"
export function buildModuleBucketPath(route: BucketModuleRoute, bucketName: string): string {
if (!bucketName) return route
diff --git a/lib/on-demand-migration.ts b/lib/on-demand-migration.ts
new file mode 100644
index 00000000..52ee6900
--- /dev/null
+++ b/lib/on-demand-migration.ts
@@ -0,0 +1,398 @@
+import type {
+ OnDemandMigrationConfig,
+ OnDemandMigrationFormField,
+ OnDemandMigrationFormValues,
+ OnDemandMigrationProvider,
+} from "@/types/on-demand-migration"
+
+export const ODM_REDACTED_SECRET = "REDACTED"
+export const ODM_MIB = 1024 * 1024
+
+export const ON_DEMAND_MIGRATION_PROVIDERS: OnDemandMigrationProvider[] = [
+ "aws",
+ "s3",
+ "minio",
+ "rustfs",
+ "r2",
+ "gcs",
+ "azure",
+ "gcs_native",
+]
+
+export const ODM_NATIVE_PROVIDERS = new Set(["azure", "gcs_native"])
+export const ODM_AUTO_REGION_PROVIDERS = new Set([
+ "minio",
+ "rustfs",
+ "r2",
+ "azure",
+ "gcs_native",
+])
+export const ODM_OPTIONAL_ENDPOINT_PROVIDERS = new Set(["aws", "azure", "gcs_native"])
+
+export const ODM_DEFAULT_POLICY: OnDemandMigrationConfig["policy"] = {
+ head: "proxy",
+ range_get: "serve_and_backfill",
+ source_error: "propagate",
+ list_through: false,
+ respect_local_delete_marker: true,
+ preserve_etag: true,
+ copy_tags: false,
+ emit_events: true,
+ negative_cache_ttl_secs: 30,
+ inline_max_bytes: 16 * ODM_MIB,
+ multipart_part_size_bytes: 64 * ODM_MIB,
+ max_concurrent_pulls: 8,
+ pull_queue_capacity: 1024,
+ source_timeout: {
+ connect_ms: 5000,
+ first_byte_ms: 15000,
+ idle_ms: 30000,
+ },
+ bandwidth_limit_bytes_per_sec: null,
+}
+
+export function createOnDemandMigrationFormValues(config?: OnDemandMigrationConfig): OnDemandMigrationFormValues {
+ const provider = config?.source.provider ?? "aws"
+ const nativeProvider = ODM_NATIVE_PROVIDERS.has(provider)
+ const azureUsesSas = config?.source.azure?.sas_token !== null && config?.source.azure?.sas_token !== undefined
+ const policy = config?.policy ?? ODM_DEFAULT_POLICY
+
+ return {
+ enabled: config?.enabled ?? true,
+ provider,
+ endpoint: config?.source.endpoint ?? "",
+ region: nativeProvider
+ ? "auto"
+ : (config?.source.region ?? (ODM_AUTO_REGION_PROVIDERS.has(provider) ? "auto" : "us-east-1")),
+ bucket: config?.source.bucket ?? "",
+ pathStyle: nativeProvider ? "auto" : (config?.source.path_style ?? "auto"),
+ accessKey: config?.source.credentials?.access_key ?? "",
+ secretKey: "",
+ sessionToken: "",
+ azureAccount: config?.source.azure?.account ?? "",
+ azureAuth: azureUsesSas ? "sas_token" : "account_key",
+ azureSecret: "",
+ serviceAccountJson: "",
+ localPrefix: config?.filter.prefix ?? "",
+ sourcePrefix: config?.filter.source_prefix ?? "",
+ skipTlsVerify: config?.source.tls.skip_verify ?? false,
+ caCertPem: config?.source.tls.ca_cert_pem ?? "",
+ head: policy.head,
+ rangeGet: policy.range_get,
+ sourceError: policy.source_error,
+ listThrough: policy.list_through,
+ respectLocalDeleteMarker: policy.respect_local_delete_marker,
+ preserveEtag: policy.preserve_etag,
+ copyTags: policy.copy_tags,
+ emitEvents: policy.emit_events,
+ negativeCacheTtlSecs: String(policy.negative_cache_ttl_secs),
+ inlineMaxBytes: String(policy.inline_max_bytes),
+ multipartPartSizeBytes: String(policy.multipart_part_size_bytes),
+ maxConcurrentPulls: String(policy.max_concurrent_pulls),
+ pullQueueCapacity: String(policy.pull_queue_capacity),
+ connectTimeoutMs: String(policy.source_timeout.connect_ms),
+ firstByteTimeoutMs: String(policy.source_timeout.first_byte_ms),
+ idleTimeoutMs: String(policy.source_timeout.idle_ms),
+ bandwidthLimitBytesPerSec:
+ policy.bandwidth_limit_bytes_per_sec === null ? "" : String(policy.bandwidth_limit_bytes_per_sec),
+ }
+}
+
+const emptyOrValue = (value: string) => (value === "" ? null : value)
+
+function integer(value: string): number {
+ return Number(value)
+}
+
+export function buildOnDemandMigrationConfig(values: OnDemandMigrationFormValues): OnDemandMigrationConfig {
+ const nativeProvider = ODM_NATIVE_PROVIDERS.has(values.provider)
+ const source: OnDemandMigrationConfig["source"] = {
+ provider: values.provider,
+ endpoint: emptyOrValue(values.endpoint),
+ region: nativeProvider ? "auto" : values.region,
+ bucket: values.bucket,
+ path_style: nativeProvider ? "auto" : values.pathStyle,
+ credentials: nativeProvider
+ ? null
+ : {
+ access_key: values.accessKey,
+ secret_key: values.secretKey,
+ session_token: emptyOrValue(values.sessionToken),
+ },
+ tls: {
+ skip_verify: values.skipTlsVerify,
+ ca_cert_pem: emptyOrValue(values.caCertPem),
+ },
+ }
+
+ if (values.provider === "azure") {
+ source.azure = {
+ account: values.azureAccount,
+ account_key: values.azureAuth === "account_key" ? values.azureSecret : null,
+ sas_token: values.azureAuth === "sas_token" ? values.azureSecret : null,
+ }
+ }
+ if (values.provider === "gcs_native") {
+ source.gcs = { service_account_json: values.serviceAccountJson }
+ }
+
+ return {
+ version: 1,
+ enabled: values.enabled,
+ source,
+ filter: {
+ prefix: emptyOrValue(values.localPrefix),
+ source_prefix: emptyOrValue(values.sourcePrefix),
+ },
+ policy: {
+ head: values.head,
+ range_get: values.rangeGet,
+ source_error: values.sourceError,
+ list_through: values.listThrough,
+ respect_local_delete_marker: values.respectLocalDeleteMarker,
+ preserve_etag: values.preserveEtag,
+ copy_tags: values.copyTags,
+ emit_events: values.emitEvents,
+ negative_cache_ttl_secs: integer(values.negativeCacheTtlSecs),
+ inline_max_bytes: integer(values.inlineMaxBytes),
+ multipart_part_size_bytes: integer(values.multipartPartSizeBytes),
+ max_concurrent_pulls: integer(values.maxConcurrentPulls),
+ pull_queue_capacity: integer(values.pullQueueCapacity),
+ source_timeout: {
+ connect_ms: integer(values.connectTimeoutMs),
+ first_byte_ms: integer(values.firstByteTimeoutMs),
+ idle_ms: integer(values.idleTimeoutMs),
+ },
+ bandwidth_limit_bytes_per_sec:
+ values.bandwidthLimitBytesPerSec !== "" ? integer(values.bandwidthLimitBytesPerSec) : null,
+ },
+ }
+}
+
+export interface OnDemandMigrationValidationIssue {
+ field: OnDemandMigrationFormField
+ message: string
+}
+
+const numericRule = (
+ values: OnDemandMigrationFormValues,
+ field: OnDemandMigrationFormField,
+ min: number,
+ max: number,
+ label: string,
+): OnDemandMigrationValidationIssue | null => {
+ const rawValue = String(values[field])
+ const value = Number(rawValue)
+ if (rawValue === "" || !Number.isSafeInteger(value) || value < min || value > max) {
+ return { field, message: `${label} must be a whole number from ${min} to ${max}.` }
+ }
+ return null
+}
+
+function validateEndpoint(endpoint: string): string | null {
+ let url: URL
+ try {
+ url = new URL(endpoint)
+ } catch {
+ return "Enter an absolute HTTP or HTTPS endpoint."
+ }
+ if (url.protocol !== "http:" && url.protocol !== "https:") return "Enter an absolute HTTP or HTTPS endpoint."
+ if (url.username || url.password) return "The endpoint must not contain credentials."
+ if (url.pathname !== "/" || url.search || url.hash) return "The endpoint must not contain a path, query, or fragment."
+ return null
+}
+
+export function validateOnDemandMigrationForm(values: OnDemandMigrationFormValues): OnDemandMigrationValidationIssue[] {
+ const issues: OnDemandMigrationValidationIssue[] = []
+ const endpoint = values.endpoint
+
+ if (!endpoint && !ODM_OPTIONAL_ENDPOINT_PROVIDERS.has(values.provider)) {
+ issues.push({ field: "endpoint", message: "Endpoint is required for this provider." })
+ } else if (endpoint) {
+ const endpointError = validateEndpoint(endpoint)
+ if (endpointError) issues.push({ field: "endpoint", message: endpointError })
+ }
+
+ if (!ODM_NATIVE_PROVIDERS.has(values.provider)) {
+ const region = values.region
+ if (!region) issues.push({ field: "region", message: "Region is required." })
+ else if (region === "auto" && !ODM_AUTO_REGION_PROVIDERS.has(values.provider)) {
+ issues.push({ field: "region", message: "This provider requires a real region; auto is not supported." })
+ } else if (values.provider === "aws" && !endpoint && !/^[A-Za-z0-9-]+$/.test(region)) {
+ issues.push({ field: "region", message: "AWS regions may contain only letters, numbers, and hyphens." })
+ }
+ }
+
+ const bucket = values.bucket
+ if (!bucket) issues.push({ field: "bucket", message: "Source bucket is required." })
+ else if (bucket.includes("/") || /\s/.test(bucket)) {
+ issues.push({ field: "bucket", message: "Source bucket must not contain slashes or whitespace." })
+ }
+
+ if (values.provider === "azure") {
+ if (!values.azureAccount) {
+ issues.push({ field: "azureAccount", message: "Azure storage account is required." })
+ } else if (!/^[A-Za-z0-9-]+$/.test(values.azureAccount)) {
+ issues.push({ field: "azureAccount", message: "Azure account may contain only letters, numbers, and hyphens." })
+ }
+ if (!values.azureSecret) {
+ issues.push({ field: "azureSecret", message: "Re-enter the Azure credential to test or save changes." })
+ } else if (values.azureAuth === "account_key") {
+ try {
+ if (!/^[A-Za-z0-9+/]+={0,2}$/.test(values.azureSecret) || atob(values.azureSecret).length === 0) {
+ throw new Error("invalid")
+ }
+ } catch {
+ issues.push({ field: "azureSecret", message: "Azure account key must be valid Base64." })
+ }
+ } else if (values.azureSecret.startsWith("?") || /\s/.test(values.azureSecret)) {
+ issues.push({ field: "azureSecret", message: "SAS token must omit the leading question mark and whitespace." })
+ }
+ } else if (values.provider === "gcs_native") {
+ if (!values.serviceAccountJson) {
+ issues.push({
+ field: "serviceAccountJson",
+ message: "Re-enter the service account JSON to test or save changes.",
+ })
+ } else {
+ try {
+ const key = JSON.parse(values.serviceAccountJson) as Record
+ if (
+ key.type !== "service_account" ||
+ typeof key.client_email !== "string" ||
+ key.client_email.length === 0 ||
+ typeof key.private_key !== "string" ||
+ key.private_key.length === 0
+ ) {
+ throw new Error("invalid")
+ }
+ } catch {
+ issues.push({
+ field: "serviceAccountJson",
+ message: "Use a valid service-account JSON key with client_email and private_key.",
+ })
+ }
+ }
+ } else {
+ if (!values.accessKey) issues.push({ field: "accessKey", message: "Access key is required." })
+ if (!values.secretKey) {
+ issues.push({ field: "secretKey", message: "Re-enter the secret key to test or save changes." })
+ }
+ }
+
+ if (values.caCertPem && !values.caCertPem.includes("-----BEGIN CERTIFICATE-----")) {
+ issues.push({ field: "caCertPem", message: "CA certificate must be PEM encoded." })
+ }
+
+ const rules: Array<[OnDemandMigrationFormField, number, number, string]> = [
+ ["negativeCacheTtlSecs", 0, 3600, "Negative cache TTL"],
+ ["inlineMaxBytes", 0, 268435456, "Inline object limit"],
+ ["multipartPartSizeBytes", 5242880, 5368709120, "Multipart part size"],
+ ["maxConcurrentPulls", 1, 256, "Concurrent pulls"],
+ ["pullQueueCapacity", 1, 65536, "Pull queue capacity"],
+ ["connectTimeoutMs", 100, 600000, "Connect timeout"],
+ ["firstByteTimeoutMs", 100, 600000, "First-byte timeout"],
+ ["idleTimeoutMs", 100, 600000, "Idle timeout"],
+ ]
+ for (const [field, min, max, label] of rules) {
+ const issue = numericRule(values, field, min, max, label)
+ if (issue) issues.push(issue)
+ }
+
+ if (values.bandwidthLimitBytesPerSec !== "") {
+ const value = Number(values.bandwidthLimitBytesPerSec)
+ if (!Number.isSafeInteger(value) || value < 65536) {
+ issues.push({
+ field: "bandwidthLimitBytesPerSec",
+ message: "Bandwidth limit must be a whole number of at least 65536 bytes/s.",
+ })
+ }
+ }
+
+ return issues
+}
+
+const SERVER_FIELD_PATTERNS: Array<[RegExp, OnDemandMigrationFormField]> = [
+ [/source endpoint/i, "endpoint"],
+ [/source region/i, "region"],
+ [/source bucket/i, "bucket"],
+ [/credentials field access_key/i, "accessKey"],
+ [/credentials field secret_key/i, "secretKey"],
+ [/credentials field session_token/i, "sessionToken"],
+ [/source\.azure.*account_key|account_key/i, "azureSecret"],
+ [/source\.azure.*sas_token|sas_token/i, "azureSecret"],
+ [/source\.azure.*account|account contains|account must/i, "azureAccount"],
+ [/source\.gcs|service_account_json/i, "serviceAccountJson"],
+ [/ca_cert_pem/i, "caCertPem"],
+ [/filter\.prefix/i, "localPrefix"],
+ [/filter\.source_prefix/i, "sourcePrefix"],
+ [/negative_cache_ttl_secs/i, "negativeCacheTtlSecs"],
+ [/inline_max_bytes/i, "inlineMaxBytes"],
+ [/multipart_part_size_bytes/i, "multipartPartSizeBytes"],
+ [/max_concurrent_pulls/i, "maxConcurrentPulls"],
+ [/pull_queue_capacity/i, "pullQueueCapacity"],
+ [/source_timeout\.connect_ms/i, "connectTimeoutMs"],
+ [/source_timeout\.first_byte_ms/i, "firstByteTimeoutMs"],
+ [/source_timeout\.idle_ms/i, "idleTimeoutMs"],
+ [/bandwidth_limit_bytes_per_sec/i, "bandwidthLimitBytesPerSec"],
+]
+
+export function getOnDemandMigrationServerField(message: string): OnDemandMigrationFormField | null {
+ return SERVER_FIELD_PATTERNS.find(([pattern]) => pattern.test(message))?.[1] ?? null
+}
+
+export function isOnDemandMigrationBackfillActive(state?: string | null): boolean {
+ return state === "pending" || state === "running"
+}
+
+export function sumCounterValues(values?: Record | null): number {
+ return Object.values(values ?? {}).reduce((total, value) => total + value, 0)
+}
+
+export type OnDemandMigrationErrorKind =
+ | "configuration_missing"
+ | "backfill_missing"
+ | "module_disabled"
+ | "source_unreachable"
+ | "backend_not_compiled"
+ | "backfill_running"
+ | "invalid_argument"
+ | "license_denied"
+ | "access_denied"
+ | "unknown"
+
+interface ErrorLike {
+ status?: unknown
+ code?: unknown
+ message?: unknown
+}
+
+export function getOnDemandMigrationErrorKind(error: unknown): OnDemandMigrationErrorKind {
+ if (!error || typeof error !== "object") return "unknown"
+ const candidate = error as ErrorLike
+ const status = typeof candidate.status === "number" ? candidate.status : undefined
+ const code = typeof candidate.code === "string" ? candidate.code : ""
+ const message = typeof candidate.message === "string" ? candidate.message : ""
+
+ if (code === "NoSuchConfiguration") return "configuration_missing"
+ if (code === "NoSuchBackfillJob") return "backfill_missing"
+ if (code === "OnDemandMigrationDisabled") return "module_disabled"
+ if (code === "OnDemandMigrationSourceUnreachable") return "source_unreachable"
+ if (code === "OnDemandMigrationBackendNotCompiled") return "backend_not_compiled"
+ if (code === "OnDemandMigrationBackfillRunning" || status === 409) return "backfill_running"
+ if (code === "InvalidArgument" || status === 400) return "invalid_argument"
+ if (status === 403 && /licen[cs]e|entitlement/i.test(message)) return "license_denied"
+ if (code === "AccessDenied" || status === 403) return "access_denied"
+ return "unknown"
+}
+
+export function isOnDemandMigrationRouteMissing(error: unknown): boolean {
+ if (!error || typeof error !== "object") return false
+ const candidate = error as ErrorLike
+ return (
+ candidate.status === 404 &&
+ candidate.code !== "NoSuchConfiguration" &&
+ candidate.code !== "NoSuchBackfillJob" &&
+ candidate.code !== "NoSuchBucket"
+ )
+}
diff --git a/lib/permission-capabilities.ts b/lib/permission-capabilities.ts
index b4d39bda..251ffa6e 100644
--- a/lib/permission-capabilities.ts
+++ b/lib/permission-capabilities.ts
@@ -22,6 +22,8 @@ export type ConsoleCapability =
| "bucket.lifecycle.edit"
| "bucket.replication.edit"
| "bucket.events.edit"
+ | "bucket.onDemandMigration.view"
+ | "bucket.onDemandMigration.edit"
| "objects.upload"
| "objects.view"
| "objects.preview"
@@ -77,6 +79,8 @@ const CAPABILITY_REQUIREMENTS: Record {
+ const { ApiClient } = await loadApiClient()
+ const client = new ApiClient({
+ fetch: async () =>
+ new Response(
+ "NoSuchConfigurationon-demand migration is not configured",
+ { status: 404 },
+ ),
+ })
+
+ await assert.rejects(client.get("https://console.test/on-demand-migration/photos"), {
+ code: "NoSuchConfiguration",
+ message: "on-demand migration is not configured",
+ status: 404,
+ })
+})
diff --git a/tests/lib/error-handler.test.ts b/tests/lib/error-handler.test.ts
index 735e5936..d0e0e8f4 100644
--- a/tests/lib/error-handler.test.ts
+++ b/tests/lib/error-handler.test.ts
@@ -53,3 +53,16 @@ test("getXmlErrorMessage prefers detailed XML messages over generic error codes"
"Object is under COMPLIANCE retention and cannot be deleted until 2026-05-13T00:00:00Z",
)
})
+
+test("parseApiErrorDetails preserves RustFS XML error codes", async () => {
+ const { parseApiErrorDetails } = await loadErrorHandler()
+ const response = new Response(
+ "OnDemandMigrationSourceUnreachablesource bucket probe failed: timeout",
+ { status: 400, headers: { "content-type": "application/xml" } },
+ )
+
+ assert.deepEqual(await parseApiErrorDetails(response), {
+ code: "OnDemandMigrationSourceUnreachable",
+ message: "source bucket probe failed: timeout",
+ })
+})
diff --git a/tests/lib/module-bucket-route.test.js b/tests/lib/module-bucket-route.test.js
index c6ec3e7c..309367f5 100644
--- a/tests/lib/module-bucket-route.test.js
+++ b/tests/lib/module-bucket-route.test.js
@@ -13,3 +13,10 @@ test("buildModuleBucketPath encodes bucket names in query params", () => {
test("buildModuleBucketPath returns module root when bucket is empty", () => {
assert.equal(buildModuleBucketPath("/replication", ""), "/replication")
})
+
+test("buildModuleBucketPath supports on-demand migration bucket routes", () => {
+ assert.equal(
+ buildModuleBucketPath("/on-demand-migration", "photos archive"),
+ "/on-demand-migration?bucket=photos+archive",
+ )
+})
diff --git a/tests/lib/on-demand-migration-source.test.js b/tests/lib/on-demand-migration-source.test.js
new file mode 100644
index 00000000..1c45de4a
--- /dev/null
+++ b/tests/lib/on-demand-migration-source.test.js
@@ -0,0 +1,53 @@
+import test from "node:test"
+import assert from "node:assert/strict"
+import fs from "node:fs"
+
+const hookSource = fs.readFileSync("hooks/use-on-demand-migration.ts", "utf8")
+const configSource = fs.readFileSync("components/on-demand-migration/config-dialog.tsx", "utf8")
+const backfillSource = fs.readFileSync("components/on-demand-migration/backfill-dialog.tsx", "utf8")
+const managementSource = fs.readFileSync("components/on-demand-migration/management.tsx", "utf8")
+const settingsRowSource = fs.readFileSync("components/on-demand-migration/settings-row.tsx", "utf8")
+
+test("on-demand migration hook follows the frozen RustFS admin route family", () => {
+ assert.match(hookSource, /`\/on-demand-migration\/\$\{encodeURIComponent\(bucket\)\}`/)
+ assert.match(hookSource, /params: dryRun \? \{ "dry-run": "true" \}/)
+ assert.match(hookSource, /params: \{ op: "start" \}/)
+ assert.match(hookSource, /params: \{ op: "cancel" \}/)
+})
+
+test("native Azure and GCS are first-class provider forms", () => {
+ assert.match(configSource, /value === "azure"/)
+ assert.match(configSource, /values\.provider === "gcs_native"/)
+ assert.match(configSource, /["']azureAccount["']/)
+ assert.match(configSource, /["']serviceAccountJson["']/)
+ assert.doesNotMatch(configSource, /public source|anonymous source|roadmap/i)
+})
+
+test("migration dialogs keep actions visible while their bodies scroll", () => {
+ for (const source of [configSource, backfillSource]) {
+ assert.match(source, /grid-rows-\[auto_minmax\(0,1fr\)_auto\]/)
+ assert.match(source, /min-h-0 space-y-5 overflow-y-auto/)
+ assert.match(source, / {
+ assert.match(managementSource, /typeof ratio === "number" && Number\.isFinite\(ratio\)/)
+ assert.match(managementSource, /: "—"/)
+ assert.match(backfillSource, /no completion percentage is shown/)
+ assert.doesNotMatch(managementSource, /