diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/RBACPolicyRow.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/RBACPolicyRow.tsx index 48c79480e..4f9cb086b 100644 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/RBACPolicyRow.tsx +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/RBACPolicyRow.tsx @@ -11,9 +11,10 @@ import type { RBACPolicy } from "@/server/Network/types/rbacPolicy" interface RBACPolicyRowProps { policy: RBACPolicy onDelete: () => void + canDelete: boolean } -export function RBACPolicyRow({ policy, onDelete }: RBACPolicyRowProps) { +export function RBACPolicyRow({ policy, onDelete, canDelete }: RBACPolicyRowProps) { const { t } = useLingui() return ( @@ -21,11 +22,13 @@ export function RBACPolicyRow({ policy, onDelete }: RBACPolicyRowProps) { {policy.target_tenant} {policy.action} e.stopPropagation()} className="items-end justify-end pr-0"> - - - - - + {canDelete && ( + + + + + + )} ) diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupBasicInfo.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupBasicInfo.tsx index 7014e268a..bd3049e57 100644 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupBasicInfo.tsx +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupBasicInfo.tsx @@ -5,10 +5,10 @@ import type { SecurityGroup } from "@/server/Network/types/securityGroup" interface SecurityGroupBasicInfoProps { securityGroup: SecurityGroup onEdit?: () => void - isReadOnly?: boolean + canUpdate: boolean } -export function SecurityGroupBasicInfo({ securityGroup, onEdit, isReadOnly = false }: SecurityGroupBasicInfoProps) { +export function SecurityGroupBasicInfo({ securityGroup, onEdit, canUpdate }: SecurityGroupBasicInfoProps) { const { t } = useLingui() const BooleanValue = ({ value }: { value: boolean | undefined }) => {value ? t`Yes` : t`No`} @@ -16,8 +16,8 @@ export function SecurityGroupBasicInfo({ securityGroup, onEdit, isReadOnly = fal return (
- {onEdit && !isReadOnly && ( - )} diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRBACPolicies.test.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRBACPolicies.test.tsx index c7a076272..19409bb93 100644 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRBACPolicies.test.tsx +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRBACPolicies.test.tsx @@ -202,7 +202,7 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) @@ -217,7 +217,7 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) @@ -231,7 +231,7 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) @@ -245,7 +245,7 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) @@ -263,7 +263,7 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) @@ -279,26 +279,12 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) expect(screen.getByRole("button", { name: /Share Security Group/i })).toBeInTheDocument() }) - - it("displays correct count in toolbar", () => { - vi.mocked(trpcReact.network.rbacPolicy.list.useQuery).mockReturnValue( - createMockQueryResult({ - data: mockPolicies, - }) - ) - - render(, { - wrapper: createWrapper(), - }) - - expect(screen.getByText(/3.*projects/i)).toBeInTheDocument() - }) }) describe("Search functionality", () => { @@ -309,11 +295,11 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) - expect(screen.getByPlaceholderText("Search...")).toBeInTheDocument() + expect(screen.getByPlaceholderText("Search policies...")).toBeInTheDocument() }) it("filters policies by target tenant", async () => { @@ -323,14 +309,17 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) - const searchInput = screen.getByPlaceholderText("Search...") + const searchInput = screen.getByPlaceholderText("Search policies...") const user = userEvent.setup() await user.type(searchInput, "abc") + // Wait for debounce (500ms) + await new Promise((resolve) => setTimeout(resolve, 600)) + await waitFor(() => { expect(screen.getByTestId("rbac-policy-row-policy-1")).toBeInTheDocument() expect(screen.queryByTestId("rbac-policy-row-policy-2")).not.toBeInTheDocument() @@ -345,14 +334,17 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) - const searchInput = screen.getByPlaceholderText("Search...") + const searchInput = screen.getByPlaceholderText("Search policies...") const user = userEvent.setup() await user.type(searchInput, "external") + // Wait for debounce (500ms) + await new Promise((resolve) => setTimeout(resolve, 600)) + await waitFor(() => { expect(screen.getByTestId("rbac-policy-row-policy-2")).toBeInTheDocument() expect(screen.queryByTestId("rbac-policy-row-policy-1")).not.toBeInTheDocument() @@ -367,14 +359,17 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) - const searchInput = screen.getByPlaceholderText("Search...") + const searchInput = screen.getByPlaceholderText("Search policies...") const user = userEvent.setup() await user.type(searchInput, "nonexistent") + // Wait for debounce (500ms) + await new Promise((resolve) => setTimeout(resolve, 600)) + await waitFor(() => { expect(screen.getByText("No policies match your search")).toBeInTheDocument() }) @@ -387,36 +382,19 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) - const searchInput = screen.getByPlaceholderText("Search...") + const searchInput = screen.getByPlaceholderText("Search policies...") const user = userEvent.setup() await user.type(searchInput, "PROJECT-ABC") - await waitFor(() => { - expect(screen.getByTestId("rbac-policy-row-policy-1")).toBeInTheDocument() - }) - }) - - it("updates filtered count in toolbar", async () => { - vi.mocked(trpcReact.network.rbacPolicy.list.useQuery).mockReturnValue( - createMockQueryResult({ - data: mockPolicies, - }) - ) - - render(, { - wrapper: createWrapper(), - }) - - const searchInput = screen.getByPlaceholderText("Search...") - const user = userEvent.setup() - await user.type(searchInput, "abc") + // Wait for debounce (500ms) + await new Promise((resolve) => setTimeout(resolve, 600)) await waitFor(() => { - expect(screen.getByText(/1.*of.*3.*projects/i)).toBeInTheDocument() + expect(screen.getByTestId("rbac-policy-row-policy-1")).toBeInTheDocument() }) }) @@ -427,16 +405,22 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) - const searchInput = screen.getByPlaceholderText("Search...") + const searchInput = screen.getByPlaceholderText("Search policies...") const user = userEvent.setup() // Type and then clear await user.type(searchInput, "abc") - await user.clear(searchInput) + + // Wait for debounce + await new Promise((resolve) => setTimeout(resolve, 600)) + + // Click the clear button + const clearButton = screen.getByRole("button", { name: /clear/i }) + await user.click(clearButton) await waitFor(() => { expect(screen.getByTestId("rbac-policy-row-policy-1")).toBeInTheDocument() @@ -454,7 +438,7 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) @@ -474,7 +458,7 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) @@ -494,7 +478,7 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) @@ -523,7 +507,7 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) @@ -544,7 +528,7 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) @@ -577,7 +561,7 @@ describe("SecurityGroupRBACPolicies", () => { isPending: false, } as unknown as ReturnType) - render(, { + render(, { wrapper: createWrapper(), }) @@ -601,7 +585,7 @@ describe("SecurityGroupRBACPolicies", () => { const mockUseQuery = vi.mocked(trpcReact.network.rbacPolicy.list.useQuery) mockUseQuery.mockReturnValue(createMockQueryResult({ data: [] })) - render(, { + render(, { wrapper: createWrapper(), }) @@ -617,7 +601,7 @@ describe("SecurityGroupRBACPolicies", () => { const mockUseQuery = vi.mocked(trpcReact.network.rbacPolicy.list.useQuery) mockUseQuery.mockReturnValue(createMockQueryResult({ data: [] })) - render(, { + render(, { wrapper: createWrapper(), }) @@ -638,7 +622,7 @@ describe("SecurityGroupRBACPolicies", () => { }) ) - render(, { + render(, { wrapper: createWrapper(), }) diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRBACPolicies.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRBACPolicies.tsx index bed5acf56..a908e122a 100644 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRBACPolicies.tsx +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRBACPolicies.tsx @@ -1,13 +1,15 @@ -import { useState, useEffect, useMemo } from "react" +import { useState, useEffect, useMemo, useRef } from "react" import { Trans, useLingui } from "@lingui/react/macro" import { DataGrid, DataGridRow, DataGridHeadCell, + DataGridToolbar, Stack, Spinner, Button, Message, + SearchInput, } from "@cloudoperators/juno-ui-components" import { trpcReact } from "@/client/trpcClient" import { useProjectId } from "@/client/hooks" @@ -15,14 +17,14 @@ import type { RBACPolicy } from "@/server/Network/types/rbacPolicy" import { RBACPolicyRow } from "./RBACPolicyRow" import { AddRBACPolicyModal } from "../../-modals/AddRBACPolicyModal" import { DeleteRBACPolicyDialog } from "../../-modals/DeleteRBACPolicyDialog" -import { ListToolbar } from "@/client/components/ListToolbar" import { useModal } from "@/client/utils/useModal" interface SecurityGroupRBACPoliciesProps { securityGroupId: string + canManageAccess: boolean } -export function SecurityGroupRBACPolicies({ securityGroupId }: SecurityGroupRBACPoliciesProps) { +export function SecurityGroupRBACPolicies({ securityGroupId, canManageAccess }: SecurityGroupRBACPoliciesProps) { const utils = trpcReact.useUtils() const { t } = useLingui() const projectId = useProjectId() @@ -30,6 +32,10 @@ export function SecurityGroupRBACPolicies({ securityGroupId }: SecurityGroupRBAC const [isAddModalOpen, toggleAddModal] = useModal() const [policyToDelete, setPolicyToDelete] = useState(null) const [searchTerm, setSearchTerm] = useState("") + const [localSearchTerm, setLocalSearchTerm] = useState("") + const debounceTimer = useRef(undefined) + + useEffect(() => () => clearTimeout(debounceTimer.current), []) // Query RBAC policies const { @@ -88,11 +94,6 @@ export function SecurityGroupRBACPolicies({ securityGroupId }: SecurityGroupRBAC ) }, [policies, searchTerm]) - const handleSearchChange = (value: string | number | string[] | undefined) => { - const searchValue = typeof value === "string" ? value : "" - setSearchTerm(searchValue) - } - if (isPending) { return ( @@ -115,19 +116,51 @@ export function SecurityGroupRBACPolicies({ securityGroupId }: SecurityGroupRBAC return ( <> - {/* Toolbar with Share button and search - same pattern as Rules */} - + {/* Zone 1 — count + Share button */} + + {/* Count display */} + + {totalCount !== filteredCount ? ( + + Showing {filteredCount} of {totalCount} projects + + ) : ( + {totalCount} projects + )} + + + {canManageAccess && ( + - } - /> + )} + + + {/* Zone 2 — search only (no filters needed) */} + + + ) => { + const v = e.currentTarget.value + setLocalSearchTerm(v) + clearTimeout(debounceTimer.current) + debounceTimer.current = window.setTimeout(() => setSearchTerm(v), 500) + }} + onSearch={(v) => { + clearTimeout(debounceTimer.current) + setSearchTerm(typeof v === "string" ? v : "") + }} + onClear={() => { + clearTimeout(debounceTimer.current) + setLocalSearchTerm("") + setSearchTerm("") + }} + /> + + {/* RBAC Policies Table */} {filteredCount === 0 ? ( @@ -151,7 +184,12 @@ export function SecurityGroupRBACPolicies({ securityGroupId }: SecurityGroupRBAC {filteredPolicies.map((policy) => ( - handleDeleteClick(policy)} /> + handleDeleteClick(policy)} + canDelete={canManageAccess} + /> ))} )} diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRulesTable.test.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRulesTable.test.tsx index 0820de74b..320dc47c3 100644 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRulesTable.test.tsx +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRulesTable.test.tsx @@ -100,9 +100,19 @@ describe("SecurityGroupRulesTable", () => { describe("Rendering", () => { it("renders empty state when no rules provided", () => { - render(, { - wrapper: createWrapper(), - }) + render( + , + { + wrapper: createWrapper(), + } + ) expect(screen.getByText("There are no rules for this security group")).toBeInTheDocument() }) @@ -115,6 +125,8 @@ describe("SecurityGroupRulesTable", () => { isDeletingRule={false} deleteError={null} searchTerm="nonexistent" + canCreateRule={true} + canDeleteRule={true} />, { wrapper: createWrapper() } ) @@ -124,7 +136,14 @@ describe("SecurityGroupRulesTable", () => { it("renders table with rules when provided", () => { render( - , + , { wrapper: createWrapper() } ) @@ -136,7 +155,14 @@ describe("SecurityGroupRulesTable", () => { it("renders all column headers correctly", () => { render( - , + , { wrapper: createWrapper() } ) @@ -160,6 +186,8 @@ describe("SecurityGroupRulesTable", () => { deleteError={null} securityGroupId="sg-123" onCreateRule={onCreateRule} + canCreateRule={true} + canDeleteRule={true} />, { wrapper: createWrapper() } ) @@ -169,7 +197,14 @@ describe("SecurityGroupRulesTable", () => { it("does not render Add rule button when onCreateRule not provided", () => { render( - , + , { wrapper: createWrapper() } ) @@ -187,6 +222,8 @@ describe("SecurityGroupRulesTable", () => { deleteError={null} filterSettings={defaultFilterSettings} onFilterChange={vi.fn()} + canCreateRule={true} + canDeleteRule={true} />, { wrapper: createWrapper() } ) @@ -206,6 +243,8 @@ describe("SecurityGroupRulesTable", () => { deleteError={null} filterSettings={defaultFilterSettings} onFilterChange={onFilterChange} + canCreateRule={true} + canDeleteRule={true} />, { wrapper: createWrapper() } ) @@ -243,11 +282,13 @@ describe("SecurityGroupRulesTable", () => { isDeletingRule={false} deleteError={null} onSearchChange={vi.fn()} + canCreateRule={true} + canDeleteRule={true} />, { wrapper: createWrapper() } ) - expect(screen.getByPlaceholderText("Search...")).toBeInTheDocument() + expect(screen.getByPlaceholderText("Search rules...")).toBeInTheDocument() }) it("calls onSearchChange when search input changes", async () => { @@ -259,11 +300,13 @@ describe("SecurityGroupRulesTable", () => { isDeletingRule={false} deleteError={null} onSearchChange={onSearchChange} + canCreateRule={true} + canDeleteRule={true} />, { wrapper: createWrapper() } ) - const searchInput = screen.getByPlaceholderText("Search...") + const searchInput = screen.getByPlaceholderText("Search rules...") const user = userEvent.setup() await user.type(searchInput, "HTTP") @@ -288,6 +331,8 @@ describe("SecurityGroupRulesTable", () => { deleteError={null} filterSettings={filterSettingsWithIngress} onFilterChange={vi.fn()} + canCreateRule={true} + canDeleteRule={true} />, { wrapper: createWrapper() } ) @@ -315,6 +360,8 @@ describe("SecurityGroupRulesTable", () => { deleteError={null} filterSettings={filterSettingsWithFilter} onFilterChange={onFilterChange} + canCreateRule={true} + canDeleteRule={true} />, { wrapper: createWrapper() } ) @@ -340,6 +387,8 @@ describe("SecurityGroupRulesTable", () => { deleteError={null} sortSettings={defaultSortSettings} onSortChange={vi.fn()} + canCreateRule={true} + canDeleteRule={true} />, { wrapper: createWrapper() } ) @@ -358,6 +407,8 @@ describe("SecurityGroupRulesTable", () => { deleteError={null} sortSettings={defaultSortSettings} onSortChange={onSortChange} + canCreateRule={true} + canDeleteRule={true} />, { wrapper: createWrapper() } ) @@ -389,6 +440,8 @@ describe("SecurityGroupRulesTable", () => { deleteError={null} sortSettings={defaultSortSettings} onSortChange={vi.fn()} + canCreateRule={true} + canDeleteRule={true} />, { wrapper: createWrapper() } ) @@ -407,6 +460,8 @@ describe("SecurityGroupRulesTable", () => { deleteError={null} sortSettings={defaultSortSettings} onSortChange={onSortChange} + canCreateRule={true} + canDeleteRule={true} />, { wrapper: createWrapper() } ) @@ -430,6 +485,8 @@ describe("SecurityGroupRulesTable", () => { deleteError={null} sortSettings={{ ...defaultSortSettings, sortDirection: "asc" }} onSortChange={vi.fn()} + canCreateRule={true} + canDeleteRule={true} />, { wrapper: createWrapper() } ) @@ -449,6 +506,8 @@ describe("SecurityGroupRulesTable", () => { deleteError={null} sortSettings={{ ...defaultSortSettings, sortDirection: "desc" }} onSortChange={vi.fn()} + canCreateRule={true} + canDeleteRule={true} />, { wrapper: createWrapper() } ) @@ -463,7 +522,14 @@ describe("SecurityGroupRulesTable", () => { it("formats single port correctly", () => { const rule = mockRules[0] // port 80 render( - , + , { wrapper: createWrapper() } ) @@ -477,7 +543,14 @@ describe("SecurityGroupRulesTable", () => { port_range_max: 443, } render( - , + , { wrapper: createWrapper() } ) @@ -487,7 +560,14 @@ describe("SecurityGroupRulesTable", () => { it("formats ICMP type and code correctly", () => { const rule = mockRules[2] // ICMP with type 8, code 0 render( - , + , { wrapper: createWrapper() } ) @@ -498,7 +578,14 @@ describe("SecurityGroupRulesTable", () => { describe("Delete Functionality", () => { it("renders delete menu items for each rule", () => { render( - , + , { wrapper: createWrapper() } ) @@ -515,6 +602,8 @@ describe("SecurityGroupRulesTable", () => { onDeleteRule={onDeleteRule} isDeletingRule={false} deleteError={null} + canCreateRule={true} + canDeleteRule={true} />, { wrapper: createWrapper() } ) diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRulesTable.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRulesTable.tsx index 383b1fb13..277be430d 100644 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRulesTable.tsx +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/-details/SecurityGroupRulesTable.tsx @@ -1,14 +1,16 @@ -import { useState, useEffect } from "react" +import { useState, useEffect, useRef } from "react" import { DataGrid, DataGridHeadCell, DataGridRow, DataGridCell, + DataGridToolbar, Button, Stack, PopupMenu, PopupMenuItem, PopupMenuOptions, + SearchInput, } from "@cloudoperators/juno-ui-components" import { Trans, useLingui } from "@lingui/react/macro" import type { SecurityGroupRule, CreateSecurityGroupRuleInput } from "@/server/Network/types/securityGroup" @@ -16,7 +18,9 @@ import type { FilterSettings, SortSettings } from "@/client/components/ListToolb import type { ListSortConfig } from "@/client/utils/useListWithFiltering" import { DeleteRuleDialog } from "../../-modals/DeleteRuleDialog" import { AddRuleModal } from "../../-modals/AddRuleModal/AddRuleModal" -import { ListToolbar } from "@/client/components/ListToolbar" +import { SortInput } from "@/client/components/ListToolbar/SortInput" +import { SelectedFilters } from "@/client/components/ListToolbar/SelectedFilters" +import { FiltersInput } from "@/client/components/ListToolbar/FiltersInput" import { useModal } from "@/client/utils/useModal" interface SecurityGroupRulesTableProps { @@ -38,7 +42,8 @@ interface SecurityGroupRulesTableProps { isCreatingRule?: boolean createRuleError?: string | null availableSecurityGroups?: Array<{ id: string; name: string | null }> - readOnly?: boolean // Hide actions column and add rule button for shared security groups + canCreateRule: boolean + canDeleteRule: boolean } export function SecurityGroupRulesTable({ @@ -58,11 +63,16 @@ export function SecurityGroupRulesTable({ isCreatingRule = false, createRuleError = null, availableSecurityGroups = [], - readOnly = false, + canCreateRule, + canDeleteRule, }: SecurityGroupRulesTableProps) { const { t } = useLingui() const [ruleToDelete, setRuleToDelete] = useState(null) const [isAddRuleModalOpen, toggleAddRuleModal] = useModal() + const [localSearchTerm, setLocalSearchTerm] = useState(searchTerm) + const debounceTimer = useRef(undefined) + + useEffect(() => () => clearTimeout(debounceTimer.current), []) const handleDeleteClick = (rule: SecurityGroupRule) => { setRuleToDelete(rule) @@ -110,38 +120,116 @@ export function SecurityGroupRulesTable({ return ( <> - + {/* Zone 1 — sort + add rule button + count, no background */} + + {/* Count display */} + + {totalRulesCount !== undefined && rules.length !== totalRulesCount ? ( + + Showing {rules.length} of {totalRulesCount} rules + + ) : ( + {rules.length} rules + )} + + + + {sortSettings && onSortChange && ( + + onSortChange({ ...sortSettings, sortBy: v, sortDirection: sortSettings.sortDirection }) + } + onSortDirectionChange={(dir) => onSortChange({ ...sortSettings, sortDirection: dir })} + /> + )} + {canCreateRule && onCreateRule && ( + - ) - } - /> + )} + + + + {/* Zone 2 — filter + search + active filter pills */} + {(filterSettings || onSearchChange) && ( + + + + {filterSettings && onFilterChange && ( + { + const alreadySelected = (filterSettings.selectedFilters || []).some( + (f) => f.name === selected.name && f.value === selected.value + ) + if (alreadySelected) return + + const supportsMulti = filterSettings.filters.find( + (f) => f.filterName === selected.name + )?.supportsMultiValue + const newSelected = supportsMulti + ? [...(filterSettings.selectedFilters || []), selected] + : [...(filterSettings.selectedFilters || []).filter((f) => f.name !== selected.name), selected] + onFilterChange({ ...filterSettings, selectedFilters: newSelected }) + }} + /> + )} + {onSearchChange && ( + ) => { + const v = e.currentTarget.value + setLocalSearchTerm(v) + clearTimeout(debounceTimer.current) + debounceTimer.current = window.setTimeout(() => onSearchChange(v), 500) + }} + onSearch={(v) => { + clearTimeout(debounceTimer.current) + onSearchChange(typeof v === "string" ? v : "") + }} + onClear={() => { + clearTimeout(debounceTimer.current) + setLocalSearchTerm("") + onSearchChange("") + }} + /> + )} + + {filterSettings?.selectedFilters && filterSettings.selectedFilters.length > 0 && ( + + onFilterChange?.({ + ...filterSettings, + selectedFilters: (filterSettings.selectedFilters || []).filter( + (f) => !(f.name === filterToRemove.name && f.value === filterToRemove.value) + ), + }) + } + onClear={() => onFilterChange?.({ ...filterSettings, selectedFilters: [] })} + /> + )} + + + )} {/* Rules Table */} {rules.length === 0 ? ( There are no rules for this security group ) : ( - + {t`Direction`} {t`Description`} {t`Ethertype`} {t`Protocol`} {t`Range`} - {!readOnly && {t`Actions`}} + {canDeleteRule && {t`Actions`}} {rules.map((rule) => ( @@ -150,7 +238,7 @@ export function SecurityGroupRulesTable({ {rule.ethertype} {rule.protocol || t`-`} {formatPortRange(rule)} - {!readOnly && ( + {canDeleteRule && ( e.stopPropagation()} className="items-end justify-end pr-0"> @@ -166,7 +254,7 @@ export function SecurityGroupRulesTable({ {/* Delete Confirmation Dialog */} - {!readOnly && ( + {canDeleteRule && ( { onFilterChange: vi.fn(), } + const defaultPermissions = { + canView: true, + canCreate: true, + canUpdate: true, + canDelete: true, + canCreateRule: true, + canDeleteRule: true, + canManageAccess: true, + canViewRBAC: true, + } + it("renders all security group fields", () => { render( { filterControls={defaultFilterControls} availableSecurityGroups={[]} currentProjectId={mockCurrentProjectId} + permissions={defaultPermissions} />, { wrapper: createWrapper(), @@ -127,6 +139,7 @@ describe("SecurityGroupDetailsView", () => { filterControls={defaultFilterControls} availableSecurityGroups={[]} currentProjectId={mockCurrentProjectId} + permissions={defaultPermissions} />, { wrapper: createWrapper(), @@ -146,6 +159,7 @@ describe("SecurityGroupDetailsView", () => { filterControls={defaultFilterControls} availableSecurityGroups={[]} currentProjectId={mockCurrentProjectId} + permissions={defaultPermissions} />, { wrapper: createWrapper(), @@ -164,6 +178,7 @@ describe("SecurityGroupDetailsView", () => { filterControls={defaultFilterControls} availableSecurityGroups={[]} currentProjectId={mockCurrentProjectId} + permissions={defaultPermissions} />, { wrapper: createWrapper(), @@ -185,6 +200,7 @@ describe("SecurityGroupDetailsView", () => { filterControls={defaultFilterControls} availableSecurityGroups={[]} currentProjectId={mockCurrentProjectId} + permissions={defaultPermissions} />, { wrapper: createWrapper(), @@ -220,6 +236,7 @@ describe("SecurityGroupDetailsView", () => { filterControls={filterControls} availableSecurityGroups={[]} currentProjectId={mockCurrentProjectId} + permissions={defaultPermissions} />, { wrapper: createWrapper(), @@ -253,6 +270,7 @@ describe("SecurityGroupDetailsView", () => { filterControls={filterControls} availableSecurityGroups={[]} currentProjectId={mockCurrentProjectId} + permissions={defaultPermissions} />, { wrapper: createWrapper(), @@ -283,6 +301,7 @@ describe("SecurityGroupDetailsView", () => { filterControls={filterControls} availableSecurityGroups={[]} currentProjectId={mockCurrentProjectId} + permissions={defaultPermissions} />, { wrapper: createWrapper(), @@ -312,6 +331,7 @@ describe("SecurityGroupDetailsView", () => { filterControls={filterControls} availableSecurityGroups={[]} currentProjectId={mockCurrentProjectId} + permissions={defaultPermissions} />, { wrapper: createWrapper(), @@ -341,6 +361,7 @@ describe("SecurityGroupDetailsView", () => { filterControls={filterControls} availableSecurityGroups={[]} currentProjectId={mockCurrentProjectId} + permissions={defaultPermissions} />, { wrapper: createWrapper(), @@ -376,6 +397,7 @@ describe("SecurityGroupDetailsView", () => { filterControls={filterControls} availableSecurityGroups={[]} currentProjectId={mockCurrentProjectId} + permissions={defaultPermissions} />, { wrapper: createWrapper(), @@ -397,6 +419,7 @@ describe("SecurityGroupDetailsView", () => { filterControls={defaultFilterControls} availableSecurityGroups={[]} currentProjectId={mockCurrentProjectId} + permissions={defaultPermissions} />, { wrapper: createWrapper(), @@ -426,6 +449,7 @@ describe("SecurityGroupDetailsView", () => { filterControls={filterControls} availableSecurityGroups={[]} currentProjectId={mockCurrentProjectId} + permissions={defaultPermissions} />, { wrapper: createWrapper(), diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/SecurityGroupDetailsView.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/SecurityGroupDetailsView.tsx index 2a9f29fac..ddf527292 100644 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/SecurityGroupDetailsView.tsx +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/-components/SecurityGroupDetailsView.tsx @@ -7,6 +7,7 @@ import type { } from "@/server/Network/types/securityGroup" import type { FilterSettings, SortSettings } from "@/client/components/ListToolbar/types" import type { ListSortConfig } from "@/client/utils/useListWithFiltering" +import type { SecurityGroupPermissions } from "../../-components/SecurityGroupTableRow" import { SecurityGroupHeader, SecurityGroupBasicInfo, SecurityGroupTabs, type TabType } from "./-details" import { SecurityGroupRulesTable } from "./-details" import { SecurityGroupRBACPolicies } from "./-details/SecurityGroupRBACPolicies" @@ -34,6 +35,7 @@ interface SecurityGroupDetailsViewProps { createRuleError?: string | null availableSecurityGroups?: Array<{ id: string; name: string | null }> currentProjectId: string + permissions: SecurityGroupPermissions } export function SecurityGroupDetailsView({ @@ -49,13 +51,13 @@ export function SecurityGroupDetailsView({ createRuleError = null, availableSecurityGroups = [], currentProjectId, + permissions, }: SecurityGroupDetailsViewProps) { const [activeTab, setActiveTab] = useState("rules") // Determine if this is a shared security group (not owned by current project) const isOwner = securityGroup.project_id === currentProjectId - const isShared = !isOwner - const showRBACTab = isOwner + const showRBACTab = isOwner && permissions.canViewRBAC return ( @@ -64,10 +66,10 @@ export function SecurityGroupDetailsView({ {/* Basic Info Section */} - + - {/* Tabs Navigation - Hide for shared security groups */} - {!isShared && } + {/* Tabs Navigation - Show rules tab always, RBAC only if owner and has permission */} + {/* Tab Content */}
@@ -85,14 +87,20 @@ export function SecurityGroupDetailsView({ filterSettings={filterControls.filterSettings} onFilterChange={filterControls.onFilterChange} securityGroupId={securityGroup.id} - onCreateRule={isShared ? undefined : onCreateRule} + onCreateRule={permissions.canCreateRule ? onCreateRule : undefined} isCreatingRule={isCreatingRule} createRuleError={createRuleError} availableSecurityGroups={availableSecurityGroups} - readOnly={isShared} + canCreateRule={permissions.canCreateRule} + canDeleteRule={permissions.canDeleteRule} + /> + )} + {activeTab === "rbac" && ( + )} - {activeTab === "rbac" && }
diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/index.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/index.tsx index f151bc46a..6ad9b0aa8 100644 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/index.tsx +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/$securityGroupId/index.tsx @@ -17,6 +17,7 @@ import { EditSecurityGroupModal } from "../-components/-modals/EditSecurityGroup import { useSecurityGroupDetails } from "./-hooks/useSecurityGroupDetails" import { useListWithFiltering } from "@/client/utils/useListWithFiltering" import { trpcReact } from "@/client/trpcClient" +import { useSecurityGroupPermissions } from "../-hooks/useSecurityGroupPermissions" export const Route = createFileRoute("/_auth/projects/$projectId/network/securitygroups/$securityGroupId/")({ staticData: { @@ -67,10 +68,21 @@ export const Route = createFileRoute("/_auth/projects/$projectId/network/securit function RouteComponent() { const { securityGroupId } = Route.useParams() + const { trpcClient } = Route.useRouteContext() const projectId = useProjectId() const navigate = useNavigate() const { t } = useLingui() + if (!trpcClient) { + throw new Error("trpcClient is not available in route context") + } + + const { + permissions, + isLoading: isLoadingPermissions, + isError: isPermissionsError, + } = useSecurityGroupPermissions(projectId) + // Rules filtering using the same pattern as List page const { searchTerm: rulesSearchTerm, @@ -163,6 +175,30 @@ function RouteComponent() { }) } + // Handle loading permissions + if (isLoadingPermissions) { + return ( + + + Loading Permissions... + + ) + } + + // Handle permissions error - default to no permissions + const safePermissions = isPermissionsError + ? { + canView: false, + canCreate: false, + canUpdate: false, + canDelete: false, + canCreateRule: false, + canDeleteRule: false, + canManageAccess: false, + canViewRBAC: false, + } + : permissions! + // Handle loading state if (isLoading) { return ( @@ -226,6 +262,7 @@ function RouteComponent() { createRuleError={createRuleError} availableSecurityGroups={availableSecurityGroups} currentProjectId={projectId} + permissions={safePermissions} /> = checked={properties.stateful} onChange={handleInputChange} disabled={isLoading} + helptext={t`Stateful security groups track connection state. This setting cannot be changed after creation.`} /> diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/-modals/EditSecurityGroupModal.test.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/-modals/EditSecurityGroupModal.test.tsx index be13768c7..f1cd0ac7d 100644 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/-modals/EditSecurityGroupModal.test.tsx +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/-modals/EditSecurityGroupModal.test.tsx @@ -68,11 +68,9 @@ describe("EditSecurityGroupModal", () => { const nameInput = screen.getByLabelText(/Name/i) as HTMLInputElement const descriptionTextarea = screen.getByLabelText(/Description/i) as HTMLTextAreaElement - const statefulCheckbox = screen.getByLabelText(/Stateful/i) as HTMLInputElement expect(nameInput.value).toBe("existing-sg") expect(descriptionTextarea.value).toBe("Existing description") - expect(statefulCheckbox.checked).toBe(true) }) test("handles security group with null description", () => { @@ -96,28 +94,6 @@ describe("EditSecurityGroupModal", () => { const nameInput = screen.getByLabelText(/Name/i) as HTMLInputElement expect(nameInput.value).toBe("") }) - - test("handles security group with stateful as false", () => { - const sgStateless: SecurityGroup = { - ...mockSecurityGroup, - stateful: false, - } - renderModal({ securityGroup: sgStateless }) - - const statefulCheckbox = screen.getByLabelText(/Stateful/i) as HTMLInputElement - expect(statefulCheckbox.checked).toBe(false) - }) - - test("handles security group with undefined stateful (defaults to true)", () => { - const sgNoStateful: SecurityGroup = { - ...mockSecurityGroup, - stateful: undefined, - } - renderModal({ securityGroup: sgNoStateful }) - - const statefulCheckbox = screen.getByLabelText(/Stateful/i) as HTMLInputElement - expect(statefulCheckbox.checked).toBe(true) - }) }) describe("Dynamic form updates (useEffect)", () => { @@ -154,11 +130,9 @@ describe("EditSecurityGroupModal", () => { await waitFor(() => { const updatedNameInput = screen.getByLabelText(/Name/i) as HTMLInputElement const updatedDescriptionTextarea = screen.getByLabelText(/Description/i) as HTMLTextAreaElement - const updatedStatefulCheckbox = screen.getByLabelText(/Stateful/i) as HTMLInputElement expect(updatedNameInput.value).toBe("updated-sg") expect(updatedDescriptionTextarea.value).toBe("Updated description") - expect(updatedStatefulCheckbox.checked).toBe(false) }) }) }) @@ -174,13 +148,6 @@ describe("EditSecurityGroupModal", () => { expect(screen.getByTestId("update-security-group-button")).toHaveTextContent("Update Security Group") }) - test("displays info message about stateful restrictions", () => { - renderModal() - expect( - screen.getByText(/The 'stateful' attribute cannot be changed if this security group is currently in use/i) - ).toBeInTheDocument() - }) - test("shows 'Updating security group...' when loading", () => { renderModal({ isLoading: true }) expect(screen.getByText(/Updating security group.../i)).toBeInTheDocument() @@ -209,7 +176,6 @@ describe("EditSecurityGroupModal", () => { expect(onUpdate).toHaveBeenCalledWith("sg-123", { name: "updated-name", description: "updated description", - stateful: true, }) }) }) @@ -234,7 +200,6 @@ describe("EditSecurityGroupModal", () => { expect(onUpdate).toHaveBeenCalledWith("sg-123", { name: "updated-name", description: "updated description", - stateful: true, }) }) }) @@ -254,27 +219,6 @@ describe("EditSecurityGroupModal", () => { expect(onUpdate).toHaveBeenCalledWith("sg-123", { name: "existing-sg", description: undefined, - stateful: true, - }) - }) - }) - - test("calls onUpdate with changed stateful value", async () => { - const onUpdate = vi.fn().mockResolvedValue(undefined) - const user = userEvent.setup() - renderModal({ onUpdate }) - - const statefulCheckbox = screen.getByLabelText(/Stateful/i) - await user.click(statefulCheckbox) // Toggle to false - - const submitButton = screen.getByTestId("update-security-group-button") - await user.click(submitButton) - - await waitFor(() => { - expect(onUpdate).toHaveBeenCalledWith("sg-123", { - name: "existing-sg", - description: "Existing description", - stateful: false, }) }) }) diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/-modals/EditSecurityGroupModal.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/-modals/EditSecurityGroupModal.tsx index 8bfac6430..92cc37a79 100644 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/-modals/EditSecurityGroupModal.tsx +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/-modals/EditSecurityGroupModal.tsx @@ -6,7 +6,6 @@ import { FormRow, FormSection, TextInput, - Checkbox, Button, ButtonRow, Spinner, @@ -32,7 +31,6 @@ interface EditSecurityGroupModalProps { interface SecurityGroupProperties { name: string description: string - stateful: boolean } export const EditSecurityGroupModal: React.FC = ({ @@ -48,7 +46,6 @@ export const EditSecurityGroupModal: React.FC = ({ const [properties, setProperties] = useState({ name: securityGroup.name || "", description: securityGroup.description || "", - stateful: securityGroup.stateful ?? true, }) const [errors, setErrors] = useState<{ [key: string]: string }>({}) @@ -57,7 +54,6 @@ export const EditSecurityGroupModal: React.FC = ({ setProperties({ name: securityGroup.name || "", description: securityGroup.description || "", - stateful: securityGroup.stateful ?? true, }) }, [securityGroup]) @@ -98,12 +94,16 @@ export const EditSecurityGroupModal: React.FC = ({ } if (onUpdate) { + // Prepare base update data without stateful const updateData: Omit = { name: properties.name.trim(), description: properties.description.trim() || undefined, - stateful: properties.stateful, } + // Note: We deliberately do NOT include 'stateful' field here + // because it requires special 'update_security_group:stateful' permission + // which needs cloud admin role. Regular users can only update name/description. + await onUpdate(securityGroup.id, updateData) } } @@ -146,14 +146,6 @@ export const EditSecurityGroupModal: React.FC = ({ )} - {/* Info message about stateful changes */} - - - Note: The 'stateful' attribute cannot be changed if this security group is currently in use by one or more - ports. - - - {isLoading && (
@@ -192,17 +184,7 @@ export const EditSecurityGroupModal: React.FC = ({ rows={3} /> - - - - + {/* Note: Stateful checkbox is not shown here because it requires 'update_security_group:stateful' permission (cloud admin only) */} )} diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupListContainer.test.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupListContainer.test.tsx index f10e51857..6f6c32d98 100644 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupListContainer.test.tsx +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupListContainer.test.tsx @@ -77,10 +77,14 @@ const mockSecurityGroups: SecurityGroup[] = [ ] const defaultPermissions: SecurityGroupPermissions = { + canView: true, canCreate: true, canUpdate: true, canDelete: false, + canCreateRule: true, + canDeleteRule: false, canManageAccess: false, + canViewRBAC: false, } const createTestRouter = (Component: ReactElement) => { diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupListContainer.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupListContainer.tsx index c7b4763f5..9f21ea614 100644 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupListContainer.tsx +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupListContainer.tsx @@ -22,10 +22,12 @@ interface SecurityGroupListContainerProps { onUpdateSecurityGroup?: ( securityGroupId: string, data: Omit - ) => void + ) => Promise isUpdatingSecurityGroup?: boolean updateError?: string | null currentProjectId?: string + hasAnyBulkAction?: boolean + onClearUpdateError?: () => void } export const SecurityGroupListContainer = ({ @@ -41,6 +43,8 @@ export const SecurityGroupListContainer = ({ isUpdatingSecurityGroup = false, updateError = null, currentProjectId, + hasAnyBulkAction = false, + onClearUpdateError, }: SecurityGroupListContainerProps) => { const { t } = useLingui() const navigate = useNavigate() @@ -52,6 +56,10 @@ export const SecurityGroupListContainer = ({ const prevIsUpdatingRef = useRef(false) const handleEdit = (sg: SecurityGroup) => { + // Clear error when selecting a different security group + if (selectedSecurityGroup && selectedSecurityGroup.id !== sg.id && onClearUpdateError) { + onClearUpdateError() + } setSelectedSecurityGroup(sg) setEditModalOpen(true) } @@ -132,8 +140,9 @@ export const SecurityGroupListContainer = ({ return ( <> - + + {hasAnyBulkAction && } {[t`Name`, t`Description`, t`Shared`, t`Stateful`, ""].map((label) => ( {label} ))} @@ -151,6 +160,9 @@ export const SecurityGroupListContainer = ({ onDelete={handleDelete} onViewDetails={handleViewDetails} isReadOnly={isReadOnly} + showSelectColumn={hasAnyBulkAction} + isSelected={false} + onSelect={() => {}} /> ) })} @@ -162,10 +174,11 @@ export const SecurityGroupListContainer = ({ securityGroup={selectedSecurityGroup} open={editModalOpen} onClose={closeEditModal} - onUpdate={async (id, data) => { + onUpdate={(id, data) => { if (onUpdateSecurityGroup) { - await onUpdateSecurityGroup(id, data) + return onUpdateSecurityGroup(id, data) } + return Promise.resolve() }} isLoading={isUpdatingSecurityGroup} error={updateError} diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupTableRow.test.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupTableRow.test.tsx index 686345922..7f0293f39 100644 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupTableRow.test.tsx +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupTableRow.test.tsx @@ -63,10 +63,14 @@ describe("SecurityGroupTableRow", () => { } const defaultPermissions: SecurityGroupPermissions = { + canView: true, canCreate: true, canUpdate: true, canDelete: false, + canCreateRule: true, + canDeleteRule: false, canManageAccess: false, + canViewRBAC: false, } const mockOnEdit = vi.fn() @@ -313,10 +317,14 @@ describe("SecurityGroupTableRow", () => { it("shows only Show Details when all permissions are false", async () => { const user = userEvent.setup() const permissions: SecurityGroupPermissions = { + canView: false, canCreate: false, canUpdate: false, canDelete: false, + canCreateRule: false, + canDeleteRule: false, canManageAccess: false, + canViewRBAC: false, } const router = createTestRouter( void onViewDetails?: (sg: SecurityGroup) => void isReadOnly?: boolean + showSelectColumn?: boolean + isSelected?: boolean + onSelect?: (sg: SecurityGroup) => void } export function SecurityGroupTableRow({ @@ -31,6 +39,9 @@ export function SecurityGroupTableRow({ onDelete, onViewDetails, isReadOnly = false, + showSelectColumn = false, + isSelected = false, + onSelect, }: SecurityGroupTableRowProps) { const { t } = useLingui() @@ -49,6 +60,11 @@ export function SecurityGroupTableRow({ onClick={handleShowDetails} className="hover:bg-theme-background-lvl-2 cursor-pointer" > + {showSelectColumn && ( + e.stopPropagation()}> + onSelect?.(sg)} /> + + )}

{sg.name}

diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupsList.test.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupsList.test.tsx deleted file mode 100644 index 0c6db283f..000000000 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupsList.test.tsx +++ /dev/null @@ -1,439 +0,0 @@ -import { cleanup, render, screen, waitFor } from "@testing-library/react" -import userEvent from "@testing-library/user-event" -import { PortalProvider } from "@cloudoperators/juno-ui-components" -import { i18n } from "@lingui/core" -import { I18nProvider } from "@lingui/react" -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import { SecurityGroups } from "./SecurityGroupsList" -import { trpcReact } from "@/client/trpcClient" -import type { SecurityGroup } from "@/server/Network/types/securityGroup" - -// Simplified mock for tRPC useQuery - only includes properties actually used -type MockQueryResult = { - data: TData | undefined - isLoading: boolean - isError: boolean - error: { message?: string } | null - trpc: { path: string } -} - -const createMockQueryResult = (overrides: Partial> = {}) => - ({ - data: undefined, - isLoading: false, - isError: false, - error: null, - trpc: { path: "network.securityGroup.list" }, - ...overrides, - }) as ReturnType - -// Mock the tRPC client -vi.mock("@/client/trpcClient", () => ({ - trpcReact: { - network: { - securityGroup: { - list: { - useQuery: vi.fn(), - }, - create: { - useMutation: vi.fn(() => ({ - mutateAsync: vi.fn(), - isPending: false, - })), - }, - update: { - useMutation: vi.fn(() => ({ - mutateAsync: vi.fn(), - isPending: false, - })), - }, - deleteById: { - useMutation: vi.fn(() => ({ - mutate: vi.fn(), - isPending: false, - })), - }, - }, - }, - useUtils: vi.fn(() => ({ - network: { - securityGroup: { - list: { - invalidate: vi.fn(), - setData: vi.fn(), - }, - getById: { - invalidate: vi.fn(), - setData: vi.fn(), - }, - }, - }, - })), - }, -})) - -// Mock useProjectId hook first, before router -vi.mock("@/client/hooks", () => ({ - useProjectId: () => "test-project", -})) - -// Mock TanStack Router hooks -vi.mock("@tanstack/react-router", async () => { - const actual = await vi.importActual("@tanstack/react-router") - return { - ...actual, - useNavigate: () => vi.fn(), - useParams: () => ({ accountId: "test-account", projectId: "test-project" }), - } -}) - -// Mock CreateSecurityGroupModal -vi.mock("./-components/-modals/CreateSecurityGroupModal", () => ({ - CreateSecurityGroupModal: () =>
Create Modal
, -})) - -// Mock SecurityGroupListContainer -vi.mock("./-components/SecurityGroupListContainer", () => ({ - SecurityGroupListContainer: ({ - securityGroups, - isLoading, - isError, - error, - permissions, - }: { - securityGroups: SecurityGroup[] - isLoading: boolean - isError: boolean - error: { message?: string } | null - permissions: { canCreate: boolean; canUpdate: boolean; canDelete: boolean; canManageAccess: boolean } - }) => ( -
- {isLoading &&
Loading...
} - {isError &&
{error?.message || "Error"}
} - {!isLoading && !isError && ( -
- {securityGroups.length} security groups -
{JSON.stringify(permissions)}
-
- )} -
- ), -})) - -const mockSecurityGroups: SecurityGroup[] = [ - { - id: "sg-1", - name: "default", - description: "Default security group", - project_id: "project-1", - tenant_id: "tenant-1", - created_at: "2024-01-01T00:00:00Z", - updated_at: "2024-01-01T00:00:00Z", - revision_number: 1, - tags: [], - stateful: true, - shared: false, - security_group_rules: [], - }, - { - id: "sg-2", - name: "web-servers", - description: "Security group for web servers", - project_id: "project-1", - tenant_id: "tenant-1", - created_at: "2024-01-02T00:00:00Z", - updated_at: "2024-01-02T00:00:00Z", - revision_number: 1, - tags: [], - stateful: true, - shared: true, - security_group_rules: [], - }, -] - -const createWrapper = () => { - const queryClient = new QueryClient({ - defaultOptions: { - queries: { - retry: false, - }, - }, - }) - - return ({ children }: { children: React.ReactNode }) => ( - - - {children} - - - ) -} - -describe("SecurityGroups", () => { - beforeEach(() => { - i18n.activate("en") - }) - - afterEach(() => { - cleanup() - vi.clearAllMocks() - }) - - describe("Component rendering", () => { - it.skip("renders with SecurityGroupListContainer", async () => { - vi.mocked(trpcReact.network.securityGroup.list.useQuery).mockReturnValue( - createMockQueryResult({ - data: mockSecurityGroups, - }) - ) - - render(, { wrapper: createWrapper() }) - - // Give it a moment to render - await new Promise((resolve) => setTimeout(resolve, 100)) - - expect(screen.getByTestId("security-group-list-container")).toBeInTheDocument() - }) - - it.skip("passes correct default permissions", async () => { - vi.mocked(trpcReact.network.securityGroup.list.useQuery).mockReturnValue( - createMockQueryResult({ - data: mockSecurityGroups, - }) - ) - - render(, { wrapper: createWrapper() }) - - // Give it a moment to render - await new Promise((resolve) => setTimeout(resolve, 100)) - - const permissionsElement = screen.getByTestId("permissions") - expect(permissionsElement.textContent).toBe( - JSON.stringify({ - canCreate: true, - canUpdate: true, - canDelete: true, - canManageAccess: true, - }) - ) - }) - }) - - describe("tRPC query", () => { - it("calls tRPC with default sort parameters", () => { - const mockUseQuery = vi.mocked(trpcReact.network.securityGroup.list.useQuery) - mockUseQuery.mockReturnValue(createMockQueryResult({ data: [] })) - - render(, { wrapper: createWrapper() }) - - expect(mockUseQuery).toHaveBeenCalledWith( - { - project_id: "test-project", - sort_key: "name", - sort_dir: "asc", - }, - { - enabled: true, - } - ) - }) - - it("passes loading state", () => { - vi.mocked(trpcReact.network.securityGroup.list.useQuery).mockReturnValue( - createMockQueryResult({ - isLoading: true, - }) - ) - - render(, { wrapper: createWrapper() }) - - expect(screen.getByText("Loading...")).toBeInTheDocument() - }) - - it.skip("passes error state", async () => { - vi.mocked(trpcReact.network.securityGroup.list.useQuery).mockReturnValue( - createMockQueryResult({ - isError: true, - error: { message: "Failed to fetch" }, - }) - ) - - render(, { wrapper: createWrapper() }) - - // Give it a moment to render - await new Promise((resolve) => setTimeout(resolve, 100)) - - expect(screen.getByTestId("error")).toHaveTextContent("Failed to fetch") - }) - - it.skip("passes security groups data", async () => { - vi.mocked(trpcReact.network.securityGroup.list.useQuery).mockReturnValue( - createMockQueryResult({ - data: mockSecurityGroups, - }) - ) - - render(, { wrapper: createWrapper() }) - - // Give it a moment to render - await new Promise((resolve) => setTimeout(resolve, 100)) - - expect(screen.getByTestId("security-groups-data")).toHaveTextContent("2 security groups") - }) - }) - - describe("Sort functionality", () => { - it("updates sort when field changes", async () => { - const mockUseQuery = vi.mocked(trpcReact.network.securityGroup.list.useQuery) - mockUseQuery.mockReturnValue(createMockQueryResult({ data: mockSecurityGroups })) - - const user = userEvent.setup() - render(, { wrapper: createWrapper() }) - - const sortSelect = screen.getByTestId("sort-select") - await user.click(sortSelect) - await user.click(screen.getByText("Project id")) - - await waitFor(() => { - const lastCall = mockUseQuery.mock.calls[mockUseQuery.mock.calls.length - 1][0] - expect(lastCall).toMatchObject({ - sort_key: "project_id", - sort_dir: "asc", - }) - }) - }) - - it("toggles sort direction", async () => { - const mockUseQuery = vi.mocked(trpcReact.network.securityGroup.list.useQuery) - mockUseQuery.mockReturnValue(createMockQueryResult({ data: mockSecurityGroups })) - - const user = userEvent.setup() - render(, { wrapper: createWrapper() }) - - const directionToggle = screen.getByTestId("direction-toggle") - await user.click(directionToggle) - - await waitFor(() => { - const lastCall = mockUseQuery.mock.calls[mockUseQuery.mock.calls.length - 1][0] - expect(lastCall).toMatchObject({ - sort_key: "name", - sort_dir: "desc", - }) - }) - }) - }) - - describe("Filter functionality", () => { - it("applies boolean filter to query", async () => { - const mockUseQuery = vi.mocked(trpcReact.network.securityGroup.list.useQuery) - mockUseQuery.mockReturnValue(createMockQueryResult({ data: mockSecurityGroups })) - - const user = userEvent.setup() - render(, { wrapper: createWrapper() }) - - const filterSelect = screen.getByTestId("select-filterValue") - await user.click(filterSelect) - await user.click(screen.getByTestId("shared")) - - const combobox = screen.getByTestId("combobox-filterValue") - await user.click(combobox.querySelector(".juno-combobox-toggle")!) - await user.click(screen.getByTestId("true")) - - await waitFor(() => { - const lastCall = mockUseQuery.mock.calls[mockUseQuery.mock.calls.length - 1][0] - expect(lastCall).toMatchObject({ shared: true }) - }) - }) - - it("converts string 'false' to boolean", async () => { - const mockUseQuery = vi.mocked(trpcReact.network.securityGroup.list.useQuery) - mockUseQuery.mockReturnValue(createMockQueryResult({ data: mockSecurityGroups })) - - const user = userEvent.setup() - render(, { wrapper: createWrapper() }) - - const filterSelect = screen.getByTestId("select-filterValue") - await user.click(filterSelect) - await user.click(screen.getByTestId("shared")) - - const combobox = screen.getByTestId("combobox-filterValue") - await user.click(combobox.querySelector(".juno-combobox-toggle")!) - await user.click(screen.getByTestId("false")) - - await waitFor(() => { - const lastCall = mockUseQuery.mock.calls[mockUseQuery.mock.calls.length - 1][0] - expect(lastCall).toMatchObject({ shared: false }) - }) - }) - }) - - describe("Search functionality", () => { - it("includes search term in query", async () => { - const mockUseQuery = vi.mocked(trpcReact.network.securityGroup.list.useQuery) - mockUseQuery.mockReturnValue(createMockQueryResult({ data: mockSecurityGroups })) - - const user = userEvent.setup() - render(, { wrapper: createWrapper() }) - - const searchbox = screen.getByRole("searchbox") - await user.type(searchbox, "web") - - const searchButton = screen.getByRole("button", { name: "Search" }) - await user.click(searchButton) - - await waitFor(() => { - const lastCall = mockUseQuery.mock.calls[mockUseQuery.mock.calls.length - 1][0] - expect(lastCall).toMatchObject({ searchTerm: "web" }) - }) - }) - - it("excludes empty search term", () => { - const mockUseQuery = vi.mocked(trpcReact.network.securityGroup.list.useQuery) - mockUseQuery.mockReturnValue(createMockQueryResult({ data: mockSecurityGroups })) - - render(, { wrapper: createWrapper() }) - - const initialCall = mockUseQuery.mock.calls[0][0] as Record - expect("searchTerm" in initialCall).toBe(false) - }) - }) - - describe("Integration", () => { - it("combines sort, filter, and search parameters", async () => { - const mockUseQuery = vi.mocked(trpcReact.network.securityGroup.list.useQuery) - mockUseQuery.mockReturnValue(createMockQueryResult({ data: mockSecurityGroups })) - - const user = userEvent.setup() - render(, { wrapper: createWrapper() }) - - // Change sort - const sortSelect = screen.getByTestId("sort-select") - await user.click(sortSelect) - await user.click(screen.getByText("Project id")) - - // Apply filter - const filterSelect = screen.getByTestId("select-filterValue") - await user.click(filterSelect) - await user.click(screen.getByTestId("shared")) - - const combobox = screen.getByTestId("combobox-filterValue") - await user.click(combobox.querySelector(".juno-combobox-toggle")!) - await user.click(screen.getByTestId("true")) - - // Search - const searchbox = await screen.findByRole("searchbox") - await user.type(searchbox, "web") - - await waitFor(() => { - const lastCall = mockUseQuery.mock.calls[mockUseQuery.mock.calls.length - 1][0] - expect(lastCall).toMatchObject({ - project_id: "test-project", - sort_key: "project_id", - sort_dir: "asc", - shared: true, - searchTerm: "web", - }) - }) - }) - }) -}) diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupsList.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupsList.tsx index 75470be4d..6a76e0dd3 100644 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupsList.tsx +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-components/SecurityGroupsList.tsx @@ -1,89 +1,105 @@ import { useState } from "react" import { Trans, useLingui } from "@lingui/react/macro" -import { useNavigate } from "@tanstack/react-router" -import { Button } from "@cloudoperators/juno-ui-components" +import { useNavigate, useSearch } from "@tanstack/react-router" +import { Button, Stack, DataGridToolbar, SearchInput } from "@cloudoperators/juno-ui-components" import { trpcReact } from "@/client/trpcClient" -import { ListToolbar } from "@/client/components/ListToolbar" -import { buildFilterParams } from "@/client/utils/buildFilterParams" -import { useListWithFiltering } from "@/client/utils/useListWithFiltering" -import { useProjectId } from "@/client/hooks" +import { SortInput } from "@/client/components/ListToolbar/SortInput" +import { SelectedFilters } from "@/client/components/ListToolbar/SelectedFilters" +import { FiltersInput } from "@/client/components/ListToolbar/FiltersInput" +import { FilterSettings, SortSettings } from "@/client/components/ListToolbar/types" import { SecurityGroupListContainer } from "./SecurityGroupListContainer" import { CreateSecurityGroupModal } from "./-modals/CreateSecurityGroupModal" import { CreateSecurityGroupInput, UpdateSecurityGroupInput } from "@/server/Network/types/securityGroup" - -// Security group shared filter constants -const SECURITY_GROUP_SHARED = { - TRUE: "true", - FALSE: "false", -} as const +import { parseFiltersFromUrl, buildFilterParams, buildUrlSearchParams, applyFilterSelection } from "../urlHelpers" +import { useSecurityGroupPermissions } from "../-hooks/useSecurityGroupPermissions" type SecurityGroupSortKey = "name" | "project_id" -export const SecurityGroups = () => { +type SecurityGroupsSearchParams = { + shared?: string + search?: string + sortBy?: string + sortDirection?: "asc" | "desc" +} + +type RequiredSortSettings = { + options: SortSettings["options"] + sortBy: string + sortDirection: "asc" | "desc" +} + +interface SecurityGroupsProps { + project: string +} + +export const SecurityGroups = ({ project: projectId }: SecurityGroupsProps) => { const { t } = useLingui() const navigate = useNavigate() - const projectId = useProjectId() + const searchParams = useSearch({ strict: false }) as SecurityGroupsSearchParams + const [sortSettings, setSortSettings] = useState({ + options: [ + { label: t`Name`, value: "name" }, + { label: t`Project id`, value: "project_id" }, + ], + sortBy: searchParams.sortBy || "name", + sortDirection: searchParams.sortDirection || "asc", + }) + + const [filterSettings, setFilterSettings] = useState({ + filters: [ + { + displayName: t`Shared`, + filterName: "shared", + values: ["true", "false"], + supportsMultiValue: false, + }, + ], + selectedFilters: parseFiltersFromUrl(searchParams), + }) + + const [searchTerm, setSearchTerm] = useState(searchParams.search || "") const [createModalOpen, setCreateModalOpen] = useState(false) const [deleteError, setDeleteError] = useState(null) const [createError, setCreateError] = useState(null) const [updateError, setUpdateError] = useState(null) - const { searchTerm, sortSettings, filterSettings, handleSearchChange, handleSortChange, handleFilterChange } = - useListWithFiltering({ - defaultSortKey: "name", - defaultSortDir: "asc", - sortOptions: [ - { label: t`Name`, value: "name" }, - { label: t`Project id`, value: "project_id" }, - ], - filterSettings: { - filters: [ - { - displayName: t`Shared`, - filterName: "shared", - values: Object.values(SECURITY_GROUP_SHARED), - supportsMultiValue: false, - }, - ], - }, - }) - const utils = trpcReact.useUtils() - // TODO: replace with trpc.network.canUser when security group permissions are available - const permissions = { - canCreate: true, - canUpdate: true, - canDelete: true, - canManageAccess: true, - } + const urlFilters = parseFiltersFromUrl(searchParams) + const urlSortBy = (searchParams.sortBy || "name") as SecurityGroupSortKey + const urlSortDirection = searchParams.sortDirection || "asc" + const urlSearchTerm = searchParams.search || "" const { - data: securityGroups = [], + data: securityGroupsData, isLoading, isError, error, } = trpcReact.network.securityGroup.list.useQuery( { project_id: projectId || "", - sort_key: sortSettings.sortBy, - sort_dir: sortSettings.sortDirection, - ...buildFilterParams(filterSettings), - ...(searchTerm ? { searchTerm } : {}), + sort_key: urlSortBy, + sort_dir: urlSortDirection, + ...buildFilterParams(urlFilters, filterSettings.filters), + ...(urlSearchTerm ? { searchTerm: urlSearchTerm } : {}), }, { - enabled: !!projectId, + refetchOnWindowFocus: false, } ) + const securityGroups = securityGroupsData || [] + const listError = + isError && error?.data?.code === "FORBIDDEN" ? t`You do not have permission to view security groups` : null + + const { permissions } = useSecurityGroupPermissions(projectId) + const createSecurityGroupMutation = trpcReact.network.securityGroup.create.useMutation({ onSuccess: (createdSecurityGroup) => { - // Invalidate and refetch the security groups list utils.network.securityGroup.list.invalidate() + utils.network.securityGroup.getById.invalidate() setCreateError(null) - - // Navigate to the details page of the newly created security group navigate({ to: "/projects/$projectId/network/securitygroups/$securityGroupId", params: { @@ -93,31 +109,28 @@ export const SecurityGroups = () => { }) }, onError: (error) => { - // Backend handles error parsing, just display the message setCreateError(error.message || t`Failed to create security group`) }, }) const deleteSecurityGroupMutation = trpcReact.network.securityGroup.deleteById.useMutation({ onSuccess: () => { - // Invalidate and refetch the security groups list utils.network.securityGroup.list.invalidate() + utils.network.securityGroup.getById.invalidate() setDeleteError(null) }, onError: (error) => { - // Backend handles error parsing, just display the message setDeleteError(error.message || t`Failed to delete security group`) }, }) const updateSecurityGroupMutation = trpcReact.network.securityGroup.update.useMutation({ onSuccess: () => { - // Invalidate and refetch the security groups list utils.network.securityGroup.list.invalidate() + utils.network.securityGroup.getById.invalidate() setUpdateError(null) }, onError: (error) => { - // Backend handles error parsing, just display the message setUpdateError(error.message || t`Failed to update security group`) }, }) @@ -140,29 +153,143 @@ export const SecurityGroups = () => { await updateSecurityGroupMutation.mutateAsync({ project_id: projectId, securityGroupId, ...data }) } + const handleClearUpdateError = () => { + setUpdateError(null) + } + + const handleSortChange = (newSortSettings: SortSettings) => { + const settings: RequiredSortSettings = { + options: newSortSettings.options, + sortBy: newSortSettings.sortBy?.toString() || "name", + sortDirection: newSortSettings.sortDirection || "asc", + } + setSortSettings(settings) + navigate({ + search: ((prev: SecurityGroupsSearchParams) => ({ + ...prev, + sortBy: settings.sortBy, + sortDirection: settings.sortDirection, + })) as unknown as true, + replace: true, + }) + } + + const handleFilterChange = (newFilterSettings: FilterSettings) => { + setFilterSettings(newFilterSettings) + navigate({ + search: ((prev: SecurityGroupsSearchParams) => + buildUrlSearchParams(newFilterSettings.selectedFilters || [], newFilterSettings.filters, { + search: prev.search, + sortBy: prev.sortBy, + sortDirection: prev.sortDirection, + })) as unknown as true, + replace: true, + }) + } + + const handleSearchChange = (term: string | number | string[] | undefined) => { + const searchValue = typeof term === "string" ? term : "" + setSearchTerm(searchValue) + navigate({ + search: ((prev: SecurityGroupsSearchParams) => ({ + ...prev, + search: searchValue || undefined, + })) as unknown as true, + replace: true, + }) + } + + if (isLoading) { + return ( + + Loading... + + ) + } + + if (isError && !securityGroups.length) { + return ( + + {listError || t`Failed to load security groups`} + + ) + } + return ( -
- setCreateModalOpen(true)} variant="primary"> + <> + + + + handleSortChange({ ...sortSettings, sortBy: v, sortDirection: sortSettings.sortDirection }) + } + onSortDirectionChange={(dir) => handleSortChange({ ...sortSettings, sortDirection: dir })} + /> + {permissions.canCreate && ( + - ) - } - /> + )} + + + + + + + { + const newSelected = applyFilterSelection( + filterSettings.selectedFilters || [], + selected, + filterSettings.filters + ) + if (newSelected === (filterSettings.selectedFilters || [])) return + handleFilterChange({ ...filterSettings, selectedFilters: newSelected }) + }} + /> + ) => { + const v = e.currentTarget.value + setSearchTerm(v) + }} + onSearch={(v) => { + handleSearchChange(typeof v === "string" ? v : "") + }} + onClear={() => { + setSearchTerm("") + handleSearchChange("") + }} + /> + + {filterSettings.selectedFilters && filterSettings.selectedFilters.length > 0 && ( + + handleFilterChange({ + ...filterSettings, + selectedFilters: (filterSettings.selectedFilters || []).filter( + (f) => !(f.name === filterToRemove.name && f.value === filterToRemove.value) + ), + }) + } + onClear={() => handleFilterChange({ ...filterSettings, selectedFilters: [] })} + /> + )} + + setCreateModalOpen(true)} onDeleteSecurityGroup={handleDeleteSecurityGroup} @@ -172,15 +299,17 @@ export const SecurityGroups = () => { isUpdatingSecurityGroup={updateSecurityGroupMutation.isPending} updateError={updateError} currentProjectId={projectId} + hasAnyBulkAction={false} + onClearUpdateError={handleClearUpdateError} /> setCreateModalOpen(false)} onCreate={handleCreateSecurityGroup} - isLoading={createSecurityGroupMutation.isPending} + isLoading={false} error={createError} /> -
+ ) } diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-hooks/useSecurityGroupPermissions.ts b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-hooks/useSecurityGroupPermissions.ts new file mode 100644 index 000000000..068c4bbc5 --- /dev/null +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/-hooks/useSecurityGroupPermissions.ts @@ -0,0 +1,79 @@ +import { trpcReact } from "@/client/trpcClient" + +export interface SecurityGroupPermissions { + canView: boolean + canCreate: boolean + canUpdate: boolean + canDelete: boolean + canCreateRule: boolean + canDeleteRule: boolean + canManageAccess: boolean + canViewRBAC: boolean +} + +/** + * Hook to fetch security group permissions for the current user + * Uses React Query with infinite cache since permissions don't change during session + */ +export function useSecurityGroupPermissions(projectId: string) { + const { + data: permissions = { + canView: false, + canCreate: false, + canUpdate: false, + canDelete: false, + canCreateRule: false, + canDeleteRule: false, + canManageAccess: false, + canViewRBAC: false, + }, + isLoading, + isError, + } = trpcReact.network.canUser.useQuery( + { + project_id: projectId || "", + permission: [ + "network:security_groups:read", + "network:security_groups:create", + "network:security_groups:update", + "network:security_groups:delete", + "network:security_group_rules:create", + "network:security_group_rules:delete", + "network:rbac_policies:create", + "network:rbac_policies:delete", + "network:rbac_policies:read", + ], + }, + { + enabled: Boolean(projectId), // Only fetch if we have a project ID + select: ([ + canView, + canCreate, + canUpdate, + canDelete, + canCreateRule, + canDeleteRule, + canCreateRBAC, + canDeleteRBAC, + canViewRBAC, + ]) => ({ + canView, + canCreate, + canUpdate, + canDelete, + canCreateRule, + canDeleteRule, + canManageAccess: canCreateRBAC && canDeleteRBAC, + canViewRBAC, + }), + staleTime: Infinity, // Permissions don't change during session + gcTime: Infinity, // Keep in cache forever (previously cacheTime) + } + ) + + return { + permissions, + isLoading, + isError, + } +} diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/index.tsx b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/index.tsx index 822a07066..d0c7b240e 100644 --- a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/index.tsx +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/index.tsx @@ -21,10 +21,17 @@ export const Route = createFileRoute("/_auth/projects/$projectId/network/securit function RouteComponent() { const { t } = useLingui() + const { projectId } = Route.useParams() + const { trpcClient } = Route.useRouteContext() + + if (!trpcClient) { + throw new Error("trpcClient is not available in route context") + } + return ( <> {t`Security Groups`} - + ) } diff --git a/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/urlHelpers.ts b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/urlHelpers.ts new file mode 100644 index 000000000..ea69a5647 --- /dev/null +++ b/packages/aurora/src/client/routes/_auth/projects/$projectId/network/securitygroups/urlHelpers.ts @@ -0,0 +1,122 @@ +import { SelectedFilter, Filter } from "@/client/components/ListToolbar/types" + +type SecurityGroupsSearchParams = { + shared?: string + search?: string + sortBy?: string + sortDirection?: "asc" | "desc" +} + +/** + * Parses URL search params into SelectedFilter array for ListToolbar + */ +export const parseFiltersFromUrl = (searchParams: SecurityGroupsSearchParams): SelectedFilter[] => { + const filters: SelectedFilter[] = [] + + // Shared filter + if (searchParams.shared) { + filters.push({ name: "shared", value: searchParams.shared }) + } + + return filters +} + +/** + * Builds filter parameters for API request from SelectedFilter array + */ +export const buildFilterParams = ( + selectedFilters: SelectedFilter[], + filterDefinitions: Filter[] +): Record => { + const params: Record = {} + + if (!selectedFilters?.length) return params + + // Group selected filters by filter name + const filterGroups = selectedFilters + .filter((sf) => !sf.inactive) + .reduce( + (acc, sf) => { + if (!acc[sf.name]) acc[sf.name] = [] + acc[sf.name].push(sf.value) + return acc + }, + {} as Record + ) + + // Build parameters based on whether filter supports multiple values + Object.entries(filterGroups).forEach(([filterName, values]) => { + const filterDef = filterDefinitions.find((f) => f.filterName === filterName) + + if (filterDef?.supportsMultiValue && values.length > 1) { + params[filterName] = `in:${values.join(",")}` + } else { + params[filterName] = values[0] + } + }) + + return params +} + +/** + * Merges a newly selected filter into the current list. + * - Ignores duplicates (same name + value). + * - For single-value filters, replaces any existing entry with the same name. + * - For multi-value filters, appends. + */ +export const applyFilterSelection = ( + current: SelectedFilter[], + selected: SelectedFilter, + filterDefinitions: Filter[] +): SelectedFilter[] => { + const alreadySelected = current.some((f) => f.name === selected.name && f.value === selected.value) + if (alreadySelected) return current + + const supportsMulti = filterDefinitions.find((f) => f.filterName === selected.name)?.supportsMultiValue + return supportsMulti ? [...current, selected] : [...current.filter((f) => f.name !== selected.name), selected] +} + +/** + * Builds URL search params object from filter settings for navigation + */ +export const buildUrlSearchParams = ( + selectedFilters: SelectedFilter[], + filterDefinitions: Filter[], + baseParams: { + search?: string + sortBy?: string + sortDirection?: "asc" | "desc" + } +): SecurityGroupsSearchParams => { + const newParams: SecurityGroupsSearchParams = { + search: baseParams.search, + sortBy: baseParams.sortBy, + sortDirection: baseParams.sortDirection, + } + + if (!selectedFilters?.length) return newParams + + const filterGroups = selectedFilters + .filter((sf) => !sf.inactive) + .reduce( + (acc, sf) => { + if (!acc[sf.name]) acc[sf.name] = [] + acc[sf.name].push(sf.value) + return acc + }, + {} as Record + ) + + Object.entries(filterGroups).forEach(([filterName, values]) => { + const filterDef = filterDefinitions.find((f) => f.filterName === filterName) + + if (filterDef?.supportsMultiValue && values.length > 1) { + // Type assertion needed because we're dynamically setting filter fields + ;(newParams as Record)[filterName] = `in:${values.join(",")}` + } else { + ;(newParams as Record)[filterName] = values[0] + } + }) + + return newParams +} diff --git a/packages/aurora/src/locales/de/messages.po b/packages/aurora/src/locales/de/messages.po index 30135c61e..055008503 100644 --- a/packages/aurora/src/locales/de/messages.po +++ b/packages/aurora/src/locales/de/messages.po @@ -43,6 +43,10 @@ msgstr "\"{objectName}\" wurde erfolgreich nach {destination} verschoben." msgid "\"{objectName}\" was successfully uploaded." msgstr "\"{objectName}\" wurde erfolgreich hochgeladen." +#. placeholder {0}: rules.length +msgid "{0} rules" +msgstr "" + msgid "{certificateIdValue} Certificate Details" msgstr "" @@ -106,6 +110,9 @@ msgstr "{totalCount, plural, one {Bucket leeren} other {Buckets leeren}}" msgid "{totalCount, plural, one {Empty Container} other {Empty # Containers}}" msgstr "{totalCount, plural, one {Container leeren} other {# Container leeren}}" +msgid "{totalCount} projects" +msgstr "" + msgid "{totalItemCount, plural, one {{filteredItemCount} of {totalItemCount} item} other {{filteredItemCount} of {totalItemCount} items}}" msgstr "{totalItemCount, plural, one {{filteredItemCount} von {totalItemCount} Element} other {{filteredItemCount} von {totalItemCount} Elementen}}" @@ -1966,6 +1973,9 @@ msgstr "Objekte werden geladen..." msgid "Loading Objects..." msgstr "Objekte werden geladen..." +msgid "Loading Permissions..." +msgstr "" + msgid "Loading preview..." msgstr "Vorschau wird geladen..." @@ -2266,9 +2276,6 @@ msgstr "Keine" msgid "Note: for <0>static and dynamic large objects only the manifests are deleted — their segments outside this folder prefix are not affected." msgstr "Hinweis: Für <0>statische und dynamische große Objekte werden nur die Manifeste gelöscht — ihre Segmente außerhalb dieses Ordnerpräfixes sind nicht betroffen." -msgid "Note: The 'stateful' attribute cannot be changed if this security group is currently in use by one or more ports." -msgstr "Hinweis: Das Attribut 'stateful' kann nicht geändert werden, wenn diese Security Group derzeit von einem oder mehreren Ports verwendet wird." - msgid "Object \"{displayName}\" was permanently deleted." msgstr "" @@ -2503,9 +2510,6 @@ msgstr "Projekt-ID" msgid "Project ID" msgstr "Projekt-ID" -msgid "projects" -msgstr "Projekte" - msgid "Projects" msgstr "Projekte" @@ -2677,9 +2681,6 @@ msgstr "Regeldetails:" msgid "Rule Type" msgstr "Regeltyp" -msgid "rules" -msgstr "Regeln" - msgid "Rules" msgstr "Regeln" @@ -2722,6 +2723,15 @@ msgstr "Images suchen..." msgid "Search objects..." msgstr "Objekte suchen..." +msgid "Search policies..." +msgstr "" + +msgid "Search rules..." +msgstr "" + +msgid "Search security groups..." +msgstr "" + msgid "Search..." msgstr "Suchen..." @@ -2866,9 +2876,16 @@ msgstr "ACLs-Vorschau anzeigen" msgid "Show Details" msgstr "Details anzeigen" +#. placeholder {0}: rules.length +msgid "Showing {0} of {totalRulesCount} rules" +msgstr "" + msgid "Showing {filteredCount} of {totalCount} {itemName}" msgstr "Zeige {filteredCount} von {totalCount} {itemName}" +msgid "Showing {filteredCount} of {totalCount} projects" +msgstr "" + msgid "Showing first {actualObjectCount} of {total} objects" msgstr "Erste {actualObjectCount} von {total} Objekten werden angezeigt" @@ -2914,6 +2931,9 @@ msgstr "State" msgid "Stateful" msgstr "Stateful" +msgid "Stateful security groups track connection state. This setting cannot be changed after creation." +msgstr "" + msgid "Static large object support" msgstr "Unterstützung für statische große Objekte" @@ -3607,6 +3627,9 @@ msgstr "" msgid "You can rename the object by changing the name here." msgstr "Sie können das Objekt umbenennen, indem Sie den Namen hier ändern." +msgid "You do not have permission to view security groups" +msgstr "" + msgid "You don't have permission to access flavor access information for this flavor." msgstr "Sie haben keine Berechtigung, auf die Zugriffsinformationen für diesen Flavor zuzugreifen." diff --git a/packages/aurora/src/locales/de/messages.ts b/packages/aurora/src/locales/de/messages.ts index 775031f45..b11f746af 100644 --- a/packages/aurora/src/locales/de/messages.ts +++ b/packages/aurora/src/locales/de/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+0B+ue\":[\"Projekte\"],\"+1rTEL\":[\"Import Externally Signed Certificate\"],\"+1xG4p\":[\"Click the button below to automatically generate credentials for this project. You only need to do this once.\"],\"+8m5QE\":[\"To access S3 Object Storage, you need EC2 credentials (access key + secret key). These credentials authenticate your requests to the Ceph storage backend.\"],\"+9CXS9\":[\"Images deaktivieren\"],\"+HVj+D\":[\"Add a Signed Certificate to your CA to activate it\"],\"+Jcye3\":[\"Keyname\"],\"+Lt5cp\":[\"Sie sind nicht berechtigt, Projektzugriffe hinzuzufügen. Bitte melden Sie sich erneut an.\"],\"+Nhol2\":[\"Certificate not found\"],\"+NwLgN\":[\"Durch die Aktivierung dieses Images kann es wieder zum Starten neuer Instances verwendet werden.\"],\"+Nx1wc\":[\"Floating IPs konnten nicht geladen werden\"],\"+OEi73\":[\"Object Storage (Swift)\"],\"+Pe7SS\":[\"Failed to delete policy\"],\"+nQTmZ\":[\"Dieses Projekt hat keinen Zugriff auf den Flavor.\"],\"+p6nHr\":[\"Fehler beim Laden der Objekt-Metadaten: \",[\"metadataErrorMessage\"]],\"+pJjJF\":[\"After restoring, this version's content will become the new latest version.\"],\"+rtZ8i\":[\"Version ID:\"],\"+zy2Nq\":[\"Typ\"],\"/0+NVm\":[\"What happens when suspended:\"],\"/1MfrG\":[\"\\\"\",[\"objectName\"],\"\\\" konnte nicht heruntergeladen werden: \",[\"errorMessage\"]],\"/9Squ9\":[\"Sie haben keine Berechtigung, die Details dieses Flavors anzuzeigen.\"],\"/AlhPT\":[\"Confirm deletion of \",[\"displayName\"],\". All objects inside this folder will be marked as deleted but can be restored from version history.\"],\"/BZLRP\":[\"Um diese Aktion zu bestätigen, geben Sie das Wort <0>“detach” in das Feld unten ein.\"],\"/EcdUM\":[\"Ihre Aktion ist erforderlich\"],\"/HejCc\":[\"This bucket does not have a policy attached.\"],\"/HgF9q\":[\"Sortieren nach\"],\"/InK0O\":[\"Gesamtspeicher\"],\"/LXXlY\":[\"Properties of \\\"\",[\"displayName\"],\"\\\" were successfully updated.\"],\"/LqWNN\":[\"\\\"\",[\"objectName\"],\"\\\" konnte nicht gelöscht werden: \",[\"errorMessage\"]],\"/NeNjH\":[\"Eigenschaften des Containers \\\"\",[\"containerName\"],\"\\\" wurden erfolgreich aktualisiert.\"],\"/Nmxy/\":[\"Keine Keypaare verfügbar\"],\"/QIkBY\":[\"<0>Sicher & Zuverlässig: Ihre Daten und Operationen sind mit Sicherheitsstandards auf Unternehmensebene und robuster Zuverlässigkeit geschützt.\"],\"/Qox3b\":[\"Ein Ordner mit diesem Namen existiert bereits\"],\"/Z5n1b\":[\"Ordner erstellen unter:\"],\"/bUiYk\":[\"Router-ID\"],\"/eFtWI\":[\"RBAC-Richtlinien\"],\"/fwE6J\":[\"Older\"],\"/pOQrn\":[\"This action is irreversible. Deleting a bucket permanently removes it and cannot be undone. The bucket must be empty before deletion.\"],\"/xnbdQ\":[\"Der angegebene Benutzer hat Zugriff. Ein Token für den Benutzer (auf ein beliebiges Projekt bezogen) muss in der Anfrage enthalten sein.\"],\"01/uUD\":[\"Segmente beibehalten (nur Manifest löschen)\"],\"07WXfc\":[\"Der Server hat ein unerwartetes Datenformat für die Metadata zurückgegeben.\"],\"0BSSYj\":[\"Ein Serverfehler ist aufgetreten, während der Projektzugriff entfernt wurde. Bitte versuchen Sie es später noch einmal.\"],\"0Gd0NU\":[\"Geteilt\"],\"0P2gFy\":[\"Die gesuchte Seite existiert nicht.\"],\"0Th0CH\":[[\"selectedCount\",\"plural\",{\"one\":[\"Container leeren\"],\"other\":[\"#\",\" Container leeren\"]}]],\"0WsqO0\":[\"Container geleert\"],\"0cVgUw\":[\"Filtern nach\"],\"0cl0a5\":[\"Images suchen...\"],\"0eY8Mz\":[\"Für dieses Projekt sind keine Floating IPs verfügbar. Floating IPs ermöglichen es, öffentliche IP-Adressen Instances zuzuordnen.\"],\"0efWir\":[[\"totalCount\",\"plural\",{\"one\":[\"Container leeren\"],\"other\":[\"#\",\" Container leeren\"]}]],\"0i3NVD\":[\"Delete Version Permanently\"],\"0kCt7e\":[\"Die angegebenen Flavor-Daten sind ungültig. Bitte überprüfen Sie Ihre Eingabe.\"],\"0kc0zi\":[\"Beim Löschen des Metadata ist ein Serverfehler aufgetreten. Bitte versuchen Sie es später erneut.\"],\"0o0OhW\":[\"No objects found.\"],\"0p+s6m\":[\"Typ: \",[\"typeValue\"],\", Code: \",[\"codeValue\"]],\"0u9jhd\":[\"Das Trennen dieser Floating IP hebt die Zuordnung zum aktuellen Port auf. Die Instance ist über diese Adresse nicht mehr erreichbar.\"],\"16085O\":[\"IP-Version\"],\"1DbiGM\":[\"Issuing Self-Signed Certificate...\"],\"1DzQpj\":[\"This folder is empty, use New Folder to create one.\"],\"1H2g6v\":[\"Objekt wird verschoben...\"],\"1NFtQz\":[\"Failed to Delete Bucket\"],\"1NS3nd\":[[\"emptiedCount\",\"plural\",{\"one\":[\"#\",\" Container\"],\"other\":[\"#\",\" Container\"]}],\" erfolgreich geleert. \",[\"totalDeleted\",\"plural\",{\"one\":[\"#\",\" Objekt\"],\"other\":[\"#\",\" Objekte\"]}],\" insgesamt gelöscht.\"],\"1RwosK\":[\"Zielprojekt-ID ist erforderlich\"],\"1UzENP\":[\"Nein\"],\"1VDqZj\":[\"<0>Zukunftssicher: Aurora ist darauf ausgelegt, sich mit den neuesten Trends in der Cloud-Technologie weiterzuentwickeln und stellt so sicher, dass Ihre Lösung immer auf dem neuesten Stand ist.\"],\"1W3TqV\":[\"No new versions will be created\"],\"1bj2LS\":[\"Could not restore \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"1iQtS2\":[\"Erste \",[\"actualObjectCount\"],\" von \",[\"total\"],\" Objekten werden angezeigt\"],\"1iUuTT\":[\"Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.\"],\"1mFMeP\":[\"Delete Versions\"],\"1ojTVo\":[\"DNS-Domain auswählen.\"],\"1pGUZa\":[\"Sitzung läuft ab in\"],\"1pdLQw\":[\"Image nicht gefunden\"],\"1rLu3+\":[\"Container \\\"\",[\"containerName\"],\"\\\" konnte nicht geleert werden: \",[\"errorMessage\"]],\"1rPB1p\":[\"Der Flavor oder das Projekt konnte nicht gefunden werden. Bitte überprüfen Sie, ob sie existieren.\"],\"1t/NnN\":[\"Ablehnen\"],\"1zZ1IK\":[\"Hallo\"],\"20E+79\":[\"Sie müssen sich anmelden, um auf diese Seite zuzugreifen.\"],\"20Kpaw\":[\"Flavor \\\"\",[\"flavorName\"],\"\\\" wurde erfolgreich gelöscht.\"],\"20axE5\":[\"Vom Projekt geteilt\"],\"23wBCX\":[\"Öffentlicher Lesezugriff\"],\"2G+7C1\":[\"Enter a name for the new folder.\"],\"2G6hLq\":[\"Lösche \",[\"specKey\"]],\"2Inn83\":[\"Bulk-Upload von Archivdateien\"],\"2PRzsq\":[\"Could not create folder \\\"\",[\"folderPath\"],\"\\\": \",[\"errorMessage\"]],\"2TtIL2\":[\"Gespeichert als X-Object-Meta-*-Header. Schlüssel sind nicht zwischen Groß- und Kleinschreibung unterscheidend.\"],\"2cJIlz\":[\"Floating Network-ID\"],\"2d/OiW\":[\"Geben Sie Ihren Benutzernamen ein\"],\"2dnZwV\":[\"Ordner \\\"\",[\"folderName\"],\"\\\" konnte nicht gelöscht werden: \",[\"errorMessage\"]],\"2gH+i8\":[\"Sie sind nicht berechtigt, Flavors zu löschen. Bitte melden Sie sich erneut an.\"],\"2mbisJ\":[\"Metadaten \\\"\",[\"trimmedKey\"],\"\\\" wurden erfolgreich hinzugefügt.\"],\"2q/Q7x\":[\"Sichtbarkeit\"],\"2xOCJW\":[\"This action cannot be undone.\"],\"2xbYVD\":[\"Could not update \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"2ysnjX\":[\"<0>Erhöhte Produktivität: Durch die Reduzierung der betrieblichen Komplexität hilft Aurora Ihrem Team, sich auf das Wesentliche zu konzentrieren – Innovationen voranzutreiben und Geschäftserfolg zu sichern.\"],\"2zceEg\":[\"Diese Aktion kann nicht rückgängig gemacht werden. Das Image wird dauerhaft gelöscht.\"],\"33F2A+\":[\"Geben Sie den Container-Namen zur Bestätigung ein\"],\"3Qn0me\":[\"Mitglied hinzufügen\"],\"3dBmvU\":[\"Der Container kann nicht gelöscht werden, da er Objekte enthält. Leeren Sie den Container zuerst.\"],\"3n+vCm\":[\"Benutzerdefinierte Dauer (Minuten)\"],\"3nWqQW\":[\"Sie sind nicht berechtigt, Metadata anzusehen. Bitte melden Sie sich erneut an.\"],\"3nh/7E\":[\"Wenn diese Option aktiviert ist, wird dieser Flavor für alle Projekte verfügbar sein. Wenn sie deaktiviert ist, muss der Zugriff explizit für bestimmte Projekt gewährt werden.\"],\"3oChIh\":[\"<0>Vereinheitlichtes Cloud-Management: Konsolidiert alle Ihre Cloud-Ressourcen in einer intuitiven Oberfläche.\"],\"3oc18/\":[\"Private Flavors konnten nicht geladen werden. Die angezeigte Liste ist möglicherweise unvollständig.\"],\"3q1GLx\":[\"Datei-Upload ausstehend...\"],\"3uDz8n\":[\"Import Signed Certificate\"],\"3x7Sws\":[\"Security Group-Details werden geladen...\"],\"4+2wZO\":[\"Back to Certificate Authorities Details page\"],\"46gjWc\":[\"Delete Folder \\\"\",[\"displayName\"],\"\\\"\"],\"47eI0x\":[\"Die Beschreibung muss mindestens 1 Zeichen lang sein.\"],\"48QXFO\":[\"Erwartetes Format: JJJJ-MM-TT HH:mm:ss\"],\"48bMai\":[\"Bucket name is required\"],\"4BITzH\":[\"Error:\"],\"4EZrJN\":[\"Regeln\"],\"4O2AH3\":[\"Mitglied \\\"\",[\"memberIdToRemove\"],\"\\\" wurde erfolgreich entfernt.\"],\"4bLttB\":[\"Folder name is too long (max 255 characters)\"],\"4fh0Wj\":[\"Boot-Größe\"],\"4fvDRe\":[\"Zu aktivierende Images:\"],\"4fvcmm\":[\"Objekt wird hochgeladen als: <0>\",[\"selectedObjectName\"],\"\"],\"4h3Eyf\":[\"\\\"\",[\"objectName\"],\"\\\" wurde erfolgreich hochgeladen.\"],\"4kjaAc\":[\"Keine Servergruppen verfügbar\"],\"4mbrAq\":[\"1 Minute\"],\"4opp4r\":[\"Security Groups\"],\"4pOfUd\":[\"Unsere Mission\"],\"4t33sh\":[\"Fehler beim Aktualisieren des Objekts\"],\"4uXhtt\":[\"CIDR\"],\"4utWB4\":[\"Serverrolle:\"],\"5+FeN2\":[\"URL teilen\"],\"5/wyf8\":[\"Floating IP eingeben\"],\"56IxdF\":[\"Fehler beim Laden der Container-Objekte: \",[\"errorMessage\"]],\"5BLR6Q\":[\"IPv4\"],\"5JDSvn\":[\"Maximale Metadaten-Wertlänge\"],\"5M4Te3\":[\"DNS\"],\"5MF8U2\":[\"Fehler beim Aktualisieren des Containers\"],\"5Od/iS\":[\"Empty the bucket\"],\"5Okch2\":[\"Leeren:\"],\"5PhMH2\":[\"Failed to Suspend Versioning\"],\"5Yrl6N\":[\"Lädt Servergruppen\"],\"5aNQ3F\":[\"\\\"\",[\"objectName\"],\"\\\" wurde erfolgreich nach \",[\"destination\"],\" kopiert.\"],\"5g7owI\":[\"Floating IP wird aktualisiert...\"],\"5p97CR\":[\"Unable to verify bucket versioning status. Please try again.\"],\"5y3O+A\":[\"Deaktivieren\"],\"6+7EwD\":[\"Objekte als Index bereitstellen, wenn Dateiname ist:\"],\"6+OdGi\":[\"Protokoll\"],\"6/xipy\":[\"Container-Format\"],\"644xgx\":[\"Geschützt\"],\"66YUKF\":[\"Failed to Empty Bucket\"],\"6BDqha\":[\"Limits\"],\"6CDYXS\":[\"Statisches Website-Serving\"],\"6E98zF\":[\"Stored as x-amz-meta-* headers. Keys are case-insensitive.\"],\"6EcekU\":[\"Target bucket\"],\"6GBt0m\":[\"Metadata\"],\"6H/Lg1\":[\"Dies ist ein öffentliches Image. Alle Benutzer haben Zugriff darauf. Eine explizite Freigabe ist nicht erforderlich.\"],\"6KRclz\":[\"Ordner erstellt\"],\"6OopEX\":[\"Container geleert\"],\"6Rnrsz\":[\"Zugriff verwalten - \",[\"flavorName\"]],\"6X/9Di\":[\"\\\"\",[\"objectName\"],\"\\\" wurde erfolgreich nach \",[\"destination\"],\" verschoben.\"],\"6YtxFj\":[\"Name\"],\"6fuDFZ\":[\"Empty All Completed with Errors\"],\"6jAi8c\":[\"Bereich\"],\"6luZQA\":[\"Objekt verschoben\"],\"6oolxV\":[\"Dieser Metadata-Key existiert bereits. Bitte verwenden Sie einen anderen Key.\"],\"6qzsuS\":[\"Schreib-ACLs\"],\"6sxz+g\":[\"Port-Name\"],\"6w+VnM\":[\"Container erstellt\"],\"6z9W13\":[\"Neustart\"],\"71SiMe\":[\"Version \",[\"shortVersionId\"],\"... deleted successfully\"],\"76RKuS\":[\"ICMP-Code\"],\"78+riR\":[\"Sie sind nicht berechtigt, Projektzugriffe zu entfernen. Bitte melden Sie sich erneut an.\"],\"7AfIPZ\":[\"Floating Network\"],\"7BpykL\":[\"Fehler beim Erstellen des Extra-Specs. Bitte versuchen Sie es erneut.\"],\"7L01XJ\":[\"Aktionen\"],\"7NC3vm\":[\"Subnet\"],\"7NSdfG\":[\"Container \",[\"progressCurrent\"],\" von \",[\"progressTotal\"],\" wird geleert, bitte warten...\"],\"7Ocn0b\":[[\"count\",\"plural\",{\"one\":[\"#\",\" Objekt\"],\"other\":[\"#\",\" Objekte\"]}]],\"7Q24LN\":[\"Richtlinie\"],\"7SGcZS\":[\"Objekte suchen...\"],\"7T1fHv\":[\"Fehler beim Entfernen des Mitglieds \\\"\",[\"memberIdToRemove\"],\"\\\"\"],\"7UlHhT\":[\"Metadaten \\\"\",[\"keyToDelete\"],\"\\\" wurden erfolgreich gelöscht.\"],\"7XQ3QJ\":[\"Abgelehnter Referrer: \",[\"host\"]],\"7ZnTL8\":[\"Fehler beim Aktualisieren des Objekts: \",[\"mutationErrorMessage\"]],\"7a4DvD\":[\"Keine Server verfügbar\"],\"7aaeOo\":[\"Version of \\\"\",[\"displayName\"],\"\\\" was permanently deleted.\"],\"7d1a0d\":[\"Öffentlich\"],\"7flw0l\":[\"Der Projektzugriff für \\\"\",[\"trimmedTenantId\"],\"\\\" wurde erfolgreich hinzugefügt.\"],\"7hLLUk\":[\"Folder \\\"\",[\"folderPath\"],\"\\\" was successfully created.\"],\"7huC4O\":[\"There are no Certificates available for this Certificate Authority.\"],\"7sMeHQ\":[\"Key\"],\"8/m18Q\":[\"This bucket cannot be deleted yet. Do the following to be able to delete the bucket:\"],\"868txY\":[\"Public Read\"],\"88kg0+\":[\"Erstellt am\"],\"8AriEH\":[\"Image-Instanz \\\"\",[\"imageName\"],\"\\\" wurde erstellt\"],\"8BjKi0\":[\"Last Modified:\"],\"8MSozy\":[\"The object can be restored from version history.\"],\"8Pcsi8\":[\"Geben Sie einen Zeitstempel wie \\\"YYYY-MM-DD HH:mm:ss\\\" ein, um die automatische Löschung zu planen.\"],\"8S2nDL\":[\"No PCAs found\"],\"8TSI9h\":[\"Durch die Deaktivierung dieses Images kann es nicht mehr zum Starten neuer Instances verwendet werden. Bestehende Instances sind nicht betroffen.\"],\"8Tg/JR\":[\"Benutzerdefiniert\"],\"8Txagi\":[\"Objekt kopieren:\"],\"8ZOb7O\":[[\"numberDeleted\"],\" Objekt wurde dauerhaft gelöscht.\"],\"8ZsakT\":[\"Passwort\"],\"8c3/77\":[\"Maximale Metadaten-Namenslänge\"],\"8erw15\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was already empty.\"],\"8jLXs3\":[\"Versionierte Schreibvorgänge\"],\"8s0tOH\":[\"Sie haben keine Berechtigung, diesem Flavor Projektzugriffe hinzuzufügen.\"],\"8t1+HU\":[[\"successCount\"],\" Image(s) deaktiviert, aber \",[\"failedCount\"],\" Image(s) konnten nicht deaktiviert werden.\"],\"8uPTwT\":[[\"filteredCount\",\"plural\",{\"one\":[[\"filteredCount\"],\" von \",[\"totalCount\"],\" Container\"],\"other\":[[\"filteredCount\"],\" von \",[\"totalCount\"],\" Containern\"]}]],\"8wdCNd\":[\"tcp, udp, icmp oder Protokollnummer\"],\"8zAn1f\":[\"Fehler beim Löschen des Flavors. Bitte versuchen Sie es erneut.\"],\"98Fs4G\":[\"Image wird erstellt...\"],\"9J93Xr\":[\"Container-Name darf keine Schrägstriche enthalten\"],\"9SX0bO\":[\"Das Image \\\"\",[\"imageName\"],\"\\\" konnte nicht aktualisiert werden: \"],\"9X8lAk\":[\"Zuweisen\"],\"9doWrf\":[\"Fehler beim Hinzufügen des Mitglieds\"],\"9dsDHD\":[\"Das Image \\\"\",[\"imageId\"],\"\\\" konnte nicht reaktiviert werden: \",[\"message\"]],\"9iz2XW\":[\"Image kann nicht aktualisiert werden\"],\"9kDPaB\":[\"Issue End-Entity Certificate\"],\"9njIiV\":[\"Fehler beim Aktivieren der Images\"],\"9rz81C\":[\"Geräte-ID\"],\"9v5VLp\":[\"Keine benutzerdefinierten Eigenschaften definiert\"],\"9vSW3U\":[\"Rekursiv löschen\"],\"9x6EkK\":[\"Dies ist ein öffentlicher Flavor. Alle Projekte haben Zugriff darauf.\"],\"A7CVME\":[\"Wählen Sie zuerst das Festplattenformat\"],\"AB4Tnl\":[\"Bitte wählen Sie eine Datei zum Hochladen aus\"],\"AGXLLY\":[\"Image-Datei kann nicht hochgeladen werden\"],\"AJRhSM\":[\"Root Disk muss eine ganze Zahl ≥ 0 sein.\"],\"AN0DBJ\":[\"Enter drücken zum Hinzufügen\"],\"ANOoeR\":[[\"totalItemCount\",\"plural\",{\"one\":[[\"totalItemCount\"],\" Element\"],\"other\":[[\"totalItemCount\"],\" Elemente\"]}]],\"ASJMIw\":[\"S3 bucket names must be 3-63 characters long and contain only lowercase letters, numbers, periods, and hyphens. They must start and end with a letter or number, and be globally unique within the cluster.\"],\"AX9Juz\":[\"Die ID darf nur alphanumerische Zeichen, Bindestriche, Unterstriche und Punkte enthalten.\"],\"AXNSZ2\":[\"Confirm deletion of \",[\"displayName\"],\". The object will be marked as deleted but can be restored from version history.\"],\"AZyHwC\":[\"Muss eine gültige IPv4- oder IPv6-Adresse sein (z. B.: 172.24.4.228 oder 2001:db8::1).\"],\"Ac6dy9\":[\"Name eingeben\"],\"AdtLNV\":[\"Stellen Sie sicher, dass ACL-Einträge gültig sind — korrekte Projekt-IDs, Benutzer-IDs und Formate liegen in Ihrer Verantwortung. Ungültige Einträge können stillschweigend unbeabsichtigten Zugriff gewähren oder verweigern.\"],\"AeP3VC\":[\"Date:\"],\"AeXO77\":[\"Account\"],\"Af8YL/\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully copied to \",[\"destination\"],\".\"],\"Afh/Lb\":[\"Zielordner auswählen\"],\"AirKNZ\":[\"Issue Self-Signed Certificate\"],\"AlbUVn\":[\"<0>Optimierte Skalierbarkeit: Aurora ist für Unternehmen jeder Größe konzipiert und wächst mit Ihnen mit, unterstützt einfache Umgebungen und komplexe Multi-Cloud-Setups gleichermaßen.\"],\"Alx2/L\":[\"In neuem Tab öffnen\"],\"AuQtzx\":[\"Muss eine nicht-negative Ganzzahl sein\"],\"AxZkIr\":[\"Disk (GiB)\"],\"B2Czeb\":[\"Min. RAM\"],\"B2SpR8\":[\"Bucket name must not start with reserved prefix \\\"\",[\"prefix\"],\"\\\"\"],\"B2i9cQ\":[\"Zu löschende Objekte (\",[\"totalCount\"],\")\"],\"B3toQF\":[\"Objekte\"],\"BCJPTn\":[\"Zugriff für alle Benutzer aus diesem Projekt gewähren.\"],\"BCXapL\":[\"Fehler beim Laden der Container-Eigenschaften: \",[\"errorMessage\"]],\"BGZ26c\":[[\"displayName\"],\" öffnen\"],\"BGsuZN\":[\"Key contains invalid characters (use only letters, digits, hyphens, underscores)\"],\"BJt+PJ\":[\"Fehler beim Löschen des Containers\"],\"BMTd81\":[\"Diese Aktion kann nicht rückgängig gemacht werden. Das Zielprojekt verliert sofort den Zugriff auf diese Sicherheitsgruppe.\"],\"BOQYRn\":[\"Lädt Key Pairs...\"],\"BOoOLQ\":[\"All Buckets Emptied\"],\"BP4Fwj\":[\"Fehler beim Laden der Objekte: \",[\"errorMessage\"]],\"BSpWob\":[\"\\\"\",[\"displayName\"],\"\\\" konnte nicht heruntergeladen werden: \",[\"errorMessage\"]],\"BTsbBe\":[\"Bucket Name\"],\"BYH/2L\":[\"Image kann nicht deaktiviert werden\"],\"BgMp/T\":[\"Ungültige Formatkombination für das ausgewählte Festplattenformat\"],\"Blsc/x\":[\"Delete Certificate Authority\"],\"BoIAP6\":[\"Die ID des Netzwerks, das der Floating IP zugeordnet ist.\"],\"BoPocW\":[\"MD5-Prüfsumme\"],\"BrrIs8\":[\"Storage\"],\"CA8ZeT\":[\"Sichtbarkeit des Images \\\"\",[\"imageName\"],\"\\\" auf \",[\"visibility\"],\" aktualisiert\"],\"CBFSfX\":[\"Bitte korrigieren Sie die Validierungsfehler unten.\"],\"CFMxC8\":[\"Images gelöscht\"],\"CMVP7y\":[\"Diese Aktion kann nicht rückgängig gemacht werden. Die Regel wird dauerhaft gelöscht.\"],\"CfKRC1\":[\"Empty Bucket\"],\"CgZxr7\":[\"Min. RAM (MB)\"],\"ChOuUj\":[\"Floating IP nicht gefunden\"],\"Cj2Gtd\":[\"Größe\"],\"ClGcRq\":[\"Container\"],\"CongmL\":[\"Could not delete bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"CpZKLR\":[\"Version ID\"],\"CtiFDz\":[\"This will permanently delete all objects from \",[\"totalCount\"],\" selected \",[\"totalCount\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\". This action cannot be undone.\"],\"Cu6xuZ\":[\"Dies ist ein <0>dynamisches großes Objekt (DLO)-Manifest. Metadaten-Änderungen gelten nur für das Manifest — Segment-Objekte sind nicht betroffen.\"],\"CunRry\":[\"Ungültiges Projekt-ID-Format. Muss 32 hexadezimale Zeichen sein (z. B. b90f9c4bc76140e18540b2cec1299e2a) oder UUID-Format (z. B. 12345678-1234-1234-1234-123456789abc)\"],\"Cxgv2U\":[\"Min. Disk\"],\"D3IRXw\":[\"Floating IP wird getrennt...\"],\"D7qT9F\":[\"Warum Aurora wählen?\"],\"D7yx6b\":[\"Version History:\"],\"D8ak4F\":[[\"totalItemCount\",\"plural\",{\"one\":[[\"filteredItemCount\"],\" von \",[\"totalItemCount\"],\" Element\"],\"other\":[[\"filteredItemCount\"],\" von \",[\"totalItemCount\"],\" Elementen\"]}]],\"DDRhQm\":[\"Ihre Sitzung ist abgelaufen.\"],\"DHrCY6\":[\"Common name\"],\"DIZzgv\":[\"Failed to load versions\"],\"DJT9tB\":[\"Account-Quotas\"],\"DKkOPx\":[\"Zusätzliche Spezifikationen\"],\"DNVql8\":[\"Vollständiges Lifecycle-Management von Floating IPs, einschließlich Zuweisung, Port-Zuordnung/-Aufhebung, DNS-Einstellungen und Löschung\"],\"DWBWmW\":[[\"totalCount\",\"plural\",{\"one\":[\"Bucket leeren\"],\"other\":[\"Buckets leeren\"]}]],\"DXRiUg\":[\"All objects in the folder will be permanently deleted.\"],\"DcMIiu\":[\"ACLs für Container \\\"\",[\"containerName\"],\"\\\" konnten nicht aktualisiert werden: \",[\"errorMessage\"]],\"Df0YHr\":[\"Security Group aktualisieren\"],\"Dh1qvV\":[\"Sie sind dabei, \",[\"deletableCount\"],\" Image(s) zu löschen. Diese Aktion kann nicht rückgängig gemacht werden.\"],\"Dia2Ue\":[\"Für diese Security Group sind keine RBAC-Richtlinien vorhanden\"],\"Do5/uH\":[\"Der Flavor oder das Projekt konnte nicht gefunden werden. Möglicherweise wurde es bereits entfernt.\"],\"Dqnh7K\":[\"Spezifischer Referrer: \",[\"host\"]],\"Dt5W9T\":[\"RBAC-Richtlinie entfernen\"],\"DvB4XF\":[\"Legen Sie Ihre Datei hier ab\"],\"E/QGRL\":[\"Deaktiviert\"],\"E4QYe7\":[\"Empfohlene Images\"],\"E55MDj\":[\"Could not delete version of \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"E6nRW7\":[\"URL kopieren\"],\"E7kdtm\":[\"Choose Certificate to Import\"],\"EF2EU9\":[\"Wird gelöscht...\"],\"EJqSbS\":[\"No versions to delete in bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"EPMHs9\":[\"Sie haben keine Berechtigung, Flavors in diesem Projekt zu löschen.\"],\"EQnVgi\":[\"Der Flavor-Service ist für dieses Projekt nicht verfügbar.\"],\"EdQY6l\":[\"Keine\"],\"EdxcAN\":[\"Zugriffskontrolle für Container:\"],\"Enpdmy\":[\"Geben Sie <0>entfernen zur Bestätigung ein:\"],\"EoKe5U\":[\"Domain\"],\"Eq5PsT\":[\"\\\"detach\\\" zur Bestätigung eingeben\"],\"EqSPkP\":[\"Lädt Flavors...\"],\"Erlvqg\":[\"Objektname darf keine führenden oder nachfolgenden Leerzeichen haben\"],\"ExLULX\":[\"Image-Name\"],\"EztMB8\":[\"Fehler beim Abrufen der Flavors vom Server.\"],\"F02e8I\":[\"Keine benutzerdefinierten Metadaten. Klicken Sie auf \\\"Eigenschaft hinzufügen\\\", um eine zu erstellen.\"],\"F6YIQe\":[\"Effiziente Massenlöschung\"],\"FAA/qW\":[\"Paste the code\"],\"FJO48W\":[\"Create S3 Credentials\"],\"FKL6Jv\":[\"z. B. .r:*,.rlistings\"],\"FOcBn3\":[\"Trennen\"],\"FQBaXG\":[\"Aktivieren\"],\"FRtmJJ\":[\"Storage-Container nicht gefunden\"],\"FSbpS7\":[\"CPU\"],\"FgWsFY\":[\"Objekt <0>\\\"\",[\"displayName\"],\"\\\" wird dauerhaft gelöscht. Dies kann nicht rückgängig gemacht werden.\"],\"FjONW3\":[\"Fehler beim Laden des Flavors\"],\"FjPnAE\":[\"Fehler beim Laden der Security Group\"],\"Flugry\":[[\"progressPct\"],\"%\"],\"FwSyEp\":[\"Das angegebene Projekt existiert nicht oder Sie haben keine Berechtigung, es zu teilen.\"],\"Fzrzfe\":[\"Ordnername ist erforderlich\"],\"G3pRO8\":[\"An object with this name already exists at the destination and will be overwritten.\"],\"G6AP+o\":[\"Geteilt:\"],\"GDx4dP\":[\"Manage your Certificate\"],\"GEgjm+\":[\"Objekte werden geladen...\"],\"GPuCEo\":[\"Leer lassen für alle Typen\"],\"GSIPwA\":[\"Temporäre URL\"],\"GZjazt\":[\"No policy found\"],\"GbKqnI\":[[\"successCount\"],\" Image(s) aktiviert, aber \",[\"failedCount\"],\" Image(s) konnten nicht aktiviert werden.\"],\"Gfx1qQ\":[\"Inhalt kann nicht geladen werden\"],\"Ghp863\":[\"Type \\\"empty\\\" to confirm\"],\"GxkJXS\":[\"Wird hochgeladen...\"],\"Gyd3No\":[\"Kein spezifischer Projektzugriff für diesen privaten Flavor konfiguriert. Klicken Sie auf \\\"Projektzugriff hinzufügen\\\", um Zugriff zu gewähren.\"],\"H+a5j6\":[\"Freigeben\"],\"H4Qwmp\":[\"Keine Objekte entsprechen Ihrer Suche. Versuchen Sie, Ihren Suchbegriff anzupassen.\"],\"H7u085\":[\"Noch kein Projekt hat Zugriff auf dieses Image. Klicken Sie auf \\\"Projektzugriff hinzufügen\\\", um Zugriff zu gewähren.\"],\"HAcOOW\":[\"Your credentials are valid but you don't have permission to perform this operation. Please contact your administrator to grant you the necessary permissions.\"],\"HAkrpK\":[\"Bei Aurora ist es unsere Mission, eine zentrale Plattform bereitzustellen, die das Cloud-Management vereinheitlicht. Wir streben danach, die Komplexitäten der Bereitstellung, Konfiguration und Skalierung von Ressourcen über verschiedene Cloud-Umgebungen hinweg zu vereinfachen und gleichzeitig ein nahtloses Wachstum für Ihr Unternehmen zu ermöglichen.\"],\"HBpi4q\":[\"Lädt Images...\"],\"HDpkS/\":[\"Select destination folder within target bucket\"],\"HG0uMz\":[\"Back to Certificate Authorities\"],\"HM56Bx\":[\"Creating...\"],\"HNlEFZ\":[\"delete\"],\"HQH8HM\":[\"\\\"\",[\"objectName\"],\"\\\" konnte nicht aktualisiert werden: \",[\"errorMessage\"]],\"HVdrr1\":[\"Beliebiger Referrer\"],\"HfL/NM\":[\"Version Deleted\"],\"HiDAFk\":[\"Create Bucket\"],\"Hivb/4\":[\"Der Server hat Probleme. Bitte versuchen Sie es später erneut.\"],\"Hiw1Ha\":[\"Keine Container gefunden\"],\"HlwgQN\":[\"Objekt \\\"\",[\"objectName\"],\"\\\" wurde dauerhaft gelöscht.\"],\"HuA8iQ\":[\"Floating IP wird zugewiesen...\"],\"HxTYrE\":[\"Der Flavor konnte nicht gefunden werden. Möglicherweise wurde er gelöscht.\"],\"HyyJ83\":[\"Zugriffstyp\"],\"HzKlpd\":[\"Failed to empty bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"I5kZVK\":[\"Entfernte Quelle\"],\"INUP6f\":[\"<0>Mühelose Ressourcenbereitstellung: Stellen Sie Ressourcen wie Server, Netzwerke und Volumes schnell bereit, konfigurieren Sie diese und setzen Sie sie mit nur wenigen Klicks ein.\"],\"IOkHLC\":[\"Fehler beim Kopieren des Objekts: \",[\"errorMessage\"]],\"IQSLN+\":[\"Error loading Certificate Authority\"],\"IQldU4\":[\"Bucket name must contain only lowercase letters, numbers, periods, and hyphens\"],\"ISxSs6\":[\"Alle Buckets\"],\"IUwGEM\":[\"Änderungen speichern\"],\"IWF68U\":[\"Speicherübersicht\"],\"IZ6Mh2\":[\"Geben Sie den Domain ein\"],\"IbWX61\":[\"Failed to delete bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"IbYr/u\":[\"Content type\"],\"Io2Dvq\":[\"Certificate Authority not found\"],\"Ioblgz\":[\"Diese Aktion ist dauerhaft. Alle Objekte im Container werden gelöscht und dies kann nicht rückgängig gemacht werden.\"],\"IwlPLb\":[\"Delete Bucket\"],\"IxsRaQ\":[\"Enable Versioning\"],\"J+Sc8C\":[\"Showing first \",[\"MAX_COMBO_OPTIONS\"],\" of \",[\"totalBuckets\"],\", refine your search to narrow results\"],\"J4DKSM\":[\"Container-Format ist erforderlich\"],\"J6EOll\":[\"Objekt verschieben/umbenennen:\"],\"J7+bZb\":[\"Ordner gelöscht\"],\"J9QcnV\":[[\"successCount\"],\" von \",[\"totalCount\"],\" Image(s) erfolgreich aktiviert\"],\"J9cmxx\":[\"Fehler beim Aktualisieren der Sichtbarkeit auf \",[\"newVisibility\"]],\"JB0bhm\":[\"Mitmachen\"],\"JNGYAW\":[\"Container-Name ist erforderlich\"],\"JPWqr2\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully emptied. \",[\"deletedCount\"],\" objects deleted.\"],\"JT+lLV\":[\"Delete Object\"],\"JT3I1g\":[\"Flavor löschen\"],\"JeRXll\":[\"Dieser Schlüssel ist reserviert und wird separat verwaltet\"],\"JedhzP\":[\"Objekt verschieben/umbenennen:\"],\"JfWCsP\":[\"Teilweise erfolgreich deaktiviert\"],\"Jh4rAZ\":[\"Fehler beim Laden des Images\"],\"Jim5X9\":[\"Stateful\"],\"JoECY1\":[\"Die bereitgestellten Metadata-Daten sind ungültig. Bitte überprüfen Sie Ihre Eingabe.\"],\"JpZn1L\":[\"Bereits deaktiviert (wird übersprungen)\"],\"JrmKyf\":[\"Fehlgeschlagen: \",[\"errorDetails\"]],\"JtHgVz\":[\"Images löschen\"],\"JuOpPY\":[\"Alle Objekte in den ausgewählten Containern werden dauerhaft gelöscht. Dies kann nicht rückgängig gemacht werden.\"],\"K+e/0e\":[\"RAM (MiB)\"],\"K3bUTE\":[\"Minimale Festplatte muss 0 oder größer sein\"],\"K8Qnlj\":[\"Wird verschoben...\"],\"K9eC8x\":[\"Dies kann auf unzureichende Berechtigungen oder ein vorübergehendes Serviceproblem zurückzuführen sein. Bitte überprüfen Sie Ihre Zugriffsrechte oder aktualisieren Sie die Seite.\"],\"KDw4GX\":[\"Erneut versuchen\"],\"KJC+M7\":[\"Serverfehler beim Abrufen der Flavor-Details. Bitte versuchen Sie es später erneut.\"],\"KOpPMt\":[\"Gesamtspeicher-Quota\"],\"KSW/GC\":[\"Keine Flavors verfügbar. Filtern Sie neu oder erstellen Sie einen neuen Flavor.\"],\"KhNDX4\":[\"Object Storage (Ceph)\"],\"Kl2hZ+\":[\"Delete Version\"],\"Km4AGG\":[\"Sicherheitsgruppe wird erstellt...\"],\"KoQP4F\":[\"Ein Serverfehler ist aufgetreten, während der Projektzugriff hinzugefügt wurde. Bitte versuchen Sie es später noch einmal.\"],\"KsIM0b\":[\"Boot-RAM\"],\"KsnZ3m\":[\"Ordner \\\"\",[\"folderName\"],\"\\\" wurde erfolgreich erstellt.\"],\"KvQbFT\":[\"This action will permanently delete all objects from \",[\"bucketName\"],\". This action cannot be undone.\"],\"KzUd7m\":[\"new-folder-name\"],\"L9LFMT\":[\"Confirm deletion of \",[\"displayName\"],\". All objects inside this folder will be permanently deleted.\"],\"LASqRM\":[\"Object \\\"\",[\"displayName\"],\"\\\" was permanently deleted.\"],\"LI70tz\":[\"Error loading Certificate\"],\"LI8Z2I\":[[\"rowDisplayName\"],\" herunterladen\"],\"LK0pQN\":[\"Festplattenformat ist erforderlich\"],\"LMdsuJ\":[\"Port (von)\"],\"LQQCas\":[\"Ordner \\\"\",[\"folderName\"],\"\\\" und \",[\"deletedCount\"],\" Objekt wurden dauerhaft gelöscht.\"],\"LT2Vv7\":[\"Bucket policy was successfully deleted from \\\"\",[\"bucketName\"],\"\\\".\"],\"LVU2Dv\":[\"Add Policy\"],\"La2LYh\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully copied to \",[\"destination\"],\" (existing object was replaced).\"],\"Llcakz\":[\"Aktualisiert am\"],\"LqMb+g\":[\"Um diese Aktion zu bestätigen, geben Sie das Wort <0>\\\"release\\\" in das Feld unten ein.\"],\"LtI9AS\":[\"Eigentümer\"],\"Lylr9Z\":[\"Objekt kopiert\"],\"M3bysB\":[\"Bucket Created\"],\"M470oJ\":[\"Der Flavor konnte nicht gefunden werden oder hat keine Metadata.\"],\"M5Epeo\":[\"Image-Details bearbeiten\"],\"M5RhXF\":[\"Wird entfernt...\"],\"M5rEN5\":[\"Sitzung abgelaufen\"],\"M8er/5\":[\"Name:\"],\"M9H+/G\":[\"Projekte\"],\"MEIAzV\":[\"Unbenannt\"],\"MI6aae\":[\"This action will create a self-signed CA certificate.\"],\"MILoeL\":[\"Services\"],\"MJLqeY\":[\"Failed to check bucket contents: \",[\"errorMessage\"]],\"MJtNLd\":[\"Zu löschende Images:\"],\"MOug+V\":[\"Geben Sie ein Tag ein und drücken Sie Enter oder klicken Sie auf Hinzufügen\"],\"MRB7nI\":[\"Richtung\"],\"MXoA/6\":[\"Objekt hochladen\"],\"MXw7Fr\":[\"Servername\"],\"MZGbkp\":[\"VCPUs\"],\"MbKJNP\":[\"Sie haben keine Berechtigung, auf die Zugriffsinformationen für diesen Flavor zuzugreifen.\"],\"MgZyuJ\":[\"Sie sind dabei, <0>\",[\"deactivatedCount\"],\" Image(s) zu aktivieren. Aktivierte Images stehen zum Starten neuer Instances zur Verfügung.\"],\"Mj5iQ0\":[\"YYYY-MM-DD HH:mm:ss\"],\"MmtQVF\":[\"Ungültiger Wert für die Einstellung des öffentlichen Flavors.\"],\"Mt6sRo\":[\"Sie sind nicht berechtigt, auf die Zugriffsinformationen des Flavors zuzugreifen. Bitte melden Sie sich erneut an.\"],\"MtzSbv\":[\" Objektname ist erforderlich\"],\"N2S1rs\":[\"Leeren\"],\"N40H+G\":[\"All\"],\"N5I2RJ\":[\"\\\"release\\\" zur Bestätigung eingeben\"],\"N5vGcw\":[\"Geben Sie Ihre Anmeldedaten ein, um auf Ihr Konto zuzugreifen.\"],\"NG+FZC\":[\"Issuing End-Entity Certificate...\"],\"NH2fsP\":[\"Bereits deaktiviert (wird übersprungen):\"],\"NNpgo3\":[\"Bucket name\"],\"NOdFZR\":[\"Wird generiert...\"],\"NQU1Nn\":[\"Container-Name kopieren\"],\"NRMm0E\":[\"Dieses Projekt hat bereits Zugriff auf den Flavor.\"],\"NRVSdy\":[\"Mitglieds-ID\"],\"NW1XEL\":[\"Emptying bucket \",[\"progressCurrent\"],\" of \",[\"progressTotal\"],\", please wait...\"],\"NW4PIb\":[\"Ordner \\\"\",[\"folderName\"],\"\\\" konnte nicht erstellt werden: \",[\"errorMessage\"]],\"NZJhro\":[\"Objektname darf keine Schrägstriche enthalten\"],\"NZVIMV\":[\"Certificate \",[\"subjectCommonName\"]],\"Nc7QKU\":[\"Feste IP-Adresse\"],\"Ncv07y\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully restored.\"],\"NeUjqc\":[\"Dateilisting aktivieren\"],\"Ni6RvO\":[\"Versioning Suspended\"],\"NixRmA\":[\"Min. Disk (GB)\"],\"NlcF/v\":[\"Kein Flavor für die Löschung ausgewählt.\"],\"NopYGU\":[\"Festplattenformat\"],\"Np28ib\":[\"oder per Drag & Drop\"],\"Nu4oKW\":[\"Beschreibung\"],\"Nvfd2b\":[\"Versionierung ist aktiviert\"],\"NwXhO7\":[\"Successfully deleted \",[\"deletedCount\"],\" version from bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"O80bQY\":[\"Objekt-Eigenschaften werden geladen...\"],\"O8tK4v\":[\"Regel hinzufügen\"],\"ONWvwQ\":[\"Hochladen\"],\"OR475H\":[\"Netzwerk\"],\"OSlLnz\":[\"Image-Sichtbarkeit\"],\"OYHzN1\":[\"Tags\"],\"OZImTR\":[\"Container-Listing-Limit\"],\"OaHwiV\":[\"Ordner können nicht im Stapel gelöscht werden. Verwenden Sie das Zeilenmenü, um einen Ordner zu löschen.\"],\"OaSktR\":[\"Geräteeigentümer\"],\"Oc8Aqv\":[\"Vorschau und Metadaten bearbeiten\"],\"OlmKCg\":[\"Ein Flavor mit dieser ID oder diesem Namen existiert bereits. Bitte verwenden Sie andere Werte.\"],\"On9AgT\":[\"Delete Bucket Policy\"],\"OvEjsP\":[\"Wird kopiert...\"],\"Ovofy+\":[\"Floating IP \",[\"floating_ip_address\"],\" freigeben\"],\"OxDN2m\":[\"Fehler beim Erstellen des Flavors. Bitte versuchen Sie es erneut.\"],\"OxaeYj\":[\"Wir entwickeln das Aurora-Dashboard, um Ihnen einen besseren Service zu bieten. Ihr Feedback ist von unschätzbarem Wert, um ein Werkzeug zu gestalten, das den einzigartigen Bedürfnissen von Unternehmen wie Ihrem gerecht wird. Bleiben Sie in Verbindung und begleiten Sie uns, während wir das Cloud-Management neu definieren.\"],\"Oxl1UN\":[\"Wenn keine Index-Datei vorhanden ist, zeigt die URL eine Liste der Objekte im Container an.\"],\"P2tWBZ\":[[\"selectedCount\",\"plural\",{\"one\":[\"Bucket leeren\"],\"other\":[\"Buckets leeren\"]}]],\"PAKSdy\":[\"Floating IP eingeben oder leer lassen für automatische Zuweisung\"],\"PDXQxz\":[[\"certificateIdValue\"],\" Certificate Details\"],\"PEGvy+\":[\"Minimaler RAM muss 0 oder größer sein\"],\"PHt+EV\":[\"<0>delete zur Bestätigung eingeben:\"],\"PIbPRX\":[\"RX/TX Faktor muss eine ganze Zahl ≥ 1 sein.\"],\"PLwzWR\":[\"Alle Container\"],\"PYQUjU\":[\"Metadaten-Konfiguration konnte nicht geladen werden.\"],\"PZnUbs\":[\"Bitte melden Sie sich erneut an, um fortzufahren.\"],\"PgNNGl\":[\"Weitere Aktionen\"],\"PiH3UR\":[\"Kopiert!\"],\"PiyQJ/\":[\"Keine Flavors gefunden\"],\"PkfPsB\":[\"Geben Sie die ID des Projekts ein, mit dem Sie diese Sicherheitsgruppe teilen möchten. Sie finden Projekt-IDs im Konto-/Projekt-Umschalter oder im Identity-Service.\"],\"Pkw7J9\":[\"Dieser Ordner ist leer.\"],\"PsEGri\":[\"Ubuntu 22.04 LTS\"],\"PtjzS+\":[\"Wird dem ausgewählten Port zugeordnet. Wenn der Port mehrere IPs hat, wählen Sie die gewünschte feste IP-Adresse.\"],\"PzgYM9\":[\"Prüfsumme\"],\"Q1W//7\":[\"Keine Dienste für dieses Projekt verfügbar.\"],\"Q2xmVl\":[\"Symlinks\"],\"Q9f2QF\":[[\"numberDeleted\"],\" Objekte wurden erfolgreich gelöscht, aber einige Löschvorgänge sind fehlgeschlagen.\"],\"QAUa4B\":[\"Geben Sie einen einzelnen Port ein oder definieren Sie einen Bereich, indem Sie auch \\\"Port (bis)\\\" ausfüllen. \\\"Port (bis)\\\" ist optional.\"],\"QAoi3Q\":[\"Policy Deleted\"],\"QDUXIq\":[\"Are you sure you want to delete the policy for bucket <0>\",[\"bucketName\"],\"?\"],\"QEtDlS\":[\"Objekt wird kopiert...\"],\"QNHur0\":[\"Fehler beim Laden der Container-ACLs: \",[\"errorMessage\"]],\"QQ8wUG\":[\"Diese Aktion kann nicht rückgängig gemacht werden. Der Flavor wird dauerhaft gelöscht.\"],\"QQjQRf\":[\"Kein Temp-URL-Schlüssel konfiguriert. Ein temporärer URL-Schlüssel muss auf Account- oder Container-Ebene gesetzt werden, bevor temporäre URLs generiert werden können. Wenden Sie sich an Ihren Administrator, um X-Account-Meta-Temp-URL-Key oder X-Container-Meta-Temp-URL-Key zu konfigurieren.\"],\"QRlXaL\":[\"Bucket name must not end with reserved suffix \\\"\",[\"suffix\"],\"\\\"\"],\"QV1ZPO\":[\"Schlüssel ist erforderlich\"],\"QWdKwH\":[\"Verschieben\"],\"QYiqYb\":[\"Fehler beim Aktualisieren des Zugriffsstatus\"],\"Qb+14I\":[\"Diese Aktion kann nicht rückgängig gemacht werden. Die Security Group wird dauerhaft gelöscht.\"],\"QcRQm4\":[\"Failed to delete version: \",[\"errorMessage\"]],\"QceOn7\":[\"Bucket Policy\"],\"QdGvPV\":[\"Size:\"],\"QetsXP\":[\"Upload fehlgeschlagen: \",[\"uploadError\"]],\"Qg4EG6\":[\"Die bereitgestellten Flavor-Daten sind ungültig. Bitte überprüfen Sie Ihre Eingabe.\"],\"QpbWpf\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully emptied. \",[\"deletedCount\"],\" object deleted.\"],\"QuJSSl\":[\"Fehler beim Erstellen des Flavors. Bitte versuchen Sie es erneut.\"],\"QvqBQa\":[\"Ziel-Container\"],\"Qx7DM7\":[\"Capabilities\"],\"QxBGbh\":[\"Geschützt (wird übersprungen):\"],\"QytzQr\":[\"Geben Sie \\\"delete\\\" zur Bestätigung ein\"],\"R3U2a2\":[\"Policy JSON\"],\"R5zmZq\":[\"IP Restricted\"],\"R6kcsL\":[\"Muss eine gültige PQDN oder FQDN sein (nur alphanumerische Zeichen und Bindestriche, darf nicht mit einem Bindestrich beginnen oder enden).\"],\"R6u5CR\":[[\"failedCount\"],\" von \",[\"totalCount\"],\" Image(s) konnten nicht aktiviert werden. Einige Images sind möglicherweise bereits aktiv oder in einem ungültigen Zustand.\"],\"R8jkjc\":[\"Confirm deletion of \",[\"displayName\"],\". This action cannot be undone.\"],\"RByeNR\":[\"Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.\"],\"RCr0yv\":[\"Flavor-Details konnten nicht geladen werden. Bitte versuchen Sie es erneut.\"],\"RFDYCD\":[\"Minimale Festplattengröße, die zum Booten dieses Images erforderlich ist\"],\"RGhYAo\":[\"RAM\"],\"RGrgxg\":[\"Container \\\"\",[\"containerName\"],\"\\\" konnte nicht gelöscht werden: \",[\"errorMessage\"]],\"RGwfoL\":[\"Maximale Metadaten-Anzahl\"],\"RHm1CB\":[\"Versioning was successfully suspended for bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"RNBvdl\":[\"Maximale SLO-Segmente\"],\"RQuGRj\":[\"Ändern Sie den Namen, den Ziel-Container oder den Ordner, um dieses Objekt zu verschieben.\"],\"RS0o7b\":[\"State\"],\"RSFkXF\":[\"Image aktivieren\"],\"RSMPjT\":[\"Sie befinden sich derzeit auf der Dashboard-Route.\"],\"RSg/pq\":[\"Fehler beim Löschen des Objekts\"],\"RTQFAw\":[\"Sie sind nicht berechtigt, Metadata zu erstellen. Bitte melden Sie sich erneut an.\"],\"RWQ6BN\":[\"Enter Common name (e.g., demo-ca.test.sci)\"],\"RYhwcU\":[\"Leaving the JSON field empty will remove the policy from the bucket.\"],\"Rih53k\":[\"Maximale Container-Namenslänge\"],\"Rlp5zj\":[\"Flavor erstellen\"],\"Rsh494\":[\"Deleting the policy will remove all access restrictions defined by it. This action cannot be undone.\"],\"S0kLOH\":[\"ID\"],\"S1iTXO\":[\"Image-Instanz \\\"\",[\"imageName\"],\"\\\" wurde gelöscht\"],\"S3olSf\":[\"Keine Metadata gefunden. Klicken Sie auf \\\"Metadata hinzufügen\\\", um eine zu erstellen.\"],\"S5CUKP\":[\"Mitglieds-ID (Projekt-UUID) ist erforderlich.\"],\"S63NbU\":[\"Das Image \\\"\",[\"imageId\"],\"\\\" konnte nicht deaktiviert werden: \",[\"message\"]],\"S8/j2h\":[\"Fehler beim Leeren des Containers\"],\"SBGiGm\":[\"Lese-ACLs\"],\"SCY5an\":[\"Fehler beim Verschieben des Objekts\"],\"SFo0kK\":[\"Alle Images\"],\"SIfYq6\":[\"Metadaten bearbeiten\"],\"SLEH7X\":[\"DNS-Name eingeben\"],\"STc+7E\":[\"Maximale Container pro Extraktion\"],\"SU0uxT\":[\"Objekt hochladen nach:\"],\"SUSS9i\":[\"Container-Name\"],\"SVLToM\":[\"\\\"remove\\\" zur Bestätigung eingeben\"],\"SZw9tS\":[\"Details ansehen\"],\"Sb/VT5\":[\"Container \\\"\",[\"containerName\"],\"\\\" wurde erfolgreich geleert. \",[\"deletedCount\"],\" Objekte gelöscht.\"],\"Sf3Gvg\":[\"Failed to load PCAs\"],\"SfW/3r\":[\"Keine Gruppen vorhanden\"],\"Sgz1vJ\":[\"Mitglied \\\"\",[\"trimmedMemberId\"],\"\\\" wurde erfolgreich hinzugefügt.\"],\"Smk7M2\":[\"Fehler beim Laden der Floating-IP\"],\"SuX2Ca\":[\"Grundlegende Informationen\"],\"Sv3i+l\":[\"Version Restored\"],\"T/UxKm\":[\"<0>Metadaten bearbeiten: <1>\",[\"displayName\"],\"\"],\"T3+VKR\":[\"This action will permanently delete all versions and delete markers. This will enable you to delete the bucket. This action cannot be undone.\"],\"T6Gm5y\":[\"Externes Netzwerk auswählen\"],\"T7mgdd\":[[\"successCount\"],\" von \",[\"totalCount\"],\" Image(s) erfolgreich gelöscht\"],\"T8N6oi\":[\"Eigenschaftsschlüssel\"],\"T9Mtpi\":[\"Projekt ID\"],\"T9o/az\":[\"Loading Certificates issued by Certificate Authority...\"],\"TAaMxB\":[\"Failed to restore version: \",[\"errorMessage\"]],\"TM93nK\":[\"Sicherheitsgruppenregel löschen\"],\"TPMaxo\":[\"“release” zur Bestätigung eingeben\"],\"TQn3hH\":[\"Image konnte nicht erstellt werden. Bitte versuchen Sie es erneut.\"],\"TSclU4\":[\"property-key\"],\"TTX3nV\":[\"Could not move \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"TZJiVf\":[\"Container \\\"\",[\"containerName\"],\"\\\" wurde erfolgreich geleert. \",[\"deletedCount\"],\" Objekt gelöscht.\"],\"TfC9O+\":[\"Zuletzt geändert (UTC)\"],\"TfdeUd\":[\"Fehler beim Löschen des Extra-Specs. Bitte versuchen Sie es erneut.\"],\"TipzDp\":[\"Container suchen...\"],\"TpGxnq\":[\"Mitglieds-ID eingeben\"],\"Tx4Ym+\":[\"Gültige PQDN oder FQDN (max. 63 Zeichen) eingeben, um sie der Floating IP zuzuordnen. A- und PTR-Einträge werden automatisch erstellt.\"],\"TyODHt\":[\"Metadata speichern\"],\"U/oahm\":[\"URL kopiert\"],\"U0sPCo\":[\"Flavors suchen...\"],\"U2wTy/\":[\"Hinweis: Das Attribut 'stateful' kann nicht geändert werden, wenn diese Security Group derzeit von einem oder mehreren Ports verwendet wird.\"],\"U4fmHG\":[\"Der Text muss “detach” in Kleinbuchstaben entsprechen.\"],\"U6L+P/\":[\"Inaktivitäts-Timeout\"],\"U9q4M7\":[\"Zurück zu Security Groups\"],\"UB+Q8v\":[\"Loading Certificate Details...\"],\"UBv8UK\":[\"Delete Permanently\"],\"UGhVPl\":[\"Objekttyp\"],\"UJmAAK\":[\"Subject\"],\"UK2mpr\":[\"Temporäre URL wird generiert...\"],\"UKwOYH\":[\"Image-Datei\"],\"UO3hJ2\":[\"Temporäre URLs\"],\"UOtFRg\":[\"Define permissions for this bucket. You may use one of the predefined templates.\"],\"UQ7Wyv\":[\"Zugriff für Image verwalten - \",[\"imageName\"]],\"URmyfc\":[\"Details\"],\"USiuNX\":[\"Container-Quotas\"],\"UVFHGY\":[\"z. B. PROJECT_ID:USER_ID\"],\"UYSopm\":[\"Minimaler RAM (MB)\"],\"UaP7Th\":[\"Failed to Create Bucket\"],\"UbRKMZ\":[\"Ausstehend\"],\"UbWeJA\":[\"Duration/validity\"],\"UdcGJu\":[\"Images aktivieren\"],\"Uj+n/2\":[\"Fehler beim Löschen des Ordners\"],\"UkVkoq\":[\"Leer lassen für alle Codes\"],\"UmQ3/m\":[\"Ausgewählte deaktivieren\"],\"Uwo8Xw\":[\"Dieses Image wurde am \",[\"sharedAt\"],\" von <0>\",[\"ownerProject\"],\" mit Ihnen geteilt.\"],\"Ux/pNd\":[[\"totalCount\",\"plural\",{\"one\":[[\"totalCount\"],\" Bucket\"],\"other\":[[\"totalCount\"],\" Buckets\"]}]],\"UztfYZ\":[\"Port zur Zuordnung auswählen\"],\"V/8B9A\":[\"Ich bestätige, dass alle vorhandenen Versionen ebenfalls gelöscht werden\"],\"V/SINY\":[\"Objekt aktualisieren\"],\"V1TzeS\":[\"Container \\\"\",[\"containerName\"],\"\\\" wurde erfolgreich gelöscht.\"],\"V66Jih\":[\"Zugriffsstatus\"],\"V6AQa5\":[\"Versions Deleted\"],\"V7fN5X\":[\"Objekt kopieren:\"],\"V8/eES\":[\"Bucket name must not contain consecutive periods\"],\"V804LY\":[\"Security Group wird aktualisiert...\"],\"VCM3KS\":[\"Projektzugriff hinzufügen\"],\"VG2a+x\":[\"Bucket name must start and end with a letter or number\"],\"VKCkZH\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully created.\"],\"VKmlZ+\":[\"Zu leerende Container (\",[\"totalCount\"],\")\"],\"VLI9eO\":[\"Floating IP-Details werden geladen...\"],\"VMh1t1\":[\"The text must match “delete” in lowercase.\"],\"VMoZmg\":[\"Delete Policy\"],\"VV1fdg\":[\"Jeder Benutzer hat Lesezugriff auf Objekte. Es ist kein Token in der Anfrage erforderlich.\"],\"VaA9mu\":[\"24 Stunden\"],\"VakxP/\":[\"Fehler beim Hochladen des Objekts\"],\"VeDAv2\":[\"Buckets suchen...\"],\"Vg0k6h\":[\"Zeige \",[\"filteredCount\"],\" von \",[\"totalCount\"],\" \",[\"itemName\"]],\"Vh/Uj5\":[\"Zielpfad\"],\"Vj8XFg\":[\"Fehler beim Erstellen des Containers\"],\"Vl4XTj\":[\"Ordnername darf keine Schrägstriche enthalten\"],\"Vmojta\":[\" Zugriffsstatus auf \\\"\",[\"newStatus\"],\"\\\" aktualisiert.\"],\"VoxR3s\":[\"Objekt wurde kopiert, konnte aber nicht von der Quelle gelöscht werden: \",[\"deleteErrorMessage\"]],\"Vz+7ZA\":[\"Container \\\"\",[\"containerName\"],\"\\\" konnte nicht erstellt werden: \",[\"errorMessage\"]],\"Vzlopx\":[\"Container löschen:\"],\"W1ZvXE\":[\"Failed to Delete Versions\"],\"W5A0Ly\":[\"An unexpected error occurred.\"],\"W5FkH9\":[\"Container-Name eingeben\"],\"W8Rb/w\":[\"Bucket name must not be formatted as an IP address\"],\"W9PZE0\":[\"Objekte gelöscht\"],\"W9kfjU\":[\"QoS-Policy-ID\"],\"WCKEqI\":[\"Dies ist ein <0>statisches großes Objekt (SLO)-Manifest. Metadaten-Änderungen gelten nur für das Manifest — Segment-Objekte sind nicht betroffen.\"],\"WCLyHI\":[\"Keine Floating IPs gefunden\"],\"WErCZy\":[\"Minimaler RAM, der zum Booten dieses Images erforderlich ist\"],\"WIJz7N\":[\"Checking if object exists...\"],\"WM+Nm7\":[\"Keep multiple versions of objects. Cannot be fully disabled once enabled, only suspended.\"],\"WRZ3Mt\":[\"Container-Eigenschaften werden geladen...\"],\"WV/4x1\":[\"Loading buckets...\"],\"WYiUDa\":[\"Container werden geladen...\"],\"Wbg1jv\":[[\"text\"],\" in die Zwischenablage kopieren\"],\"Wca9WC\":[\"Security Groups konnten nicht geladen werden\"],\"WdmJIX\":[\"Vorschau wird geladen...\"],\"WefafP\":[\"Dieser Container scheint leer zu sein — die Objekt-Anzahl ist möglicherweise aufgrund einer kürzlichen Operation noch nicht synchronisiert.\"],\"WidMsn\":[\"Create Certificate Authority\"],\"WlpcJv\":[\"DNS-Domain\"],\"WoSkGY\":[\"Entfernte IP\"],\"WxpQ1y\":[\"Failed to delete versions from bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"WyKwnD\":[\"Alte Objekt-Versionen speichern\"],\"WzVwU0\":[\"Zielprojekt-ID\"],\"WzsMfv\":[\"Start typing to search for a bucket\"],\"X2OnDx\":[\"Ephemeral Disk (GiB)\"],\"X70LXS\":[[\"numberDeleted\"],\" Objekte wurden dauerhaft gelöscht.\"],\"XLk16/\":[\"Gemeinsam können wir das volle Potenzial Ihrer Cloud-Infrastruktur erschließen.\"],\"XXRutf\":[\"Folder Name\"],\"XXjbEV\":[\"Für <0>dynamische und <1>statische große Objekte werden nur die Manifeste gelöscht — die zugehörigen Segmente werden nicht gelöscht.\"],\"XYZLy9\":[\"Schlüssel enthält ungültige Zeichen\"],\"XhfBNl\":[[\"totalCount\",\"plural\",{\"one\":[\"#\",\" Objekt löschen\"],\"other\":[\"#\",\" Objekte löschen\"]}]],\"XicAqm\":[\"Failed to load policy\"],\"XjGaah\":[\"Could not delete bucket policy from \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"XvjC4F\":[\"Wird gespeichert...\"],\"XwxJJB\":[\"Container \\\"\",[\"containerName\"],\"\\\" wurde erfolgreich erstellt.\"],\"XxjLdW\":[[\"emptiedCount\",\"plural\",{\"one\":[\"#\",\" Container war bereits leer.\"],\"other\":[\"#\",\" Container waren bereits leer.\"]}]],\"Y+2SDm\":[\"Security Group \\\"\",[\"securityGroupName\"],\"\\\" löschen\"],\"Y1YKad\":[\"Details bearbeiten\"],\"Y8M9Uc\":[\"Der Container wird gelöscht. Diese Aktion ist dauerhaft und kann nicht rückgängig gemacht werden.\"],\"YIix5Y\":[\"Suchen...\"],\"YNgcgc\":[\"Flavor-Details werden geladen...\"],\"YRexkb\":[\"Objekt aktualisiert\"],\"YUU0QW\":[\"Flavor-ID ist erforderlich und darf nicht leer sein\"],\"YVLcyI\":[\"Successfully emptied \",[\"emptiedCount\"],\" \",[\"emptiedCount\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\", deleting \",[\"totalDeleted\"],\" \",[\"totalDeleted\",\"plural\",{\"one\":[\"object\"],\"other\":[\"objects\"]}],\".\"],\"YZmsaT\":[\"Teilweise erfolgreich aktiviert\"],\"YiMCKk\":[\"ACLs-Vorschau anzeigen\"],\"Yin3uB\":[\"Floating IP wird freigegeben...\"],\"YjAOtb\":[\"Security Group erstellen\"],\"YrAy/S\":[\"Sie haben keine Berechtigung, Metadata für diesen Flavor zu löschen.\"],\"YsOJlj\":[\"Ein Serverfehler ist aufgetreten, während die Zugriffsinformationen für den Flavor abgerufen wurden. Bitte versuchen Sie es später noch einmal.\"],\"YsrbQh\":[\"Eigentümer-Projekt-ID\"],\"YuC9dj\":[\"Zuordnen\"],\"YuGQWb\":[\"Regeltyp\"],\"YwkOoE\":[\"Select a template...\"],\"YzUoh9\":[\"Geben Sie zur Bestätigung <0>delete in das Feld unten ein.\"],\"Z/eWPC\":[\"Das Objekt wird zu diesem Pfad kopiert. Navigieren Sie oben durch die Ordner, um das Ziel zu ändern.\"],\"Z0v/kp\":[[\"percent\"],\"%\"],\"Z2fZGD\":[\"Kein Projekt ausgewählt\"],\"Z30x/C\":[\"Current location:\"],\"Z3FXyt\":[\"Lädt...\"],\"Z42tfY\":[\"Ordner im Object Storage sind virtuell — sie werden als Null-Byte-Platzhalterobjekte mit einem abschließenden Schrägstrich erstellt. Der Ordner wird nach der Erstellung angezeigt.\"],\"Z5r9vC\":[\"Teilweise erfolgreich gelöscht\"],\"Z8lGw6\":[\"Teilen\"],\"ZAx+d1\":[\"Maximale Gesamt-Metadatengröße\"],\"ZAy0zp\":[[\"successCount\"],\" von \",[\"totalCount\"],\" Image(s) erfolgreich deaktiviert\"],\"ZKb0D4\":[\"Cannot move to the same location. Please select a different bucket, folder, or change the name.\"],\"ZUmOzn\":[\"Der Server hat ein unerwartetes Datenformat für Flavor-Details zurückgegeben.\"],\"ZcWMT1\":[\"Image-Instanz \\\"\",[\"imageName\"],\"\\\" wurde deaktiviert\"],\"Zgp2Sm\":[\"Keine Projekte verfügbar.\"],\"ZhVSpK\":[\"Fehler beim Entfernen des Mandantenzugriffs vom Flavor. Bitte versuchen Sie es erneut.\"],\"ZkoPD4\":[\"Size: \",[\"policySize\"],\" / \",[\"MAX_POLICY_SIZE\"],\" bytes\"],\"ZkxxiR\":[\"Unknown domain\"],\"Zq6Y5u\":[\"Der DNS-Name darf höchstens 63 Zeichen lang sein.\"],\"Zshv0H\":[\"Buckets to empty:\"],\"ZvIpwi\":[\"Security Group auswählen...\"],\"Zw49f9\":[\"folder-name\"],\"Zw8Q49\":[\"Security Group nicht gefunden\"],\"a/nTb8\":[\"Image erstellen\"],\"a12lSo\":[\"Port (bis)\"],\"a13wDR\":[\"Zum Suchen von Containern eingeben...\"],\"a3LDKx\":[\"Sicherheit\"],\"a4A2uB\":[\"Account-Listing-Limit\"],\"a4N/Bg\":[\"Mehr laden\"],\"a7C4YS\":[\"Container aktualisiert\"],\"aEAOxI\":[\"There are \",[\"bucketsCount\"],\" buckets, start typing to search\"],\"aG9OiI\":[\"Freigabe-Details\"],\"aI8Tgp\":[\"Eigentümer-Projekt-ID\"],\"aL1w5Z\":[\"Belegt\"],\"aSsVD3\":[\"Öffentlicher Lesezugriff ist nicht aktiviert. Bevor Sie statisches Website-Serving konfigurieren, gehen Sie zu <0>Zugriff verwalten und aktivieren Sie den öffentlichen Lesezugriff.\"],\"aTqCTq\":[\"Image-Datei ist erforderlich\"],\"aV6KPH\":[\"Versehentliches Löschen verhindern\"],\"aZGVW7\":[\"No versions found for this object.\"],\"an5hVd\":[\"Images\"],\"ao/ZJi\":[\"Ordner und alle Inhalte werden gelöscht...\"],\"aqagJH\":[\"Image-Sichtbarkeit kann nicht aktualisiert werden\"],\"arel2K\":[\"Keine Objekte gefunden\"],\"azXlY+\":[\"Zugriffsstatus:\"],\"b0uU1G\":[\"Alte Objekt-Versionen in Container speichern:\"],\"b2BLBa\":[\"Sicherheitsgruppenregel hinzufügen\"],\"b5aNMO\":[\"Der Text muss \\\"delete\\\" entsprechen\"],\"b78j86\":[\"Certificate \",[\"certificateIdValue\"]],\"b95YH9\":[\"Bucket Emptied\"],\"bHUarC\":[\"Bucket Deleted\"],\"bISG26\":[\"Fehler beim Abrufen der Flavor-Zugriffsinformationen. Bitte versuchen Sie es erneut.\"],\"bM1O3m\":[\"Image-Instanz\"],\"bQBMTH\":[\"Dies ist ein <0>statisches großes Objekt. Standardmäßig werden auch alle zugehörigen Segment-Objekte dauerhaft gelöscht.\"],\"bRgFkJ\":[\"Fehler beim Hochladen der Datei \\\"\",[\"fileName\"],\"\\\": \"],\"bYRFNi\":[\"Fehler beim Löschen der Objekte\"],\"bc67JN\":[\"Benutzerdefinierte Eigenschaften / Metadaten\"],\"bmQLn5\":[\"Regel hinzufügen\"],\"bnql/K\":[\"Zurück zu Images\"],\"boJ+Y1\":[\"Ordner erstellen\"],\"boJlGf\":[\"Seite nicht gefunden\"],\"boefwq\":[\"Could not create bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"bpme7e\":[\"Flavor nicht gefunden\"],\"bwRvnp\":[\"Aktion\"],\"bwhBhT\":[\"Security Group\"],\"byKna+\":[\"Ein unerwarteter Fehler ist aufgetreten. Bitte versuchen Sie es erneut.\"],\"bzMKg7\":[\"Akzeptiert\"],\"bzSI52\":[\"Verwerfen\"],\"c+fUtV\":[\"Beginnen Sie mit der Eingabe, um nach einem Container zu suchen\"],\"c+xCSz\":[\"True\"],\"c1OE1x\":[\"CA ID\"],\"c1uL4p\":[\"Das Image \\\"\",[\"imageId\"],\"\\\" konnte nicht gelöscht werden: \",[\"message\"]],\"c5i+X0\":[\"Loading Buckets...\"],\"c6b6fz\":[\"Ausgewählte löschen\"],\"c9Ss4N\":[\"Policy document exceeds maximum size of 20KB\"],\"cBfLPr\":[\"Failed to Delete Policy\"],\"cCfxH1\":[\"Wird heruntergeladen...\"],\"cJDQIO\":[\"Root Disk\"],\"cPKL6O\":[\"Sie sind nicht berechtigt, Flavors zu erstellen. Bitte melden Sie sich erneut an.\"],\"cUKFby\":[\"Lifecycle action\"],\"cWbW6w\":[\"Zugriff verwalten\"],\"cXuXkb\":[\"Benutzer \",[\"userId\"],\" aus Projekt \",[\"projectId\"]],\"chL5IG\":[\"Community\"],\"cj17eo\":[\"Image-Instanz \\\"\",[\"imageName\"],\"\\\" wurde aktiviert\"],\"cjEOmc\":[\"Teilen Sie diese Sicherheitsgruppe mit einem anderen Projekt. Das Zielprojekt kann diese Sicherheitsgruppe ansehen und verwenden, aber nicht ändern oder löschen.\"],\"cnGeoo\":[\"Löschen\"],\"cpw++p\":[\"Unterstützung für statische große Objekte\"],\"cqQyPB\":[\"Ordnername\"],\"ctc4XR\":[\"Delete certificate authority\"],\"d+F6q9\":[\"Erstellt\"],\"d/I0J3\":[\"Ausgewählte aktivieren\"],\"d0pLfy\":[\"Security Group konnte nicht gelöscht werden\"],\"dEHa3L\":[\"Type the bucket name to confirm\"],\"dEgA5A\":[\"Abbrechen\"],\"dFb5Nt\":[\"Id\"],\"dLFiER\":[\"Fehler beim Laden der Container: \",[\"errorMessage\"]],\"dOevLB\":[\"Läuft ab in \",[\"selectedPresetLabel\"],\" — um \",[\"expiresAtFormatted\"]],\"dPj4yB\":[\"Bei Ihrem Konto anmelden\"],\"dPoCVe\":[\"“detach” zur Bestätigung eingeben\"],\"dTNzBI\":[\"Schlüssel muss mindestens ein alphanumerisches Zeichen enthalten\"],\"dVdc7N\":[\"Sie sind nicht berechtigt, Metadata zu löschen. Bitte melden Sie sich erneut an.\"],\"dd2ndz\":[\"Einträge in ACLs werden durch Kommas getrennt. Beispiele:\"],\"ddf7GN\":[\"Failed to load objects\"],\"diFNkW\":[\"Fehler beim Laden der Komponente\"],\"dku8RF\":[\"Type <0>DELETE to confirm:\"],\"dxMaZH\":[\"Manage your Private Certificate Authority infrastructure\"],\"e0NrBM\":[\"Projekt\"],\"eChIh7\":[\"Flavor \\\"\",[\"flavorName\"],\"\\\" wurde erfolgreich erstellt.\"],\"eGEHJE\":[\"DNS-Name\"],\"eKC+EC\":[\"-\"],\"ePK91l\":[\"Bearbeiten\"],\"eYlnXt\":[\"Keine Images gefunden\"],\"eh/k36\":[\"Regeltyp auswählen...\"],\"ekCRTP\":[\"Abgelehnt\"],\"eks7oA\":[\"Port-ID\"],\"emkxJa\":[\"There are no buckets available with the current search criteria. Try adjusting your search term.\"],\"eslBIK\":[\"Failed to Enable Versioning\"],\"eu70nA\":[\"Läuft ab um (UTC)\"],\"eyRsaH\":[\"Root\"],\"ezT9KW\":[\"Container-Synchronisierung\"],\"f+Uq1E\":[\"Neuer Objektname\"],\"f0cwjH\":[\"Objekt-Eigenschaften\"],\"fCPhho\":[\"Ein oder mehrere Objekte konnten nicht gelöscht werden:\"],\"fIvd7X\":[\"Fehler beim Löschen der Images\"],\"fJpv9x\":[\"Fehler beim Deaktivieren der Images\"],\"ffw//c\":[\"PCA\"],\"fj5byd\":[\"keine Angabe\"],\"fnCEAB\":[\"Type “delete” to confirm\"],\"foy2JB\":[[\"displayName\"],\" was successfully restored\"],\"fxnDd7\":[\"Fehler beim Generieren der temporären URL: \",[\"generalError\"]],\"fzfAAa\":[\"Ingress\"],\"g+Jead\":[\"IPv6\"],\"g1IxCo\":[\"RAM muss eine ganze Zahl ≥ 128 MB sein.\"],\"g3BSCe\":[\"Swap-Disk muss eine ganze Zahl ≥ 0 sein.\"],\"g3UF2V\":[\"Akzeptieren\"],\"g8Yxlg\":[\"Temporäre URL für \\\"\",[\"objectName\"],\"\\\" wurde in die Zwischenablage kopiert.\"],\"gFKJBP\":[\"Ordnername darf keine führenden oder nachfolgenden Leerzeichen haben\"],\"gGdfWx\":[\"Der Compute-Dienst ist für dieses Projekt derzeit nicht verfügbar. Bitte versuchen Sie es später erneut.\"],\"gMYsdZ\":[\"Auf \\\"Geteilt\\\" setzen\"],\"gOAPiI\":[\"Successfully deleted \",[\"deletedCount\"],\" versions and delete markers from bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"gSpeIX\":[\"Vorschau und Download sind für ältere Versionen noch nicht verfügbar\"],\"gU7JFm\":[\"Sicherheitsgruppenregel wird erstellt...\"],\"gYe+hC\":[\"Zum Hochladen klicken\"],\"gjop1H\":[\"Bucket name must be at least 3 characters\"],\"go0J2x\":[\"Fehler beim Kopieren der temporären URL in die Zwischenablage\"],\"go9U+C\":[\"To confirm, type <0>\\\"delete\\\" in the field below.\"],\"gy6L1u\":[\"Must be a valid common name (FQDN).\"],\"gztCjq\":[\"Die angegebene Projekt-ID ist ungültig. Bitte überprüfen Sie Ihre Eingabe.\"],\"h/lrJz\":[\"Policy Templates\"],\"h3P8z+\":[\"Das Löschen des Flavor ist fehlgeschlagen. Bitte versuchen Sie es erneut\"],\"h47p9L\":[\"—\"],\"h6JDtI\":[\"Paste CSR code\"],\"h8h6oz\":[\"Images deaktiviert\"],\"h99+4y\":[\"Floating IP zuweisen\"],\"hH3kDo\":[\"Image-Details werden geladen...\"],\"hHL/wm\":[\"Image-Instanz \\\"\",[\"imageName\"],\"\\\" wurde aktualisiert\"],\"hLp49h\":[\"<0>\",[\"deleteWord\"],\" zur Bestätigung eingeben:\"],\"hPz54a\":[\"Fehler beim Herunterladen\"],\"hQdfmR\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully deleted.\"],\"hQr1Cr\":[\"Image deaktivieren\"],\"hXUWyd\":[\"Wert ist erforderlich\"],\"hYgDIe\":[\"Erstellen\"],\"he3ygx\":[\"Kopieren\"],\"he4q+i\":[\"z. B. b90f9c4bc76140e18540b2cec1299e2a\"],\"hgpMHD\":[\"Gesamtspeicher\"],\"hkjZ7P\":[\"Fehler beim Aktualisieren der Sichtbarkeit für \\\"\",[\"imageName\"],\"\\\":\"],\"hrBow7\":[\"Netzwerk-ID\"],\"hueclm\":[\"Ordner <0>\\\"\",[\"folderDisplayName\"],\"\\\" und alle darin enthaltenen Objekte werden dauerhaft gelöscht. Dies kann nicht rückgängig gemacht werden.\"],\"hz9da7\":[\"Failed to load Certificates issued by Certificate Authority.\"],\"i0qMbr\":[\"Startseite\"],\"i41Xuw\":[\"Feste IP-Adresse auswählen\"],\"i5MEDc\":[\"Fehler beim Verschieben des Objekts: \",[\"copyErrorMessage\"]],\"i6/ygf\":[\"Eine Eigenschaft mit diesem Schlüssel existiert bereits\"],\"i7u3X3\":[\"Once enabled, versioning cannot be fully disabled, it can only be suspended. Existing versions will remain even after suspension.\"],\"i9I/nL\":[\"This action will permanently delete all objects from \",[\"bucketName\"],\". You may choose to also delete all versions and delete markers. This will enable you to delete the bucket. This action cannot be undone.\"],\"i9TIyi\":[\"Entfernte Sicherheitsgruppe\"],\"i9qiyR\":[\"Läuft ab in\"],\"iH8pgl\":[\"Zurück\"],\"ifQSTI\":[\"Enable versioning\"],\"igVDFt\":[\"Anhängen\"],\"ih2lfP\":[\"No buckets found\"],\"ihMuB8\":[\"Failed to Restore Version\"],\"iqUvrS\":[\"Benutzer C/D/I\"],\"is0Bhk\":[\"Bucket name must be 63 characters or fewer\"],\"izMhIO\":[\"Benutzer \",[\"userId\"],\" (beliebiges Projekt)\"],\"j1Hej6\":[\"URL teilen:\"],\"j9hkgJ\":[\"Regeln\"],\"j9lCXl\":[\"Änderungen werden sofort nach dem Speichern wirksam.\"],\"jBIkmi\":[\"QCOW2, Raw, VMDK, VHD, VHDX, VDI, AMI, ARI, AKI, ISO, PLOOP\"],\"jIPNJG\":[\"Grundlegende Informationen\"],\"jK6wqe\":[\"Ordner \\\"\",[\"folderName\"],\"\\\" und \",[\"deletedCount\"],\" Objekt wurden dauerhaft gelöscht.\"],\"jKopCP\":[\"Netzwerk & Routing\"],\"jMaofI\":[\"Could not enable versioning for bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"jMc/mo\":[\"Beim Erstellen von Metadata ist ein Serverfehler aufgetreten. Bitte versuchen Sie es später erneut.\"],\"jNm/qL\":[\"Dieser Container ist bereits leer.\"],\"jNzyQo\":[\"Objekt-Versionierung\"],\"jPxavx\":[\"Security Group konnte nicht aktualisiert werden\"],\"jS4B2+\":[\"Container-Name stimmt nicht überein\"],\"jSG7wx\":[\"Bitte geben Sie eine gültige Anzahl von Minuten größer als 0 ein\"],\"jVjr9h\":[\"Enter a valid common name in FQDN format (e.g., demo-ca.test.sci).\"],\"jhU93c\":[\"Das Image \\\"\",[\"imageName\"],\"\\\" konnte nicht erstellt werden: \"],\"jq5wGQ\":[\"S3 Object Storage: Setup Required\"],\"js24f6\":[\"Ordner löschen:\"],\"jtnAf8\":[\"Geschützte Images (können nicht gelöscht werden)\"],\"jyVMod\":[\"Restore Version\"],\"jyqLKs\":[\"Dieses Mitglied hat bereits Zugriff auf dieses Image.\"],\"k/zHK7\":[\"Creating Credentials...\"],\"k0vAWv\":[\"Objekt-Anzahl-Quota\"],\"k5nYwm\":[\"vCPU\"],\"k7ENJG\":[[\"rowDisplayName\"],\" vorschauen\"],\"k99j0U\":[\"Upload abbrechen\"],\"kA2lMP\":[\"Externes Netzwerk\"],\"kGmM/p\":[\"Sie haben keine Berechtigung, Metadata für diesen Flavor zu erstellen.\"],\"kIuDMT\":[\"Konfigurieren Sie die Eingangs- und Ausgangsregeln, die steuern, welcher Datenverkehr für diese Sicherheitsgruppe erlaubt ist.\"],\"kKK8AH\":[\"Verfügbare Quota:\"],\"kNeZrV\":[\"No Certificates issued by this Certificate Authority found\"],\"kQYfgO\":[\"Ein oder mehrere Container konnten nicht geleert werden: \",[\"errorMessage\"]],\"kRiVnR\":[\"New uploads will overwrite the current version\"],\"kdcrma\":[\"Existing versions remain accessible\"],\"kiRrtv\":[\"<0>Bitte beachten Sie: Für <1>dynamische und <2>statische große Objekte werden nur die Manifeste gelöscht. Die zugehörigen Segmente werden nicht gelöscht.\"],\"kqJVBO\":[\"Sie haben keine Berechtigung, diese Sicherheitsgruppe zu teilen.\"],\"kuYWaD\":[\"Reservierte Schlüssel: web-index, web-listings, quota-count, quota-bytes\"],\"l+fhn1\":[\"I understand that enabling versioning is permanent\"],\"l75CjT\":[\"Ja\"],\"lAsm87\":[\"Dieses Image vor dem Löschen schützen\"],\"lBVhQs\":[\"Etwas ist schiefgelaufen.\"],\"lN/Z9n\":[\"Security Group-Name ist erforderlich\"],\"lN3xvy\":[\"Regel löschen\"],\"lQ3EIe\":[\"Maximale Löschvorgänge pro Anfrage\"],\"lRRkwQ\":[\"Schreib-ACLs — Vorschau\"],\"lRoPjj\":[\"ETag\"],\"lWTy+Y\":[\"Image kann nicht erstellt werden\"],\"lWxDDh\":[\"Flavor Name\"],\"lZvIXd\":[\"Die Beschreibung darf höchstens 255 Zeichen lang sein.\"],\"lhIa6x\":[\"Fehler beim Laden der Extra-Specs. Bitte versuchen Sie es erneut.\"],\"lq/mBZ\":[\"Objekt-Informationen werden geladen...\"],\"lw1412\":[\"Sie wurden aufgrund von Inaktivität abgemeldet.\"],\"lxentK\":[\"Ein unerwarteter Fehler ist aufgetreten\"],\"m16xKo\":[\"Hinzufügen\"],\"m6X3ro\":[\"Gruppenname\"],\"mMHJ/+\":[\"Suspend Versioning\"],\"mQSO1Y\":[\"Port Forwarding\"],\"mSLePW\":[\"Sie haben keine Berechtigung, auf Flavors für dieses Projekt zuzugreifen.\"],\"mSfwLL\":[\"Projekt-ID\"],\"mTJdHL\":[\"All objects in the folder can be restored from version history.\"],\"mYnJeY\":[\"Der Text muss “release” in Kleinbuchstaben entsprechen.\"],\"mbmb/h\":[\"Also delete all versions and all delete markers\"],\"miy5mb\":[\"PCA (Clavis)\"],\"mqljvE\":[\"Metadaten kopieren\"],\"mvz5Eo\":[\"URL für öffentlichen Zugriff\"],\"mxPfpY\":[\"Neuen Ordner hier erstellen\"],\"mzI/c+\":[\"Herunterladen\"],\"n0ZttO\":[\"Root Disk (GiB)\"],\"n1ekoW\":[\"Einloggen\"],\"n1gB0L\":[\"Floating IP \",[\"floating_ip_address\"],\" bearbeiten\"],\"n22YIM\":[\"Beschreibung bearbeiten\"],\"n2IuBI\":[\"Eine temporäre URL gewährt zeitlich begrenzten Lesezugriff auf dieses Objekt ohne Authentifizierung. Jeder mit dem Link kann es herunterladen, bis es abläuft.\"],\"n3eQzA\":[\"Diese Eigenschaft ist reserviert und kann nicht geändert werden\"],\"n46oLW\":[\"Fehler beim Entfernen des Mitglieds\"],\"n9jJG6\":[\"Mitgliedszugriff entfernen\"],\"nETBrc\":[\"Egress\"],\"nLvo6K\":[\"Details der RBAC-Richtlinie:\"],\"nNKXt7\":[\"Deleting this Certificate Authority is permanent, and all the associated certificates will no longer apply to entities.\"],\"nPI6Rk\":[\"Successfully deleted \",[\"deletedCount\"],\" versions from bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"nU1mHK\":[\"Versioning Enabled\"],\"nUuaq8\":[\"Fehler beim Aktualisieren des Containers: \",[\"errorMessage\"]],\"nW/hX9\":[\"Allgemeine Image-Daten\"],\"nWNviN\":[\"Deleting certificate authority...\"],\"nYab6d\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully moved to \",[\"destination\"],\".\"],\"nZbdB+\":[\"Upload abgebrochen\"],\"ndwp1n\":[\"Invalid JSON format\"],\"ne/GWZ\":[\"Innerhalb eines Projekts werden Objekte in Containern gespeichert. Container sind der Ort, an dem Sie Zugriffsberechtigungen und Quotas definieren.\"],\"neiJm0\":[\"Flavors\"],\"ng+PCh\":[\"There are no PCAs available for this project.\"],\"nkpZyk\":[\"Container \\\"\",[\"containerName\"],\"\\\" war bereits leer.\"],\"nnxwBn\":[\"Es gibt keine Regeln für diese Sicherheitsgruppe\"],\"ntNlXu\":[\"Zugriff auflisten\"],\"nzFJqC\":[\"Delete CA\"],\"o/VDOG\":[\"Image kann nicht gelöscht werden\"],\"o6M6l0\":[\"Security Group konnte nicht erstellt werden\"],\"oAMLhA\":[\"Full path:\"],\"oDkgME\":[\"Sie sind nicht berechtigt, Flavors zu erstellen. Bitte melden Sie sich erneut an.\"],\"oEGiW3\":[\"Wird hochgeladen... \",[\"progressPct\"],\"%\"],\"oFZY0k\":[\"Fehler beim Herunterladen des Objekts\"],\"oJVmWq\":[\"Could not delete \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"ocUvR+\":[\"False\"],\"odVI9Y\":[\"Container gelöscht\"],\"og1m+J\":[\"Loading Certificate Authority Details...\"],\"okXQSt\":[\"Subject information\"],\"olfSYj\":[\"Zugriffskontrolle aktualisiert\"],\"p4nMut\":[\"Swap (MiB)\"],\"p7DzCB\":[\"Fehler beim Aktualisieren der Zugriffskontrolle\"],\"pD/2BQ\":[\"Successfully emptied \",[\"emptiedCount\"],\" of \",[\"totalBuckets\"],\" \",[\"totalBuckets\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\", deleting \",[\"totalDeleted\"],\" \",[\"totalDeleted\",\"plural\",{\"one\":[\"object\"],\"other\":[\"objects\"]}],\". \",[\"errorsLength\"],\" \",[\"errorsLength\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\" failed.\"],\"pFg+7w\":[\"Aktualisiert:\"],\"pOPvlj\":[\"Bereits aktiv (wird übersprungen)\"],\"pPr2iF\":[\"Could not delete versions from bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"pQB7Sy\":[\"Could not suspend versioning for bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"pU25+T\":[\"Upload von \\\"\",[\"objectName\"],\"\\\" wurde abgebrochen.\"],\"pYR76U\":[\"Importing Certificate...\"],\"pbzA+s\":[\"Optionale Beschreibung\"],\"pebLmQ\":[\"Zugriff für \",[\"memberIdDisplay\"],\" entfernen\"],\"pkz+z2\":[\"Failed to save policy\"],\"plnnns\":[[\"successCount\"],\" Image(s) gelöscht, aber \",[\"failedCount\"],\" Image(s) konnten nicht gelöscht werden.\"],\"pmJY1C\":[\"Successfully deleted bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"poCbZw\":[\"ACLs werden geladen...\"],\"podzPY\":[\"Projekt-ID\"],\"pubQie\":[\"Value eingeben\"],\"q0Rla3\":[\"Projektzugriff hinzufügen\"],\"q44uUq\":[\"Container teilweise geleert\"],\"q6K46F\":[\"Schlüssel existiert bereits\"],\"q88/6A\":[\"Fehler beim Erstellen des Ordners\"],\"qAkkjP\":[\"Maximale Objekt-Namenslänge\"],\"qEDO1j\":[\"Dies ist ein <0>dynamisches großes Objekt. Nur das Manifest wird gelöscht — die zugehörigen Segment-Objekte (gespeichert unter dem Manifest-Präfix) werden <1>nicht automatisch entfernt und müssen separat gelöscht werden.\"],\"qJb6G2\":[\"Erneut versuchen\"],\"qQ1QBh\":[\"Hardware-Spezifikationen\"],\"qUlxA+\":[\"Ordner \\\"\",[\"folderName\"],\"\\\" wurde dauerhaft gelöscht.\"],\"qaAo9Y\":[\"Es ist ein Serverfehler beim Erstellen des Flavors aufgetreten. Bitte versuchen Sie es später erneut.\"],\"qh5W8q\":[\"Richtlinie entfernen\"],\"qhDo93\":[\"Common name is required.\"],\"qs+BrU\":[\"Sie haben keine Berechtigung, Projektzugriffe von diesem Flavor zu entfernen.\"],\"qtoOYG\":[\"Kein Limit\"],\"quU9wK\":[[\"failedCount\"],\" von \",[\"totalCount\"],\" Image(s) konnten nicht deaktiviert werden. Einige Images sind möglicherweise bereits deaktiviert oder in einem ungültigen Zustand.\"],\"qvF2D8\":[\"Keine Images verfügbar. Filtern Sie neu oder erstellen Sie ein neues Image.\"],\"qxxo7y\":[\"Keine Richtlinien entsprechen Ihrer Suche\"],\"qzIZOL\":[\"Ungültiges Dateiformat. Unterstützte Formate: \",[\"supportedFileFormats\"]],\"qzhUb9\":[\"Erste \",[\"maxOptions\"],\" von \",[\"totalCount\"],\" werden angezeigt — verfeinern Sie Ihre Suche, um die Ergebnisse einzugrenzen\"],\"r5SQFW\":[\"Container-Name muss \",[\"maxContainerNameLength\"],\" Zeichen oder weniger haben\"],\"r9Aac8\":[\"Ephemeral Disk\"],\"rAtQcX\":[\"Sie können das Objekt umbenennen, indem Sie den Namen hier ändern.\"],\"rD9yV1\":[\"Zu deaktivierende Images:\"],\"rG3WVm\":[\"Auswählen\"],\"rIe0oV\":[\"Fehler beim Hinzufügen des Zugriffs für das Project zum Flavor. Bitte versuchen Sie es erneut.\"],\"rIi6x4\":[\"Der Flavor konnte nicht gefunden werden. Möglicherweise wurde er bereits gelöscht.\"],\"rJe6vw\":[\"7 Tage\"],\"rPuPb+\":[\"Checking bucket contents...\"],\"rbuO5A\":[\"Diese Sicherheitsgruppe ist bereits mit dem angegebenen Projekt geteilt.\"],\"rcBt6T\":[\"Failed to create credential: \",[\"errorMessage\"]],\"rdUucN\":[\"Vorschau\"],\"rfemv7\":[\"Ungültige Anmeldedaten. Bitte überprüfen Sie Ihre Domain, Ihren Benutzernamen und Ihr Passwort.\"],\"rhaNn7\":[\"Container werden geladen...\"],\"riR9oD\":[\"Hinweis: Für <0>statische und dynamische große Objekte werden nur die Manifeste gelöscht — ihre Segmente außerhalb dieses Ordnerpräfixes sind nicht betroffen.\"],\"rlgAtt\":[\"Das Objekt wird zu diesem Pfad verschoben. Navigieren Sie oben durch die Ordner, um das Ziel zu ändern.\"],\"rp0Bd0\":[\"Compute\"],\"rrjuul\":[\"Weitere Details finden Sie in der <0>Dokumentation.\"],\"rvXsSb\":[\"Der Projektzugriff für \\\"\",[\"tenantIdToRemove\"],\"\\\" wurde erfolgreich entfernt.\"],\"rwBVXS\":[\"Zu löschende Images (\",[\"deletableCount\"],\")\"],\"rx4T2i\":[\"Issue Certificate\"],\"ryf/ee\":[\"Images aktiviert\"],\"ryxYVo\":[\"Zu deaktivierende Images (\",[\"activeCount\"],\")\"],\"s/s1lz\":[\"Jeder Benutzer kann eine HEAD- oder GET-Operation auf dem Container ausführen, sofern der Benutzer auch Lesezugriff auf Objekte hat. Es ist kein Token erforderlich.\"],\"s2ubkU\":[\"Flavor ID\"],\"s4Vnq2\":[\"Wird geleert...\"],\"sCPiLi\":[\"Type DELETE to confirm\"],\"sNVNmf\":[\"MAC-Adresse\"],\"sPFHpI\":[\"Disk\"],\"sSNyf3\":[\"Willkommen beim <0>Aurora-Dashboard, Ihrer Cloud-Management-Lösung der nächsten Generation. Wir sind bestrebt, die Art und Weise, wie Sie mit Ihrer Cloud-Infrastruktur interagieren und diese verwalten, zu vereinfachen. Mit Effizienz, Skalierbarkeit und Benutzerfreundlichkeit im Kern konzipiert, ermöglicht Aurora Ihnen, Prozesse zu optimieren und das volle Potenzial Ihrer Cloud-Ressourcen auszuschöpfen.\"],\"sWBLli\":[\"Eigenschaft hinzufügen\"],\"sXd+qS\":[\"Eigenschaften von \\\"\",[\"objectName\"],\"\\\" wurden erfolgreich aktualisiert.\"],\"sYJvnu\":[\"Create New Folder\"],\"sa4CV6\":[\"Alle Benutzer aus Projekt \",[\"projectId\"]],\"sgra3S\":[\"You can re-enable versioning at any time\"],\"shKIZu\":[\"Zu aktivierende Images (\",[\"deactivatedCount\"],\")\"],\"sihD20\":[\"Images werden geladen...\"],\"sjMCOP\":[\"Zuletzt geändert\"],\"sl2P3q\":[\"Object:\"],\"slWh5C\":[\"Floating IP \",[\"floating_ip_address\"],\" einem Port zuordnen\"],\"sxbP3b\":[\"Objekt-Anzahl\"],\"t/YqKh\":[\"Entfernen\"],\"t/cZdQ\":[\"Full Path:\"],\"t0X9+8\":[\"Container-Name\"],\"t1POAD\":[\"Keine benutzerdefinierten Metadaten-Eigenschaften gefunden. Klicken Sie auf \\\"Eigenschaft hinzufügen\\\", um eine zu erstellen.\"],\"t1fq6V\":[\"Der Server hat ein unerwartetes Datenformat zurückgegeben.\"],\"t7ewhH\":[\"Could not empty bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"t7ff15\":[\"gültiges Token erforderlich: false\"],\"t95VRV\":[\"Über das Aurora-Dashboard\"],\"tASa/P\":[\"Beim Löschen des Flavors ist ein Serverfehler aufgetreten. Bitte versuchen Sie es später erneut.\"],\"tIc6vY\":[\"Could not copy \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"tIrNgH\":[\"Beim Abrufen der Metadata ist ein Serverfehler aufgetreten. Bitte versuchen Sie es später erneut.\"],\"tLerHy\":[\"Ephemeral Disk muss eine ganze Zahl ≥ 0 sein.\"],\"tM5SEI\":[\"ACLs für Container \\\"\",[\"containerName\"],\"\\\" wurden erfolgreich aktualisiert.\"],\"tOkmLM\":[\"Fehler beim Kopieren des Objekts\"],\"tV/Ozb\":[\"Port-Bereich\"],\"tVSmFT\":[\"Weitere werden geladen...\"],\"tX5yOZ\":[\"Neuer Ordner\"],\"tasfos\":[\"entfernen\"],\"tbwGSx\":[\"Minimale Festplatte (GB)\"],\"tejJLY\":[\"Floating IP wird zugeordnet...\"],\"tfAKBU\":[\"\\\"\",[\"objectName\"],\"\\\" konnte nicht hochgeladen werden: \",[\"errorMessage\"]],\"tfDRzk\":[\"Speichern\"],\"tfxu04\":[\"Zugriff entfernen für \",[\"tenantId\"]],\"thHAVL\":[\"Akzeptierte Images\"],\"tiflqy\":[\"Image kann nicht reaktiviert werden\"],\"tkRT08\":[\"Metadata size exceeds the 2KB limit. Please remove or shorten some entries before saving.\"],\"tlfxPP\":[\"\\\"\",[\"objectName\"],\"\\\" konnte nicht kopiert werden: \",[\"errorMessage\"]],\"tmpGvt\":[\"production, linux\"],\"u+VWhB\":[\"In die Zwischenablage kopiert!\"],\"u2xIeO\":[\"Fehler beim Aktualisieren der ACLs: \",[\"errorMessage\"]],\"u5HztT\":[\"RX/TX Factor\"],\"u77/s4\":[\"Floating IPs\"],\"u7En0V\":[\"Metadata hinzufügen\"],\"uAI0yI\":[\"Objekt löschen:\"],\"uAQUqI\":[\"Status\"],\"uLtFAr\":[\"Container \\\"\",[\"containerName\"],\"\\\" konnte nicht aktualisiert werden: \",[\"errorMessage\"]],\"uSdnuQ\":[\"VCPUs müssen eine ganze Zahl ≥ 1 sein.\"],\"ubUrot\":[\"Objects: \",[\"containerName\"]],\"ujK/QN\":[\"Objekte werden geladen...\"],\"uly9ET\":[\"Regeldetails:\"],\"up0ZSW\":[\"Fingerprint\"],\"uuKb0T\":[\"Die Beschreibung muss weniger als 65535 Zeichen haben.\"],\"v0hPHE\":[\"Details anzeigen\"],\"v3djpU\":[\"Verschieben/Umbenennen\"],\"v9Dn8m\":[\"Das Aurora-Dashboard ist mehr als nur ein Werkzeug – es ist Ihr Partner bei der Navigation in der Cloud. Egal, ob Sie ein kleines Startup oder ein globales Unternehmen sind, Aurora bietet Ihnen die Flexibilität, Leistung und Einfachheit, die Sie benötigen, um Ihre Ziele zu erreichen.\"],\"vBUQNE\":[\"Das Metadata konnte nicht gefunden werden. Möglicherweise wurde es bereits gelöscht.\"],\"vEkTR9\":[\"Quota\"],\"vGjmyl\":[\"Deleted\"],\"vH2C/2\":[\"Swap\"],\"vKDskJ\":[[\"selectedCount\",\"plural\",{\"one\":[\"#\",\" Objekt löschen\"],\"other\":[\"#\",\" Objekte löschen\"]}]],\"vR4HmN\":[\"Lädt Instanzen...\"],\"vTh35P\":[\"Container erstellen\"],\"vXmL4D\":[\"Legen Sie Ihre Image-Datei hier ab\"],\"vZUKSz\":[\"Floating IP \",[\"floating_ip_address\"],\" trennen\"],\"vbajgL\":[\"Öffentlicher Flavor\"],\"vcQSZh\":[\"Dieser Ordner ist leer — verwenden Sie \\\"Neuer Ordner\\\", um einen zu erstellen.\"],\"vi0pmB\":[\"Delete all versions and delete markers\"],\"vmRPFm\":[\"Sicherheitsgruppe teilen\"],\"vmYyLY\":[\"Entferntes IP-Präfix\"],\"vp5vfW\":[\"1 Stunde\"],\"vpt8cE\":[\"URL generieren\"],\"vrPCbw\":[\"Image-ID\"],\"w3bAcf\":[\"Diese Aktion ist dauerhaft. Die Adresse wird aus Ihrem Projekt entfernt und dem öffentlichen Pool zurückgegeben. Dies kann nicht rückgängig gemacht werden.\"],\"w9+8d7\":[\"Projektzugriff entfernen\"],\"wEfZld\":[\"Neuen Flavor erstellen\"],\"wFaT8w\":[\"Fehler beim Leeren der Container\"],\"wH0MtN\":[\"Stellen Sie sicher, dass die eingegebene Projekt-ID und Benutzer-ID korrekt sind. Das System kann diese Werte nicht validieren — falsche IDs können Zugriff auf falsche Projekte und Benutzer gewähren.\"],\"wHhJRb\":[\"Loading versions...\"],\"wL3cK8\":[\"Latest\"],\"wMHvYH\":[\"Value\"],\"wPrtGF\":[\"Key eingeben\"],\"wTg+FY\":[\"Maximale Dateigröße\"],\"wa1Bcq\":[\"Project ID eingeben\"],\"wbqM4L\":[[\"customMinutes\"],\" Minuten\"],\"wcUecy\":[\"Sie haben keine Berechtigung, Metadata für diesen Flavor anzusehen.\"],\"wdUvGT\":[\"Creating Certificate Authority...\"],\"wdxz7K\":[\"Source\"],\"we28Pq\":[\"ACLs-Vorschau ausblenden\"],\"wlQNTg\":[\"Members\"],\"wlUDbB\":[\"Zuletzt aktualisiert: \",[\"formattedDate\"]],\"wrXcuy\":[\"Objektname\"],\"ww8U9y\":[\"Edit/View Bucket Policy\"],\"wxVsr5\":[\"Bucket name does not match\"],\"wyIOMP\":[\"Image-Name ist erforderlich\"],\"wzqqS+\":[\"Hauptmerkmale\"],\"x/XQrD\":[\"Beliebiger Dateityp\"],\"x1bK0h\":[\"Mit den aktuellen Suchkriterien sind keine Container verfügbar. Versuchen Sie, Ihren Suchbegriff anzupassen.\"],\"x3Gs8+\":[\"Edit/View Policy\"],\"x3T4pq\":[\"Die Container-Metadaten melden Objekte, aber keine wurden aufgelistet. Dies kann eine vorübergehende Synchronisierungsverzögerung sein — bitte warten Sie einen Moment und versuchen Sie es erneut.\"],\"x5DnMs\":[\"Last modified\"],\"x5l/TK\":[\"Bereits aktiv (wird übersprungen):\"],\"x7SF89\":[\"Lese-ACLs — Vorschau\"],\"x9AdZ8\":[\"property_key\"],\"xIXYTK\":[\"Your S3 credentials are invalid or expired. Please try creating new credentials or contact your administrator.\"],\"xNG/3n\":[\"Floating IP-Adresse\"],\"xNZKYy\":[[\"failedCount\"],\" von \",[\"totalCount\"],\" Image(s) konnten nicht gelöscht werden. Einige Images sind möglicherweise geschützt oder werden verwendet.\"],\"xOvKAE\":[[\"totalCount\",\"plural\",{\"one\":[[\"filteredCount\"],\" von \",[\"totalCount\"],\" Bucket\"],\"other\":[[\"filteredCount\"],\" von \",[\"totalCount\"],\" Buckets\"]}]],\"xYrGVV\":[\"Die ausgewählten Objekte werden dauerhaft gelöscht. Dies kann nicht rückgängig gemacht werden.\"],\"xdgZcp\":[\"Successfully emptied bucket \\\"\",[\"bucketName\"],\"\\\". \",[\"deletedCount\"],\" objects deleted.\"],\"xqhyRT\":[\"Objekt hochgeladen\"],\"xw2UtT\":[\"Neues Image erstellen\"],\"xyaMox\":[\"Geben Sie \\\"\",[\"CONFIRM_WORD\"],\"\\\" zur Bestätigung ein\"],\"y+KBOY\":[\"z. B. production, linux, ubuntu\"],\"y02Bu1\":[\"Container:\"],\"y0u86k\":[\"Der angeforderte Flavor konnte nicht gefunden werden. Er wurde möglicherweise gelöscht oder Sie haben keinen Zugriff darauf.\"],\"y1GYnY\":[\"\\\"\",[\"objectName\"],\"\\\" konnte nicht verschoben werden: \",[\"errorMessage\"]],\"yDAMyU\":[\"Fehler beim Laden der Buckets: \",[\"errorMessage\"]],\"yDHGP+\":[\"my-bucket-name\"],\"yKu/3Y\":[\"Restore\"],\"yPWFWy\":[\"ICMP-Typ\"],\"yTtJTy\":[\"Image-Metadaten bearbeiten\"],\"yYxB17\":[\"Alle Filter löschen\"],\"ykQ47t\":[\"Failed to Delete Version\"],\"ylfbpz\":[\"Der Key für die Extra-Spec ist erforderlich und darf nicht leer sein.\"],\"yp0UjB\":[\"Ethertype\"],\"yqPflB\":[\"... und \",[\"hiddenCount\"],\" weitere\"],\"yu9G3x\":[\"Security Group bearbeiten\"],\"ywe1H/\":[[\"totalCount\",\"plural\",{\"one\":[[\"totalCount\"],\" Container\"],\"other\":[[\"totalCount\"],\" Container\"]}]],\"yz7wBu\":[\"Schließen\"],\"z+zpLP\":[\"gültiges Token erforderlich: true\"],\"z/5vyM\":[\"Versioning was successfully enabled for bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"z1JceR\":[\"Zurück zu Floating IPs\"],\"z3N8nN\":[\"Enter bucket policy JSON...\"],\"z45o5B\":[\"Objekt-Anzahl\"],\"z9NAjZ\":[\"Objekt gelöscht\"],\"zCD96i\":[\"Sie sind nicht berechtigt, Flavor-Details anzuzeigen. Bitte melden Sie sich erneut an.\"],\"zDS0JC\":[\"Der Name muss 2-50 Zeichen lang sein.\"],\"zWb/Nn\":[\"Maximale Header-Größe\"],\"zc5dcw\":[\"Anmeldung fehlgeschlagen. Bitte überprüfen Sie Ihre Anmeldeinformationen und versuchen Sie es erneut.\"],\"zemvbh\":[\"View Versions\"],\"zga9sT\":[\"OK\"],\"zhM8FP\":[\"Zugriff für einen Benutzer aus einem anderen Projekt gewähren.\"],\"zm7+/D\":[\"Sie sind dabei, <0>\",[\"activeCount\"],\" Image(s) zu deaktivieren. Deaktivierte Images können nicht zum Starten neuer Instances verwendet werden.\"],\"zsqy/h\":[\"Delete Marker\"],\"zwBp5t\":[\"Privat\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+0B+ue\":[\"Projekte\"],\"+1rTEL\":[\"Import Externally Signed Certificate\"],\"+1xG4p\":[\"Click the button below to automatically generate credentials for this project. You only need to do this once.\"],\"+8m5QE\":[\"To access S3 Object Storage, you need EC2 credentials (access key + secret key). These credentials authenticate your requests to the Ceph storage backend.\"],\"+9CXS9\":[\"Images deaktivieren\"],\"+HVj+D\":[\"Add a Signed Certificate to your CA to activate it\"],\"+Jcye3\":[\"Keyname\"],\"+Lt5cp\":[\"Sie sind nicht berechtigt, Projektzugriffe hinzuzufügen. Bitte melden Sie sich erneut an.\"],\"+Nhol2\":[\"Certificate not found\"],\"+NwLgN\":[\"Durch die Aktivierung dieses Images kann es wieder zum Starten neuer Instances verwendet werden.\"],\"+Nx1wc\":[\"Floating IPs konnten nicht geladen werden\"],\"+OEi73\":[\"Object Storage (Swift)\"],\"+Pe7SS\":[\"Failed to delete policy\"],\"+nQTmZ\":[\"Dieses Projekt hat keinen Zugriff auf den Flavor.\"],\"+p6nHr\":[\"Fehler beim Laden der Objekt-Metadaten: \",[\"metadataErrorMessage\"]],\"+pJjJF\":[\"After restoring, this version's content will become the new latest version.\"],\"+rtZ8i\":[\"Version ID:\"],\"+zy2Nq\":[\"Typ\"],\"/0+NVm\":[\"What happens when suspended:\"],\"/1MfrG\":[\"\\\"\",[\"objectName\"],\"\\\" konnte nicht heruntergeladen werden: \",[\"errorMessage\"]],\"/9Squ9\":[\"Sie haben keine Berechtigung, die Details dieses Flavors anzuzeigen.\"],\"/AlhPT\":[\"Confirm deletion of \",[\"displayName\"],\". All objects inside this folder will be marked as deleted but can be restored from version history.\"],\"/BZLRP\":[\"Um diese Aktion zu bestätigen, geben Sie das Wort <0>“detach” in das Feld unten ein.\"],\"/EcdUM\":[\"Ihre Aktion ist erforderlich\"],\"/HejCc\":[\"This bucket does not have a policy attached.\"],\"/HgF9q\":[\"Sortieren nach\"],\"/InK0O\":[\"Gesamtspeicher\"],\"/LXXlY\":[\"Properties of \\\"\",[\"displayName\"],\"\\\" were successfully updated.\"],\"/LqWNN\":[\"\\\"\",[\"objectName\"],\"\\\" konnte nicht gelöscht werden: \",[\"errorMessage\"]],\"/NeNjH\":[\"Eigenschaften des Containers \\\"\",[\"containerName\"],\"\\\" wurden erfolgreich aktualisiert.\"],\"/Nmxy/\":[\"Keine Keypaare verfügbar\"],\"/QIkBY\":[\"<0>Sicher & Zuverlässig: Ihre Daten und Operationen sind mit Sicherheitsstandards auf Unternehmensebene und robuster Zuverlässigkeit geschützt.\"],\"/Qox3b\":[\"Ein Ordner mit diesem Namen existiert bereits\"],\"/Z5n1b\":[\"Ordner erstellen unter:\"],\"/bUiYk\":[\"Router-ID\"],\"/eFtWI\":[\"RBAC-Richtlinien\"],\"/fwE6J\":[\"Older\"],\"/pOQrn\":[\"This action is irreversible. Deleting a bucket permanently removes it and cannot be undone. The bucket must be empty before deletion.\"],\"/xnbdQ\":[\"Der angegebene Benutzer hat Zugriff. Ein Token für den Benutzer (auf ein beliebiges Projekt bezogen) muss in der Anfrage enthalten sein.\"],\"01/uUD\":[\"Segmente beibehalten (nur Manifest löschen)\"],\"07WXfc\":[\"Der Server hat ein unerwartetes Datenformat für die Metadata zurückgegeben.\"],\"0BSSYj\":[\"Ein Serverfehler ist aufgetreten, während der Projektzugriff entfernt wurde. Bitte versuchen Sie es später noch einmal.\"],\"0Gd0NU\":[\"Geteilt\"],\"0P2gFy\":[\"Die gesuchte Seite existiert nicht.\"],\"0Th0CH\":[[\"selectedCount\",\"plural\",{\"one\":[\"Container leeren\"],\"other\":[\"#\",\" Container leeren\"]}]],\"0WsqO0\":[\"Container geleert\"],\"0cVgUw\":[\"Filtern nach\"],\"0cl0a5\":[\"Images suchen...\"],\"0eY8Mz\":[\"Für dieses Projekt sind keine Floating IPs verfügbar. Floating IPs ermöglichen es, öffentliche IP-Adressen Instances zuzuordnen.\"],\"0efWir\":[[\"totalCount\",\"plural\",{\"one\":[\"Container leeren\"],\"other\":[\"#\",\" Container leeren\"]}]],\"0i3NVD\":[\"Delete Version Permanently\"],\"0kCt7e\":[\"Die angegebenen Flavor-Daten sind ungültig. Bitte überprüfen Sie Ihre Eingabe.\"],\"0kc0zi\":[\"Beim Löschen des Metadata ist ein Serverfehler aufgetreten. Bitte versuchen Sie es später erneut.\"],\"0o0OhW\":[\"No objects found.\"],\"0p+s6m\":[\"Typ: \",[\"typeValue\"],\", Code: \",[\"codeValue\"]],\"0u9jhd\":[\"Das Trennen dieser Floating IP hebt die Zuordnung zum aktuellen Port auf. Die Instance ist über diese Adresse nicht mehr erreichbar.\"],\"16085O\":[\"IP-Version\"],\"1DbiGM\":[\"Issuing Self-Signed Certificate...\"],\"1DzQpj\":[\"This folder is empty, use New Folder to create one.\"],\"1H2g6v\":[\"Objekt wird verschoben...\"],\"1NFtQz\":[\"Failed to Delete Bucket\"],\"1NS3nd\":[[\"emptiedCount\",\"plural\",{\"one\":[\"#\",\" Container\"],\"other\":[\"#\",\" Container\"]}],\" erfolgreich geleert. \",[\"totalDeleted\",\"plural\",{\"one\":[\"#\",\" Objekt\"],\"other\":[\"#\",\" Objekte\"]}],\" insgesamt gelöscht.\"],\"1RwosK\":[\"Zielprojekt-ID ist erforderlich\"],\"1UzENP\":[\"Nein\"],\"1VDqZj\":[\"<0>Zukunftssicher: Aurora ist darauf ausgelegt, sich mit den neuesten Trends in der Cloud-Technologie weiterzuentwickeln und stellt so sicher, dass Ihre Lösung immer auf dem neuesten Stand ist.\"],\"1W3TqV\":[\"No new versions will be created\"],\"1bj2LS\":[\"Could not restore \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"1iQtS2\":[\"Erste \",[\"actualObjectCount\"],\" von \",[\"total\"],\" Objekten werden angezeigt\"],\"1iUuTT\":[\"Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.\"],\"1mFMeP\":[\"Delete Versions\"],\"1ojTVo\":[\"DNS-Domain auswählen.\"],\"1pGUZa\":[\"Sitzung läuft ab in\"],\"1pdLQw\":[\"Image nicht gefunden\"],\"1rLu3+\":[\"Container \\\"\",[\"containerName\"],\"\\\" konnte nicht geleert werden: \",[\"errorMessage\"]],\"1rPB1p\":[\"Der Flavor oder das Projekt konnte nicht gefunden werden. Bitte überprüfen Sie, ob sie existieren.\"],\"1t/NnN\":[\"Ablehnen\"],\"1zZ1IK\":[\"Hallo\"],\"20E+79\":[\"Sie müssen sich anmelden, um auf diese Seite zuzugreifen.\"],\"20Kpaw\":[\"Flavor \\\"\",[\"flavorName\"],\"\\\" wurde erfolgreich gelöscht.\"],\"20axE5\":[\"Vom Projekt geteilt\"],\"23wBCX\":[\"Öffentlicher Lesezugriff\"],\"2G+7C1\":[\"Enter a name for the new folder.\"],\"2G6hLq\":[\"Lösche \",[\"specKey\"]],\"2Inn83\":[\"Bulk-Upload von Archivdateien\"],\"2PRzsq\":[\"Could not create folder \\\"\",[\"folderPath\"],\"\\\": \",[\"errorMessage\"]],\"2TtIL2\":[\"Gespeichert als X-Object-Meta-*-Header. Schlüssel sind nicht zwischen Groß- und Kleinschreibung unterscheidend.\"],\"2cJIlz\":[\"Floating Network-ID\"],\"2d/OiW\":[\"Geben Sie Ihren Benutzernamen ein\"],\"2dnZwV\":[\"Ordner \\\"\",[\"folderName\"],\"\\\" konnte nicht gelöscht werden: \",[\"errorMessage\"]],\"2gH+i8\":[\"Sie sind nicht berechtigt, Flavors zu löschen. Bitte melden Sie sich erneut an.\"],\"2mbisJ\":[\"Metadaten \\\"\",[\"trimmedKey\"],\"\\\" wurden erfolgreich hinzugefügt.\"],\"2q/Q7x\":[\"Sichtbarkeit\"],\"2xOCJW\":[\"This action cannot be undone.\"],\"2xbYVD\":[\"Could not update \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"2ysnjX\":[\"<0>Erhöhte Produktivität: Durch die Reduzierung der betrieblichen Komplexität hilft Aurora Ihrem Team, sich auf das Wesentliche zu konzentrieren – Innovationen voranzutreiben und Geschäftserfolg zu sichern.\"],\"2zceEg\":[\"Diese Aktion kann nicht rückgängig gemacht werden. Das Image wird dauerhaft gelöscht.\"],\"33F2A+\":[\"Geben Sie den Container-Namen zur Bestätigung ein\"],\"3Qn0me\":[\"Mitglied hinzufügen\"],\"3dBmvU\":[\"Der Container kann nicht gelöscht werden, da er Objekte enthält. Leeren Sie den Container zuerst.\"],\"3n+vCm\":[\"Benutzerdefinierte Dauer (Minuten)\"],\"3nWqQW\":[\"Sie sind nicht berechtigt, Metadata anzusehen. Bitte melden Sie sich erneut an.\"],\"3nh/7E\":[\"Wenn diese Option aktiviert ist, wird dieser Flavor für alle Projekte verfügbar sein. Wenn sie deaktiviert ist, muss der Zugriff explizit für bestimmte Projekt gewährt werden.\"],\"3oChIh\":[\"<0>Vereinheitlichtes Cloud-Management: Konsolidiert alle Ihre Cloud-Ressourcen in einer intuitiven Oberfläche.\"],\"3oc18/\":[\"Private Flavors konnten nicht geladen werden. Die angezeigte Liste ist möglicherweise unvollständig.\"],\"3q1GLx\":[\"Datei-Upload ausstehend...\"],\"3uDz8n\":[\"Import Signed Certificate\"],\"3x7Sws\":[\"Security Group-Details werden geladen...\"],\"4+2wZO\":[\"Back to Certificate Authorities Details page\"],\"46gjWc\":[\"Delete Folder \\\"\",[\"displayName\"],\"\\\"\"],\"47eI0x\":[\"Die Beschreibung muss mindestens 1 Zeichen lang sein.\"],\"48QXFO\":[\"Erwartetes Format: JJJJ-MM-TT HH:mm:ss\"],\"48bMai\":[\"Bucket name is required\"],\"4BITzH\":[\"Error:\"],\"4EZrJN\":[\"Regeln\"],\"4O2AH3\":[\"Mitglied \\\"\",[\"memberIdToRemove\"],\"\\\" wurde erfolgreich entfernt.\"],\"4bLttB\":[\"Folder name is too long (max 255 characters)\"],\"4cQTyf\":[\"Stateful security groups track connection state. This setting cannot be changed after creation.\"],\"4fh0Wj\":[\"Boot-Größe\"],\"4fvDRe\":[\"Zu aktivierende Images:\"],\"4fvcmm\":[\"Objekt wird hochgeladen als: <0>\",[\"selectedObjectName\"],\"\"],\"4h3Eyf\":[\"\\\"\",[\"objectName\"],\"\\\" wurde erfolgreich hochgeladen.\"],\"4kjaAc\":[\"Keine Servergruppen verfügbar\"],\"4mbrAq\":[\"1 Minute\"],\"4opp4r\":[\"Security Groups\"],\"4pOfUd\":[\"Unsere Mission\"],\"4t33sh\":[\"Fehler beim Aktualisieren des Objekts\"],\"4uXhtt\":[\"CIDR\"],\"4utWB4\":[\"Serverrolle:\"],\"5+FeN2\":[\"URL teilen\"],\"5/wyf8\":[\"Floating IP eingeben\"],\"56IxdF\":[\"Fehler beim Laden der Container-Objekte: \",[\"errorMessage\"]],\"5BLR6Q\":[\"IPv4\"],\"5JDSvn\":[\"Maximale Metadaten-Wertlänge\"],\"5M4Te3\":[\"DNS\"],\"5MF8U2\":[\"Fehler beim Aktualisieren des Containers\"],\"5Od/iS\":[\"Empty the bucket\"],\"5Okch2\":[\"Leeren:\"],\"5PhMH2\":[\"Failed to Suspend Versioning\"],\"5Yrl6N\":[\"Lädt Servergruppen\"],\"5aNQ3F\":[\"\\\"\",[\"objectName\"],\"\\\" wurde erfolgreich nach \",[\"destination\"],\" kopiert.\"],\"5g7owI\":[\"Floating IP wird aktualisiert...\"],\"5p97CR\":[\"Unable to verify bucket versioning status. Please try again.\"],\"5y3O+A\":[\"Deaktivieren\"],\"6+7EwD\":[\"Objekte als Index bereitstellen, wenn Dateiname ist:\"],\"6+OdGi\":[\"Protokoll\"],\"6/xipy\":[\"Container-Format\"],\"644xgx\":[\"Geschützt\"],\"66YUKF\":[\"Failed to Empty Bucket\"],\"6BDqha\":[\"Limits\"],\"6CDYXS\":[\"Statisches Website-Serving\"],\"6E98zF\":[\"Stored as x-amz-meta-* headers. Keys are case-insensitive.\"],\"6EcekU\":[\"Target bucket\"],\"6GBt0m\":[\"Metadata\"],\"6H/Lg1\":[\"Dies ist ein öffentliches Image. Alle Benutzer haben Zugriff darauf. Eine explizite Freigabe ist nicht erforderlich.\"],\"6KRclz\":[\"Ordner erstellt\"],\"6OopEX\":[\"Container geleert\"],\"6Rnrsz\":[\"Zugriff verwalten - \",[\"flavorName\"]],\"6X/9Di\":[\"\\\"\",[\"objectName\"],\"\\\" wurde erfolgreich nach \",[\"destination\"],\" verschoben.\"],\"6YtxFj\":[\"Name\"],\"6fuDFZ\":[\"Empty All Completed with Errors\"],\"6jAi8c\":[\"Bereich\"],\"6luZQA\":[\"Objekt verschoben\"],\"6oolxV\":[\"Dieser Metadata-Key existiert bereits. Bitte verwenden Sie einen anderen Key.\"],\"6qzsuS\":[\"Schreib-ACLs\"],\"6sxz+g\":[\"Port-Name\"],\"6w+VnM\":[\"Container erstellt\"],\"6z9W13\":[\"Neustart\"],\"71SiMe\":[\"Version \",[\"shortVersionId\"],\"... deleted successfully\"],\"76RKuS\":[\"ICMP-Code\"],\"78+riR\":[\"Sie sind nicht berechtigt, Projektzugriffe zu entfernen. Bitte melden Sie sich erneut an.\"],\"7AfIPZ\":[\"Floating Network\"],\"7BpykL\":[\"Fehler beim Erstellen des Extra-Specs. Bitte versuchen Sie es erneut.\"],\"7L01XJ\":[\"Aktionen\"],\"7NC3vm\":[\"Subnet\"],\"7NSdfG\":[\"Container \",[\"progressCurrent\"],\" von \",[\"progressTotal\"],\" wird geleert, bitte warten...\"],\"7Ocn0b\":[[\"count\",\"plural\",{\"one\":[\"#\",\" Objekt\"],\"other\":[\"#\",\" Objekte\"]}]],\"7Q24LN\":[\"Richtlinie\"],\"7SGcZS\":[\"Objekte suchen...\"],\"7T1fHv\":[\"Fehler beim Entfernen des Mitglieds \\\"\",[\"memberIdToRemove\"],\"\\\"\"],\"7UlHhT\":[\"Metadaten \\\"\",[\"keyToDelete\"],\"\\\" wurden erfolgreich gelöscht.\"],\"7XQ3QJ\":[\"Abgelehnter Referrer: \",[\"host\"]],\"7ZnTL8\":[\"Fehler beim Aktualisieren des Objekts: \",[\"mutationErrorMessage\"]],\"7a4DvD\":[\"Keine Server verfügbar\"],\"7aaeOo\":[\"Version of \\\"\",[\"displayName\"],\"\\\" was permanently deleted.\"],\"7d1a0d\":[\"Öffentlich\"],\"7flw0l\":[\"Der Projektzugriff für \\\"\",[\"trimmedTenantId\"],\"\\\" wurde erfolgreich hinzugefügt.\"],\"7hLLUk\":[\"Folder \\\"\",[\"folderPath\"],\"\\\" was successfully created.\"],\"7huC4O\":[\"There are no Certificates available for this Certificate Authority.\"],\"7sMeHQ\":[\"Key\"],\"8/m18Q\":[\"This bucket cannot be deleted yet. Do the following to be able to delete the bucket:\"],\"868txY\":[\"Public Read\"],\"88kg0+\":[\"Erstellt am\"],\"8AriEH\":[\"Image-Instanz \\\"\",[\"imageName\"],\"\\\" wurde erstellt\"],\"8BjKi0\":[\"Last Modified:\"],\"8MSozy\":[\"The object can be restored from version history.\"],\"8Pcsi8\":[\"Geben Sie einen Zeitstempel wie \\\"YYYY-MM-DD HH:mm:ss\\\" ein, um die automatische Löschung zu planen.\"],\"8S2nDL\":[\"No PCAs found\"],\"8TSI9h\":[\"Durch die Deaktivierung dieses Images kann es nicht mehr zum Starten neuer Instances verwendet werden. Bestehende Instances sind nicht betroffen.\"],\"8Tg/JR\":[\"Benutzerdefiniert\"],\"8Txagi\":[\"Objekt kopieren:\"],\"8ZOb7O\":[[\"numberDeleted\"],\" Objekt wurde dauerhaft gelöscht.\"],\"8ZsakT\":[\"Passwort\"],\"8c3/77\":[\"Maximale Metadaten-Namenslänge\"],\"8erw15\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was already empty.\"],\"8jLXs3\":[\"Versionierte Schreibvorgänge\"],\"8s0tOH\":[\"Sie haben keine Berechtigung, diesem Flavor Projektzugriffe hinzuzufügen.\"],\"8t1+HU\":[[\"successCount\"],\" Image(s) deaktiviert, aber \",[\"failedCount\"],\" Image(s) konnten nicht deaktiviert werden.\"],\"8uPTwT\":[[\"filteredCount\",\"plural\",{\"one\":[[\"filteredCount\"],\" von \",[\"totalCount\"],\" Container\"],\"other\":[[\"filteredCount\"],\" von \",[\"totalCount\"],\" Containern\"]}]],\"8wdCNd\":[\"tcp, udp, icmp oder Protokollnummer\"],\"8zAn1f\":[\"Fehler beim Löschen des Flavors. Bitte versuchen Sie es erneut.\"],\"98Fs4G\":[\"Image wird erstellt...\"],\"9J93Xr\":[\"Container-Name darf keine Schrägstriche enthalten\"],\"9SX0bO\":[\"Das Image \\\"\",[\"imageName\"],\"\\\" konnte nicht aktualisiert werden: \"],\"9X8lAk\":[\"Zuweisen\"],\"9doWrf\":[\"Fehler beim Hinzufügen des Mitglieds\"],\"9dsDHD\":[\"Das Image \\\"\",[\"imageId\"],\"\\\" konnte nicht reaktiviert werden: \",[\"message\"]],\"9iz2XW\":[\"Image kann nicht aktualisiert werden\"],\"9kDPaB\":[\"Issue End-Entity Certificate\"],\"9njIiV\":[\"Fehler beim Aktivieren der Images\"],\"9rz81C\":[\"Geräte-ID\"],\"9v5VLp\":[\"Keine benutzerdefinierten Eigenschaften definiert\"],\"9vSW3U\":[\"Rekursiv löschen\"],\"9x6EkK\":[\"Dies ist ein öffentlicher Flavor. Alle Projekte haben Zugriff darauf.\"],\"A7CVME\":[\"Wählen Sie zuerst das Festplattenformat\"],\"AB4Tnl\":[\"Bitte wählen Sie eine Datei zum Hochladen aus\"],\"AGXLLY\":[\"Image-Datei kann nicht hochgeladen werden\"],\"AJRhSM\":[\"Root Disk muss eine ganze Zahl ≥ 0 sein.\"],\"AN0DBJ\":[\"Enter drücken zum Hinzufügen\"],\"ANOoeR\":[[\"totalItemCount\",\"plural\",{\"one\":[[\"totalItemCount\"],\" Element\"],\"other\":[[\"totalItemCount\"],\" Elemente\"]}]],\"ASJMIw\":[\"S3 bucket names must be 3-63 characters long and contain only lowercase letters, numbers, periods, and hyphens. They must start and end with a letter or number, and be globally unique within the cluster.\"],\"AX9Juz\":[\"Die ID darf nur alphanumerische Zeichen, Bindestriche, Unterstriche und Punkte enthalten.\"],\"AXNSZ2\":[\"Confirm deletion of \",[\"displayName\"],\". The object will be marked as deleted but can be restored from version history.\"],\"AZyHwC\":[\"Muss eine gültige IPv4- oder IPv6-Adresse sein (z. B.: 172.24.4.228 oder 2001:db8::1).\"],\"Ac6dy9\":[\"Name eingeben\"],\"AdtLNV\":[\"Stellen Sie sicher, dass ACL-Einträge gültig sind — korrekte Projekt-IDs, Benutzer-IDs und Formate liegen in Ihrer Verantwortung. Ungültige Einträge können stillschweigend unbeabsichtigten Zugriff gewähren oder verweigern.\"],\"AeP3VC\":[\"Date:\"],\"AeXO77\":[\"Account\"],\"Af8YL/\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully copied to \",[\"destination\"],\".\"],\"Afh/Lb\":[\"Zielordner auswählen\"],\"AirKNZ\":[\"Issue Self-Signed Certificate\"],\"AlbUVn\":[\"<0>Optimierte Skalierbarkeit: Aurora ist für Unternehmen jeder Größe konzipiert und wächst mit Ihnen mit, unterstützt einfache Umgebungen und komplexe Multi-Cloud-Setups gleichermaßen.\"],\"Alx2/L\":[\"In neuem Tab öffnen\"],\"AuQtzx\":[\"Muss eine nicht-negative Ganzzahl sein\"],\"AxZkIr\":[\"Disk (GiB)\"],\"B2Czeb\":[\"Min. RAM\"],\"B2SpR8\":[\"Bucket name must not start with reserved prefix \\\"\",[\"prefix\"],\"\\\"\"],\"B2i9cQ\":[\"Zu löschende Objekte (\",[\"totalCount\"],\")\"],\"B3toQF\":[\"Objekte\"],\"BCJPTn\":[\"Zugriff für alle Benutzer aus diesem Projekt gewähren.\"],\"BCXapL\":[\"Fehler beim Laden der Container-Eigenschaften: \",[\"errorMessage\"]],\"BGZ26c\":[[\"displayName\"],\" öffnen\"],\"BGsuZN\":[\"Key contains invalid characters (use only letters, digits, hyphens, underscores)\"],\"BJt+PJ\":[\"Fehler beim Löschen des Containers\"],\"BMTd81\":[\"Diese Aktion kann nicht rückgängig gemacht werden. Das Zielprojekt verliert sofort den Zugriff auf diese Sicherheitsgruppe.\"],\"BOQYRn\":[\"Lädt Key Pairs...\"],\"BOoOLQ\":[\"All Buckets Emptied\"],\"BP4Fwj\":[\"Fehler beim Laden der Objekte: \",[\"errorMessage\"]],\"BSpWob\":[\"\\\"\",[\"displayName\"],\"\\\" konnte nicht heruntergeladen werden: \",[\"errorMessage\"]],\"BTsbBe\":[\"Bucket Name\"],\"BYH/2L\":[\"Image kann nicht deaktiviert werden\"],\"BgMp/T\":[\"Ungültige Formatkombination für das ausgewählte Festplattenformat\"],\"Blsc/x\":[\"Delete Certificate Authority\"],\"BoIAP6\":[\"Die ID des Netzwerks, das der Floating IP zugeordnet ist.\"],\"BoPocW\":[\"MD5-Prüfsumme\"],\"BrrIs8\":[\"Storage\"],\"CA8ZeT\":[\"Sichtbarkeit des Images \\\"\",[\"imageName\"],\"\\\" auf \",[\"visibility\"],\" aktualisiert\"],\"CBFSfX\":[\"Bitte korrigieren Sie die Validierungsfehler unten.\"],\"CFMxC8\":[\"Images gelöscht\"],\"CMVP7y\":[\"Diese Aktion kann nicht rückgängig gemacht werden. Die Regel wird dauerhaft gelöscht.\"],\"CfKRC1\":[\"Empty Bucket\"],\"CgZxr7\":[\"Min. RAM (MB)\"],\"ChOuUj\":[\"Floating IP nicht gefunden\"],\"Cj2Gtd\":[\"Größe\"],\"ClGcRq\":[\"Container\"],\"CongmL\":[\"Could not delete bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"CpZKLR\":[\"Version ID\"],\"CtiFDz\":[\"This will permanently delete all objects from \",[\"totalCount\"],\" selected \",[\"totalCount\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\". This action cannot be undone.\"],\"Cu6xuZ\":[\"Dies ist ein <0>dynamisches großes Objekt (DLO)-Manifest. Metadaten-Änderungen gelten nur für das Manifest — Segment-Objekte sind nicht betroffen.\"],\"CunRry\":[\"Ungültiges Projekt-ID-Format. Muss 32 hexadezimale Zeichen sein (z. B. b90f9c4bc76140e18540b2cec1299e2a) oder UUID-Format (z. B. 12345678-1234-1234-1234-123456789abc)\"],\"Cxgv2U\":[\"Min. Disk\"],\"D3IRXw\":[\"Floating IP wird getrennt...\"],\"D7qT9F\":[\"Warum Aurora wählen?\"],\"D7yx6b\":[\"Version History:\"],\"D8ak4F\":[[\"totalItemCount\",\"plural\",{\"one\":[[\"filteredItemCount\"],\" von \",[\"totalItemCount\"],\" Element\"],\"other\":[[\"filteredItemCount\"],\" von \",[\"totalItemCount\"],\" Elementen\"]}]],\"DDRhQm\":[\"Ihre Sitzung ist abgelaufen.\"],\"DHrCY6\":[\"Common name\"],\"DIZzgv\":[\"Failed to load versions\"],\"DJT9tB\":[\"Account-Quotas\"],\"DKkOPx\":[\"Zusätzliche Spezifikationen\"],\"DNVql8\":[\"Vollständiges Lifecycle-Management von Floating IPs, einschließlich Zuweisung, Port-Zuordnung/-Aufhebung, DNS-Einstellungen und Löschung\"],\"DWBWmW\":[[\"totalCount\",\"plural\",{\"one\":[\"Bucket leeren\"],\"other\":[\"Buckets leeren\"]}]],\"DXRiUg\":[\"All objects in the folder will be permanently deleted.\"],\"DcMIiu\":[\"ACLs für Container \\\"\",[\"containerName\"],\"\\\" konnten nicht aktualisiert werden: \",[\"errorMessage\"]],\"Df0YHr\":[\"Security Group aktualisieren\"],\"Dh1qvV\":[\"Sie sind dabei, \",[\"deletableCount\"],\" Image(s) zu löschen. Diese Aktion kann nicht rückgängig gemacht werden.\"],\"Dia2Ue\":[\"Für diese Security Group sind keine RBAC-Richtlinien vorhanden\"],\"Do5/uH\":[\"Der Flavor oder das Projekt konnte nicht gefunden werden. Möglicherweise wurde es bereits entfernt.\"],\"Dqnh7K\":[\"Spezifischer Referrer: \",[\"host\"]],\"Dt5W9T\":[\"RBAC-Richtlinie entfernen\"],\"DvB4XF\":[\"Legen Sie Ihre Datei hier ab\"],\"E/QGRL\":[\"Deaktiviert\"],\"E4QYe7\":[\"Empfohlene Images\"],\"E55MDj\":[\"Could not delete version of \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"E6nRW7\":[\"URL kopieren\"],\"E7kdtm\":[\"Choose Certificate to Import\"],\"EF2EU9\":[\"Wird gelöscht...\"],\"EJqSbS\":[\"No versions to delete in bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"EPMHs9\":[\"Sie haben keine Berechtigung, Flavors in diesem Projekt zu löschen.\"],\"EQnVgi\":[\"Der Flavor-Service ist für dieses Projekt nicht verfügbar.\"],\"EdQY6l\":[\"Keine\"],\"EdxcAN\":[\"Zugriffskontrolle für Container:\"],\"Enpdmy\":[\"Geben Sie <0>entfernen zur Bestätigung ein:\"],\"EoKe5U\":[\"Domain\"],\"EpWoJ9\":[\"Loading Permissions...\"],\"Eq5PsT\":[\"\\\"detach\\\" zur Bestätigung eingeben\"],\"EqSPkP\":[\"Lädt Flavors...\"],\"Erlvqg\":[\"Objektname darf keine führenden oder nachfolgenden Leerzeichen haben\"],\"ExLULX\":[\"Image-Name\"],\"EztMB8\":[\"Fehler beim Abrufen der Flavors vom Server.\"],\"F02e8I\":[\"Keine benutzerdefinierten Metadaten. Klicken Sie auf \\\"Eigenschaft hinzufügen\\\", um eine zu erstellen.\"],\"F6YIQe\":[\"Effiziente Massenlöschung\"],\"FAA/qW\":[\"Paste the code\"],\"FJO48W\":[\"Create S3 Credentials\"],\"FKL6Jv\":[\"z. B. .r:*,.rlistings\"],\"FOcBn3\":[\"Trennen\"],\"FQBaXG\":[\"Aktivieren\"],\"FRtmJJ\":[\"Storage-Container nicht gefunden\"],\"FSbpS7\":[\"CPU\"],\"FgWsFY\":[\"Objekt <0>\\\"\",[\"displayName\"],\"\\\" wird dauerhaft gelöscht. Dies kann nicht rückgängig gemacht werden.\"],\"FjONW3\":[\"Fehler beim Laden des Flavors\"],\"FjPnAE\":[\"Fehler beim Laden der Security Group\"],\"Flugry\":[[\"progressPct\"],\"%\"],\"FwSyEp\":[\"Das angegebene Projekt existiert nicht oder Sie haben keine Berechtigung, es zu teilen.\"],\"Fzrzfe\":[\"Ordnername ist erforderlich\"],\"G3pRO8\":[\"An object with this name already exists at the destination and will be overwritten.\"],\"G6AP+o\":[\"Geteilt:\"],\"GDx4dP\":[\"Manage your Certificate\"],\"GEgjm+\":[\"Objekte werden geladen...\"],\"GPuCEo\":[\"Leer lassen für alle Typen\"],\"GSIPwA\":[\"Temporäre URL\"],\"GZjazt\":[\"No policy found\"],\"GbKqnI\":[[\"successCount\"],\" Image(s) aktiviert, aber \",[\"failedCount\"],\" Image(s) konnten nicht aktiviert werden.\"],\"Gfx1qQ\":[\"Inhalt kann nicht geladen werden\"],\"Ghp863\":[\"Type \\\"empty\\\" to confirm\"],\"GxkJXS\":[\"Wird hochgeladen...\"],\"Gyd3No\":[\"Kein spezifischer Projektzugriff für diesen privaten Flavor konfiguriert. Klicken Sie auf \\\"Projektzugriff hinzufügen\\\", um Zugriff zu gewähren.\"],\"H+a5j6\":[\"Freigeben\"],\"H4Qwmp\":[\"Keine Objekte entsprechen Ihrer Suche. Versuchen Sie, Ihren Suchbegriff anzupassen.\"],\"H7u085\":[\"Noch kein Projekt hat Zugriff auf dieses Image. Klicken Sie auf \\\"Projektzugriff hinzufügen\\\", um Zugriff zu gewähren.\"],\"HAcOOW\":[\"Your credentials are valid but you don't have permission to perform this operation. Please contact your administrator to grant you the necessary permissions.\"],\"HAkrpK\":[\"Bei Aurora ist es unsere Mission, eine zentrale Plattform bereitzustellen, die das Cloud-Management vereinheitlicht. Wir streben danach, die Komplexitäten der Bereitstellung, Konfiguration und Skalierung von Ressourcen über verschiedene Cloud-Umgebungen hinweg zu vereinfachen und gleichzeitig ein nahtloses Wachstum für Ihr Unternehmen zu ermöglichen.\"],\"HBpi4q\":[\"Lädt Images...\"],\"HDpkS/\":[\"Select destination folder within target bucket\"],\"HG0uMz\":[\"Back to Certificate Authorities\"],\"HM56Bx\":[\"Creating...\"],\"HMV+cw\":[\"Search rules...\"],\"HNlEFZ\":[\"delete\"],\"HQH8HM\":[\"\\\"\",[\"objectName\"],\"\\\" konnte nicht aktualisiert werden: \",[\"errorMessage\"]],\"HVdrr1\":[\"Beliebiger Referrer\"],\"HfL/NM\":[\"Version Deleted\"],\"HiDAFk\":[\"Create Bucket\"],\"Hivb/4\":[\"Der Server hat Probleme. Bitte versuchen Sie es später erneut.\"],\"Hiw1Ha\":[\"Keine Container gefunden\"],\"HlwgQN\":[\"Objekt \\\"\",[\"objectName\"],\"\\\" wurde dauerhaft gelöscht.\"],\"HuA8iQ\":[\"Floating IP wird zugewiesen...\"],\"HxTYrE\":[\"Der Flavor konnte nicht gefunden werden. Möglicherweise wurde er gelöscht.\"],\"HyyJ83\":[\"Zugriffstyp\"],\"HzKlpd\":[\"Failed to empty bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"I5kZVK\":[\"Entfernte Quelle\"],\"INUP6f\":[\"<0>Mühelose Ressourcenbereitstellung: Stellen Sie Ressourcen wie Server, Netzwerke und Volumes schnell bereit, konfigurieren Sie diese und setzen Sie sie mit nur wenigen Klicks ein.\"],\"IOkHLC\":[\"Fehler beim Kopieren des Objekts: \",[\"errorMessage\"]],\"IQSLN+\":[\"Error loading Certificate Authority\"],\"IQldU4\":[\"Bucket name must contain only lowercase letters, numbers, periods, and hyphens\"],\"ISxSs6\":[\"Alle Buckets\"],\"IUwGEM\":[\"Änderungen speichern\"],\"IWF68U\":[\"Speicherübersicht\"],\"IZ6Mh2\":[\"Geben Sie den Domain ein\"],\"IbWX61\":[\"Failed to delete bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"IbYr/u\":[\"Content type\"],\"Io2Dvq\":[\"Certificate Authority not found\"],\"Ioblgz\":[\"Diese Aktion ist dauerhaft. Alle Objekte im Container werden gelöscht und dies kann nicht rückgängig gemacht werden.\"],\"IwlPLb\":[\"Delete Bucket\"],\"IxsRaQ\":[\"Enable Versioning\"],\"J+Sc8C\":[\"Showing first \",[\"MAX_COMBO_OPTIONS\"],\" of \",[\"totalBuckets\"],\", refine your search to narrow results\"],\"J4DKSM\":[\"Container-Format ist erforderlich\"],\"J6EOll\":[\"Objekt verschieben/umbenennen:\"],\"J7+bZb\":[\"Ordner gelöscht\"],\"J9QcnV\":[[\"successCount\"],\" von \",[\"totalCount\"],\" Image(s) erfolgreich aktiviert\"],\"J9cmxx\":[\"Fehler beim Aktualisieren der Sichtbarkeit auf \",[\"newVisibility\"]],\"JB0bhm\":[\"Mitmachen\"],\"JNGYAW\":[\"Container-Name ist erforderlich\"],\"JPWqr2\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully emptied. \",[\"deletedCount\"],\" objects deleted.\"],\"JT+lLV\":[\"Delete Object\"],\"JT3I1g\":[\"Flavor löschen\"],\"JeRXll\":[\"Dieser Schlüssel ist reserviert und wird separat verwaltet\"],\"JedhzP\":[\"Objekt verschieben/umbenennen:\"],\"JfWCsP\":[\"Teilweise erfolgreich deaktiviert\"],\"Jh4rAZ\":[\"Fehler beim Laden des Images\"],\"Jim5X9\":[\"Stateful\"],\"JoECY1\":[\"Die bereitgestellten Metadata-Daten sind ungültig. Bitte überprüfen Sie Ihre Eingabe.\"],\"JpZn1L\":[\"Bereits deaktiviert (wird übersprungen)\"],\"JrmKyf\":[\"Fehlgeschlagen: \",[\"errorDetails\"]],\"JtHgVz\":[\"Images löschen\"],\"JuOpPY\":[\"Alle Objekte in den ausgewählten Containern werden dauerhaft gelöscht. Dies kann nicht rückgängig gemacht werden.\"],\"K+e/0e\":[\"RAM (MiB)\"],\"K3bUTE\":[\"Minimale Festplatte muss 0 oder größer sein\"],\"K8Qnlj\":[\"Wird verschoben...\"],\"K9eC8x\":[\"Dies kann auf unzureichende Berechtigungen oder ein vorübergehendes Serviceproblem zurückzuführen sein. Bitte überprüfen Sie Ihre Zugriffsrechte oder aktualisieren Sie die Seite.\"],\"KDw4GX\":[\"Erneut versuchen\"],\"KJC+M7\":[\"Serverfehler beim Abrufen der Flavor-Details. Bitte versuchen Sie es später erneut.\"],\"KOpPMt\":[\"Gesamtspeicher-Quota\"],\"KSW/GC\":[\"Keine Flavors verfügbar. Filtern Sie neu oder erstellen Sie einen neuen Flavor.\"],\"KhNDX4\":[\"Object Storage (Ceph)\"],\"Kl2hZ+\":[\"Delete Version\"],\"Km4AGG\":[\"Sicherheitsgruppe wird erstellt...\"],\"KoQP4F\":[\"Ein Serverfehler ist aufgetreten, während der Projektzugriff hinzugefügt wurde. Bitte versuchen Sie es später noch einmal.\"],\"KsIM0b\":[\"Boot-RAM\"],\"KsnZ3m\":[\"Ordner \\\"\",[\"folderName\"],\"\\\" wurde erfolgreich erstellt.\"],\"KvQbFT\":[\"This action will permanently delete all objects from \",[\"bucketName\"],\". This action cannot be undone.\"],\"KzUd7m\":[\"new-folder-name\"],\"L9LFMT\":[\"Confirm deletion of \",[\"displayName\"],\". All objects inside this folder will be permanently deleted.\"],\"LASqRM\":[\"Object \\\"\",[\"displayName\"],\"\\\" was permanently deleted.\"],\"LI70tz\":[\"Error loading Certificate\"],\"LI8Z2I\":[[\"rowDisplayName\"],\" herunterladen\"],\"LK0pQN\":[\"Festplattenformat ist erforderlich\"],\"LMdsuJ\":[\"Port (von)\"],\"LQQCas\":[\"Ordner \\\"\",[\"folderName\"],\"\\\" und \",[\"deletedCount\"],\" Objekt wurden dauerhaft gelöscht.\"],\"LT2Vv7\":[\"Bucket policy was successfully deleted from \\\"\",[\"bucketName\"],\"\\\".\"],\"LVU2Dv\":[\"Add Policy\"],\"La2LYh\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully copied to \",[\"destination\"],\" (existing object was replaced).\"],\"Llcakz\":[\"Aktualisiert am\"],\"LqMb+g\":[\"Um diese Aktion zu bestätigen, geben Sie das Wort <0>\\\"release\\\" in das Feld unten ein.\"],\"LtI9AS\":[\"Eigentümer\"],\"Lylr9Z\":[\"Objekt kopiert\"],\"M3bysB\":[\"Bucket Created\"],\"M470oJ\":[\"Der Flavor konnte nicht gefunden werden oder hat keine Metadata.\"],\"M5Epeo\":[\"Image-Details bearbeiten\"],\"M5RhXF\":[\"Wird entfernt...\"],\"M5rEN5\":[\"Sitzung abgelaufen\"],\"M8er/5\":[\"Name:\"],\"MEIAzV\":[\"Unbenannt\"],\"MI6aae\":[\"This action will create a self-signed CA certificate.\"],\"MILoeL\":[\"Services\"],\"MJLqeY\":[\"Failed to check bucket contents: \",[\"errorMessage\"]],\"MJtNLd\":[\"Zu löschende Images:\"],\"MOug+V\":[\"Geben Sie ein Tag ein und drücken Sie Enter oder klicken Sie auf Hinzufügen\"],\"MRB7nI\":[\"Richtung\"],\"MXoA/6\":[\"Objekt hochladen\"],\"MXw7Fr\":[\"Servername\"],\"MZGbkp\":[\"VCPUs\"],\"MbKJNP\":[\"Sie haben keine Berechtigung, auf die Zugriffsinformationen für diesen Flavor zuzugreifen.\"],\"MdfAJn\":[\"You do not have permission to view security groups\"],\"MgZyuJ\":[\"Sie sind dabei, <0>\",[\"deactivatedCount\"],\" Image(s) zu aktivieren. Aktivierte Images stehen zum Starten neuer Instances zur Verfügung.\"],\"Mj5iQ0\":[\"YYYY-MM-DD HH:mm:ss\"],\"MmtQVF\":[\"Ungültiger Wert für die Einstellung des öffentlichen Flavors.\"],\"Mt6sRo\":[\"Sie sind nicht berechtigt, auf die Zugriffsinformationen des Flavors zuzugreifen. Bitte melden Sie sich erneut an.\"],\"MtzSbv\":[\" Objektname ist erforderlich\"],\"N2S1rs\":[\"Leeren\"],\"N40H+G\":[\"All\"],\"N5I2RJ\":[\"\\\"release\\\" zur Bestätigung eingeben\"],\"N5vGcw\":[\"Geben Sie Ihre Anmeldedaten ein, um auf Ihr Konto zuzugreifen.\"],\"NG+FZC\":[\"Issuing End-Entity Certificate...\"],\"NH2fsP\":[\"Bereits deaktiviert (wird übersprungen):\"],\"NNpgo3\":[\"Bucket name\"],\"NOdFZR\":[\"Wird generiert...\"],\"NQU1Nn\":[\"Container-Name kopieren\"],\"NRMm0E\":[\"Dieses Projekt hat bereits Zugriff auf den Flavor.\"],\"NRVSdy\":[\"Mitglieds-ID\"],\"NW1XEL\":[\"Emptying bucket \",[\"progressCurrent\"],\" of \",[\"progressTotal\"],\", please wait...\"],\"NW4PIb\":[\"Ordner \\\"\",[\"folderName\"],\"\\\" konnte nicht erstellt werden: \",[\"errorMessage\"]],\"NZJhro\":[\"Objektname darf keine Schrägstriche enthalten\"],\"NZVIMV\":[\"Certificate \",[\"subjectCommonName\"]],\"Nc7QKU\":[\"Feste IP-Adresse\"],\"Ncv07y\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully restored.\"],\"NeUjqc\":[\"Dateilisting aktivieren\"],\"Ni6RvO\":[\"Versioning Suspended\"],\"NixRmA\":[\"Min. Disk (GB)\"],\"NlcF/v\":[\"Kein Flavor für die Löschung ausgewählt.\"],\"NopYGU\":[\"Festplattenformat\"],\"Np28ib\":[\"oder per Drag & Drop\"],\"Nu4oKW\":[\"Beschreibung\"],\"Nvfd2b\":[\"Versionierung ist aktiviert\"],\"NwXhO7\":[\"Successfully deleted \",[\"deletedCount\"],\" version from bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"O80bQY\":[\"Objekt-Eigenschaften werden geladen...\"],\"O8tK4v\":[\"Regel hinzufügen\"],\"ONWvwQ\":[\"Hochladen\"],\"OR475H\":[\"Netzwerk\"],\"OSlLnz\":[\"Image-Sichtbarkeit\"],\"OYHzN1\":[\"Tags\"],\"OZImTR\":[\"Container-Listing-Limit\"],\"OaHwiV\":[\"Ordner können nicht im Stapel gelöscht werden. Verwenden Sie das Zeilenmenü, um einen Ordner zu löschen.\"],\"OaSktR\":[\"Geräteeigentümer\"],\"Oc8Aqv\":[\"Vorschau und Metadaten bearbeiten\"],\"OlmKCg\":[\"Ein Flavor mit dieser ID oder diesem Namen existiert bereits. Bitte verwenden Sie andere Werte.\"],\"On9AgT\":[\"Delete Bucket Policy\"],\"OvEjsP\":[\"Wird kopiert...\"],\"Ovofy+\":[\"Floating IP \",[\"floating_ip_address\"],\" freigeben\"],\"OxDN2m\":[\"Fehler beim Erstellen des Flavors. Bitte versuchen Sie es erneut.\"],\"OxaeYj\":[\"Wir entwickeln das Aurora-Dashboard, um Ihnen einen besseren Service zu bieten. Ihr Feedback ist von unschätzbarem Wert, um ein Werkzeug zu gestalten, das den einzigartigen Bedürfnissen von Unternehmen wie Ihrem gerecht wird. Bleiben Sie in Verbindung und begleiten Sie uns, während wir das Cloud-Management neu definieren.\"],\"Oxl1UN\":[\"Wenn keine Index-Datei vorhanden ist, zeigt die URL eine Liste der Objekte im Container an.\"],\"P2tWBZ\":[[\"selectedCount\",\"plural\",{\"one\":[\"Bucket leeren\"],\"other\":[\"Buckets leeren\"]}]],\"PAKSdy\":[\"Floating IP eingeben oder leer lassen für automatische Zuweisung\"],\"PDXQxz\":[[\"certificateIdValue\"],\" Certificate Details\"],\"PEGvy+\":[\"Minimaler RAM muss 0 oder größer sein\"],\"PHt+EV\":[\"<0>delete zur Bestätigung eingeben:\"],\"PIbPRX\":[\"RX/TX Faktor muss eine ganze Zahl ≥ 1 sein.\"],\"PLwzWR\":[\"Alle Container\"],\"PYQUjU\":[\"Metadaten-Konfiguration konnte nicht geladen werden.\"],\"PZnUbs\":[\"Bitte melden Sie sich erneut an, um fortzufahren.\"],\"PgNNGl\":[\"Weitere Aktionen\"],\"PiH3UR\":[\"Kopiert!\"],\"PiyQJ/\":[\"Keine Flavors gefunden\"],\"PkfPsB\":[\"Geben Sie die ID des Projekts ein, mit dem Sie diese Sicherheitsgruppe teilen möchten. Sie finden Projekt-IDs im Konto-/Projekt-Umschalter oder im Identity-Service.\"],\"Pkw7J9\":[\"Dieser Ordner ist leer.\"],\"PsEGri\":[\"Ubuntu 22.04 LTS\"],\"PtjzS+\":[\"Wird dem ausgewählten Port zugeordnet. Wenn der Port mehrere IPs hat, wählen Sie die gewünschte feste IP-Adresse.\"],\"PzgYM9\":[\"Prüfsumme\"],\"Q1W//7\":[\"Keine Dienste für dieses Projekt verfügbar.\"],\"Q2xmVl\":[\"Symlinks\"],\"Q9f2QF\":[[\"numberDeleted\"],\" Objekte wurden erfolgreich gelöscht, aber einige Löschvorgänge sind fehlgeschlagen.\"],\"QAUa4B\":[\"Geben Sie einen einzelnen Port ein oder definieren Sie einen Bereich, indem Sie auch \\\"Port (bis)\\\" ausfüllen. \\\"Port (bis)\\\" ist optional.\"],\"QAoi3Q\":[\"Policy Deleted\"],\"QDUXIq\":[\"Are you sure you want to delete the policy for bucket <0>\",[\"bucketName\"],\"?\"],\"QEtDlS\":[\"Objekt wird kopiert...\"],\"QNHur0\":[\"Fehler beim Laden der Container-ACLs: \",[\"errorMessage\"]],\"QQ8wUG\":[\"Diese Aktion kann nicht rückgängig gemacht werden. Der Flavor wird dauerhaft gelöscht.\"],\"QQjQRf\":[\"Kein Temp-URL-Schlüssel konfiguriert. Ein temporärer URL-Schlüssel muss auf Account- oder Container-Ebene gesetzt werden, bevor temporäre URLs generiert werden können. Wenden Sie sich an Ihren Administrator, um X-Account-Meta-Temp-URL-Key oder X-Container-Meta-Temp-URL-Key zu konfigurieren.\"],\"QRlXaL\":[\"Bucket name must not end with reserved suffix \\\"\",[\"suffix\"],\"\\\"\"],\"QV1ZPO\":[\"Schlüssel ist erforderlich\"],\"QWdKwH\":[\"Verschieben\"],\"QYiqYb\":[\"Fehler beim Aktualisieren des Zugriffsstatus\"],\"Qb+14I\":[\"Diese Aktion kann nicht rückgängig gemacht werden. Die Security Group wird dauerhaft gelöscht.\"],\"QcRQm4\":[\"Failed to delete version: \",[\"errorMessage\"]],\"QceOn7\":[\"Bucket Policy\"],\"QdGvPV\":[\"Size:\"],\"QetsXP\":[\"Upload fehlgeschlagen: \",[\"uploadError\"]],\"Qg4EG6\":[\"Die bereitgestellten Flavor-Daten sind ungültig. Bitte überprüfen Sie Ihre Eingabe.\"],\"QpbWpf\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully emptied. \",[\"deletedCount\"],\" object deleted.\"],\"QuJSSl\":[\"Fehler beim Erstellen des Flavors. Bitte versuchen Sie es erneut.\"],\"QvqBQa\":[\"Ziel-Container\"],\"Qx7DM7\":[\"Capabilities\"],\"QxBGbh\":[\"Geschützt (wird übersprungen):\"],\"QytzQr\":[\"Geben Sie \\\"delete\\\" zur Bestätigung ein\"],\"R3U2a2\":[\"Policy JSON\"],\"R5zmZq\":[\"IP Restricted\"],\"R6kcsL\":[\"Muss eine gültige PQDN oder FQDN sein (nur alphanumerische Zeichen und Bindestriche, darf nicht mit einem Bindestrich beginnen oder enden).\"],\"R6u5CR\":[[\"failedCount\"],\" von \",[\"totalCount\"],\" Image(s) konnten nicht aktiviert werden. Einige Images sind möglicherweise bereits aktiv oder in einem ungültigen Zustand.\"],\"R8jkjc\":[\"Confirm deletion of \",[\"displayName\"],\". This action cannot be undone.\"],\"RByeNR\":[\"Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.\"],\"RCr0yv\":[\"Flavor-Details konnten nicht geladen werden. Bitte versuchen Sie es erneut.\"],\"RFDYCD\":[\"Minimale Festplattengröße, die zum Booten dieses Images erforderlich ist\"],\"RGhYAo\":[\"RAM\"],\"RGrgxg\":[\"Container \\\"\",[\"containerName\"],\"\\\" konnte nicht gelöscht werden: \",[\"errorMessage\"]],\"RGwfoL\":[\"Maximale Metadaten-Anzahl\"],\"RHm1CB\":[\"Versioning was successfully suspended for bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"RNBvdl\":[\"Maximale SLO-Segmente\"],\"RQuGRj\":[\"Ändern Sie den Namen, den Ziel-Container oder den Ordner, um dieses Objekt zu verschieben.\"],\"RS0o7b\":[\"State\"],\"RSFkXF\":[\"Image aktivieren\"],\"RSMPjT\":[\"Sie befinden sich derzeit auf der Dashboard-Route.\"],\"RSg/pq\":[\"Fehler beim Löschen des Objekts\"],\"RTQFAw\":[\"Sie sind nicht berechtigt, Metadata zu erstellen. Bitte melden Sie sich erneut an.\"],\"RWQ6BN\":[\"Enter Common name (e.g., demo-ca.test.sci)\"],\"RYhwcU\":[\"Leaving the JSON field empty will remove the policy from the bucket.\"],\"Rih53k\":[\"Maximale Container-Namenslänge\"],\"Rlp5zj\":[\"Flavor erstellen\"],\"Rsh494\":[\"Deleting the policy will remove all access restrictions defined by it. This action cannot be undone.\"],\"S0kLOH\":[\"ID\"],\"S1iTXO\":[\"Image-Instanz \\\"\",[\"imageName\"],\"\\\" wurde gelöscht\"],\"S3olSf\":[\"Keine Metadata gefunden. Klicken Sie auf \\\"Metadata hinzufügen\\\", um eine zu erstellen.\"],\"S5CUKP\":[\"Mitglieds-ID (Projekt-UUID) ist erforderlich.\"],\"S63NbU\":[\"Das Image \\\"\",[\"imageId\"],\"\\\" konnte nicht deaktiviert werden: \",[\"message\"]],\"S8/j2h\":[\"Fehler beim Leeren des Containers\"],\"SBGiGm\":[\"Lese-ACLs\"],\"SCY5an\":[\"Fehler beim Verschieben des Objekts\"],\"SFo0kK\":[\"Alle Images\"],\"SIfYq6\":[\"Metadaten bearbeiten\"],\"SLEH7X\":[\"DNS-Name eingeben\"],\"STc+7E\":[\"Maximale Container pro Extraktion\"],\"SU0uxT\":[\"Objekt hochladen nach:\"],\"SUSS9i\":[\"Container-Name\"],\"SVLToM\":[\"\\\"remove\\\" zur Bestätigung eingeben\"],\"SZw9tS\":[\"Details ansehen\"],\"Sb/VT5\":[\"Container \\\"\",[\"containerName\"],\"\\\" wurde erfolgreich geleert. \",[\"deletedCount\"],\" Objekte gelöscht.\"],\"Sf3Gvg\":[\"Failed to load PCAs\"],\"SfW/3r\":[\"Keine Gruppen vorhanden\"],\"Sgz1vJ\":[\"Mitglied \\\"\",[\"trimmedMemberId\"],\"\\\" wurde erfolgreich hinzugefügt.\"],\"Smk7M2\":[\"Fehler beim Laden der Floating-IP\"],\"SuX2Ca\":[\"Grundlegende Informationen\"],\"Sv3i+l\":[\"Version Restored\"],\"T/UxKm\":[\"<0>Metadaten bearbeiten: <1>\",[\"displayName\"],\"\"],\"T3+VKR\":[\"This action will permanently delete all versions and delete markers. This will enable you to delete the bucket. This action cannot be undone.\"],\"T6Gm5y\":[\"Externes Netzwerk auswählen\"],\"T7mgdd\":[[\"successCount\"],\" von \",[\"totalCount\"],\" Image(s) erfolgreich gelöscht\"],\"T8N6oi\":[\"Eigenschaftsschlüssel\"],\"T9Mtpi\":[\"Projekt ID\"],\"T9o/az\":[\"Loading Certificates issued by Certificate Authority...\"],\"TAaMxB\":[\"Failed to restore version: \",[\"errorMessage\"]],\"TM93nK\":[\"Sicherheitsgruppenregel löschen\"],\"TPMaxo\":[\"“release” zur Bestätigung eingeben\"],\"TQn3hH\":[\"Image konnte nicht erstellt werden. Bitte versuchen Sie es erneut.\"],\"TSclU4\":[\"property-key\"],\"TTX3nV\":[\"Could not move \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"TZJiVf\":[\"Container \\\"\",[\"containerName\"],\"\\\" wurde erfolgreich geleert. \",[\"deletedCount\"],\" Objekt gelöscht.\"],\"TfC9O+\":[\"Zuletzt geändert (UTC)\"],\"TfdeUd\":[\"Fehler beim Löschen des Extra-Specs. Bitte versuchen Sie es erneut.\"],\"TipzDp\":[\"Container suchen...\"],\"TpGxnq\":[\"Mitglieds-ID eingeben\"],\"Tx4Ym+\":[\"Gültige PQDN oder FQDN (max. 63 Zeichen) eingeben, um sie der Floating IP zuzuordnen. A- und PTR-Einträge werden automatisch erstellt.\"],\"TyODHt\":[\"Metadata speichern\"],\"U/oahm\":[\"URL kopiert\"],\"U0sPCo\":[\"Flavors suchen...\"],\"U4fmHG\":[\"Der Text muss “detach” in Kleinbuchstaben entsprechen.\"],\"U6L+P/\":[\"Inaktivitäts-Timeout\"],\"U9q4M7\":[\"Zurück zu Security Groups\"],\"UB+Q8v\":[\"Loading Certificate Details...\"],\"UBv8UK\":[\"Delete Permanently\"],\"UGhVPl\":[\"Objekttyp\"],\"UJmAAK\":[\"Subject\"],\"UK2mpr\":[\"Temporäre URL wird generiert...\"],\"UKwOYH\":[\"Image-Datei\"],\"UO3hJ2\":[\"Temporäre URLs\"],\"UOtFRg\":[\"Define permissions for this bucket. You may use one of the predefined templates.\"],\"UQ7Wyv\":[\"Zugriff für Image verwalten - \",[\"imageName\"]],\"URmyfc\":[\"Details\"],\"USiuNX\":[\"Container-Quotas\"],\"UVFHGY\":[\"z. B. PROJECT_ID:USER_ID\"],\"UYSopm\":[\"Minimaler RAM (MB)\"],\"UaP7Th\":[\"Failed to Create Bucket\"],\"UbRKMZ\":[\"Ausstehend\"],\"UbWeJA\":[\"Duration/validity\"],\"UdcGJu\":[\"Images aktivieren\"],\"Uj+n/2\":[\"Fehler beim Löschen des Ordners\"],\"UkVkoq\":[\"Leer lassen für alle Codes\"],\"UmQ3/m\":[\"Ausgewählte deaktivieren\"],\"Uwo8Xw\":[\"Dieses Image wurde am \",[\"sharedAt\"],\" von <0>\",[\"ownerProject\"],\" mit Ihnen geteilt.\"],\"Ux/pNd\":[[\"totalCount\",\"plural\",{\"one\":[[\"totalCount\"],\" Bucket\"],\"other\":[[\"totalCount\"],\" Buckets\"]}]],\"UztfYZ\":[\"Port zur Zuordnung auswählen\"],\"V/8B9A\":[\"Ich bestätige, dass alle vorhandenen Versionen ebenfalls gelöscht werden\"],\"V/SINY\":[\"Objekt aktualisieren\"],\"V1TzeS\":[\"Container \\\"\",[\"containerName\"],\"\\\" wurde erfolgreich gelöscht.\"],\"V66Jih\":[\"Zugriffsstatus\"],\"V6AQa5\":[\"Versions Deleted\"],\"V7fN5X\":[\"Objekt kopieren:\"],\"V8/eES\":[\"Bucket name must not contain consecutive periods\"],\"V804LY\":[\"Security Group wird aktualisiert...\"],\"VCM3KS\":[\"Projektzugriff hinzufügen\"],\"VG2a+x\":[\"Bucket name must start and end with a letter or number\"],\"VKCkZH\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully created.\"],\"VKmlZ+\":[\"Zu leerende Container (\",[\"totalCount\"],\")\"],\"VLI9eO\":[\"Floating IP-Details werden geladen...\"],\"VMh1t1\":[\"The text must match “delete” in lowercase.\"],\"VMoZmg\":[\"Delete Policy\"],\"VV1fdg\":[\"Jeder Benutzer hat Lesezugriff auf Objekte. Es ist kein Token in der Anfrage erforderlich.\"],\"VaA9mu\":[\"24 Stunden\"],\"VakxP/\":[\"Fehler beim Hochladen des Objekts\"],\"VcWhM0\":[\"Showing \",[\"filteredCount\"],\" of \",[\"totalCount\"],\" projects\"],\"VeDAv2\":[\"Buckets suchen...\"],\"Vg0k6h\":[\"Zeige \",[\"filteredCount\"],\" von \",[\"totalCount\"],\" \",[\"itemName\"]],\"Vh/Uj5\":[\"Zielpfad\"],\"Vj8XFg\":[\"Fehler beim Erstellen des Containers\"],\"Vl4XTj\":[\"Ordnername darf keine Schrägstriche enthalten\"],\"Vmojta\":[\" Zugriffsstatus auf \\\"\",[\"newStatus\"],\"\\\" aktualisiert.\"],\"VoxR3s\":[\"Objekt wurde kopiert, konnte aber nicht von der Quelle gelöscht werden: \",[\"deleteErrorMessage\"]],\"Vz+7ZA\":[\"Container \\\"\",[\"containerName\"],\"\\\" konnte nicht erstellt werden: \",[\"errorMessage\"]],\"Vzlopx\":[\"Container löschen:\"],\"W1ZvXE\":[\"Failed to Delete Versions\"],\"W5A0Ly\":[\"An unexpected error occurred.\"],\"W5FkH9\":[\"Container-Name eingeben\"],\"W8Rb/w\":[\"Bucket name must not be formatted as an IP address\"],\"W9PZE0\":[\"Objekte gelöscht\"],\"W9kfjU\":[\"QoS-Policy-ID\"],\"WCKEqI\":[\"Dies ist ein <0>statisches großes Objekt (SLO)-Manifest. Metadaten-Änderungen gelten nur für das Manifest — Segment-Objekte sind nicht betroffen.\"],\"WCLyHI\":[\"Keine Floating IPs gefunden\"],\"WErCZy\":[\"Minimaler RAM, der zum Booten dieses Images erforderlich ist\"],\"WIJz7N\":[\"Checking if object exists...\"],\"WM+Nm7\":[\"Keep multiple versions of objects. Cannot be fully disabled once enabled, only suspended.\"],\"WRZ3Mt\":[\"Container-Eigenschaften werden geladen...\"],\"WV/4x1\":[\"Loading buckets...\"],\"WYiUDa\":[\"Container werden geladen...\"],\"Wbg1jv\":[[\"text\"],\" in die Zwischenablage kopieren\"],\"Wca9WC\":[\"Security Groups konnten nicht geladen werden\"],\"WdmJIX\":[\"Vorschau wird geladen...\"],\"WefafP\":[\"Dieser Container scheint leer zu sein — die Objekt-Anzahl ist möglicherweise aufgrund einer kürzlichen Operation noch nicht synchronisiert.\"],\"WidMsn\":[\"Create Certificate Authority\"],\"WlpcJv\":[\"DNS-Domain\"],\"WoSkGY\":[\"Entfernte IP\"],\"WxpQ1y\":[\"Failed to delete versions from bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"WyKwnD\":[\"Alte Objekt-Versionen speichern\"],\"WzVwU0\":[\"Zielprojekt-ID\"],\"WzsMfv\":[\"Start typing to search for a bucket\"],\"X2OnDx\":[\"Ephemeral Disk (GiB)\"],\"X70LXS\":[[\"numberDeleted\"],\" Objekte wurden dauerhaft gelöscht.\"],\"XLk16/\":[\"Gemeinsam können wir das volle Potenzial Ihrer Cloud-Infrastruktur erschließen.\"],\"XXRutf\":[\"Folder Name\"],\"XXjbEV\":[\"Für <0>dynamische und <1>statische große Objekte werden nur die Manifeste gelöscht — die zugehörigen Segmente werden nicht gelöscht.\"],\"XYZLy9\":[\"Schlüssel enthält ungültige Zeichen\"],\"XhfBNl\":[[\"totalCount\",\"plural\",{\"one\":[\"#\",\" Objekt löschen\"],\"other\":[\"#\",\" Objekte löschen\"]}]],\"XicAqm\":[\"Failed to load policy\"],\"XjGaah\":[\"Could not delete bucket policy from \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"XvjC4F\":[\"Wird gespeichert...\"],\"XwxJJB\":[\"Container \\\"\",[\"containerName\"],\"\\\" wurde erfolgreich erstellt.\"],\"XxjLdW\":[[\"emptiedCount\",\"plural\",{\"one\":[\"#\",\" Container war bereits leer.\"],\"other\":[\"#\",\" Container waren bereits leer.\"]}]],\"Y+2SDm\":[\"Security Group \\\"\",[\"securityGroupName\"],\"\\\" löschen\"],\"Y1YKad\":[\"Details bearbeiten\"],\"Y8M9Uc\":[\"Der Container wird gelöscht. Diese Aktion ist dauerhaft und kann nicht rückgängig gemacht werden.\"],\"YIix5Y\":[\"Suchen...\"],\"YNgcgc\":[\"Flavor-Details werden geladen...\"],\"YRexkb\":[\"Objekt aktualisiert\"],\"YUU0QW\":[\"Flavor-ID ist erforderlich und darf nicht leer sein\"],\"YVLcyI\":[\"Successfully emptied \",[\"emptiedCount\"],\" \",[\"emptiedCount\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\", deleting \",[\"totalDeleted\"],\" \",[\"totalDeleted\",\"plural\",{\"one\":[\"object\"],\"other\":[\"objects\"]}],\".\"],\"YZmsaT\":[\"Teilweise erfolgreich aktiviert\"],\"YiMCKk\":[\"ACLs-Vorschau anzeigen\"],\"Yin3uB\":[\"Floating IP wird freigegeben...\"],\"YjAOtb\":[\"Security Group erstellen\"],\"YrAy/S\":[\"Sie haben keine Berechtigung, Metadata für diesen Flavor zu löschen.\"],\"YsOJlj\":[\"Ein Serverfehler ist aufgetreten, während die Zugriffsinformationen für den Flavor abgerufen wurden. Bitte versuchen Sie es später noch einmal.\"],\"YsrbQh\":[\"Eigentümer-Projekt-ID\"],\"YuC9dj\":[\"Zuordnen\"],\"YuGQWb\":[\"Regeltyp\"],\"YwkOoE\":[\"Select a template...\"],\"YzUoh9\":[\"Geben Sie zur Bestätigung <0>delete in das Feld unten ein.\"],\"Z/eWPC\":[\"Das Objekt wird zu diesem Pfad kopiert. Navigieren Sie oben durch die Ordner, um das Ziel zu ändern.\"],\"Z0v/kp\":[[\"percent\"],\"%\"],\"Z2fZGD\":[\"Kein Projekt ausgewählt\"],\"Z30x/C\":[\"Current location:\"],\"Z3FXyt\":[\"Lädt...\"],\"Z42tfY\":[\"Ordner im Object Storage sind virtuell — sie werden als Null-Byte-Platzhalterobjekte mit einem abschließenden Schrägstrich erstellt. Der Ordner wird nach der Erstellung angezeigt.\"],\"Z5r9vC\":[\"Teilweise erfolgreich gelöscht\"],\"Z8lGw6\":[\"Teilen\"],\"ZAx+d1\":[\"Maximale Gesamt-Metadatengröße\"],\"ZAy0zp\":[[\"successCount\"],\" von \",[\"totalCount\"],\" Image(s) erfolgreich deaktiviert\"],\"ZKb0D4\":[\"Cannot move to the same location. Please select a different bucket, folder, or change the name.\"],\"ZUmOzn\":[\"Der Server hat ein unerwartetes Datenformat für Flavor-Details zurückgegeben.\"],\"ZcWMT1\":[\"Image-Instanz \\\"\",[\"imageName\"],\"\\\" wurde deaktiviert\"],\"ZggJCp\":[\"Showing \",[\"0\"],\" of \",[\"totalRulesCount\"],\" rules\"],\"Zgp2Sm\":[\"Keine Projekte verfügbar.\"],\"ZhVSpK\":[\"Fehler beim Entfernen des Mandantenzugriffs vom Flavor. Bitte versuchen Sie es erneut.\"],\"ZkoPD4\":[\"Size: \",[\"policySize\"],\" / \",[\"MAX_POLICY_SIZE\"],\" bytes\"],\"ZkxxiR\":[\"Unknown domain\"],\"Zq6Y5u\":[\"Der DNS-Name darf höchstens 63 Zeichen lang sein.\"],\"Zshv0H\":[\"Buckets to empty:\"],\"ZvIpwi\":[\"Security Group auswählen...\"],\"Zw49f9\":[\"folder-name\"],\"Zw8Q49\":[\"Security Group nicht gefunden\"],\"a/nTb8\":[\"Image erstellen\"],\"a12lSo\":[\"Port (bis)\"],\"a13wDR\":[\"Zum Suchen von Containern eingeben...\"],\"a3LDKx\":[\"Sicherheit\"],\"a4A2uB\":[\"Account-Listing-Limit\"],\"a4N/Bg\":[\"Mehr laden\"],\"a7C4YS\":[\"Container aktualisiert\"],\"aEAOxI\":[\"There are \",[\"bucketsCount\"],\" buckets, start typing to search\"],\"aG9OiI\":[\"Freigabe-Details\"],\"aI8Tgp\":[\"Eigentümer-Projekt-ID\"],\"aL1w5Z\":[\"Belegt\"],\"aSsVD3\":[\"Öffentlicher Lesezugriff ist nicht aktiviert. Bevor Sie statisches Website-Serving konfigurieren, gehen Sie zu <0>Zugriff verwalten und aktivieren Sie den öffentlichen Lesezugriff.\"],\"aTqCTq\":[\"Image-Datei ist erforderlich\"],\"aV6KPH\":[\"Versehentliches Löschen verhindern\"],\"aZGVW7\":[\"No versions found for this object.\"],\"an5hVd\":[\"Images\"],\"ao/ZJi\":[\"Ordner und alle Inhalte werden gelöscht...\"],\"aqagJH\":[\"Image-Sichtbarkeit kann nicht aktualisiert werden\"],\"arel2K\":[\"Keine Objekte gefunden\"],\"azXlY+\":[\"Zugriffsstatus:\"],\"b0uU1G\":[\"Alte Objekt-Versionen in Container speichern:\"],\"b2BLBa\":[\"Sicherheitsgruppenregel hinzufügen\"],\"b5aNMO\":[\"Der Text muss \\\"delete\\\" entsprechen\"],\"b78j86\":[\"Certificate \",[\"certificateIdValue\"]],\"b95YH9\":[\"Bucket Emptied\"],\"bHUarC\":[\"Bucket Deleted\"],\"bISG26\":[\"Fehler beim Abrufen der Flavor-Zugriffsinformationen. Bitte versuchen Sie es erneut.\"],\"bM1O3m\":[\"Image-Instanz\"],\"bQBMTH\":[\"Dies ist ein <0>statisches großes Objekt. Standardmäßig werden auch alle zugehörigen Segment-Objekte dauerhaft gelöscht.\"],\"bRgFkJ\":[\"Fehler beim Hochladen der Datei \\\"\",[\"fileName\"],\"\\\": \"],\"bYRFNi\":[\"Fehler beim Löschen der Objekte\"],\"bc67JN\":[\"Benutzerdefinierte Eigenschaften / Metadaten\"],\"bmQLn5\":[\"Regel hinzufügen\"],\"bnql/K\":[\"Zurück zu Images\"],\"boJ+Y1\":[\"Ordner erstellen\"],\"boJlGf\":[\"Seite nicht gefunden\"],\"boefwq\":[\"Could not create bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"bpme7e\":[\"Flavor nicht gefunden\"],\"bwRvnp\":[\"Aktion\"],\"bwhBhT\":[\"Security Group\"],\"byKna+\":[\"Ein unerwarteter Fehler ist aufgetreten. Bitte versuchen Sie es erneut.\"],\"bzMKg7\":[\"Akzeptiert\"],\"bzSI52\":[\"Verwerfen\"],\"c+fUtV\":[\"Beginnen Sie mit der Eingabe, um nach einem Container zu suchen\"],\"c+xCSz\":[\"True\"],\"c1OE1x\":[\"CA ID\"],\"c1uL4p\":[\"Das Image \\\"\",[\"imageId\"],\"\\\" konnte nicht gelöscht werden: \",[\"message\"]],\"c5i+X0\":[\"Loading Buckets...\"],\"c6b6fz\":[\"Ausgewählte löschen\"],\"c9Ss4N\":[\"Policy document exceeds maximum size of 20KB\"],\"cBfLPr\":[\"Failed to Delete Policy\"],\"cCfxH1\":[\"Wird heruntergeladen...\"],\"cJDQIO\":[\"Root Disk\"],\"cPKL6O\":[\"Sie sind nicht berechtigt, Flavors zu erstellen. Bitte melden Sie sich erneut an.\"],\"cUKFby\":[\"Lifecycle action\"],\"cWbW6w\":[\"Zugriff verwalten\"],\"cXuXkb\":[\"Benutzer \",[\"userId\"],\" aus Projekt \",[\"projectId\"]],\"chL5IG\":[\"Community\"],\"cj17eo\":[\"Image-Instanz \\\"\",[\"imageName\"],\"\\\" wurde aktiviert\"],\"cjEOmc\":[\"Teilen Sie diese Sicherheitsgruppe mit einem anderen Projekt. Das Zielprojekt kann diese Sicherheitsgruppe ansehen und verwenden, aber nicht ändern oder löschen.\"],\"cnGeoo\":[\"Löschen\"],\"cpw++p\":[\"Unterstützung für statische große Objekte\"],\"cqQyPB\":[\"Ordnername\"],\"ctc4XR\":[\"Delete certificate authority\"],\"d+F6q9\":[\"Erstellt\"],\"d/I0J3\":[\"Ausgewählte aktivieren\"],\"d0pLfy\":[\"Security Group konnte nicht gelöscht werden\"],\"dEHa3L\":[\"Type the bucket name to confirm\"],\"dEgA5A\":[\"Abbrechen\"],\"dFb5Nt\":[\"Id\"],\"dLFiER\":[\"Fehler beim Laden der Container: \",[\"errorMessage\"]],\"dOevLB\":[\"Läuft ab in \",[\"selectedPresetLabel\"],\" — um \",[\"expiresAtFormatted\"]],\"dPj4yB\":[\"Bei Ihrem Konto anmelden\"],\"dPoCVe\":[\"“detach” zur Bestätigung eingeben\"],\"dTNzBI\":[\"Schlüssel muss mindestens ein alphanumerisches Zeichen enthalten\"],\"dVdc7N\":[\"Sie sind nicht berechtigt, Metadata zu löschen. Bitte melden Sie sich erneut an.\"],\"dd2ndz\":[\"Einträge in ACLs werden durch Kommas getrennt. Beispiele:\"],\"ddf7GN\":[\"Failed to load objects\"],\"diFNkW\":[\"Fehler beim Laden der Komponente\"],\"dku8RF\":[\"Type <0>DELETE to confirm:\"],\"dxMaZH\":[\"Manage your Private Certificate Authority infrastructure\"],\"e0NrBM\":[\"Projekt\"],\"eChIh7\":[\"Flavor \\\"\",[\"flavorName\"],\"\\\" wurde erfolgreich erstellt.\"],\"eGEHJE\":[\"DNS-Name\"],\"eKC+EC\":[\"-\"],\"ePK91l\":[\"Bearbeiten\"],\"eYlnXt\":[\"Keine Images gefunden\"],\"eh/k36\":[\"Regeltyp auswählen...\"],\"ekCRTP\":[\"Abgelehnt\"],\"eks7oA\":[\"Port-ID\"],\"emkxJa\":[\"There are no buckets available with the current search criteria. Try adjusting your search term.\"],\"eslBIK\":[\"Failed to Enable Versioning\"],\"eu70nA\":[\"Läuft ab um (UTC)\"],\"eyRsaH\":[\"Root\"],\"ezT9KW\":[\"Container-Synchronisierung\"],\"f+Uq1E\":[\"Neuer Objektname\"],\"f0cwjH\":[\"Objekt-Eigenschaften\"],\"fCPhho\":[\"Ein oder mehrere Objekte konnten nicht gelöscht werden:\"],\"fIvd7X\":[\"Fehler beim Löschen der Images\"],\"fJpv9x\":[\"Fehler beim Deaktivieren der Images\"],\"ffw//c\":[\"PCA\"],\"fj5byd\":[\"keine Angabe\"],\"fnCEAB\":[\"Type “delete” to confirm\"],\"foy2JB\":[[\"displayName\"],\" was successfully restored\"],\"fxnDd7\":[\"Fehler beim Generieren der temporären URL: \",[\"generalError\"]],\"fzfAAa\":[\"Ingress\"],\"g+Jead\":[\"IPv6\"],\"g1IxCo\":[\"RAM muss eine ganze Zahl ≥ 128 MB sein.\"],\"g3BSCe\":[\"Swap-Disk muss eine ganze Zahl ≥ 0 sein.\"],\"g3UF2V\":[\"Akzeptieren\"],\"g8Yxlg\":[\"Temporäre URL für \\\"\",[\"objectName\"],\"\\\" wurde in die Zwischenablage kopiert.\"],\"gFKJBP\":[\"Ordnername darf keine führenden oder nachfolgenden Leerzeichen haben\"],\"gGdfWx\":[\"Der Compute-Dienst ist für dieses Projekt derzeit nicht verfügbar. Bitte versuchen Sie es später erneut.\"],\"gMYsdZ\":[\"Auf \\\"Geteilt\\\" setzen\"],\"gOAPiI\":[\"Successfully deleted \",[\"deletedCount\"],\" versions and delete markers from bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"gSpeIX\":[\"Vorschau und Download sind für ältere Versionen noch nicht verfügbar\"],\"gU7JFm\":[\"Sicherheitsgruppenregel wird erstellt...\"],\"gYe+hC\":[\"Zum Hochladen klicken\"],\"gjop1H\":[\"Bucket name must be at least 3 characters\"],\"go0J2x\":[\"Fehler beim Kopieren der temporären URL in die Zwischenablage\"],\"go9U+C\":[\"To confirm, type <0>\\\"delete\\\" in the field below.\"],\"gy6L1u\":[\"Must be a valid common name (FQDN).\"],\"gztCjq\":[\"Die angegebene Projekt-ID ist ungültig. Bitte überprüfen Sie Ihre Eingabe.\"],\"h/lrJz\":[\"Policy Templates\"],\"h3P8z+\":[\"Das Löschen des Flavor ist fehlgeschlagen. Bitte versuchen Sie es erneut\"],\"h47p9L\":[\"—\"],\"h6JDtI\":[\"Paste CSR code\"],\"h8h6oz\":[\"Images deaktiviert\"],\"h99+4y\":[\"Floating IP zuweisen\"],\"hH3kDo\":[\"Image-Details werden geladen...\"],\"hHL/wm\":[\"Image-Instanz \\\"\",[\"imageName\"],\"\\\" wurde aktualisiert\"],\"hLp49h\":[\"<0>\",[\"deleteWord\"],\" zur Bestätigung eingeben:\"],\"hPz54a\":[\"Fehler beim Herunterladen\"],\"hQdfmR\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully deleted.\"],\"hQr1Cr\":[\"Image deaktivieren\"],\"hXUWyd\":[\"Wert ist erforderlich\"],\"hYgDIe\":[\"Erstellen\"],\"he3ygx\":[\"Kopieren\"],\"he4q+i\":[\"z. B. b90f9c4bc76140e18540b2cec1299e2a\"],\"hgpMHD\":[\"Gesamtspeicher\"],\"hkjZ7P\":[\"Fehler beim Aktualisieren der Sichtbarkeit für \\\"\",[\"imageName\"],\"\\\":\"],\"hrBow7\":[\"Netzwerk-ID\"],\"hueclm\":[\"Ordner <0>\\\"\",[\"folderDisplayName\"],\"\\\" und alle darin enthaltenen Objekte werden dauerhaft gelöscht. Dies kann nicht rückgängig gemacht werden.\"],\"hz9da7\":[\"Failed to load Certificates issued by Certificate Authority.\"],\"i0qMbr\":[\"Startseite\"],\"i41Xuw\":[\"Feste IP-Adresse auswählen\"],\"i5MEDc\":[\"Fehler beim Verschieben des Objekts: \",[\"copyErrorMessage\"]],\"i6/ygf\":[\"Eine Eigenschaft mit diesem Schlüssel existiert bereits\"],\"i7u3X3\":[\"Once enabled, versioning cannot be fully disabled, it can only be suspended. Existing versions will remain even after suspension.\"],\"i9I/nL\":[\"This action will permanently delete all objects from \",[\"bucketName\"],\". You may choose to also delete all versions and delete markers. This will enable you to delete the bucket. This action cannot be undone.\"],\"i9TIyi\":[\"Entfernte Sicherheitsgruppe\"],\"i9qiyR\":[\"Läuft ab in\"],\"iH8pgl\":[\"Zurück\"],\"ifQSTI\":[\"Enable versioning\"],\"igVDFt\":[\"Anhängen\"],\"ih2lfP\":[\"No buckets found\"],\"ihMuB8\":[\"Failed to Restore Version\"],\"iqUvrS\":[\"Benutzer C/D/I\"],\"is0Bhk\":[\"Bucket name must be 63 characters or fewer\"],\"izMhIO\":[\"Benutzer \",[\"userId\"],\" (beliebiges Projekt)\"],\"j1Hej6\":[\"URL teilen:\"],\"j9lCXl\":[\"Änderungen werden sofort nach dem Speichern wirksam.\"],\"jBIkmi\":[\"QCOW2, Raw, VMDK, VHD, VHDX, VDI, AMI, ARI, AKI, ISO, PLOOP\"],\"jIPNJG\":[\"Grundlegende Informationen\"],\"jK6wqe\":[\"Ordner \\\"\",[\"folderName\"],\"\\\" und \",[\"deletedCount\"],\" Objekt wurden dauerhaft gelöscht.\"],\"jKopCP\":[\"Netzwerk & Routing\"],\"jMaofI\":[\"Could not enable versioning for bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"jMc/mo\":[\"Beim Erstellen von Metadata ist ein Serverfehler aufgetreten. Bitte versuchen Sie es später erneut.\"],\"jNm/qL\":[\"Dieser Container ist bereits leer.\"],\"jNzyQo\":[\"Objekt-Versionierung\"],\"jPxavx\":[\"Security Group konnte nicht aktualisiert werden\"],\"jS4B2+\":[\"Container-Name stimmt nicht überein\"],\"jSG7wx\":[\"Bitte geben Sie eine gültige Anzahl von Minuten größer als 0 ein\"],\"jVjr9h\":[\"Enter a valid common name in FQDN format (e.g., demo-ca.test.sci).\"],\"jhU93c\":[\"Das Image \\\"\",[\"imageName\"],\"\\\" konnte nicht erstellt werden: \"],\"jq5wGQ\":[\"S3 Object Storage: Setup Required\"],\"js24f6\":[\"Ordner löschen:\"],\"jtnAf8\":[\"Geschützte Images (können nicht gelöscht werden)\"],\"jyVMod\":[\"Restore Version\"],\"jyqLKs\":[\"Dieses Mitglied hat bereits Zugriff auf dieses Image.\"],\"k/zHK7\":[\"Creating Credentials...\"],\"k0vAWv\":[\"Objekt-Anzahl-Quota\"],\"k5nYwm\":[\"vCPU\"],\"k7ENJG\":[[\"rowDisplayName\"],\" vorschauen\"],\"k99j0U\":[\"Upload abbrechen\"],\"kA2lMP\":[\"Externes Netzwerk\"],\"kGmM/p\":[\"Sie haben keine Berechtigung, Metadata für diesen Flavor zu erstellen.\"],\"kIuDMT\":[\"Konfigurieren Sie die Eingangs- und Ausgangsregeln, die steuern, welcher Datenverkehr für diese Sicherheitsgruppe erlaubt ist.\"],\"kKK8AH\":[\"Verfügbare Quota:\"],\"kNeZrV\":[\"No Certificates issued by this Certificate Authority found\"],\"kQYfgO\":[\"Ein oder mehrere Container konnten nicht geleert werden: \",[\"errorMessage\"]],\"kRiVnR\":[\"New uploads will overwrite the current version\"],\"kdcrma\":[\"Existing versions remain accessible\"],\"kiRrtv\":[\"<0>Bitte beachten Sie: Für <1>dynamische und <2>statische große Objekte werden nur die Manifeste gelöscht. Die zugehörigen Segmente werden nicht gelöscht.\"],\"kqJVBO\":[\"Sie haben keine Berechtigung, diese Sicherheitsgruppe zu teilen.\"],\"kuYWaD\":[\"Reservierte Schlüssel: web-index, web-listings, quota-count, quota-bytes\"],\"l+fhn1\":[\"I understand that enabling versioning is permanent\"],\"l75CjT\":[\"Ja\"],\"lAsm87\":[\"Dieses Image vor dem Löschen schützen\"],\"lBVhQs\":[\"Etwas ist schiefgelaufen.\"],\"lN/Z9n\":[\"Security Group-Name ist erforderlich\"],\"lN3xvy\":[\"Regel löschen\"],\"lQ3EIe\":[\"Maximale Löschvorgänge pro Anfrage\"],\"lRRkwQ\":[\"Schreib-ACLs — Vorschau\"],\"lRoPjj\":[\"ETag\"],\"lWTy+Y\":[\"Image kann nicht erstellt werden\"],\"lWxDDh\":[\"Flavor Name\"],\"lZvIXd\":[\"Die Beschreibung darf höchstens 255 Zeichen lang sein.\"],\"lhIa6x\":[\"Fehler beim Laden der Extra-Specs. Bitte versuchen Sie es erneut.\"],\"lq/mBZ\":[\"Objekt-Informationen werden geladen...\"],\"lw1412\":[\"Sie wurden aufgrund von Inaktivität abgemeldet.\"],\"lxentK\":[\"Ein unerwarteter Fehler ist aufgetreten\"],\"m16xKo\":[\"Hinzufügen\"],\"m6X3ro\":[\"Gruppenname\"],\"mMHJ/+\":[\"Suspend Versioning\"],\"mQSO1Y\":[\"Port Forwarding\"],\"mSLePW\":[\"Sie haben keine Berechtigung, auf Flavors für dieses Projekt zuzugreifen.\"],\"mSfwLL\":[\"Projekt-ID\"],\"mTJdHL\":[\"All objects in the folder can be restored from version history.\"],\"mYnJeY\":[\"Der Text muss “release” in Kleinbuchstaben entsprechen.\"],\"mbmb/h\":[\"Also delete all versions and all delete markers\"],\"miy5mb\":[\"PCA (Clavis)\"],\"mlxk2U\":[\"Search policies...\"],\"mqljvE\":[\"Metadaten kopieren\"],\"mvz5Eo\":[\"URL für öffentlichen Zugriff\"],\"mxPfpY\":[\"Neuen Ordner hier erstellen\"],\"mzI/c+\":[\"Herunterladen\"],\"n0ZttO\":[\"Root Disk (GiB)\"],\"n1ekoW\":[\"Einloggen\"],\"n1gB0L\":[\"Floating IP \",[\"floating_ip_address\"],\" bearbeiten\"],\"n22YIM\":[\"Beschreibung bearbeiten\"],\"n2IuBI\":[\"Eine temporäre URL gewährt zeitlich begrenzten Lesezugriff auf dieses Objekt ohne Authentifizierung. Jeder mit dem Link kann es herunterladen, bis es abläuft.\"],\"n3eQzA\":[\"Diese Eigenschaft ist reserviert und kann nicht geändert werden\"],\"n46oLW\":[\"Fehler beim Entfernen des Mitglieds\"],\"n9jJG6\":[\"Mitgliedszugriff entfernen\"],\"nETBrc\":[\"Egress\"],\"nLvo6K\":[\"Details der RBAC-Richtlinie:\"],\"nNKXt7\":[\"Deleting this Certificate Authority is permanent, and all the associated certificates will no longer apply to entities.\"],\"nPI6Rk\":[\"Successfully deleted \",[\"deletedCount\"],\" versions from bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"nU1mHK\":[\"Versioning Enabled\"],\"nUuaq8\":[\"Fehler beim Aktualisieren des Containers: \",[\"errorMessage\"]],\"nW/hX9\":[\"Allgemeine Image-Daten\"],\"nWNviN\":[\"Deleting certificate authority...\"],\"nYab6d\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully moved to \",[\"destination\"],\".\"],\"nZbdB+\":[\"Upload abgebrochen\"],\"ndwp1n\":[\"Invalid JSON format\"],\"ne/GWZ\":[\"Innerhalb eines Projekts werden Objekte in Containern gespeichert. Container sind der Ort, an dem Sie Zugriffsberechtigungen und Quotas definieren.\"],\"neiJm0\":[\"Flavors\"],\"ng+PCh\":[\"There are no PCAs available for this project.\"],\"nkpZyk\":[\"Container \\\"\",[\"containerName\"],\"\\\" war bereits leer.\"],\"nnxwBn\":[\"Es gibt keine Regeln für diese Sicherheitsgruppe\"],\"nrONSU\":[[\"0\"],\" rules\"],\"ntNlXu\":[\"Zugriff auflisten\"],\"nzFJqC\":[\"Delete CA\"],\"o/VDOG\":[\"Image kann nicht gelöscht werden\"],\"o6M6l0\":[\"Security Group konnte nicht erstellt werden\"],\"oAMLhA\":[\"Full path:\"],\"oDkgME\":[\"Sie sind nicht berechtigt, Flavors zu erstellen. Bitte melden Sie sich erneut an.\"],\"oEGiW3\":[\"Wird hochgeladen... \",[\"progressPct\"],\"%\"],\"oFZY0k\":[\"Fehler beim Herunterladen des Objekts\"],\"oJVmWq\":[\"Could not delete \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"ocUvR+\":[\"False\"],\"odVI9Y\":[\"Container gelöscht\"],\"og1m+J\":[\"Loading Certificate Authority Details...\"],\"okXQSt\":[\"Subject information\"],\"olfSYj\":[\"Zugriffskontrolle aktualisiert\"],\"p4nMut\":[\"Swap (MiB)\"],\"p7DzCB\":[\"Fehler beim Aktualisieren der Zugriffskontrolle\"],\"pD/2BQ\":[\"Successfully emptied \",[\"emptiedCount\"],\" of \",[\"totalBuckets\"],\" \",[\"totalBuckets\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\", deleting \",[\"totalDeleted\"],\" \",[\"totalDeleted\",\"plural\",{\"one\":[\"object\"],\"other\":[\"objects\"]}],\". \",[\"errorsLength\"],\" \",[\"errorsLength\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\" failed.\"],\"pFg+7w\":[\"Aktualisiert:\"],\"pOPvlj\":[\"Bereits aktiv (wird übersprungen)\"],\"pPr2iF\":[\"Could not delete versions from bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"pQB7Sy\":[\"Could not suspend versioning for bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"pU25+T\":[\"Upload von \\\"\",[\"objectName\"],\"\\\" wurde abgebrochen.\"],\"pYR76U\":[\"Importing Certificate...\"],\"pbzA+s\":[\"Optionale Beschreibung\"],\"pebLmQ\":[\"Zugriff für \",[\"memberIdDisplay\"],\" entfernen\"],\"pkz+z2\":[\"Failed to save policy\"],\"plnnns\":[[\"successCount\"],\" Image(s) gelöscht, aber \",[\"failedCount\"],\" Image(s) konnten nicht gelöscht werden.\"],\"pmJY1C\":[\"Successfully deleted bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"poCbZw\":[\"ACLs werden geladen...\"],\"podzPY\":[\"Projekt-ID\"],\"pubQie\":[\"Value eingeben\"],\"q0Rla3\":[\"Projektzugriff hinzufügen\"],\"q44uUq\":[\"Container teilweise geleert\"],\"q6K46F\":[\"Schlüssel existiert bereits\"],\"q88/6A\":[\"Fehler beim Erstellen des Ordners\"],\"qAkkjP\":[\"Maximale Objekt-Namenslänge\"],\"qEDO1j\":[\"Dies ist ein <0>dynamisches großes Objekt. Nur das Manifest wird gelöscht — die zugehörigen Segment-Objekte (gespeichert unter dem Manifest-Präfix) werden <1>nicht automatisch entfernt und müssen separat gelöscht werden.\"],\"qJb6G2\":[\"Erneut versuchen\"],\"qQ1QBh\":[\"Hardware-Spezifikationen\"],\"qUlxA+\":[\"Ordner \\\"\",[\"folderName\"],\"\\\" wurde dauerhaft gelöscht.\"],\"qaAo9Y\":[\"Es ist ein Serverfehler beim Erstellen des Flavors aufgetreten. Bitte versuchen Sie es später erneut.\"],\"qh5W8q\":[\"Richtlinie entfernen\"],\"qhDo93\":[\"Common name is required.\"],\"qs+BrU\":[\"Sie haben keine Berechtigung, Projektzugriffe von diesem Flavor zu entfernen.\"],\"qtoOYG\":[\"Kein Limit\"],\"quU9wK\":[[\"failedCount\"],\" von \",[\"totalCount\"],\" Image(s) konnten nicht deaktiviert werden. Einige Images sind möglicherweise bereits deaktiviert oder in einem ungültigen Zustand.\"],\"qvF2D8\":[\"Keine Images verfügbar. Filtern Sie neu oder erstellen Sie ein neues Image.\"],\"qxxo7y\":[\"Keine Richtlinien entsprechen Ihrer Suche\"],\"qzIZOL\":[\"Ungültiges Dateiformat. Unterstützte Formate: \",[\"supportedFileFormats\"]],\"qzhUb9\":[\"Erste \",[\"maxOptions\"],\" von \",[\"totalCount\"],\" werden angezeigt — verfeinern Sie Ihre Suche, um die Ergebnisse einzugrenzen\"],\"r5SQFW\":[\"Container-Name muss \",[\"maxContainerNameLength\"],\" Zeichen oder weniger haben\"],\"r9Aac8\":[\"Ephemeral Disk\"],\"rAtQcX\":[\"Sie können das Objekt umbenennen, indem Sie den Namen hier ändern.\"],\"rD9yV1\":[\"Zu deaktivierende Images:\"],\"rG3WVm\":[\"Auswählen\"],\"rIe0oV\":[\"Fehler beim Hinzufügen des Zugriffs für das Project zum Flavor. Bitte versuchen Sie es erneut.\"],\"rIi6x4\":[\"Der Flavor konnte nicht gefunden werden. Möglicherweise wurde er bereits gelöscht.\"],\"rJe6vw\":[\"7 Tage\"],\"rPuPb+\":[\"Checking bucket contents...\"],\"rbuO5A\":[\"Diese Sicherheitsgruppe ist bereits mit dem angegebenen Projekt geteilt.\"],\"rcBt6T\":[\"Failed to create credential: \",[\"errorMessage\"]],\"rdUucN\":[\"Vorschau\"],\"rfemv7\":[\"Ungültige Anmeldedaten. Bitte überprüfen Sie Ihre Domain, Ihren Benutzernamen und Ihr Passwort.\"],\"rhaNn7\":[\"Container werden geladen...\"],\"riR9oD\":[\"Hinweis: Für <0>statische und dynamische große Objekte werden nur die Manifeste gelöscht — ihre Segmente außerhalb dieses Ordnerpräfixes sind nicht betroffen.\"],\"rlgAtt\":[\"Das Objekt wird zu diesem Pfad verschoben. Navigieren Sie oben durch die Ordner, um das Ziel zu ändern.\"],\"rp0Bd0\":[\"Compute\"],\"rp7Ili\":[\"Search security groups...\"],\"rrjuul\":[\"Weitere Details finden Sie in der <0>Dokumentation.\"],\"rvXsSb\":[\"Der Projektzugriff für \\\"\",[\"tenantIdToRemove\"],\"\\\" wurde erfolgreich entfernt.\"],\"rwBVXS\":[\"Zu löschende Images (\",[\"deletableCount\"],\")\"],\"rx4T2i\":[\"Issue Certificate\"],\"ryf/ee\":[\"Images aktiviert\"],\"ryxYVo\":[\"Zu deaktivierende Images (\",[\"activeCount\"],\")\"],\"s/s1lz\":[\"Jeder Benutzer kann eine HEAD- oder GET-Operation auf dem Container ausführen, sofern der Benutzer auch Lesezugriff auf Objekte hat. Es ist kein Token erforderlich.\"],\"s2ubkU\":[\"Flavor ID\"],\"s4Vnq2\":[\"Wird geleert...\"],\"sCPiLi\":[\"Type DELETE to confirm\"],\"sNVNmf\":[\"MAC-Adresse\"],\"sPFHpI\":[\"Disk\"],\"sSNyf3\":[\"Willkommen beim <0>Aurora-Dashboard, Ihrer Cloud-Management-Lösung der nächsten Generation. Wir sind bestrebt, die Art und Weise, wie Sie mit Ihrer Cloud-Infrastruktur interagieren und diese verwalten, zu vereinfachen. Mit Effizienz, Skalierbarkeit und Benutzerfreundlichkeit im Kern konzipiert, ermöglicht Aurora Ihnen, Prozesse zu optimieren und das volle Potenzial Ihrer Cloud-Ressourcen auszuschöpfen.\"],\"sWBLli\":[\"Eigenschaft hinzufügen\"],\"sXd+qS\":[\"Eigenschaften von \\\"\",[\"objectName\"],\"\\\" wurden erfolgreich aktualisiert.\"],\"sYJvnu\":[\"Create New Folder\"],\"sa4CV6\":[\"Alle Benutzer aus Projekt \",[\"projectId\"]],\"sgra3S\":[\"You can re-enable versioning at any time\"],\"shKIZu\":[\"Zu aktivierende Images (\",[\"deactivatedCount\"],\")\"],\"sihD20\":[\"Images werden geladen...\"],\"sjMCOP\":[\"Zuletzt geändert\"],\"sl2P3q\":[\"Object:\"],\"slWh5C\":[\"Floating IP \",[\"floating_ip_address\"],\" einem Port zuordnen\"],\"sxbP3b\":[\"Objekt-Anzahl\"],\"t/YqKh\":[\"Entfernen\"],\"t/cZdQ\":[\"Full Path:\"],\"t0X9+8\":[\"Container-Name\"],\"t1POAD\":[\"Keine benutzerdefinierten Metadaten-Eigenschaften gefunden. Klicken Sie auf \\\"Eigenschaft hinzufügen\\\", um eine zu erstellen.\"],\"t1fq6V\":[\"Der Server hat ein unerwartetes Datenformat zurückgegeben.\"],\"t7ewhH\":[\"Could not empty bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"t7ff15\":[\"gültiges Token erforderlich: false\"],\"t95VRV\":[\"Über das Aurora-Dashboard\"],\"tASa/P\":[\"Beim Löschen des Flavors ist ein Serverfehler aufgetreten. Bitte versuchen Sie es später erneut.\"],\"tIc6vY\":[\"Could not copy \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"tIrNgH\":[\"Beim Abrufen der Metadata ist ein Serverfehler aufgetreten. Bitte versuchen Sie es später erneut.\"],\"tLerHy\":[\"Ephemeral Disk muss eine ganze Zahl ≥ 0 sein.\"],\"tM5SEI\":[\"ACLs für Container \\\"\",[\"containerName\"],\"\\\" wurden erfolgreich aktualisiert.\"],\"tOkmLM\":[\"Fehler beim Kopieren des Objekts\"],\"tV/Ozb\":[\"Port-Bereich\"],\"tVSmFT\":[\"Weitere werden geladen...\"],\"tX5yOZ\":[\"Neuer Ordner\"],\"tasfos\":[\"entfernen\"],\"tbwGSx\":[\"Minimale Festplatte (GB)\"],\"tejJLY\":[\"Floating IP wird zugeordnet...\"],\"tfAKBU\":[\"\\\"\",[\"objectName\"],\"\\\" konnte nicht hochgeladen werden: \",[\"errorMessage\"]],\"tfDRzk\":[\"Speichern\"],\"tfxu04\":[\"Zugriff entfernen für \",[\"tenantId\"]],\"thHAVL\":[\"Akzeptierte Images\"],\"tiflqy\":[\"Image kann nicht reaktiviert werden\"],\"tkRT08\":[\"Metadata size exceeds the 2KB limit. Please remove or shorten some entries before saving.\"],\"tlfxPP\":[\"\\\"\",[\"objectName\"],\"\\\" konnte nicht kopiert werden: \",[\"errorMessage\"]],\"tmpGvt\":[\"production, linux\"],\"u+VWhB\":[\"In die Zwischenablage kopiert!\"],\"u2xIeO\":[\"Fehler beim Aktualisieren der ACLs: \",[\"errorMessage\"]],\"u5HztT\":[\"RX/TX Factor\"],\"u77/s4\":[\"Floating IPs\"],\"u7En0V\":[\"Metadata hinzufügen\"],\"uAI0yI\":[\"Objekt löschen:\"],\"uAQUqI\":[\"Status\"],\"uLtFAr\":[\"Container \\\"\",[\"containerName\"],\"\\\" konnte nicht aktualisiert werden: \",[\"errorMessage\"]],\"uSdnuQ\":[\"VCPUs müssen eine ganze Zahl ≥ 1 sein.\"],\"ubUrot\":[\"Objects: \",[\"containerName\"]],\"ujK/QN\":[\"Objekte werden geladen...\"],\"uly9ET\":[\"Regeldetails:\"],\"up0ZSW\":[\"Fingerprint\"],\"uuKb0T\":[\"Die Beschreibung muss weniger als 65535 Zeichen haben.\"],\"v0hPHE\":[\"Details anzeigen\"],\"v3djpU\":[\"Verschieben/Umbenennen\"],\"v9Dn8m\":[\"Das Aurora-Dashboard ist mehr als nur ein Werkzeug – es ist Ihr Partner bei der Navigation in der Cloud. Egal, ob Sie ein kleines Startup oder ein globales Unternehmen sind, Aurora bietet Ihnen die Flexibilität, Leistung und Einfachheit, die Sie benötigen, um Ihre Ziele zu erreichen.\"],\"vBUQNE\":[\"Das Metadata konnte nicht gefunden werden. Möglicherweise wurde es bereits gelöscht.\"],\"vEkTR9\":[\"Quota\"],\"vGjmyl\":[\"Deleted\"],\"vH2C/2\":[\"Swap\"],\"vKDskJ\":[[\"selectedCount\",\"plural\",{\"one\":[\"#\",\" Objekt löschen\"],\"other\":[\"#\",\" Objekte löschen\"]}]],\"vR4HmN\":[\"Lädt Instanzen...\"],\"vTh35P\":[\"Container erstellen\"],\"vXmL4D\":[\"Legen Sie Ihre Image-Datei hier ab\"],\"vZUKSz\":[\"Floating IP \",[\"floating_ip_address\"],\" trennen\"],\"vbajgL\":[\"Öffentlicher Flavor\"],\"vcQSZh\":[\"Dieser Ordner ist leer — verwenden Sie \\\"Neuer Ordner\\\", um einen zu erstellen.\"],\"vi0pmB\":[\"Delete all versions and delete markers\"],\"vmRPFm\":[\"Sicherheitsgruppe teilen\"],\"vmYyLY\":[\"Entferntes IP-Präfix\"],\"vp5vfW\":[\"1 Stunde\"],\"vpt8cE\":[\"URL generieren\"],\"vrPCbw\":[\"Image-ID\"],\"w3bAcf\":[\"Diese Aktion ist dauerhaft. Die Adresse wird aus Ihrem Projekt entfernt und dem öffentlichen Pool zurückgegeben. Dies kann nicht rückgängig gemacht werden.\"],\"w9+8d7\":[\"Projektzugriff entfernen\"],\"wEfZld\":[\"Neuen Flavor erstellen\"],\"wFaT8w\":[\"Fehler beim Leeren der Container\"],\"wH0MtN\":[\"Stellen Sie sicher, dass die eingegebene Projekt-ID und Benutzer-ID korrekt sind. Das System kann diese Werte nicht validieren — falsche IDs können Zugriff auf falsche Projekte und Benutzer gewähren.\"],\"wHhJRb\":[\"Loading versions...\"],\"wL3cK8\":[\"Latest\"],\"wMHvYH\":[\"Value\"],\"wPrtGF\":[\"Key eingeben\"],\"wTg+FY\":[\"Maximale Dateigröße\"],\"wa1Bcq\":[\"Project ID eingeben\"],\"wbqM4L\":[[\"customMinutes\"],\" Minuten\"],\"wcUecy\":[\"Sie haben keine Berechtigung, Metadata für diesen Flavor anzusehen.\"],\"wdUvGT\":[\"Creating Certificate Authority...\"],\"wdxz7K\":[\"Source\"],\"we28Pq\":[\"ACLs-Vorschau ausblenden\"],\"wlQNTg\":[\"Members\"],\"wlUDbB\":[\"Zuletzt aktualisiert: \",[\"formattedDate\"]],\"wrXcuy\":[\"Objektname\"],\"ww8U9y\":[\"Edit/View Bucket Policy\"],\"wxVsr5\":[\"Bucket name does not match\"],\"wyIOMP\":[\"Image-Name ist erforderlich\"],\"wzqqS+\":[\"Hauptmerkmale\"],\"x/XQrD\":[\"Beliebiger Dateityp\"],\"x1bK0h\":[\"Mit den aktuellen Suchkriterien sind keine Container verfügbar. Versuchen Sie, Ihren Suchbegriff anzupassen.\"],\"x3Gs8+\":[\"Edit/View Policy\"],\"x3T4pq\":[\"Die Container-Metadaten melden Objekte, aber keine wurden aufgelistet. Dies kann eine vorübergehende Synchronisierungsverzögerung sein — bitte warten Sie einen Moment und versuchen Sie es erneut.\"],\"x5DnMs\":[\"Last modified\"],\"x5l/TK\":[\"Bereits aktiv (wird übersprungen):\"],\"x7SF89\":[\"Lese-ACLs — Vorschau\"],\"x9AdZ8\":[\"property_key\"],\"xIXYTK\":[\"Your S3 credentials are invalid or expired. Please try creating new credentials or contact your administrator.\"],\"xNG/3n\":[\"Floating IP-Adresse\"],\"xNZKYy\":[[\"failedCount\"],\" von \",[\"totalCount\"],\" Image(s) konnten nicht gelöscht werden. Einige Images sind möglicherweise geschützt oder werden verwendet.\"],\"xOvKAE\":[[\"totalCount\",\"plural\",{\"one\":[[\"filteredCount\"],\" von \",[\"totalCount\"],\" Bucket\"],\"other\":[[\"filteredCount\"],\" von \",[\"totalCount\"],\" Buckets\"]}]],\"xYrGVV\":[\"Die ausgewählten Objekte werden dauerhaft gelöscht. Dies kann nicht rückgängig gemacht werden.\"],\"xdgZcp\":[\"Successfully emptied bucket \\\"\",[\"bucketName\"],\"\\\". \",[\"deletedCount\"],\" objects deleted.\"],\"xqhyRT\":[\"Objekt hochgeladen\"],\"xw2UtT\":[\"Neues Image erstellen\"],\"xx2KP5\":[[\"totalCount\"],\" projects\"],\"xyaMox\":[\"Geben Sie \\\"\",[\"CONFIRM_WORD\"],\"\\\" zur Bestätigung ein\"],\"y+KBOY\":[\"z. B. production, linux, ubuntu\"],\"y02Bu1\":[\"Container:\"],\"y0u86k\":[\"Der angeforderte Flavor konnte nicht gefunden werden. Er wurde möglicherweise gelöscht oder Sie haben keinen Zugriff darauf.\"],\"y1GYnY\":[\"\\\"\",[\"objectName\"],\"\\\" konnte nicht verschoben werden: \",[\"errorMessage\"]],\"yDAMyU\":[\"Fehler beim Laden der Buckets: \",[\"errorMessage\"]],\"yDHGP+\":[\"my-bucket-name\"],\"yKu/3Y\":[\"Restore\"],\"yPWFWy\":[\"ICMP-Typ\"],\"yTtJTy\":[\"Image-Metadaten bearbeiten\"],\"yYxB17\":[\"Alle Filter löschen\"],\"ykQ47t\":[\"Failed to Delete Version\"],\"ylfbpz\":[\"Der Key für die Extra-Spec ist erforderlich und darf nicht leer sein.\"],\"yp0UjB\":[\"Ethertype\"],\"yqPflB\":[\"... und \",[\"hiddenCount\"],\" weitere\"],\"yu9G3x\":[\"Security Group bearbeiten\"],\"ywe1H/\":[[\"totalCount\",\"plural\",{\"one\":[[\"totalCount\"],\" Container\"],\"other\":[[\"totalCount\"],\" Container\"]}]],\"yz7wBu\":[\"Schließen\"],\"z+zpLP\":[\"gültiges Token erforderlich: true\"],\"z/5vyM\":[\"Versioning was successfully enabled for bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"z1JceR\":[\"Zurück zu Floating IPs\"],\"z3N8nN\":[\"Enter bucket policy JSON...\"],\"z45o5B\":[\"Objekt-Anzahl\"],\"z9NAjZ\":[\"Objekt gelöscht\"],\"zCD96i\":[\"Sie sind nicht berechtigt, Flavor-Details anzuzeigen. Bitte melden Sie sich erneut an.\"],\"zDS0JC\":[\"Der Name muss 2-50 Zeichen lang sein.\"],\"zWb/Nn\":[\"Maximale Header-Größe\"],\"zc5dcw\":[\"Anmeldung fehlgeschlagen. Bitte überprüfen Sie Ihre Anmeldeinformationen und versuchen Sie es erneut.\"],\"zemvbh\":[\"View Versions\"],\"zga9sT\":[\"OK\"],\"zhM8FP\":[\"Zugriff für einen Benutzer aus einem anderen Projekt gewähren.\"],\"zm7+/D\":[\"Sie sind dabei, <0>\",[\"activeCount\"],\" Image(s) zu deaktivieren. Deaktivierte Images können nicht zum Starten neuer Instances verwendet werden.\"],\"zsqy/h\":[\"Delete Marker\"],\"zwBp5t\":[\"Privat\"]}")as Messages; \ No newline at end of file diff --git a/packages/aurora/src/locales/en/messages.po b/packages/aurora/src/locales/en/messages.po index 8c0da1d58..bc9002614 100644 --- a/packages/aurora/src/locales/en/messages.po +++ b/packages/aurora/src/locales/en/messages.po @@ -43,6 +43,10 @@ msgstr "\"{objectName}\" was successfully moved to {destination}." msgid "\"{objectName}\" was successfully uploaded." msgstr "\"{objectName}\" was successfully uploaded." +#. placeholder {0}: rules.length +msgid "{0} rules" +msgstr "{0} rules" + msgid "{certificateIdValue} Certificate Details" msgstr "{certificateIdValue} Certificate Details" @@ -106,6 +110,9 @@ msgstr "{totalCount, plural, one {Empty Bucket} other {Empty Buckets}}" msgid "{totalCount, plural, one {Empty Container} other {Empty # Containers}}" msgstr "{totalCount, plural, one {Empty Container} other {Empty # Containers}}" +msgid "{totalCount} projects" +msgstr "{totalCount} projects" + msgid "{totalItemCount, plural, one {{filteredItemCount} of {totalItemCount} item} other {{filteredItemCount} of {totalItemCount} items}}" msgstr "{totalItemCount, plural, one {{filteredItemCount} of {totalItemCount} item} other {{filteredItemCount} of {totalItemCount} items}}" @@ -1966,6 +1973,9 @@ msgstr "Loading objects..." msgid "Loading Objects..." msgstr "Loading Objects..." +msgid "Loading Permissions..." +msgstr "Loading Permissions..." + msgid "Loading preview..." msgstr "Loading preview..." @@ -2266,9 +2276,6 @@ msgstr "None" msgid "Note: for <0>static and dynamic large objects only the manifests are deleted — their segments outside this folder prefix are not affected." msgstr "Note: for <0>static and dynamic large objects only the manifests are deleted — their segments outside this folder prefix are not affected." -msgid "Note: The 'stateful' attribute cannot be changed if this security group is currently in use by one or more ports." -msgstr "Note: The 'stateful' attribute cannot be changed if this security group is currently in use by one or more ports." - msgid "Object \"{displayName}\" was permanently deleted." msgstr "Object \"{displayName}\" was permanently deleted." @@ -2503,9 +2510,6 @@ msgstr "Project id" msgid "Project ID" msgstr "Project ID" -msgid "projects" -msgstr "projects" - msgid "Projects" msgstr "Projects" @@ -2677,9 +2681,6 @@ msgstr "Rule Details:" msgid "Rule Type" msgstr "Rule Type" -msgid "rules" -msgstr "rules" - msgid "Rules" msgstr "Rules" @@ -2722,6 +2723,15 @@ msgstr "Search images..." msgid "Search objects..." msgstr "Search objects..." +msgid "Search policies..." +msgstr "Search policies..." + +msgid "Search rules..." +msgstr "Search rules..." + +msgid "Search security groups..." +msgstr "Search security groups..." + msgid "Search..." msgstr "Search..." @@ -2866,9 +2876,16 @@ msgstr "Show ACLs Preview" msgid "Show Details" msgstr "Show Details" +#. placeholder {0}: rules.length +msgid "Showing {0} of {totalRulesCount} rules" +msgstr "Showing {0} of {totalRulesCount} rules" + msgid "Showing {filteredCount} of {totalCount} {itemName}" msgstr "Showing {filteredCount} of {totalCount} {itemName}" +msgid "Showing {filteredCount} of {totalCount} projects" +msgstr "Showing {filteredCount} of {totalCount} projects" + msgid "Showing first {actualObjectCount} of {total} objects" msgstr "Showing first {actualObjectCount} of {total} objects" @@ -2914,6 +2931,9 @@ msgstr "State" msgid "Stateful" msgstr "Stateful" +msgid "Stateful security groups track connection state. This setting cannot be changed after creation." +msgstr "Stateful security groups track connection state. This setting cannot be changed after creation." + msgid "Static large object support" msgstr "Static large object support" @@ -3607,6 +3627,9 @@ msgstr "You can re-enable versioning at any time" msgid "You can rename the object by changing the name here." msgstr "You can rename the object by changing the name here." +msgid "You do not have permission to view security groups" +msgstr "You do not have permission to view security groups" + msgid "You don't have permission to access flavor access information for this flavor." msgstr "You don't have permission to access flavor access information for this flavor." diff --git a/packages/aurora/src/locales/en/messages.ts b/packages/aurora/src/locales/en/messages.ts index 51c3febe9..d90a774e0 100644 --- a/packages/aurora/src/locales/en/messages.ts +++ b/packages/aurora/src/locales/en/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+0B+ue\":[\"Projects\"],\"+1rTEL\":[\"Import Externally Signed Certificate\"],\"+1xG4p\":[\"Click the button below to automatically generate credentials for this project. You only need to do this once.\"],\"+8m5QE\":[\"To access S3 Object Storage, you need EC2 credentials (access key + secret key). These credentials authenticate your requests to the Ceph storage backend.\"],\"+9CXS9\":[\"Deactivate Images\"],\"+HVj+D\":[\"Add a Signed Certificate to your CA to activate it\"],\"+Jcye3\":[\"Key Name\"],\"+Lt5cp\":[\"You are not authorized to add tenant access. Please log in again.\"],\"+Nhol2\":[\"Certificate not found\"],\"+NwLgN\":[\"Activating this image will allow it to be used to launch new instances again.\"],\"+Nx1wc\":[\"Failed to load Floating IPs\"],\"+OEi73\":[\"Object Storage (Swift)\"],\"+Pe7SS\":[\"Failed to delete policy\"],\"+nQTmZ\":[\"This tenant does not have access to the flavor.\"],\"+p6nHr\":[\"Failed to load object metadata: \",[\"metadataErrorMessage\"]],\"+pJjJF\":[\"After restoring, this version's content will become the new latest version.\"],\"+rtZ8i\":[\"Version ID:\"],\"+zy2Nq\":[\"Type\"],\"/0+NVm\":[\"What happens when suspended:\"],\"/1MfrG\":[\"Could not download \\\"\",[\"objectName\"],\"\\\": \",[\"errorMessage\"]],\"/9Squ9\":[\"You don't have permission to view this flavor's details.\"],\"/AlhPT\":[\"Confirm deletion of \",[\"displayName\"],\". All objects inside this folder will be marked as deleted but can be restored from version history.\"],\"/BZLRP\":[\"To confirm this action, type the word <0>“detach” in the field below.\"],\"/EcdUM\":[\"Your action is required\"],\"/HejCc\":[\"This bucket does not have a policy attached.\"],\"/HgF9q\":[\"Sort by\"],\"/InK0O\":[\"Total size\"],\"/LXXlY\":[\"Properties of \\\"\",[\"displayName\"],\"\\\" were successfully updated.\"],\"/LqWNN\":[\"Could not delete \\\"\",[\"objectName\"],\"\\\": \",[\"errorMessage\"]],\"/NeNjH\":[\"Container \\\"\",[\"containerName\"],\"\\\" properties were successfully updated.\"],\"/Nmxy/\":[\"No key pairs available.\"],\"/QIkBY\":[\"<0>Secure & Reliable: Your data and operations are safeguarded with enterprise-grade security and robust reliability.\"],\"/Qox3b\":[\"A folder with this name already exists\"],\"/Z5n1b\":[\"Create folder below:\"],\"/bUiYk\":[\"Router ID\"],\"/eFtWI\":[\"RBAC Policies\"],\"/fwE6J\":[\"Older\"],\"/pOQrn\":[\"This action is irreversible. Deleting a bucket permanently removes it and cannot be undone. The bucket must be empty before deletion.\"],\"/xnbdQ\":[\"The specified user has access. A token for the user (scoped to any project) must be included in the request.\"],\"01/uUD\":[\"Keep segments (delete manifest only)\"],\"07WXfc\":[\"Server returned unexpected data format for extra specs.\"],\"0BSSYj\":[\"Server error occurred while removing tenant access. Please try again later.\"],\"0Gd0NU\":[\"Shared\"],\"0P2gFy\":[\"The page you are looking for does not exist.\"],\"0Th0CH\":[[\"selectedCount\",\"plural\",{\"one\":[\"Empty Container\"],\"other\":[\"Empty \",\"#\",\" Containers\"]}]],\"0WsqO0\":[\"Containers Emptied\"],\"0cVgUw\":[\"Filter by\"],\"0cl0a5\":[\"Search images...\"],\"0eY8Mz\":[\"There are no Floating IPs available for this project. Floating IPs allow you to map public IP addresses to instances.\"],\"0efWir\":[[\"totalCount\",\"plural\",{\"one\":[\"Empty Container\"],\"other\":[\"Empty \",\"#\",\" Containers\"]}]],\"0i3NVD\":[\"Delete Version Permanently\"],\"0kCt7e\":[\"The flavor data provided is invalid. Please check your input.\"],\"0kc0zi\":[\"Server error occurred while deleting the extra spec. Please try again later.\"],\"0o0OhW\":[\"No objects found.\"],\"0p+s6m\":[\"Type: \",[\"typeValue\"],\", Code: \",[\"codeValue\"]],\"0u9jhd\":[\"Detaching this Floating IP will remove its association with the current port. The instance will no longer be reachable through this address.\"],\"16085O\":[\"IP Version\"],\"1DbiGM\":[\"Issuing Self-Signed Certificate...\"],\"1DzQpj\":[\"This folder is empty, use New Folder to create one.\"],\"1H2g6v\":[\"Moving object...\"],\"1NFtQz\":[\"Failed to Delete Bucket\"],\"1NS3nd\":[[\"emptiedCount\",\"plural\",{\"one\":[\"#\",\" container\"],\"other\":[\"#\",\" containers\"]}],\" successfully emptied. \",[\"totalDeleted\",\"plural\",{\"one\":[\"#\",\" object\"],\"other\":[\"#\",\" objects\"]}],\" deleted in total.\"],\"1RwosK\":[\"Target project ID is required\"],\"1UzENP\":[\"No\"],\"1VDqZj\":[\"<0>Future-Ready: Aurora is designed to evolve with the latest trends in cloud technology, ensuring your solution is always cutting-edge.\"],\"1W3TqV\":[\"No new versions will be created\"],\"1bj2LS\":[\"Could not restore \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"1iQtS2\":[\"Showing first \",[\"actualObjectCount\"],\" of \",[\"total\"],\" objects\"],\"1iUuTT\":[\"Your session has expired. Please log in again.\"],\"1mFMeP\":[\"Delete Versions\"],\"1ojTVo\":[\"Select a DNS domain.\"],\"1pGUZa\":[\"Session expires in\"],\"1pdLQw\":[\"Image not found\"],\"1rLu3+\":[\"Could not empty container \\\"\",[\"containerName\"],\"\\\": \",[\"errorMessage\"]],\"1rPB1p\":[\"The flavor or tenant could not be found. Please verify they exist.\"],\"1t/NnN\":[\"Reject\"],\"1zZ1IK\":[\"Hi\"],\"20E+79\":[\"You need to login to access this page.\"],\"20Kpaw\":[\"Flavor \\\"\",[\"flavorName\"],\"\\\" has been successfully deleted.\"],\"20axE5\":[\"Shared by Project\"],\"23wBCX\":[\"Public Read Access\"],\"2G+7C1\":[\"Enter a name for the new folder.\"],\"2G6hLq\":[\"Delete \",[\"specKey\"]],\"2Inn83\":[\"Bulk upload of archive files\"],\"2PRzsq\":[\"Could not create folder \\\"\",[\"folderPath\"],\"\\\": \",[\"errorMessage\"]],\"2TtIL2\":[\"Stored as X-Object-Meta-* headers. Keys are case-insensitive.\"],\"2cJIlz\":[\"Floating Network ID\"],\"2d/OiW\":[\"Enter your username\"],\"2dnZwV\":[\"Could not delete folder \\\"\",[\"folderName\"],\"\\\": \",[\"errorMessage\"]],\"2gH+i8\":[\"You are not authorized to delete flavors. Please log in again.\"],\"2mbisJ\":[\"Metadata \\\"\",[\"trimmedKey\"],\"\\\" has been added successfully.\"],\"2q/Q7x\":[\"Visibility\"],\"2xOCJW\":[\"This action cannot be undone.\"],\"2xbYVD\":[\"Could not update \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"2ysnjX\":[\"<0>Enhanced Productivity: By reducing operational complexity, Aurora helps your team focus on what truly matters—innovating and driving business success.\"],\"2zceEg\":[\"This action cannot be undone. The image will be permanently deleted.\"],\"33F2A+\":[\"Type container name to confirm\"],\"3Qn0me\":[\"Add Member\"],\"3dBmvU\":[\"The container cannot be deleted as it contains objects. Empty the container first.\"],\"3n+vCm\":[\"Custom duration (minutes)\"],\"3nWqQW\":[\"You are not authorized to view extra specs. Please log in again.\"],\"3nh/7E\":[\"If checked, this flavor will be available to all tenants. If unchecked, access must be explicitly granted to specific tenants.\"],\"3oChIh\":[\"<0>Unified Cloud Management: Consolidates all your cloud assets into one intuitive interface.\"],\"3oc18/\":[\"Private flavors could not be loaded. You may be seeing an incomplete list.\"],\"3q1GLx\":[\"Pending file upload...\"],\"3uDz8n\":[\"Import Signed Certificate\"],\"3x7Sws\":[\"Loading Security Group Details...\"],\"4+2wZO\":[\"Back to Certificate Authorities Details page\"],\"46gjWc\":[\"Delete Folder \\\"\",[\"displayName\"],\"\\\"\"],\"47eI0x\":[\"Description must be at least 1 character.\"],\"48QXFO\":[\"Expected format: YYYY-MM-DD HH:mm:ss\"],\"48bMai\":[\"Bucket name is required\"],\"4BITzH\":[\"Error:\"],\"4EZrJN\":[\"Rules\"],\"4O2AH3\":[\"Member \\\"\",[\"memberIdToRemove\"],\"\\\" has been removed successfully.\"],\"4bLttB\":[\"Folder name is too long (max 255 characters)\"],\"4fh0Wj\":[\"Boot size\"],\"4fvDRe\":[\"Images to activate:\"],\"4fvcmm\":[\"Object will be uploaded as: <0>\",[\"selectedObjectName\"],\"\"],\"4h3Eyf\":[\"\\\"\",[\"objectName\"],\"\\\" was successfully uploaded.\"],\"4kjaAc\":[\"No server groups available.\"],\"4mbrAq\":[\"1 minute\"],\"4opp4r\":[\"Security Groups\"],\"4pOfUd\":[\"Our Mission\"],\"4t33sh\":[\"Failed to Update Object\"],\"4uXhtt\":[\"CIDR\"],\"4utWB4\":[\"Server Role:\"],\"5+FeN2\":[\"Share URL\"],\"5/wyf8\":[\"Enter a floating IP\"],\"56IxdF\":[\"Failed to load container objects: \",[\"errorMessage\"]],\"5BLR6Q\":[\"IPv4\"],\"5JDSvn\":[\"Max meta value length\"],\"5M4Te3\":[\"DNS\"],\"5MF8U2\":[\"Failed to Update Container\"],\"5Od/iS\":[\"Empty the bucket\"],\"5Okch2\":[\"Empty:\"],\"5PhMH2\":[\"Failed to Suspend Versioning\"],\"5Yrl6N\":[\"Loading Server Groups...\"],\"5aNQ3F\":[\"\\\"\",[\"objectName\"],\"\\\" was successfully copied to \",[\"destination\"],\".\"],\"5g7owI\":[\"Updating Floating IP...\"],\"5p97CR\":[\"Unable to verify bucket versioning status. Please try again.\"],\"5y3O+A\":[\"Deactivate\"],\"6+7EwD\":[\"Serve objects as index when file name is:\"],\"6+OdGi\":[\"Protocol\"],\"6/xipy\":[\"Container Format\"],\"644xgx\":[\"Protected\"],\"66YUKF\":[\"Failed to Empty Bucket\"],\"6BDqha\":[\"Limits\"],\"6CDYXS\":[\"Static website serving\"],\"6E98zF\":[\"Stored as x-amz-meta-* headers. Keys are case-insensitive.\"],\"6EcekU\":[\"Target bucket\"],\"6GBt0m\":[\"Metadata\"],\"6H/Lg1\":[\"This is a public image. All users have access to it. Explicit sharing is not needed.\"],\"6KRclz\":[\"Folder Created\"],\"6OopEX\":[\"Container Emptied\"],\"6Rnrsz\":[\"Manage Access - \",[\"flavorName\"]],\"6X/9Di\":[\"\\\"\",[\"objectName\"],\"\\\" was successfully moved to \",[\"destination\"],\".\"],\"6YtxFj\":[\"Name\"],\"6fuDFZ\":[\"Empty All Completed with Errors\"],\"6jAi8c\":[\"Range\"],\"6luZQA\":[\"Object Moved\"],\"6oolxV\":[\"This extra spec keys already exist. Please use different keys.\"],\"6qzsuS\":[\"Write ACLs\"],\"6sxz+g\":[\"Port Name\"],\"6w+VnM\":[\"Container Created\"],\"6z9W13\":[\"Restart\"],\"71SiMe\":[\"Version \",[\"shortVersionId\"],\"... deleted successfully\"],\"76RKuS\":[\"ICMP Code\"],\"78+riR\":[\"You are not authorized to remove tenant access. Please log in again.\"],\"7AfIPZ\":[\"Floating Network\"],\"7BpykL\":[\"Failed to create extra specs. Please try again.\"],\"7L01XJ\":[\"Actions\"],\"7NC3vm\":[\"Subnet\"],\"7NSdfG\":[\"Emptying container \",[\"progressCurrent\"],\" of \",[\"progressTotal\"],\", please wait...\"],\"7Ocn0b\":[[\"count\",\"plural\",{\"one\":[\"#\",\" object\"],\"other\":[\"#\",\" objects\"]}]],\"7Q24LN\":[\"Policy\"],\"7SGcZS\":[\"Search objects...\"],\"7T1fHv\":[\"Failed to remove member \\\"\",[\"memberIdToRemove\"],\"\\\"\"],\"7UlHhT\":[\"Metadata \\\"\",[\"keyToDelete\"],\"\\\" has been deleted successfully.\"],\"7XQ3QJ\":[\"Denied referrer: \",[\"host\"]],\"7ZnTL8\":[\"Failed to update object: \",[\"mutationErrorMessage\"]],\"7a4DvD\":[\"No servers available.\"],\"7aaeOo\":[\"Version of \\\"\",[\"displayName\"],\"\\\" was permanently deleted.\"],\"7d1a0d\":[\"Public\"],\"7flw0l\":[\"Tenant access for \\\"\",[\"trimmedTenantId\"],\"\\\" has been added successfully.\"],\"7hLLUk\":[\"Folder \\\"\",[\"folderPath\"],\"\\\" was successfully created.\"],\"7huC4O\":[\"There are no Certificates available for this Certificate Authority.\"],\"7sMeHQ\":[\"Key\"],\"8/m18Q\":[\"This bucket cannot be deleted yet. Do the following to be able to delete the bucket:\"],\"868txY\":[\"Public Read\"],\"88kg0+\":[\"Created At\"],\"8AriEH\":[\"Image instance \\\"\",[\"imageName\"],\"\\\" has been created\"],\"8BjKi0\":[\"Last Modified:\"],\"8MSozy\":[\"The object can be restored from version history.\"],\"8Pcsi8\":[\"Enter a timestamp like \\\"YYYY-MM-DD HH:mm:ss\\\" to schedule automatic deletion.\"],\"8S2nDL\":[\"No PCAs found\"],\"8TSI9h\":[\"Deactivating this image will prevent it from being used to launch new instances. Existing instances will not be affected.\"],\"8Tg/JR\":[\"Custom\"],\"8Txagi\":[\"Copy Object:\"],\"8ZOb7O\":[[\"numberDeleted\"],\" object was permanently deleted.\"],\"8ZsakT\":[\"Password\"],\"8c3/77\":[\"Max meta name length\"],\"8erw15\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was already empty.\"],\"8jLXs3\":[\"Versioned writes\"],\"8s0tOH\":[\"You don't have permission to add tenant access to this flavor.\"],\"8t1+HU\":[\"Deactivated \",[\"successCount\"],\" image(s), but \",[\"failedCount\"],\" image(s) could not be deactivated.\"],\"8uPTwT\":[[\"filteredCount\",\"plural\",{\"one\":[[\"filteredCount\"],\" of \",[\"totalCount\"],\" container\"],\"other\":[[\"filteredCount\"],\" of \",[\"totalCount\"],\" containers\"]}]],\"8wdCNd\":[\"tcp, udp, icmp, or protocol number\"],\"8zAn1f\":[\"Failed to delete flavor. Please try again.\"],\"98Fs4G\":[\"Creating image...\"],\"9J93Xr\":[\"Container name cannot contain slashes\"],\"9SX0bO\":[\"The image \\\"\",[\"imageName\"],\"\\\" could not be updated: \"],\"9X8lAk\":[\"Allocate\"],\"9doWrf\":[\"Failed to add member\"],\"9dsDHD\":[\"The image \\\"\",[\"imageId\"],\"\\\" could not be re-activated: \",[\"message\"]],\"9iz2XW\":[\"Unable to Update Image\"],\"9kDPaB\":[\"Issue End-Entity Certificate\"],\"9njIiV\":[\"Failed to Activate Images\"],\"9rz81C\":[\"Device ID\"],\"9v5VLp\":[\"No custom properties defined\"],\"9vSW3U\":[\"Delete Recursively\"],\"9x6EkK\":[\"This is a public flavor. All tenants have access to it.\"],\"A7CVME\":[\"Select disk format first\"],\"AB4Tnl\":[\"Please select a file to upload\"],\"AGXLLY\":[\"Unable to Upload Image File\"],\"AJRhSM\":[\"Root Disk must be an integer ≥ 0.\"],\"AN0DBJ\":[\"Press Enter to add\"],\"ANOoeR\":[[\"totalItemCount\",\"plural\",{\"one\":[[\"totalItemCount\"],\" item\"],\"other\":[[\"totalItemCount\"],\" items\"]}]],\"ASJMIw\":[\"S3 bucket names must be 3-63 characters long and contain only lowercase letters, numbers, periods, and hyphens. They must start and end with a letter or number, and be globally unique within the cluster.\"],\"AX9Juz\":[\"ID must only contain alphanumeric characters, hyphens, underscores, and dots.\"],\"AXNSZ2\":[\"Confirm deletion of \",[\"displayName\"],\". The object will be marked as deleted but can be restored from version history.\"],\"AZyHwC\":[\"Must be a valid IPv4 or IPv6 address (for example: 172.24.4.228 or 2001:db8::1).\"],\"Ac6dy9\":[\"Type name\"],\"AdtLNV\":[\"Ensure ACL entries are valid — correct project IDs, user IDs, and formats are your responsibility. Invalid entries may silently grant or deny unintended access.\"],\"AeP3VC\":[\"Date:\"],\"AeXO77\":[\"Account\"],\"Af8YL/\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully copied to \",[\"destination\"],\".\"],\"Afh/Lb\":[\"Select destination folder\"],\"AirKNZ\":[\"Issue Self-Signed Certificate\"],\"AlbUVn\":[\"<0>Optimized Scalability: Built for businesses of all sizes, Aurora grows with you, supporting simple environments and intricate multi-cloud setups alike.\"],\"Alx2/L\":[\"Open in new tab\"],\"AuQtzx\":[\"Must be a non-negative integer\"],\"AxZkIr\":[\"Disk (GiB)\"],\"B2Czeb\":[\"Min. RAM\"],\"B2SpR8\":[\"Bucket name must not start with reserved prefix \\\"\",[\"prefix\"],\"\\\"\"],\"B2i9cQ\":[\"Objects to be deleted (\",[\"totalCount\"],\")\"],\"B3toQF\":[\"Objects\"],\"BCJPTn\":[\"Grant access to all users from that project.\"],\"BCXapL\":[\"Failed to load container properties: \",[\"errorMessage\"]],\"BGZ26c\":[\"Open \",[\"displayName\"]],\"BGsuZN\":[\"Key contains invalid characters (use only letters, digits, hyphens, underscores)\"],\"BJt+PJ\":[\"Failed to Delete Container\"],\"BMTd81\":[\"This action cannot be undone. The target project will lose access to this security group immediately.\"],\"BOQYRn\":[\"Loading Key Pairs...\"],\"BOoOLQ\":[\"All Buckets Emptied\"],\"BP4Fwj\":[\"Error Loading Objects: \",[\"errorMessage\"]],\"BSpWob\":[\"Could not download \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"BTsbBe\":[\"Bucket Name\"],\"BYH/2L\":[\"Unable to Deactivate Image\"],\"BgMp/T\":[\"Invalid format combination for selected disk format\"],\"Blsc/x\":[\"Delete Certificate Authority\"],\"BoIAP6\":[\"The ID of the network associated with the floating IP.\"],\"BoPocW\":[\"MD5 checksum\"],\"BrrIs8\":[\"Storage\"],\"CA8ZeT\":[\"Image \\\"\",[\"imageName\"],\"\\\" visibility updated to \",[\"visibility\"]],\"CBFSfX\":[\"Please fix the validation errors below.\"],\"CFMxC8\":[\"Images Deleted\"],\"CMVP7y\":[\"This action cannot be undone. The rule will be permanently deleted.\"],\"CfKRC1\":[\"Empty Bucket\"],\"CgZxr7\":[\"Min RAM (MB)\"],\"ChOuUj\":[\"Floating IP not found\"],\"Cj2Gtd\":[\"Size\"],\"ClGcRq\":[\"Containers\"],\"CongmL\":[\"Could not delete bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"CpZKLR\":[\"Version ID\"],\"CtiFDz\":[\"This will permanently delete all objects from \",[\"totalCount\"],\" selected \",[\"totalCount\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\". This action cannot be undone.\"],\"Cu6xuZ\":[\"This is a <0>dynamic large object (DLO) manifest. Metadata changes apply to the manifest only — segment objects are not affected.\"],\"CunRry\":[\"Invalid project ID format. Must be 32 hexadecimal characters (e.g., b90f9c4bc76140e18540b2cec1299e2a) or UUID format (e.g., 12345678-1234-1234-1234-123456789abc)\"],\"Cxgv2U\":[\"Min. Disk\"],\"D3IRXw\":[\"Detaching Floating IP...\"],\"D7qT9F\":[\"Why Choose Aurora?\"],\"D7yx6b\":[\"Version History:\"],\"D8ak4F\":[[\"totalItemCount\",\"plural\",{\"one\":[[\"filteredItemCount\"],\" of \",[\"totalItemCount\"],\" item\"],\"other\":[[\"filteredItemCount\"],\" of \",[\"totalItemCount\"],\" items\"]}]],\"DDRhQm\":[\"Your session has expired.\"],\"DHrCY6\":[\"Common name\"],\"DIZzgv\":[\"Failed to load versions\"],\"DJT9tB\":[\"Account quotas\"],\"DKkOPx\":[\"Extra Specs\"],\"DNVql8\":[\"Full lifecycle management of Floating IPs, including attachment, port association/disassociation, DNS settings, and deletion\"],\"DWBWmW\":[[\"totalCount\",\"plural\",{\"one\":[\"Empty Bucket\"],\"other\":[\"Empty Buckets\"]}]],\"DXRiUg\":[\"All objects in the folder will be permanently deleted.\"],\"DcMIiu\":[\"Could not update ACLs for container \\\"\",[\"containerName\"],\"\\\": \",[\"errorMessage\"]],\"Df0YHr\":[\"Update Security Group\"],\"Dh1qvV\":[\"You are about to delete \",[\"deletableCount\"],\" image(s). This action cannot be undone.\"],\"Dia2Ue\":[\"There are no RBAC policies for this security group\"],\"Do5/uH\":[\"The flavor or tenant could not be found. It may have already been removed.\"],\"Dqnh7K\":[\"Specific referrer: \",[\"host\"]],\"Dt5W9T\":[\"Remove RBAC Policy\"],\"DvB4XF\":[\"Drop your file here\"],\"E/QGRL\":[\"Disabled\"],\"E4QYe7\":[\"Suggested Images\"],\"E55MDj\":[\"Could not delete version of \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"E6nRW7\":[\"Copy URL\"],\"E7kdtm\":[\"Choose Certificate to Import\"],\"EF2EU9\":[\"Deleting...\"],\"EJqSbS\":[\"No versions to delete in bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"EPMHs9\":[\"You don't have permission to delete flavors in this project.\"],\"EQnVgi\":[\"Flavor service is not available for this project.\"],\"EdQY6l\":[\"None\"],\"EdxcAN\":[\"Access Control for Container:\"],\"Enpdmy\":[\"Type <0>remove to confirm:\"],\"EoKe5U\":[\"Domain\"],\"Eq5PsT\":[\"Type \\\"detach\\\" to confirm\"],\"EqSPkP\":[\"Loading Flavors...\"],\"Erlvqg\":[\"Object name cannot have leading or trailing whitespace\"],\"ExLULX\":[\"Image Name\"],\"EztMB8\":[\"Failed to fetch flavors from server.\"],\"F02e8I\":[\"No custom metadata. Click \\\"Add Property\\\" to create one.\"],\"F6YIQe\":[\"Efficient bulk deletion\"],\"FAA/qW\":[\"Paste the code\"],\"FJO48W\":[\"Create S3 Credentials\"],\"FKL6Jv\":[\"e.g. .r:*,.rlistings\"],\"FOcBn3\":[\"Detach\"],\"FQBaXG\":[\"Activate\"],\"FRtmJJ\":[\"Storage container not found\"],\"FSbpS7\":[\"CPU\"],\"FgWsFY\":[\"Object <0>\\\"\",[\"displayName\"],\"\\\" will be permanently deleted. This cannot be undone.\"],\"FjONW3\":[\"Error Loading Flavor\"],\"FjPnAE\":[\"Error loading security group\"],\"Flugry\":[[\"progressPct\"],\"%\"],\"FwSyEp\":[\"The specified project does not exist or you don't have permission to share with it.\"],\"Fzrzfe\":[\"Folder name is required\"],\"G3pRO8\":[\"An object with this name already exists at the destination and will be overwritten.\"],\"G6AP+o\":[\"Shared:\"],\"GDx4dP\":[\"Manage your Certificate\"],\"GEgjm+\":[\"Loading Objects...\"],\"GPuCEo\":[\"Leave empty for all types\"],\"GSIPwA\":[\"Temporary URL\"],\"GZjazt\":[\"No policy found\"],\"GbKqnI\":[\"Activated \",[\"successCount\"],\" image(s), but \",[\"failedCount\"],\" image(s) could not be activated.\"],\"Gfx1qQ\":[\"Unable to Load Content\"],\"Ghp863\":[\"Type \\\"empty\\\" to confirm\"],\"GxkJXS\":[\"Uploading...\"],\"Gyd3No\":[\"No specific tenant access configured for this private flavor. Click \\\"Add Tenant Access\\\" to grant access.\"],\"H+a5j6\":[\"Release\"],\"H4Qwmp\":[\"No objects match your search. Try adjusting your search term.\"],\"H7u085\":[\"No projects have access to this image yet. Click \\\"Add Project Access\\\" to grant access.\"],\"HAcOOW\":[\"Your credentials are valid but you don't have permission to perform this operation. Please contact your administrator to grant you the necessary permissions.\"],\"HAkrpK\":[\"At Aurora, our mission is to provide a centralized platform that unifies cloud management. We aim to simplify the complexities of provisioning, configuring, and scaling resources across diverse cloud environments while enabling seamless growth for your business.\"],\"HBpi4q\":[\"Loading Images...\"],\"HDpkS/\":[\"Select destination folder within target bucket\"],\"HG0uMz\":[\"Back to Certificate Authorities\"],\"HM56Bx\":[\"Creating...\"],\"HNlEFZ\":[\"delete\"],\"HQH8HM\":[\"Could not update \\\"\",[\"objectName\"],\"\\\": \",[\"errorMessage\"]],\"HVdrr1\":[\"ANY referrer\"],\"HfL/NM\":[\"Version Deleted\"],\"HiDAFk\":[\"Create Bucket\"],\"Hivb/4\":[\"Server is experiencing issues. Please try again later.\"],\"Hiw1Ha\":[\"No containers found\"],\"HlwgQN\":[\"Object \\\"\",[\"objectName\"],\"\\\" was permanently deleted.\"],\"HuA8iQ\":[\"Allocating Floating IP...\"],\"HxTYrE\":[\"The flavor could not be found. It may have been deleted.\"],\"HyyJ83\":[\"Access Type\"],\"HzKlpd\":[\"Failed to empty bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"I5kZVK\":[\"Remote Source\"],\"INUP6f\":[\"<0>Effortless Resource Provisioning: Quickly provision, configure, and deploy resources like servers, networks, and volumes with just a few clicks.\"],\"IOkHLC\":[\"Failed to copy object: \",[\"errorMessage\"]],\"IQSLN+\":[\"Error loading Certificate Authority\"],\"IQldU4\":[\"Bucket name must contain only lowercase letters, numbers, periods, and hyphens\"],\"ISxSs6\":[\"All buckets\"],\"IUwGEM\":[\"Save Changes\"],\"IWF68U\":[\"Storage Overview\"],\"IZ6Mh2\":[\"Enter your domain\"],\"IbWX61\":[\"Failed to delete bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"IbYr/u\":[\"Content type\"],\"Io2Dvq\":[\"Certificate Authority not found\"],\"Ioblgz\":[\"This action is permanent. All objects in the container will be deleted and this cannot be undone.\"],\"IwlPLb\":[\"Delete Bucket\"],\"IxsRaQ\":[\"Enable Versioning\"],\"J+Sc8C\":[\"Showing first \",[\"MAX_COMBO_OPTIONS\"],\" of \",[\"totalBuckets\"],\", refine your search to narrow results\"],\"J4DKSM\":[\"Container format is required\"],\"J6EOll\":[\"Move/Rename object:\"],\"J7+bZb\":[\"Folder Deleted\"],\"J9QcnV\":[\"Successfully activated \",[\"successCount\"],\" of \",[\"totalCount\"],\" image(s)\"],\"J9cmxx\":[\"Failed to update visibility to \",[\"newVisibility\"]],\"JB0bhm\":[\"Get Involved\"],\"JNGYAW\":[\"Container name is required\"],\"JPWqr2\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully emptied. \",[\"deletedCount\"],\" objects deleted.\"],\"JT+lLV\":[\"Delete Object\"],\"JT3I1g\":[\"Delete Flavor\"],\"JeRXll\":[\"This key is reserved and managed separately\"],\"JedhzP\":[\"Move/Rename Object:\"],\"JfWCsP\":[\"Partial Deactivation Success\"],\"Jh4rAZ\":[\"Error loading image\"],\"Jim5X9\":[\"Stateful\"],\"JoECY1\":[\"The extra spec data provided is invalid. Please check your input.\"],\"JpZn1L\":[\"Already deactivated (will be skipped)\"],\"JrmKyf\":[\"Failed: \",[\"errorDetails\"]],\"JtHgVz\":[\"Delete Images\"],\"JuOpPY\":[\"All objects in the selected containers will be permanently deleted. This cannot be undone.\"],\"K+e/0e\":[\"RAM (MiB)\"],\"K3bUTE\":[\"Minimum disk must be 0 or greater\"],\"K8Qnlj\":[\"Moving...\"],\"K9eC8x\":[\"This could be due to insufficient permissions or a temporary service issue. Please check your access rights or try refreshing the page.\"],\"KDw4GX\":[\"Try again\"],\"KJC+M7\":[\"Server error occurred while fetching flavor details. Please try again later.\"],\"KOpPMt\":[\"Total size quota\"],\"KSW/GC\":[\"There are no flavors available for this project with the current filters applied. Try adjusting your filter criteria or create a new flavor.\"],\"KhNDX4\":[\"Object Storage (Ceph)\"],\"Kl2hZ+\":[\"Delete Version\"],\"Km4AGG\":[\"Creating security group...\"],\"KoQP4F\":[\"Server error occurred while adding tenant access. Please try again later.\"],\"KsIM0b\":[\"Boot RAM\"],\"KsnZ3m\":[\"Folder \\\"\",[\"folderName\"],\"\\\" was successfully created.\"],\"KvQbFT\":[\"This action will permanently delete all objects from \",[\"bucketName\"],\". This action cannot be undone.\"],\"KzUd7m\":[\"new-folder-name\"],\"L9LFMT\":[\"Confirm deletion of \",[\"displayName\"],\". All objects inside this folder will be permanently deleted.\"],\"LASqRM\":[\"Object \\\"\",[\"displayName\"],\"\\\" was permanently deleted.\"],\"LI70tz\":[\"Error loading Certificate\"],\"LI8Z2I\":[\"Download \",[\"rowDisplayName\"]],\"LK0pQN\":[\"Disk format is required\"],\"LMdsuJ\":[\"Port (from)\"],\"LQQCas\":[\"Folder \\\"\",[\"folderName\"],\"\\\" and \",[\"deletedCount\"],\" object was permanently deleted.\"],\"LT2Vv7\":[\"Bucket policy was successfully deleted from \\\"\",[\"bucketName\"],\"\\\".\"],\"LVU2Dv\":[\"Add Policy\"],\"La2LYh\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully copied to \",[\"destination\"],\" (existing object was replaced).\"],\"Llcakz\":[\"Updated At\"],\"LqMb+g\":[\"To confirm this action, type the word <0>\\\"release\\\" in the field below.\"],\"LtI9AS\":[\"Owner\"],\"Lylr9Z\":[\"Object Copied\"],\"M3bysB\":[\"Bucket Created\"],\"M470oJ\":[\"The flavor could not be found or has no extra specs.\"],\"M5Epeo\":[\"Edit Image Details\"],\"M5RhXF\":[\"Removing...\"],\"M5rEN5\":[\"Session Expired\"],\"M8er/5\":[\"Name:\"],\"M9H+/G\":[\"projects\"],\"MEIAzV\":[\"Unnamed\"],\"MI6aae\":[\"This action will create a self-signed CA certificate.\"],\"MILoeL\":[\"Services\"],\"MJLqeY\":[\"Failed to check bucket contents: \",[\"errorMessage\"]],\"MJtNLd\":[\"Images to delete:\"],\"MOug+V\":[\"Enter a tag and press Enter or click Add\"],\"MRB7nI\":[\"Direction\"],\"MXoA/6\":[\"Upload Object\"],\"MXw7Fr\":[\"Server Name\"],\"MZGbkp\":[\"VCPUs\"],\"MbKJNP\":[\"You don't have permission to access flavor access information for this flavor.\"],\"MgZyuJ\":[\"You are about to activate <0>\",[\"deactivatedCount\"],\" image(s). Activated images will be available for launching new instances.\"],\"Mj5iQ0\":[\"YYYY-MM-DD HH:mm:ss\"],\"MmtQVF\":[\"Invalid value for public flavor setting.\"],\"Mt6sRo\":[\"You are not authorized to access flavor access information. Please log in again.\"],\"MtzSbv\":[\"Object name is required\"],\"N2S1rs\":[\"Empty\"],\"N40H+G\":[\"All\"],\"N5I2RJ\":[\"Type \\\"release\\\" to confirm\"],\"N5vGcw\":[\"Enter your credentials to access your account\"],\"NG+FZC\":[\"Issuing End-Entity Certificate...\"],\"NH2fsP\":[\"Already deactivated (will be skipped):\"],\"NNpgo3\":[\"Bucket name\"],\"NOdFZR\":[\"Generating...\"],\"NQU1Nn\":[\"Copy container name\"],\"NRMm0E\":[\"This tenant already has access to the flavor.\"],\"NRVSdy\":[\"Member ID\"],\"NW1XEL\":[\"Emptying bucket \",[\"progressCurrent\"],\" of \",[\"progressTotal\"],\", please wait...\"],\"NW4PIb\":[\"Could not create folder \\\"\",[\"folderName\"],\"\\\": \",[\"errorMessage\"]],\"NZJhro\":[\"Object name cannot contain slashes\"],\"NZVIMV\":[\"Certificate \",[\"subjectCommonName\"]],\"Nc7QKU\":[\"Fixed IP Address\"],\"Ncv07y\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully restored.\"],\"NeUjqc\":[\"Enable file listing\"],\"Ni6RvO\":[\"Versioning Suspended\"],\"NixRmA\":[\"Min Disk (GB)\"],\"NlcF/v\":[\"No flavor selected for deletion.\"],\"NopYGU\":[\"Disk Format\"],\"Np28ib\":[\"or drag and drop\"],\"Nu4oKW\":[\"Description\"],\"Nvfd2b\":[\"Versioning is enabled\"],\"NwXhO7\":[\"Successfully deleted \",[\"deletedCount\"],\" version from bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"O80bQY\":[\"Loading object properties...\"],\"O8tK4v\":[\"Add rule\"],\"ONWvwQ\":[\"Upload\"],\"OR475H\":[\"Network\"],\"OSlLnz\":[\"Image Visibility\"],\"OYHzN1\":[\"Tags\"],\"OZImTR\":[\"Container listing limit\"],\"OaHwiV\":[\"Folders cannot be bulk-deleted. Use the row menu to delete a folder.\"],\"OaSktR\":[\"Device Owner\"],\"Oc8Aqv\":[\"Preview and Edit metadata\"],\"OlmKCg\":[\"A flavor with this ID or name already exists. Please use different values.\"],\"On9AgT\":[\"Delete Bucket Policy\"],\"OvEjsP\":[\"Copying...\"],\"Ovofy+\":[\"Release Floating IP \",[\"floating_ip_address\"]],\"OxDN2m\":[\"Failed to create flavor. Please try again.\"],\"OxaeYj\":[\"We are building Aurora Dashboard to serve you better. Your feedback is invaluable in shaping a tool that meets the unique needs of businesses like yours. Stay connected and join us as we redefine cloud management.\"],\"Oxl1UN\":[\"If there is no index file, the URL displays a list of objects in the container.\"],\"P2tWBZ\":[[\"selectedCount\",\"plural\",{\"one\":[\"Empty Bucket\"],\"other\":[\"Empty Buckets\"]}]],\"PAKSdy\":[\"Enter a floating IP or leave blank to auto-assign one\"],\"PDXQxz\":[[\"certificateIdValue\"],\" Certificate Details\"],\"PEGvy+\":[\"Minimum RAM must be 0 or greater\"],\"PHt+EV\":[\"Type <0>delete to confirm:\"],\"PIbPRX\":[\"RX/TX Factor must be an integer ≥ 1.\"],\"PLwzWR\":[\"All containers\"],\"PYQUjU\":[\"Failed to load metadata configuration.\"],\"PZnUbs\":[\"Please log in again to continue.\"],\"PgNNGl\":[\"More Actions\"],\"PiH3UR\":[\"Copied!\"],\"PiyQJ/\":[\"No flavors found\"],\"PkfPsB\":[\"Enter the ID of the project you want to share this security group with. You can find project IDs in the account/project switcher or in the Identity service.\"],\"Pkw7J9\":[\"This folder is empty.\"],\"PsEGri\":[\"Ubuntu 22.04 LTS\"],\"PtjzS+\":[\"Associates on the selected port. If the port has multiple IPs, select the desired fixed IP address.\"],\"PzgYM9\":[\"Checksum\"],\"Q1W//7\":[\"No services available for this project.\"],\"Q2xmVl\":[\"Symlinks\"],\"Q9f2QF\":[[\"numberDeleted\"],\" objects were deleted successfully, but some deletions failed.\"],\"QAUa4B\":[\"Enter a single port, or define a range by also filling \\\"Port (to)\\\". \\\"Port (to)\\\" is optional.\"],\"QAoi3Q\":[\"Policy Deleted\"],\"QDUXIq\":[\"Are you sure you want to delete the policy for bucket <0>\",[\"bucketName\"],\"?\"],\"QEtDlS\":[\"Copying object...\"],\"QNHur0\":[\"Failed to load container ACLs: \",[\"errorMessage\"]],\"QQ8wUG\":[\"This action cannot be undone. The flavor will be permanently deleted.\"],\"QQjQRf\":[\"No Temp URL key configured. A temporary URL key must be set at the account or container level before temporary URLs can be generated. Contact your administrator to configure X-Account-Meta-Temp-URL-Key or X-Container-Meta-Temp-URL-Key.\"],\"QRlXaL\":[\"Bucket name must not end with reserved suffix \\\"\",[\"suffix\"],\"\\\"\"],\"QV1ZPO\":[\"Key is required\"],\"QWdKwH\":[\"Move\"],\"QYiqYb\":[\"Failed to update access status\"],\"Qb+14I\":[\"This action cannot be undone. The security group will be permanently deleted.\"],\"QcRQm4\":[\"Failed to delete version: \",[\"errorMessage\"]],\"QceOn7\":[\"Bucket Policy\"],\"QdGvPV\":[\"Size:\"],\"QetsXP\":[\"Upload failed: \",[\"uploadError\"]],\"Qg4EG6\":[\"Unable to connect to the compute service. Please check your connection and try again.\"],\"QpbWpf\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully emptied. \",[\"deletedCount\"],\" object deleted.\"],\"QuJSSl\":[\"Failed to create the flavor. Please try again.\"],\"QvqBQa\":[\"Target container\"],\"Qx7DM7\":[\"Capabilities\"],\"QxBGbh\":[\"Protected (will be skipped):\"],\"QytzQr\":[\"Type \\\"delete\\\" to confirm\"],\"R3U2a2\":[\"Policy JSON\"],\"R5zmZq\":[\"IP Restricted\"],\"R6kcsL\":[\"Must be a valid PQDN or FQDN (alphanumeric and hyphens only, cannot start or end with hyphen).\"],\"R6u5CR\":[\"Failed to activate \",[\"failedCount\"],\" of \",[\"totalCount\"],\" image(s). Some images may already be active or in an invalid state.\"],\"R8jkjc\":[\"Confirm deletion of \",[\"displayName\"],\". This action cannot be undone.\"],\"RByeNR\":[\"Your session expired. Please login again.\"],\"RCr0yv\":[\"Failed to load flavor details. Please try again.\"],\"RFDYCD\":[\"Minimum disk size required to boot this image\"],\"RGhYAo\":[\"RAM\"],\"RGrgxg\":[\"Could not delete container \\\"\",[\"containerName\"],\"\\\": \",[\"errorMessage\"]],\"RGwfoL\":[\"Max meta count\"],\"RHm1CB\":[\"Versioning was successfully suspended for bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"RNBvdl\":[\"Max SLO segments\"],\"RQuGRj\":[\"Change the name, destination container, or folder to move this object.\"],\"RS0o7b\":[\"State\"],\"RSFkXF\":[\"Activate Image\"],\"RSMPjT\":[\"You are currently on the dashboard route.\"],\"RSg/pq\":[\"Failed to Delete Object\"],\"RTQFAw\":[\"You are not authorized to create extra specs. Please log in again.\"],\"RWQ6BN\":[\"Enter Common name (e.g., demo-ca.test.sci)\"],\"RYhwcU\":[\"Leaving the JSON field empty will remove the policy from the bucket.\"],\"Rih53k\":[\"Max container name length\"],\"Rlp5zj\":[\"Create Flavor\"],\"Rsh494\":[\"Deleting the policy will remove all access restrictions defined by it. This action cannot be undone.\"],\"S0kLOH\":[\"ID\"],\"S1iTXO\":[\"Image instance \\\"\",[\"imageName\"],\"\\\" has been deleted\"],\"S3olSf\":[\"No extra specs found. Click \\\"Add Metadata\\\" to create one.\"],\"S5CUKP\":[\"Member ID (project UUID) is required.\"],\"S63NbU\":[\"The image \\\"\",[\"imageId\"],\"\\\" could not be deactivated: \",[\"message\"]],\"S8/j2h\":[\"Failed to Empty Container\"],\"SBGiGm\":[\"Read ACLs\"],\"SCY5an\":[\"Failed to Move Object\"],\"SFo0kK\":[\"All Images\"],\"SIfYq6\":[\"Edit Metadata\"],\"SLEH7X\":[\"Enter DNS name\"],\"STc+7E\":[\"Max containers per extraction\"],\"SU0uxT\":[\"Upload object to:\"],\"SUSS9i\":[\"Container name\"],\"SVLToM\":[\"Type \\\"remove\\\" to confirm\"],\"SZw9tS\":[\"View Details\"],\"Sb/VT5\":[\"Container \\\"\",[\"containerName\"],\"\\\" was successfully emptied. \",[\"deletedCount\"],\" objects deleted.\"],\"Sf3Gvg\":[\"Failed to load PCAs\"],\"SfW/3r\":[\"There are no groups\"],\"Sgz1vJ\":[\"Member \\\"\",[\"trimmedMemberId\"],\"\\\" has been added successfully.\"],\"Smk7M2\":[\"Error loading floating IP\"],\"SuX2Ca\":[\"Basic Info\"],\"Sv3i+l\":[\"Version Restored\"],\"T/UxKm\":[\"<0>Edit metadata: <1>\",[\"displayName\"],\"\"],\"T3+VKR\":[\"This action will permanently delete all versions and delete markers. This will enable you to delete the bucket. This action cannot be undone.\"],\"T6Gm5y\":[\"Select an external network\"],\"T7mgdd\":[\"Successfully deleted \",[\"successCount\"],\" of \",[\"totalCount\"],\" image(s)\"],\"T8N6oi\":[\"Property Key\"],\"T9Mtpi\":[\"Tenant ID\"],\"T9o/az\":[\"Loading Certificates issued by Certificate Authority...\"],\"TAaMxB\":[\"Failed to restore version: \",[\"errorMessage\"]],\"TM93nK\":[\"Delete Security Group Rule\"],\"TPMaxo\":[\"Type “release” to confirm\"],\"TQn3hH\":[\"Failed to create image. Please try again.\"],\"TSclU4\":[\"property-key\"],\"TTX3nV\":[\"Could not move \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"TZJiVf\":[\"Container \\\"\",[\"containerName\"],\"\\\" was successfully emptied. \",[\"deletedCount\"],\" object deleted.\"],\"TfC9O+\":[\"Last modified (UTC)\"],\"TfdeUd\":[\"Failed to delete the extra spec. Please try again.\"],\"TipzDp\":[\"Search containers...\"],\"TpGxnq\":[\"Enter member ID\"],\"Tx4Ym+\":[\"Enter a valid PQDN or FQDN (max 63 characters) to associate with the floating IP. A and PTR records are created automatically.\"],\"TyODHt\":[\"Save Metadata\"],\"U/oahm\":[\"URL Copied\"],\"U0sPCo\":[\"Search flavors...\"],\"U2wTy/\":[\"Note: The 'stateful' attribute cannot be changed if this security group is currently in use by one or more ports.\"],\"U4fmHG\":[\"The text must match “detach” in lowercase.\"],\"U6L+P/\":[\"Inactivity Timeout\"],\"U9q4M7\":[\"Back to Security Groups\"],\"UB+Q8v\":[\"Loading Certificate Details...\"],\"UBv8UK\":[\"Delete Permanently\"],\"UGhVPl\":[\"Object Type\"],\"UJmAAK\":[\"Subject\"],\"UK2mpr\":[\"Generating temporary URL...\"],\"UKwOYH\":[\"Image File\"],\"UO3hJ2\":[\"Temporary URLs\"],\"UOtFRg\":[\"Define permissions for this bucket. You may use one of the predefined templates.\"],\"UQ7Wyv\":[\"Manage Access for Image - \",[\"imageName\"]],\"URmyfc\":[\"Details\"],\"USiuNX\":[\"Container quotas\"],\"UVFHGY\":[\"e.g. PROJECT_ID:USER_ID\"],\"UYSopm\":[\"Minimum RAM (MB)\"],\"UaP7Th\":[\"Failed to Create Bucket\"],\"UbRKMZ\":[\"Pending\"],\"UbWeJA\":[\"Duration/validity\"],\"UdcGJu\":[\"Activate Images\"],\"Uj+n/2\":[\"Failed to Delete Folder\"],\"UkVkoq\":[\"Leave empty for all codes\"],\"UmQ3/m\":[\"Deactivate Selected\"],\"Uwo8Xw\":[\"This image was shared with you by <0>\",[\"ownerProject\"],\" on \",[\"sharedAt\"],\".\"],\"Ux/pNd\":[[\"totalCount\",\"plural\",{\"one\":[[\"totalCount\"],\" bucket\"],\"other\":[[\"totalCount\"],\" buckets\"]}]],\"UztfYZ\":[\"Select port to associate\"],\"V/8B9A\":[\"I confirm that all existing versions will also be deleted\"],\"V/SINY\":[\"Update object\"],\"V1TzeS\":[\"Container \\\"\",[\"containerName\"],\"\\\" was successfully deleted.\"],\"V66Jih\":[\"Access Status\"],\"V6AQa5\":[\"Versions Deleted\"],\"V7fN5X\":[\"Copy object:\"],\"V8/eES\":[\"Bucket name must not contain consecutive periods\"],\"V804LY\":[\"Updating security group...\"],\"VCM3KS\":[\"Add Project Access\"],\"VG2a+x\":[\"Bucket name must start and end with a letter or number\"],\"VKCkZH\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully created.\"],\"VKmlZ+\":[\"Containers to be emptied (\",[\"totalCount\"],\")\"],\"VLI9eO\":[\"Loading Floating IP Details...\"],\"VMh1t1\":[\"The text must match “delete” in lowercase.\"],\"VMoZmg\":[\"Delete Policy\"],\"VV1fdg\":[\"Any user has read access to objects. No token is required in the request.\"],\"VaA9mu\":[\"24 hours\"],\"VakxP/\":[\"Failed to Upload Object\"],\"VeDAv2\":[\"Search buckets...\"],\"Vg0k6h\":[\"Showing \",[\"filteredCount\"],\" of \",[\"totalCount\"],\" \",[\"itemName\"]],\"Vh/Uj5\":[\"Target path\"],\"Vj8XFg\":[\"Failed to Create Container\"],\"Vl4XTj\":[\"Folder name cannot contain slashes\"],\"Vmojta\":[\"Access status updated to \\\"\",[\"newStatus\"],\"\\\".\"],\"VoxR3s\":[\"Object was copied but could not be deleted from the source: \",[\"deleteErrorMessage\"]],\"Vz+7ZA\":[\"Could not create container \\\"\",[\"containerName\"],\"\\\": \",[\"errorMessage\"]],\"Vzlopx\":[\"Delete container:\"],\"W1ZvXE\":[\"Failed to Delete Versions\"],\"W5A0Ly\":[\"An unexpected error occurred.\"],\"W5FkH9\":[\"Enter container name\"],\"W8Rb/w\":[\"Bucket name must not be formatted as an IP address\"],\"W9PZE0\":[\"Objects Deleted\"],\"W9kfjU\":[\"QoS Policy ID\"],\"WCKEqI\":[\"This is a <0>static large object (SLO) manifest. Metadata changes apply to the manifest only — segment objects are not affected.\"],\"WCLyHI\":[\"No Floating IPs found\"],\"WErCZy\":[\"Minimum RAM required to boot this image\"],\"WIJz7N\":[\"Checking if object exists...\"],\"WM+Nm7\":[\"Keep multiple versions of objects. Cannot be fully disabled once enabled, only suspended.\"],\"WRZ3Mt\":[\"Loading container properties...\"],\"WV/4x1\":[\"Loading buckets...\"],\"WYiUDa\":[\"Loading Containers...\"],\"Wbg1jv\":[\"Copy \",[\"text\"],\" to clipboard\"],\"Wca9WC\":[\"Failed to load security groups\"],\"WdmJIX\":[\"Loading preview...\"],\"WefafP\":[\"This container appears empty — the object count may not have synced yet due to a recent operation.\"],\"WidMsn\":[\"Create Certificate Authority\"],\"WlpcJv\":[\"DNS Domain\"],\"WoSkGY\":[\"Remote IP\"],\"WxpQ1y\":[\"Failed to delete versions from bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"WyKwnD\":[\"Store old object versions\"],\"WzVwU0\":[\"Target Project ID\"],\"WzsMfv\":[\"Start typing to search for a bucket\"],\"X2OnDx\":[\"Ephemeral Disk (GiB)\"],\"X70LXS\":[[\"numberDeleted\"],\" objects were permanently deleted.\"],\"XLk16/\":[\"Together, we can unlock the true potential of your cloud infrastructure.\"],\"XXRutf\":[\"Folder Name\"],\"XXjbEV\":[\"For <0>dynamic and <1>static large objects only the manifests are deleted — the related segments are not deleted.\"],\"XYZLy9\":[\"Key contains invalid characters\"],\"XhfBNl\":[[\"totalCount\",\"plural\",{\"one\":[\"Delete \",\"#\",\" Object\"],\"other\":[\"Delete \",\"#\",\" Objects\"]}]],\"XicAqm\":[\"Failed to load policy\"],\"XjGaah\":[\"Could not delete bucket policy from \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"XvjC4F\":[\"Saving...\"],\"XwxJJB\":[\"Container \\\"\",[\"containerName\"],\"\\\" was successfully created.\"],\"XxjLdW\":[[\"emptiedCount\",\"plural\",{\"one\":[\"#\",\" container was already empty.\"],\"other\":[\"#\",\" containers were already empty.\"]}]],\"Y+2SDm\":[\"Delete Security Group \\\"\",[\"securityGroupName\"],\"\\\"\"],\"Y1YKad\":[\"Edit Details\"],\"Y8M9Uc\":[\"The container will be deleted. This action is permanent and cannot be undone.\"],\"YIix5Y\":[\"Search...\"],\"YNgcgc\":[\"Loading Flavor Details...\"],\"YRexkb\":[\"Object Updated\"],\"YUU0QW\":[\"Flavor ID is required and cannot be empty.\"],\"YVLcyI\":[\"Successfully emptied \",[\"emptiedCount\"],\" \",[\"emptiedCount\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\", deleting \",[\"totalDeleted\"],\" \",[\"totalDeleted\",\"plural\",{\"one\":[\"object\"],\"other\":[\"objects\"]}],\".\"],\"YZmsaT\":[\"Partial Activation Success\"],\"YiMCKk\":[\"Show ACLs Preview\"],\"Yin3uB\":[\"Releasing Floating IP...\"],\"YjAOtb\":[\"Create Security Group\"],\"YrAy/S\":[\"You don't have permission to delete extra specs for this flavor.\"],\"YsOJlj\":[\"Server error occurred while fetching flavor access information. Please try again later.\"],\"YsrbQh\":[\"Owner Project ID\"],\"YuC9dj\":[\"Associate\"],\"YuGQWb\":[\"Rule Type\"],\"YwkOoE\":[\"Select a template...\"],\"YzUoh9\":[\"To confirm type <0>delete in the field below.\"],\"Z/eWPC\":[\"The object will be copied to this path. Navigate folders above to change the destination.\"],\"Z0v/kp\":[[\"percent\"],\"%\"],\"Z2fZGD\":[\"No project selected\"],\"Z30x/C\":[\"Current location:\"],\"Z3FXyt\":[\"Loading...\"],\"Z42tfY\":[\"Folders in object storage are virtual — they are created as zero-byte placeholder objects with a trailing slash. The folder will appear once created.\"],\"Z5r9vC\":[\"Partial Delete Success\"],\"Z8lGw6\":[\"Share\"],\"ZAx+d1\":[\"Max meta overall size\"],\"ZAy0zp\":[\"Successfully deactivated \",[\"successCount\"],\" of \",[\"totalCount\"],\" image(s)\"],\"ZKb0D4\":[\"Cannot move to the same location. Please select a different bucket, folder, or change the name.\"],\"ZUmOzn\":[\"Server returned unexpected data format for flavor details.\"],\"ZcWMT1\":[\"Image instance \\\"\",[\"imageName\"],\"\\\" has been deactivated\"],\"Zgp2Sm\":[\"No projects available.\"],\"ZhVSpK\":[\"Failed to remove tenant access from flavor. Please try again.\"],\"ZkoPD4\":[\"Size: \",[\"policySize\"],\" / \",[\"MAX_POLICY_SIZE\"],\" bytes\"],\"ZkxxiR\":[\"Unknown domain\"],\"Zq6Y5u\":[\"DNS name must be at most 63 characters.\"],\"Zshv0H\":[\"Buckets to empty:\"],\"ZvIpwi\":[\"Select a security group...\"],\"Zw49f9\":[\"folder-name\"],\"Zw8Q49\":[\"Security group not found\"],\"a/nTb8\":[\"Create Image\"],\"a12lSo\":[\"Port (to)\"],\"a13wDR\":[\"Type to search containers...\"],\"a3LDKx\":[\"Security\"],\"a4A2uB\":[\"Account listing limit\"],\"a4N/Bg\":[\"Load More\"],\"a7C4YS\":[\"Container Updated\"],\"aEAOxI\":[\"There are \",[\"bucketsCount\"],\" buckets, start typing to search\"],\"aG9OiI\":[\"Sharing Details\"],\"aI8Tgp\":[\"Owning Project ID\"],\"aL1w5Z\":[\"Used\"],\"aSsVD3\":[\"Public read access is not enabled. Before configuring static website serving, go to <0>Manage Access and enable public read access.\"],\"aTqCTq\":[\"Image file is required\"],\"aV6KPH\":[\"Prevent accidental deletion\"],\"aZGVW7\":[\"No versions found for this object.\"],\"an5hVd\":[\"Images\"],\"ao/ZJi\":[\"Deleting folder and all its contents...\"],\"aqagJH\":[\"Unable to Update Image Visibility\"],\"arel2K\":[\"No objects found\"],\"azXlY+\":[\"Access Status:\"],\"b0uU1G\":[\"Store old object versions in container:\"],\"b2BLBa\":[\"Add Security Group Rule\"],\"b5aNMO\":[\"The text must match \\\"delete\\\"\"],\"b78j86\":[\"Certificate \",[\"certificateIdValue\"]],\"b95YH9\":[\"Bucket Emptied\"],\"bHUarC\":[\"Bucket Deleted\"],\"bISG26\":[\"Failed to fetch flavor access information. Please try again.\"],\"bM1O3m\":[\"Image Instance\"],\"bQBMTH\":[\"This is a <0>static large object. By default, all associated segment objects will also be permanently deleted.\"],\"bRgFkJ\":[\"Failed to upload file \\\"\",[\"fileName\"],\"\\\": \"],\"bYRFNi\":[\"Failed to Delete Objects\"],\"bc67JN\":[\"Custom Properties / Metadata\"],\"bmQLn5\":[\"Add Rule\"],\"bnql/K\":[\"Back to Images\"],\"boJ+Y1\":[\"Create Folder\"],\"boJlGf\":[\"Page Not Found\"],\"boefwq\":[\"Could not create bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"bpme7e\":[\"Flavor Not Found\"],\"bwRvnp\":[\"Action\"],\"bwhBhT\":[\"Security Group\"],\"byKna+\":[\"An unexpected error occurred. Please try again.\"],\"bzMKg7\":[\"Accepted\"],\"bzSI52\":[\"Discard\"],\"c+fUtV\":[\"Start typing to search for a container\"],\"c+xCSz\":[\"True\"],\"c1OE1x\":[\"CA ID\"],\"c1uL4p\":[\"The image \\\"\",[\"imageId\"],\"\\\" could not be deleted: \",[\"message\"]],\"c5i+X0\":[\"Loading Buckets...\"],\"c6b6fz\":[\"Delete Selected\"],\"c9Ss4N\":[\"Policy document exceeds maximum size of 20KB\"],\"cBfLPr\":[\"Failed to Delete Policy\"],\"cCfxH1\":[\"Downloading...\"],\"cJDQIO\":[\"Root Disk\"],\"cPKL6O\":[\"You don't have permission to create flavors in this project.\"],\"cUKFby\":[\"Lifecycle action\"],\"cWbW6w\":[\"Manage Access\"],\"cXuXkb\":[\"User \",[\"userId\"],\" from project \",[\"projectId\"]],\"chL5IG\":[\"Community\"],\"cj17eo\":[\"Image instance \\\"\",[\"imageName\"],\"\\\" has been activated\"],\"cjEOmc\":[\"Share this security group with another project. The target project will be able to view and use this security group, but will not be able to modify or delete it.\"],\"cnGeoo\":[\"Delete\"],\"cpw++p\":[\"Static large object support\"],\"cqQyPB\":[\"Folder name\"],\"ctc4XR\":[\"Delete certificate authority\"],\"d+F6q9\":[\"Created\"],\"d/I0J3\":[\"Activate Selected\"],\"d0pLfy\":[\"Failed to delete security group\"],\"dEHa3L\":[\"Type the bucket name to confirm\"],\"dEgA5A\":[\"Cancel\"],\"dFb5Nt\":[\"Id\"],\"dLFiER\":[\"Error Loading Containers: \",[\"errorMessage\"]],\"dOevLB\":[\"Expires in \",[\"selectedPresetLabel\"],\" — at \",[\"expiresAtFormatted\"]],\"dPj4yB\":[\"Login to Your Account\"],\"dPoCVe\":[\"Type “detach” to confirm\"],\"dTNzBI\":[\"Key must contain at least one alphanumeric character\"],\"dVdc7N\":[\"You are not authorized to delete extra specs. Please log in again.\"],\"dd2ndz\":[\"Entries in ACLs are comma-separated. Examples:\"],\"ddf7GN\":[\"Failed to load objects\"],\"diFNkW\":[\"Error loading component\"],\"dku8RF\":[\"Type <0>DELETE to confirm:\"],\"dxMaZH\":[\"Manage your Private Certificate Authority infrastructure\"],\"e0NrBM\":[\"Project\"],\"eChIh7\":[\"Flavor \\\"\",[\"flavorName\"],\"\\\" has been successfully created.\"],\"eGEHJE\":[\"DNS Name\"],\"eKC+EC\":[\"-\"],\"ePK91l\":[\"Edit\"],\"eYlnXt\":[\"No images found\"],\"eh/k36\":[\"Select a rule type...\"],\"ekCRTP\":[\"Rejected\"],\"eks7oA\":[\"Port ID\"],\"emkxJa\":[\"There are no buckets available with the current search criteria. Try adjusting your search term.\"],\"eslBIK\":[\"Failed to Enable Versioning\"],\"eu70nA\":[\"Expires at (UTC)\"],\"eyRsaH\":[\"Root\"],\"ezT9KW\":[\"Container syncing\"],\"f+Uq1E\":[\"New object name\"],\"f0cwjH\":[\"Object properties\"],\"fCPhho\":[\"One or more objects could not be deleted:\"],\"fIvd7X\":[\"Failed to Delete Images\"],\"fJpv9x\":[\"Failed to Deactivate Images\"],\"ffw//c\":[\"PCA\"],\"fj5byd\":[\"N/A\"],\"fnCEAB\":[\"Type “delete” to confirm\"],\"foy2JB\":[[\"displayName\"],\" was successfully restored\"],\"fxnDd7\":[\"Failed to generate temporary URL: \",[\"generalError\"]],\"fzfAAa\":[\"Ingress\"],\"g+Jead\":[\"IPv6\"],\"g1IxCo\":[\"RAM must be an integer ≥ 128 MB.\"],\"g3BSCe\":[\"Swap Disk must be an integer ≥ 0.\"],\"g3UF2V\":[\"Accept\"],\"g8Yxlg\":[\"Temporary URL for \\\"\",[\"objectName\"],\"\\\" was copied to clipboard.\"],\"gFKJBP\":[\"Folder name cannot have leading or trailing whitespace\"],\"gGdfWx\":[\"The compute service is currently unavailable for this project. Please try again later.\"],\"gMYsdZ\":[\"Set to \\\"Shared\\\"\"],\"gOAPiI\":[\"Successfully deleted \",[\"deletedCount\"],\" versions and delete markers from bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"gSpeIX\":[\"Preview and download aren't available for older versions yet\"],\"gU7JFm\":[\"Creating security group rule...\"],\"gYe+hC\":[\"Click to upload\"],\"gjop1H\":[\"Bucket name must be at least 3 characters\"],\"go0J2x\":[\"Failed to copy the temporary URL to the clipboard\"],\"go9U+C\":[\"To confirm, type <0>\\\"delete\\\" in the field below.\"],\"gy6L1u\":[\"Must be a valid common name (FQDN).\"],\"gztCjq\":[\"The tenant ID provided is invalid. Please check your input.\"],\"h/lrJz\":[\"Policy Templates\"],\"h3P8z+\":[\"Failed to delete the flavor. Please try again.\"],\"h47p9L\":[\"—\"],\"h6JDtI\":[\"Paste CSR code\"],\"h8h6oz\":[\"Images Deactivated\"],\"h99+4y\":[\"Allocate Floating IP\"],\"hH3kDo\":[\"Loading Image Details...\"],\"hHL/wm\":[\"Image instance \\\"\",[\"imageName\"],\"\\\" has been updated\"],\"hLp49h\":[\"Type <0>\",[\"deleteWord\"],\" to confirm:\"],\"hPz54a\":[\"Failed to Download\"],\"hQdfmR\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully deleted.\"],\"hQr1Cr\":[\"Deactivate Image\"],\"hXUWyd\":[\"Value is required\"],\"hYgDIe\":[\"Create\"],\"he3ygx\":[\"Copy\"],\"he4q+i\":[\"e.g., b90f9c4bc76140e18540b2cec1299e2a\"],\"hgpMHD\":[\"Total Size\"],\"hkjZ7P\":[\"Failed to update visibility for \\\"\",[\"imageName\"],\"\\\": \"],\"hrBow7\":[\"Network ID\"],\"hueclm\":[\"Folder <0>\\\"\",[\"folderDisplayName\"],\"\\\" and all objects within it will be permanently deleted. This cannot be undone.\"],\"hz9da7\":[\"Failed to load Certificates issued by Certificate Authority.\"],\"i0qMbr\":[\"Home\"],\"i41Xuw\":[\"Select a fixed IP address\"],\"i5MEDc\":[\"Failed to move object: \",[\"copyErrorMessage\"]],\"i6/ygf\":[\"A property with this key already exists\"],\"i7u3X3\":[\"Once enabled, versioning cannot be fully disabled, it can only be suspended. Existing versions will remain even after suspension.\"],\"i9I/nL\":[\"This action will permanently delete all objects from \",[\"bucketName\"],\". You may choose to also delete all versions and delete markers. This will enable you to delete the bucket. This action cannot be undone.\"],\"i9TIyi\":[\"Remote Security Group\"],\"i9qiyR\":[\"Expires in\"],\"iH8pgl\":[\"Back\"],\"ifQSTI\":[\"Enable versioning\"],\"igVDFt\":[\"Attach\"],\"ih2lfP\":[\"No buckets found\"],\"ihMuB8\":[\"Failed to Restore Version\"],\"iqUvrS\":[\"User C/D/I\"],\"is0Bhk\":[\"Bucket name must be 63 characters or fewer\"],\"izMhIO\":[\"User \",[\"userId\"],\" (any project)\"],\"j1Hej6\":[\"Share URL:\"],\"j9hkgJ\":[\"rules\"],\"j9lCXl\":[\"Changes take effect immediately after saving.\"],\"jBIkmi\":[\"QCOW2, Raw, VMDK, VHD, VHDX, VDI, AMI, ARI, AKI, ISO, PLOOP\"],\"jIPNJG\":[\"Basic Information\"],\"jK6wqe\":[\"Folder \\\"\",[\"folderName\"],\"\\\" and \",[\"deletedCount\"],\" objects were permanently deleted.\"],\"jKopCP\":[\"Network & Routing\"],\"jMaofI\":[\"Could not enable versioning for bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"jMc/mo\":[\"Server error occurred while creating extra specs. Please try again later.\"],\"jNm/qL\":[\"This container is already empty.\"],\"jNzyQo\":[\"Object versioning\"],\"jPxavx\":[\"Failed to update security group\"],\"jS4B2+\":[\"Container name does not match\"],\"jSG7wx\":[\"Please enter a valid number of minutes greater than 0\"],\"jVjr9h\":[\"Enter a valid common name in FQDN format (e.g., demo-ca.test.sci).\"],\"jhU93c\":[\"The image \\\"\",[\"imageName\"],\"\\\" could not be created: \"],\"jq5wGQ\":[\"S3 Object Storage: Setup Required\"],\"js24f6\":[\"Delete folder:\"],\"jtnAf8\":[\"Protected images (cannot be deleted)\"],\"jyVMod\":[\"Restore Version\"],\"jyqLKs\":[\"This member already has access to this image.\"],\"k/zHK7\":[\"Creating Credentials...\"],\"k0vAWv\":[\"Object count quota\"],\"k5nYwm\":[\"vCPU\"],\"k7ENJG\":[\"Preview \",[\"rowDisplayName\"]],\"k99j0U\":[\"Cancel upload\"],\"kA2lMP\":[\"External Network\"],\"kGmM/p\":[\"You don't have permission to create extra specs for this flavor.\"],\"kIuDMT\":[\"Configure the ingress and egress rules that control which traffic is allowed for this security group.\"],\"kKK8AH\":[\"Remaining Quota:\"],\"kNeZrV\":[\"No Certificates issued by this Certificate Authority found\"],\"kQYfgO\":[\"One or more containers could not be emptied: \",[\"errorMessage\"]],\"kRiVnR\":[\"New uploads will overwrite the current version\"],\"kdcrma\":[\"Existing versions remain accessible\"],\"kiRrtv\":[\"<0>Please note: for <1>dynamic and <2>static large objects only the manifests will be deleted. The related segments will not be deleted.\"],\"kqJVBO\":[\"You don't have permission to share this security group.\"],\"kuYWaD\":[\"Reserved keys: web-index, web-listings, quota-count, quota-bytes\"],\"l+fhn1\":[\"I understand that enabling versioning is permanent\"],\"l75CjT\":[\"Yes\"],\"lAsm87\":[\"Protect this image from being deleted\"],\"lBVhQs\":[\"Something went wrong:\"],\"lN/Z9n\":[\"Security group name is required\"],\"lN3xvy\":[\"Delete Rule\"],\"lQ3EIe\":[\"Max deletes per request\"],\"lRRkwQ\":[\"Write ACLs — Preview\"],\"lRoPjj\":[\"ETag\"],\"lWTy+Y\":[\"Unable to Create Image\"],\"lWxDDh\":[\"Flavor Name\"],\"lZvIXd\":[\"Description must be at most 255 characters.\"],\"lhIa6x\":[\"Failed to load extra specs. Please try again.\"],\"lq/mBZ\":[\"Loading object info...\"],\"lw1412\":[\"You have been logged out due to inactivity.\"],\"lxentK\":[\"An unexpected error occurred\"],\"m16xKo\":[\"Add\"],\"m6X3ro\":[\"Group Name\"],\"mMHJ/+\":[\"Suspend Versioning\"],\"mQSO1Y\":[\"Port Forwarding\"],\"mSLePW\":[\"You don't have permission to access flavors for this project.\"],\"mSfwLL\":[\"Project ID\"],\"mTJdHL\":[\"All objects in the folder can be restored from version history.\"],\"mYnJeY\":[\"The text must match “release” in lowercase.\"],\"mbmb/h\":[\"Also delete all versions and all delete markers\"],\"miy5mb\":[\"PCA (Clavis)\"],\"mqljvE\":[\"Copy metadata\"],\"mvz5Eo\":[\"URL for public access\"],\"mxPfpY\":[\"Create new folder here\"],\"mzI/c+\":[\"Download\"],\"n0ZttO\":[\"Root Disk (GiB)\"],\"n1ekoW\":[\"Sign In\"],\"n1gB0L\":[\"Edit Floating IP \",[\"floating_ip_address\"]],\"n22YIM\":[\"Edit Description\"],\"n2IuBI\":[\"A temporary URL grants time-limited read access to this object without requiring authentication. Anyone with the link can download it until it expires.\"],\"n3eQzA\":[\"This property is reserved and cannot be modified\"],\"n46oLW\":[\"Failed to remove member\"],\"n9jJG6\":[\"Remove member access\"],\"nETBrc\":[\"Egress\"],\"nLvo6K\":[\"RBAC Policy Details:\"],\"nNKXt7\":[\"Deleting this Certificate Authority is permanent, and all the associated certificates will no longer apply to entities.\"],\"nPI6Rk\":[\"Successfully deleted \",[\"deletedCount\"],\" versions from bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"nU1mHK\":[\"Versioning Enabled\"],\"nUuaq8\":[\"Failed to update container: \",[\"errorMessage\"]],\"nW/hX9\":[\"General Image Data\"],\"nWNviN\":[\"Deleting certificate authority...\"],\"nYab6d\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully moved to \",[\"destination\"],\".\"],\"nZbdB+\":[\"Upload Cancelled\"],\"ndwp1n\":[\"Invalid JSON format\"],\"ne/GWZ\":[\"Inside a project, objects are stored in containers. Containers are where you define access permissions and quotas.\"],\"neiJm0\":[\"Flavors\"],\"ng+PCh\":[\"There are no PCAs available for this project.\"],\"nkpZyk\":[\"Container \\\"\",[\"containerName\"],\"\\\" was already empty.\"],\"nnxwBn\":[\"There are no rules for this security group\"],\"ntNlXu\":[\"Listing access\"],\"nzFJqC\":[\"Delete CA\"],\"o/VDOG\":[\"Unable to Delete Image\"],\"o6M6l0\":[\"Failed to create security group\"],\"oAMLhA\":[\"Full path:\"],\"oDkgME\":[\"You are not authorized to create flavors. Please log in again.\"],\"oEGiW3\":[\"Uploading... \",[\"progressPct\"],\"%\"],\"oFZY0k\":[\"Failed to Download Object\"],\"oJVmWq\":[\"Could not delete \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"ocUvR+\":[\"False\"],\"odVI9Y\":[\"Container Deleted\"],\"og1m+J\":[\"Loading Certificate Authority Details...\"],\"okXQSt\":[\"Subject information\"],\"olfSYj\":[\"Access Control Updated\"],\"p4nMut\":[\"Swap (MiB)\"],\"p7DzCB\":[\"Failed to Update Access Control\"],\"pD/2BQ\":[\"Successfully emptied \",[\"emptiedCount\"],\" of \",[\"totalBuckets\"],\" \",[\"totalBuckets\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\", deleting \",[\"totalDeleted\"],\" \",[\"totalDeleted\",\"plural\",{\"one\":[\"object\"],\"other\":[\"objects\"]}],\". \",[\"errorsLength\"],\" \",[\"errorsLength\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\" failed.\"],\"pFg+7w\":[\"Updated:\"],\"pOPvlj\":[\"Already active (will be skipped)\"],\"pPr2iF\":[\"Could not delete versions from bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"pQB7Sy\":[\"Could not suspend versioning for bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"pU25+T\":[\"Upload of \\\"\",[\"objectName\"],\"\\\" was cancelled.\"],\"pYR76U\":[\"Importing Certificate...\"],\"pbzA+s\":[\"Optional description\"],\"pebLmQ\":[\"Remove access for \",[\"memberIdDisplay\"]],\"pkz+z2\":[\"Failed to save policy\"],\"plnnns\":[\"Deleted \",[\"successCount\"],\" image(s), but \",[\"failedCount\"],\" image(s) could not be deleted.\"],\"pmJY1C\":[\"Successfully deleted bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"poCbZw\":[\"Loading ACLs...\"],\"podzPY\":[\"Project id\"],\"pubQie\":[\"Enter value\"],\"q0Rla3\":[\"Add Tenant Access\"],\"q44uUq\":[\"Containers Partially Emptied\"],\"q6K46F\":[\"Key already exists\"],\"q88/6A\":[\"Failed to Create Folder\"],\"qAkkjP\":[\"Max object name length\"],\"qEDO1j\":[\"This is a <0>dynamic large object. Only the manifest will be deleted — its segment objects (stored under the manifest prefix) are <1>not automatically removed and must be deleted separately.\"],\"qJb6G2\":[\"Try Again\"],\"qQ1QBh\":[\"Hardware Specifications\"],\"qUlxA+\":[\"Folder \\\"\",[\"folderName\"],\"\\\" was permanently deleted.\"],\"qaAo9Y\":[\"Server error occurred while creating the flavor. Please try again later.\"],\"qh5W8q\":[\"Remove Policy\"],\"qhDo93\":[\"Common name is required.\"],\"qs+BrU\":[\"You don't have permission to remove tenant access from this flavor.\"],\"qtoOYG\":[\"No limit\"],\"quU9wK\":[\"Failed to deactivate \",[\"failedCount\"],\" of \",[\"totalCount\"],\" image(s). Some images may already be deactivated or in an invalid state.\"],\"qvF2D8\":[\"There are no images available for this project with the current filters applied. Try adjusting your filter criteria or create a new image.\"],\"qxxo7y\":[\"No policies match your search\"],\"qzIZOL\":[\"Invalid file format. Supported formats: \",[\"supportedFileFormats\"]],\"qzhUb9\":[\"Showing first \",[\"maxOptions\"],\" of \",[\"totalCount\"],\" — refine your search to narrow results\"],\"r5SQFW\":[\"Container name must be \",[\"maxContainerNameLength\"],\" characters or fewer\"],\"r9Aac8\":[\"Ephemeral Disk\"],\"rAtQcX\":[\"You can rename the object by changing the name here.\"],\"rD9yV1\":[\"Images to deactivate:\"],\"rG3WVm\":[\"Select\"],\"rIe0oV\":[\"Failed to add tenant access to flavor. Please try again.\"],\"rIi6x4\":[\"The flavor could not be found. It may have already been deleted.\"],\"rJe6vw\":[\"7 days\"],\"rPuPb+\":[\"Checking bucket contents...\"],\"rbuO5A\":[\"This security group is already shared with the specified project.\"],\"rcBt6T\":[\"Failed to create credential: \",[\"errorMessage\"]],\"rdUucN\":[\"Preview\"],\"rfemv7\":[\"Invalid credentials. Please check your domain, username, and password.\"],\"rhaNn7\":[\"Loading containers...\"],\"riR9oD\":[\"Note: for <0>static and dynamic large objects only the manifests are deleted — their segments outside this folder prefix are not affected.\"],\"rlgAtt\":[\"The object will be moved to this path. Navigate folders above to change the destination.\"],\"rp0Bd0\":[\"Compute\"],\"rrjuul\":[\"For more details, have a look at the <0>documentation.\"],\"rvXsSb\":[\"Tenant access for \\\"\",[\"tenantIdToRemove\"],\"\\\" has been removed successfully.\"],\"rwBVXS\":[\"Images to be deleted (\",[\"deletableCount\"],\")\"],\"rx4T2i\":[\"Issue Certificate\"],\"ryf/ee\":[\"Images Activated\"],\"ryxYVo\":[\"Images to be deactivated (\",[\"activeCount\"],\")\"],\"s/s1lz\":[\"Any user can perform a HEAD or GET operation on the container provided the user also has read access on objects. No token is required.\"],\"s2ubkU\":[\"Flavor ID\"],\"s4Vnq2\":[\"Emptying...\"],\"sCPiLi\":[\"Type DELETE to confirm\"],\"sNVNmf\":[\"MAC Address\"],\"sPFHpI\":[\"Disk\"],\"sSNyf3\":[\"Welcome to <0>Aurora Dashboard, your next-generation cloud management solution. We are dedicated to simplifying how you interact with and manage your cloud infrastructure. Designed with efficiency, scalability, and usability at its core, Aurora empowers you to streamline operations and unlock the full potential of your cloud resources.\"],\"sWBLli\":[\"Add Property\"],\"sXd+qS\":[\"Properties of \\\"\",[\"objectName\"],\"\\\" were successfully updated.\"],\"sYJvnu\":[\"Create New Folder\"],\"sa4CV6\":[\"All users from project \",[\"projectId\"]],\"sgra3S\":[\"You can re-enable versioning at any time\"],\"shKIZu\":[\"Images to be activated (\",[\"deactivatedCount\"],\")\"],\"sihD20\":[\"Loading images...\"],\"sjMCOP\":[\"Last Modified\"],\"sl2P3q\":[\"Object:\"],\"slWh5C\":[\"Associate Floating IP \",[\"floating_ip_address\"],\" with Port\"],\"sxbP3b\":[\"Object Count\"],\"t/YqKh\":[\"Remove\"],\"t/cZdQ\":[\"Full Path:\"],\"t0X9+8\":[\"Container Name\"],\"t1POAD\":[\"No custom metadata properties found. Click \\\"Add Property\\\" to create one.\"],\"t1fq6V\":[\"Server returned unexpected data format.\"],\"t7ewhH\":[\"Could not empty bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"t7ff15\":[\"valid token required: false\"],\"t95VRV\":[\"About Aurora Dashboard\"],\"tASa/P\":[\"Server error occurred while deleting the flavor. Please try again later.\"],\"tIc6vY\":[\"Could not copy \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"tIrNgH\":[\"Server error occurred while fetching extra specs. Please try again later.\"],\"tLerHy\":[\"Ephemeral Disk must be an integer ≥ 0.\"],\"tM5SEI\":[\"ACLs for container \\\"\",[\"containerName\"],\"\\\" were successfully updated.\"],\"tOkmLM\":[\"Failed to Copy Object\"],\"tV/Ozb\":[\"Port Range\"],\"tVSmFT\":[\"Loading more...\"],\"tX5yOZ\":[\"New Folder\"],\"tasfos\":[\"remove\"],\"tbwGSx\":[\"Minimum Disk (GB)\"],\"tejJLY\":[\"Associating Floating IP...\"],\"tfAKBU\":[\"Could not upload \\\"\",[\"objectName\"],\"\\\": \",[\"errorMessage\"]],\"tfDRzk\":[\"Save\"],\"tfxu04\":[\"Remove access for \",[\"tenantId\"]],\"thHAVL\":[\"Accepted Images\"],\"tiflqy\":[\"Unable to Re-activate Image\"],\"tkRT08\":[\"Metadata size exceeds the 2KB limit. Please remove or shorten some entries before saving.\"],\"tlfxPP\":[\"Could not copy \\\"\",[\"objectName\"],\"\\\": \",[\"errorMessage\"]],\"tmpGvt\":[\"production, linux\"],\"u+VWhB\":[\"Copied to clipboard!\"],\"u2xIeO\":[\"Failed to update ACLs: \",[\"errorMessage\"]],\"u5HztT\":[\"RX/TX Factor\"],\"u77/s4\":[\"Floating IPs\"],\"u7En0V\":[\"Add Metadata\"],\"uAI0yI\":[\"Delete object:\"],\"uAQUqI\":[\"Status\"],\"uLtFAr\":[\"Could not update container \\\"\",[\"containerName\"],\"\\\": \",[\"errorMessage\"]],\"uSdnuQ\":[\"VCPUs must be an integer ≥ 1.\"],\"ubUrot\":[\"Objects: \",[\"containerName\"]],\"ujK/QN\":[\"Loading objects...\"],\"uly9ET\":[\"Rule Details:\"],\"up0ZSW\":[\"Fingerprint\"],\"uuKb0T\":[\"Description must be less than 65535 characters.\"],\"v0hPHE\":[\"Show Details\"],\"v3djpU\":[\"Move/Rename\"],\"v9Dn8m\":[\"Aurora Dashboard is more than just a tool—it's your partner in navigating the cloud. Whether you're a small startup or a global enterprise, Aurora provides the flexibility, power, and simplicity you need to achieve your goals.\"],\"vBUQNE\":[\"The extra spec could not be found. It may have already been deleted.\"],\"vEkTR9\":[\"Quota\"],\"vGjmyl\":[\"Deleted\"],\"vH2C/2\":[\"Swap\"],\"vKDskJ\":[[\"selectedCount\",\"plural\",{\"one\":[\"Delete \",\"#\",\" Object\"],\"other\":[\"Delete \",\"#\",\" Objects\"]}]],\"vR4HmN\":[\"Loading Instances...\"],\"vTh35P\":[\"Create Container\"],\"vXmL4D\":[\"Drop your image file here\"],\"vZUKSz\":[\"Detach Floating IP \",[\"floating_ip_address\"]],\"vbajgL\":[\"Public Flavor\"],\"vcQSZh\":[\"This folder is empty — use New Folder to create one.\"],\"vi0pmB\":[\"Delete all versions and delete markers\"],\"vmRPFm\":[\"Share Security Group\"],\"vmYyLY\":[\"Remote IP Prefix\"],\"vp5vfW\":[\"1 hour\"],\"vpt8cE\":[\"Generate URL\"],\"vrPCbw\":[\"Image ID\"],\"w3bAcf\":[\"This action is permanent. The address will be removed from your project and returned to the public pool. This action cannot be undone.\"],\"w9+8d7\":[\"Remove tenant access\"],\"wEfZld\":[\"Create New Flavor\"],\"wFaT8w\":[\"Failed to Empty Containers\"],\"wH0MtN\":[\"Ensure that the Project ID and User ID you enter are correct. The system cannot validate these values — incorrect IDs may apply access to wrong projects and users.\"],\"wHhJRb\":[\"Loading versions...\"],\"wL3cK8\":[\"Latest\"],\"wMHvYH\":[\"Value\"],\"wPrtGF\":[\"Enter key\"],\"wTg+FY\":[\"Max file size\"],\"wa1Bcq\":[\"Enter tenant ID\"],\"wbqM4L\":[[\"customMinutes\"],\" minutes\"],\"wcUecy\":[\"You don't have permission to view extra specs for this flavor.\"],\"wdUvGT\":[\"Creating Certificate Authority...\"],\"wdxz7K\":[\"Source\"],\"we28Pq\":[\"Hide ACLs Preview\"],\"wlQNTg\":[\"Members\"],\"wlUDbB\":[\"Last updated: \",[\"formattedDate\"]],\"wrXcuy\":[\"Object Name\"],\"ww8U9y\":[\"Edit/View Bucket Policy\"],\"wxVsr5\":[\"Bucket name does not match\"],\"wyIOMP\":[\"Image name is required\"],\"wzqqS+\":[\"Key Features\"],\"x/XQrD\":[\"Any file type\"],\"x1bK0h\":[\"There are no containers available with the current search criteria. Try adjusting your search term.\"],\"x3Gs8+\":[\"Edit/View Policy\"],\"x3T4pq\":[\"The container metadata reports objects but none were listed. This may be a temporary synchronization delay — please wait a moment and try again.\"],\"x5DnMs\":[\"Last modified\"],\"x5l/TK\":[\"Already active (will be skipped):\"],\"x7SF89\":[\"Read ACLs — Preview\"],\"x9AdZ8\":[\"property_key\"],\"xIXYTK\":[\"Your S3 credentials are invalid or expired. Please try creating new credentials or contact your administrator.\"],\"xNG/3n\":[\"Floating IP Address\"],\"xNZKYy\":[\"Failed to delete \",[\"failedCount\"],\" of \",[\"totalCount\"],\" image(s). Some images may be protected or in use.\"],\"xOvKAE\":[[\"totalCount\",\"plural\",{\"one\":[[\"filteredCount\"],\" of \",[\"totalCount\"],\" bucket\"],\"other\":[[\"filteredCount\"],\" of \",[\"totalCount\"],\" buckets\"]}]],\"xYrGVV\":[\"The selected objects will be permanently deleted. This cannot be undone.\"],\"xdgZcp\":[\"Successfully emptied bucket \\\"\",[\"bucketName\"],\"\\\". \",[\"deletedCount\"],\" objects deleted.\"],\"xqhyRT\":[\"Object Uploaded\"],\"xw2UtT\":[\"Create New Image\"],\"xyaMox\":[\"Type \\\"\",[\"CONFIRM_WORD\"],\"\\\" to confirm\"],\"y+KBOY\":[\"e.g., production, linux, ubuntu\"],\"y02Bu1\":[\"Container:\"],\"y0u86k\":[\"The requested flavor could not be found. It may have been deleted or you may not have access to it.\"],\"y1GYnY\":[\"Could not move \\\"\",[\"objectName\"],\"\\\": \",[\"errorMessage\"]],\"yDAMyU\":[\"Failed to load buckets: \",[\"errorMessage\"]],\"yDHGP+\":[\"my-bucket-name\"],\"yKu/3Y\":[\"Restore\"],\"yPWFWy\":[\"ICMP Type\"],\"yTtJTy\":[\"Edit Image Metadata\"],\"yYxB17\":[\"Clear all\"],\"ykQ47t\":[\"Failed to Delete Version\"],\"ylfbpz\":[\"Extra spec key is required and cannot be empty.\"],\"yp0UjB\":[\"Ethertype\"],\"yqPflB\":[\"... and \",[\"hiddenCount\"],\" more\"],\"yu9G3x\":[\"Edit Security Group\"],\"ywe1H/\":[[\"totalCount\",\"plural\",{\"one\":[[\"totalCount\"],\" container\"],\"other\":[[\"totalCount\"],\" containers\"]}]],\"yz7wBu\":[\"Close\"],\"z+zpLP\":[\"valid token required: true\"],\"z/5vyM\":[\"Versioning was successfully enabled for bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"z1JceR\":[\"Back to Floating IPs\"],\"z3N8nN\":[\"Enter bucket policy JSON...\"],\"z45o5B\":[\"Object count\"],\"z9NAjZ\":[\"Object Deleted\"],\"zCD96i\":[\"You are not authorized to view flavor details. Please log in again.\"],\"zDS0JC\":[\"Name must be 2-50 characters long.\"],\"zWb/Nn\":[\"Max header size\"],\"zc5dcw\":[\"Login failed. Please check your credentials and try again.\"],\"zemvbh\":[\"View Versions\"],\"zga9sT\":[\"OK\"],\"zhM8FP\":[\"Grant access to a user from a different project.\"],\"zm7+/D\":[\"You are about to deactivate <0>\",[\"activeCount\"],\" image(s). Deactivated images cannot be used to launch new instances.\"],\"zsqy/h\":[\"Delete Marker\"],\"zwBp5t\":[\"Private\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"+0B+ue\":[\"Projects\"],\"+1rTEL\":[\"Import Externally Signed Certificate\"],\"+1xG4p\":[\"Click the button below to automatically generate credentials for this project. You only need to do this once.\"],\"+8m5QE\":[\"To access S3 Object Storage, you need EC2 credentials (access key + secret key). These credentials authenticate your requests to the Ceph storage backend.\"],\"+9CXS9\":[\"Deactivate Images\"],\"+HVj+D\":[\"Add a Signed Certificate to your CA to activate it\"],\"+Jcye3\":[\"Key Name\"],\"+Lt5cp\":[\"You are not authorized to add tenant access. Please log in again.\"],\"+Nhol2\":[\"Certificate not found\"],\"+NwLgN\":[\"Activating this image will allow it to be used to launch new instances again.\"],\"+Nx1wc\":[\"Failed to load Floating IPs\"],\"+OEi73\":[\"Object Storage (Swift)\"],\"+Pe7SS\":[\"Failed to delete policy\"],\"+nQTmZ\":[\"This tenant does not have access to the flavor.\"],\"+p6nHr\":[\"Failed to load object metadata: \",[\"metadataErrorMessage\"]],\"+pJjJF\":[\"After restoring, this version's content will become the new latest version.\"],\"+rtZ8i\":[\"Version ID:\"],\"+zy2Nq\":[\"Type\"],\"/0+NVm\":[\"What happens when suspended:\"],\"/1MfrG\":[\"Could not download \\\"\",[\"objectName\"],\"\\\": \",[\"errorMessage\"]],\"/9Squ9\":[\"You don't have permission to view this flavor's details.\"],\"/AlhPT\":[\"Confirm deletion of \",[\"displayName\"],\". All objects inside this folder will be marked as deleted but can be restored from version history.\"],\"/BZLRP\":[\"To confirm this action, type the word <0>“detach” in the field below.\"],\"/EcdUM\":[\"Your action is required\"],\"/HejCc\":[\"This bucket does not have a policy attached.\"],\"/HgF9q\":[\"Sort by\"],\"/InK0O\":[\"Total size\"],\"/LXXlY\":[\"Properties of \\\"\",[\"displayName\"],\"\\\" were successfully updated.\"],\"/LqWNN\":[\"Could not delete \\\"\",[\"objectName\"],\"\\\": \",[\"errorMessage\"]],\"/NeNjH\":[\"Container \\\"\",[\"containerName\"],\"\\\" properties were successfully updated.\"],\"/Nmxy/\":[\"No key pairs available.\"],\"/QIkBY\":[\"<0>Secure & Reliable: Your data and operations are safeguarded with enterprise-grade security and robust reliability.\"],\"/Qox3b\":[\"A folder with this name already exists\"],\"/Z5n1b\":[\"Create folder below:\"],\"/bUiYk\":[\"Router ID\"],\"/eFtWI\":[\"RBAC Policies\"],\"/fwE6J\":[\"Older\"],\"/pOQrn\":[\"This action is irreversible. Deleting a bucket permanently removes it and cannot be undone. The bucket must be empty before deletion.\"],\"/xnbdQ\":[\"The specified user has access. A token for the user (scoped to any project) must be included in the request.\"],\"01/uUD\":[\"Keep segments (delete manifest only)\"],\"07WXfc\":[\"Server returned unexpected data format for extra specs.\"],\"0BSSYj\":[\"Server error occurred while removing tenant access. Please try again later.\"],\"0Gd0NU\":[\"Shared\"],\"0P2gFy\":[\"The page you are looking for does not exist.\"],\"0Th0CH\":[[\"selectedCount\",\"plural\",{\"one\":[\"Empty Container\"],\"other\":[\"Empty \",\"#\",\" Containers\"]}]],\"0WsqO0\":[\"Containers Emptied\"],\"0cVgUw\":[\"Filter by\"],\"0cl0a5\":[\"Search images...\"],\"0eY8Mz\":[\"There are no Floating IPs available for this project. Floating IPs allow you to map public IP addresses to instances.\"],\"0efWir\":[[\"totalCount\",\"plural\",{\"one\":[\"Empty Container\"],\"other\":[\"Empty \",\"#\",\" Containers\"]}]],\"0i3NVD\":[\"Delete Version Permanently\"],\"0kCt7e\":[\"The flavor data provided is invalid. Please check your input.\"],\"0kc0zi\":[\"Server error occurred while deleting the extra spec. Please try again later.\"],\"0o0OhW\":[\"No objects found.\"],\"0p+s6m\":[\"Type: \",[\"typeValue\"],\", Code: \",[\"codeValue\"]],\"0u9jhd\":[\"Detaching this Floating IP will remove its association with the current port. The instance will no longer be reachable through this address.\"],\"16085O\":[\"IP Version\"],\"1DbiGM\":[\"Issuing Self-Signed Certificate...\"],\"1DzQpj\":[\"This folder is empty, use New Folder to create one.\"],\"1H2g6v\":[\"Moving object...\"],\"1NFtQz\":[\"Failed to Delete Bucket\"],\"1NS3nd\":[[\"emptiedCount\",\"plural\",{\"one\":[\"#\",\" container\"],\"other\":[\"#\",\" containers\"]}],\" successfully emptied. \",[\"totalDeleted\",\"plural\",{\"one\":[\"#\",\" object\"],\"other\":[\"#\",\" objects\"]}],\" deleted in total.\"],\"1RwosK\":[\"Target project ID is required\"],\"1UzENP\":[\"No\"],\"1VDqZj\":[\"<0>Future-Ready: Aurora is designed to evolve with the latest trends in cloud technology, ensuring your solution is always cutting-edge.\"],\"1W3TqV\":[\"No new versions will be created\"],\"1bj2LS\":[\"Could not restore \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"1iQtS2\":[\"Showing first \",[\"actualObjectCount\"],\" of \",[\"total\"],\" objects\"],\"1iUuTT\":[\"Your session has expired. Please log in again.\"],\"1mFMeP\":[\"Delete Versions\"],\"1ojTVo\":[\"Select a DNS domain.\"],\"1pGUZa\":[\"Session expires in\"],\"1pdLQw\":[\"Image not found\"],\"1rLu3+\":[\"Could not empty container \\\"\",[\"containerName\"],\"\\\": \",[\"errorMessage\"]],\"1rPB1p\":[\"The flavor or tenant could not be found. Please verify they exist.\"],\"1t/NnN\":[\"Reject\"],\"1zZ1IK\":[\"Hi\"],\"20E+79\":[\"You need to login to access this page.\"],\"20Kpaw\":[\"Flavor \\\"\",[\"flavorName\"],\"\\\" has been successfully deleted.\"],\"20axE5\":[\"Shared by Project\"],\"23wBCX\":[\"Public Read Access\"],\"2G+7C1\":[\"Enter a name for the new folder.\"],\"2G6hLq\":[\"Delete \",[\"specKey\"]],\"2Inn83\":[\"Bulk upload of archive files\"],\"2PRzsq\":[\"Could not create folder \\\"\",[\"folderPath\"],\"\\\": \",[\"errorMessage\"]],\"2TtIL2\":[\"Stored as X-Object-Meta-* headers. Keys are case-insensitive.\"],\"2cJIlz\":[\"Floating Network ID\"],\"2d/OiW\":[\"Enter your username\"],\"2dnZwV\":[\"Could not delete folder \\\"\",[\"folderName\"],\"\\\": \",[\"errorMessage\"]],\"2gH+i8\":[\"You are not authorized to delete flavors. Please log in again.\"],\"2mbisJ\":[\"Metadata \\\"\",[\"trimmedKey\"],\"\\\" has been added successfully.\"],\"2q/Q7x\":[\"Visibility\"],\"2xOCJW\":[\"This action cannot be undone.\"],\"2xbYVD\":[\"Could not update \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"2ysnjX\":[\"<0>Enhanced Productivity: By reducing operational complexity, Aurora helps your team focus on what truly matters—innovating and driving business success.\"],\"2zceEg\":[\"This action cannot be undone. The image will be permanently deleted.\"],\"33F2A+\":[\"Type container name to confirm\"],\"3Qn0me\":[\"Add Member\"],\"3dBmvU\":[\"The container cannot be deleted as it contains objects. Empty the container first.\"],\"3n+vCm\":[\"Custom duration (minutes)\"],\"3nWqQW\":[\"You are not authorized to view extra specs. Please log in again.\"],\"3nh/7E\":[\"If checked, this flavor will be available to all tenants. If unchecked, access must be explicitly granted to specific tenants.\"],\"3oChIh\":[\"<0>Unified Cloud Management: Consolidates all your cloud assets into one intuitive interface.\"],\"3oc18/\":[\"Private flavors could not be loaded. You may be seeing an incomplete list.\"],\"3q1GLx\":[\"Pending file upload...\"],\"3uDz8n\":[\"Import Signed Certificate\"],\"3x7Sws\":[\"Loading Security Group Details...\"],\"4+2wZO\":[\"Back to Certificate Authorities Details page\"],\"46gjWc\":[\"Delete Folder \\\"\",[\"displayName\"],\"\\\"\"],\"47eI0x\":[\"Description must be at least 1 character.\"],\"48QXFO\":[\"Expected format: YYYY-MM-DD HH:mm:ss\"],\"48bMai\":[\"Bucket name is required\"],\"4BITzH\":[\"Error:\"],\"4EZrJN\":[\"Rules\"],\"4O2AH3\":[\"Member \\\"\",[\"memberIdToRemove\"],\"\\\" has been removed successfully.\"],\"4bLttB\":[\"Folder name is too long (max 255 characters)\"],\"4cQTyf\":[\"Stateful security groups track connection state. This setting cannot be changed after creation.\"],\"4fh0Wj\":[\"Boot size\"],\"4fvDRe\":[\"Images to activate:\"],\"4fvcmm\":[\"Object will be uploaded as: <0>\",[\"selectedObjectName\"],\"\"],\"4h3Eyf\":[\"\\\"\",[\"objectName\"],\"\\\" was successfully uploaded.\"],\"4kjaAc\":[\"No server groups available.\"],\"4mbrAq\":[\"1 minute\"],\"4opp4r\":[\"Security Groups\"],\"4pOfUd\":[\"Our Mission\"],\"4t33sh\":[\"Failed to Update Object\"],\"4uXhtt\":[\"CIDR\"],\"4utWB4\":[\"Server Role:\"],\"5+FeN2\":[\"Share URL\"],\"5/wyf8\":[\"Enter a floating IP\"],\"56IxdF\":[\"Failed to load container objects: \",[\"errorMessage\"]],\"5BLR6Q\":[\"IPv4\"],\"5JDSvn\":[\"Max meta value length\"],\"5M4Te3\":[\"DNS\"],\"5MF8U2\":[\"Failed to Update Container\"],\"5Od/iS\":[\"Empty the bucket\"],\"5Okch2\":[\"Empty:\"],\"5PhMH2\":[\"Failed to Suspend Versioning\"],\"5Yrl6N\":[\"Loading Server Groups...\"],\"5aNQ3F\":[\"\\\"\",[\"objectName\"],\"\\\" was successfully copied to \",[\"destination\"],\".\"],\"5g7owI\":[\"Updating Floating IP...\"],\"5p97CR\":[\"Unable to verify bucket versioning status. Please try again.\"],\"5y3O+A\":[\"Deactivate\"],\"6+7EwD\":[\"Serve objects as index when file name is:\"],\"6+OdGi\":[\"Protocol\"],\"6/xipy\":[\"Container Format\"],\"644xgx\":[\"Protected\"],\"66YUKF\":[\"Failed to Empty Bucket\"],\"6BDqha\":[\"Limits\"],\"6CDYXS\":[\"Static website serving\"],\"6E98zF\":[\"Stored as x-amz-meta-* headers. Keys are case-insensitive.\"],\"6EcekU\":[\"Target bucket\"],\"6GBt0m\":[\"Metadata\"],\"6H/Lg1\":[\"This is a public image. All users have access to it. Explicit sharing is not needed.\"],\"6KRclz\":[\"Folder Created\"],\"6OopEX\":[\"Container Emptied\"],\"6Rnrsz\":[\"Manage Access - \",[\"flavorName\"]],\"6X/9Di\":[\"\\\"\",[\"objectName\"],\"\\\" was successfully moved to \",[\"destination\"],\".\"],\"6YtxFj\":[\"Name\"],\"6fuDFZ\":[\"Empty All Completed with Errors\"],\"6jAi8c\":[\"Range\"],\"6luZQA\":[\"Object Moved\"],\"6oolxV\":[\"This extra spec keys already exist. Please use different keys.\"],\"6qzsuS\":[\"Write ACLs\"],\"6sxz+g\":[\"Port Name\"],\"6w+VnM\":[\"Container Created\"],\"6z9W13\":[\"Restart\"],\"71SiMe\":[\"Version \",[\"shortVersionId\"],\"... deleted successfully\"],\"76RKuS\":[\"ICMP Code\"],\"78+riR\":[\"You are not authorized to remove tenant access. Please log in again.\"],\"7AfIPZ\":[\"Floating Network\"],\"7BpykL\":[\"Failed to create extra specs. Please try again.\"],\"7L01XJ\":[\"Actions\"],\"7NC3vm\":[\"Subnet\"],\"7NSdfG\":[\"Emptying container \",[\"progressCurrent\"],\" of \",[\"progressTotal\"],\", please wait...\"],\"7Ocn0b\":[[\"count\",\"plural\",{\"one\":[\"#\",\" object\"],\"other\":[\"#\",\" objects\"]}]],\"7Q24LN\":[\"Policy\"],\"7SGcZS\":[\"Search objects...\"],\"7T1fHv\":[\"Failed to remove member \\\"\",[\"memberIdToRemove\"],\"\\\"\"],\"7UlHhT\":[\"Metadata \\\"\",[\"keyToDelete\"],\"\\\" has been deleted successfully.\"],\"7XQ3QJ\":[\"Denied referrer: \",[\"host\"]],\"7ZnTL8\":[\"Failed to update object: \",[\"mutationErrorMessage\"]],\"7a4DvD\":[\"No servers available.\"],\"7aaeOo\":[\"Version of \\\"\",[\"displayName\"],\"\\\" was permanently deleted.\"],\"7d1a0d\":[\"Public\"],\"7flw0l\":[\"Tenant access for \\\"\",[\"trimmedTenantId\"],\"\\\" has been added successfully.\"],\"7hLLUk\":[\"Folder \\\"\",[\"folderPath\"],\"\\\" was successfully created.\"],\"7huC4O\":[\"There are no Certificates available for this Certificate Authority.\"],\"7sMeHQ\":[\"Key\"],\"8/m18Q\":[\"This bucket cannot be deleted yet. Do the following to be able to delete the bucket:\"],\"868txY\":[\"Public Read\"],\"88kg0+\":[\"Created At\"],\"8AriEH\":[\"Image instance \\\"\",[\"imageName\"],\"\\\" has been created\"],\"8BjKi0\":[\"Last Modified:\"],\"8MSozy\":[\"The object can be restored from version history.\"],\"8Pcsi8\":[\"Enter a timestamp like \\\"YYYY-MM-DD HH:mm:ss\\\" to schedule automatic deletion.\"],\"8S2nDL\":[\"No PCAs found\"],\"8TSI9h\":[\"Deactivating this image will prevent it from being used to launch new instances. Existing instances will not be affected.\"],\"8Tg/JR\":[\"Custom\"],\"8Txagi\":[\"Copy Object:\"],\"8ZOb7O\":[[\"numberDeleted\"],\" object was permanently deleted.\"],\"8ZsakT\":[\"Password\"],\"8c3/77\":[\"Max meta name length\"],\"8erw15\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was already empty.\"],\"8jLXs3\":[\"Versioned writes\"],\"8s0tOH\":[\"You don't have permission to add tenant access to this flavor.\"],\"8t1+HU\":[\"Deactivated \",[\"successCount\"],\" image(s), but \",[\"failedCount\"],\" image(s) could not be deactivated.\"],\"8uPTwT\":[[\"filteredCount\",\"plural\",{\"one\":[[\"filteredCount\"],\" of \",[\"totalCount\"],\" container\"],\"other\":[[\"filteredCount\"],\" of \",[\"totalCount\"],\" containers\"]}]],\"8wdCNd\":[\"tcp, udp, icmp, or protocol number\"],\"8zAn1f\":[\"Failed to delete flavor. Please try again.\"],\"98Fs4G\":[\"Creating image...\"],\"9J93Xr\":[\"Container name cannot contain slashes\"],\"9SX0bO\":[\"The image \\\"\",[\"imageName\"],\"\\\" could not be updated: \"],\"9X8lAk\":[\"Allocate\"],\"9doWrf\":[\"Failed to add member\"],\"9dsDHD\":[\"The image \\\"\",[\"imageId\"],\"\\\" could not be re-activated: \",[\"message\"]],\"9iz2XW\":[\"Unable to Update Image\"],\"9kDPaB\":[\"Issue End-Entity Certificate\"],\"9njIiV\":[\"Failed to Activate Images\"],\"9rz81C\":[\"Device ID\"],\"9v5VLp\":[\"No custom properties defined\"],\"9vSW3U\":[\"Delete Recursively\"],\"9x6EkK\":[\"This is a public flavor. All tenants have access to it.\"],\"A7CVME\":[\"Select disk format first\"],\"AB4Tnl\":[\"Please select a file to upload\"],\"AGXLLY\":[\"Unable to Upload Image File\"],\"AJRhSM\":[\"Root Disk must be an integer ≥ 0.\"],\"AN0DBJ\":[\"Press Enter to add\"],\"ANOoeR\":[[\"totalItemCount\",\"plural\",{\"one\":[[\"totalItemCount\"],\" item\"],\"other\":[[\"totalItemCount\"],\" items\"]}]],\"ASJMIw\":[\"S3 bucket names must be 3-63 characters long and contain only lowercase letters, numbers, periods, and hyphens. They must start and end with a letter or number, and be globally unique within the cluster.\"],\"AX9Juz\":[\"ID must only contain alphanumeric characters, hyphens, underscores, and dots.\"],\"AXNSZ2\":[\"Confirm deletion of \",[\"displayName\"],\". The object will be marked as deleted but can be restored from version history.\"],\"AZyHwC\":[\"Must be a valid IPv4 or IPv6 address (for example: 172.24.4.228 or 2001:db8::1).\"],\"Ac6dy9\":[\"Type name\"],\"AdtLNV\":[\"Ensure ACL entries are valid — correct project IDs, user IDs, and formats are your responsibility. Invalid entries may silently grant or deny unintended access.\"],\"AeP3VC\":[\"Date:\"],\"AeXO77\":[\"Account\"],\"Af8YL/\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully copied to \",[\"destination\"],\".\"],\"Afh/Lb\":[\"Select destination folder\"],\"AirKNZ\":[\"Issue Self-Signed Certificate\"],\"AlbUVn\":[\"<0>Optimized Scalability: Built for businesses of all sizes, Aurora grows with you, supporting simple environments and intricate multi-cloud setups alike.\"],\"Alx2/L\":[\"Open in new tab\"],\"AuQtzx\":[\"Must be a non-negative integer\"],\"AxZkIr\":[\"Disk (GiB)\"],\"B2Czeb\":[\"Min. RAM\"],\"B2SpR8\":[\"Bucket name must not start with reserved prefix \\\"\",[\"prefix\"],\"\\\"\"],\"B2i9cQ\":[\"Objects to be deleted (\",[\"totalCount\"],\")\"],\"B3toQF\":[\"Objects\"],\"BCJPTn\":[\"Grant access to all users from that project.\"],\"BCXapL\":[\"Failed to load container properties: \",[\"errorMessage\"]],\"BGZ26c\":[\"Open \",[\"displayName\"]],\"BGsuZN\":[\"Key contains invalid characters (use only letters, digits, hyphens, underscores)\"],\"BJt+PJ\":[\"Failed to Delete Container\"],\"BMTd81\":[\"This action cannot be undone. The target project will lose access to this security group immediately.\"],\"BOQYRn\":[\"Loading Key Pairs...\"],\"BOoOLQ\":[\"All Buckets Emptied\"],\"BP4Fwj\":[\"Error Loading Objects: \",[\"errorMessage\"]],\"BSpWob\":[\"Could not download \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"BTsbBe\":[\"Bucket Name\"],\"BYH/2L\":[\"Unable to Deactivate Image\"],\"BgMp/T\":[\"Invalid format combination for selected disk format\"],\"Blsc/x\":[\"Delete Certificate Authority\"],\"BoIAP6\":[\"The ID of the network associated with the floating IP.\"],\"BoPocW\":[\"MD5 checksum\"],\"BrrIs8\":[\"Storage\"],\"CA8ZeT\":[\"Image \\\"\",[\"imageName\"],\"\\\" visibility updated to \",[\"visibility\"]],\"CBFSfX\":[\"Please fix the validation errors below.\"],\"CFMxC8\":[\"Images Deleted\"],\"CMVP7y\":[\"This action cannot be undone. The rule will be permanently deleted.\"],\"CfKRC1\":[\"Empty Bucket\"],\"CgZxr7\":[\"Min RAM (MB)\"],\"ChOuUj\":[\"Floating IP not found\"],\"Cj2Gtd\":[\"Size\"],\"ClGcRq\":[\"Containers\"],\"CongmL\":[\"Could not delete bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"CpZKLR\":[\"Version ID\"],\"CtiFDz\":[\"This will permanently delete all objects from \",[\"totalCount\"],\" selected \",[\"totalCount\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\". This action cannot be undone.\"],\"Cu6xuZ\":[\"This is a <0>dynamic large object (DLO) manifest. Metadata changes apply to the manifest only — segment objects are not affected.\"],\"CunRry\":[\"Invalid project ID format. Must be 32 hexadecimal characters (e.g., b90f9c4bc76140e18540b2cec1299e2a) or UUID format (e.g., 12345678-1234-1234-1234-123456789abc)\"],\"Cxgv2U\":[\"Min. Disk\"],\"D3IRXw\":[\"Detaching Floating IP...\"],\"D7qT9F\":[\"Why Choose Aurora?\"],\"D7yx6b\":[\"Version History:\"],\"D8ak4F\":[[\"totalItemCount\",\"plural\",{\"one\":[[\"filteredItemCount\"],\" of \",[\"totalItemCount\"],\" item\"],\"other\":[[\"filteredItemCount\"],\" of \",[\"totalItemCount\"],\" items\"]}]],\"DDRhQm\":[\"Your session has expired.\"],\"DHrCY6\":[\"Common name\"],\"DIZzgv\":[\"Failed to load versions\"],\"DJT9tB\":[\"Account quotas\"],\"DKkOPx\":[\"Extra Specs\"],\"DNVql8\":[\"Full lifecycle management of Floating IPs, including attachment, port association/disassociation, DNS settings, and deletion\"],\"DWBWmW\":[[\"totalCount\",\"plural\",{\"one\":[\"Empty Bucket\"],\"other\":[\"Empty Buckets\"]}]],\"DXRiUg\":[\"All objects in the folder will be permanently deleted.\"],\"DcMIiu\":[\"Could not update ACLs for container \\\"\",[\"containerName\"],\"\\\": \",[\"errorMessage\"]],\"Df0YHr\":[\"Update Security Group\"],\"Dh1qvV\":[\"You are about to delete \",[\"deletableCount\"],\" image(s). This action cannot be undone.\"],\"Dia2Ue\":[\"There are no RBAC policies for this security group\"],\"Do5/uH\":[\"The flavor or tenant could not be found. It may have already been removed.\"],\"Dqnh7K\":[\"Specific referrer: \",[\"host\"]],\"Dt5W9T\":[\"Remove RBAC Policy\"],\"DvB4XF\":[\"Drop your file here\"],\"E/QGRL\":[\"Disabled\"],\"E4QYe7\":[\"Suggested Images\"],\"E55MDj\":[\"Could not delete version of \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"E6nRW7\":[\"Copy URL\"],\"E7kdtm\":[\"Choose Certificate to Import\"],\"EF2EU9\":[\"Deleting...\"],\"EJqSbS\":[\"No versions to delete in bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"EPMHs9\":[\"You don't have permission to delete flavors in this project.\"],\"EQnVgi\":[\"Flavor service is not available for this project.\"],\"EdQY6l\":[\"None\"],\"EdxcAN\":[\"Access Control for Container:\"],\"Enpdmy\":[\"Type <0>remove to confirm:\"],\"EoKe5U\":[\"Domain\"],\"EpWoJ9\":[\"Loading Permissions...\"],\"Eq5PsT\":[\"Type \\\"detach\\\" to confirm\"],\"EqSPkP\":[\"Loading Flavors...\"],\"Erlvqg\":[\"Object name cannot have leading or trailing whitespace\"],\"ExLULX\":[\"Image Name\"],\"EztMB8\":[\"Failed to fetch flavors from server.\"],\"F02e8I\":[\"No custom metadata. Click \\\"Add Property\\\" to create one.\"],\"F6YIQe\":[\"Efficient bulk deletion\"],\"FAA/qW\":[\"Paste the code\"],\"FJO48W\":[\"Create S3 Credentials\"],\"FKL6Jv\":[\"e.g. .r:*,.rlistings\"],\"FOcBn3\":[\"Detach\"],\"FQBaXG\":[\"Activate\"],\"FRtmJJ\":[\"Storage container not found\"],\"FSbpS7\":[\"CPU\"],\"FgWsFY\":[\"Object <0>\\\"\",[\"displayName\"],\"\\\" will be permanently deleted. This cannot be undone.\"],\"FjONW3\":[\"Error Loading Flavor\"],\"FjPnAE\":[\"Error loading security group\"],\"Flugry\":[[\"progressPct\"],\"%\"],\"FwSyEp\":[\"The specified project does not exist or you don't have permission to share with it.\"],\"Fzrzfe\":[\"Folder name is required\"],\"G3pRO8\":[\"An object with this name already exists at the destination and will be overwritten.\"],\"G6AP+o\":[\"Shared:\"],\"GDx4dP\":[\"Manage your Certificate\"],\"GEgjm+\":[\"Loading Objects...\"],\"GPuCEo\":[\"Leave empty for all types\"],\"GSIPwA\":[\"Temporary URL\"],\"GZjazt\":[\"No policy found\"],\"GbKqnI\":[\"Activated \",[\"successCount\"],\" image(s), but \",[\"failedCount\"],\" image(s) could not be activated.\"],\"Gfx1qQ\":[\"Unable to Load Content\"],\"Ghp863\":[\"Type \\\"empty\\\" to confirm\"],\"GxkJXS\":[\"Uploading...\"],\"Gyd3No\":[\"No specific tenant access configured for this private flavor. Click \\\"Add Tenant Access\\\" to grant access.\"],\"H+a5j6\":[\"Release\"],\"H4Qwmp\":[\"No objects match your search. Try adjusting your search term.\"],\"H7u085\":[\"No projects have access to this image yet. Click \\\"Add Project Access\\\" to grant access.\"],\"HAcOOW\":[\"Your credentials are valid but you don't have permission to perform this operation. Please contact your administrator to grant you the necessary permissions.\"],\"HAkrpK\":[\"At Aurora, our mission is to provide a centralized platform that unifies cloud management. We aim to simplify the complexities of provisioning, configuring, and scaling resources across diverse cloud environments while enabling seamless growth for your business.\"],\"HBpi4q\":[\"Loading Images...\"],\"HDpkS/\":[\"Select destination folder within target bucket\"],\"HG0uMz\":[\"Back to Certificate Authorities\"],\"HM56Bx\":[\"Creating...\"],\"HMV+cw\":[\"Search rules...\"],\"HNlEFZ\":[\"delete\"],\"HQH8HM\":[\"Could not update \\\"\",[\"objectName\"],\"\\\": \",[\"errorMessage\"]],\"HVdrr1\":[\"ANY referrer\"],\"HfL/NM\":[\"Version Deleted\"],\"HiDAFk\":[\"Create Bucket\"],\"Hivb/4\":[\"Server is experiencing issues. Please try again later.\"],\"Hiw1Ha\":[\"No containers found\"],\"HlwgQN\":[\"Object \\\"\",[\"objectName\"],\"\\\" was permanently deleted.\"],\"HuA8iQ\":[\"Allocating Floating IP...\"],\"HxTYrE\":[\"The flavor could not be found. It may have been deleted.\"],\"HyyJ83\":[\"Access Type\"],\"HzKlpd\":[\"Failed to empty bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"I5kZVK\":[\"Remote Source\"],\"INUP6f\":[\"<0>Effortless Resource Provisioning: Quickly provision, configure, and deploy resources like servers, networks, and volumes with just a few clicks.\"],\"IOkHLC\":[\"Failed to copy object: \",[\"errorMessage\"]],\"IQSLN+\":[\"Error loading Certificate Authority\"],\"IQldU4\":[\"Bucket name must contain only lowercase letters, numbers, periods, and hyphens\"],\"ISxSs6\":[\"All buckets\"],\"IUwGEM\":[\"Save Changes\"],\"IWF68U\":[\"Storage Overview\"],\"IZ6Mh2\":[\"Enter your domain\"],\"IbWX61\":[\"Failed to delete bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"IbYr/u\":[\"Content type\"],\"Io2Dvq\":[\"Certificate Authority not found\"],\"Ioblgz\":[\"This action is permanent. All objects in the container will be deleted and this cannot be undone.\"],\"IwlPLb\":[\"Delete Bucket\"],\"IxsRaQ\":[\"Enable Versioning\"],\"J+Sc8C\":[\"Showing first \",[\"MAX_COMBO_OPTIONS\"],\" of \",[\"totalBuckets\"],\", refine your search to narrow results\"],\"J4DKSM\":[\"Container format is required\"],\"J6EOll\":[\"Move/Rename object:\"],\"J7+bZb\":[\"Folder Deleted\"],\"J9QcnV\":[\"Successfully activated \",[\"successCount\"],\" of \",[\"totalCount\"],\" image(s)\"],\"J9cmxx\":[\"Failed to update visibility to \",[\"newVisibility\"]],\"JB0bhm\":[\"Get Involved\"],\"JNGYAW\":[\"Container name is required\"],\"JPWqr2\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully emptied. \",[\"deletedCount\"],\" objects deleted.\"],\"JT+lLV\":[\"Delete Object\"],\"JT3I1g\":[\"Delete Flavor\"],\"JeRXll\":[\"This key is reserved and managed separately\"],\"JedhzP\":[\"Move/Rename Object:\"],\"JfWCsP\":[\"Partial Deactivation Success\"],\"Jh4rAZ\":[\"Error loading image\"],\"Jim5X9\":[\"Stateful\"],\"JoECY1\":[\"The extra spec data provided is invalid. Please check your input.\"],\"JpZn1L\":[\"Already deactivated (will be skipped)\"],\"JrmKyf\":[\"Failed: \",[\"errorDetails\"]],\"JtHgVz\":[\"Delete Images\"],\"JuOpPY\":[\"All objects in the selected containers will be permanently deleted. This cannot be undone.\"],\"K+e/0e\":[\"RAM (MiB)\"],\"K3bUTE\":[\"Minimum disk must be 0 or greater\"],\"K8Qnlj\":[\"Moving...\"],\"K9eC8x\":[\"This could be due to insufficient permissions or a temporary service issue. Please check your access rights or try refreshing the page.\"],\"KDw4GX\":[\"Try again\"],\"KJC+M7\":[\"Server error occurred while fetching flavor details. Please try again later.\"],\"KOpPMt\":[\"Total size quota\"],\"KSW/GC\":[\"There are no flavors available for this project with the current filters applied. Try adjusting your filter criteria or create a new flavor.\"],\"KhNDX4\":[\"Object Storage (Ceph)\"],\"Kl2hZ+\":[\"Delete Version\"],\"Km4AGG\":[\"Creating security group...\"],\"KoQP4F\":[\"Server error occurred while adding tenant access. Please try again later.\"],\"KsIM0b\":[\"Boot RAM\"],\"KsnZ3m\":[\"Folder \\\"\",[\"folderName\"],\"\\\" was successfully created.\"],\"KvQbFT\":[\"This action will permanently delete all objects from \",[\"bucketName\"],\". This action cannot be undone.\"],\"KzUd7m\":[\"new-folder-name\"],\"L9LFMT\":[\"Confirm deletion of \",[\"displayName\"],\". All objects inside this folder will be permanently deleted.\"],\"LASqRM\":[\"Object \\\"\",[\"displayName\"],\"\\\" was permanently deleted.\"],\"LI70tz\":[\"Error loading Certificate\"],\"LI8Z2I\":[\"Download \",[\"rowDisplayName\"]],\"LK0pQN\":[\"Disk format is required\"],\"LMdsuJ\":[\"Port (from)\"],\"LQQCas\":[\"Folder \\\"\",[\"folderName\"],\"\\\" and \",[\"deletedCount\"],\" object was permanently deleted.\"],\"LT2Vv7\":[\"Bucket policy was successfully deleted from \\\"\",[\"bucketName\"],\"\\\".\"],\"LVU2Dv\":[\"Add Policy\"],\"La2LYh\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully copied to \",[\"destination\"],\" (existing object was replaced).\"],\"Llcakz\":[\"Updated At\"],\"LqMb+g\":[\"To confirm this action, type the word <0>\\\"release\\\" in the field below.\"],\"LtI9AS\":[\"Owner\"],\"Lylr9Z\":[\"Object Copied\"],\"M3bysB\":[\"Bucket Created\"],\"M470oJ\":[\"The flavor could not be found or has no extra specs.\"],\"M5Epeo\":[\"Edit Image Details\"],\"M5RhXF\":[\"Removing...\"],\"M5rEN5\":[\"Session Expired\"],\"M8er/5\":[\"Name:\"],\"MEIAzV\":[\"Unnamed\"],\"MI6aae\":[\"This action will create a self-signed CA certificate.\"],\"MILoeL\":[\"Services\"],\"MJLqeY\":[\"Failed to check bucket contents: \",[\"errorMessage\"]],\"MJtNLd\":[\"Images to delete:\"],\"MOug+V\":[\"Enter a tag and press Enter or click Add\"],\"MRB7nI\":[\"Direction\"],\"MXoA/6\":[\"Upload Object\"],\"MXw7Fr\":[\"Server Name\"],\"MZGbkp\":[\"VCPUs\"],\"MbKJNP\":[\"You don't have permission to access flavor access information for this flavor.\"],\"MdfAJn\":[\"You do not have permission to view security groups\"],\"MgZyuJ\":[\"You are about to activate <0>\",[\"deactivatedCount\"],\" image(s). Activated images will be available for launching new instances.\"],\"Mj5iQ0\":[\"YYYY-MM-DD HH:mm:ss\"],\"MmtQVF\":[\"Invalid value for public flavor setting.\"],\"Mt6sRo\":[\"You are not authorized to access flavor access information. Please log in again.\"],\"MtzSbv\":[\"Object name is required\"],\"N2S1rs\":[\"Empty\"],\"N40H+G\":[\"All\"],\"N5I2RJ\":[\"Type \\\"release\\\" to confirm\"],\"N5vGcw\":[\"Enter your credentials to access your account\"],\"NG+FZC\":[\"Issuing End-Entity Certificate...\"],\"NH2fsP\":[\"Already deactivated (will be skipped):\"],\"NNpgo3\":[\"Bucket name\"],\"NOdFZR\":[\"Generating...\"],\"NQU1Nn\":[\"Copy container name\"],\"NRMm0E\":[\"This tenant already has access to the flavor.\"],\"NRVSdy\":[\"Member ID\"],\"NW1XEL\":[\"Emptying bucket \",[\"progressCurrent\"],\" of \",[\"progressTotal\"],\", please wait...\"],\"NW4PIb\":[\"Could not create folder \\\"\",[\"folderName\"],\"\\\": \",[\"errorMessage\"]],\"NZJhro\":[\"Object name cannot contain slashes\"],\"NZVIMV\":[\"Certificate \",[\"subjectCommonName\"]],\"Nc7QKU\":[\"Fixed IP Address\"],\"Ncv07y\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully restored.\"],\"NeUjqc\":[\"Enable file listing\"],\"Ni6RvO\":[\"Versioning Suspended\"],\"NixRmA\":[\"Min Disk (GB)\"],\"NlcF/v\":[\"No flavor selected for deletion.\"],\"NopYGU\":[\"Disk Format\"],\"Np28ib\":[\"or drag and drop\"],\"Nu4oKW\":[\"Description\"],\"Nvfd2b\":[\"Versioning is enabled\"],\"NwXhO7\":[\"Successfully deleted \",[\"deletedCount\"],\" version from bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"O80bQY\":[\"Loading object properties...\"],\"O8tK4v\":[\"Add rule\"],\"ONWvwQ\":[\"Upload\"],\"OR475H\":[\"Network\"],\"OSlLnz\":[\"Image Visibility\"],\"OYHzN1\":[\"Tags\"],\"OZImTR\":[\"Container listing limit\"],\"OaHwiV\":[\"Folders cannot be bulk-deleted. Use the row menu to delete a folder.\"],\"OaSktR\":[\"Device Owner\"],\"Oc8Aqv\":[\"Preview and Edit metadata\"],\"OlmKCg\":[\"A flavor with this ID or name already exists. Please use different values.\"],\"On9AgT\":[\"Delete Bucket Policy\"],\"OvEjsP\":[\"Copying...\"],\"Ovofy+\":[\"Release Floating IP \",[\"floating_ip_address\"]],\"OxDN2m\":[\"Failed to create flavor. Please try again.\"],\"OxaeYj\":[\"We are building Aurora Dashboard to serve you better. Your feedback is invaluable in shaping a tool that meets the unique needs of businesses like yours. Stay connected and join us as we redefine cloud management.\"],\"Oxl1UN\":[\"If there is no index file, the URL displays a list of objects in the container.\"],\"P2tWBZ\":[[\"selectedCount\",\"plural\",{\"one\":[\"Empty Bucket\"],\"other\":[\"Empty Buckets\"]}]],\"PAKSdy\":[\"Enter a floating IP or leave blank to auto-assign one\"],\"PDXQxz\":[[\"certificateIdValue\"],\" Certificate Details\"],\"PEGvy+\":[\"Minimum RAM must be 0 or greater\"],\"PHt+EV\":[\"Type <0>delete to confirm:\"],\"PIbPRX\":[\"RX/TX Factor must be an integer ≥ 1.\"],\"PLwzWR\":[\"All containers\"],\"PYQUjU\":[\"Failed to load metadata configuration.\"],\"PZnUbs\":[\"Please log in again to continue.\"],\"PgNNGl\":[\"More Actions\"],\"PiH3UR\":[\"Copied!\"],\"PiyQJ/\":[\"No flavors found\"],\"PkfPsB\":[\"Enter the ID of the project you want to share this security group with. You can find project IDs in the account/project switcher or in the Identity service.\"],\"Pkw7J9\":[\"This folder is empty.\"],\"PsEGri\":[\"Ubuntu 22.04 LTS\"],\"PtjzS+\":[\"Associates on the selected port. If the port has multiple IPs, select the desired fixed IP address.\"],\"PzgYM9\":[\"Checksum\"],\"Q1W//7\":[\"No services available for this project.\"],\"Q2xmVl\":[\"Symlinks\"],\"Q9f2QF\":[[\"numberDeleted\"],\" objects were deleted successfully, but some deletions failed.\"],\"QAUa4B\":[\"Enter a single port, or define a range by also filling \\\"Port (to)\\\". \\\"Port (to)\\\" is optional.\"],\"QAoi3Q\":[\"Policy Deleted\"],\"QDUXIq\":[\"Are you sure you want to delete the policy for bucket <0>\",[\"bucketName\"],\"?\"],\"QEtDlS\":[\"Copying object...\"],\"QNHur0\":[\"Failed to load container ACLs: \",[\"errorMessage\"]],\"QQ8wUG\":[\"This action cannot be undone. The flavor will be permanently deleted.\"],\"QQjQRf\":[\"No Temp URL key configured. A temporary URL key must be set at the account or container level before temporary URLs can be generated. Contact your administrator to configure X-Account-Meta-Temp-URL-Key or X-Container-Meta-Temp-URL-Key.\"],\"QRlXaL\":[\"Bucket name must not end with reserved suffix \\\"\",[\"suffix\"],\"\\\"\"],\"QV1ZPO\":[\"Key is required\"],\"QWdKwH\":[\"Move\"],\"QYiqYb\":[\"Failed to update access status\"],\"Qb+14I\":[\"This action cannot be undone. The security group will be permanently deleted.\"],\"QcRQm4\":[\"Failed to delete version: \",[\"errorMessage\"]],\"QceOn7\":[\"Bucket Policy\"],\"QdGvPV\":[\"Size:\"],\"QetsXP\":[\"Upload failed: \",[\"uploadError\"]],\"Qg4EG6\":[\"Unable to connect to the compute service. Please check your connection and try again.\"],\"QpbWpf\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully emptied. \",[\"deletedCount\"],\" object deleted.\"],\"QuJSSl\":[\"Failed to create the flavor. Please try again.\"],\"QvqBQa\":[\"Target container\"],\"Qx7DM7\":[\"Capabilities\"],\"QxBGbh\":[\"Protected (will be skipped):\"],\"QytzQr\":[\"Type \\\"delete\\\" to confirm\"],\"R3U2a2\":[\"Policy JSON\"],\"R5zmZq\":[\"IP Restricted\"],\"R6kcsL\":[\"Must be a valid PQDN or FQDN (alphanumeric and hyphens only, cannot start or end with hyphen).\"],\"R6u5CR\":[\"Failed to activate \",[\"failedCount\"],\" of \",[\"totalCount\"],\" image(s). Some images may already be active or in an invalid state.\"],\"R8jkjc\":[\"Confirm deletion of \",[\"displayName\"],\". This action cannot be undone.\"],\"RByeNR\":[\"Your session expired. Please login again.\"],\"RCr0yv\":[\"Failed to load flavor details. Please try again.\"],\"RFDYCD\":[\"Minimum disk size required to boot this image\"],\"RGhYAo\":[\"RAM\"],\"RGrgxg\":[\"Could not delete container \\\"\",[\"containerName\"],\"\\\": \",[\"errorMessage\"]],\"RGwfoL\":[\"Max meta count\"],\"RHm1CB\":[\"Versioning was successfully suspended for bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"RNBvdl\":[\"Max SLO segments\"],\"RQuGRj\":[\"Change the name, destination container, or folder to move this object.\"],\"RS0o7b\":[\"State\"],\"RSFkXF\":[\"Activate Image\"],\"RSMPjT\":[\"You are currently on the dashboard route.\"],\"RSg/pq\":[\"Failed to Delete Object\"],\"RTQFAw\":[\"You are not authorized to create extra specs. Please log in again.\"],\"RWQ6BN\":[\"Enter Common name (e.g., demo-ca.test.sci)\"],\"RYhwcU\":[\"Leaving the JSON field empty will remove the policy from the bucket.\"],\"Rih53k\":[\"Max container name length\"],\"Rlp5zj\":[\"Create Flavor\"],\"Rsh494\":[\"Deleting the policy will remove all access restrictions defined by it. This action cannot be undone.\"],\"S0kLOH\":[\"ID\"],\"S1iTXO\":[\"Image instance \\\"\",[\"imageName\"],\"\\\" has been deleted\"],\"S3olSf\":[\"No extra specs found. Click \\\"Add Metadata\\\" to create one.\"],\"S5CUKP\":[\"Member ID (project UUID) is required.\"],\"S63NbU\":[\"The image \\\"\",[\"imageId\"],\"\\\" could not be deactivated: \",[\"message\"]],\"S8/j2h\":[\"Failed to Empty Container\"],\"SBGiGm\":[\"Read ACLs\"],\"SCY5an\":[\"Failed to Move Object\"],\"SFo0kK\":[\"All Images\"],\"SIfYq6\":[\"Edit Metadata\"],\"SLEH7X\":[\"Enter DNS name\"],\"STc+7E\":[\"Max containers per extraction\"],\"SU0uxT\":[\"Upload object to:\"],\"SUSS9i\":[\"Container name\"],\"SVLToM\":[\"Type \\\"remove\\\" to confirm\"],\"SZw9tS\":[\"View Details\"],\"Sb/VT5\":[\"Container \\\"\",[\"containerName\"],\"\\\" was successfully emptied. \",[\"deletedCount\"],\" objects deleted.\"],\"Sf3Gvg\":[\"Failed to load PCAs\"],\"SfW/3r\":[\"There are no groups\"],\"Sgz1vJ\":[\"Member \\\"\",[\"trimmedMemberId\"],\"\\\" has been added successfully.\"],\"Smk7M2\":[\"Error loading floating IP\"],\"SuX2Ca\":[\"Basic Info\"],\"Sv3i+l\":[\"Version Restored\"],\"T/UxKm\":[\"<0>Edit metadata: <1>\",[\"displayName\"],\"\"],\"T3+VKR\":[\"This action will permanently delete all versions and delete markers. This will enable you to delete the bucket. This action cannot be undone.\"],\"T6Gm5y\":[\"Select an external network\"],\"T7mgdd\":[\"Successfully deleted \",[\"successCount\"],\" of \",[\"totalCount\"],\" image(s)\"],\"T8N6oi\":[\"Property Key\"],\"T9Mtpi\":[\"Tenant ID\"],\"T9o/az\":[\"Loading Certificates issued by Certificate Authority...\"],\"TAaMxB\":[\"Failed to restore version: \",[\"errorMessage\"]],\"TM93nK\":[\"Delete Security Group Rule\"],\"TPMaxo\":[\"Type “release” to confirm\"],\"TQn3hH\":[\"Failed to create image. Please try again.\"],\"TSclU4\":[\"property-key\"],\"TTX3nV\":[\"Could not move \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"TZJiVf\":[\"Container \\\"\",[\"containerName\"],\"\\\" was successfully emptied. \",[\"deletedCount\"],\" object deleted.\"],\"TfC9O+\":[\"Last modified (UTC)\"],\"TfdeUd\":[\"Failed to delete the extra spec. Please try again.\"],\"TipzDp\":[\"Search containers...\"],\"TpGxnq\":[\"Enter member ID\"],\"Tx4Ym+\":[\"Enter a valid PQDN or FQDN (max 63 characters) to associate with the floating IP. A and PTR records are created automatically.\"],\"TyODHt\":[\"Save Metadata\"],\"U/oahm\":[\"URL Copied\"],\"U0sPCo\":[\"Search flavors...\"],\"U4fmHG\":[\"The text must match “detach” in lowercase.\"],\"U6L+P/\":[\"Inactivity Timeout\"],\"U9q4M7\":[\"Back to Security Groups\"],\"UB+Q8v\":[\"Loading Certificate Details...\"],\"UBv8UK\":[\"Delete Permanently\"],\"UGhVPl\":[\"Object Type\"],\"UJmAAK\":[\"Subject\"],\"UK2mpr\":[\"Generating temporary URL...\"],\"UKwOYH\":[\"Image File\"],\"UO3hJ2\":[\"Temporary URLs\"],\"UOtFRg\":[\"Define permissions for this bucket. You may use one of the predefined templates.\"],\"UQ7Wyv\":[\"Manage Access for Image - \",[\"imageName\"]],\"URmyfc\":[\"Details\"],\"USiuNX\":[\"Container quotas\"],\"UVFHGY\":[\"e.g. PROJECT_ID:USER_ID\"],\"UYSopm\":[\"Minimum RAM (MB)\"],\"UaP7Th\":[\"Failed to Create Bucket\"],\"UbRKMZ\":[\"Pending\"],\"UbWeJA\":[\"Duration/validity\"],\"UdcGJu\":[\"Activate Images\"],\"Uj+n/2\":[\"Failed to Delete Folder\"],\"UkVkoq\":[\"Leave empty for all codes\"],\"UmQ3/m\":[\"Deactivate Selected\"],\"Uwo8Xw\":[\"This image was shared with you by <0>\",[\"ownerProject\"],\" on \",[\"sharedAt\"],\".\"],\"Ux/pNd\":[[\"totalCount\",\"plural\",{\"one\":[[\"totalCount\"],\" bucket\"],\"other\":[[\"totalCount\"],\" buckets\"]}]],\"UztfYZ\":[\"Select port to associate\"],\"V/8B9A\":[\"I confirm that all existing versions will also be deleted\"],\"V/SINY\":[\"Update object\"],\"V1TzeS\":[\"Container \\\"\",[\"containerName\"],\"\\\" was successfully deleted.\"],\"V66Jih\":[\"Access Status\"],\"V6AQa5\":[\"Versions Deleted\"],\"V7fN5X\":[\"Copy object:\"],\"V8/eES\":[\"Bucket name must not contain consecutive periods\"],\"V804LY\":[\"Updating security group...\"],\"VCM3KS\":[\"Add Project Access\"],\"VG2a+x\":[\"Bucket name must start and end with a letter or number\"],\"VKCkZH\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully created.\"],\"VKmlZ+\":[\"Containers to be emptied (\",[\"totalCount\"],\")\"],\"VLI9eO\":[\"Loading Floating IP Details...\"],\"VMh1t1\":[\"The text must match “delete” in lowercase.\"],\"VMoZmg\":[\"Delete Policy\"],\"VV1fdg\":[\"Any user has read access to objects. No token is required in the request.\"],\"VaA9mu\":[\"24 hours\"],\"VakxP/\":[\"Failed to Upload Object\"],\"VcWhM0\":[\"Showing \",[\"filteredCount\"],\" of \",[\"totalCount\"],\" projects\"],\"VeDAv2\":[\"Search buckets...\"],\"Vg0k6h\":[\"Showing \",[\"filteredCount\"],\" of \",[\"totalCount\"],\" \",[\"itemName\"]],\"Vh/Uj5\":[\"Target path\"],\"Vj8XFg\":[\"Failed to Create Container\"],\"Vl4XTj\":[\"Folder name cannot contain slashes\"],\"Vmojta\":[\"Access status updated to \\\"\",[\"newStatus\"],\"\\\".\"],\"VoxR3s\":[\"Object was copied but could not be deleted from the source: \",[\"deleteErrorMessage\"]],\"Vz+7ZA\":[\"Could not create container \\\"\",[\"containerName\"],\"\\\": \",[\"errorMessage\"]],\"Vzlopx\":[\"Delete container:\"],\"W1ZvXE\":[\"Failed to Delete Versions\"],\"W5A0Ly\":[\"An unexpected error occurred.\"],\"W5FkH9\":[\"Enter container name\"],\"W8Rb/w\":[\"Bucket name must not be formatted as an IP address\"],\"W9PZE0\":[\"Objects Deleted\"],\"W9kfjU\":[\"QoS Policy ID\"],\"WCKEqI\":[\"This is a <0>static large object (SLO) manifest. Metadata changes apply to the manifest only — segment objects are not affected.\"],\"WCLyHI\":[\"No Floating IPs found\"],\"WErCZy\":[\"Minimum RAM required to boot this image\"],\"WIJz7N\":[\"Checking if object exists...\"],\"WM+Nm7\":[\"Keep multiple versions of objects. Cannot be fully disabled once enabled, only suspended.\"],\"WRZ3Mt\":[\"Loading container properties...\"],\"WV/4x1\":[\"Loading buckets...\"],\"WYiUDa\":[\"Loading Containers...\"],\"Wbg1jv\":[\"Copy \",[\"text\"],\" to clipboard\"],\"Wca9WC\":[\"Failed to load security groups\"],\"WdmJIX\":[\"Loading preview...\"],\"WefafP\":[\"This container appears empty — the object count may not have synced yet due to a recent operation.\"],\"WidMsn\":[\"Create Certificate Authority\"],\"WlpcJv\":[\"DNS Domain\"],\"WoSkGY\":[\"Remote IP\"],\"WxpQ1y\":[\"Failed to delete versions from bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"WyKwnD\":[\"Store old object versions\"],\"WzVwU0\":[\"Target Project ID\"],\"WzsMfv\":[\"Start typing to search for a bucket\"],\"X2OnDx\":[\"Ephemeral Disk (GiB)\"],\"X70LXS\":[[\"numberDeleted\"],\" objects were permanently deleted.\"],\"XLk16/\":[\"Together, we can unlock the true potential of your cloud infrastructure.\"],\"XXRutf\":[\"Folder Name\"],\"XXjbEV\":[\"For <0>dynamic and <1>static large objects only the manifests are deleted — the related segments are not deleted.\"],\"XYZLy9\":[\"Key contains invalid characters\"],\"XhfBNl\":[[\"totalCount\",\"plural\",{\"one\":[\"Delete \",\"#\",\" Object\"],\"other\":[\"Delete \",\"#\",\" Objects\"]}]],\"XicAqm\":[\"Failed to load policy\"],\"XjGaah\":[\"Could not delete bucket policy from \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"XvjC4F\":[\"Saving...\"],\"XwxJJB\":[\"Container \\\"\",[\"containerName\"],\"\\\" was successfully created.\"],\"XxjLdW\":[[\"emptiedCount\",\"plural\",{\"one\":[\"#\",\" container was already empty.\"],\"other\":[\"#\",\" containers were already empty.\"]}]],\"Y+2SDm\":[\"Delete Security Group \\\"\",[\"securityGroupName\"],\"\\\"\"],\"Y1YKad\":[\"Edit Details\"],\"Y8M9Uc\":[\"The container will be deleted. This action is permanent and cannot be undone.\"],\"YIix5Y\":[\"Search...\"],\"YNgcgc\":[\"Loading Flavor Details...\"],\"YRexkb\":[\"Object Updated\"],\"YUU0QW\":[\"Flavor ID is required and cannot be empty.\"],\"YVLcyI\":[\"Successfully emptied \",[\"emptiedCount\"],\" \",[\"emptiedCount\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\", deleting \",[\"totalDeleted\"],\" \",[\"totalDeleted\",\"plural\",{\"one\":[\"object\"],\"other\":[\"objects\"]}],\".\"],\"YZmsaT\":[\"Partial Activation Success\"],\"YiMCKk\":[\"Show ACLs Preview\"],\"Yin3uB\":[\"Releasing Floating IP...\"],\"YjAOtb\":[\"Create Security Group\"],\"YrAy/S\":[\"You don't have permission to delete extra specs for this flavor.\"],\"YsOJlj\":[\"Server error occurred while fetching flavor access information. Please try again later.\"],\"YsrbQh\":[\"Owner Project ID\"],\"YuC9dj\":[\"Associate\"],\"YuGQWb\":[\"Rule Type\"],\"YwkOoE\":[\"Select a template...\"],\"YzUoh9\":[\"To confirm type <0>delete in the field below.\"],\"Z/eWPC\":[\"The object will be copied to this path. Navigate folders above to change the destination.\"],\"Z0v/kp\":[[\"percent\"],\"%\"],\"Z2fZGD\":[\"No project selected\"],\"Z30x/C\":[\"Current location:\"],\"Z3FXyt\":[\"Loading...\"],\"Z42tfY\":[\"Folders in object storage are virtual — they are created as zero-byte placeholder objects with a trailing slash. The folder will appear once created.\"],\"Z5r9vC\":[\"Partial Delete Success\"],\"Z8lGw6\":[\"Share\"],\"ZAx+d1\":[\"Max meta overall size\"],\"ZAy0zp\":[\"Successfully deactivated \",[\"successCount\"],\" of \",[\"totalCount\"],\" image(s)\"],\"ZKb0D4\":[\"Cannot move to the same location. Please select a different bucket, folder, or change the name.\"],\"ZUmOzn\":[\"Server returned unexpected data format for flavor details.\"],\"ZcWMT1\":[\"Image instance \\\"\",[\"imageName\"],\"\\\" has been deactivated\"],\"ZggJCp\":[\"Showing \",[\"0\"],\" of \",[\"totalRulesCount\"],\" rules\"],\"Zgp2Sm\":[\"No projects available.\"],\"ZhVSpK\":[\"Failed to remove tenant access from flavor. Please try again.\"],\"ZkoPD4\":[\"Size: \",[\"policySize\"],\" / \",[\"MAX_POLICY_SIZE\"],\" bytes\"],\"ZkxxiR\":[\"Unknown domain\"],\"Zq6Y5u\":[\"DNS name must be at most 63 characters.\"],\"Zshv0H\":[\"Buckets to empty:\"],\"ZvIpwi\":[\"Select a security group...\"],\"Zw49f9\":[\"folder-name\"],\"Zw8Q49\":[\"Security group not found\"],\"a/nTb8\":[\"Create Image\"],\"a12lSo\":[\"Port (to)\"],\"a13wDR\":[\"Type to search containers...\"],\"a3LDKx\":[\"Security\"],\"a4A2uB\":[\"Account listing limit\"],\"a4N/Bg\":[\"Load More\"],\"a7C4YS\":[\"Container Updated\"],\"aEAOxI\":[\"There are \",[\"bucketsCount\"],\" buckets, start typing to search\"],\"aG9OiI\":[\"Sharing Details\"],\"aI8Tgp\":[\"Owning Project ID\"],\"aL1w5Z\":[\"Used\"],\"aSsVD3\":[\"Public read access is not enabled. Before configuring static website serving, go to <0>Manage Access and enable public read access.\"],\"aTqCTq\":[\"Image file is required\"],\"aV6KPH\":[\"Prevent accidental deletion\"],\"aZGVW7\":[\"No versions found for this object.\"],\"an5hVd\":[\"Images\"],\"ao/ZJi\":[\"Deleting folder and all its contents...\"],\"aqagJH\":[\"Unable to Update Image Visibility\"],\"arel2K\":[\"No objects found\"],\"azXlY+\":[\"Access Status:\"],\"b0uU1G\":[\"Store old object versions in container:\"],\"b2BLBa\":[\"Add Security Group Rule\"],\"b5aNMO\":[\"The text must match \\\"delete\\\"\"],\"b78j86\":[\"Certificate \",[\"certificateIdValue\"]],\"b95YH9\":[\"Bucket Emptied\"],\"bHUarC\":[\"Bucket Deleted\"],\"bISG26\":[\"Failed to fetch flavor access information. Please try again.\"],\"bM1O3m\":[\"Image Instance\"],\"bQBMTH\":[\"This is a <0>static large object. By default, all associated segment objects will also be permanently deleted.\"],\"bRgFkJ\":[\"Failed to upload file \\\"\",[\"fileName\"],\"\\\": \"],\"bYRFNi\":[\"Failed to Delete Objects\"],\"bc67JN\":[\"Custom Properties / Metadata\"],\"bmQLn5\":[\"Add Rule\"],\"bnql/K\":[\"Back to Images\"],\"boJ+Y1\":[\"Create Folder\"],\"boJlGf\":[\"Page Not Found\"],\"boefwq\":[\"Could not create bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"bpme7e\":[\"Flavor Not Found\"],\"bwRvnp\":[\"Action\"],\"bwhBhT\":[\"Security Group\"],\"byKna+\":[\"An unexpected error occurred. Please try again.\"],\"bzMKg7\":[\"Accepted\"],\"bzSI52\":[\"Discard\"],\"c+fUtV\":[\"Start typing to search for a container\"],\"c+xCSz\":[\"True\"],\"c1OE1x\":[\"CA ID\"],\"c1uL4p\":[\"The image \\\"\",[\"imageId\"],\"\\\" could not be deleted: \",[\"message\"]],\"c5i+X0\":[\"Loading Buckets...\"],\"c6b6fz\":[\"Delete Selected\"],\"c9Ss4N\":[\"Policy document exceeds maximum size of 20KB\"],\"cBfLPr\":[\"Failed to Delete Policy\"],\"cCfxH1\":[\"Downloading...\"],\"cJDQIO\":[\"Root Disk\"],\"cPKL6O\":[\"You don't have permission to create flavors in this project.\"],\"cUKFby\":[\"Lifecycle action\"],\"cWbW6w\":[\"Manage Access\"],\"cXuXkb\":[\"User \",[\"userId\"],\" from project \",[\"projectId\"]],\"chL5IG\":[\"Community\"],\"cj17eo\":[\"Image instance \\\"\",[\"imageName\"],\"\\\" has been activated\"],\"cjEOmc\":[\"Share this security group with another project. The target project will be able to view and use this security group, but will not be able to modify or delete it.\"],\"cnGeoo\":[\"Delete\"],\"cpw++p\":[\"Static large object support\"],\"cqQyPB\":[\"Folder name\"],\"ctc4XR\":[\"Delete certificate authority\"],\"d+F6q9\":[\"Created\"],\"d/I0J3\":[\"Activate Selected\"],\"d0pLfy\":[\"Failed to delete security group\"],\"dEHa3L\":[\"Type the bucket name to confirm\"],\"dEgA5A\":[\"Cancel\"],\"dFb5Nt\":[\"Id\"],\"dLFiER\":[\"Error Loading Containers: \",[\"errorMessage\"]],\"dOevLB\":[\"Expires in \",[\"selectedPresetLabel\"],\" — at \",[\"expiresAtFormatted\"]],\"dPj4yB\":[\"Login to Your Account\"],\"dPoCVe\":[\"Type “detach” to confirm\"],\"dTNzBI\":[\"Key must contain at least one alphanumeric character\"],\"dVdc7N\":[\"You are not authorized to delete extra specs. Please log in again.\"],\"dd2ndz\":[\"Entries in ACLs are comma-separated. Examples:\"],\"ddf7GN\":[\"Failed to load objects\"],\"diFNkW\":[\"Error loading component\"],\"dku8RF\":[\"Type <0>DELETE to confirm:\"],\"dxMaZH\":[\"Manage your Private Certificate Authority infrastructure\"],\"e0NrBM\":[\"Project\"],\"eChIh7\":[\"Flavor \\\"\",[\"flavorName\"],\"\\\" has been successfully created.\"],\"eGEHJE\":[\"DNS Name\"],\"eKC+EC\":[\"-\"],\"ePK91l\":[\"Edit\"],\"eYlnXt\":[\"No images found\"],\"eh/k36\":[\"Select a rule type...\"],\"ekCRTP\":[\"Rejected\"],\"eks7oA\":[\"Port ID\"],\"emkxJa\":[\"There are no buckets available with the current search criteria. Try adjusting your search term.\"],\"eslBIK\":[\"Failed to Enable Versioning\"],\"eu70nA\":[\"Expires at (UTC)\"],\"eyRsaH\":[\"Root\"],\"ezT9KW\":[\"Container syncing\"],\"f+Uq1E\":[\"New object name\"],\"f0cwjH\":[\"Object properties\"],\"fCPhho\":[\"One or more objects could not be deleted:\"],\"fIvd7X\":[\"Failed to Delete Images\"],\"fJpv9x\":[\"Failed to Deactivate Images\"],\"ffw//c\":[\"PCA\"],\"fj5byd\":[\"N/A\"],\"fnCEAB\":[\"Type “delete” to confirm\"],\"foy2JB\":[[\"displayName\"],\" was successfully restored\"],\"fxnDd7\":[\"Failed to generate temporary URL: \",[\"generalError\"]],\"fzfAAa\":[\"Ingress\"],\"g+Jead\":[\"IPv6\"],\"g1IxCo\":[\"RAM must be an integer ≥ 128 MB.\"],\"g3BSCe\":[\"Swap Disk must be an integer ≥ 0.\"],\"g3UF2V\":[\"Accept\"],\"g8Yxlg\":[\"Temporary URL for \\\"\",[\"objectName\"],\"\\\" was copied to clipboard.\"],\"gFKJBP\":[\"Folder name cannot have leading or trailing whitespace\"],\"gGdfWx\":[\"The compute service is currently unavailable for this project. Please try again later.\"],\"gMYsdZ\":[\"Set to \\\"Shared\\\"\"],\"gOAPiI\":[\"Successfully deleted \",[\"deletedCount\"],\" versions and delete markers from bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"gSpeIX\":[\"Preview and download aren't available for older versions yet\"],\"gU7JFm\":[\"Creating security group rule...\"],\"gYe+hC\":[\"Click to upload\"],\"gjop1H\":[\"Bucket name must be at least 3 characters\"],\"go0J2x\":[\"Failed to copy the temporary URL to the clipboard\"],\"go9U+C\":[\"To confirm, type <0>\\\"delete\\\" in the field below.\"],\"gy6L1u\":[\"Must be a valid common name (FQDN).\"],\"gztCjq\":[\"The tenant ID provided is invalid. Please check your input.\"],\"h/lrJz\":[\"Policy Templates\"],\"h3P8z+\":[\"Failed to delete the flavor. Please try again.\"],\"h47p9L\":[\"—\"],\"h6JDtI\":[\"Paste CSR code\"],\"h8h6oz\":[\"Images Deactivated\"],\"h99+4y\":[\"Allocate Floating IP\"],\"hH3kDo\":[\"Loading Image Details...\"],\"hHL/wm\":[\"Image instance \\\"\",[\"imageName\"],\"\\\" has been updated\"],\"hLp49h\":[\"Type <0>\",[\"deleteWord\"],\" to confirm:\"],\"hPz54a\":[\"Failed to Download\"],\"hQdfmR\":[\"Bucket \\\"\",[\"bucketName\"],\"\\\" was successfully deleted.\"],\"hQr1Cr\":[\"Deactivate Image\"],\"hXUWyd\":[\"Value is required\"],\"hYgDIe\":[\"Create\"],\"he3ygx\":[\"Copy\"],\"he4q+i\":[\"e.g., b90f9c4bc76140e18540b2cec1299e2a\"],\"hgpMHD\":[\"Total Size\"],\"hkjZ7P\":[\"Failed to update visibility for \\\"\",[\"imageName\"],\"\\\": \"],\"hrBow7\":[\"Network ID\"],\"hueclm\":[\"Folder <0>\\\"\",[\"folderDisplayName\"],\"\\\" and all objects within it will be permanently deleted. This cannot be undone.\"],\"hz9da7\":[\"Failed to load Certificates issued by Certificate Authority.\"],\"i0qMbr\":[\"Home\"],\"i41Xuw\":[\"Select a fixed IP address\"],\"i5MEDc\":[\"Failed to move object: \",[\"copyErrorMessage\"]],\"i6/ygf\":[\"A property with this key already exists\"],\"i7u3X3\":[\"Once enabled, versioning cannot be fully disabled, it can only be suspended. Existing versions will remain even after suspension.\"],\"i9I/nL\":[\"This action will permanently delete all objects from \",[\"bucketName\"],\". You may choose to also delete all versions and delete markers. This will enable you to delete the bucket. This action cannot be undone.\"],\"i9TIyi\":[\"Remote Security Group\"],\"i9qiyR\":[\"Expires in\"],\"iH8pgl\":[\"Back\"],\"ifQSTI\":[\"Enable versioning\"],\"igVDFt\":[\"Attach\"],\"ih2lfP\":[\"No buckets found\"],\"ihMuB8\":[\"Failed to Restore Version\"],\"iqUvrS\":[\"User C/D/I\"],\"is0Bhk\":[\"Bucket name must be 63 characters or fewer\"],\"izMhIO\":[\"User \",[\"userId\"],\" (any project)\"],\"j1Hej6\":[\"Share URL:\"],\"j9lCXl\":[\"Changes take effect immediately after saving.\"],\"jBIkmi\":[\"QCOW2, Raw, VMDK, VHD, VHDX, VDI, AMI, ARI, AKI, ISO, PLOOP\"],\"jIPNJG\":[\"Basic Information\"],\"jK6wqe\":[\"Folder \\\"\",[\"folderName\"],\"\\\" and \",[\"deletedCount\"],\" objects were permanently deleted.\"],\"jKopCP\":[\"Network & Routing\"],\"jMaofI\":[\"Could not enable versioning for bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"jMc/mo\":[\"Server error occurred while creating extra specs. Please try again later.\"],\"jNm/qL\":[\"This container is already empty.\"],\"jNzyQo\":[\"Object versioning\"],\"jPxavx\":[\"Failed to update security group\"],\"jS4B2+\":[\"Container name does not match\"],\"jSG7wx\":[\"Please enter a valid number of minutes greater than 0\"],\"jVjr9h\":[\"Enter a valid common name in FQDN format (e.g., demo-ca.test.sci).\"],\"jhU93c\":[\"The image \\\"\",[\"imageName\"],\"\\\" could not be created: \"],\"jq5wGQ\":[\"S3 Object Storage: Setup Required\"],\"js24f6\":[\"Delete folder:\"],\"jtnAf8\":[\"Protected images (cannot be deleted)\"],\"jyVMod\":[\"Restore Version\"],\"jyqLKs\":[\"This member already has access to this image.\"],\"k/zHK7\":[\"Creating Credentials...\"],\"k0vAWv\":[\"Object count quota\"],\"k5nYwm\":[\"vCPU\"],\"k7ENJG\":[\"Preview \",[\"rowDisplayName\"]],\"k99j0U\":[\"Cancel upload\"],\"kA2lMP\":[\"External Network\"],\"kGmM/p\":[\"You don't have permission to create extra specs for this flavor.\"],\"kIuDMT\":[\"Configure the ingress and egress rules that control which traffic is allowed for this security group.\"],\"kKK8AH\":[\"Remaining Quota:\"],\"kNeZrV\":[\"No Certificates issued by this Certificate Authority found\"],\"kQYfgO\":[\"One or more containers could not be emptied: \",[\"errorMessage\"]],\"kRiVnR\":[\"New uploads will overwrite the current version\"],\"kdcrma\":[\"Existing versions remain accessible\"],\"kiRrtv\":[\"<0>Please note: for <1>dynamic and <2>static large objects only the manifests will be deleted. The related segments will not be deleted.\"],\"kqJVBO\":[\"You don't have permission to share this security group.\"],\"kuYWaD\":[\"Reserved keys: web-index, web-listings, quota-count, quota-bytes\"],\"l+fhn1\":[\"I understand that enabling versioning is permanent\"],\"l75CjT\":[\"Yes\"],\"lAsm87\":[\"Protect this image from being deleted\"],\"lBVhQs\":[\"Something went wrong:\"],\"lN/Z9n\":[\"Security group name is required\"],\"lN3xvy\":[\"Delete Rule\"],\"lQ3EIe\":[\"Max deletes per request\"],\"lRRkwQ\":[\"Write ACLs — Preview\"],\"lRoPjj\":[\"ETag\"],\"lWTy+Y\":[\"Unable to Create Image\"],\"lWxDDh\":[\"Flavor Name\"],\"lZvIXd\":[\"Description must be at most 255 characters.\"],\"lhIa6x\":[\"Failed to load extra specs. Please try again.\"],\"lq/mBZ\":[\"Loading object info...\"],\"lw1412\":[\"You have been logged out due to inactivity.\"],\"lxentK\":[\"An unexpected error occurred\"],\"m16xKo\":[\"Add\"],\"m6X3ro\":[\"Group Name\"],\"mMHJ/+\":[\"Suspend Versioning\"],\"mQSO1Y\":[\"Port Forwarding\"],\"mSLePW\":[\"You don't have permission to access flavors for this project.\"],\"mSfwLL\":[\"Project ID\"],\"mTJdHL\":[\"All objects in the folder can be restored from version history.\"],\"mYnJeY\":[\"The text must match “release” in lowercase.\"],\"mbmb/h\":[\"Also delete all versions and all delete markers\"],\"miy5mb\":[\"PCA (Clavis)\"],\"mlxk2U\":[\"Search policies...\"],\"mqljvE\":[\"Copy metadata\"],\"mvz5Eo\":[\"URL for public access\"],\"mxPfpY\":[\"Create new folder here\"],\"mzI/c+\":[\"Download\"],\"n0ZttO\":[\"Root Disk (GiB)\"],\"n1ekoW\":[\"Sign In\"],\"n1gB0L\":[\"Edit Floating IP \",[\"floating_ip_address\"]],\"n22YIM\":[\"Edit Description\"],\"n2IuBI\":[\"A temporary URL grants time-limited read access to this object without requiring authentication. Anyone with the link can download it until it expires.\"],\"n3eQzA\":[\"This property is reserved and cannot be modified\"],\"n46oLW\":[\"Failed to remove member\"],\"n9jJG6\":[\"Remove member access\"],\"nETBrc\":[\"Egress\"],\"nLvo6K\":[\"RBAC Policy Details:\"],\"nNKXt7\":[\"Deleting this Certificate Authority is permanent, and all the associated certificates will no longer apply to entities.\"],\"nPI6Rk\":[\"Successfully deleted \",[\"deletedCount\"],\" versions from bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"nU1mHK\":[\"Versioning Enabled\"],\"nUuaq8\":[\"Failed to update container: \",[\"errorMessage\"]],\"nW/hX9\":[\"General Image Data\"],\"nWNviN\":[\"Deleting certificate authority...\"],\"nYab6d\":[\"\\\"\",[\"displayName\"],\"\\\" was successfully moved to \",[\"destination\"],\".\"],\"nZbdB+\":[\"Upload Cancelled\"],\"ndwp1n\":[\"Invalid JSON format\"],\"ne/GWZ\":[\"Inside a project, objects are stored in containers. Containers are where you define access permissions and quotas.\"],\"neiJm0\":[\"Flavors\"],\"ng+PCh\":[\"There are no PCAs available for this project.\"],\"nkpZyk\":[\"Container \\\"\",[\"containerName\"],\"\\\" was already empty.\"],\"nnxwBn\":[\"There are no rules for this security group\"],\"nrONSU\":[[\"0\"],\" rules\"],\"ntNlXu\":[\"Listing access\"],\"nzFJqC\":[\"Delete CA\"],\"o/VDOG\":[\"Unable to Delete Image\"],\"o6M6l0\":[\"Failed to create security group\"],\"oAMLhA\":[\"Full path:\"],\"oDkgME\":[\"You are not authorized to create flavors. Please log in again.\"],\"oEGiW3\":[\"Uploading... \",[\"progressPct\"],\"%\"],\"oFZY0k\":[\"Failed to Download Object\"],\"oJVmWq\":[\"Could not delete \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"ocUvR+\":[\"False\"],\"odVI9Y\":[\"Container Deleted\"],\"og1m+J\":[\"Loading Certificate Authority Details...\"],\"okXQSt\":[\"Subject information\"],\"olfSYj\":[\"Access Control Updated\"],\"p4nMut\":[\"Swap (MiB)\"],\"p7DzCB\":[\"Failed to Update Access Control\"],\"pD/2BQ\":[\"Successfully emptied \",[\"emptiedCount\"],\" of \",[\"totalBuckets\"],\" \",[\"totalBuckets\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\", deleting \",[\"totalDeleted\"],\" \",[\"totalDeleted\",\"plural\",{\"one\":[\"object\"],\"other\":[\"objects\"]}],\". \",[\"errorsLength\"],\" \",[\"errorsLength\",\"plural\",{\"one\":[\"bucket\"],\"other\":[\"buckets\"]}],\" failed.\"],\"pFg+7w\":[\"Updated:\"],\"pOPvlj\":[\"Already active (will be skipped)\"],\"pPr2iF\":[\"Could not delete versions from bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"pQB7Sy\":[\"Could not suspend versioning for bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"pU25+T\":[\"Upload of \\\"\",[\"objectName\"],\"\\\" was cancelled.\"],\"pYR76U\":[\"Importing Certificate...\"],\"pbzA+s\":[\"Optional description\"],\"pebLmQ\":[\"Remove access for \",[\"memberIdDisplay\"]],\"pkz+z2\":[\"Failed to save policy\"],\"plnnns\":[\"Deleted \",[\"successCount\"],\" image(s), but \",[\"failedCount\"],\" image(s) could not be deleted.\"],\"pmJY1C\":[\"Successfully deleted bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"poCbZw\":[\"Loading ACLs...\"],\"podzPY\":[\"Project id\"],\"pubQie\":[\"Enter value\"],\"q0Rla3\":[\"Add Tenant Access\"],\"q44uUq\":[\"Containers Partially Emptied\"],\"q6K46F\":[\"Key already exists\"],\"q88/6A\":[\"Failed to Create Folder\"],\"qAkkjP\":[\"Max object name length\"],\"qEDO1j\":[\"This is a <0>dynamic large object. Only the manifest will be deleted — its segment objects (stored under the manifest prefix) are <1>not automatically removed and must be deleted separately.\"],\"qJb6G2\":[\"Try Again\"],\"qQ1QBh\":[\"Hardware Specifications\"],\"qUlxA+\":[\"Folder \\\"\",[\"folderName\"],\"\\\" was permanently deleted.\"],\"qaAo9Y\":[\"Server error occurred while creating the flavor. Please try again later.\"],\"qh5W8q\":[\"Remove Policy\"],\"qhDo93\":[\"Common name is required.\"],\"qs+BrU\":[\"You don't have permission to remove tenant access from this flavor.\"],\"qtoOYG\":[\"No limit\"],\"quU9wK\":[\"Failed to deactivate \",[\"failedCount\"],\" of \",[\"totalCount\"],\" image(s). Some images may already be deactivated or in an invalid state.\"],\"qvF2D8\":[\"There are no images available for this project with the current filters applied. Try adjusting your filter criteria or create a new image.\"],\"qxxo7y\":[\"No policies match your search\"],\"qzIZOL\":[\"Invalid file format. Supported formats: \",[\"supportedFileFormats\"]],\"qzhUb9\":[\"Showing first \",[\"maxOptions\"],\" of \",[\"totalCount\"],\" — refine your search to narrow results\"],\"r5SQFW\":[\"Container name must be \",[\"maxContainerNameLength\"],\" characters or fewer\"],\"r9Aac8\":[\"Ephemeral Disk\"],\"rAtQcX\":[\"You can rename the object by changing the name here.\"],\"rD9yV1\":[\"Images to deactivate:\"],\"rG3WVm\":[\"Select\"],\"rIe0oV\":[\"Failed to add tenant access to flavor. Please try again.\"],\"rIi6x4\":[\"The flavor could not be found. It may have already been deleted.\"],\"rJe6vw\":[\"7 days\"],\"rPuPb+\":[\"Checking bucket contents...\"],\"rbuO5A\":[\"This security group is already shared with the specified project.\"],\"rcBt6T\":[\"Failed to create credential: \",[\"errorMessage\"]],\"rdUucN\":[\"Preview\"],\"rfemv7\":[\"Invalid credentials. Please check your domain, username, and password.\"],\"rhaNn7\":[\"Loading containers...\"],\"riR9oD\":[\"Note: for <0>static and dynamic large objects only the manifests are deleted — their segments outside this folder prefix are not affected.\"],\"rlgAtt\":[\"The object will be moved to this path. Navigate folders above to change the destination.\"],\"rp0Bd0\":[\"Compute\"],\"rp7Ili\":[\"Search security groups...\"],\"rrjuul\":[\"For more details, have a look at the <0>documentation.\"],\"rvXsSb\":[\"Tenant access for \\\"\",[\"tenantIdToRemove\"],\"\\\" has been removed successfully.\"],\"rwBVXS\":[\"Images to be deleted (\",[\"deletableCount\"],\")\"],\"rx4T2i\":[\"Issue Certificate\"],\"ryf/ee\":[\"Images Activated\"],\"ryxYVo\":[\"Images to be deactivated (\",[\"activeCount\"],\")\"],\"s/s1lz\":[\"Any user can perform a HEAD or GET operation on the container provided the user also has read access on objects. No token is required.\"],\"s2ubkU\":[\"Flavor ID\"],\"s4Vnq2\":[\"Emptying...\"],\"sCPiLi\":[\"Type DELETE to confirm\"],\"sNVNmf\":[\"MAC Address\"],\"sPFHpI\":[\"Disk\"],\"sSNyf3\":[\"Welcome to <0>Aurora Dashboard, your next-generation cloud management solution. We are dedicated to simplifying how you interact with and manage your cloud infrastructure. Designed with efficiency, scalability, and usability at its core, Aurora empowers you to streamline operations and unlock the full potential of your cloud resources.\"],\"sWBLli\":[\"Add Property\"],\"sXd+qS\":[\"Properties of \\\"\",[\"objectName\"],\"\\\" were successfully updated.\"],\"sYJvnu\":[\"Create New Folder\"],\"sa4CV6\":[\"All users from project \",[\"projectId\"]],\"sgra3S\":[\"You can re-enable versioning at any time\"],\"shKIZu\":[\"Images to be activated (\",[\"deactivatedCount\"],\")\"],\"sihD20\":[\"Loading images...\"],\"sjMCOP\":[\"Last Modified\"],\"sl2P3q\":[\"Object:\"],\"slWh5C\":[\"Associate Floating IP \",[\"floating_ip_address\"],\" with Port\"],\"sxbP3b\":[\"Object Count\"],\"t/YqKh\":[\"Remove\"],\"t/cZdQ\":[\"Full Path:\"],\"t0X9+8\":[\"Container Name\"],\"t1POAD\":[\"No custom metadata properties found. Click \\\"Add Property\\\" to create one.\"],\"t1fq6V\":[\"Server returned unexpected data format.\"],\"t7ewhH\":[\"Could not empty bucket \\\"\",[\"bucketName\"],\"\\\": \",[\"errorMessage\"]],\"t7ff15\":[\"valid token required: false\"],\"t95VRV\":[\"About Aurora Dashboard\"],\"tASa/P\":[\"Server error occurred while deleting the flavor. Please try again later.\"],\"tIc6vY\":[\"Could not copy \\\"\",[\"displayName\"],\"\\\": \",[\"errorMessage\"]],\"tIrNgH\":[\"Server error occurred while fetching extra specs. Please try again later.\"],\"tLerHy\":[\"Ephemeral Disk must be an integer ≥ 0.\"],\"tM5SEI\":[\"ACLs for container \\\"\",[\"containerName\"],\"\\\" were successfully updated.\"],\"tOkmLM\":[\"Failed to Copy Object\"],\"tV/Ozb\":[\"Port Range\"],\"tVSmFT\":[\"Loading more...\"],\"tX5yOZ\":[\"New Folder\"],\"tasfos\":[\"remove\"],\"tbwGSx\":[\"Minimum Disk (GB)\"],\"tejJLY\":[\"Associating Floating IP...\"],\"tfAKBU\":[\"Could not upload \\\"\",[\"objectName\"],\"\\\": \",[\"errorMessage\"]],\"tfDRzk\":[\"Save\"],\"tfxu04\":[\"Remove access for \",[\"tenantId\"]],\"thHAVL\":[\"Accepted Images\"],\"tiflqy\":[\"Unable to Re-activate Image\"],\"tkRT08\":[\"Metadata size exceeds the 2KB limit. Please remove or shorten some entries before saving.\"],\"tlfxPP\":[\"Could not copy \\\"\",[\"objectName\"],\"\\\": \",[\"errorMessage\"]],\"tmpGvt\":[\"production, linux\"],\"u+VWhB\":[\"Copied to clipboard!\"],\"u2xIeO\":[\"Failed to update ACLs: \",[\"errorMessage\"]],\"u5HztT\":[\"RX/TX Factor\"],\"u77/s4\":[\"Floating IPs\"],\"u7En0V\":[\"Add Metadata\"],\"uAI0yI\":[\"Delete object:\"],\"uAQUqI\":[\"Status\"],\"uLtFAr\":[\"Could not update container \\\"\",[\"containerName\"],\"\\\": \",[\"errorMessage\"]],\"uSdnuQ\":[\"VCPUs must be an integer ≥ 1.\"],\"ubUrot\":[\"Objects: \",[\"containerName\"]],\"ujK/QN\":[\"Loading objects...\"],\"uly9ET\":[\"Rule Details:\"],\"up0ZSW\":[\"Fingerprint\"],\"uuKb0T\":[\"Description must be less than 65535 characters.\"],\"v0hPHE\":[\"Show Details\"],\"v3djpU\":[\"Move/Rename\"],\"v9Dn8m\":[\"Aurora Dashboard is more than just a tool—it's your partner in navigating the cloud. Whether you're a small startup or a global enterprise, Aurora provides the flexibility, power, and simplicity you need to achieve your goals.\"],\"vBUQNE\":[\"The extra spec could not be found. It may have already been deleted.\"],\"vEkTR9\":[\"Quota\"],\"vGjmyl\":[\"Deleted\"],\"vH2C/2\":[\"Swap\"],\"vKDskJ\":[[\"selectedCount\",\"plural\",{\"one\":[\"Delete \",\"#\",\" Object\"],\"other\":[\"Delete \",\"#\",\" Objects\"]}]],\"vR4HmN\":[\"Loading Instances...\"],\"vTh35P\":[\"Create Container\"],\"vXmL4D\":[\"Drop your image file here\"],\"vZUKSz\":[\"Detach Floating IP \",[\"floating_ip_address\"]],\"vbajgL\":[\"Public Flavor\"],\"vcQSZh\":[\"This folder is empty — use New Folder to create one.\"],\"vi0pmB\":[\"Delete all versions and delete markers\"],\"vmRPFm\":[\"Share Security Group\"],\"vmYyLY\":[\"Remote IP Prefix\"],\"vp5vfW\":[\"1 hour\"],\"vpt8cE\":[\"Generate URL\"],\"vrPCbw\":[\"Image ID\"],\"w3bAcf\":[\"This action is permanent. The address will be removed from your project and returned to the public pool. This action cannot be undone.\"],\"w9+8d7\":[\"Remove tenant access\"],\"wEfZld\":[\"Create New Flavor\"],\"wFaT8w\":[\"Failed to Empty Containers\"],\"wH0MtN\":[\"Ensure that the Project ID and User ID you enter are correct. The system cannot validate these values — incorrect IDs may apply access to wrong projects and users.\"],\"wHhJRb\":[\"Loading versions...\"],\"wL3cK8\":[\"Latest\"],\"wMHvYH\":[\"Value\"],\"wPrtGF\":[\"Enter key\"],\"wTg+FY\":[\"Max file size\"],\"wa1Bcq\":[\"Enter tenant ID\"],\"wbqM4L\":[[\"customMinutes\"],\" minutes\"],\"wcUecy\":[\"You don't have permission to view extra specs for this flavor.\"],\"wdUvGT\":[\"Creating Certificate Authority...\"],\"wdxz7K\":[\"Source\"],\"we28Pq\":[\"Hide ACLs Preview\"],\"wlQNTg\":[\"Members\"],\"wlUDbB\":[\"Last updated: \",[\"formattedDate\"]],\"wrXcuy\":[\"Object Name\"],\"ww8U9y\":[\"Edit/View Bucket Policy\"],\"wxVsr5\":[\"Bucket name does not match\"],\"wyIOMP\":[\"Image name is required\"],\"wzqqS+\":[\"Key Features\"],\"x/XQrD\":[\"Any file type\"],\"x1bK0h\":[\"There are no containers available with the current search criteria. Try adjusting your search term.\"],\"x3Gs8+\":[\"Edit/View Policy\"],\"x3T4pq\":[\"The container metadata reports objects but none were listed. This may be a temporary synchronization delay — please wait a moment and try again.\"],\"x5DnMs\":[\"Last modified\"],\"x5l/TK\":[\"Already active (will be skipped):\"],\"x7SF89\":[\"Read ACLs — Preview\"],\"x9AdZ8\":[\"property_key\"],\"xIXYTK\":[\"Your S3 credentials are invalid or expired. Please try creating new credentials or contact your administrator.\"],\"xNG/3n\":[\"Floating IP Address\"],\"xNZKYy\":[\"Failed to delete \",[\"failedCount\"],\" of \",[\"totalCount\"],\" image(s). Some images may be protected or in use.\"],\"xOvKAE\":[[\"totalCount\",\"plural\",{\"one\":[[\"filteredCount\"],\" of \",[\"totalCount\"],\" bucket\"],\"other\":[[\"filteredCount\"],\" of \",[\"totalCount\"],\" buckets\"]}]],\"xYrGVV\":[\"The selected objects will be permanently deleted. This cannot be undone.\"],\"xdgZcp\":[\"Successfully emptied bucket \\\"\",[\"bucketName\"],\"\\\". \",[\"deletedCount\"],\" objects deleted.\"],\"xqhyRT\":[\"Object Uploaded\"],\"xw2UtT\":[\"Create New Image\"],\"xx2KP5\":[[\"totalCount\"],\" projects\"],\"xyaMox\":[\"Type \\\"\",[\"CONFIRM_WORD\"],\"\\\" to confirm\"],\"y+KBOY\":[\"e.g., production, linux, ubuntu\"],\"y02Bu1\":[\"Container:\"],\"y0u86k\":[\"The requested flavor could not be found. It may have been deleted or you may not have access to it.\"],\"y1GYnY\":[\"Could not move \\\"\",[\"objectName\"],\"\\\": \",[\"errorMessage\"]],\"yDAMyU\":[\"Failed to load buckets: \",[\"errorMessage\"]],\"yDHGP+\":[\"my-bucket-name\"],\"yKu/3Y\":[\"Restore\"],\"yPWFWy\":[\"ICMP Type\"],\"yTtJTy\":[\"Edit Image Metadata\"],\"yYxB17\":[\"Clear all\"],\"ykQ47t\":[\"Failed to Delete Version\"],\"ylfbpz\":[\"Extra spec key is required and cannot be empty.\"],\"yp0UjB\":[\"Ethertype\"],\"yqPflB\":[\"... and \",[\"hiddenCount\"],\" more\"],\"yu9G3x\":[\"Edit Security Group\"],\"ywe1H/\":[[\"totalCount\",\"plural\",{\"one\":[[\"totalCount\"],\" container\"],\"other\":[[\"totalCount\"],\" containers\"]}]],\"yz7wBu\":[\"Close\"],\"z+zpLP\":[\"valid token required: true\"],\"z/5vyM\":[\"Versioning was successfully enabled for bucket \\\"\",[\"bucketName\"],\"\\\".\"],\"z1JceR\":[\"Back to Floating IPs\"],\"z3N8nN\":[\"Enter bucket policy JSON...\"],\"z45o5B\":[\"Object count\"],\"z9NAjZ\":[\"Object Deleted\"],\"zCD96i\":[\"You are not authorized to view flavor details. Please log in again.\"],\"zDS0JC\":[\"Name must be 2-50 characters long.\"],\"zWb/Nn\":[\"Max header size\"],\"zc5dcw\":[\"Login failed. Please check your credentials and try again.\"],\"zemvbh\":[\"View Versions\"],\"zga9sT\":[\"OK\"],\"zhM8FP\":[\"Grant access to a user from a different project.\"],\"zm7+/D\":[\"You are about to deactivate <0>\",[\"activeCount\"],\" image(s). Deactivated images cannot be used to launch new instances.\"],\"zsqy/h\":[\"Delete Marker\"],\"zwBp5t\":[\"Private\"]}")as Messages; \ No newline at end of file