From df43e09ecacbe798c78f3d711964e62a61cce287 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 11 Jul 2026 12:55:08 +0100 Subject: [PATCH 01/12] build(deps): bump form-data from 4.0.5 to 4.0.6 in /frontend (#6676) Co-authored-by: Ludy Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 3d0ff68cd2..da79c8aa34 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9391,16 +9391,16 @@ } }, "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -9784,9 +9784,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" From f79968f336bb7bed5decae767bce9f09b2ad294d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 11 Jul 2026 12:55:37 +0100 Subject: [PATCH 02/12] build(deps): bump docker/build-push-action from 7.1.0 to 7.3.0 (#6969) Signed-off-by: dependabot[bot] --- .github/workflows/PR-Auto-Deploy-V2.yml | 2 +- .github/workflows/PR-Demo-Comment-with-react.yml | 4 ++-- .github/workflows/deploy-on-v2-commit.yml | 4 ++-- .github/workflows/push-docker-base.yml | 2 +- .github/workflows/push-docker.yml | 8 ++++---- .github/workflows/test-build-docker.yml | 4 ++-- .github/workflows/testdriver.yml | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/PR-Auto-Deploy-V2.yml b/.github/workflows/PR-Auto-Deploy-V2.yml index 173b4db9df..a3573a49df 100644 --- a/.github/workflows/PR-Auto-Deploy-V2.yml +++ b/.github/workflows/PR-Auto-Deploy-V2.yml @@ -256,7 +256,7 @@ jobs: - name: Build and push V2 image (Docker fork fallback) if: env.USE_DEPOT != 'true' && steps.check-image.outputs.exists == 'false' - uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0 + uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: context: . file: ./docker/embedded/Dockerfile diff --git a/.github/workflows/PR-Demo-Comment-with-react.yml b/.github/workflows/PR-Demo-Comment-with-react.yml index e478f95c89..5a4ea8deef 100644 --- a/.github/workflows/PR-Demo-Comment-with-react.yml +++ b/.github/workflows/PR-Demo-Comment-with-react.yml @@ -270,7 +270,7 @@ jobs: - name: Build and push PR-specific image (Docker fork fallback) if: env.USE_DEPOT != 'true' - uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0 + uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: context: . file: ./docker/embedded/Dockerfile @@ -296,7 +296,7 @@ jobs: - name: Build and push engine image (Docker fork fallback) if: env.USE_DEPOT != 'true' && needs.check-comment.outputs.enable_prototypes == 'true' - uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0 + uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: context: ./engine file: ./engine/Dockerfile diff --git a/.github/workflows/deploy-on-v2-commit.yml b/.github/workflows/deploy-on-v2-commit.yml index 850dcb12e4..0a4f502166 100644 --- a/.github/workflows/deploy-on-v2-commit.yml +++ b/.github/workflows/deploy-on-v2-commit.yml @@ -121,7 +121,7 @@ jobs: - name: Build and push frontend image (Docker fork fallback) if: env.USE_DEPOT != 'true' && steps.check-frontend.outputs.exists == 'false' - uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0 + uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: context: . file: ./docker/frontend/Dockerfile @@ -150,7 +150,7 @@ jobs: - name: Build and push backend image (Docker fork fallback) if: env.USE_DEPOT != 'true' && steps.check-backend.outputs.exists == 'false' - uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0 + uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: context: . file: ./docker/backend/Dockerfile diff --git a/.github/workflows/push-docker-base.yml b/.github/workflows/push-docker-base.yml index 57d0935d1d..c6fbe3f7ad 100644 --- a/.github/workflows/push-docker-base.yml +++ b/.github/workflows/push-docker-base.yml @@ -85,7 +85,7 @@ jobs: - name: Build and push base image id: build-push-base - uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0 + uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: builder: ${{ steps.buildx.outputs.name }} context: docker/base diff --git a/.github/workflows/push-docker.yml b/.github/workflows/push-docker.yml index 75b1aa60c8..4d22f1a3bd 100644 --- a/.github/workflows/push-docker.yml +++ b/.github/workflows/push-docker.yml @@ -145,7 +145,7 @@ jobs: id: build-push-latest # Empty-tag guard: build-push-action errors when asked to push with no tags. if: env.RUN_MAIN_APP == 'true' && steps.meta.outputs.tags != '' - uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0 + uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: builder: ${{ steps.buildx.outputs.name }} context: . @@ -192,7 +192,7 @@ jobs: - name: Build and push Unified Dockerfile (fat variant) id: build-push-fat - uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0 + uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 if: env.RUN_MAIN_APP == 'true' && github.ref != 'refs/heads/main' && github.ref != 'refs/heads/testMain' && steps.meta-fat.outputs.tags != '' with: builder: ${{ steps.buildx.outputs.name }} @@ -236,7 +236,7 @@ jobs: - name: Build and push Unified Dockerfile (ultra-lite variant) id: build-push-lite - uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0 + uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 if: env.RUN_MAIN_APP == 'true' && github.ref != 'refs/heads/main' && github.ref != 'refs/heads/testMain' && steps.meta-lite.outputs.tags != '' with: builder: ${{ steps.buildx.outputs.name }} @@ -365,7 +365,7 @@ jobs: - name: Build and push unoserver image id: build-push-unoserver if: env.RUN_UNOSERVER == 'true' && steps.unoserverDecision.outputs.mode != 'skip' - uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0 + uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: builder: ${{ steps.buildx.outputs.name }} context: . diff --git a/.github/workflows/test-build-docker.yml b/.github/workflows/test-build-docker.yml index b6a081bb1e..74e369236f 100644 --- a/.github/workflows/test-build-docker.yml +++ b/.github/workflows/test-build-docker.yml @@ -186,7 +186,7 @@ jobs: # (multi-platform + gha cache) against the published base image. - name: Build ${{ matrix.docker-rev }} (Docker fork fallback) if: env.USE_DEPOT != 'true' && inputs.docker-base-changed != 'true' - uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0 + uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: builder: ${{ steps.buildx.outputs.name }} context: . @@ -259,7 +259,7 @@ jobs: - name: Build docker/unoserver/Dockerfile (Docker fork fallback) if: env.USE_DEPOT != 'true' - uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0 + uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: builder: ${{ steps.buildx.outputs.name }} context: . diff --git a/.github/workflows/testdriver.yml b/.github/workflows/testdriver.yml index e9774694e7..ec9b658326 100644 --- a/.github/workflows/testdriver.yml +++ b/.github/workflows/testdriver.yml @@ -95,7 +95,7 @@ jobs: - name: Build and push test image (Docker fork fallback) if: env.USE_DEPOT != 'true' - uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0 + uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: context: . file: ./docker/embedded/Dockerfile From 40a2d2844ff83721fb41299979d01923db289b83 Mon Sep 17 00:00:00 2001 From: ConnorYoh <40631091+ConnorYoh@users.noreply.github.com> Date: Sat, 11 Jul 2026 13:04:09 +0100 Subject: [PATCH 03/12] Portal: honour RUN_SUBPATH in editor + login redirects (#6975) --- .../core/components/onboarding/Onboarding.tsx | 3 +- .../onboarding/slides/MFASetupSlide.tsx | 4 +-- .../components/shared/LoginAgreementModal.tsx | 3 +- .../portal-saas/auth/PortalAuthBoundary.tsx | 3 +- .../components/billing/PortalBillingGate.tsx | 3 +- frontend/editor/src/portal/auth/editorUrl.ts | 36 ++++++++++++------- .../shared/config/OverviewHeader.tsx | 3 +- .../config/configSections/AccountSection.tsx | 4 +-- 8 files changed, 38 insertions(+), 21 deletions(-) diff --git a/frontend/editor/src/core/components/onboarding/Onboarding.tsx b/frontend/editor/src/core/components/onboarding/Onboarding.tsx index 90fde8f79f..e95aaf57aa 100644 --- a/frontend/editor/src/core/components/onboarding/Onboarding.tsx +++ b/frontend/editor/src/core/components/onboarding/Onboarding.tsx @@ -3,6 +3,7 @@ import { type StepType } from "@reactour/tour"; import { useTranslation } from "react-i18next"; import { useNavigate, useLocation } from "react-router-dom"; import { isAuthRoute } from "@app/constants/routes"; +import { withBasePath } from "@app/constants/app"; import { dispatchTourState } from "@app/constants/events"; import { useOnboardingOrchestrator } from "@app/components/onboarding/orchestrator/useOnboardingOrchestrator"; import { useBypassOnboarding } from "@app/components/onboarding/useBypassOnboarding"; @@ -76,7 +77,7 @@ export default function Onboarding() { ); const redirectToLogin = useCallback(() => { - window.location.assign("/login"); + window.location.assign(withBasePath("/login")); }, []); const handlePasswordChanged = useCallback(async () => { diff --git a/frontend/editor/src/core/components/onboarding/slides/MFASetupSlide.tsx b/frontend/editor/src/core/components/onboarding/slides/MFASetupSlide.tsx index c018d69265..4abd09b0e6 100644 --- a/frontend/editor/src/core/components/onboarding/slides/MFASetupSlide.tsx +++ b/frontend/editor/src/core/components/onboarding/slides/MFASetupSlide.tsx @@ -23,7 +23,7 @@ import { accountService } from "@app/services/accountService"; import { useAccountLogout } from "@app/extensions/accountLogout"; import { useAuth } from "@app/auth/UseSession"; import LocalIcon from "@app/components/shared/LocalIcon"; -import { BASE_PATH } from "@app/constants/app"; +import { BASE_PATH, withBasePath } from "@app/constants/app"; import styles from "@app/components/onboarding/InitialOnboardingModal/InitialOnboardingModal.module.css"; import { MfaSetupResponse } from "@app/responses/Mfa/MfaResponse"; @@ -84,7 +84,7 @@ function MFASetupContent({ onMfaSetupComplete }: MFASetupSlideProps) { }, [fetchMfaSetup]); const redirectToLogin = useCallback(() => { - window.location.assign("/login"); + window.location.assign(withBasePath("/login")); }, []); const onLogout = useCallback(async () => { diff --git a/frontend/editor/src/core/components/shared/LoginAgreementModal.tsx b/frontend/editor/src/core/components/shared/LoginAgreementModal.tsx index 9fb7f7c925..9329b0d6d8 100644 --- a/frontend/editor/src/core/components/shared/LoginAgreementModal.tsx +++ b/frontend/editor/src/core/components/shared/LoginAgreementModal.tsx @@ -16,6 +16,7 @@ import remarkGfm from "remark-gfm"; import apiClient from "@app/services/apiClient"; import { useAppConfig } from "@app/contexts/AppConfigContext"; import { useAuth } from "@app/auth/UseSession"; +import { withBasePath } from "@app/constants/app"; import { Z_INDEX_SIGN_IN_MODAL } from "@app/styles/zIndex"; const ACCEPTED_STORAGE_KEY = "loginAgreementAccepted"; @@ -144,7 +145,7 @@ export default function LoginAgreementModal() { } catch { /* ignore */ } - window.location.assign("/login"); + window.location.assign(withBasePath("/login")); } else { // Anonymous / desktop: best-effort close the window; if that is a no-op (web), // reload so the agreement re-blocks until accepted. diff --git a/frontend/editor/src/portal-saas/auth/PortalAuthBoundary.tsx b/frontend/editor/src/portal-saas/auth/PortalAuthBoundary.tsx index 851c011ae0..8ab2c58dcd 100644 --- a/frontend/editor/src/portal-saas/auth/PortalAuthBoundary.tsx +++ b/frontend/editor/src/portal-saas/auth/PortalAuthBoundary.tsx @@ -2,6 +2,7 @@ import { useEffect, type ReactNode } from "react"; import { AuthProvider } from "@app/auth"; import { useAuth } from "@app/auth/context"; import { Spinner } from "@app/ui"; +import { withBasePath } from "@app/constants/app"; import { ensureSaasSupabase } from "@portal/auth/saasSupabase"; import { EDITOR_URL } from "@portal/auth/editorUrl"; @@ -34,7 +35,7 @@ function SaasPortalGate({ children }: { children: ReactNode }) { useEffect(() => { if (!blocked) return; // Guest (has a session but anonymous) -> editor; no session -> login. - window.location.href = session ? EDITOR_URL : "/login"; + window.location.href = session ? EDITOR_URL : withBasePath("/login"); }, [blocked, session]); if (loading || blocked) { return ( diff --git a/frontend/editor/src/portal-saas/components/billing/PortalBillingGate.tsx b/frontend/editor/src/portal-saas/components/billing/PortalBillingGate.tsx index b02c485581..73c3eba8f3 100644 --- a/frontend/editor/src/portal-saas/components/billing/PortalBillingGate.tsx +++ b/frontend/editor/src/portal-saas/components/billing/PortalBillingGate.tsx @@ -1,3 +1,4 @@ +import { withBasePath } from "@app/constants/app"; import { Usage } from "@portal/views/Usage"; /** @@ -13,7 +14,7 @@ export function PortalBillingGate() { return ( { - window.location.href = "/login"; + window.location.href = withBasePath("/login"); }} /> ); diff --git a/frontend/editor/src/portal/auth/editorUrl.ts b/frontend/editor/src/portal/auth/editorUrl.ts index f5538f47ee..a7d92f0eb5 100644 --- a/frontend/editor/src/portal/auth/editorUrl.ts +++ b/frontend/editor/src/portal/auth/editorUrl.ts @@ -1,17 +1,29 @@ -/** - * Where to send users to reach the editor app (app switcher, and the auth gate - * bouncing non-admins out). - * - * Sourced from VITE_EDITOR_URL so it's configurable per deploy rather than - * hardcoded, falling back to "/" (the editor serves the portal at /processor - * on the same origin, so the root is the editor). For dev cross-app navigation to - * a separately-running editor, set VITE_EDITOR_URL in editor/.env.local. - */ -export const EDITOR_URL = import.meta.env.VITE_EDITOR_URL || "/"; +import { withBasePath } from "@app/constants/app"; + +const CONFIGURED_EDITOR_URL = import.meta.env.VITE_EDITOR_URL || ""; /** * When the editor is at the root of this origin, the portal and editor are * route-sets of one SPA — switching apps can be a client-side navigation - * instead of a full page load. + * instead of a full page load. True unless a distinct VITE_EDITOR_URL points at + * a separately-running editor (dev cross-app setup). */ -export const EDITOR_IS_SAME_APP = EDITOR_URL === "/"; +export const EDITOR_IS_SAME_APP = + !CONFIGURED_EDITOR_URL || CONFIGURED_EDITOR_URL === "/"; + +/** + * Where to send users to reach the editor app (app switcher, the auth gate + * bouncing non-admins out, the "Open in browser" CTAs on the home hero and the + * download-editor modal). + * + * Sourced from VITE_EDITOR_URL so it's configurable per deploy. When unset (the + * editor is this same app at the origin root), it resolves to the deploy's base + * path — so a subpath deploy (RUN_SUBPATH=/app → served under /app) lands on + * /app/ rather than the origin root. These CTAs use window.location, which + * bypasses the router basename, so the base path has to be baked in here. For + * dev cross-app navigation to a separately-running editor, set VITE_EDITOR_URL + * in editor/.env.local. + */ +export const EDITOR_URL = EDITOR_IS_SAME_APP + ? withBasePath("/") + : CONFIGURED_EDITOR_URL; diff --git a/frontend/editor/src/proprietary/components/shared/config/OverviewHeader.tsx b/frontend/editor/src/proprietary/components/shared/config/OverviewHeader.tsx index 0b96811e18..5945d81fd8 100644 --- a/frontend/editor/src/proprietary/components/shared/config/OverviewHeader.tsx +++ b/frontend/editor/src/proprietary/components/shared/config/OverviewHeader.tsx @@ -2,6 +2,7 @@ import { Text } from "@mantine/core"; import { Button } from "@app/ui/Button"; import { useTranslation } from "react-i18next"; import { useAuth } from "@app/auth/UseSession"; +import { withBasePath } from "@app/constants/app"; export function OverviewHeader() { const { t } = useTranslation(); @@ -13,7 +14,7 @@ export function OverviewHeader() { } catch (error) { console.error("Logout error:", error); } finally { - window.location.assign("/login"); + window.location.assign(withBasePath("/login")); } }; diff --git a/frontend/editor/src/proprietary/components/shared/config/configSections/AccountSection.tsx b/frontend/editor/src/proprietary/components/shared/config/configSections/AccountSection.tsx index 457a02fef1..7212169e6e 100644 --- a/frontend/editor/src/proprietary/components/shared/config/configSections/AccountSection.tsx +++ b/frontend/editor/src/proprietary/components/shared/config/configSections/AccountSection.tsx @@ -19,7 +19,7 @@ import { accountService } from "@app/services/accountService"; import { Z_INDEX_OVER_CONFIG_MODAL } from "@app/styles/zIndex"; import { QRCodeSVG } from "qrcode.react"; import { useAccountLogout } from "@app/extensions/accountLogout"; -import { BASE_PATH } from "@app/constants/app"; +import { BASE_PATH, withBasePath } from "@app/constants/app"; import { MfaSetupResponse } from "@app/responses/Mfa/MfaResponse"; const AccountSection: React.FC = () => { @@ -80,7 +80,7 @@ const AccountSection: React.FC = () => { ); const redirectToLogin = useCallback(() => { - window.location.assign("/login"); + window.location.assign(withBasePath("/login")); }, []); const handleLogout = useCallback(async () => { From cd563672959c20a1409666bdb5e747db6fbb5446 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 11 Jul 2026 13:04:22 +0100 Subject: [PATCH 04/12] build(deps): bump actions/cache from 5.0.5 to 6.1.0 (#6968) Signed-off-by: dependabot[bot] --- .github/workflows/backend-build.yml | 2 +- .github/workflows/check-licence.yml | 2 +- .github/workflows/check-openapi.yml | 2 +- .github/workflows/coverage-aggregate.yml | 2 +- .github/workflows/db-migration-test.yml | 2 +- .github/workflows/docker-compose-tests.yml | 2 +- .github/workflows/multiOSReleases.yml | 2 +- .github/workflows/push-docker.yml | 2 +- .github/workflows/test-build-docker.yml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/backend-build.yml b/.github/workflows/backend-build.yml index 37a42c419f..ef0dd20aba 100644 --- a/.github/workflows/backend-build.yml +++ b/.github/workflows/backend-build.yml @@ -47,7 +47,7 @@ jobs: distribution: "temurin" - name: Cache Gradle dependency artifacts - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | ~/.gradle/wrapper diff --git a/.github/workflows/check-licence.yml b/.github/workflows/check-licence.yml index b984f7d47d..dcd8c032df 100644 --- a/.github/workflows/check-licence.yml +++ b/.github/workflows/check-licence.yml @@ -29,7 +29,7 @@ jobs: distribution: "temurin" - name: Cache Gradle dependency artifacts - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | ~/.gradle/wrapper diff --git a/.github/workflows/check-openapi.yml b/.github/workflows/check-openapi.yml index 46ce829a87..a27ea4ec02 100644 --- a/.github/workflows/check-openapi.yml +++ b/.github/workflows/check-openapi.yml @@ -34,7 +34,7 @@ jobs: distribution: "temurin" - name: Cache Gradle dependency artifacts - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | ~/.gradle/wrapper diff --git a/.github/workflows/coverage-aggregate.yml b/.github/workflows/coverage-aggregate.yml index ce792bcadc..18772fe819 100644 --- a/.github/workflows/coverage-aggregate.yml +++ b/.github/workflows/coverage-aggregate.yml @@ -51,7 +51,7 @@ jobs: distribution: "temurin" - name: Cache Gradle dependency artifacts - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | ~/.gradle/wrapper diff --git a/.github/workflows/db-migration-test.yml b/.github/workflows/db-migration-test.yml index 4b5ca8b674..9e8eeb8c8c 100644 --- a/.github/workflows/db-migration-test.yml +++ b/.github/workflows/db-migration-test.yml @@ -37,7 +37,7 @@ jobs: distribution: temurin - name: Cache Gradle dependency artifacts - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | ~/.gradle/wrapper diff --git a/.github/workflows/docker-compose-tests.yml b/.github/workflows/docker-compose-tests.yml index 155b990b32..945f4883cb 100644 --- a/.github/workflows/docker-compose-tests.yml +++ b/.github/workflows/docker-compose-tests.yml @@ -50,7 +50,7 @@ jobs: distribution: "temurin" - name: Cache Gradle dependency artifacts - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | ~/.gradle/wrapper diff --git a/.github/workflows/multiOSReleases.yml b/.github/workflows/multiOSReleases.yml index f5fb743a3f..9e8a65f02c 100644 --- a/.github/workflows/multiOSReleases.yml +++ b/.github/workflows/multiOSReleases.yml @@ -61,7 +61,7 @@ jobs: distribution: "temurin" - name: Cache Gradle dependencies - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | ~/.gradle/caches diff --git a/.github/workflows/push-docker.yml b/.github/workflows/push-docker.yml index 4d22f1a3bd..eac1fa49fc 100644 --- a/.github/workflows/push-docker.yml +++ b/.github/workflows/push-docker.yml @@ -66,7 +66,7 @@ jobs: distribution: "temurin" - name: Cache Gradle dependencies - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | ~/.gradle/caches diff --git a/.github/workflows/test-build-docker.yml b/.github/workflows/test-build-docker.yml index 74e369236f..c91ea0435a 100644 --- a/.github/workflows/test-build-docker.yml +++ b/.github/workflows/test-build-docker.yml @@ -95,7 +95,7 @@ jobs: distribution: "temurin" - name: Cache Gradle dependency artifacts - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 with: path: | ~/.gradle/wrapper From b8d8f028c9c3e36aecf83cb636810b4d71f8cfe5 Mon Sep 17 00:00:00 2001 From: Ludy Date: Sat, 11 Jul 2026 14:08:34 +0200 Subject: [PATCH 05/12] fix: align portal icons with supported Material Symbols names (#6884) --- frontend/editor/src/portal/api/policies.ts | 2 +- frontend/editor/src/portal/data/ops.ts | 76 +++++++++---------- .../editor/src/proprietary/data/labelIcons.ts | 2 +- 3 files changed, 40 insertions(+), 40 deletions(-) diff --git a/frontend/editor/src/portal/api/policies.ts b/frontend/editor/src/portal/api/policies.ts index 7954e04c59..9bcbf9db0d 100644 --- a/frontend/editor/src/portal/api/policies.ts +++ b/frontend/editor/src/portal/api/policies.ts @@ -207,7 +207,7 @@ export const POLICY_CATEGORIES: PolicyCategory[] = [ { id: "retention", label: "portal.policies.categories.retention.label", - icon: "clock", + icon: "schedule", tone: "neutral", desc: "portal.policies.categories.retention.desc", comingSoon: true, diff --git a/frontend/editor/src/portal/data/ops.ts b/frontend/editor/src/portal/data/ops.ts index 0cb4fa6b05..e5803971ad 100644 --- a/frontend/editor/src/portal/data/ops.ts +++ b/frontend/editor/src/portal/data/ops.ts @@ -96,14 +96,14 @@ export const PIPELINE_OPS: Record = { { id: "ocr", label: "OCR", - icon: "eye", + icon: "visibility", kind: "ingest", desc: "Text-recognize scanned or image-based pages", }, { id: "parse", label: "Parse", - icon: "layout", + icon: "dashboard", kind: "ingest", desc: "Reconstruct reading order and layout structure", }, @@ -117,14 +117,14 @@ export const PIPELINE_OPS: Record = { { id: "bundle-split", label: "Bundle split", - icon: "grid", + icon: "grid-view", kind: "ingest", desc: "Split a multi-document upload into component documents", }, { id: "extract", label: "Extract", - icon: "sparkles", + icon: "auto-awesome", kind: "ingest", desc: "Pull structured fields from the document into a typed schema", }, @@ -168,7 +168,7 @@ export const PIPELINE_OPS: Record = { { id: "confidence-check", label: "Confidence bounds", - icon: "activity", + icon: "analytics", kind: "validate", desc: "Gate downstream ops on extraction-confidence thresholds", }, @@ -184,7 +184,7 @@ export const PIPELINE_OPS: Record = { { id: "split", label: "Split", - icon: "grid", + icon: "grid-view", kind: "modify", desc: "Split a PDF into pages, sections, or by document boundary", }, @@ -212,7 +212,7 @@ export const PIPELINE_OPS: Record = { { id: "crop", label: "Crop", - icon: "layout", + icon: "dashboard", kind: "modify", desc: "Crop pages to a region or trim margins", }, @@ -221,7 +221,7 @@ export const PIPELINE_OPS: Record = { { id: "redact", label: "Redact PII", - icon: "eye", + icon: "visibility", kind: "secure", defaultOn: true, desc: "Remove or mask PII before the document is stored or released downstream", @@ -250,7 +250,7 @@ export const PIPELINE_OPS: Record = { { id: "flatten", label: "Flatten + lock", - icon: "layout", + icon: "dashboard", kind: "secure", desc: "Flatten forms and annotations to harden the document against tampering", }, @@ -350,7 +350,7 @@ export const PIPELINE_OPS: Record = { { id: "notify", label: "Notify", - icon: "bell", + icon: "notifications", kind: "alert", desc: "Fire a webhook or email when the pipeline finishes or trips a rule", }, @@ -524,7 +524,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "confidence-check", label: "Confidence bounds", - icon: "activity", + icon: "analytics", kind: "validate", category: "Validation", desc: "Gate downstream ops on extraction-confidence thresholds", @@ -622,7 +622,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "split", label: "Split", - icon: "grid", + icon: "grid-view", kind: "modify", category: "Removal", desc: "Split a PDF into pages, sections, or by document boundary", @@ -630,7 +630,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "split-chapters", label: "Split by chapters", - icon: "grid", + icon: "grid-view", kind: "modify", category: "Removal", desc: "Split a PDF along bookmark or chapter boundaries", @@ -638,7 +638,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "split-size", label: "Split by size", - icon: "grid", + icon: "grid-view", kind: "modify", category: "Removal", desc: "Split a PDF when it exceeds a size or page-count threshold", @@ -646,7 +646,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "auto-split", label: "Auto split", - icon: "grid", + icon: "grid-view", kind: "modify", category: "Classification", desc: "Detect document boundaries and split automatically", @@ -654,7 +654,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "remove-pages", label: "Remove pages", - icon: "grid", + icon: "grid-view", kind: "modify", category: "Removal", desc: "Drop specified pages from the document", @@ -662,7 +662,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "remove-blanks", label: "Remove blank pages", - icon: "grid", + icon: "grid-view", kind: "modify", category: "Removal", desc: "Detect and drop blank pages", @@ -670,7 +670,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "rearrange-pages", label: "Rearrange pages", - icon: "grid", + icon: "grid-view", kind: "modify", category: "Page Formatting", desc: "Reorder pages by a specified sequence", @@ -686,7 +686,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "crop", label: "Crop", - icon: "layout", + icon: "dashboard", kind: "modify", category: "Page Formatting", desc: "Crop pages to a region or trim margins", @@ -702,7 +702,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "flatten", label: "Flatten", - icon: "layout", + icon: "dashboard", kind: "modify", category: "Page Formatting", desc: "Flatten forms and annotations into the page content", @@ -718,7 +718,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "remove-images", label: "Remove images", - icon: "eye", + icon: "visibility", kind: "modify", category: "Removal", desc: "Strip images to reduce file size", @@ -782,7 +782,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "multi-page-layout", label: "Multi-page layout", - icon: "grid", + icon: "grid-view", kind: "modify", category: "Advanced Formatting", desc: "Combine multiple pages into a single page (n-up)", @@ -790,7 +790,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "scale-pages", label: "Scale pages", - icon: "layout", + icon: "dashboard", kind: "modify", category: "Page Formatting", desc: "Resize pages to a target dimension", @@ -934,7 +934,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "ocr", label: "OCR", - icon: "eye", + icon: "visibility", kind: "modify", category: "Extraction", desc: "Optical character recognition on scanned pages", @@ -942,7 +942,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "extract-images", label: "Extract images", - icon: "sparkles", + icon: "auto-awesome", kind: "modify", category: "Extraction", desc: "Extract embedded images from the PDF", @@ -950,7 +950,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "extract-bookmarks", label: "Extract bookmarks", - icon: "sparkles", + icon: "auto-awesome", kind: "modify", category: "Extraction", desc: "Extract the bookmark / outline tree", @@ -958,7 +958,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "extract-scans", label: "Extract scans", - icon: "sparkles", + icon: "auto-awesome", kind: "modify", category: "Extraction", desc: "Detect and extract scanned image regions", @@ -968,7 +968,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "redact", label: "Redact PII", - icon: "eye", + icon: "visibility", kind: "secure", category: "Document Security", desc: "Remove or mask PII before the document is stored or released", @@ -984,7 +984,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "auto-redact", label: "Auto-redact", - icon: "eye", + icon: "visibility", kind: "secure", category: "Document Security", desc: "Automatically redact sensitive content based on policy", @@ -1048,7 +1048,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "flatten-secure", label: "Flatten + lock", - icon: "layout", + icon: "dashboard", kind: "secure", category: "Document Security", desc: "Flatten forms and lock the document against tampering", @@ -1155,7 +1155,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "schema-extract", label: "Schema-aware extract", - icon: "sparkles", + icon: "auto-awesome", kind: "modify", category: "Classification", desc: "Extract the typed fields the inferred schema declares — not heuristic regexes. Confidence scored per field", @@ -1187,7 +1187,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "smart-redact", label: "Field-aware redact", - icon: "eye", + icon: "visibility", kind: "secure", category: "Document Security", desc: "Schema-aware PII redaction — targets fields the schema declares as PII, not regex fishing", @@ -1195,7 +1195,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "field-confidence", label: "Field confidence", - icon: "activity", + icon: "analytics", kind: "validate", category: "Validation", desc: "Per-field confidence scoring backed by the typed schema", @@ -1203,7 +1203,7 @@ export const LIBRARY_OPS: readonly LibraryOp[] = [ { id: "schema-split", label: "Schema-aware split", - icon: "grid", + icon: "grid-view", kind: "modify", category: "Classification", desc: "Split a multi-doc bundle along schema boundaries", @@ -1240,13 +1240,13 @@ export const SOURCE_OPTIONS: readonly SourceOption[] = [ { id: "webhook", label: "Inbound webhook", - icon: "plug", + icon: "webhook", desc: "Receive documents from another system via webhook", }, { id: "s3", label: "S3 bucket watch", - icon: "server", + icon: "storage", desc: "Poll an S3 bucket for new files", }, { @@ -1258,7 +1258,7 @@ export const SOURCE_OPTIONS: readonly SourceOption[] = [ { id: "scheduled", label: "Scheduled import", - icon: "activity", + icon: "schedule", desc: "Fetch from SFTP/URL on a schedule", }, ]; @@ -1273,7 +1273,7 @@ export const DESTINATION_OPTIONS: readonly DestinationOption[] = [ { id: "s3", label: "S3 bucket", - icon: "server", + icon: "storage", desc: "Write results to an S3 bucket", }, { diff --git a/frontend/editor/src/proprietary/data/labelIcons.ts b/frontend/editor/src/proprietary/data/labelIcons.ts index 699f9ba61c..c71e7a9da4 100644 --- a/frontend/editor/src/proprietary/data/labelIcons.ts +++ b/frontend/editor/src/proprietary/data/labelIcons.ts @@ -4,7 +4,7 @@ * Material Symbols names rendered via {@link LocalIcon}. * * IMPORTANT: each entry is written as an `icon: "…"` literal so the icon-bundler - * (`scripts/generate-icons.js`, which regex-scans for `icon: "name"`) picks every + * (`scripts/generate-icons.js`, which regex-scans for icon literals) picks every * one up and bundles it — otherwise a picked icon would fall back to the CDN and * render blank offline. After adding/removing entries run `task frontend:prepare:icons`. * From 0a1b4ec1739425f1544b85e5b8c054f4ecb7c2c8 Mon Sep 17 00:00:00 2001 From: Reece Browne <74901996+reecebrowne@users.noreply.github.com> Date: Sat, 11 Jul 2026 14:10:51 +0100 Subject: [PATCH 06/12] Tidy policy/portal translation keys (#6962) Co-authored-by: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> --- .../public/locales/ar-AR/translation.toml | 97 ++++++++----------- .../public/locales/az-AZ/translation.toml | 97 ++++++++----------- .../public/locales/bg-BG/translation.toml | 97 ++++++++----------- .../public/locales/ca-CA/translation.toml | 97 ++++++++----------- .../public/locales/cs-CZ/translation.toml | 97 ++++++++----------- .../public/locales/da-DK/translation.toml | 97 ++++++++----------- .../public/locales/de-DE/translation.toml | 97 ++++++++----------- .../public/locales/el-GR/translation.toml | 97 ++++++++----------- .../public/locales/en-GB/translation.toml | 97 ++++++++----------- .../public/locales/en-US/translation.toml | 88 ++++++++--------- .../public/locales/es-ES/translation.toml | 97 ++++++++----------- .../public/locales/eu-ES/translation.toml | 97 ++++++++----------- .../public/locales/fa-IR/translation.toml | 97 ++++++++----------- .../public/locales/fr-FR/translation.toml | 97 ++++++++----------- .../public/locales/ga-IE/translation.toml | 97 ++++++++----------- .../public/locales/hi-IN/translation.toml | 97 ++++++++----------- .../public/locales/hr-HR/translation.toml | 97 ++++++++----------- .../public/locales/hu-HU/translation.toml | 97 ++++++++----------- .../public/locales/id-ID/translation.toml | 97 ++++++++----------- .../public/locales/it-IT/translation.toml | 97 ++++++++----------- .../public/locales/ja-JP/translation.toml | 97 ++++++++----------- .../public/locales/ko-KR/translation.toml | 97 ++++++++----------- .../public/locales/ml-ML/translation.toml | 97 ++++++++----------- .../public/locales/nl-NL/translation.toml | 97 ++++++++----------- .../public/locales/no-NB/translation.toml | 97 ++++++++----------- .../public/locales/pl-PL/translation.toml | 97 ++++++++----------- .../public/locales/pt-BR/translation.toml | 97 ++++++++----------- .../public/locales/pt-PT/translation.toml | 97 ++++++++----------- .../public/locales/ro-RO/translation.toml | 97 ++++++++----------- .../public/locales/ru-RU/translation.toml | 97 ++++++++----------- .../public/locales/sk-SK/translation.toml | 97 ++++++++----------- .../public/locales/sl-SI/translation.toml | 97 ++++++++----------- .../locales/sr-LATN-RS/translation.toml | 97 ++++++++----------- .../public/locales/sv-SE/translation.toml | 97 ++++++++----------- .../public/locales/th-TH/translation.toml | 97 ++++++++----------- .../public/locales/tr-TR/translation.toml | 97 ++++++++----------- .../public/locales/uk-UA/translation.toml | 97 ++++++++----------- .../public/locales/vi-VN/translation.toml | 97 ++++++++----------- .../public/locales/zh-BO/translation.toml | 97 ++++++++----------- .../public/locales/zh-CN/translation.toml | 97 ++++++++----------- .../public/locales/zh-TW/translation.toml | 97 ++++++++----------- .../editor/src/core/i18n/translationAudit.ts | 11 ++- frontend/editor/src/portal/api/policies.ts | 56 ++++++----- .../components/policies/PolicyFieldRow.tsx | 4 +- .../proprietary/data/policyDefinitions.tsx | 68 +++++++------ 45 files changed, 1635 insertions(+), 2472 deletions(-) diff --git a/frontend/editor/public/locales/ar-AR/translation.toml b/frontend/editor/public/locales/ar-AR/translation.toml index 8f7e9c5921..287cd284d5 100644 --- a/frontend/editor/public/locales/ar-AR/translation.toml +++ b/frontend/editor/public/locales/ar-AR/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "العقود" -"Financial reports" = "التقارير المالية" -"HR records" = "سجلات الموارد البشرية" -Insurance = "التأمين" -Invoices = "الفواتير" -"Legal filings" = "الإيداعات القانونية" -"Medical / PHI" = "طبي / PHI" -"Tax documents" = "المستندات الضريبية" - [policies.enforcement] applying = "جارٍ تطبيق {{names}}" applyingProgress = "جارٍ تطبيق {{names}} ({{done}} من {{total}})" @@ -6025,51 +6015,6 @@ notify = "إشعار عند التوجيه" onViolation = "عند عدم الامتثال" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "سنة واحدة" -"30 days" = "30 يومًا" -"90 days" = "90 يومًا" -Never = "أبدًا" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "وضع علامة للمراجعة" -Hold = "احتجاز" -"Route to bucket" = "توجيه إلى bucket" - -[policies.fieldOption.destination] -Documents = "المستندات" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "سنة واحدة" -"3 years" = "3 سنوات" -"30 days" = "30 يومًا" -"7 years" = "7 سنوات" -Indefinite = "إلى أجل غير مسمى" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "تنقيح PHI تلقائيًا" -"Block export" = "حظر التصدير" -"Flag for review" = "وضع علامة للمراجعة" -"Quarantine document" = "عزل المستند" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "إغلاق التراكب" enforcingTitle = "جارٍ فرض السياسة..." viewAnyway = "عرض الملف (لا تزال السياسة قيد الفرض)" +[policyOption] +autoRedactPhi = "تنقيح PHI تلقائيًا" +blockExport = "حظر التصدير" +contracts = "العقود" +documents = "المستندات" +fedramp = "FedRAMP" +financialReports = "التقارير المالية" +flagForReview = "وضع علامة للمراجعة" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "احتجاز" +hrRecords = "سجلات الموارد البشرية" +indefinite = "إلى أجل غير مسمى" +insurance = "التأمين" +invoices = "الفواتير" +iso27001 = "ISO 27001" +legalFilings = "الإيداعات القانونية" +medicalPhi = "طبي / PHI" +never = "أبدًا" +ninetyDays = "90 يومًا" +oneYear = "سنة واحدة" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "عزل المستند" +routeToBucket = "توجيه إلى bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 سنوات" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "المستندات الضريبية" +thirtyDays = "30 يومًا" +threeYears = "3 سنوات" +webhook = "Webhook" + [portal] comingSoon = "قريبًا" @@ -8067,10 +8050,6 @@ title = "انتهت صلاحية الجلسة" [portal.users] title = "المستخدمون" -[portal.users.roles] -subtitle = "كل دور موجود في كل خطة — وما يمكن لكل دور فعله ثابت عبر المؤسسة." -title = "الأدوار" - [portal.users.roles.admin] label = "المسؤول (مالك المؤسسة)" summary = "حوكمة كاملة على مساحة العمل والإعدادات والأعضاء." diff --git a/frontend/editor/public/locales/az-AZ/translation.toml b/frontend/editor/public/locales/az-AZ/translation.toml index f0dea4966e..f27f1ff0d1 100644 --- a/frontend/editor/public/locales/az-AZ/translation.toml +++ b/frontend/editor/public/locales/az-AZ/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Müqavilələr" -"Financial reports" = "Maliyyə hesabatları" -"HR records" = "HR qeydləri" -Insurance = "Sığorta" -Invoices = "Fakturalar" -"Legal filings" = "Hüquqi sənədlər" -"Medical / PHI" = "Tibbi / PHI" -"Tax documents" = "Vergi sənədləri" - [policies.enforcement] applying = "{{names}} tətbiq edilir" applyingProgress = "{{names}} tətbiq edilir ({{done}}/{{total}})" @@ -6025,51 +6015,6 @@ notify = "Yönləndirmədə bildir" onViolation = "Uyğunsuzluq olduqda" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 il" -"30 days" = "30 gün" -"90 days" = "90 gün" -Never = "Heç vaxt" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Baxış üçün işarələ" -Hold = "Saxla" -"Route to bucket" = "Bucket-ə yönləndir" - -[policies.fieldOption.destination] -Documents = "Sənədlər" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 il" -"3 years" = "3 il" -"30 days" = "30 gün" -"7 years" = "7 il" -Indefinite = "Qeyri-müəyyən" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "PHI-ni avtomatik redaktə et" -"Block export" = "Eksportu blokla" -"Flag for review" = "Baxış üçün işarələ" -"Quarantine document" = "Sənədi karantinə al" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Örtüyü bağla" enforcingTitle = "Siyasət tətbiq edilir..." viewAnyway = "Faylı göstər (siyasət hələ tətbiq edilir)" +[policyOption] +autoRedactPhi = "PHI-ni avtomatik redaktə et" +blockExport = "Eksportu blokla" +contracts = "Müqavilələr" +documents = "Sənədlər" +fedramp = "FedRAMP" +financialReports = "Maliyyə hesabatları" +flagForReview = "Baxış üçün işarələ" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Saxla" +hrRecords = "HR qeydləri" +indefinite = "Qeyri-müəyyən" +insurance = "Sığorta" +invoices = "Fakturalar" +iso27001 = "ISO 27001" +legalFilings = "Hüquqi sənədlər" +medicalPhi = "Tibbi / PHI" +never = "Heç vaxt" +ninetyDays = "90 gün" +oneYear = "1 il" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Sənədi karantinə al" +routeToBucket = "Bucket-ə yönləndir" +s3Bucket = "S3 bucket" +sevenYears = "7 il" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Vergi sənədləri" +thirtyDays = "30 gün" +threeYears = "3 il" +webhook = "Webhook" + [portal] comingSoon = "Tezliklə" @@ -8067,10 +8050,6 @@ title = "Sessiyanın müddəti bitib" [portal.users] title = "İstifadəçilər" -[portal.users.roles] -subtitle = "Hər rol hər planda mövcuddur — hər birinin nə edə biləcəyi təşkilat üzrə sabitdir." -title = "Rollar" - [portal.users.roles.admin] label = "Admin (Təşkilat sahibi)" summary = "İş sahəsi, parametrlər və üzvlər üzərində tam idarəetmə." diff --git a/frontend/editor/public/locales/bg-BG/translation.toml b/frontend/editor/public/locales/bg-BG/translation.toml index 401c100a34..b967c4b7c8 100644 --- a/frontend/editor/public/locales/bg-BG/translation.toml +++ b/frontend/editor/public/locales/bg-BG/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Договори" -"Financial reports" = "Финансови отчети" -"HR records" = "HR записи" -Insurance = "Застраховане" -Invoices = "Фактури" -"Legal filings" = "Правни документи" -"Medical / PHI" = "Медицински / PHI" -"Tax documents" = "Данъчни документи" - [policies.enforcement] applying = "Прилагане на {{names}}" applyingProgress = "Прилагане на {{names}} ({{done}} от {{total}})" @@ -6025,51 +6015,6 @@ notify = "Уведоми при маршрутизиране" onViolation = "При несъответствие" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 година" -"30 days" = "30 дни" -"90 days" = "90 дни" -Never = "Никога" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Маркирай за преглед" -Hold = "Задръж" -"Route to bucket" = "Насочи към bucket" - -[policies.fieldOption.destination] -Documents = "Документи" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 година" -"3 years" = "3 години" -"30 days" = "30 дни" -"7 years" = "7 години" -Indefinite = "Безсрочно" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Автоматично заличаване на PHI" -"Block export" = "Блокирай експортирането" -"Flag for review" = "Маркирай за преглед" -"Quarantine document" = "Постави документа под карантина" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Скрий наслагването" enforcingTitle = "Прилагане на политика..." viewAnyway = "Виж файла (политиката все още се прилага)" +[policyOption] +autoRedactPhi = "Автоматично заличаване на PHI" +blockExport = "Блокирай експортирането" +contracts = "Договори" +documents = "Документи" +fedramp = "FedRAMP" +financialReports = "Финансови отчети" +flagForReview = "Маркирай за преглед" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Задръж" +hrRecords = "HR записи" +indefinite = "Безсрочно" +insurance = "Застраховане" +invoices = "Фактури" +iso27001 = "ISO 27001" +legalFilings = "Правни документи" +medicalPhi = "Медицински / PHI" +never = "Никога" +ninetyDays = "90 дни" +oneYear = "1 година" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Постави документа под карантина" +routeToBucket = "Насочи към bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 години" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Данъчни документи" +thirtyDays = "30 дни" +threeYears = "3 години" +webhook = "Webhook" + [portal] comingSoon = "Очаквайте скоро" @@ -8067,10 +8050,6 @@ title = "Сесията е изтекла" [portal.users] title = "Потребители" -[portal.users.roles] -subtitle = "Всяка роля съществува във всеки план — това, което всяка може да прави, е фиксирано за цялата организация." -title = "Роли" - [portal.users.roles.admin] label = "Администратор (собственик на организация)" summary = "Пълно управление на работното пространство, настройките и членовете." diff --git a/frontend/editor/public/locales/ca-CA/translation.toml b/frontend/editor/public/locales/ca-CA/translation.toml index 3b386d0328..7f748e20b2 100644 --- a/frontend/editor/public/locales/ca-CA/translation.toml +++ b/frontend/editor/public/locales/ca-CA/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Contractes" -"Financial reports" = "Informes financers" -"HR records" = "Registres de RR. HH." -Insurance = "Assegurances" -Invoices = "Factures" -"Legal filings" = "Presentacions legals" -"Medical / PHI" = "Mèdic / PHI" -"Tax documents" = "Documents fiscals" - [policies.enforcement] applying = "Aplicant {{names}}" applyingProgress = "Aplicant {{names}} ({{done}} de {{total}})" @@ -6025,51 +6015,6 @@ notify = "Notifica en encaminar" onViolation = "Quan no compleix" webhookUrl = "URL del webhook" -[policies.fieldOption.archiveAfter] -"1 year" = "1 any" -"30 days" = "30 dies" -"90 days" = "90 dies" -Never = "Mai" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Marca per revisar" -Hold = "Retén" -"Route to bucket" = "Encamina al bucket" - -[policies.fieldOption.destination] -Documents = "Documents" -"S3 bucket" = "bucket S3" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 any" -"3 years" = "3 anys" -"30 days" = "30 dies" -"7 years" = "7 anys" -Indefinite = "Indefinit" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Oculta automàticament PHI" -"Block export" = "Bloqueja l'exportació" -"Flag for review" = "Marca per revisar" -"Quarantine document" = "Posa el document en quarantena" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Descarta la superposició" enforcingTitle = "S'està aplicant la política..." viewAnyway = "Mostra el fitxer (la política encara s'està aplicant)" +[policyOption] +autoRedactPhi = "Oculta automàticament PHI" +blockExport = "Bloqueja l'exportació" +contracts = "Contractes" +documents = "Documents" +fedramp = "FedRAMP" +financialReports = "Informes financers" +flagForReview = "Marca per revisar" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Retén" +hrRecords = "Registres de RR. HH." +indefinite = "Indefinit" +insurance = "Assegurances" +invoices = "Factures" +iso27001 = "ISO 27001" +legalFilings = "Presentacions legals" +medicalPhi = "Mèdic / PHI" +never = "Mai" +ninetyDays = "90 dies" +oneYear = "1 any" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Posa el document en quarantena" +routeToBucket = "Encamina al bucket" +s3Bucket = "bucket S3" +sevenYears = "7 anys" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Documents fiscals" +thirtyDays = "30 dies" +threeYears = "3 anys" +webhook = "Webhook" + [portal] comingSoon = "Properament" @@ -8067,10 +8050,6 @@ title = "Sessió caducada" [portal.users] title = "Usuaris" -[portal.users.roles] -subtitle = "Cada rol existeix en tots els plans — el que pot fer cadascun és fix a tota l'organització." -title = "Rols" - [portal.users.roles.admin] label = "Admin (propietari de l'org)" summary = "Governança completa sobre l'espai de treball, la configuració i els membres." diff --git a/frontend/editor/public/locales/cs-CZ/translation.toml b/frontend/editor/public/locales/cs-CZ/translation.toml index 086d3af5ad..cd6f7c4315 100644 --- a/frontend/editor/public/locales/cs-CZ/translation.toml +++ b/frontend/editor/public/locales/cs-CZ/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Smlouvy" -"Financial reports" = "Finanční zprávy" -"HR records" = "HR záznamy" -Insurance = "Pojištění" -Invoices = "Faktury" -"Legal filings" = "Právní podání" -"Medical / PHI" = "Zdravotní / PHI" -"Tax documents" = "Daňové dokumenty" - [policies.enforcement] applying = "Probíhá použití {{names}}" applyingProgress = "Probíhá použití {{names}} ({{done}} z {{total}})" @@ -6025,51 +6015,6 @@ notify = "Upozornit při směrování" onViolation = "Při nesouladu" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 rok" -"30 days" = "30 dní" -"90 days" = "90 dní" -Never = "Nikdy" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Označit ke kontrole" -Hold = "Zadržet" -"Route to bucket" = "Směrovat do bucketu" - -[policies.fieldOption.destination] -Documents = "Dokumenty" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 rok" -"3 years" = "3 roky" -"30 days" = "30 dní" -"7 years" = "7 let" -Indefinite = "Neurčitě" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Automaticky redigovat PHI" -"Block export" = "Blokovat export" -"Flag for review" = "Označit ke kontrole" -"Quarantine document" = "Umístit dokument do karantény" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Zavřít překryvnou vrstvu" enforcingTitle = "Vynucování zásady..." viewAnyway = "Zobrazit soubor (zásada se stále vynucuje)" +[policyOption] +autoRedactPhi = "Automaticky redigovat PHI" +blockExport = "Blokovat export" +contracts = "Smlouvy" +documents = "Dokumenty" +fedramp = "FedRAMP" +financialReports = "Finanční zprávy" +flagForReview = "Označit ke kontrole" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Zadržet" +hrRecords = "HR záznamy" +indefinite = "Neurčitě" +insurance = "Pojištění" +invoices = "Faktury" +iso27001 = "ISO 27001" +legalFilings = "Právní podání" +medicalPhi = "Zdravotní / PHI" +never = "Nikdy" +ninetyDays = "90 dní" +oneYear = "1 rok" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Umístit dokument do karantény" +routeToBucket = "Směrovat do bucketu" +s3Bucket = "S3 bucket" +sevenYears = "7 let" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Daňové dokumenty" +thirtyDays = "30 dní" +threeYears = "3 roky" +webhook = "Webhook" + [portal] comingSoon = "Již brzy" @@ -8067,10 +8050,6 @@ title = "Relace vypršela" [portal.users] title = "Uživatelé" -[portal.users.roles] -subtitle = "Každá role existuje v každém plánu — co která může dělat, je pevně dané napříč organizací." -title = "Role" - [portal.users.roles.admin] label = "Admin (vlastník org.)" summary = "Plná správa governance nad workspace, nastavením a členy." diff --git a/frontend/editor/public/locales/da-DK/translation.toml b/frontend/editor/public/locales/da-DK/translation.toml index 6cc8988263..665eaeece6 100644 --- a/frontend/editor/public/locales/da-DK/translation.toml +++ b/frontend/editor/public/locales/da-DK/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Kontrakter" -"Financial reports" = "Finansrapporter" -"HR records" = "HR-registreringer" -Insurance = "Forsikring" -Invoices = "Fakturaer" -"Legal filings" = "Juridiske indleveringer" -"Medical / PHI" = "Medicinsk / PHI" -"Tax documents" = "Skattedokumenter" - [policies.enforcement] applying = "Anvender {{names}}" applyingProgress = "Anvender {{names}} ({{done}} af {{total}})" @@ -6025,51 +6015,6 @@ notify = "Giv besked ved routing" onViolation = "Når ikke-kompatibel" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 år" -"30 days" = "30 dage" -"90 days" = "90 dage" -Never = "Aldrig" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Markér til gennemgang" -Hold = "Tilbagehold" -"Route to bucket" = "Route til bucket" - -[policies.fieldOption.destination] -Documents = "Dokumenter" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 år" -"3 years" = "3 år" -"30 days" = "30 dage" -"7 years" = "7 år" -Indefinite = "På ubestemt tid" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Auto-rediger PHI" -"Block export" = "Bloker eksport" -"Flag for review" = "Markér til gennemgang" -"Quarantine document" = "Sæt dokument i karantæne" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Afvis overlay" enforcingTitle = "Håndhæver politik..." viewAnyway = "Vis fil (politik håndhæves stadig)" +[policyOption] +autoRedactPhi = "Auto-rediger PHI" +blockExport = "Bloker eksport" +contracts = "Kontrakter" +documents = "Dokumenter" +fedramp = "FedRAMP" +financialReports = "Finansrapporter" +flagForReview = "Markér til gennemgang" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Tilbagehold" +hrRecords = "HR-registreringer" +indefinite = "På ubestemt tid" +insurance = "Forsikring" +invoices = "Fakturaer" +iso27001 = "ISO 27001" +legalFilings = "Juridiske indleveringer" +medicalPhi = "Medicinsk / PHI" +never = "Aldrig" +ninetyDays = "90 dage" +oneYear = "1 år" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Sæt dokument i karantæne" +routeToBucket = "Route til bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 år" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Skattedokumenter" +thirtyDays = "30 dage" +threeYears = "3 år" +webhook = "Webhook" + [portal] comingSoon = "Kommer snart" @@ -8067,10 +8050,6 @@ title = "Session udløbet" [portal.users] title = "Brugere" -[portal.users.roles] -subtitle = "Alle roller findes på alle abonnementer — hvad hver enkelt kan gøre, er fast på tværs af organisationen." -title = "Roller" - [portal.users.roles.admin] label = "Admin (organisationsejer)" summary = "Fuld styring over workspace, indstillinger og medlemmer." diff --git a/frontend/editor/public/locales/de-DE/translation.toml b/frontend/editor/public/locales/de-DE/translation.toml index 0b4c2c0468..2d50d8aa53 100644 --- a/frontend/editor/public/locales/de-DE/translation.toml +++ b/frontend/editor/public/locales/de-DE/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Verträge" -"Financial reports" = "Finanzberichte" -"HR records" = "Personalakten" -Insurance = "Versicherung" -Invoices = "Rechnungen" -"Legal filings" = "Rechtliche Einreichungen" -"Medical / PHI" = "Medizinisch / PHI" -"Tax documents" = "Steuerdokumente" - [policies.enforcement] applying = "Wende {{names}} an" applyingProgress = "Wende {{names}} an ({{done}} von {{total}})" @@ -6025,51 +6015,6 @@ notify = "Bei Weiterleitung benachrichtigen" onViolation = "Bei Nichteinhaltung" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 Jahr" -"30 days" = "30 Tage" -"90 days" = "90 Tage" -Never = "Nie" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Zur Prüfung markieren" -Hold = "Zurückhalten" -"Route to bucket" = "In Bucket weiterleiten" - -[policies.fieldOption.destination] -Documents = "Dokumente" -"S3 bucket" = "S3-Bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 Jahr" -"3 years" = "3 Jahre" -"30 days" = "30 Tage" -"7 years" = "7 Jahre" -Indefinite = "Unbefristet" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "PHI automatisch schwärzen" -"Block export" = "Export blockieren" -"Flag for review" = "Zur Prüfung markieren" -"Quarantine document" = "Dokument unter Quarantäne stellen" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Overlay ausblenden" enforcingTitle = "Richtlinie wird durchgesetzt..." viewAnyway = "Datei anzeigen (Richtlinie wird noch durchgesetzt)" +[policyOption] +autoRedactPhi = "PHI automatisch schwärzen" +blockExport = "Export blockieren" +contracts = "Verträge" +documents = "Dokumente" +fedramp = "FedRAMP" +financialReports = "Finanzberichte" +flagForReview = "Zur Prüfung markieren" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Zurückhalten" +hrRecords = "Personalakten" +indefinite = "Unbefristet" +insurance = "Versicherung" +invoices = "Rechnungen" +iso27001 = "ISO 27001" +legalFilings = "Rechtliche Einreichungen" +medicalPhi = "Medizinisch / PHI" +never = "Nie" +ninetyDays = "90 Tage" +oneYear = "1 Jahr" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Dokument unter Quarantäne stellen" +routeToBucket = "In Bucket weiterleiten" +s3Bucket = "S3-Bucket" +sevenYears = "7 Jahre" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Steuerdokumente" +thirtyDays = "30 Tage" +threeYears = "3 Jahre" +webhook = "Webhook" + [portal] comingSoon = "Demnächst" @@ -8067,10 +8050,6 @@ title = "Sitzung abgelaufen" [portal.users] title = "Benutzer" -[portal.users.roles] -subtitle = "Jede Rolle existiert in jedem Plan — was jede Rolle tun kann, ist in der gesamten Organisation festgelegt." -title = "Rollen" - [portal.users.roles.admin] label = "Admin (Org-Inhaber)" summary = "Vollständige Steuerung über Workspace, Einstellungen und Mitglieder." diff --git a/frontend/editor/public/locales/el-GR/translation.toml b/frontend/editor/public/locales/el-GR/translation.toml index 8c850d6223..677b255d82 100644 --- a/frontend/editor/public/locales/el-GR/translation.toml +++ b/frontend/editor/public/locales/el-GR/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Συμβάσεις" -"Financial reports" = "Οικονομικές αναφορές" -"HR records" = "Αρχεία HR" -Insurance = "Ασφάλειες" -Invoices = "Τιμολόγια" -"Legal filings" = "Νομικές καταθέσεις" -"Medical / PHI" = "Ιατρικά / PHI" -"Tax documents" = "Φορολογικά έγγραφα" - [policies.enforcement] applying = "Εφαρμογή {{names}}" applyingProgress = "Εφαρμογή {{names}} ({{done}} από {{total}})" @@ -6025,51 +6015,6 @@ notify = "Ειδοποίηση κατά τη δρομολόγηση" onViolation = "Όταν δεν συμμορφώνεται" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 έτος" -"30 days" = "30 ημέρες" -"90 days" = "90 ημέρες" -Never = "Ποτέ" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Επισήμανση για έλεγχο" -Hold = "Διατήρηση" -"Route to bucket" = "Δρομολόγηση σε bucket" - -[policies.fieldOption.destination] -Documents = "Έγγραφα" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 έτος" -"3 years" = "3 έτη" -"30 days" = "30 ημέρες" -"7 years" = "7 έτη" -Indefinite = "Επ' αόριστον" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Αυτόματη απόκρυψη PHI" -"Block export" = "Αποκλεισμός εξαγωγής" -"Flag for review" = "Επισήμανση για έλεγχο" -"Quarantine document" = "Καραντίνα εγγράφου" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Απόρριψη επικάλυψης" enforcingTitle = "Επιβολή πολιτικής..." viewAnyway = "Προβολή αρχείου (η πολιτική εξακολουθεί να επιβάλλεται)" +[policyOption] +autoRedactPhi = "Αυτόματη απόκρυψη PHI" +blockExport = "Αποκλεισμός εξαγωγής" +contracts = "Συμβάσεις" +documents = "Έγγραφα" +fedramp = "FedRAMP" +financialReports = "Οικονομικές αναφορές" +flagForReview = "Επισήμανση για έλεγχο" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Διατήρηση" +hrRecords = "Αρχεία HR" +indefinite = "Επ' αόριστον" +insurance = "Ασφάλειες" +invoices = "Τιμολόγια" +iso27001 = "ISO 27001" +legalFilings = "Νομικές καταθέσεις" +medicalPhi = "Ιατρικά / PHI" +never = "Ποτέ" +ninetyDays = "90 ημέρες" +oneYear = "1 έτος" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Καραντίνα εγγράφου" +routeToBucket = "Δρομολόγηση σε bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 έτη" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Φορολογικά έγγραφα" +thirtyDays = "30 ημέρες" +threeYears = "3 έτη" +webhook = "Webhook" + [portal] comingSoon = "Προσεχώς" @@ -8067,10 +8050,6 @@ title = "Η συνεδρία έληξε" [portal.users] title = "Χρήστες" -[portal.users.roles] -subtitle = "Κάθε ρόλος υπάρχει σε κάθε πλάνο — τι μπορεί να κάνει ο καθένας είναι σταθερό σε όλο τον οργανισμό." -title = "Ρόλοι" - [portal.users.roles.admin] label = "Διαχειριστής (Κάτοχος οργανισμού)" summary = "Πλήρης διακυβέρνηση του χώρου εργασίας, των ρυθμίσεων και των μελών." diff --git a/frontend/editor/public/locales/en-GB/translation.toml b/frontend/editor/public/locales/en-GB/translation.toml index 1e43a305e5..bdc49c4258 100644 --- a/frontend/editor/public/locales/en-GB/translation.toml +++ b/frontend/editor/public/locales/en-GB/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Contracts" -"Financial reports" = "Financial reports" -"HR records" = "HR records" -Insurance = "Insurance" -Invoices = "Invoices" -"Legal filings" = "Legal filings" -"Medical / PHI" = "Medical / PHI" -"Tax documents" = "Tax documents" - [policies.enforcement] applying = "Applying {{names}}" applyingProgress = "Applying {{names}} ({{done}} of {{total}})" @@ -6025,51 +6015,6 @@ notify = "Notify on route" onViolation = "When non-compliant" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 year" -"30 days" = "30 days" -"90 days" = "90 days" -Never = "Never" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Flag for review" -Hold = "Hold" -"Route to bucket" = "Route to bucket" - -[policies.fieldOption.destination] -Documents = "Documents" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 year" -"3 years" = "3 years" -"30 days" = "30 days" -"7 years" = "7 years" -Indefinite = "Indefinite" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Auto-redact PHI" -"Block export" = "Block export" -"Flag for review" = "Flag for review" -"Quarantine document" = "Quarantine document" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Dismiss overlay" enforcingTitle = "Enforcing policy..." viewAnyway = "View file (policy still enforcing)" +[policyOption] +autoRedactPhi = "Auto-redact PHI" +blockExport = "Block export" +contracts = "Contracts" +documents = "Documents" +fedramp = "FedRAMP" +financialReports = "Financial reports" +flagForReview = "Flag for review" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Hold" +hrRecords = "HR records" +indefinite = "Indefinite" +insurance = "Insurance" +invoices = "Invoices" +iso27001 = "ISO 27001" +legalFilings = "Legal filings" +medicalPhi = "Medical / PHI" +never = "Never" +ninetyDays = "90 days" +oneYear = "1 year" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Quarantine document" +routeToBucket = "Route to bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 years" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Tax documents" +thirtyDays = "30 days" +threeYears = "3 years" +webhook = "Webhook" + [portal] comingSoon = "Coming soon" @@ -8067,10 +8050,6 @@ title = "Session expired" [portal.users] title = "Users" -[portal.users.roles] -subtitle = "Every role exists on every plan — what each one can do is fixed across the organisation." -title = "Roles" - [portal.users.roles.admin] label = "Admin (Org owner)" summary = "Full governance over the workspace, settings and members." diff --git a/frontend/editor/public/locales/en-US/translation.toml b/frontend/editor/public/locales/en-US/translation.toml index ca93b97d33..3c25732878 100644 --- a/frontend/editor/public/locales/en-US/translation.toml +++ b/frontend/editor/public/locales/en-US/translation.toml @@ -5981,51 +5981,6 @@ successTitle = "{{names}} applied" summaryMore = "{{first}}, {{second}} and {{more}} more" summaryTwo = "{{first}} and {{second}}" -[policies.fieldOption.archiveAfter] -"1 year" = "1 year" -"30 days" = "30 days" -"90 days" = "90 days" -Never = "Never" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Flag for review" -Hold = "Hold" -"Route to bucket" = "Route to bucket" - -[policies.fieldOption.destination] -Documents = "Documents" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 year" -"3 years" = "3 years" -"30 days" = "30 days" -"7 years" = "7 years" -Indefinite = "Indefinite" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Auto-redact PHI" -"Block export" = "Block export" -"Flag for review" = "Flag for review" -"Quarantine document" = "Quarantine document" - [policies.labels] add = "Add" addPlaceholder = "Add a label…" @@ -6072,6 +6027,45 @@ dismiss = "Dismiss overlay" enforcingTitle = "Enforcing policy..." viewAnyway = "View file (policy still enforcing)" +[policyOption] +autoRedactPhi = "Auto-redact PHI" +blockExport = "Block export" +ccpa = "CCPA" +contracts = "Contracts" +documents = "Documents" +fedramp = "FedRAMP" +financialReports = "Financial reports" +flagForReview = "Flag for review" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Hold" +hrRecords = "HR records" +indefinite = "Indefinite" +insurance = "Insurance" +invoices = "Invoices" +iso27001 = "ISO 27001" +legalFilings = "Legal filings" +medicalPhi = "Medical / PHI" +never = "Never" +ninetyDays = "90 days" +oneYear = "1 year" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Quarantine document" +routeToBucket = "Route to bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 years" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Tax documents" +thirtyDays = "30 days" +threeYears = "3 years" +webhook = "Webhook" + [portal] comingSoon = "Coming soon" @@ -8117,10 +8111,6 @@ title = "Session expired" [portal.users] title = "Users" -[portal.users.roles] -subtitle = "Every role exists on every plan — what each one can do is fixed across the org." -title = "Roles" - [portal.users.roles.admin] label = "Admin (Org owner)" summary = "Full governance over the workspace, settings and members." diff --git a/frontend/editor/public/locales/es-ES/translation.toml b/frontend/editor/public/locales/es-ES/translation.toml index 2fbcfcc243..78d48ef9a0 100644 --- a/frontend/editor/public/locales/es-ES/translation.toml +++ b/frontend/editor/public/locales/es-ES/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Contratos" -"Financial reports" = "Informes financieros" -"HR records" = "Registros de RR. HH." -Insurance = "Seguros" -Invoices = "Facturas" -"Legal filings" = "Presentaciones legales" -"Medical / PHI" = "Médico / PHI" -"Tax documents" = "Documentos fiscales" - [policies.enforcement] applying = "Aplicando {{names}}" applyingProgress = "Aplicando {{names}} ({{done}} de {{total}})" @@ -6025,51 +6015,6 @@ notify = "Notificar al enrutar" onViolation = "Cuando no cumple" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 año" -"30 days" = "30 días" -"90 days" = "90 días" -Never = "Nunca" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Marcar para revisión" -Hold = "Retener" -"Route to bucket" = "Enrutar al bucket" - -[policies.fieldOption.destination] -Documents = "Documentos" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 año" -"3 years" = "3 años" -"30 days" = "30 días" -"7 years" = "7 años" -Indefinite = "Indefinido" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Censurar PHI automáticamente" -"Block export" = "Bloquear exportación" -"Flag for review" = "Marcar para revisión" -"Quarantine document" = "Poner documento en cuarentena" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Descartar superposición" enforcingTitle = "Aplicando política..." viewAnyway = "Ver archivo (la política aún se está aplicando)" +[policyOption] +autoRedactPhi = "Censurar PHI automáticamente" +blockExport = "Bloquear exportación" +contracts = "Contratos" +documents = "Documentos" +fedramp = "FedRAMP" +financialReports = "Informes financieros" +flagForReview = "Marcar para revisión" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Retener" +hrRecords = "Registros de RR. HH." +indefinite = "Indefinido" +insurance = "Seguros" +invoices = "Facturas" +iso27001 = "ISO 27001" +legalFilings = "Presentaciones legales" +medicalPhi = "Médico / PHI" +never = "Nunca" +ninetyDays = "90 días" +oneYear = "1 año" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Poner documento en cuarentena" +routeToBucket = "Enrutar al bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 años" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Documentos fiscales" +thirtyDays = "30 días" +threeYears = "3 años" +webhook = "Webhook" + [portal] comingSoon = "Próximamente" @@ -8067,10 +8050,6 @@ title = "Sesión caducada" [portal.users] title = "Usuarios" -[portal.users.roles] -subtitle = "Cada rol existe en todos los planes — lo que cada uno puede hacer es fijo en toda la organización." -title = "Roles" - [portal.users.roles.admin] label = "Admin (propietario de la org)" summary = "Gobierno completo sobre el espacio de trabajo, los ajustes y los miembros." diff --git a/frontend/editor/public/locales/eu-ES/translation.toml b/frontend/editor/public/locales/eu-ES/translation.toml index 1742663607..666886a8c7 100644 --- a/frontend/editor/public/locales/eu-ES/translation.toml +++ b/frontend/editor/public/locales/eu-ES/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Kontratuak" -"Financial reports" = "Finantza-txostenak" -"HR records" = "Giza baliabideen erregistroak" -Insurance = "Aseguruak" -Invoices = "Fakturak" -"Legal filings" = "Legezko aurkezpenak" -"Medical / PHI" = "Medikua / PHI" -"Tax documents" = "Zerga-dokumentuak" - [policies.enforcement] applying = "{{names}} aplikatzen" applyingProgress = "{{names}} aplikatzen ({{done}}/{{total}})" @@ -6025,51 +6015,6 @@ notify = "Jakinarazi bideratzean" onViolation = "Betetzen ez denean" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 urte" -"30 days" = "30 egun" -"90 days" = "90 egun" -Never = "Inoiz ez" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Markatu berrikusteko" -Hold = "Eutsi" -"Route to bucket" = "Bideratu bucket-era" - -[policies.fieldOption.destination] -Documents = "Dokumentuak" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 urte" -"3 years" = "3 urte" -"30 days" = "30 egun" -"7 years" = "7 urte" -Indefinite = "Mugagabe" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Automatikoki ezkutatu PHI" -"Block export" = "Blokeatu esportazioa" -"Flag for review" = "Markatu berrikusteko" -"Quarantine document" = "Jarri dokumentua berrogeialdian" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Baztertu gainjartzea" enforcingTitle = "Politika betearazten..." viewAnyway = "Ikusi fitxategia (politika oraindik betearazten ari da)" +[policyOption] +autoRedactPhi = "Automatikoki ezkutatu PHI" +blockExport = "Blokeatu esportazioa" +contracts = "Kontratuak" +documents = "Dokumentuak" +fedramp = "FedRAMP" +financialReports = "Finantza-txostenak" +flagForReview = "Markatu berrikusteko" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Eutsi" +hrRecords = "Giza baliabideen erregistroak" +indefinite = "Mugagabe" +insurance = "Aseguruak" +invoices = "Fakturak" +iso27001 = "ISO 27001" +legalFilings = "Legezko aurkezpenak" +medicalPhi = "Medikua / PHI" +never = "Inoiz ez" +ninetyDays = "90 egun" +oneYear = "1 urte" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Jarri dokumentua berrogeialdian" +routeToBucket = "Bideratu bucket-era" +s3Bucket = "S3 bucket" +sevenYears = "7 urte" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Zerga-dokumentuak" +thirtyDays = "30 egun" +threeYears = "3 urte" +webhook = "Webhook" + [portal] comingSoon = "Laster" @@ -8067,10 +8050,6 @@ title = "Saioa iraungi da" [portal.users] title = "Erabiltzaileak" -[portal.users.roles] -subtitle = "Rol guztiak plan guztietan daude — bakoitzak egin dezakeena finkoa da erakunde osoan." -title = "Rolak" - [portal.users.roles.admin] label = "Admin (erakundearen jabea)" summary = "Lan-eremuaren, ezarpenen eta kideen gaineko gobernantza osoa." diff --git a/frontend/editor/public/locales/fa-IR/translation.toml b/frontend/editor/public/locales/fa-IR/translation.toml index ce465bf21f..b6e4d4903d 100644 --- a/frontend/editor/public/locales/fa-IR/translation.toml +++ b/frontend/editor/public/locales/fa-IR/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "قراردادها" -"Financial reports" = "گزارش‌های مالی" -"HR records" = "سوابق منابع انسانی" -Insurance = "بیمه" -Invoices = "فاکتورها" -"Legal filings" = "پرونده‌های حقوقی" -"Medical / PHI" = "پزشکی / PHI" -"Tax documents" = "اسناد مالیاتی" - [policies.enforcement] applying = "در حال اعمال {{names}}" applyingProgress = "در حال اعمال {{names}} ({{done}} از {{total}})" @@ -6025,51 +6015,6 @@ notify = "اعلان هنگام مسیریابی" onViolation = "هنگام عدم انطباق" webhookUrl = "URL Webhook" -[policies.fieldOption.archiveAfter] -"1 year" = "۱ سال" -"30 days" = "۳۰ روز" -"90 days" = "۹۰ روز" -Never = "هرگز" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "علامت‌گذاری برای بازبینی" -Hold = "نگه داشتن" -"Route to bucket" = "مسیریابی به bucket" - -[policies.fieldOption.destination] -Documents = "اسناد" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "۱ سال" -"3 years" = "۳ سال" -"30 days" = "۳۰ روز" -"7 years" = "۷ سال" -Indefinite = "نامحدود" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "حذف خودکار PHI" -"Block export" = "مسدود کردن خروجی" -"Flag for review" = "علامت‌گذاری برای بازبینی" -"Quarantine document" = "قرنطینه کردن سند" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "بستن پوشش" enforcingTitle = "در حال اعمال خط‌مشی..." viewAnyway = "مشاهده فایل (خط‌مشی همچنان در حال اعمال است)" +[policyOption] +autoRedactPhi = "حذف خودکار PHI" +blockExport = "مسدود کردن خروجی" +contracts = "قراردادها" +documents = "اسناد" +fedramp = "FedRAMP" +financialReports = "گزارش‌های مالی" +flagForReview = "علامت‌گذاری برای بازبینی" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "نگه داشتن" +hrRecords = "سوابق منابع انسانی" +indefinite = "نامحدود" +insurance = "بیمه" +invoices = "فاکتورها" +iso27001 = "ISO 27001" +legalFilings = "پرونده‌های حقوقی" +medicalPhi = "پزشکی / PHI" +never = "هرگز" +ninetyDays = "۹۰ روز" +oneYear = "۱ سال" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "قرنطینه کردن سند" +routeToBucket = "مسیریابی به bucket" +s3Bucket = "S3 bucket" +sevenYears = "۷ سال" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "اسناد مالیاتی" +thirtyDays = "۳۰ روز" +threeYears = "۳ سال" +webhook = "Webhook" + [portal] comingSoon = "به‌زودی" @@ -8067,10 +8050,6 @@ title = "نشست منقضی شد" [portal.users] title = "کاربران" -[portal.users.roles] -subtitle = "هر نقش در هر طرح وجود دارد — کاری که هر نقش می‌تواند انجام دهد در کل سازمان ثابت است." -title = "نقش‌ها" - [portal.users.roles.admin] label = "مدیر (مالک سازمان)" summary = "حاکمیت کامل بر فضای کاری، تنظیمات و اعضا." diff --git a/frontend/editor/public/locales/fr-FR/translation.toml b/frontend/editor/public/locales/fr-FR/translation.toml index dff0ff30c4..9292811eac 100644 --- a/frontend/editor/public/locales/fr-FR/translation.toml +++ b/frontend/editor/public/locales/fr-FR/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Contrats" -"Financial reports" = "Rapports financiers" -"HR records" = "Dossiers RH" -Insurance = "Assurance" -Invoices = "Factures" -"Legal filings" = "Dépôts juridiques" -"Medical / PHI" = "Médical / PHI" -"Tax documents" = "Documents fiscaux" - [policies.enforcement] applying = "Application de {{names}}" applyingProgress = "Application de {{names}} ({{done}} sur {{total}})" @@ -6025,51 +6015,6 @@ notify = "Notifier lors du routage" onViolation = "En cas de non-conformité" webhookUrl = "URL du webhook" -[policies.fieldOption.archiveAfter] -"1 year" = "1 an" -"30 days" = "30 jours" -"90 days" = "90 jours" -Never = "Jamais" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Marquer pour examen" -Hold = "Mettre en attente" -"Route to bucket" = "Acheminer vers le bucket" - -[policies.fieldOption.destination] -Documents = "Documents" -"S3 bucket" = "Bucket S3" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 an" -"3 years" = "3 ans" -"30 days" = "30 jours" -"7 years" = "7 ans" -Indefinite = "Indéfiniment" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Masquer automatiquement les PHI" -"Block export" = "Bloquer l’exportation" -"Flag for review" = "Marquer pour examen" -"Quarantine document" = "Mettre le document en quarantaine" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Fermer la superposition" enforcingTitle = "Application de la politique..." viewAnyway = "Voir le fichier (politique toujours en cours d’application)" +[policyOption] +autoRedactPhi = "Masquer automatiquement les PHI" +blockExport = "Bloquer l’exportation" +contracts = "Contrats" +documents = "Documents" +fedramp = "FedRAMP" +financialReports = "Rapports financiers" +flagForReview = "Marquer pour examen" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Mettre en attente" +hrRecords = "Dossiers RH" +indefinite = "Indéfiniment" +insurance = "Assurance" +invoices = "Factures" +iso27001 = "ISO 27001" +legalFilings = "Dépôts juridiques" +medicalPhi = "Médical / PHI" +never = "Jamais" +ninetyDays = "90 jours" +oneYear = "1 an" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Mettre le document en quarantaine" +routeToBucket = "Acheminer vers le bucket" +s3Bucket = "Bucket S3" +sevenYears = "7 ans" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Documents fiscaux" +thirtyDays = "30 jours" +threeYears = "3 ans" +webhook = "Webhook" + [portal] comingSoon = "Bientôt disponible" @@ -8067,10 +8050,6 @@ title = "Session expirée" [portal.users] title = "Utilisateurs" -[portal.users.roles] -subtitle = "Chaque rôle existe sur chaque plan — ce que chacun peut faire est fixe dans toute l’organisation." -title = "Rôles" - [portal.users.roles.admin] label = "Admin (propriétaire de l’organisation)" summary = "Gouvernance complète de l’espace de travail, des paramètres et des membres." diff --git a/frontend/editor/public/locales/ga-IE/translation.toml b/frontend/editor/public/locales/ga-IE/translation.toml index d44eee53e3..39370baa7e 100644 --- a/frontend/editor/public/locales/ga-IE/translation.toml +++ b/frontend/editor/public/locales/ga-IE/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Conarthaí" -"Financial reports" = "Tuarascálacha airgeadais" -"HR records" = "Taifid AD" -Insurance = "Árachas" -Invoices = "Sonraisc" -"Legal filings" = "Comhdúcháin dlí" -"Medical / PHI" = "Leighis / PHI" -"Tax documents" = "Doiciméid chánach" - [policies.enforcement] applying = "Á chur {{names}} i bhfeidhm" applyingProgress = "Á chur {{names}} i bhfeidhm ({{done}} as {{total}})" @@ -6025,51 +6015,6 @@ notify = "Cuir ar an eolas ar ródú" onViolation = "Nuair nach bhfuil sé comhlíontach" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 bhliain" -"30 days" = "30 lá" -"90 days" = "90 lá" -Never = "Riamh" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Marcáil le hathbhreithniú" -Hold = "Coinnigh" -"Route to bucket" = "Ródaigh chuig bucket" - -[policies.fieldOption.destination] -Documents = "Doiciméid" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 bhliain" -"3 years" = "3 bliana" -"30 days" = "30 lá" -"7 years" = "7 mbliana" -Indefinite = "Gan teorainn" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Ceil PHI go huathoibríoch" -"Block export" = "Blocáil easpórtáil" -"Flag for review" = "Marcáil le hathbhreithniú" -"Quarantine document" = "Cuir doiciméad i gcoraintín" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Dún forleagan" enforcingTitle = "Polasaí á chur i bhfeidhm..." viewAnyway = "Amharc ar chomhad (polasaí fós á chur i bhfeidhm)" +[policyOption] +autoRedactPhi = "Ceil PHI go huathoibríoch" +blockExport = "Blocáil easpórtáil" +contracts = "Conarthaí" +documents = "Doiciméid" +fedramp = "FedRAMP" +financialReports = "Tuarascálacha airgeadais" +flagForReview = "Marcáil le hathbhreithniú" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Coinnigh" +hrRecords = "Taifid AD" +indefinite = "Gan teorainn" +insurance = "Árachas" +invoices = "Sonraisc" +iso27001 = "ISO 27001" +legalFilings = "Comhdúcháin dlí" +medicalPhi = "Leighis / PHI" +never = "Riamh" +ninetyDays = "90 lá" +oneYear = "1 bhliain" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Cuir doiciméad i gcoraintín" +routeToBucket = "Ródaigh chuig bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 mbliana" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Doiciméid chánach" +thirtyDays = "30 lá" +threeYears = "3 bliana" +webhook = "Webhook" + [portal] comingSoon = "Ag teacht go luath" @@ -8067,10 +8050,6 @@ title = "Seisiún imithe in éag" [portal.users] title = "Úsáideoirí" -[portal.users.roles] -subtitle = "Tá gach ról ann ar gach plean — tá an méid is féidir le gach ceann a dhéanamh socraithe ar fud na heagraíochta." -title = "Róil" - [portal.users.roles.admin] label = "Riarachán (Úinéir eagraíochta)" summary = "Rialachas iomlán ar an spás oibre, socruithe agus baill." diff --git a/frontend/editor/public/locales/hi-IN/translation.toml b/frontend/editor/public/locales/hi-IN/translation.toml index 5baffccd4a..769ceacdb4 100644 --- a/frontend/editor/public/locales/hi-IN/translation.toml +++ b/frontend/editor/public/locales/hi-IN/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "अनुबंध" -"Financial reports" = "वित्तीय रिपोर्ट" -"HR records" = "HR रिकॉर्ड" -Insurance = "बीमा" -Invoices = "इनवॉइस" -"Legal filings" = "कानूनी फ़ाइलिंग" -"Medical / PHI" = "मेडिकल / PHI" -"Tax documents" = "कर दस्तावेज़" - [policies.enforcement] applying = "{{names}} लागू किए जा रहे हैं" applyingProgress = "{{names}} लागू किए जा रहे हैं ({{done}}/{{total}})" @@ -6025,51 +6015,6 @@ notify = "रूट पर सूचित करें" onViolation = "अनुपालन न होने पर" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 वर्ष" -"30 days" = "30 दिन" -"90 days" = "90 दिन" -Never = "कभी नहीं" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "समीक्षा के लिए फ़्लैग करें" -Hold = "होल्ड करें" -"Route to bucket" = "बकेट में रूट करें" - -[policies.fieldOption.destination] -Documents = "दस्तावेज़" -"S3 bucket" = "S3 बकेट" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 वर्ष" -"3 years" = "3 वर्ष" -"30 days" = "30 दिन" -"7 years" = "7 वर्ष" -Indefinite = "अनिश्चित काल" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "PHI को अपने-आप redact करें" -"Block export" = "export ब्लॉक करें" -"Flag for review" = "समीक्षा के लिए फ़्लैग करें" -"Quarantine document" = "दस्तावेज़ को क्वारंटीन करें" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "ओवरले हटाएँ" enforcingTitle = "policy लागू हो रही है..." viewAnyway = "फ़ाइल देखें (policy अभी भी लागू हो रही है)" +[policyOption] +autoRedactPhi = "PHI को अपने-आप redact करें" +blockExport = "export ब्लॉक करें" +contracts = "अनुबंध" +documents = "दस्तावेज़" +fedramp = "FedRAMP" +financialReports = "वित्तीय रिपोर्ट" +flagForReview = "समीक्षा के लिए फ़्लैग करें" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "होल्ड करें" +hrRecords = "HR रिकॉर्ड" +indefinite = "अनिश्चित काल" +insurance = "बीमा" +invoices = "इनवॉइस" +iso27001 = "ISO 27001" +legalFilings = "कानूनी फ़ाइलिंग" +medicalPhi = "मेडिकल / PHI" +never = "कभी नहीं" +ninetyDays = "90 दिन" +oneYear = "1 वर्ष" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "दस्तावेज़ को क्वारंटीन करें" +routeToBucket = "बकेट में रूट करें" +s3Bucket = "S3 बकेट" +sevenYears = "7 वर्ष" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "कर दस्तावेज़" +thirtyDays = "30 दिन" +threeYears = "3 वर्ष" +webhook = "Webhook" + [portal] comingSoon = "जल्द आ रहा है" @@ -8067,10 +8050,6 @@ title = "Session समाप्त" [portal.users] title = "उपयोगकर्ता" -[portal.users.roles] -subtitle = "हर role हर plan पर मौजूद है — प्रत्येक क्या कर सकता है, यह org में fixed है।" -title = "Roles" - [portal.users.roles.admin] label = "Admin (Org owner)" summary = "Workspace, settings और members पर पूर्ण governance।" diff --git a/frontend/editor/public/locales/hr-HR/translation.toml b/frontend/editor/public/locales/hr-HR/translation.toml index bd1fa92372..75df8b6e28 100644 --- a/frontend/editor/public/locales/hr-HR/translation.toml +++ b/frontend/editor/public/locales/hr-HR/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Ugovori" -"Financial reports" = "Financijska izvješća" -"HR records" = "HR evidencija" -Insurance = "Osiguranje" -Invoices = "Računi" -"Legal filings" = "Pravni podnesci" -"Medical / PHI" = "Medicinski / PHI" -"Tax documents" = "Porezni dokumenti" - [policies.enforcement] applying = "Primjenjuje se {{names}}" applyingProgress = "Primjenjuje se {{names}} ({{done}} od {{total}})" @@ -6025,51 +6015,6 @@ notify = "Obavijesti pri usmjeravanju" onViolation = "Kada nije usklađeno" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 godina" -"30 days" = "30 dana" -"90 days" = "90 dana" -Never = "Nikad" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Označi za pregled" -Hold = "Zadrži" -"Route to bucket" = "Usmjeri u bucket" - -[policies.fieldOption.destination] -Documents = "Dokumenti" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 godina" -"3 years" = "3 godine" -"30 days" = "30 dana" -"7 years" = "7 godina" -Indefinite = "Neograničeno" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Automatski redigiraj PHI" -"Block export" = "Blokiraj izvoz" -"Flag for review" = "Označi za pregled" -"Quarantine document" = "Stavi dokument u karantenu" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Zatvori preklapanje" enforcingTitle = "Primjena pravila..." viewAnyway = "Prikaži datoteku (pravilo se još primjenjuje)" +[policyOption] +autoRedactPhi = "Automatski redigiraj PHI" +blockExport = "Blokiraj izvoz" +contracts = "Ugovori" +documents = "Dokumenti" +fedramp = "FedRAMP" +financialReports = "Financijska izvješća" +flagForReview = "Označi za pregled" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Zadrži" +hrRecords = "HR evidencija" +indefinite = "Neograničeno" +insurance = "Osiguranje" +invoices = "Računi" +iso27001 = "ISO 27001" +legalFilings = "Pravni podnesci" +medicalPhi = "Medicinski / PHI" +never = "Nikad" +ninetyDays = "90 dana" +oneYear = "1 godina" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Stavi dokument u karantenu" +routeToBucket = "Usmjeri u bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 godina" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Porezni dokumenti" +thirtyDays = "30 dana" +threeYears = "3 godine" +webhook = "Webhook" + [portal] comingSoon = "Uskoro" @@ -8067,10 +8050,6 @@ title = "Sesija je istekla" [portal.users] title = "Korisnici" -[portal.users.roles] -subtitle = "Svaka uloga postoji na svakom planu — što svaka može raditi fiksno je na razini organizacije." -title = "Uloge" - [portal.users.roles.admin] label = "Admin (vlasnik organizacije)" summary = "Potpuno upravljanje radnim prostorom, postavkama i članovima." diff --git a/frontend/editor/public/locales/hu-HU/translation.toml b/frontend/editor/public/locales/hu-HU/translation.toml index 14e56d4467..de318db739 100644 --- a/frontend/editor/public/locales/hu-HU/translation.toml +++ b/frontend/editor/public/locales/hu-HU/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Szerződések" -"Financial reports" = "Pénzügyi jelentések" -"HR records" = "HR nyilvántartások" -Insurance = "Biztosítás" -Invoices = "Számlák" -"Legal filings" = "Jogi beadványok" -"Medical / PHI" = "Orvosi / PHI" -"Tax documents" = "Adóügyi dokumentumok" - [policies.enforcement] applying = "A(z) {{names}} alkalmazása" applyingProgress = "A(z) {{names}} alkalmazása ({{done}} / {{total}})" @@ -6025,51 +6015,6 @@ notify = "Értesítés útvonalon" onViolation = "Ha nem megfelelő" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 év" -"30 days" = "30 nap" -"90 days" = "90 nap" -Never = "Soha" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Megjelölés felülvizsgálatra" -Hold = "Visszatartás" -"Route to bucket" = "Továbbítás bucketbe" - -[policies.fieldOption.destination] -Documents = "Dokumentumok" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 év" -"3 years" = "3 év" -"30 days" = "30 nap" -"7 years" = "7 év" -Indefinite = "Határozatlan ideig" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "PHI automatikus kitakarása" -"Block export" = "Exportálás blokkolása" -"Flag for review" = "Megjelölés felülvizsgálatra" -"Quarantine document" = "Dokumentum karanténba helyezése" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Átfedés elvetése" enforcingTitle = "Szabályzat érvényesítése..." viewAnyway = "Fájl megtekintése (a szabályzat érvényesítése még tart)" +[policyOption] +autoRedactPhi = "PHI automatikus kitakarása" +blockExport = "Exportálás blokkolása" +contracts = "Szerződések" +documents = "Dokumentumok" +fedramp = "FedRAMP" +financialReports = "Pénzügyi jelentések" +flagForReview = "Megjelölés felülvizsgálatra" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Visszatartás" +hrRecords = "HR nyilvántartások" +indefinite = "Határozatlan ideig" +insurance = "Biztosítás" +invoices = "Számlák" +iso27001 = "ISO 27001" +legalFilings = "Jogi beadványok" +medicalPhi = "Orvosi / PHI" +never = "Soha" +ninetyDays = "90 nap" +oneYear = "1 év" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Dokumentum karanténba helyezése" +routeToBucket = "Továbbítás bucketbe" +s3Bucket = "S3 bucket" +sevenYears = "7 év" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Adóügyi dokumentumok" +thirtyDays = "30 nap" +threeYears = "3 év" +webhook = "Webhook" + [portal] comingSoon = "Hamarosan" @@ -8067,10 +8050,6 @@ title = "Munkamenet lejárt" [portal.users] title = "Felhasználók" -[portal.users.roles] -subtitle = "Minden szerepkör minden csomagban létezik — az, hogy melyik mit tehet, szervezetszerte rögzített." -title = "Szerepkörök" - [portal.users.roles.admin] label = "Admin (szervezettulajdonos)" summary = "Teljes irányítás a munkaterület, beállítások és tagok felett." diff --git a/frontend/editor/public/locales/id-ID/translation.toml b/frontend/editor/public/locales/id-ID/translation.toml index efcb1e5f28..d25a0eb816 100644 --- a/frontend/editor/public/locales/id-ID/translation.toml +++ b/frontend/editor/public/locales/id-ID/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Kontrak" -"Financial reports" = "Laporan keuangan" -"HR records" = "Catatan HR" -Insurance = "Asuransi" -Invoices = "Faktur" -"Legal filings" = "Pengajuan hukum" -"Medical / PHI" = "Medis / PHI" -"Tax documents" = "Dokumen pajak" - [policies.enforcement] applying = "Menerapkan {{names}}" applyingProgress = "Menerapkan {{names}} ({{done}} dari {{total}})" @@ -6025,51 +6015,6 @@ notify = "Beri tahu saat dirutekan" onViolation = "Saat tidak patuh" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 tahun" -"30 days" = "30 hari" -"90 days" = "90 hari" -Never = "Tidak pernah" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Tandai untuk ditinjau" -Hold = "Tahan" -"Route to bucket" = "Rutekan ke bucket" - -[policies.fieldOption.destination] -Documents = "Dokumen" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 tahun" -"3 years" = "3 tahun" -"30 days" = "30 hari" -"7 years" = "7 tahun" -Indefinite = "Tanpa batas" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Redaksi otomatis PHI" -"Block export" = "Blokir ekspor" -"Flag for review" = "Tandai untuk ditinjau" -"Quarantine document" = "Karantina dokumen" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Tutup overlay" enforcingTitle = "Menerapkan kebijakan..." viewAnyway = "Lihat file (kebijakan masih diterapkan)" +[policyOption] +autoRedactPhi = "Redaksi otomatis PHI" +blockExport = "Blokir ekspor" +contracts = "Kontrak" +documents = "Dokumen" +fedramp = "FedRAMP" +financialReports = "Laporan keuangan" +flagForReview = "Tandai untuk ditinjau" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Tahan" +hrRecords = "Catatan HR" +indefinite = "Tanpa batas" +insurance = "Asuransi" +invoices = "Faktur" +iso27001 = "ISO 27001" +legalFilings = "Pengajuan hukum" +medicalPhi = "Medis / PHI" +never = "Tidak pernah" +ninetyDays = "90 hari" +oneYear = "1 tahun" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Karantina dokumen" +routeToBucket = "Rutekan ke bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 tahun" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Dokumen pajak" +thirtyDays = "30 hari" +threeYears = "3 tahun" +webhook = "Webhook" + [portal] comingSoon = "Segera hadir" @@ -8067,10 +8050,6 @@ title = "Sesi kedaluwarsa" [portal.users] title = "Pengguna" -[portal.users.roles] -subtitle = "Setiap peran ada di setiap paket — apa yang dapat dilakukan masing-masing tetap di seluruh org." -title = "Peran" - [portal.users.roles.admin] label = "Admin (Pemilik org)" summary = "Tata kelola penuh atas workspace, pengaturan, dan anggota." diff --git a/frontend/editor/public/locales/it-IT/translation.toml b/frontend/editor/public/locales/it-IT/translation.toml index e86508ef96..4806e5c5e2 100644 --- a/frontend/editor/public/locales/it-IT/translation.toml +++ b/frontend/editor/public/locales/it-IT/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Contratti" -"Financial reports" = "Report finanziari" -"HR records" = "Record HR" -Insurance = "Assicurazione" -Invoices = "Fatture" -"Legal filings" = "Depositi legali" -"Medical / PHI" = "Medico / PHI" -"Tax documents" = "Documenti fiscali" - [policies.enforcement] applying = "Applicazione di {{names}}" applyingProgress = "Applicazione di {{names}} ({{done}} di {{total}})" @@ -6025,51 +6015,6 @@ notify = "Notifica su instradamento" onViolation = "Quando non conforme" webhookUrl = "URL webhook" -[policies.fieldOption.archiveAfter] -"1 year" = "1 anno" -"30 days" = "30 giorni" -"90 days" = "90 giorni" -Never = "Mai" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Segnala per revisione" -Hold = "Trattieni" -"Route to bucket" = "Instrada al bucket" - -[policies.fieldOption.destination] -Documents = "Documenti" -"S3 bucket" = "Bucket S3" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 anno" -"3 years" = "3 anni" -"30 days" = "30 giorni" -"7 years" = "7 anni" -Indefinite = "A tempo indeterminato" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Oscura automaticamente PHI" -"Block export" = "Blocca esportazione" -"Flag for review" = "Segnala per revisione" -"Quarantine document" = "Metti documento in quarantena" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Chiudi overlay" enforcingTitle = "Applicazione criterio in corso..." viewAnyway = "Visualizza file (criterio ancora in applicazione)" +[policyOption] +autoRedactPhi = "Oscura automaticamente PHI" +blockExport = "Blocca esportazione" +contracts = "Contratti" +documents = "Documenti" +fedramp = "FedRAMP" +financialReports = "Report finanziari" +flagForReview = "Segnala per revisione" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Trattieni" +hrRecords = "Record HR" +indefinite = "A tempo indeterminato" +insurance = "Assicurazione" +invoices = "Fatture" +iso27001 = "ISO 27001" +legalFilings = "Depositi legali" +medicalPhi = "Medico / PHI" +never = "Mai" +ninetyDays = "90 giorni" +oneYear = "1 anno" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Metti documento in quarantena" +routeToBucket = "Instrada al bucket" +s3Bucket = "Bucket S3" +sevenYears = "7 anni" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Documenti fiscali" +thirtyDays = "30 giorni" +threeYears = "3 anni" +webhook = "Webhook" + [portal] comingSoon = "Disponibile a breve" @@ -8067,10 +8050,6 @@ title = "Sessione scaduta" [portal.users] title = "Utenti" -[portal.users.roles] -subtitle = "Ogni ruolo esiste su ogni piano — ciò che ciascuno può fare è fisso in tutta l'organizzazione." -title = "Ruoli" - [portal.users.roles.admin] label = "Admin (proprietario org)" summary = "Governance completa su workspace, impostazioni e membri." diff --git a/frontend/editor/public/locales/ja-JP/translation.toml b/frontend/editor/public/locales/ja-JP/translation.toml index 2474e53c75..843f2c055c 100644 --- a/frontend/editor/public/locales/ja-JP/translation.toml +++ b/frontend/editor/public/locales/ja-JP/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "契約書" -"Financial reports" = "財務報告書" -"HR records" = "人事記録" -Insurance = "保険" -Invoices = "請求書" -"Legal filings" = "法的提出書類" -"Medical / PHI" = "医療 / PHI" -"Tax documents" = "税務書類" - [policies.enforcement] applying = "{{names}} を適用中" applyingProgress = "{{names}} を適用中({{total}} 中 {{done}})" @@ -6025,51 +6015,6 @@ notify = "ルート時に通知" onViolation = "非準拠時" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1年" -"30 days" = "30日" -"90 days" = "90日" -Never = "なし" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "レビュー用にフラグ付け" -Hold = "保留" -"Route to bucket" = "バケットへルーティング" - -[policies.fieldOption.destination] -Documents = "ドキュメント" -"S3 bucket" = "S3 バケット" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1年" -"3 years" = "3年" -"30 days" = "30日" -"7 years" = "7年" -Indefinite = "無期限" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "PHIを自動墨消し" -"Block export" = "エクスポートをブロック" -"Flag for review" = "レビュー用にフラグ付け" -"Quarantine document" = "ドキュメントを隔離" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "オーバーレイを閉じる" enforcingTitle = "ポリシーを適用中..." viewAnyway = "ファイルを表示(ポリシーはまだ適用中)" +[policyOption] +autoRedactPhi = "PHIを自動墨消し" +blockExport = "エクスポートをブロック" +contracts = "契約書" +documents = "ドキュメント" +fedramp = "FedRAMP" +financialReports = "財務報告書" +flagForReview = "レビュー用にフラグ付け" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "保留" +hrRecords = "人事記録" +indefinite = "無期限" +insurance = "保険" +invoices = "請求書" +iso27001 = "ISO 27001" +legalFilings = "法的提出書類" +medicalPhi = "医療 / PHI" +never = "なし" +ninetyDays = "90日" +oneYear = "1年" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "ドキュメントを隔離" +routeToBucket = "バケットへルーティング" +s3Bucket = "S3 バケット" +sevenYears = "7年" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "税務書類" +thirtyDays = "30日" +threeYears = "3年" +webhook = "Webhook" + [portal] comingSoon = "近日公開" @@ -8067,10 +8050,6 @@ title = "セッションの期限切れ" [portal.users] title = "ユーザー" -[portal.users.roles] -subtitle = "すべてのロールはすべてのプランに存在し、各ロールでできることは組織全体で固定されています。" -title = "ロール" - [portal.users.roles.admin] label = "管理者(組織オーナー)" summary = "ワークスペース、設定、メンバーを完全に管理できます。" diff --git a/frontend/editor/public/locales/ko-KR/translation.toml b/frontend/editor/public/locales/ko-KR/translation.toml index ee1bdd91fa..8eeebf1f47 100644 --- a/frontend/editor/public/locales/ko-KR/translation.toml +++ b/frontend/editor/public/locales/ko-KR/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "계약서" -"Financial reports" = "재무 보고서" -"HR records" = "HR 기록" -Insurance = "보험" -Invoices = "송장" -"Legal filings" = "법적 제출 서류" -"Medical / PHI" = "의료 / PHI" -"Tax documents" = "세금 문서" - [policies.enforcement] applying = "{{names}} 적용 중" applyingProgress = "{{names}} 적용 중 ({{done}}/{{total}})" @@ -6025,51 +6015,6 @@ notify = "라우팅 시 알림" onViolation = "비준수 시" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1년" -"30 days" = "30일" -"90 days" = "90일" -Never = "안 함" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "검토 대상으로 표시" -Hold = "보류" -"Route to bucket" = "버킷으로 라우팅" - -[policies.fieldOption.destination] -Documents = "문서" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1년" -"3 years" = "3년" -"30 days" = "30일" -"7 years" = "7년" -Indefinite = "무기한" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "PHI 자동 수정" -"Block export" = "내보내기 차단" -"Flag for review" = "검토 대상으로 표시" -"Quarantine document" = "문서 격리" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "오버레이 닫기" enforcingTitle = "정책 적용 중..." viewAnyway = "파일 보기(정책은 계속 적용 중)" +[policyOption] +autoRedactPhi = "PHI 자동 수정" +blockExport = "내보내기 차단" +contracts = "계약서" +documents = "문서" +fedramp = "FedRAMP" +financialReports = "재무 보고서" +flagForReview = "검토 대상으로 표시" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "보류" +hrRecords = "HR 기록" +indefinite = "무기한" +insurance = "보험" +invoices = "송장" +iso27001 = "ISO 27001" +legalFilings = "법적 제출 서류" +medicalPhi = "의료 / PHI" +never = "안 함" +ninetyDays = "90일" +oneYear = "1년" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "문서 격리" +routeToBucket = "버킷으로 라우팅" +s3Bucket = "S3 bucket" +sevenYears = "7년" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "세금 문서" +thirtyDays = "30일" +threeYears = "3년" +webhook = "Webhook" + [portal] comingSoon = "곧 제공 예정" @@ -8067,10 +8050,6 @@ title = "세션 만료됨" [portal.users] title = "사용자" -[portal.users.roles] -subtitle = "모든 역할은 모든 플랜에 존재하며, 각 역할이 할 수 있는 일은 조직 전체에서 고정되어 있습니다." -title = "역할" - [portal.users.roles.admin] label = "관리자(조직 소유자)" summary = "워크스페이스, 설정 및 구성원에 대한 전체 거버넌스." diff --git a/frontend/editor/public/locales/ml-ML/translation.toml b/frontend/editor/public/locales/ml-ML/translation.toml index 648f8655f3..a9b9bab959 100644 --- a/frontend/editor/public/locales/ml-ML/translation.toml +++ b/frontend/editor/public/locales/ml-ML/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "കരാറുകൾ" -"Financial reports" = "സാമ്പത്തിക റിപ്പോർട്ടുകൾ" -"HR records" = "HR രേഖകൾ" -Insurance = "ഇൻഷുറൻസ്" -Invoices = "ഇൻവോയിസുകൾ" -"Legal filings" = "നിയമ ഫയലിംഗുകൾ" -"Medical / PHI" = "മെഡിക്കൽ / PHI" -"Tax documents" = "നികുതി രേഖകൾ" - [policies.enforcement] applying = "പ്രാബല്യപ്പെടുത്തുന്നു {{names}}" applyingProgress = "പ്രാബല്യപ്പെടുത്തുന്നു {{names}} ({{total}} ൽ {{done}})" @@ -6025,51 +6015,6 @@ notify = "റൂട്ടിൽ അറിയിക്കുക" onViolation = "അനുസരണക്കേട് ഉണ്ടായാൽ" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 വർഷം" -"30 days" = "30 ദിവസം" -"90 days" = "90 ദിവസം" -Never = "ഒരിക്കലും ഇല്ല" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "അവലോകനത്തിനായി അടയാളപ്പെടുത്തുക" -Hold = "ഹോൾഡ് ചെയ്യുക" -"Route to bucket" = "ബക്കറ്റിലേക്ക് റൂട്ട് ചെയ്യുക" - -[policies.fieldOption.destination] -Documents = "രേഖകൾ" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 വർഷം" -"3 years" = "3 വർഷം" -"30 days" = "30 ദിവസം" -"7 years" = "7 വർഷം" -Indefinite = "അനിശ്ചിതകാലം" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "PHI സ്വയമേവ റിഡാക്റ്റ് ചെയ്യുക" -"Block export" = "എക്സ്പോർട്ട് തടയുക" -"Flag for review" = "അവലോകനത്തിനായി അടയാളപ്പെടുത്തുക" -"Quarantine document" = "രേഖ ക്വാറന്റൈനിൽ ഇടുക" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "ഓവർലേ നിരസിക്കുക" enforcingTitle = "നയം നടപ്പിലാക്കുന്നു..." viewAnyway = "ഫയൽ കാണുക (നയം ഇപ്പോഴും നടപ്പിലാക്കുന്നു)" +[policyOption] +autoRedactPhi = "PHI സ്വയമേവ റിഡാക്റ്റ് ചെയ്യുക" +blockExport = "എക്സ്പോർട്ട് തടയുക" +contracts = "കരാറുകൾ" +documents = "രേഖകൾ" +fedramp = "FedRAMP" +financialReports = "സാമ്പത്തിക റിപ്പോർട്ടുകൾ" +flagForReview = "അവലോകനത്തിനായി അടയാളപ്പെടുത്തുക" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "ഹോൾഡ് ചെയ്യുക" +hrRecords = "HR രേഖകൾ" +indefinite = "അനിശ്ചിതകാലം" +insurance = "ഇൻഷുറൻസ്" +invoices = "ഇൻവോയിസുകൾ" +iso27001 = "ISO 27001" +legalFilings = "നിയമ ഫയലിംഗുകൾ" +medicalPhi = "മെഡിക്കൽ / PHI" +never = "ഒരിക്കലും ഇല്ല" +ninetyDays = "90 ദിവസം" +oneYear = "1 വർഷം" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "രേഖ ക്വാറന്റൈനിൽ ഇടുക" +routeToBucket = "ബക്കറ്റിലേക്ക് റൂട്ട് ചെയ്യുക" +s3Bucket = "S3 bucket" +sevenYears = "7 വർഷം" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "നികുതി രേഖകൾ" +thirtyDays = "30 ദിവസം" +threeYears = "3 വർഷം" +webhook = "Webhook" + [portal] comingSoon = "ഉടൻ വരുന്നു" @@ -8067,10 +8050,6 @@ title = "Session കാലഹരണപ്പെട്ടു" [portal.users] title = "ഉപയോക്താക്കൾ" -[portal.users.roles] -subtitle = "എല്ലാ plan-ലും ഓരോ role ഉണ്ട് — ഓരോന്നിന് ചെയ്യാനാവുന്നത് org-ലാകെ നിശ്ചിതമാണ്." -title = "Roles" - [portal.users.roles.admin] label = "Admin (Org owner)" summary = "Workspace, settings, members എന്നിവയിൽ പൂർണ്ണ governance." diff --git a/frontend/editor/public/locales/nl-NL/translation.toml b/frontend/editor/public/locales/nl-NL/translation.toml index 91a56b2594..6a364ede3f 100644 --- a/frontend/editor/public/locales/nl-NL/translation.toml +++ b/frontend/editor/public/locales/nl-NL/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Contracten" -"Financial reports" = "Financiële rapporten" -"HR records" = "HR-dossiers" -Insurance = "Verzekeringen" -Invoices = "Facturen" -"Legal filings" = "Juridische indieningen" -"Medical / PHI" = "Medisch / PHI" -"Tax documents" = "Belastingdocumenten" - [policies.enforcement] applying = "Bezig met toepassen van {{names}}" applyingProgress = "Bezig met toepassen van {{names}} ({{done}} van {{total}})" @@ -6025,51 +6015,6 @@ notify = "Melden bij routering" onViolation = "Bij niet-naleving" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 jaar" -"30 days" = "30 dagen" -"90 days" = "90 dagen" -Never = "Nooit" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Markeren voor beoordeling" -Hold = "Vasthouden" -"Route to bucket" = "Routeren naar bucket" - -[policies.fieldOption.destination] -Documents = "Documenten" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 jaar" -"3 years" = "3 jaar" -"30 days" = "30 dagen" -"7 years" = "7 jaar" -Indefinite = "Onbepaalde tijd" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "PHI automatisch redigeren" -"Block export" = "Export blokkeren" -"Flag for review" = "Markeren voor beoordeling" -"Quarantine document" = "Document in quarantaine plaatsen" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Overlay sluiten" enforcingTitle = "Beleid afdwingen..." viewAnyway = "Bestand bekijken (beleid wordt nog afgedwongen)" +[policyOption] +autoRedactPhi = "PHI automatisch redigeren" +blockExport = "Export blokkeren" +contracts = "Contracten" +documents = "Documenten" +fedramp = "FedRAMP" +financialReports = "Financiële rapporten" +flagForReview = "Markeren voor beoordeling" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Vasthouden" +hrRecords = "HR-dossiers" +indefinite = "Onbepaalde tijd" +insurance = "Verzekeringen" +invoices = "Facturen" +iso27001 = "ISO 27001" +legalFilings = "Juridische indieningen" +medicalPhi = "Medisch / PHI" +never = "Nooit" +ninetyDays = "90 dagen" +oneYear = "1 jaar" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Document in quarantaine plaatsen" +routeToBucket = "Routeren naar bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 jaar" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Belastingdocumenten" +thirtyDays = "30 dagen" +threeYears = "3 jaar" +webhook = "Webhook" + [portal] comingSoon = "Binnenkort beschikbaar" @@ -8067,10 +8050,6 @@ title = "Sessie verlopen" [portal.users] title = "Gebruikers" -[portal.users.roles] -subtitle = "Elke rol bestaat op elk abonnement — wat elke rol kan doen is vastgelegd voor de hele organisatie." -title = "Rollen" - [portal.users.roles.admin] label = "Admin (organisatie-eigenaar)" summary = "Volledig beheer over de workspace, instellingen en leden." diff --git a/frontend/editor/public/locales/no-NB/translation.toml b/frontend/editor/public/locales/no-NB/translation.toml index e67cad4214..1fd68531a2 100644 --- a/frontend/editor/public/locales/no-NB/translation.toml +++ b/frontend/editor/public/locales/no-NB/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Kontrakter" -"Financial reports" = "Finansrapporter" -"HR records" = "HR-poster" -Insurance = "Forsikring" -Invoices = "Fakturaer" -"Legal filings" = "Juridiske innsendelser" -"Medical / PHI" = "Medisinsk / PHI" -"Tax documents" = "Skattedokumenter" - [policies.enforcement] applying = "Tar i bruk {{names}}" applyingProgress = "Tar i bruk {{names}} ({{done}} av {{total}})" @@ -6025,51 +6015,6 @@ notify = "Varsle ved ruting" onViolation = "Ved manglende samsvar" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 år" -"30 days" = "30 dager" -"90 days" = "90 dager" -Never = "Aldri" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Merk for gjennomgang" -Hold = "Hold tilbake" -"Route to bucket" = "Rut til bucket" - -[policies.fieldOption.destination] -Documents = "Dokumenter" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 år" -"3 years" = "3 år" -"30 days" = "30 dager" -"7 years" = "7 år" -Indefinite = "På ubestemt tid" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Sladd PHI automatisk" -"Block export" = "Blokker eksport" -"Flag for review" = "Merk for gjennomgang" -"Quarantine document" = "Sett dokument i karantene" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Avvis overlegg" enforcingTitle = "Håndhever policy..." viewAnyway = "Vis fil (policy håndheves fortsatt)" +[policyOption] +autoRedactPhi = "Sladd PHI automatisk" +blockExport = "Blokker eksport" +contracts = "Kontrakter" +documents = "Dokumenter" +fedramp = "FedRAMP" +financialReports = "Finansrapporter" +flagForReview = "Merk for gjennomgang" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Hold tilbake" +hrRecords = "HR-poster" +indefinite = "På ubestemt tid" +insurance = "Forsikring" +invoices = "Fakturaer" +iso27001 = "ISO 27001" +legalFilings = "Juridiske innsendelser" +medicalPhi = "Medisinsk / PHI" +never = "Aldri" +ninetyDays = "90 dager" +oneYear = "1 år" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Sett dokument i karantene" +routeToBucket = "Rut til bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 år" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Skattedokumenter" +thirtyDays = "30 dager" +threeYears = "3 år" +webhook = "Webhook" + [portal] comingSoon = "Kommer snart" @@ -8067,10 +8050,6 @@ title = "Økten er utløpt" [portal.users] title = "Brukere" -[portal.users.roles] -subtitle = "Alle roller finnes på alle abonnementer — hva hver enkelt kan gjøre, er fast på tvers av organisasjonen." -title = "Roller" - [portal.users.roles.admin] label = "Administrator (org-eier)" summary = "Full styring over arbeidsområdet, innstillinger og medlemmer." diff --git a/frontend/editor/public/locales/pl-PL/translation.toml b/frontend/editor/public/locales/pl-PL/translation.toml index fc4f6119f7..2309dd6966 100644 --- a/frontend/editor/public/locales/pl-PL/translation.toml +++ b/frontend/editor/public/locales/pl-PL/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Umowy" -"Financial reports" = "Raporty finansowe" -"HR records" = "Dokumentacja HR" -Insurance = "Ubezpieczenia" -Invoices = "Faktury" -"Legal filings" = "Dokumenty prawne" -"Medical / PHI" = "Medyczne / PHI" -"Tax documents" = "Dokumenty podatkowe" - [policies.enforcement] applying = "Stosowanie {{names}}" applyingProgress = "Stosowanie {{names}} ({{done}} z {{total}})" @@ -6025,51 +6015,6 @@ notify = "Powiadom przy kierowaniu" onViolation = "Gdy niezgodne" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 rok" -"30 days" = "30 dni" -"90 days" = "90 dni" -Never = "Nigdy" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Oznacz do przeglądu" -Hold = "Wstrzymaj" -"Route to bucket" = "Skieruj do bucket" - -[policies.fieldOption.destination] -Documents = "Dokumenty" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 rok" -"3 years" = "3 lata" -"30 days" = "30 dni" -"7 years" = "7 lat" -Indefinite = "Bezterminowo" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Automatycznie zredaguj PHI" -"Block export" = "Zablokuj eksport" -"Flag for review" = "Oznacz do przeglądu" -"Quarantine document" = "Poddaj dokument kwarantannie" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Zamknij nakładkę" enforcingTitle = "Wymuszanie zasady..." viewAnyway = "Wyświetl plik (zasada nadal jest wymuszana)" +[policyOption] +autoRedactPhi = "Automatycznie zredaguj PHI" +blockExport = "Zablokuj eksport" +contracts = "Umowy" +documents = "Dokumenty" +fedramp = "FedRAMP" +financialReports = "Raporty finansowe" +flagForReview = "Oznacz do przeglądu" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Wstrzymaj" +hrRecords = "Dokumentacja HR" +indefinite = "Bezterminowo" +insurance = "Ubezpieczenia" +invoices = "Faktury" +iso27001 = "ISO 27001" +legalFilings = "Dokumenty prawne" +medicalPhi = "Medyczne / PHI" +never = "Nigdy" +ninetyDays = "90 dni" +oneYear = "1 rok" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Poddaj dokument kwarantannie" +routeToBucket = "Skieruj do bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 lat" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Dokumenty podatkowe" +thirtyDays = "30 dni" +threeYears = "3 lata" +webhook = "Webhook" + [portal] comingSoon = "Wkrótce" @@ -8067,10 +8050,6 @@ title = "Sesja wygasła" [portal.users] title = "Użytkownicy" -[portal.users.roles] -subtitle = "Każda rola istnieje w każdym planie — to, co każda z nich może robić, jest stałe w całej organizacji." -title = "Role" - [portal.users.roles.admin] label = "Admin (właściciel organizacji)" summary = "Pełne zarządzanie workspace, ustawieniami i członkami." diff --git a/frontend/editor/public/locales/pt-BR/translation.toml b/frontend/editor/public/locales/pt-BR/translation.toml index 4e4f20cd9f..df95886da7 100644 --- a/frontend/editor/public/locales/pt-BR/translation.toml +++ b/frontend/editor/public/locales/pt-BR/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Contratos" -"Financial reports" = "Relatórios financeiros" -"HR records" = "Registros de RH" -Insurance = "Seguros" -Invoices = "Faturas" -"Legal filings" = "Registros legais" -"Medical / PHI" = "Médico / PHI" -"Tax documents" = "Documentos fiscais" - [policies.enforcement] applying = "Aplicando {{names}}" applyingProgress = "Aplicando {{names}} ({{done}} de {{total}})" @@ -6025,51 +6015,6 @@ notify = "Notificar no roteamento" onViolation = "Quando não conforme" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 ano" -"30 days" = "30 dias" -"90 days" = "90 dias" -Never = "Nunca" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Marcar para revisão" -Hold = "Reter" -"Route to bucket" = "Rotear para bucket" - -[policies.fieldOption.destination] -Documents = "Documentos" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 ano" -"3 years" = "3 anos" -"30 days" = "30 dias" -"7 years" = "7 anos" -Indefinite = "Indefinidamente" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Redigir PHI automaticamente" -"Block export" = "Bloquear exportação" -"Flag for review" = "Marcar para revisão" -"Quarantine document" = "Colocar documento em quarentena" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Dispensar sobreposição" enforcingTitle = "Aplicando política..." viewAnyway = "Ver arquivo (política ainda sendo aplicada)" +[policyOption] +autoRedactPhi = "Redigir PHI automaticamente" +blockExport = "Bloquear exportação" +contracts = "Contratos" +documents = "Documentos" +fedramp = "FedRAMP" +financialReports = "Relatórios financeiros" +flagForReview = "Marcar para revisão" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Reter" +hrRecords = "Registros de RH" +indefinite = "Indefinidamente" +insurance = "Seguros" +invoices = "Faturas" +iso27001 = "ISO 27001" +legalFilings = "Registros legais" +medicalPhi = "Médico / PHI" +never = "Nunca" +ninetyDays = "90 dias" +oneYear = "1 ano" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Colocar documento em quarentena" +routeToBucket = "Rotear para bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 anos" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Documentos fiscais" +thirtyDays = "30 dias" +threeYears = "3 anos" +webhook = "Webhook" + [portal] comingSoon = "Em breve" @@ -8067,10 +8050,6 @@ title = "Sessão expirada" [portal.users] title = "Usuários" -[portal.users.roles] -subtitle = "Toda função existe em todo plano — o que cada uma pode fazer é fixo em toda a organização." -title = "Funções" - [portal.users.roles.admin] label = "Admin (proprietário da organização)" summary = "Governança total sobre o workspace, configurações e membros." diff --git a/frontend/editor/public/locales/pt-PT/translation.toml b/frontend/editor/public/locales/pt-PT/translation.toml index 288e2d6e5f..c7b1a45ee9 100644 --- a/frontend/editor/public/locales/pt-PT/translation.toml +++ b/frontend/editor/public/locales/pt-PT/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Contratos" -"Financial reports" = "Relatórios financeiros" -"HR records" = "Registos de RH" -Insurance = "Seguros" -Invoices = "Faturas" -"Legal filings" = "Documentação legal" -"Medical / PHI" = "Médico / PHI" -"Tax documents" = "Documentos fiscais" - [policies.enforcement] applying = "A aplicar {{names}}" applyingProgress = "A aplicar {{names}} ({{done}} de {{total}})" @@ -6025,51 +6015,6 @@ notify = "Notificar no encaminhamento" onViolation = "Quando não conforme" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 ano" -"30 days" = "30 dias" -"90 days" = "90 dias" -Never = "Nunca" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Assinalar para revisão" -Hold = "Reter" -"Route to bucket" = "Encaminhar para bucket" - -[policies.fieldOption.destination] -Documents = "Documentos" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 ano" -"3 years" = "3 anos" -"30 days" = "30 dias" -"7 years" = "7 anos" -Indefinite = "Indefinidamente" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Ocultar automaticamente PHI" -"Block export" = "Bloquear exportação" -"Flag for review" = "Assinalar para revisão" -"Quarantine document" = "Colocar documento em quarentena" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Dispensar sobreposição" enforcingTitle = "A aplicar política..." viewAnyway = "Ver ficheiro (política ainda em aplicação)" +[policyOption] +autoRedactPhi = "Ocultar automaticamente PHI" +blockExport = "Bloquear exportação" +contracts = "Contratos" +documents = "Documentos" +fedramp = "FedRAMP" +financialReports = "Relatórios financeiros" +flagForReview = "Assinalar para revisão" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Reter" +hrRecords = "Registos de RH" +indefinite = "Indefinidamente" +insurance = "Seguros" +invoices = "Faturas" +iso27001 = "ISO 27001" +legalFilings = "Documentação legal" +medicalPhi = "Médico / PHI" +never = "Nunca" +ninetyDays = "90 dias" +oneYear = "1 ano" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Colocar documento em quarentena" +routeToBucket = "Encaminhar para bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 anos" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Documentos fiscais" +thirtyDays = "30 dias" +threeYears = "3 anos" +webhook = "Webhook" + [portal] comingSoon = "Em breve" @@ -8067,10 +8050,6 @@ title = "Sessão expirada" [portal.users] title = "Utilizadores" -[portal.users.roles] -subtitle = "Todas as funções existem em todos os planos — o que cada uma pode fazer é fixo em toda a organização." -title = "Funções" - [portal.users.roles.admin] label = "Admin (Proprietário da organização)" summary = "Governação total sobre o workspace, definições e membros." diff --git a/frontend/editor/public/locales/ro-RO/translation.toml b/frontend/editor/public/locales/ro-RO/translation.toml index e99f79b6cd..00c9a155ae 100644 --- a/frontend/editor/public/locales/ro-RO/translation.toml +++ b/frontend/editor/public/locales/ro-RO/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Contracte" -"Financial reports" = "Rapoarte financiare" -"HR records" = "Înregistrări HR" -Insurance = "Asigurări" -Invoices = "Facturi" -"Legal filings" = "Depuneri juridice" -"Medical / PHI" = "Medical / PHI" -"Tax documents" = "Documente fiscale" - [policies.enforcement] applying = "Se aplică {{names}}" applyingProgress = "Se aplică {{names}} ({{done}} din {{total}})" @@ -6025,51 +6015,6 @@ notify = "Notifică la rutare" onViolation = "Când nu este conform" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 an" -"30 days" = "30 de zile" -"90 days" = "90 de zile" -Never = "Niciodată" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Marchează pentru revizuire" -Hold = "Reține" -"Route to bucket" = "Rutează către bucket" - -[policies.fieldOption.destination] -Documents = "Documente" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 an" -"3 years" = "3 ani" -"30 days" = "30 de zile" -"7 years" = "7 ani" -Indefinite = "Pe termen nelimitat" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Anonimizează automat PHI" -"Block export" = "Blochează exportul" -"Flag for review" = "Marchează pentru revizuire" -"Quarantine document" = "Pune documentul în carantină" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Închide suprapunerea" enforcingTitle = "Se aplică politica..." viewAnyway = "Vezi fișierul (politica încă se aplică)" +[policyOption] +autoRedactPhi = "Anonimizează automat PHI" +blockExport = "Blochează exportul" +contracts = "Contracte" +documents = "Documente" +fedramp = "FedRAMP" +financialReports = "Rapoarte financiare" +flagForReview = "Marchează pentru revizuire" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Reține" +hrRecords = "Înregistrări HR" +indefinite = "Pe termen nelimitat" +insurance = "Asigurări" +invoices = "Facturi" +iso27001 = "ISO 27001" +legalFilings = "Depuneri juridice" +medicalPhi = "Medical / PHI" +never = "Niciodată" +ninetyDays = "90 de zile" +oneYear = "1 an" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Pune documentul în carantină" +routeToBucket = "Rutează către bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 ani" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Documente fiscale" +thirtyDays = "30 de zile" +threeYears = "3 ani" +webhook = "Webhook" + [portal] comingSoon = "În curând" @@ -8067,10 +8050,6 @@ title = "Sesiune expirată" [portal.users] title = "Utilizatori" -[portal.users.roles] -subtitle = "Fiecare rol există în fiecare plan — ce poate face fiecare este fix în întreaga org." -title = "Roluri" - [portal.users.roles.admin] label = "Admin (proprietar org)" summary = "Guvernanță completă asupra spațiului de lucru, setărilor și membrilor." diff --git a/frontend/editor/public/locales/ru-RU/translation.toml b/frontend/editor/public/locales/ru-RU/translation.toml index 0c73250687..c4ceb3281e 100644 --- a/frontend/editor/public/locales/ru-RU/translation.toml +++ b/frontend/editor/public/locales/ru-RU/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Контракты" -"Financial reports" = "Финансовые отчёты" -"HR records" = "Кадровые записи" -Insurance = "Страхование" -Invoices = "Счета" -"Legal filings" = "Юридические документы" -"Medical / PHI" = "Медицинские / PHI" -"Tax documents" = "Налоговые документы" - [policies.enforcement] applying = "Применение {{names}}" applyingProgress = "Применение {{names}} ({{done}} из {{total}})" @@ -6025,51 +6015,6 @@ notify = "Уведомлять при маршрутизации" onViolation = "При несоответствии" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 год" -"30 days" = "30 дней" -"90 days" = "90 дней" -Never = "Никогда" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Пометить для проверки" -Hold = "Удержать" -"Route to bucket" = "Маршрутизировать в bucket" - -[policies.fieldOption.destination] -Documents = "Документы" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 год" -"3 years" = "3 года" -"30 days" = "30 дней" -"7 years" = "7 лет" -Indefinite = "Бессрочно" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Автоматически редактировать PHI" -"Block export" = "Заблокировать экспорт" -"Flag for review" = "Пометить для проверки" -"Quarantine document" = "Поместить документ в карантин" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Закрыть оверлей" enforcingTitle = "Применение политики..." viewAnyway = "Показать файл (политика всё ещё применяется)" +[policyOption] +autoRedactPhi = "Автоматически редактировать PHI" +blockExport = "Заблокировать экспорт" +contracts = "Контракты" +documents = "Документы" +fedramp = "FedRAMP" +financialReports = "Финансовые отчёты" +flagForReview = "Пометить для проверки" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Удержать" +hrRecords = "Кадровые записи" +indefinite = "Бессрочно" +insurance = "Страхование" +invoices = "Счета" +iso27001 = "ISO 27001" +legalFilings = "Юридические документы" +medicalPhi = "Медицинские / PHI" +never = "Никогда" +ninetyDays = "90 дней" +oneYear = "1 год" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Поместить документ в карантин" +routeToBucket = "Маршрутизировать в bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 лет" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Налоговые документы" +thirtyDays = "30 дней" +threeYears = "3 года" +webhook = "Webhook" + [portal] comingSoon = "Скоро" @@ -8067,10 +8050,6 @@ title = "Сессия истекла" [portal.users] title = "Пользователи" -[portal.users.roles] -subtitle = "Каждая роль есть в каждом плане — набор действий для каждой роли фиксирован в рамках организации." -title = "Роли" - [portal.users.roles.admin] label = "Администратор (владелец организации)" summary = "Полное управление рабочим пространством, настройками и участниками." diff --git a/frontend/editor/public/locales/sk-SK/translation.toml b/frontend/editor/public/locales/sk-SK/translation.toml index 96349ceb1a..1ab3fe48ee 100644 --- a/frontend/editor/public/locales/sk-SK/translation.toml +++ b/frontend/editor/public/locales/sk-SK/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Zmluvy" -"Financial reports" = "Finančné správy" -"HR records" = "HR záznamy" -Insurance = "Poistenie" -Invoices = "Faktúry" -"Legal filings" = "Právne podania" -"Medical / PHI" = "Zdravotné / PHI" -"Tax documents" = "Daňové dokumenty" - [policies.enforcement] applying = "Uplatňuje sa {{names}}" applyingProgress = "Uplatňuje sa {{names}} ({{done}} z {{total}})" @@ -6025,51 +6015,6 @@ notify = "Upozorniť pri smerovaní" onViolation = "Pri nesúlade" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 rok" -"30 days" = "30 dní" -"90 days" = "90 dní" -Never = "Nikdy" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Označiť na kontrolu" -Hold = "Pozdržať" -"Route to bucket" = "Smerovať do bucketu" - -[policies.fieldOption.destination] -Documents = "Dokumenty" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 rok" -"3 years" = "3 roky" -"30 days" = "30 dní" -"7 years" = "7 rokov" -Indefinite = "Na neurčito" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Automaticky začierniť PHI" -"Block export" = "Blokovať export" -"Flag for review" = "Označiť na kontrolu" -"Quarantine document" = "Umiestniť dokument do karantény" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Zavrieť prekrytie" enforcingTitle = "Vynucuje sa zásada..." viewAnyway = "Zobraziť súbor (zásada sa stále vynucuje)" +[policyOption] +autoRedactPhi = "Automaticky začierniť PHI" +blockExport = "Blokovať export" +contracts = "Zmluvy" +documents = "Dokumenty" +fedramp = "FedRAMP" +financialReports = "Finančné správy" +flagForReview = "Označiť na kontrolu" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Pozdržať" +hrRecords = "HR záznamy" +indefinite = "Na neurčito" +insurance = "Poistenie" +invoices = "Faktúry" +iso27001 = "ISO 27001" +legalFilings = "Právne podania" +medicalPhi = "Zdravotné / PHI" +never = "Nikdy" +ninetyDays = "90 dní" +oneYear = "1 rok" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Umiestniť dokument do karantény" +routeToBucket = "Smerovať do bucketu" +s3Bucket = "S3 bucket" +sevenYears = "7 rokov" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Daňové dokumenty" +thirtyDays = "30 dní" +threeYears = "3 roky" +webhook = "Webhook" + [portal] comingSoon = "Už čoskoro" @@ -8067,10 +8050,6 @@ title = "Relácia vypršala" [portal.users] title = "Používatelia" -[portal.users.roles] -subtitle = "Každá rola existuje v každom pláne — to, čo môže každá robiť, je pevne dané naprieč organizáciou." -title = "Roly" - [portal.users.roles.admin] label = "Admin (vlastník organizácie)" summary = "Úplná správa workspace, nastavení a členov." diff --git a/frontend/editor/public/locales/sl-SI/translation.toml b/frontend/editor/public/locales/sl-SI/translation.toml index 1d782b38a5..dd7bfc7292 100644 --- a/frontend/editor/public/locales/sl-SI/translation.toml +++ b/frontend/editor/public/locales/sl-SI/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Pogodbe" -"Financial reports" = "Finančna poročila" -"HR records" = "Kadrovske evidence" -Insurance = "Zavarovanje" -Invoices = "Računi" -"Legal filings" = "Pravne vloge" -"Medical / PHI" = "Medicinsko / PHI" -"Tax documents" = "Davčni dokumenti" - [policies.enforcement] applying = "Uveljavljanje {{names}}" applyingProgress = "Uveljavljanje {{names}} ({{done}} od {{total}})" @@ -6025,51 +6015,6 @@ notify = "Obvesti ob usmerjanju" onViolation = "Ob neskladnosti" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 leto" -"30 days" = "30 dni" -"90 days" = "90 dni" -Never = "Nikoli" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Označi za pregled" -Hold = "Zadrži" -"Route to bucket" = "Usmeri v vedro" - -[policies.fieldOption.destination] -Documents = "Dokumenti" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 leto" -"3 years" = "3 leta" -"30 days" = "30 dni" -"7 years" = "7 let" -Indefinite = "Nedoločeno" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Samodejno prekrij PHI" -"Block export" = "Blokiraj izvoz" -"Flag for review" = "Označi za pregled" -"Quarantine document" = "Daj dokument v karanteno" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Opusti prekrivanje" enforcingTitle = "Uveljavljanje pravilnika..." viewAnyway = "Prikaži datoteko (pravilnik se še uveljavlja)" +[policyOption] +autoRedactPhi = "Samodejno prekrij PHI" +blockExport = "Blokiraj izvoz" +contracts = "Pogodbe" +documents = "Dokumenti" +fedramp = "FedRAMP" +financialReports = "Finančna poročila" +flagForReview = "Označi za pregled" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Zadrži" +hrRecords = "Kadrovske evidence" +indefinite = "Nedoločeno" +insurance = "Zavarovanje" +invoices = "Računi" +iso27001 = "ISO 27001" +legalFilings = "Pravne vloge" +medicalPhi = "Medicinsko / PHI" +never = "Nikoli" +ninetyDays = "90 dni" +oneYear = "1 leto" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Daj dokument v karanteno" +routeToBucket = "Usmeri v vedro" +s3Bucket = "S3 bucket" +sevenYears = "7 let" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Davčni dokumenti" +thirtyDays = "30 dni" +threeYears = "3 leta" +webhook = "Webhook" + [portal] comingSoon = "Kmalu na voljo" @@ -8067,10 +8050,6 @@ title = "Seja je potekla" [portal.users] title = "Uporabniki" -[portal.users.roles] -subtitle = "Vsaka vloga obstaja v vsakem paketu — kaj lahko vsaka naredi, je fiksno v celotni organizaciji." -title = "Vloge" - [portal.users.roles.admin] label = "Admin (lastnik organizacije)" summary = "Popolno upravljanje delovnega prostora, nastavitev in članov." diff --git a/frontend/editor/public/locales/sr-LATN-RS/translation.toml b/frontend/editor/public/locales/sr-LATN-RS/translation.toml index fbd8cb5b03..2ddd6060b0 100644 --- a/frontend/editor/public/locales/sr-LATN-RS/translation.toml +++ b/frontend/editor/public/locales/sr-LATN-RS/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Ugovori" -"Financial reports" = "Finansijski izveštaji" -"HR records" = "HR evidencija" -Insurance = "Osiguranje" -Invoices = "Fakture" -"Legal filings" = "Pravne prijave" -"Medical / PHI" = "Medicinsko / PHI" -"Tax documents" = "Poreski dokumenti" - [policies.enforcement] applying = "Primena {{names}}" applyingProgress = "Primena {{names}} ({{done}} od {{total}})" @@ -6025,51 +6015,6 @@ notify = "Obavesti pri usmeravanju" onViolation = "Kada nije usklađeno" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 godina" -"30 days" = "30 dana" -"90 days" = "90 dana" -Never = "Nikad" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Označi za pregled" -Hold = "Zadrži" -"Route to bucket" = "Usmeri u bucket" - -[policies.fieldOption.destination] -Documents = "Dokumenti" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 godinu" -"3 years" = "3 godine" -"30 days" = "30 dana" -"7 years" = "7 godina" -Indefinite = "Neograničeno" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Automatski rediguj PHI" -"Block export" = "Blokiraj izvoz" -"Flag for review" = "Označi za pregled" -"Quarantine document" = "Stavi dokument u karantin" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Zatvori preklop" enforcingTitle = "Primena politike..." viewAnyway = "Prikaži fajl (politika se i dalje primenjuje)" +[policyOption] +autoRedactPhi = "Automatski rediguj PHI" +blockExport = "Blokiraj izvoz" +contracts = "Ugovori" +documents = "Dokumenti" +fedramp = "FedRAMP" +financialReports = "Finansijski izveštaji" +flagForReview = "Označi za pregled" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Zadrži" +hrRecords = "HR evidencija" +indefinite = "Neograničeno" +insurance = "Osiguranje" +invoices = "Fakture" +iso27001 = "ISO 27001" +legalFilings = "Pravne prijave" +medicalPhi = "Medicinsko / PHI" +never = "Nikad" +ninetyDays = "90 dana" +oneYear = "1 godina" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Stavi dokument u karantin" +routeToBucket = "Usmeri u bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 godina" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Poreski dokumenti" +thirtyDays = "30 dana" +threeYears = "3 godine" +webhook = "Webhook" + [portal] comingSoon = "Uskoro" @@ -8067,10 +8050,6 @@ title = "Sesija je istekla" [portal.users] title = "Korisnici" -[portal.users.roles] -subtitle = "Svaka uloga postoji na svakom planu — ono što svaka može da radi je fiksno na nivou organizacije." -title = "Uloge" - [portal.users.roles.admin] label = "Admin (vlasnik organizacije)" summary = "Puno upravljanje radnim prostorom, podešavanjima i članovima." diff --git a/frontend/editor/public/locales/sv-SE/translation.toml b/frontend/editor/public/locales/sv-SE/translation.toml index a7ddadbe3b..841cce5277 100644 --- a/frontend/editor/public/locales/sv-SE/translation.toml +++ b/frontend/editor/public/locales/sv-SE/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Avtal" -"Financial reports" = "Finansiella rapporter" -"HR records" = "HR-poster" -Insurance = "Försäkring" -Invoices = "Fakturor" -"Legal filings" = "Juridiska inlagor" -"Medical / PHI" = "Medicinskt / PHI" -"Tax documents" = "Skattedokument" - [policies.enforcement] applying = "Tillämpning av {{names}}" applyingProgress = "Tillämpning av {{names}} ({{done}} av {{total}})" @@ -6025,51 +6015,6 @@ notify = "Avisera vid dirigering" onViolation = "Vid bristande efterlevnad" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 år" -"30 days" = "30 dagar" -"90 days" = "90 dagar" -Never = "Aldrig" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Flagga för granskning" -Hold = "Spärra" -"Route to bucket" = "Dirigera till bucket" - -[policies.fieldOption.destination] -Documents = "Dokument" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 år" -"3 years" = "3 år" -"30 days" = "30 dagar" -"7 years" = "7 år" -Indefinite = "Tills vidare" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Automatisk maskering av PHI" -"Block export" = "Blockera export" -"Flag for review" = "Flagga för granskning" -"Quarantine document" = "Sätt dokument i karantän" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Stäng överlägg" enforcingTitle = "Tillämpar policy..." viewAnyway = "Visa fil (policy tillämpas fortfarande)" +[policyOption] +autoRedactPhi = "Automatisk maskering av PHI" +blockExport = "Blockera export" +contracts = "Avtal" +documents = "Dokument" +fedramp = "FedRAMP" +financialReports = "Finansiella rapporter" +flagForReview = "Flagga för granskning" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Spärra" +hrRecords = "HR-poster" +indefinite = "Tills vidare" +insurance = "Försäkring" +invoices = "Fakturor" +iso27001 = "ISO 27001" +legalFilings = "Juridiska inlagor" +medicalPhi = "Medicinskt / PHI" +never = "Aldrig" +ninetyDays = "90 dagar" +oneYear = "1 år" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Sätt dokument i karantän" +routeToBucket = "Dirigera till bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 år" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Skattedokument" +thirtyDays = "30 dagar" +threeYears = "3 år" +webhook = "Webhook" + [portal] comingSoon = "Kommer snart" @@ -8067,10 +8050,6 @@ title = "Sessionen har löpt ut" [portal.users] title = "Användare" -[portal.users.roles] -subtitle = "Varje roll finns på varje plan — vad var och en kan göra är fast i hela organisationen." -title = "Roller" - [portal.users.roles.admin] label = "Admin (organisationsägare)" summary = "Full styrning över arbetsytan, inställningar och medlemmar." diff --git a/frontend/editor/public/locales/th-TH/translation.toml b/frontend/editor/public/locales/th-TH/translation.toml index ee7f5f8b6c..55f27a8467 100644 --- a/frontend/editor/public/locales/th-TH/translation.toml +++ b/frontend/editor/public/locales/th-TH/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "สัญญา" -"Financial reports" = "รายงานทางการเงิน" -"HR records" = "ระเบียน HR" -Insurance = "ประกันภัย" -Invoices = "ใบแจ้งหนี้" -"Legal filings" = "เอกสารยื่นทางกฎหมาย" -"Medical / PHI" = "การแพทย์ / PHI" -"Tax documents" = "เอกสารภาษี" - [policies.enforcement] applying = "กำลังนำ {{names}} ไปใช้" applyingProgress = "กำลังนำ {{names}} ไปใช้ ({{done}} จาก {{total}})" @@ -6025,51 +6015,6 @@ notify = "แจ้งเตือนเมื่อกำหนดเส้น onViolation = "เมื่อไม่เป็นไปตามข้อกำหนด" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 ปี" -"30 days" = "30 วัน" -"90 days" = "90 วัน" -Never = "ไม่เลย" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "ทำเครื่องหมายเพื่อตรวจสอบ" -Hold = "ระงับ" -"Route to bucket" = "กำหนดเส้นทางไปยัง bucket" - -[policies.fieldOption.destination] -Documents = "เอกสาร" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 ปี" -"3 years" = "3 ปี" -"30 days" = "30 วัน" -"7 years" = "7 ปี" -Indefinite = "ไม่มีกำหนด" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "ปกปิด PHI อัตโนมัติ" -"Block export" = "บล็อกการส่งออก" -"Flag for review" = "ทำเครื่องหมายเพื่อตรวจสอบ" -"Quarantine document" = "กักกันเอกสาร" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "ปิดโอเวอร์เลย์" enforcingTitle = "กำลังบังคับใช้นโยบาย..." viewAnyway = "ดูไฟล์ (นโยบายยังคงบังคับใช้อยู่)" +[policyOption] +autoRedactPhi = "ปกปิด PHI อัตโนมัติ" +blockExport = "บล็อกการส่งออก" +contracts = "สัญญา" +documents = "เอกสาร" +fedramp = "FedRAMP" +financialReports = "รายงานทางการเงิน" +flagForReview = "ทำเครื่องหมายเพื่อตรวจสอบ" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "ระงับ" +hrRecords = "ระเบียน HR" +indefinite = "ไม่มีกำหนด" +insurance = "ประกันภัย" +invoices = "ใบแจ้งหนี้" +iso27001 = "ISO 27001" +legalFilings = "เอกสารยื่นทางกฎหมาย" +medicalPhi = "การแพทย์ / PHI" +never = "ไม่เลย" +ninetyDays = "90 วัน" +oneYear = "1 ปี" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "กักกันเอกสาร" +routeToBucket = "กำหนดเส้นทางไปยัง bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 ปี" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "เอกสารภาษี" +thirtyDays = "30 วัน" +threeYears = "3 ปี" +webhook = "Webhook" + [portal] comingSoon = "เร็วๆ นี้" @@ -8067,10 +8050,6 @@ title = "เซสชันหมดอายุ" [portal.users] title = "ผู้ใช้" -[portal.users.roles] -subtitle = "ทุกบทบาทมีอยู่ในทุกแผน — สิ่งที่แต่ละบทบาททำได้ถูกกำหนดตายตัวทั่วทั้งองค์กร" -title = "บทบาท" - [portal.users.roles.admin] label = "Admin (เจ้าขององค์กร)" summary = "การกำกับดูแลเต็มรูปแบบเหนือ workspace, การตั้งค่า และสมาชิก" diff --git a/frontend/editor/public/locales/tr-TR/translation.toml b/frontend/editor/public/locales/tr-TR/translation.toml index d7b56d7021..4577a23154 100644 --- a/frontend/editor/public/locales/tr-TR/translation.toml +++ b/frontend/editor/public/locales/tr-TR/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Sözleşmeler" -"Financial reports" = "Finansal raporlar" -"HR records" = "İK kayıtları" -Insurance = "Sigorta" -Invoices = "Faturalar" -"Legal filings" = "Yasal başvurular" -"Medical / PHI" = "Tıbbi / PHI" -"Tax documents" = "Vergi belgeleri" - [policies.enforcement] applying = "{{names}} uygulanıyor" applyingProgress = "{{names}} uygulanıyor ({{done}} / {{total}})" @@ -6025,51 +6015,6 @@ notify = "Yönlendirmede bildir" onViolation = "Uyumsuz olduğunda" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 yıl" -"30 days" = "30 gün" -"90 days" = "90 gün" -Never = "Asla" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "İnceleme için işaretle" -Hold = "Tut" -"Route to bucket" = "Bucket'a yönlendir" - -[policies.fieldOption.destination] -Documents = "Belgeler" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 yıl" -"3 years" = "3 yıl" -"30 days" = "30 gün" -"7 years" = "7 yıl" -Indefinite = "Süresiz" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "PHI'yi otomatik sansürle" -"Block export" = "Dışa aktarmayı engelle" -"Flag for review" = "İnceleme için işaretle" -"Quarantine document" = "Belgeyi karantinaya al" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Katmanı kapat" enforcingTitle = "Politika uygulanıyor..." viewAnyway = "Dosyayı görüntüle (politika hâlâ uygulanıyor)" +[policyOption] +autoRedactPhi = "PHI'yi otomatik sansürle" +blockExport = "Dışa aktarmayı engelle" +contracts = "Sözleşmeler" +documents = "Belgeler" +fedramp = "FedRAMP" +financialReports = "Finansal raporlar" +flagForReview = "İnceleme için işaretle" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Tut" +hrRecords = "İK kayıtları" +indefinite = "Süresiz" +insurance = "Sigorta" +invoices = "Faturalar" +iso27001 = "ISO 27001" +legalFilings = "Yasal başvurular" +medicalPhi = "Tıbbi / PHI" +never = "Asla" +ninetyDays = "90 gün" +oneYear = "1 yıl" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Belgeyi karantinaya al" +routeToBucket = "Bucket'a yönlendir" +s3Bucket = "S3 bucket" +sevenYears = "7 yıl" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Vergi belgeleri" +thirtyDays = "30 gün" +threeYears = "3 yıl" +webhook = "Webhook" + [portal] comingSoon = "Yakında" @@ -8067,10 +8050,6 @@ title = "Oturum süresi doldu" [portal.users] title = "Kullanıcılar" -[portal.users.roles] -subtitle = "Her rol her planda bulunur — her birinin yapabilecekleri kuruluş genelinde sabittir." -title = "Roller" - [portal.users.roles.admin] label = "Yönetici (Kuruluş sahibi)" summary = "Çalışma alanı, ayarlar ve üyeler üzerinde tam yönetişim." diff --git a/frontend/editor/public/locales/uk-UA/translation.toml b/frontend/editor/public/locales/uk-UA/translation.toml index 18669c7b19..d0cdcc91d5 100644 --- a/frontend/editor/public/locales/uk-UA/translation.toml +++ b/frontend/editor/public/locales/uk-UA/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Договори" -"Financial reports" = "Фінансові звіти" -"HR records" = "Кадрові записи" -Insurance = "Страхування" -Invoices = "Рахунки-фактури" -"Legal filings" = "Юридичні подання" -"Medical / PHI" = "Медичні / PHI" -"Tax documents" = "Податкові документи" - [policies.enforcement] applying = "Застосовуємо {{names}}" applyingProgress = "Застосовуємо {{names}} ({{done}} з {{total}})" @@ -6025,51 +6015,6 @@ notify = "Сповіщати під час маршрутизації" onViolation = "У разі невідповідності" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 рік" -"30 days" = "30 днів" -"90 days" = "90 днів" -Never = "Ніколи" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Позначити для перевірки" -Hold = "Утримати" -"Route to bucket" = "Маршрутизувати в bucket" - -[policies.fieldOption.destination] -Documents = "Документи" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 рік" -"3 years" = "3 роки" -"30 days" = "30 днів" -"7 years" = "7 років" -Indefinite = "Безстроково" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Автоматично приховати PHI" -"Block export" = "Заблокувати експорт" -"Flag for review" = "Позначити для перевірки" -"Quarantine document" = "Помістити документ у карантин" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Закрити накладення" enforcingTitle = "Застосування політики..." viewAnyway = "Переглянути файл (політика ще застосовується)" +[policyOption] +autoRedactPhi = "Автоматично приховати PHI" +blockExport = "Заблокувати експорт" +contracts = "Договори" +documents = "Документи" +fedramp = "FedRAMP" +financialReports = "Фінансові звіти" +flagForReview = "Позначити для перевірки" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Утримати" +hrRecords = "Кадрові записи" +indefinite = "Безстроково" +insurance = "Страхування" +invoices = "Рахунки-фактури" +iso27001 = "ISO 27001" +legalFilings = "Юридичні подання" +medicalPhi = "Медичні / PHI" +never = "Ніколи" +ninetyDays = "90 днів" +oneYear = "1 рік" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Помістити документ у карантин" +routeToBucket = "Маршрутизувати в bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 років" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Податкові документи" +thirtyDays = "30 днів" +threeYears = "3 роки" +webhook = "Webhook" + [portal] comingSoon = "Незабаром" @@ -8067,10 +8050,6 @@ title = "Сеанс закінчився" [portal.users] title = "Користувачі" -[portal.users.roles] -subtitle = "Кожна роль існує в кожному плані — те, що кожна може робити, фіксовано для всієї організації." -title = "Ролі" - [portal.users.roles.admin] label = "Адміністратор (власник організації)" summary = "Повне керування робочим простором, налаштуваннями та учасниками." diff --git a/frontend/editor/public/locales/vi-VN/translation.toml b/frontend/editor/public/locales/vi-VN/translation.toml index 8edc557e3a..18afcd310f 100644 --- a/frontend/editor/public/locales/vi-VN/translation.toml +++ b/frontend/editor/public/locales/vi-VN/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "Hợp đồng" -"Financial reports" = "Báo cáo tài chính" -"HR records" = "Hồ sơ nhân sự" -Insurance = "Bảo hiểm" -Invoices = "Hóa đơn" -"Legal filings" = "Hồ sơ pháp lý" -"Medical / PHI" = "Y tế / PHI" -"Tax documents" = "Tài liệu thuế" - [policies.enforcement] applying = "Đang áp dụng {{names}}" applyingProgress = "Đang áp dụng {{names}} ({{done}} trong {{total}})" @@ -6025,51 +6015,6 @@ notify = "Thông báo khi định tuyến" onViolation = "Khi không tuân thủ" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 năm" -"30 days" = "30 ngày" -"90 days" = "90 ngày" -Never = "Không bao giờ" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "Đánh dấu để xem xét" -Hold = "Giữ lại" -"Route to bucket" = "Định tuyến đến bucket" - -[policies.fieldOption.destination] -Documents = "Tài liệu" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 năm" -"3 years" = "3 năm" -"30 days" = "30 ngày" -"7 years" = "7 năm" -Indefinite = "Vô thời hạn" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "Tự động che PHI" -"Block export" = "Chặn xuất" -"Flag for review" = "Đánh dấu để xem xét" -"Quarantine document" = "Cách ly tài liệu" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "Đóng lớp phủ" enforcingTitle = "Đang thực thi chính sách..." viewAnyway = "Xem tệp (chính sách vẫn đang thực thi)" +[policyOption] +autoRedactPhi = "Tự động che PHI" +blockExport = "Chặn xuất" +contracts = "Hợp đồng" +documents = "Tài liệu" +fedramp = "FedRAMP" +financialReports = "Báo cáo tài chính" +flagForReview = "Đánh dấu để xem xét" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "Giữ lại" +hrRecords = "Hồ sơ nhân sự" +indefinite = "Vô thời hạn" +insurance = "Bảo hiểm" +invoices = "Hóa đơn" +iso27001 = "ISO 27001" +legalFilings = "Hồ sơ pháp lý" +medicalPhi = "Y tế / PHI" +never = "Không bao giờ" +ninetyDays = "90 ngày" +oneYear = "1 năm" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "Cách ly tài liệu" +routeToBucket = "Định tuyến đến bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 năm" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "Tài liệu thuế" +thirtyDays = "30 ngày" +threeYears = "3 năm" +webhook = "Webhook" + [portal] comingSoon = "Sắp ra mắt" @@ -8067,10 +8050,6 @@ title = "Phiên đã hết hạn" [portal.users] title = "Người dùng" -[portal.users.roles] -subtitle = "Mọi vai trò tồn tại trên mọi gói — những gì mỗi vai trò có thể làm là cố định trên toàn tổ chức." -title = "Vai trò" - [portal.users.roles.admin] label = "Quản trị viên (Chủ sở hữu tổ chức)" summary = "Toàn quyền quản trị workspace, cài đặt và thành viên." diff --git a/frontend/editor/public/locales/zh-BO/translation.toml b/frontend/editor/public/locales/zh-BO/translation.toml index 3a224f3633..836971b555 100644 --- a/frontend/editor/public/locales/zh-BO/translation.toml +++ b/frontend/editor/public/locales/zh-BO/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "合同" -"Financial reports" = "财务报告" -"HR records" = "HR 记录" -Insurance = "保险" -Invoices = "发票" -"Legal filings" = "法律申报文件" -"Medical / PHI" = "医疗 / PHI" -"Tax documents" = "税务文件" - [policies.enforcement] applying = "正在应用 {{names}}" applyingProgress = "正在应用 {{names}}({{done}}/{{total}})" @@ -6025,51 +6015,6 @@ notify = "路由时通知" onViolation = "不合规时" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 年" -"30 days" = "30 天" -"90 days" = "90 天" -Never = "从不" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "标记以供审核" -Hold = "保留" -"Route to bucket" = "路由到存储桶" - -[policies.fieldOption.destination] -Documents = "文档" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 年" -"3 years" = "3 年" -"30 days" = "30 天" -"7 years" = "7 年" -Indefinite = "无限期" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "自动遮盖 PHI" -"Block export" = "阻止导出" -"Flag for review" = "标记以供审核" -"Quarantine document" = "隔离文档" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "关闭覆盖层" enforcingTitle = "正在执行策略..." viewAnyway = "查看文件(策略仍在执行)" +[policyOption] +autoRedactPhi = "自动遮盖 PHI" +blockExport = "阻止导出" +contracts = "合同" +documents = "文档" +fedramp = "FedRAMP" +financialReports = "财务报告" +flagForReview = "标记以供审核" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "保留" +hrRecords = "HR 记录" +indefinite = "无限期" +insurance = "保险" +invoices = "发票" +iso27001 = "ISO 27001" +legalFilings = "法律申报文件" +medicalPhi = "医疗 / PHI" +never = "从不" +ninetyDays = "90 天" +oneYear = "1 年" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "隔离文档" +routeToBucket = "路由到存储桶" +s3Bucket = "S3 bucket" +sevenYears = "7 年" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "税务文件" +thirtyDays = "30 天" +threeYears = "3 年" +webhook = "Webhook" + [portal] comingSoon = "即将推出" @@ -8067,10 +8050,6 @@ title = "会话已过期" [portal.users] title = "用户" -[portal.users.roles] -subtitle = "每个方案都有所有角色——每个角色能做什么在整个组织中固定。" -title = "角色" - [portal.users.roles.admin] label = "管理员(组织所有者)" summary = "对工作区、设置和成员拥有完整治理权限。" diff --git a/frontend/editor/public/locales/zh-CN/translation.toml b/frontend/editor/public/locales/zh-CN/translation.toml index d81be6405a..ef6ff55a7b 100644 --- a/frontend/editor/public/locales/zh-CN/translation.toml +++ b/frontend/editor/public/locales/zh-CN/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "合同" -"Financial reports" = "财务报告" -"HR records" = "人力资源记录" -Insurance = "保险" -Invoices = "发票" -"Legal filings" = "法律申报文件" -"Medical / PHI" = "医疗 / PHI" -"Tax documents" = "税务文件" - [policies.enforcement] applying = "正在应用 {{names}}" applyingProgress = "正在应用 {{names}} ({{done}}/{{total}})" @@ -6025,51 +6015,6 @@ notify = "路由时通知" onViolation = "不合规时" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 年" -"30 days" = "30 天" -"90 days" = "90 天" -Never = "从不" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "标记以供审核" -Hold = "保留" -"Route to bucket" = "路由到存储桶" - -[policies.fieldOption.destination] -Documents = "文档" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 年" -"3 years" = "3 年" -"30 days" = "30 天" -"7 years" = "7 年" -Indefinite = "无限期" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "自动遮盖 PHI" -"Block export" = "阻止导出" -"Flag for review" = "标记以供审核" -"Quarantine document" = "隔离文档" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "关闭叠加层" enforcingTitle = "正在强制执行策略..." viewAnyway = "查看文件(策略仍在强制执行)" +[policyOption] +autoRedactPhi = "自动遮盖 PHI" +blockExport = "阻止导出" +contracts = "合同" +documents = "文档" +fedramp = "FedRAMP" +financialReports = "财务报告" +flagForReview = "标记以供审核" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "保留" +hrRecords = "人力资源记录" +indefinite = "无限期" +insurance = "保险" +invoices = "发票" +iso27001 = "ISO 27001" +legalFilings = "法律申报文件" +medicalPhi = "医疗 / PHI" +never = "从不" +ninetyDays = "90 天" +oneYear = "1 年" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "隔离文档" +routeToBucket = "路由到存储桶" +s3Bucket = "S3 bucket" +sevenYears = "7 年" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "税务文件" +thirtyDays = "30 天" +threeYears = "3 年" +webhook = "Webhook" + [portal] comingSoon = "即将推出" @@ -8067,10 +8050,6 @@ title = "会话已过期" [portal.users] title = "用户" -[portal.users.roles] -subtitle = "每个方案都有每个角色——每个角色可执行的操作在整个组织中固定。" -title = "角色" - [portal.users.roles.admin] label = "管理员(组织所有者)" summary = "对工作区、设置和成员拥有完整治理权限。" diff --git a/frontend/editor/public/locales/zh-TW/translation.toml b/frontend/editor/public/locales/zh-TW/translation.toml index 98194e6c9a..c0f9e5fe18 100644 --- a/frontend/editor/public/locales/zh-TW/translation.toml +++ b/frontend/editor/public/locales/zh-TW/translation.toml @@ -5980,16 +5980,6 @@ statDocsEnforced = "Docs enforced" statusActive = "Active" statusPaused = "Paused" -[policies.docType] -Contracts = "合約" -"Financial reports" = "財務報告" -"HR records" = "人資紀錄" -Insurance = "保險" -Invoices = "發票" -"Legal filings" = "法律申報文件" -"Medical / PHI" = "醫療 / PHI" -"Tax documents" = "稅務文件" - [policies.enforcement] applying = "正在套用 {{names}}" applyingProgress = "正在套用 {{names}}({{done}} / {{total}})" @@ -6025,51 +6015,6 @@ notify = "路由時通知" onViolation = "不符合規範時" webhookUrl = "Webhook URL" -[policies.fieldOption.archiveAfter] -"1 year" = "1 年" -"30 days" = "30 天" -"90 days" = "90 天" -Never = "永不" - -[policies.fieldOption.belowThreshold] -"Flag for review" = "標記以供審查" -Hold = "保留" -"Route to bucket" = "路由到 bucket" - -[policies.fieldOption.destination] -Documents = "文件" -"S3 bucket" = "S3 bucket" -SharePoint = "SharePoint" -Webhook = "Webhook" - -[policies.fieldOption.frameworks] -FedRAMP = "FedRAMP" -GDPR = "GDPR" -HIPAA = "HIPAA" -"ISO 27001" = "ISO 27001" -"PCI DSS" = "PCI DSS" -"SOC 2" = "SOC 2" - -[policies.fieldOption.keepFor] -"1 year" = "1 年" -"3 years" = "3 年" -"30 days" = "30 天" -"7 years" = "7 年" -Indefinite = "無限期" - -[policies.fieldOption.minConfidence] -"60%" = "60%" -"70%" = "70%" -"80%" = "80%" -"90%" = "90%" -"95%" = "95%" - -[policies.fieldOption.onViolation] -"Auto-redact PHI" = "自動遮蔽 PHI" -"Block export" = "封鎖匯出" -"Flag for review" = "標記以供審查" -"Quarantine document" = "隔離文件" - [policies.fields] selectedCount = "{{count}} selected" @@ -6203,6 +6148,44 @@ dismiss = "關閉覆蓋層" enforcingTitle = "正在強制執行政策..." viewAnyway = "檢視檔案(政策仍在強制執行)" +[policyOption] +autoRedactPhi = "自動遮蔽 PHI" +blockExport = "封鎖匯出" +contracts = "合約" +documents = "文件" +fedramp = "FedRAMP" +financialReports = "財務報告" +flagForReview = "標記以供審查" +gdpr = "GDPR" +hipaa = "HIPAA" +hold = "保留" +hrRecords = "人資紀錄" +indefinite = "無限期" +insurance = "保險" +invoices = "發票" +iso27001 = "ISO 27001" +legalFilings = "法律申報文件" +medicalPhi = "醫療 / PHI" +never = "永不" +ninetyDays = "90 天" +oneYear = "1 年" +p60 = "60%" +p70 = "70%" +p80 = "80%" +p90 = "90%" +p95 = "95%" +pciDss = "PCI DSS" +quarantineDocument = "隔離文件" +routeToBucket = "路由到 bucket" +s3Bucket = "S3 bucket" +sevenYears = "7 年" +sharePoint = "SharePoint" +soc2 = "SOC 2" +taxDocuments = "稅務文件" +thirtyDays = "30 天" +threeYears = "3 年" +webhook = "Webhook" + [portal] comingSoon = "即將推出" @@ -8067,10 +8050,6 @@ title = "工作階段已過期" [portal.users] title = "使用者" -[portal.users.roles] -subtitle = "每個方案都有所有角色 — 各角色可執行的動作在整個組織中固定一致。" -title = "角色" - [portal.users.roles.admin] label = "管理員(組織擁有者)" summary = "對工作區、設定和成員擁有完整治理權限。" diff --git a/frontend/editor/src/core/i18n/translationAudit.ts b/frontend/editor/src/core/i18n/translationAudit.ts index e581689070..79fee63a7c 100644 --- a/frontend/editor/src/core/i18n/translationAudit.ts +++ b/frontend/editor/src/core/i18n/translationAudit.ts @@ -99,11 +99,12 @@ export const I18N_PROJECTS: TranslationProject[] = [ /^portal\.procurement\.journeySteps\./, /^portal\.users\.roles\./, /^portal\.policies\.(categories|config|endpoints)\./, - // Policy field/option/doc-type display copy is looked up with keys - // derived from catalogue data (t(`policies.fieldOption.${key}.${opt}`)) - // in both PolicyFieldRows and the setup wizards — invisible to the - // static scan. The raw catalogue value stays the stored fallback. - /^policies\.(field|fieldOption|docType)\./, + // Policy field labels + option display copy are looked up with keys + // derived from catalogue data (t(`policies.field.${key}`), + // t(`policyOption.${id}`)) in the PolicyFieldRows and setup wizards — + // invisible to the static scan. The raw catalogue value is the fallback. + /^policies\.field\./, + /^policyOption\./, ], minUsedKeys: 100, minLocaleKeys: 100, diff --git a/frontend/editor/src/portal/api/policies.ts b/frontend/editor/src/portal/api/policies.ts index 9bcbf9db0d..5c3c33a75a 100644 --- a/frontend/editor/src/portal/api/policies.ts +++ b/frontend/editor/src/portal/api/policies.ts @@ -238,15 +238,15 @@ export const POLICY_CONFIG: Record = { label: "portal.policies.config.ingestion.fields.minConfidence", key: "minConfidence", type: "select", - value: "80%", - options: ["60%", "70%", "80%", "90%", "95%"], + value: "p80", + options: ["p60", "p70", "p80", "p90", "p95"], }, { label: "portal.policies.config.ingestion.fields.belowThreshold", key: "belowThreshold", type: "select", - value: "Flag for review", - options: ["Flag for review", "Route to bucket", "Hold"], + value: "flagForReview", + options: ["flagForReview", "routeToBucket", "hold"], }, ], }, @@ -305,19 +305,19 @@ export const POLICY_CONFIG: Record = { label: "portal.policies.config.compliance.fields.frameworks", key: "frameworks", type: "chips", - value: ["HIPAA"], - options: ["HIPAA", "GDPR", "SOC 2", "FedRAMP", "PCI DSS", "ISO 27001"], + value: ["hipaa"], + options: ["hipaa", "gdpr", "soc2", "fedramp", "pciDss", "iso27001"], }, { label: "portal.policies.config.compliance.fields.onViolation", key: "onViolation", type: "select", - value: "Flag for review", + value: "flagForReview", options: [ - "Flag for review", - "Block export", - "Auto-redact PHI", - "Quarantine document", + "flagForReview", + "blockExport", + "autoRedactPhi", + "quarantineDocument", ], }, { @@ -348,8 +348,8 @@ export const POLICY_CONFIG: Record = { label: "portal.policies.config.routing.fields.destination", key: "destination", type: "select", - value: "Documents", - options: ["Documents", "S3 bucket", "SharePoint", "Webhook"], + value: "documents", + options: ["documents", "s3Bucket", "sharePoint", "webhook"], }, { label: "portal.policies.config.routing.fields.webhookUrl", @@ -379,15 +379,21 @@ export const POLICY_CONFIG: Record = { label: "portal.policies.config.retention.fields.keepFor", key: "keepFor", type: "select", - value: "7 years", - options: ["30 days", "1 year", "3 years", "7 years", "Indefinite"], + value: "sevenYears", + options: [ + "thirtyDays", + "oneYear", + "threeYears", + "sevenYears", + "indefinite", + ], }, { label: "portal.policies.config.retention.fields.archiveAfter", key: "archiveAfter", type: "select", - value: "Never", - options: ["30 days", "90 days", "1 year", "Never"], + value: "never", + options: ["thirtyDays", "ninetyDays", "oneYear", "never"], }, { label: "portal.policies.config.retention.fields.immutableHold", @@ -400,14 +406,14 @@ export const POLICY_CONFIG: Record = { }; export const POLICY_DOC_TYPES: string[] = [ - "Contracts", - "Invoices", - "Tax documents", - "HR records", - "Insurance", - "Medical / PHI", - "Legal filings", - "Financial reports", + "contracts", + "invoices", + "taxDocuments", + "hrRecords", + "insurance", + "medicalPhi", + "legalFilings", + "financialReports", ]; // ── Client-side catalogue assembly ─────────────────────────────────────────── diff --git a/frontend/editor/src/portal/components/policies/PolicyFieldRow.tsx b/frontend/editor/src/portal/components/policies/PolicyFieldRow.tsx index 0ef87d77a9..b3c0b2c622 100644 --- a/frontend/editor/src/portal/components/policies/PolicyFieldRow.tsx +++ b/frontend/editor/src/portal/components/policies/PolicyFieldRow.tsx @@ -51,7 +51,7 @@ export function PolicyFieldRow({ size="sm" onClick={() => toggle(opt)} > - {t(`policies.fieldOption.${field.key}.${opt}`, opt)} + {t(`policyOption.${opt}`, opt)} ))} @@ -67,7 +67,7 @@ export function PolicyFieldRow({ value={typeof value === "string" ? value : ""} options={(field.options ?? []).map((o) => ({ value: o, - label: t(`policies.fieldOption.${field.key}.${o}`, o), + label: t(`policyOption.${o}`, o), }))} onChange={(value) => onChange(value ?? "")} /> diff --git a/frontend/editor/src/proprietary/data/policyDefinitions.tsx b/frontend/editor/src/proprietary/data/policyDefinitions.tsx index 1b8eacf931..3842b1885a 100644 --- a/frontend/editor/src/proprietary/data/policyDefinitions.tsx +++ b/frontend/editor/src/proprietary/data/policyDefinitions.tsx @@ -164,15 +164,15 @@ export const POLICY_CONFIG: Record = { label: "Min confidence", key: "minConfidence", type: "select", - value: "80%", - options: ["60%", "70%", "80%", "90%", "95%"], + value: "p80", + options: ["p60", "p70", "p80", "p90", "p95"], }, { label: "Below threshold", key: "belowThreshold", type: "select", - value: "Flag for review", - options: ["Flag for review", "Route to bucket", "Hold"], + value: "flagForReview", + options: ["flagForReview", "routeToBucket", "hold"], }, ], }, @@ -237,27 +237,27 @@ export const POLICY_CONFIG: Record = { label: "Frameworks", key: "frameworks", type: "chips", - value: ["HIPAA"], + value: ["hipaa"], options: [ - "HIPAA", - "GDPR", - "SOC 2", - "FedRAMP", - "PCI DSS", - "CCPA", - "ISO 27001", + "hipaa", + "gdpr", + "soc2", + "fedramp", + "pciDss", + "ccpa", + "iso27001", ], }, { label: "When non-compliant", key: "onViolation", type: "select", - value: "Flag for review", + value: "flagForReview", options: [ - "Flag for review", - "Block export", - "Auto-redact PHI", - "Quarantine document", + "flagForReview", + "blockExport", + "autoRedactPhi", + "quarantineDocument", ], }, { label: "Audit trail", key: "auditTrail", type: "toggle", value: true }, @@ -275,8 +275,8 @@ export const POLICY_CONFIG: Record = { label: "Destination", key: "destination", type: "select", - value: "Documents", - options: ["Documents", "S3 bucket", "SharePoint", "Webhook"], + value: "documents", + options: ["documents", "s3Bucket", "sharePoint", "webhook"], }, { label: "Webhook URL", key: "webhookUrl", type: "text", value: "" }, { label: "Notify on route", key: "notify", type: "toggle", value: false }, @@ -293,15 +293,21 @@ export const POLICY_CONFIG: Record = { label: "Keep for", key: "keepFor", type: "select", - value: "7 years", - options: ["30 days", "1 year", "3 years", "7 years", "Indefinite"], + value: "sevenYears", + options: [ + "thirtyDays", + "oneYear", + "threeYears", + "sevenYears", + "indefinite", + ], }, { label: "Archive after", key: "archiveAfter", type: "select", - value: "Never", - options: ["30 days", "90 days", "1 year", "Never"], + value: "never", + options: ["thirtyDays", "ninetyDays", "oneYear", "never"], }, { label: "Immutable hold", @@ -355,12 +361,12 @@ export const POLICY_SOURCES: PolicySource[] = [ /** Document types selectable when narrowing scope (gated behind classification). */ export const POLICY_DOC_TYPES: string[] = [ - "Contracts", - "Invoices", - "Tax documents", - "HR records", - "Insurance", - "Medical / PHI", - "Legal filings", - "Financial reports", + "contracts", + "invoices", + "taxDocuments", + "hrRecords", + "insurance", + "medicalPhi", + "legalFilings", + "financialReports", ]; From c500c2fae7a9c1252e0ac0fef6d91c50edf6aeff Mon Sep 17 00:00:00 2001 From: Ludy Date: Sun, 12 Jul 2026 07:33:09 +0200 Subject: [PATCH 07/12] fix(desktop): preserve RGBA format for Tauri app icon (#6990) # Description of Changes - Replaced the Tauri application icon with an RGBA-formatted PNG. - Added a root `.imgbotconfig` that excludes the Tauri icon from automatic image optimization. - Fixed the `desktop:test` compilation failure caused by `tauri::generate_context!()` rejecting the previous non-RGBA icon. - Prevented ImgBot from potentially converting the icon back to an unsupported indexed PNG while optimizing its file size. - Verified that the current icon uses PNG Color Type 6 (`Truecolour with alpha`). ```sh [desktop:test] error: proc macro panicked [desktop:test] --> src/lib.rs:202:12 [desktop:test] | [desktop:test] 202 | .build(tauri::generate_context!()) [desktop:test] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [desktop:test] | [desktop:test] = help: message: icon /Users/runner/work/Stirling-PDF/Stirling-PDF/frontend/editor/src-tauri/icons/icon.png is not RGBA [desktop:test] [desktop:test] error: could not compile `***-pdf` (lib) due to 1 previous error [desktop:test] warning: build failed, waiting for other jobs to finish... [desktop:test] error: could not compile `***-pdf` (lib test) due to 1 previous error task: Failed to run task "desktop:test": exit status 101 Error: exit status 101 ``` --- ## Checklist ### General - [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md) (if applicable) - [ ] I have performed a self-review of my own code - [ ] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### Translations (if applicable) - [ ] I ran [`scripts/counter_translation.py`](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/docs/counter_translation.md) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have run `task check` to verify linters, typechecks, and tests pass - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#7-testing) for more details. --- .imgbotconfig | 5 +++++ frontend/editor/src-tauri/icons/icon.png | Bin 8987 -> 19631 bytes 2 files changed, 5 insertions(+) create mode 100644 .imgbotconfig diff --git a/.imgbotconfig b/.imgbotconfig new file mode 100644 index 0000000000..720b938475 --- /dev/null +++ b/.imgbotconfig @@ -0,0 +1,5 @@ +{ + "ignoredFiles": [ + "frontend/editor/src-tauri/icons/icon.png" + ] +} diff --git a/frontend/editor/src-tauri/icons/icon.png b/frontend/editor/src-tauri/icons/icon.png index 05069d088cf0471cfeea501ba1b424246343973b..5819d1b89dfa00cc6642d88cdafda58a8fc641d1 100644 GIT binary patch literal 19631 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 literal 8987 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 SD>5)JFnGH9xvX Date: Sun, 12 Jul 2026 11:16:55 +0200 Subject: [PATCH 08/12] fix(i18n): localize hardcoded frontend text in English and German (#6993) --- .../public/locales/de-DE/translation.toml | 42 ++++++++++++ .../public/locales/en-US/translation.toml | 42 ++++++++++++ .../onboarding/slides/MFASetupSlide.tsx | 67 ++++++++++++++----- .../tools/addStamp/StampPreview.tsx | 6 +- .../components/viewer/BookmarkSidebar.tsx | 32 +++++++-- .../core/components/viewer/LayerSidebar.tsx | 6 +- .../components/viewer/ThumbnailSidebar.tsx | 5 +- frontend/editor/src/core/tools/SwaggerUI.tsx | 8 ++- .../src/core/tools/formFill/FormFill.tsx | 18 +++-- frontend/editor/src/core/ui/CodeBlock.tsx | 4 +- .../proprietary/routes/AuthCallback.test.tsx | 2 +- .../src/proprietary/routes/AuthCallback.tsx | 45 +++++++++++-- .../editor/src/proprietary/routes/Landing.tsx | 4 +- .../saas/components/shared/AppConfigModal.tsx | 13 ++-- .../shared/charts/StackedBarChart.tsx | 4 +- .../shared/config/ProfilePictureCropper.tsx | 2 +- 16 files changed, 245 insertions(+), 55 deletions(-) diff --git a/frontend/editor/public/locales/de-DE/translation.toml b/frontend/editor/public/locales/de-DE/translation.toml index 2d50d8aa53..29efeca137 100644 --- a/frontend/editor/public/locales/de-DE/translation.toml +++ b/frontend/editor/public/locales/de-DE/translation.toml @@ -356,6 +356,7 @@ text = "Diese Berechtigungen kontrollieren, was Benutzer mit der PDF machen kön title = "Berechtigungen ändern" [addStamp] +preview = "Stempelvorschau" tags = "stamp,mark,seal,approved,rejected,confidential,stamp tool,rubber stamp,date stamp,approval stamp,received,void,copy,original" [AddStampRequest] @@ -1842,6 +1843,15 @@ export = "Export" accessDenied = "Zugriff verweigert" insufficientPermissions = "Sie haben keine Berechtigung, diese Aktion auszuführen." +[auth.callback] +completing = "Authentifizierung wird abgeschlossen" +invalidToken = "OAuth-Anmeldung fehlgeschlagen – ungültiges Token." +missingToken = "OAuth-Anmeldung fehlgeschlagen – kein Token empfangen." +oauthFailed = "OAuth-Anmeldung fehlgeschlagen. Bitte versuchen Sie es erneut." +pleaseWait = "Bitte warten Sie, während wir Ihre Anmeldung abschließen." +signedOut = "Sie wurden abgemeldet. Bitte melden Sie sich erneut an." +windowMayClose = "Sie können dieses Fenster schließen, sobald der Vorgang abgeschlossen ist." + [auth.displayName] guest = "Gast" user = "Benutzer" @@ -2824,6 +2834,7 @@ next = "Weiter" preview = "Vorschau" previous = "Zurück" refresh = "Aktualisieren" +remaining = "Verbleibend" retry = "Wiederholen" save = "Save" @@ -4072,10 +4083,17 @@ discord = "Discord" issues = "GitHub" [formFill] +allSaved = "Alles gespeichert" +extractCsvError = "CSV konnte nicht extrahiert werden" +extractXlsxError = "XLSX konnte nicht extrahiert werden" flattenAfterFilling = "Nach dem Ausfüllen ebnen" +requiredAbbreviation = "erf." +requiredFieldsError = "Bitte füllen Sie alle Pflichtfelder aus" rescanFields = "Felder erneut scannen" rescanFormFields = "Formularfelder erneut scannen" save = "Speichern" +saveShortcut = "Strg+S zum Speichern" +unsavedChanges = "Nicht gespeicherte Änderungen" [formFill.sidebar] close = "Seitenleiste schließen" @@ -4996,7 +5014,21 @@ titleWithOs = "Herunterladen für {{osLabel}}" [onboarding.mfa] authenticationCode = "Authentifizierungscode" +description = "Schützen Sie Ihr Konto, indem Sie eine Authenticator-App verknüpfen. Scannen Sie den QR-Code oder geben Sie den Einrichtungsschlüssel ein und bestätigen Sie anschließend den sechsstelligen Code." +enable = "MFA aktivieren" +enableError = "Die Multi-Faktor-Authentifizierung konnte nicht aktiviert werden. Prüfen Sie den Code und versuchen Sie es erneut." +enterCode = "Geben Sie den sechsstelligen Code aus Ihrer App ein." +enterCodeError = "Geben Sie den Authentifizierungscode ein, um fortzufahren." +logout = "Abmelden" +openAuthenticator = "Öffnen Sie Google Authenticator, Authy oder 1Password." qrCodeLoading = "Ihr QR-Code wird erstellt…" +regenerateQrCode = "QR-Code neu erstellen" +scanQrCode = "Scannen Sie den QR-Code oder geben Sie den unten stehenden Einrichtungsschlüssel ein." +setupError = "Die Einrichtung der Zwei-Faktor-Authentifizierung konnte nicht gestartet werden. Bitte versuchen Sie es erneut." +setupKey = "Einrichtungsschlüssel (manuelle Eingabe)" +stepByStep = "Schritt für Schritt" +success = "MFA wurde aktiviert. Sie können jetzt fortfahren." +title = "Einrichtung der Multi-Faktor-Authentifizierung" [onboarding.planOverview] adminBodyLoginDisabled = "Sobald Sie den Login-Modus aktivieren, können Sie Nutzer verwalten, Einstellungen konfigurieren und die Servergesundheit überwachen. Die ersten {{freeTierLimit}} Personen auf Ihrem Server nutzen Stirling kostenlos." @@ -9110,6 +9142,11 @@ security = "Sicherheit" telegram = "Telegram" title = "Sicherheit & Authentifizierung" +[settings.signOut] +confirm = "Möchten Sie sich wirklich abmelden?" +submit = "Abmelden" +title = "Abmelden" + [settings.team] title = "Team" @@ -9726,6 +9763,9 @@ uploadButton = "Auf Server hochladen" title = "Stirling-PDF Survey" [swagger] +clickHere = "hier klicken" +fallback = "Falls die Seite nicht automatisch geöffnet wurde," +opening = "Swagger UI wird in einem neuen Tab geöffnet..." tags = "API,Dokumentation,Swagger,Endpunkte,Entwicklung" title = "API-Dokumentation" @@ -10281,9 +10321,11 @@ title = "Attachments" [viewer.bookmarks] bookmarkTitle = "Lesezeichentitel" +bookmarkTitleRequired = "Ein Lesezeichentitel ist erforderlich" closeSidebar = "Seitenleiste für Lesezeichen schließen" collapseAll = "Alle Lesezeichen einklappen" expandAll = "Alle Lesezeichen ausklappen" +searchPlaceholder = "Lesezeichen durchsuchen" [viewer.comments] addComment = "Kommentar hinzufügen" diff --git a/frontend/editor/public/locales/en-US/translation.toml b/frontend/editor/public/locales/en-US/translation.toml index 3c25732878..9663478000 100644 --- a/frontend/editor/public/locales/en-US/translation.toml +++ b/frontend/editor/public/locales/en-US/translation.toml @@ -356,6 +356,7 @@ text = "These permissions control what users can do with the PDF. Most effective title = "Change Permissions" [addStamp] +preview = "Preview Stamp" tags = "stamp,mark,seal,approved,rejected,confidential,stamp tool,rubber stamp,date stamp,approval stamp,received,void,copy,original" [AddStampRequest] @@ -1842,6 +1843,15 @@ export = "Export" accessDenied = "Access Denied" insufficientPermissions = "You do not have permission to perform this action." +[auth.callback] +completing = "Completing authentication" +invalidToken = "OAuth login failed - invalid token." +missingToken = "OAuth login failed - no token received." +oauthFailed = "OAuth login failed. Please try again." +pleaseWait = "Please wait while we finish signing you in." +signedOut = "You have been signed out. Please sign in again." +windowMayClose = "You can close this window once it completes." + [auth.displayName] guest = "Guest" user = "User" @@ -2824,6 +2834,7 @@ next = "Next" preview = "Preview" previous = "Previous" refresh = "Refresh" +remaining = "Remaining" retry = "Retry" save = "Save" @@ -4072,10 +4083,17 @@ discord = "Discord" issues = "GitHub" [formFill] +allSaved = "All saved" +extractCsvError = "Failed to extract CSV" +extractXlsxError = "Failed to extract XLSX" flattenAfterFilling = "Flatten after filling" +requiredAbbreviation = "req" +requiredFieldsError = "Please fill in all required fields" rescanFields = "Re-scan fields" rescanFormFields = "Re-scan form fields" save = "Save" +saveShortcut = "Ctrl+S to save" +unsavedChanges = "Unsaved changes" [formFill.sidebar] close = "Close sidebar" @@ -5016,7 +5034,21 @@ titleWithOs = "Download for {{osLabel}}" [onboarding.mfa] authenticationCode = "Authentication code" +description = "Secure your account by linking an authenticator app. Scan the QR code or enter the setup key, then confirm the 6-digit code to finish." +enable = "Enable MFA" +enableError = "Unable to enable two-factor authentication. Check the code and try again." +enterCode = "Enter the 6-digit code from your app." +enterCodeError = "Enter the authentication code to continue." +logout = "Logout" +openAuthenticator = "Open Google Authenticator, Authy, or 1Password." qrCodeLoading = "Generating your QR code…" +regenerateQrCode = "Regenerate QR code" +scanQrCode = "Scan the QR code or enter the setup key below." +setupError = "Unable to start two-factor setup. Please try again." +setupKey = "Setup key (manual entry)" +stepByStep = "Step-by-step" +success = "MFA has been enabled. You can now continue." +title = "Multi-Factor Authentication Setup" [onboarding.planOverview] adminBodyLoginDisabled = "Once you enable login mode, you can manage users, configure settings, and monitor server health. The first {{freeTierLimit}} people on your server get to use Stirling free of charge." @@ -9178,6 +9210,11 @@ security = "Security" telegram = "Telegram" title = "Security & Authentication" +[settings.signOut] +confirm = "Are you sure you want to sign out?" +submit = "Sign out" +title = "Sign out" + [settings.team] title = "Team" @@ -9794,6 +9831,9 @@ uploadButton = "Upload to Server" title = "Stirling-PDF Survey" [swagger] +clickHere = "click here" +fallback = "If it didn't open automatically," +opening = "Opening Swagger UI in a new tab..." tags = "api,documentation,swagger,endpoints,development" title = "API Documentation" @@ -10362,9 +10402,11 @@ title = "Attachments" [viewer.bookmarks] bookmarkTitle = "Bookmark title" +bookmarkTitleRequired = "Bookmark title is required" closeSidebar = "Close bookmarks sidebar" collapseAll = "Collapse all bookmarks" expandAll = "Expand all bookmarks" +searchPlaceholder = "Search bookmarks" [viewer.comments] addComment = "Add comment" diff --git a/frontend/editor/src/core/components/onboarding/slides/MFASetupSlide.tsx b/frontend/editor/src/core/components/onboarding/slides/MFASetupSlide.tsx index 4abd09b0e6..41c8308f2b 100644 --- a/frontend/editor/src/core/components/onboarding/slides/MFASetupSlide.tsx +++ b/frontend/editor/src/core/components/onboarding/slides/MFASetupSlide.tsx @@ -26,6 +26,7 @@ import LocalIcon from "@app/components/shared/LocalIcon"; import { BASE_PATH, withBasePath } from "@app/constants/app"; import styles from "@app/components/onboarding/InitialOnboardingModal/InitialOnboardingModal.module.css"; import { MfaSetupResponse } from "@app/responses/Mfa/MfaResponse"; +import i18n from "@app/i18n"; interface MFASetupSlideProps { onMfaSetupComplete?: () => void; @@ -62,12 +63,15 @@ function MFASetupContent({ onMfaSetupComplete }: MFASetupSlideProps) { const axiosError = err as { response?: { data?: { error?: string } } }; setMfaError( axiosError.response?.data?.error || - "Unable to start two-factor setup. Please try again.", + t( + "onboarding.mfa.setupError", + "Unable to start two-factor setup. Please try again.", + ), ); } finally { setMfaLoading(false); } - }, []); + }, [t]); useEffect(() => { setupCompleteRef.current = setupComplete; @@ -96,7 +100,12 @@ function MFASetupContent({ onMfaSetupComplete }: MFASetupSlideProps) { event.preventDefault(); if (!mfaSetupCode.trim()) { - setMfaError("Enter the authentication code to continue."); + setMfaError( + t( + "onboarding.mfa.enterCodeError", + "Enter the authentication code to continue.", + ), + ); return; } @@ -110,13 +119,16 @@ function MFASetupContent({ onMfaSetupComplete }: MFASetupSlideProps) { const axiosError = err as { response?: { data?: { error?: string } } }; setMfaError( axiosError.response?.data?.error || - "Unable to enable two-factor authentication. Check the code and try again.", + t( + "onboarding.mfa.enableError", + "Unable to enable two-factor authentication. Check the code and try again.", + ), ); } finally { setSubmitting(false); } }, - [mfaSetupCode, onMfaSetupComplete], + [mfaSetupCode, onMfaSetupComplete, t], ); const isReady = Boolean(mfaSetupData); @@ -138,15 +150,30 @@ function MFASetupContent({ onMfaSetupComplete }: MFASetupSlideProps) { - Step-by-step + {t("onboarding.mfa.stepByStep", "Step-by-step")}
    -
  1. Open Google Authenticator, Authy, or 1Password.
  2. -
  3. Scan the QR code or enter the setup key below.
  4. -
  5. Enter the 6-digit code from your app.
  6. +
  7. + {t( + "onboarding.mfa.openAuthenticator", + "Open Google Authenticator, Authy, or 1Password.", + )} +
  8. +
  9. + {t( + "onboarding.mfa.scanQrCode", + "Scan the QR code or enter the setup key below.", + )} +
  10. +
  11. + {t( + "onboarding.mfa.enterCode", + "Enter the 6-digit code from your app.", + )} +
- Setup key (manual entry) + {t("onboarding.mfa.setupKey", "Setup key (manual entry)")} - Secure your account by linking an authenticator app. Scan the QR - code or enter the setup key, then confirm the 6-digit code to - finish. + {t( + "onboarding.mfa.description", + "Secure your account by linking an authenticator app. Scan the QR code or enter the setup key, then confirm the 6-digit code to finish.", + )} {mfaError && ( @@ -215,7 +243,7 @@ function MFASetupContent({ onMfaSetupComplete }: MFASetupSlideProps) { onClick={fetchMfaSetup} disabled={mfaLoading || submitting || setupComplete} > - Regenerate QR code + {t("onboarding.mfa.regenerateQrCode", "Regenerate QR code")} {setupComplete && ( - MFA has been enabled. You can now continue. + {t( + "onboarding.mfa.success", + "MFA has been enabled. You can now continue.", + )} )} @@ -249,7 +280,7 @@ export default function MFASetupSlide({ }: MFASetupSlideProps = {}): SlideConfig { return { key: "mfa-setup-slide", - title: "Multi-Factor Authentication Setup", + title: i18n.t("onboarding.mfa.title", "Multi-Factor Authentication Setup"), body: , background: { gradientStops: ["#059669", "#0891B2"], // Green to teal - security/trust colors diff --git a/frontend/editor/src/core/components/tools/addStamp/StampPreview.tsx b/frontend/editor/src/core/components/tools/addStamp/StampPreview.tsx index 88f2d72f6c..9311392beb 100644 --- a/frontend/editor/src/core/components/tools/addStamp/StampPreview.tsx +++ b/frontend/editor/src/core/components/tools/addStamp/StampPreview.tsx @@ -12,6 +12,7 @@ import { import styles from "@app/components/tools/addStamp/StampPreview.module.css"; import { PrivateContent } from "@app/components/shared/PrivateContent"; import { Button } from "@app/ui/Button"; +import { useTranslation } from "react-i18next"; type Props = { parameters: AddStampParameters; @@ -29,6 +30,7 @@ export default function StampPreview({ file, showQuickGrid, }: Props) { + const { t } = useTranslation(); const containerRef = useRef(null); const [containerSize, setContainerSize] = useState<{ width: number; @@ -366,7 +368,9 @@ export default function StampPreview({
-
Preview Stamp
+
+ {t("addStamp.preview", "Preview Stamp")} +
{ const title = newBookmarkTitle.trim(); if (!title) { - setAddBookmarkError("Bookmark title is required"); + setAddBookmarkError( + t( + "viewer.bookmarks.bookmarkTitleRequired", + "Bookmark title is required", + ), + ); return; } // Resolve the file the viewer is currently displaying. activeFileId @@ -695,7 +700,10 @@ export const BookmarkSidebar = ({ "viewer.bookmarks.expandAll", "Expand all bookmarks", )} - title="Expand all" + title={t( + "viewer.bookmarks.expandAll", + "Expand all bookmarks", + )} > @@ -746,7 +760,10 @@ export const BookmarkSidebar = ({ > setSearchTerm(event.currentTarget.value)} leftSection={ @@ -839,7 +856,10 @@ export const BookmarkSidebar = ({ @@ -360,7 +360,7 @@ export function LayerSidebar({ onClick={hideAll} disabled={allHidden || isApplying} aria-label={t("viewer.layers.hideAll", "Hide all layers")} - title="Hide all" + title={t("viewer.layers.hideAll", "Hide all layers")} > @@ -372,7 +372,7 @@ export function LayerSidebar({ size="sm" onClick={toggleLayerSidebar} aria-label={t("viewer.layers.closeSidebar", "Close layers sidebar")} - title="Close layers" + title={t("viewer.layers.closeSidebar", "Close layers sidebar")} > diff --git a/frontend/editor/src/core/components/viewer/ThumbnailSidebar.tsx b/frontend/editor/src/core/components/viewer/ThumbnailSidebar.tsx index 3fb62df970..6b195c4485 100644 --- a/frontend/editor/src/core/components/viewer/ThumbnailSidebar.tsx +++ b/frontend/editor/src/core/components/viewer/ThumbnailSidebar.tsx @@ -193,7 +193,10 @@ export function ThumbnailSidebar({ "viewer.thumbnails.closeSidebar", "Close thumbnails sidebar", )} - title="Close thumbnails" + title={t( + "viewer.thumbnails.closeSidebar", + "Close thumbnails sidebar", + )} > diff --git a/frontend/editor/src/core/tools/SwaggerUI.tsx b/frontend/editor/src/core/tools/SwaggerUI.tsx index 08a878b4c5..4ee6faf11d 100644 --- a/frontend/editor/src/core/tools/SwaggerUI.tsx +++ b/frontend/editor/src/core/tools/SwaggerUI.tsx @@ -1,8 +1,10 @@ import React, { useEffect } from "react"; import { BaseToolProps } from "@app/types/tool"; import { withBasePath } from "@app/constants/app"; +import { useTranslation } from "react-i18next"; const SwaggerUI: React.FC = () => { + const { t } = useTranslation(); useEffect(() => { // Redirect to Swagger UI window.open(withBasePath("/swagger-ui/5.21.0/index.html"), "_blank"); @@ -10,15 +12,15 @@ const SwaggerUI: React.FC = () => { return (
-

Opening Swagger UI in a new tab...

+

{t("swagger.opening", "Opening Swagger UI in a new tab...")}

- If it didn't open automatically,{" "} + {t("swagger.fallback", "If it didn't open automatically,")}{" "} - click here + {t("swagger.clickHere", "click here")}

diff --git a/frontend/editor/src/core/tools/formFill/FormFill.tsx b/frontend/editor/src/core/tools/formFill/FormFill.tsx index a99f990f33..bf1a8f5fe6 100644 --- a/frontend/editor/src/core/tools/formFill/FormFill.tsx +++ b/frontend/editor/src/core/tools/formFill/FormFill.tsx @@ -204,7 +204,7 @@ const FormFill = (_props: BaseToolProps) => { setTimeout(() => URL.revokeObjectURL(url), 250); } catch (err) { console.error("[FormFill] CSV extraction failed:", err); - setSaveError("Failed to extract CSV"); + setSaveError(t("formFill.extractCsvError", "Failed to extract CSV")); } finally { setExtracting(false); } @@ -223,7 +223,7 @@ const FormFill = (_props: BaseToolProps) => { setTimeout(() => URL.revokeObjectURL(url), 250); } catch (err) { console.error("[FormFill] XLSX extraction failed:", err); - setSaveError("Failed to extract XLSX"); + setSaveError(t("formFill.extractXlsxError", "Failed to extract XLSX")); } finally { setExtracting(false); } @@ -246,7 +246,9 @@ const FormFill = (_props: BaseToolProps) => { if (!currentFile || !isStirlingFile(currentFile)) return; if (!validateForm()) { - setSaveError("Please fill in all required fields"); + setSaveError( + t("formFill.requiredFieldsError", "Please fill in all required fields"), + ); return; } @@ -641,7 +643,9 @@ const FormFill = (_props: BaseToolProps) => { {field.label || field.name} {field.required && ( - req + + {t("formFill.requiredAbbreviation", "req")} + )}
@@ -683,10 +687,10 @@ const FormFill = (_props: BaseToolProps) => { )} {formState.isDirty || flattenChanged - ? "Unsaved changes" - : "All saved"} + ? t("formFill.unsavedChanges", "Unsaved changes") + : t("formFill.allSaved", "All saved")} - Ctrl+S to save + {t("formFill.saveShortcut", "Ctrl+S to save")}
)} diff --git a/frontend/editor/src/core/ui/CodeBlock.tsx b/frontend/editor/src/core/ui/CodeBlock.tsx index 1a05b23e4f..cff078057d 100644 --- a/frontend/editor/src/core/ui/CodeBlock.tsx +++ b/frontend/editor/src/core/ui/CodeBlock.tsx @@ -1,5 +1,6 @@ import { useState, type ReactNode } from "react"; import { Button } from "@app/ui/Button"; +import { useTranslation } from "react-i18next"; import "@app/ui/CodeBlock.css"; export type CodeLang = @@ -33,6 +34,7 @@ export function CodeBlock({ maxHeight = 400, className, }: CodeBlockProps) { + const { t } = useTranslation(); const [copied, setCopied] = useState(false); async function copy() { @@ -64,7 +66,7 @@ export function CodeBlock({ onClick={copy} aria-label="Copy code" > - {copied ? "Copied" : "Copy"} + {copied ? t("common.copied", "Copied!") : t("common.copy", "Copy")} )}
diff --git a/frontend/editor/src/proprietary/routes/AuthCallback.test.tsx b/frontend/editor/src/proprietary/routes/AuthCallback.test.tsx index 61b676e786..53b838a0d3 100644 --- a/frontend/editor/src/proprietary/routes/AuthCallback.test.tsx +++ b/frontend/editor/src/proprietary/routes/AuthCallback.test.tsx @@ -262,6 +262,6 @@ describe("AuthCallback", () => { , ); - expect(getByText("Completing authentication")).toBeInTheDocument(); + expect(getByText("auth.callback.completing")).toBeInTheDocument(); }); }); diff --git a/frontend/editor/src/proprietary/routes/AuthCallback.tsx b/frontend/editor/src/proprietary/routes/AuthCallback.tsx index f0e90f5ed0..5d09776df4 100644 --- a/frontend/editor/src/proprietary/routes/AuthCallback.tsx +++ b/frontend/editor/src/proprietary/routes/AuthCallback.tsx @@ -1,5 +1,6 @@ import { useEffect, useRef } from "react"; import { useNavigate } from "react-router-dom"; +import { useTranslation } from "react-i18next"; import { consumePostLoginRedirectPath, springAuth, @@ -7,6 +8,7 @@ import { import { markLoginLandingPending } from "@app/utils/loginLanding"; import { handleAuthCallbackSuccess } from "@app/extensions/authCallback"; import styles from "@app/routes/AuthCallback.module.css"; +import i18n from "@app/i18n"; /** * OAuth Callback Handler @@ -16,6 +18,7 @@ import styles from "@app/routes/AuthCallback.module.css"; * We extract it, store in localStorage, and redirect to the home page. */ export default function AuthCallback() { + const { t } = useTranslation(); const navigate = useNavigate(); const processingRef = useRef(false); @@ -31,7 +34,12 @@ export default function AuthCallback() { ) { navigate("/login", { replace: true, - state: { error: "You have been signed out. Please sign in again." }, + state: { + error: i18n.t( + "auth.callback.signedOut", + "You have been signed out. Please sign in again.", + ), + }, }); return; } @@ -50,7 +58,12 @@ export default function AuthCallback() { ); navigate("/login", { replace: true, - state: { error: "OAuth login failed - no token received." }, + state: { + error: i18n.t( + "auth.callback.missingToken", + "OAuth login failed - no token received.", + ), + }, }); return; } @@ -67,7 +80,12 @@ export default function AuthCallback() { localStorage.removeItem("stirling_jwt"); navigate("/login", { replace: true, - state: { error: "OAuth login failed - invalid token." }, + state: { + error: i18n.t( + "auth.callback.invalidToken", + "OAuth login failed - invalid token.", + ), + }, }); return; } @@ -93,7 +111,12 @@ export default function AuthCallback() { ); navigate("/login", { replace: true, - state: { error: "OAuth login failed. Please try again." }, + state: { + error: i18n.t( + "auth.callback.oauthFailed", + "OAuth login failed. Please try again.", + ), + }, }); } }; @@ -105,12 +128,20 @@ export default function AuthCallback() {
...
-
Completing authentication
+
+ {t("auth.callback.completing", "Completing authentication")} +
- Please wait while we finish signing you in. + {t( + "auth.callback.pleaseWait", + "Please wait while we finish signing you in.", + )}
- You can close this window once it completes. + {t( + "auth.callback.windowMayClose", + "You can close this window once it completes.", + )}
diff --git a/frontend/editor/src/proprietary/routes/Landing.tsx b/frontend/editor/src/proprietary/routes/Landing.tsx index d22acbba56..c377df1794 100644 --- a/frontend/editor/src/proprietary/routes/Landing.tsx +++ b/frontend/editor/src/proprietary/routes/Landing.tsx @@ -109,7 +109,9 @@ export default function Landing() { >
-
Loading...
+
+ {t("common.loading", "Loading...")} +
); diff --git a/frontend/editor/src/saas/components/shared/AppConfigModal.tsx b/frontend/editor/src/saas/components/shared/AppConfigModal.tsx index 7b579f3c43..32def0b196 100644 --- a/frontend/editor/src/saas/components/shared/AppConfigModal.tsx +++ b/frontend/editor/src/saas/components/shared/AppConfigModal.tsx @@ -302,15 +302,20 @@ const AppConfigModal: React.FC = ({ setConfirmOpen(false)} - title="Sign out" + title={t("settings.signOut.title", "Sign out")} centered zIndex={Z_INDEX_OVER_SETTINGS_MODAL} >
- Are you sure you want to sign out? + + {t( + "settings.signOut.confirm", + "Are you sure you want to sign out?", + )} +
diff --git a/frontend/editor/src/saas/components/shared/charts/StackedBarChart.tsx b/frontend/editor/src/saas/components/shared/charts/StackedBarChart.tsx index 589eda3d0f..b1ba0ed3ac 100644 --- a/frontend/editor/src/saas/components/shared/charts/StackedBarChart.tsx +++ b/frontend/editor/src/saas/components/shared/charts/StackedBarChart.tsx @@ -13,6 +13,7 @@ import { createScale, } from "@app/components/shared/charts/utils/d3Utils"; import "@app/components/shared/charts/StackedBarChart.css"; +import { useTranslation } from "react-i18next"; export default function StackedBarChart({ fractions, @@ -26,6 +27,7 @@ export default function StackedBarChart({ animationDurationMs = 900, ariaLabel, }: StackedBarChartProps) { + const { t } = useTranslation(); const containerRef = useRef(null); const tooltipRef = useRef(null); const hasAnimatedRef = useRef(false); @@ -309,7 +311,7 @@ export default function StackedBarChart({ outline: "1px solid var(--api-keys-card-border)", }} /> - Remaining + {t("common.remaining", "Remaining")} )} diff --git a/frontend/editor/src/saas/components/shared/config/ProfilePictureCropper.tsx b/frontend/editor/src/saas/components/shared/config/ProfilePictureCropper.tsx index 8230184a2c..0604307b32 100644 --- a/frontend/editor/src/saas/components/shared/config/ProfilePictureCropper.tsx +++ b/frontend/editor/src/saas/components/shared/config/ProfilePictureCropper.tsx @@ -144,7 +144,7 @@ export const ProfilePictureCropper: React.FC = ({ > {error && ( - + {error} )} From d4edff90596d27721c19a585ae8d83ec37ad7897 Mon Sep 17 00:00:00 2001 From: Ludy Date: Sun, 12 Jul 2026 23:33:09 +0200 Subject: [PATCH 09/12] fix(temp-files): prevent cleanup of active registered directories (#7006) --- .../service/TempFileCleanupService.java | 19 +++++++++++++++++- .../software/common/util/TempFileManager.java | 1 + .../common/util/TempFileRegistry.java | 12 +++++++++++ .../TempFileCleanupServiceMoreTest.java | 20 ++++++++++++++++++- 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/app/common/src/main/java/stirling/software/common/service/TempFileCleanupService.java b/app/common/src/main/java/stirling/software/common/service/TempFileCleanupService.java index 81b45aed09..438481c212 100644 --- a/app/common/src/main/java/stirling/software/common/service/TempFileCleanupService.java +++ b/app/common/src/main/java/stirling/software/common/service/TempFileCleanupService.java @@ -144,8 +144,10 @@ public class TempFileCleanupService { int directoriesDeletedCount = 0; for (Path directory : registry.getTempDirectories()) { try { - if (Files.exists(directory)) { + if (Files.exists(directory) + && shouldDeleteRegisteredDirectory(directory, maxAgeMillis)) { GeneralUtils.deleteDirectory(directory); + registry.unregisterDirectory(directory); directoriesDeletedCount++; log.debug("Cleaned up temporary directory: {}", directory); } @@ -275,6 +277,21 @@ public class TempFileCleanupService { return totalDeletedCount.get(); } + private boolean shouldDeleteRegisteredDirectory(Path directory, long maxAgeMillis) { + if (maxAgeMillis <= 0) { + return true; + } + + try { + long currentTime = System.currentTimeMillis(); + long lastModified = Files.getLastModifiedTime(directory).toMillis(); + return (currentTime - lastModified) > maxAgeMillis; + } catch (IOException e) { + log.debug("Could not check directory age, skipping cleanup: {}", directory, e); + return false; + } + } + /** Get the system temp directory path based on configuration or system property. */ private Path getSystemTempPath() { String systemTempDir = diff --git a/app/common/src/main/java/stirling/software/common/util/TempFileManager.java b/app/common/src/main/java/stirling/software/common/util/TempFileManager.java index ff31975837..0d977e7d06 100644 --- a/app/common/src/main/java/stirling/software/common/util/TempFileManager.java +++ b/app/common/src/main/java/stirling/software/common/util/TempFileManager.java @@ -155,6 +155,7 @@ public class TempFileManager { if (directory != null && Files.isDirectory(directory)) { try { GeneralUtils.deleteDirectory(directory); + registry.unregisterDirectory(directory); log.debug("Deleted temp directory: {}", directory.toString()); } catch (IOException e) { log.warn("Failed to delete temp directory: {}", directory.toString(), e); diff --git a/app/common/src/main/java/stirling/software/common/util/TempFileRegistry.java b/app/common/src/main/java/stirling/software/common/util/TempFileRegistry.java index ab1304f5e4..84a3c12272 100644 --- a/app/common/src/main/java/stirling/software/common/util/TempFileRegistry.java +++ b/app/common/src/main/java/stirling/software/common/util/TempFileRegistry.java @@ -85,6 +85,18 @@ public class TempFileRegistry { return directory; } + /** + * Unregister a temporary directory from the registry. + * + * @param directory The directory to unregister + */ + public void unregisterDirectory(Path directory) { + if (directory != null) { + tempDirectories.remove(directory); + log.debug("Unregistered temp directory: {}", directory.toString()); + } + } + /** * Register a third-party temporary file that requires special handling. * diff --git a/app/common/src/test/java/stirling/software/common/service/TempFileCleanupServiceMoreTest.java b/app/common/src/test/java/stirling/software/common/service/TempFileCleanupServiceMoreTest.java index 802dc2eace..cfbe950574 100644 --- a/app/common/src/test/java/stirling/software/common/service/TempFileCleanupServiceMoreTest.java +++ b/app/common/src/test/java/stirling/software/common/service/TempFileCleanupServiceMoreTest.java @@ -176,11 +176,13 @@ class TempFileCleanupServiceMoreTest { class ScheduledCleanup { @Test - @DisplayName("deletes registered temp directories and reports counts") + @DisplayName("deletes stale registered temp directories and reports counts") void deletesRegisteredDirectories() throws IOException { when(tempFileManager.cleanupOldTempFiles(anyLong())).thenReturn(2); Path regDir = Files.createDirectories(tempDir.resolve("registeredDir")); Files.createFile(regDir.resolve("inside.txt")); + Files.setLastModifiedTime( + regDir, FileTime.fromMillis(System.currentTimeMillis() - 2L * 60 * 60 * 1000)); Set dirs = new HashSet<>(); dirs.add(regDir); when(registry.getTempDirectories()).thenReturn(dirs); @@ -193,6 +195,22 @@ class TempFileCleanupServiceMoreTest { verify(tempFileManager).cleanupOldTempFiles(anyLong()); } + @Test + @DisplayName("keeps a fresh registered temp directory") + void keepsFreshRegisteredDirectory() throws IOException { + when(tempFileManager.cleanupOldTempFiles(anyLong())).thenReturn(0); + Path regDir = Files.createDirectories(tempDir.resolve("freshRegisteredDir")); + Files.createFile(regDir.resolve("inside.txt")); + Set dirs = new HashSet<>(); + dirs.add(regDir); + when(registry.getTempDirectories()).thenReturn(dirs); + lenient().when(registry.contains(any(File.class))).thenReturn(false); + + withIsolatedUserHome(cleanupService::scheduledCleanup); + + assertThat(Files.exists(regDir)).isTrue(); + } + @Test @DisplayName("skips a registered directory that no longer exists") void skipsMissingRegisteredDirectory() { From c1e68c27c57c844442556e15398772ca5116ff04 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Mon, 13 Jul 2026 00:55:43 +0100 Subject: [PATCH 10/12] Portal Documents: SVG lock and timer icons (#7000) # Description of Changes Replaces the emoji lock and timer icons in the document queue and extraction views with stroke SVG icons. Part of a portal (processor) UI-consistency pass, split into small focused PRs. ## Before / after --- ## Checklist ### General - [x] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md) (if applicable) - [x] I have performed a self-review of my own code - [x] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### Translations (if applicable) - [ ] I ran [`scripts/counter_translation.py`](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/docs/counter_translation.md) ### UI Changes (if applicable) - [x] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have run `task check` to verify linters, typechecks, and tests pass - [x] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#7-testing) for more details. --- .../src/portal/components/documents/DocumentExtractions.tsx | 3 ++- .../src/portal/components/documents/ElevationBanner.tsx | 6 ++++-- .../src/portal/components/documents/ReviewQueueTable.tsx | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/frontend/editor/src/portal/components/documents/DocumentExtractions.tsx b/frontend/editor/src/portal/components/documents/DocumentExtractions.tsx index e43076dae3..3c6de80c93 100644 --- a/frontend/editor/src/portal/components/documents/DocumentExtractions.tsx +++ b/frontend/editor/src/portal/components/documents/DocumentExtractions.tsx @@ -1,4 +1,5 @@ import { useTranslation } from "react-i18next"; +import LockRounded from "@mui/icons-material/LockRounded"; import { StatusBadge, Table, type TableColumn } from "@app/ui"; import { type Extraction, type ReviewDocument } from "@portal/api/documents"; import { @@ -55,7 +56,7 @@ export function DocumentExtractions({ return (
- 🔒 +

{t("portal.documents.extractions.masked")} diff --git a/frontend/editor/src/portal/components/documents/ElevationBanner.tsx b/frontend/editor/src/portal/components/documents/ElevationBanner.tsx index 429cd606cb..67a26ad1c2 100644 --- a/frontend/editor/src/portal/components/documents/ElevationBanner.tsx +++ b/frontend/editor/src/portal/components/documents/ElevationBanner.tsx @@ -1,4 +1,6 @@ import { useTranslation } from "react-i18next"; +import ScheduleRounded from "@mui/icons-material/ScheduleRounded"; +import LockRounded from "@mui/icons-material/LockRounded"; import { Banner, Button } from "@app/ui"; import { formatCountdown } from "@portal/components/documents/format"; @@ -26,7 +28,7 @@ export function ElevationBanner({ return ( ⏱} + icon={} title={t("portal.documents.elevation.active.title", { time: formatCountdown(secondsLeft), })} @@ -42,7 +44,7 @@ export function ElevationBanner({ return ( 🔒} + icon={} title={t("portal.documents.elevation.gated.title")} description={ fourEyes diff --git a/frontend/editor/src/portal/components/documents/ReviewQueueTable.tsx b/frontend/editor/src/portal/components/documents/ReviewQueueTable.tsx index dffa7305d7..bff13d0c4f 100644 --- a/frontend/editor/src/portal/components/documents/ReviewQueueTable.tsx +++ b/frontend/editor/src/portal/components/documents/ReviewQueueTable.tsx @@ -1,5 +1,6 @@ import { useMemo } from "react"; import { useTranslation } from "react-i18next"; +import LockRounded from "@mui/icons-material/LockRounded"; import { Button, Chip, StatusBadge, Table, type TableColumn } from "@app/ui"; import { classificationTone, @@ -75,7 +76,7 @@ export function ReviewQueueTable({ title={t("portal.documents.table.sensitiveTitle")} aria-label={t("portal.documents.table.sensitiveLabel")} > - 🔒 + )}

From 52358c5bf906d235789340f366985151095c3f1e Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Mon, 13 Jul 2026 00:55:54 +0100 Subject: [PATCH 11/12] Portal Agent Builder: SVG upload icon (#7001) # Description of Changes Replaces the upload glyph in the agent bootstrap dialog with a proper SVG icon. Part of a portal (processor) UI-consistency pass, split into small focused PRs. ## Before / after --- ## Checklist ### General - [x] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md) (if applicable) - [x] I have performed a self-review of my own code - [x] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### Translations (if applicable) - [ ] I ran [`scripts/counter_translation.py`](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/docs/counter_translation.md) ### UI Changes (if applicable) - [x] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have run `task check` to verify linters, typechecks, and tests pass - [x] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#7-testing) for more details. --- .../src/portal/components/agent-builder/BootstrapDialog.tsx | 3 ++- frontend/editor/src/portal/views/AgentBuilder.tsx | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/editor/src/portal/components/agent-builder/BootstrapDialog.tsx b/frontend/editor/src/portal/components/agent-builder/BootstrapDialog.tsx index a6b28688e6..27b076eb69 100644 --- a/frontend/editor/src/portal/components/agent-builder/BootstrapDialog.tsx +++ b/frontend/editor/src/portal/components/agent-builder/BootstrapDialog.tsx @@ -1,5 +1,6 @@ import { useState } from "react"; import { useTranslation } from "react-i18next"; +import FileUploadRounded from "@mui/icons-material/FileUploadRounded"; import { Button, Modal } from "@app/ui"; import "@portal/views/AgentBuilder.css"; @@ -58,7 +59,7 @@ export function BootstrapDialog({ open, onClose }: BootstrapDialogProps) { onChange={(e) => setFileName(e.target.files?.[0]?.name ?? null)} /> - ⇪ + {fileName ?? t("portal.agentBuilder.bootstrap.dropzoneText")} diff --git a/frontend/editor/src/portal/views/AgentBuilder.tsx b/frontend/editor/src/portal/views/AgentBuilder.tsx index efa319c146..30a8f5e14e 100644 --- a/frontend/editor/src/portal/views/AgentBuilder.tsx +++ b/frontend/editor/src/portal/views/AgentBuilder.tsx @@ -1,5 +1,6 @@ import { useState } from "react"; import { useTranslation } from "react-i18next"; +import FileUploadRounded from "@mui/icons-material/FileUploadRounded"; import { Button, EmptyState, Skeleton } from "@app/ui"; import { useTier } from "@portal/contexts/TierContext"; import { useAsync, useSectionFlags } from "@portal/hooks/useAsync"; @@ -41,7 +42,7 @@ export function AgentBuilder() { From a84b375f5df5fda340cc75b79747141d77775634 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Mon, 13 Jul 2026 00:56:07 +0100 Subject: [PATCH 12/12] Portal Pipelines: SVG pipeline icon (#7002) # Description of Changes Replaces the chain glyph in the pipelines table with a proper pipeline icon. Part of a portal (processor) UI-consistency pass, split into small focused PRs. ## Before / after --- ## Checklist ### General - [x] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md) (if applicable) - [x] I have performed a self-review of my own code - [x] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### Translations (if applicable) - [ ] I ran [`scripts/counter_translation.py`](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/docs/counter_translation.md) ### UI Changes (if applicable) - [x] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have run `task check` to verify linters, typechecks, and tests pass - [x] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#7-testing) for more details. --- .../editor/src/portal/components/pipelines/PipelinesTable.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/editor/src/portal/components/pipelines/PipelinesTable.tsx b/frontend/editor/src/portal/components/pipelines/PipelinesTable.tsx index 42550e28a4..38c46547ca 100644 --- a/frontend/editor/src/portal/components/pipelines/PipelinesTable.tsx +++ b/frontend/editor/src/portal/components/pipelines/PipelinesTable.tsx @@ -1,5 +1,6 @@ import { useMemo } from "react"; import { useTranslation } from "react-i18next"; +import AccountTreeRounded from "@mui/icons-material/AccountTreeRounded"; import ChevronRightRoundedIcon from "@mui/icons-material/ChevronRightRounded"; import { Chip, @@ -31,7 +32,7 @@ export function PipelinesTable({ pipelines, onRowClick }: PipelinesTableProps) { render: (p) => (
- ⛓ +
{p.name}